diff --git a/ivette/Makefile b/ivette/Makefile
index 2f7a87746c53be6542f0388fbcbefcd44d518a2d..e13ab0023441616a14819771aa05d7231558c570 100644
--- a/ivette/Makefile
+++ b/ivette/Makefile
@@ -12,7 +12,6 @@ COPYRIGHT=CEA LIST / LSL
 
 app: dome-app
 dev: dome-dev
-doc: dome-doc
 dist: dome-dist
 
 typecheck:
@@ -23,6 +22,28 @@ lint:
 	@echo "[Ivette] running ts linter"
 	yarn run lint
 
+# --------------------------------------------------------------------------
+# --- Ivette Documentation
+# --------------------------------------------------------------------------
+
+# can also use dome-doc to generate Dome-only documentation
+
+D_JSDOC=$(CURDIR)/node_modules/.bin/jsdoc
+D_ICONS=$(addprefix $(DOME)/doc/template/gallery-, head.html icons.html tail.html)
+D_OUT=./doc/html
+
+doc: $(D_JSDOC) $(D_ICONS)
+	@echo "[Ivette] documentation"
+	@rm -fr ./build ./doc
+	@yarn run build
+	@mkdir -p ./doc/html
+	@(APP=$(APP) COPYRIGHT="$(COPYRIGHT)" DOME=$(DOME) \
+	  yarn exec jsdoc -- -c jsdoc.json -d doc/html)
+	@cat $(D_ICONS) > $(D_OUT)/tutorial-icons.html
+	@cp -f $(DOME)/doc/gallery.css $(D_OUT)/styles/
+	@cp -f $(DOME)/doc/tutorials/*.png $(D_OUT)/
+	@echo "[Ivette]   $(DOME_DOC)/index.html"
+
 # --------------------------------------------------------------------------
 # --- Ivette Plugins
 # --------------------------------------------------------------------------
diff --git a/ivette/README.md b/ivette/README.md
index d21bc144e9872742689303976495347e423de18b..584760847f04c0e603effac7e839ddb88ee4f095 100644
--- a/ivette/README.md
+++ b/ivette/README.md
@@ -6,11 +6,15 @@ From the `./ivette` sub-directory of Frama-C main directory:
 $ make app
 ```
 
-## Typescript & Emacs
+## Typescript Editors
 
 Emacs mode configuration can be setup with Typescript, Web-mode and Tide packages
 which are all available with MELPA. For configuring your `.emacs` accordingly,
-please look at the [EMACS](./EMACS.el) file.
+please look at the `EMACS.el`. This setup the Tide package to work with
+`typescript-mode` for `*.ts` files (see also `tsfmt.json` config file)
+and `web-mode` for `*.tsx` files.
+
+VS-Code is also known to work out of the box.
 
 ## Mirroring to Dome/Electron
 
diff --git a/ivette/jsdoc.json b/ivette/jsdoc.json
new file mode 100644
index 0000000000000000000000000000000000000000..3737d8aa52005edc2b83fef5b60bb6808e436d60
--- /dev/null
+++ b/ivette/jsdoc.json
@@ -0,0 +1,21 @@
+{
+  "source": {
+    "include": [
+      "src/dome/doc/README.md",
+      "build"
+    ]
+  },
+  "opts": {
+    "recurse": true,
+    "tutorials": "src/dome/doc/tutorials",
+    "template": "src/dome/doc/template"
+  },
+  "plugins": [ "plugins/markdown" ],
+  "templates": {
+    "default": {
+      "useLongnameInNav": true,
+      "outputSourceFiles": false,
+      "includeDate": false
+    }
+  }
+}
diff --git a/ivette/src/dome/src/renderer/controls/buttons.js b/ivette/src/dome/src/renderer/controls/buttons.js
index b45d013581db44b37ae5bece3c788d6a3baf31ee..de0d4d2aecac192fd979a394cd6ddd998826bfe6 100644
--- a/ivette/src/dome/src/renderer/controls/buttons.js
+++ b/ivette/src/dome/src/renderer/controls/buttons.js
@@ -51,7 +51,7 @@ export const LCD = (props) => (
 // --------------------------------------------------------------------------
 
 /**
-   @summary Led indicator
+   @summary Led indicator.
    @property {string} [status] - Led status and color (default: inactive)
    @property {boolean} [blink] - Led blinking (default: false)
    @property {string} [title] - Led tooltip (optional)
@@ -491,7 +491,7 @@ export const Select = (props) => {
 // --------------------------------------------------------------------------
 
 /**
-   @summary Text Field
+   @summary Text Field.
    @property {string} [value] - Field initial content
    @property {string} [edited] - Field current value
    @property {boolean} [enabled] - Defaults to `true`
diff --git a/ivette/src/dome/src/renderer/dome.js b/ivette/src/dome/src/renderer/dome.js
index 8f0e432ed95109ca857ff8c9e1177973ef11c200..322257c62587ae45744e4eee0f47106d935aeaef 100644
--- a/ivette/src/dome/src/renderer/dome.js
+++ b/ivette/src/dome/src/renderer/dome.js
@@ -566,7 +566,7 @@ ipcRenderer.on('dome.ipc.href',(href) => emitter.emit('dome.href',href));
 // --------------------------------------------------------------------------
 
 /**
-   @summary Inlined Function React Component
+   @summary Inlined Function React Component.
    @property {function} children - render function as children
    @description
    Allows to define an inlined functional component inside JSX.
diff --git a/ivette/src/dome/src/renderer/layout/boxes.js b/ivette/src/dome/src/renderer/layout/boxes.js
index 52094e3166029afa00203f9c2f2bc1ea62a32851..5719f246a0f2498fb8b3469f920e7aa265d2d918 100644
--- a/ivette/src/dome/src/renderer/layout/boxes.js
+++ b/ivette/src/dome/src/renderer/layout/boxes.js
@@ -64,7 +64,7 @@ const makeBox = ( boxClasses, props, morestyle ) => {
 // --------------------------------------------------------------------------
 
 /**
-   @summary Horizontal box (extends horizontally, no overflow)
+   @summary Horizontal box (extends horizontally, no overflow).
    @property {object} [...props] - Extra properties passed to the `<div>` container
    @description
    <strong>Warning:</strong> large elements will be clipped if they overflow.
@@ -72,7 +72,7 @@ const makeBox = ( boxClasses, props, morestyle ) => {
 export const Hbox = (props) => makeBox( 'dome-xBoxes-hbox dome-xBoxes-box' , props );
 
 /**
-   @summary Vertical box (extends vertically, no overflow)
+   @summary Vertical box (extends vertically, no overflow).
    @property {object} [...props] - Extra properties passed to the `<div>` container
    @description
    <strong>Warning:</strong> large elements will be clipped if they overflow.
@@ -80,7 +80,7 @@ export const Hbox = (props) => makeBox( 'dome-xBoxes-hbox dome-xBoxes-box' , pro
 export const Vbox = (props) => makeBox( 'dome-xBoxes-vbox dome-xBoxes-box' , props );
 
 /**
-   @summary Compact Horizontal box (fixed dimensions, no overflow)
+   @summary Compact Horizontal box (fixed dimensions, no overflow).
    @property {object} [...props] - Extra properties passed to the `<div>` container
    @description
    <strong>Warning:</strong> large elements would be clipped if they overflow.
@@ -88,7 +88,7 @@ export const Vbox = (props) => makeBox( 'dome-xBoxes-vbox dome-xBoxes-box' , pro
 export const Hpack = (props) => makeBox( 'dome-xBoxes-hbox dome-xBoxes-pack' , props );
 
 /**
-   @summary Compact Vertical box (fixed dimensions, no overflow)
+   @summary Compact Vertical box (fixed dimensions, no overflow).
    @property {object} [...props] - Extra properties passed to the `<div>` container
    @description
    <strong>Warning:</strong> large elements will be clipped if they overflow.
@@ -96,7 +96,7 @@ export const Hpack = (props) => makeBox( 'dome-xBoxes-hbox dome-xBoxes-pack' , p
 export const Vpack = (props) => makeBox( 'dome-xBoxes-vbox dome-xBoxes-pack' , props );
 
 /**
-   @summary Horizontally filled box (fixed height, maximal width, no overflow)
+   @summary Horizontally filled box (fixed height, maximal width, no overflow).
    @property {object} [...props] - Extra properties passed to the `<div>` container
    @description
    <strong>Warning:</strong> large elements will be clipped if they overflow.
@@ -104,7 +104,7 @@ export const Vpack = (props) => makeBox( 'dome-xBoxes-vbox dome-xBoxes-pack' , p
 export const Hfill = (props) => makeBox( 'dome-xBoxes-hbox dome-xBoxes-fill' , props );
 
 /**
-   @summary Vertically filled box (fixed width, maximal height, no overflow)
+   @summary Vertically filled box (fixed width, maximal height, no overflow).
    @property {object} [...props] - Extra properties passed to the `<div>` container
    @description
    <strong>Warning:</strong> large elements will be clipped if they overflow.
@@ -116,19 +116,19 @@ export const Vfill = (props) => makeBox( 'dome-xBoxes-vbox dome-xBoxes-fill' , p
 // --------------------------------------------------------------------------
 
 /**
-   @summary Scrolling container
+   @summary Scrolling container.
    @property {object} [...props] - Extra properties passed to the `<div>` container
 */
 export const Scroll = (props) => makeBox( 'dome-xBoxes-scroll dome-container' , props );
 
 /**
-   @summary rigid space between items in a box
+   @summary Rigid space between items in a box.
    @property {object} [...props] - Extra properties passed to the `<div>` separator
 */
 export const Space = (props) => makeBox( 'dome-xBoxes-space' , props );
 
 /**
-   @summary extensible space between items in a box
+   @summary Extensible space between items in a box.
    @property {object} [...props] - Extra properties passed to the `<div>` separator
 */
 export const Filler = (props) => makeBox( 'dome-xBoxes-filler' , props );
@@ -138,7 +138,7 @@ export const Filler = (props) => makeBox( 'dome-xBoxes-filler' , props );
 // --------------------------------------------------------------------------
 
 /**
-   @summary Grid box container
+   @summary Grid box container.
    @property {string} [columns] - Grid column specifications
    @property {object} [...props] - Extra properties passed to the `<div>` container
    @description
@@ -158,7 +158,7 @@ export const Grid = ({columns='auto',...props}) =>
 // --------------------------------------------------------------------------
 
 /**
-   @summary Foldable Vpack box
+   @summary Foldable Vpack box.
    @property {string} label - box label
    @property {string} [title] - box label tooltip
    @property {string} [settings] - window setting to store the fold/unfold state
@@ -167,7 +167,8 @@ export const Grid = ({columns='auto',...props}) =>
    @description
    A vertical `Vpack` box with a clickable head label to fold/unfold its content.
 */
-export function Folder( { settings, defaultUnfold=false, indent=18, label, title, children } )
+export const Folder =
+  ({ settings, defaultUnfold=false, indent=18, label, title, children }) =>
 {
   const [ unfold , setUnfold ] = Dome.useState( settings, defaultUnfold );
   const icon = unfold ? 'TRIANGLE.DOWN' : 'TRIANGLE.RIGHT' ;
@@ -180,7 +181,7 @@ export function Folder( { settings, defaultUnfold=false, indent=18, label, title
       </Vpack>
     </Vpack>
   );
-}
+};
 
 // --------------------------------------------------------------------------
 
diff --git a/ivette/src/dome/src/renderer/layout/dispatch.js b/ivette/src/dome/src/renderer/layout/dispatch.js
index 6cb1694d738c041e9bd88848b4e29f550be96443..c1953f8c53a29a28a83374cfebbf854e0333837b 100644
--- a/ivette/src/dome/src/renderer/layout/dispatch.js
+++ b/ivette/src/dome/src/renderer/layout/dispatch.js
@@ -58,7 +58,7 @@ const removeItem = (id) => {
 // --------------------------------------------------------------------------
 
 /**
-   @summary Define dispatched item
+   @summary Define dispatched item.
    @property {string} id - the item _global_ unique identifier
    @property {React.Children} {children} - item contents
    @description
@@ -81,7 +81,7 @@ export function Item({ id, children })
 // --------------------------------------------------------------------------
 
 /**
-   @summary Render dispatched item
+   @summary Render dispatched item.
    @property {string} id - the item _global_ unique identifier to render
    @property {function|React.Children} {children} - conditional or alternative content (default: `null`)
    @description
diff --git a/ivette/src/dome/src/renderer/layout/forms.js b/ivette/src/dome/src/renderer/layout/forms.js
index 193ce1303ba56b3cad101334ec5a7bf95493d90a..81b2edf4b41bc4bf94d06c745306148cbc29c6b4 100644
--- a/ivette/src/dome/src/renderer/layout/forms.js
+++ b/ivette/src/dome/src/renderer/layout/forms.js
@@ -176,7 +176,7 @@ const PERIOD = (latency) => {
 };
 
 /**
-   @summary Generic context wrapper for field values
+   @summary Generic context wrapper for field values.
    @property {string} [path] - select a property in the context value (and error)
    @property {any} [value] - set the inherited or edited value
    @property {any} [error] - set the inherited or edited error
@@ -300,7 +300,7 @@ export function Select({
 // --------------------------------------------------------------------------
 
 /**
-   @summary Form Container
+   @summary Form Container.
    @property {string} [className] - Container additional class
    @property {object} [style] - Container additional style
    @property {object} [value] - Set the form context value
@@ -350,7 +350,7 @@ const ERROR_MSG = (error) => {
 };
 
 /**
-   @summary Warning badge with description
+   @summary Warning badge with description.
    @property {string} [warn] - the short message (hovered)
    @property {number} [offset] - the label offset (Cf. field)
    @property {any} [error] - the error description (in tooltip)
@@ -381,7 +381,7 @@ const TITLE_ENABLED = 'dome-text-title' ;
 const TITLE_DISABLED = 'dome-text-title dome-disabled' ;
 
 /**
-   @summary Expandable Section sub-form
+   @summary Expandable Section sub-form.
    @property {string} label - Section title
    @property {string} [title] - Tooltip text
    @property {string} [path] - Fields selection
@@ -430,7 +430,7 @@ export function Section(props)
 // --------------------------------------------------------------------------
 
 /**
-   @summary Full width form block
+   @summary Full width form block.
    @property {any} [...props] - [Select](module-dome_layout_forms.Select.html) properties
    @property {React.children|function} [children] - Block content
    @description
@@ -459,7 +459,7 @@ const FIELD_DISABLED = 'dome-xForm-field dome-text-label dome-disabled';
 
 /**
    @class
-   @summary Generic Custom Field
+   @summary Generic Custom Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {number} [offset] - Vertical label offset (for baseline alignment)
@@ -520,7 +520,7 @@ export class Field extends React.Component
 // --------------------------------------------------------------------------
 
 /**
-   @summary Field List Container
+   @summary Field List Container.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {boolean} [warn] - Display errors (default: `false`)
@@ -548,7 +548,7 @@ export const FieldList = ({ label, title, warn=false, children, ...props }) => (
 // --------------------------------------------------------------------------
 
 /**
-   @summary Text Field
+   @summary Text Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [placeholder] - Input field place holder
@@ -579,7 +579,7 @@ export const FieldText = ({ className, style, latency=true, placeholder, ...prop
 // --------------------------------------------------------------------------
 
 /**
-   @summary Monospaced Text Field
+   @summary Monospaced Text Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [placeholder] - Input field place holder
@@ -610,7 +610,7 @@ export const FieldCode = ({ className, style, latency=true, placeholder, ...prop
 // --------------------------------------------------------------------------
 
 /**
-   @summary Text Area Field
+   @summary Text Area Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [className] - Input field additional class
@@ -646,7 +646,7 @@ export const FieldTextArea = ({ className, style, cols=35, rows=5,
 // --------------------------------------------------------------------------
 
 /**
-   @summary Text Area Field
+   @summary Text Area Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [className] - Input field additional class
@@ -699,7 +699,7 @@ const TEXT_OF_NUMBER = (v) => v===undefined ? '' : PARSE_NUMBER(v,true).toLocale
 const NUMBER_OF_TEXT = (s) => s==='' ? undefined : PARSE_NUMBER(s.replace(/[ ,]/g,''));
 
 /**
-   @summary Number Field
+   @summary Number Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [placeholder] - Input field place holder
@@ -761,7 +761,7 @@ const INT_RANGE = (min,max,warning) => (v) =>
       warning || 'Range ' + min + '…' + max ;
 
 /**
-   @summary Spinner Field
+   @summary Spinner Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [placeholder] - Input field place holder
@@ -858,7 +858,7 @@ class REVEAL extends React.Component {
 
 
 /**
-   @summary Slider Field
+   @summary Slider Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {number} [min] - Minimum value (default: -24)
@@ -907,7 +907,7 @@ export const FieldSlider =
 // --------------------------------------------------------------------------
 
 /**
-   @summary Date Field
+   @summary Date Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [min] - Minimum date (default to `undefined`)
@@ -940,7 +940,7 @@ export const FieldDate = ({ className, style, latency=true, min, max, ...props }
 // --------------------------------------------------------------------------
 
 /**
-   @summary Time Field
+   @summary Time Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [min] - Minimum time (default to `undefined`)
@@ -974,7 +974,7 @@ export const FieldTime = ({ className, style, latency=true, min, max, ...props }
 // --------------------------------------------------------------------------
 
 /**
-   @summary Color Field
+   @summary Color Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [className] - Input field additional class
@@ -1003,7 +1003,7 @@ export const FieldColor = ({ className, style, latency=true, ...props }) => (
 // --------------------------------------------------------------------------
 
 /**
-   @summary Select Field
+   @summary Select Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {string} [placeholder] - Selector placeholder
@@ -1044,7 +1044,7 @@ export const FieldSelect = ({ className, style, children, placeholder, ...props
 // --------------------------------------------------------------------------
 
 /**
-   @summary Checkbox Field
+   @summary Checkbox Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {boolean} [inverted] - Inverted value (incompatible with `input` and `output` properties)
@@ -1072,7 +1072,7 @@ export const FieldCheckbox = ({ label, title, inverted, ...props }) => {
 // --------------------------------------------------------------------------
 
 /**
-   @summary Radio Button Field
+   @summary Radio Button Field.
    @property {string} [label] - Field label
    @property {string} [title] - Field tooltip text
    @property {any} [value] - Value associated with the radio button
diff --git a/ivette/src/dome/src/renderer/layout/grids.js b/ivette/src/dome/src/renderer/layout/grids.js
index ccb5e46c344af884acb4d308893015de51ef192a..facd9df969474ab9e63c0988154b818321c1f091 100644
--- a/ivette/src/dome/src/renderer/layout/grids.js
+++ b/ivette/src/dome/src/renderer/layout/grids.js
@@ -745,7 +745,7 @@ function orderElements( e1 , e2 )
 // --------------------------------------------------------------------------
 
 /**
-   @summary Elementary GridLayout Component
+   @summary Elementary GridLayout Component.
    @property {string} id - Component identifier
    @property {boolean} display - Whether to mount the component
    @property {number} width - Desired component width
@@ -935,7 +935,7 @@ function makeChildrenGrid( dir, items, children, shape )
 
 /**
    @class
-   @summary Grid-based Flexible Container
+   @summary Grid-based Flexible Container.
    @property {direction} [dir] - Default children layout (`'horizontal'` or `'vertical'`)
    @property {number}    [padding] - Padding between items
    @property {Shape}     [shape] - The desired shape (defaults to children grid)
@@ -1097,7 +1097,7 @@ const DRAGGABLEITEM =
 
 /**
    @class
-   @summary Grid Container
+   @summary Grid Container.
    @property {direction} [dir] - Default children layout (`'horizontal'` or `'vertical'`)
    @property {number}    [padding] - Padding between items
    @property {Shape}     [shape] - The desired shape (defaults to children grid)
diff --git a/ivette/src/dome/src/renderer/layout/pages.js b/ivette/src/dome/src/renderer/layout/pages.js
index 326344a42c33b78b57889425ff0f85884ec5c01f..9cfa0c6e11c9f02523e3faadcbada26744fef739 100644
--- a/ivette/src/dome/src/renderer/layout/pages.js
+++ b/ivette/src/dome/src/renderer/layout/pages.js
@@ -32,9 +32,9 @@ import './pages.css' ;
 // --------------------------------------------------------------------------
 
 /**
+   @summary Blank HTML page.
    @property {object} [style] - additional style elements
    @property {Elements} [children] - page content
-   @summary a blank HTML page
    @description
 
    The page has insets and shadows and fills the entire available area.
@@ -56,9 +56,9 @@ export const Page = ({style,children}) => {
 // --------------------------------------------------------------------------
 
 /**
+   @summary Blank HTML textarea.
    @property {object} [style] - additional style elements
    @property {Elements} [children] - page content
-   @summary a blank HTML textarea
    @description
 
    The area has small padding and no margin, and does not scroll its content.
diff --git a/ivette/src/dome/src/renderer/layout/sidebars.js b/ivette/src/dome/src/renderer/layout/sidebars.js
index 74a7929e8fbb5334c5c0f41e8790e265b09ba82c..29f9c4428a9a5788e68d9a2e6e69afc79292ae4f 100644
--- a/ivette/src/dome/src/renderer/layout/sidebars.js
+++ b/ivette/src/dome/src/renderer/layout/sidebars.js
@@ -17,7 +17,7 @@ const SideBarContext = React.createContext();
 // --------------------------------------------------------------------------
 
 /**
-   @summary Container for sidebar items
+   @summary Container for sidebar items.
    @property {Elements} [children] - Side bar items
    @property {string} [settings] - Side bar items settings
    @property {string} [selection] - Current item selection
@@ -140,6 +140,7 @@ export function Section(props) {
 // --------------------------------------------------------------------------
 
 /**
+   @summary Sidebar Section Items.
    @property {string} [id] - Item identifier
    @property {string} [label] - **Item label**
    @property {string} [icon] - Item icon
@@ -151,7 +152,6 @@ export function Section(props) {
    @property {function} [onContextMenu] - Context Menu callback
    @property {Badge} [badge] - Badge element(s)
    @property {React.Children} [children] - Item additional content
-   @summary Sidebar Section Items
    @description
 
    The item will be highlighted if selected _via_ the `selection` property of the
diff --git a/ivette/src/dome/src/renderer/layout/splitters.js b/ivette/src/dome/src/renderer/layout/splitters.js
index 18007cfbbfcd7959ce319e884fb520b1af6977ac..fd3d17c956f7e50190bdc5fa8c6b819f811f46a7 100644
--- a/ivette/src/dome/src/renderer/layout/splitters.js
+++ b/ivette/src/dome/src/renderer/layout/splitters.js
@@ -89,7 +89,7 @@ const LR = {
 
 /**
    @class
-   @summary Draggable split pane
+   @summary Draggable split pane.
    @property {Direction} [dir]  - Layout and dimensionning strategy
    @property {string} [settings] - User-settings key for persistent splitter position
    @property {number} [margin]  - Minimal margin from container edges
diff --git a/ivette/src/dome/src/renderer/layout/toolbars.js b/ivette/src/dome/src/renderer/layout/toolbars.js
index 2979b0a4af681575cec38b8e17eae9e3895ad026..890f15daf962a2bea2130b1b65f26a8e990e225c 100644
--- a/ivette/src/dome/src/renderer/layout/toolbars.js
+++ b/ivette/src/dome/src/renderer/layout/toolbars.js
@@ -13,7 +13,7 @@ import './toolbars.css' ;
 
 /**
    @class
-   @summary Container for toolbar items
+   @summary Container for toolbar items.
    @description
    See also [Frame](module-dome_layout_frames.Frame.html) containers.
  */
@@ -41,22 +41,22 @@ export class ToolBar extends React.Component {
 // --------------------------------------------------------------------------
 
 /**
-   @summary Fixed (tiny) space
+   @summary Fixed (tiny) space.
 */
 export const Inset = (() => <div className='dome-xToolBar-inset'/>);
 
 /**
-   @summary Fixed space
+   @summary Fixed space.
 */
 export const Space = (() => <div className='dome-xToolBar-space'/>);
 
 /**
-   @summary Extensible space (can be used to right-align controls)
+   @summary Extensible space (can be used to right-align controls).
 */
 export const Filler = (() => <div className='dome-xToolBar-filler'/>);
 
 /**
-   @summary Vertical rule
+   @summary Vertical rule.
 */
 export const Separator = () => (
   <div className='dome-xToolBar-separator'>
@@ -82,6 +82,7 @@ const isDisabled = ( { enabled=true, disabled=false } ) => (disabled || !enabled
 const onClick = ( { onClick , value } ) => onClick ? (() => onClick(value)) : undefined ;
 
 /**
+   @summary Toolbar Button.
    @property {string} [icon] - Button icon name (See [gallery](gallery-icons.html))
    @property {string} [label] - Button label
    @property {string} [title] - Button tooltip
@@ -92,7 +93,6 @@ const onClick = ( { onClick , value } ) => onClick ? (() => onClick(value)) : un
    @property {any} [value] - button's value
    @property {any} [selection] - Currently selected value
    @property {function} [onClick] - Button callback (receives the current value)
-   @summary toolbar button
    @description
 
    By default, the propery `selected` is computed from properties `value`
@@ -125,11 +125,11 @@ export const Button = ( props ) => (
 // --------------------------------------------------------------------------
 
 /**
+   @summary Toolbar Button Group.
    @property {Button[]} children - Buttons in the group
    @property {any} [value] - Passed to children as `selection` property
    @property {any} [onChange] - Passed to children as `onClick` property
    @property {any} [...props] - Properties passed to all children
-   @summary toolbar button group
 */
 export const ButtonGroup = (props) => {
   const { children, value, onChange, ...otherProps } = props;
@@ -147,12 +147,12 @@ export const ButtonGroup = (props) => {
 // --------------------------------------------------------------------------
 
 /**
+   @summary Toolbar Selector Menu.
    @property {any} [value] - selected option's value
    @property {function} [onChange] - selection callback (receives option value)
    @property {boolean} [disabled] - disable the selector (default: `false`)
    @property {boolean} [enabled] - enable the selector (default: `true`)
    @property {option[]} children - Array of menu options
-   @summary Toolbar selector menu
    @description
 
    Behaves likes a standard `<select>` element, except that callback directly
diff --git a/ivette/src/frama-c/LabViews.tsx b/ivette/src/frama-c/LabViews.tsx
index 0bce4e47c055213927e2d3684b8ecdb57d217000..ceee173cb8422ae016907641a9f70015f38004c2 100644
--- a/ivette/src/frama-c/LabViews.tsx
+++ b/ivette/src/frama-c/LabViews.tsx
@@ -608,7 +608,7 @@ function CustomizePanel(
 // --------------------------------------------------------------------------
 
 /**
-   @summary Reconfigurable Container (React Component)
+   @summary Reconfigurable Container (React Component).
    @property {boolean} [customize] - show components panel (false by default)
    @property {string} [settings] - window settings to make views persistent
    @property {React.Children} children - the labview content
diff --git a/ivette/tsconfig.json b/ivette/tsconfig.json
index 507cb98e497a43c88e833e34382e430b944493af..681879ffba4a382c6bf2ad8fbc46b5de3705d4f8 100644
--- a/ivette/tsconfig.json
+++ b/ivette/tsconfig.json
@@ -74,6 +74,8 @@
   ],
   "exclude": [
     "node_modules",
-    "dist"
+    "dist",
+    "src/dome/doc",
+    "src/dome/template"
   ]
 }