@francofantomius/material-components 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +41 -9
  3. package/custom-elements.json +19060 -9017
  4. package/dist/chunks/account-menu-Dau0UHTl.js +1290 -0
  5. package/dist/chunks/account-menu-Dau0UHTl.js.map +1 -0
  6. package/dist/chunks/app-drawer-Du1ePzxZ.js +903 -0
  7. package/dist/chunks/app-drawer-Du1ePzxZ.js.map +1 -0
  8. package/dist/chunks/bottom-sheet-q79BBYAj.js +402 -0
  9. package/dist/chunks/bottom-sheet-q79BBYAj.js.map +1 -0
  10. package/dist/chunks/{button-B4TSZ7Sl.js → button-D2vn7kJ8.js} +9 -8
  11. package/dist/chunks/button-D2vn7kJ8.js.map +1 -0
  12. package/dist/chunks/button-group-CNqvJx1n.js +143 -0
  13. package/dist/chunks/button-group-CNqvJx1n.js.map +1 -0
  14. package/dist/chunks/carousel-item-BG6kjjjk.js +371 -0
  15. package/dist/chunks/carousel-item-BG6kjjjk.js.map +1 -0
  16. package/dist/chunks/date-picker-DJeHi4w-.js +777 -0
  17. package/dist/chunks/date-picker-DJeHi4w-.js.map +1 -0
  18. package/dist/chunks/fab-menu.css-3pu930sZ.js +320 -0
  19. package/dist/chunks/fab-menu.css-3pu930sZ.js.map +1 -0
  20. package/dist/chunks/{icon-button-BdSc7eot.js → icon-button-BQz73GLa.js} +2 -2
  21. package/dist/chunks/icon-button-BQz73GLa.js.map +1 -0
  22. package/dist/chunks/loading-indicator-CvWnZr9o.js +193 -0
  23. package/dist/chunks/loading-indicator-CvWnZr9o.js.map +1 -0
  24. package/dist/chunks/menu-item-BBSp5Cqc.js +390 -0
  25. package/dist/chunks/menu-item-BBSp5Cqc.js.map +1 -0
  26. package/dist/chunks/navigation-bar-item-C9DfOEzg.js +397 -0
  27. package/dist/chunks/navigation-bar-item-C9DfOEzg.js.map +1 -0
  28. package/dist/chunks/navigation-rail-item-6pdhNHJK.js +357 -0
  29. package/dist/chunks/navigation-rail-item-6pdhNHJK.js.map +1 -0
  30. package/dist/chunks/{search-bar-TXnqJ-gd.js → search-bar-fUD0qU2P.js} +22 -4
  31. package/dist/chunks/search-bar-fUD0qU2P.js.map +1 -0
  32. package/dist/chunks/segmented-button-B0BvGSQ7.js +265 -0
  33. package/dist/chunks/segmented-button-B0BvGSQ7.js.map +1 -0
  34. package/dist/chunks/side-sheet-S2w081AK.js +360 -0
  35. package/dist/chunks/side-sheet-S2w081AK.js.map +1 -0
  36. package/dist/chunks/slider-D-mnO8yQ.js +450 -0
  37. package/dist/chunks/slider-D-mnO8yQ.js.map +1 -0
  38. package/dist/chunks/split-button-DUfjukQY.js +450 -0
  39. package/dist/chunks/split-button-DUfjukQY.js.map +1 -0
  40. package/dist/chunks/{table-aRTYzDyE.js → table-CqHnneAj.js} +2 -2
  41. package/dist/chunks/{table-aRTYzDyE.js.map → table-CqHnneAj.js.map} +1 -1
  42. package/dist/chunks/time-picker-CZnb2sWz.js +785 -0
  43. package/dist/chunks/time-picker-CZnb2sWz.js.map +1 -0
  44. package/dist/chunks/toolbar-DXVQbQKJ.js +271 -0
  45. package/dist/chunks/toolbar-DXVQbQKJ.js.map +1 -0
  46. package/dist/chunks/tooltip-CE7JMHMu.js +398 -0
  47. package/dist/chunks/tooltip-CE7JMHMu.js.map +1 -0
  48. package/dist/components/account-menu/account-menu.js +8 -0
  49. package/dist/components/app-drawer/app-drawer.js +9 -0
  50. package/dist/components/bottom-sheet/bottom-sheet.css.d.ts +2 -0
  51. package/dist/components/bottom-sheet/bottom-sheet.css.d.ts.map +1 -0
  52. package/dist/components/bottom-sheet/bottom-sheet.d.ts +69 -0
  53. package/dist/components/bottom-sheet/bottom-sheet.d.ts.map +1 -0
  54. package/dist/components/bottom-sheet/bottom-sheet.js +4 -0
  55. package/dist/components/button/button.css.d.ts.map +1 -1
  56. package/dist/components/button/button.js +1 -1
  57. package/dist/components/button-group/button-group.css.d.ts +2 -0
  58. package/dist/components/button-group/button-group.css.d.ts.map +1 -0
  59. package/dist/components/button-group/button-group.d.ts +28 -0
  60. package/dist/components/button-group/button-group.d.ts.map +1 -0
  61. package/dist/components/button-group/button-group.js +4 -0
  62. package/dist/components/carousel/carousel-item.d.ts +33 -0
  63. package/dist/components/carousel/carousel-item.d.ts.map +1 -0
  64. package/dist/components/carousel/carousel-item.js +4 -0
  65. package/dist/components/carousel/carousel.css.d.ts +3 -0
  66. package/dist/components/carousel/carousel.css.d.ts.map +1 -0
  67. package/dist/components/carousel/carousel.d.ts +81 -0
  68. package/dist/components/carousel/carousel.d.ts.map +1 -0
  69. package/dist/components/carousel/carousel.js +284 -0
  70. package/dist/components/carousel/carousel.js.map +1 -0
  71. package/dist/components/date-picker/date-picker.css.d.ts +2 -0
  72. package/dist/components/date-picker/date-picker.css.d.ts.map +1 -0
  73. package/dist/components/date-picker/date-picker.d.ts +59 -0
  74. package/dist/components/date-picker/date-picker.d.ts.map +1 -0
  75. package/dist/components/date-picker/date-picker.js +4 -0
  76. package/dist/components/fab-menu/fab-menu-item.d.ts +35 -0
  77. package/dist/components/fab-menu/fab-menu-item.d.ts.map +1 -0
  78. package/dist/components/fab-menu/fab-menu-item.js +93 -0
  79. package/dist/components/fab-menu/fab-menu-item.js.map +1 -0
  80. package/dist/components/fab-menu/fab-menu.css.d.ts +3 -0
  81. package/dist/components/fab-menu/fab-menu.css.d.ts.map +1 -0
  82. package/dist/components/fab-menu/fab-menu.d.ts +72 -0
  83. package/dist/components/fab-menu/fab-menu.d.ts.map +1 -0
  84. package/dist/components/fab-menu/fab-menu.js +148 -0
  85. package/dist/components/fab-menu/fab-menu.js.map +1 -0
  86. package/dist/components/icon-button/icon-button.js +1 -1
  87. package/dist/components/loading-indicator/loading-indicator.css.d.ts +2 -0
  88. package/dist/components/loading-indicator/loading-indicator.css.d.ts.map +1 -0
  89. package/dist/components/loading-indicator/loading-indicator.d.ts +48 -0
  90. package/dist/components/loading-indicator/loading-indicator.d.ts.map +1 -0
  91. package/dist/components/loading-indicator/loading-indicator.js +4 -0
  92. package/dist/components/menu/menu-item.d.ts +41 -0
  93. package/dist/components/menu/menu-item.d.ts.map +1 -0
  94. package/dist/components/menu/menu-item.js +4 -0
  95. package/dist/components/menu/menu.css.d.ts +3 -0
  96. package/dist/components/menu/menu.css.d.ts.map +1 -0
  97. package/dist/components/menu/menu.d.ts +91 -0
  98. package/dist/components/menu/menu.d.ts.map +1 -0
  99. package/dist/components/menu/menu.js +205 -0
  100. package/dist/components/menu/menu.js.map +1 -0
  101. package/dist/components/navigation-bar/navigation-bar-item.d.ts +49 -0
  102. package/dist/components/navigation-bar/navigation-bar-item.d.ts.map +1 -0
  103. package/dist/components/navigation-bar/navigation-bar-item.js +5 -0
  104. package/dist/components/navigation-bar/navigation-bar.css.d.ts +3 -0
  105. package/dist/components/navigation-bar/navigation-bar.css.d.ts.map +1 -0
  106. package/dist/components/navigation-bar/navigation-bar.d.ts +50 -0
  107. package/dist/components/navigation-bar/navigation-bar.d.ts.map +1 -0
  108. package/dist/components/navigation-bar/navigation-bar.js +150 -0
  109. package/dist/components/navigation-bar/navigation-bar.js.map +1 -0
  110. package/dist/components/navigation-rail/navigation-rail-item.d.ts +36 -0
  111. package/dist/components/navigation-rail/navigation-rail-item.d.ts.map +1 -0
  112. package/dist/components/navigation-rail/navigation-rail-item.js +5 -0
  113. package/dist/components/navigation-rail/navigation-rail.css.d.ts +3 -0
  114. package/dist/components/navigation-rail/navigation-rail.css.d.ts.map +1 -0
  115. package/dist/components/navigation-rail/navigation-rail.d.ts +43 -0
  116. package/dist/components/navigation-rail/navigation-rail.d.ts.map +1 -0
  117. package/dist/components/navigation-rail/navigation-rail.js +121 -0
  118. package/dist/components/navigation-rail/navigation-rail.js.map +1 -0
  119. package/dist/components/search-bar/search-bar.css.d.ts.map +1 -1
  120. package/dist/components/search-bar/search-bar.js +1 -1
  121. package/dist/components/segmented-button/segmented-button.css.d.ts +3 -0
  122. package/dist/components/segmented-button/segmented-button.css.d.ts.map +1 -0
  123. package/dist/components/segmented-button/segmented-button.d.ts +40 -0
  124. package/dist/components/segmented-button/segmented-button.d.ts.map +1 -0
  125. package/dist/components/segmented-button/segmented-button.js +5 -0
  126. package/dist/components/side-sheet/side-sheet.css.d.ts +2 -0
  127. package/dist/components/side-sheet/side-sheet.css.d.ts.map +1 -0
  128. package/dist/components/side-sheet/side-sheet.d.ts +57 -0
  129. package/dist/components/side-sheet/side-sheet.d.ts.map +1 -0
  130. package/dist/components/side-sheet/side-sheet.js +4 -0
  131. package/dist/components/slider/slider.css.d.ts +2 -0
  132. package/dist/components/slider/slider.css.d.ts.map +1 -0
  133. package/dist/components/slider/slider.d.ts +51 -0
  134. package/dist/components/slider/slider.d.ts.map +1 -0
  135. package/dist/components/slider/slider.js +4 -0
  136. package/dist/components/split-button/split-button.css.d.ts +2 -0
  137. package/dist/components/split-button/split-button.css.d.ts.map +1 -0
  138. package/dist/components/split-button/split-button.d.ts +89 -0
  139. package/dist/components/split-button/split-button.d.ts.map +1 -0
  140. package/dist/components/split-button/split-button.js +4 -0
  141. package/dist/components/table/table.js +1 -1
  142. package/dist/components/time-picker/time-picker.css.d.ts +2 -0
  143. package/dist/components/time-picker/time-picker.css.d.ts.map +1 -0
  144. package/dist/components/time-picker/time-picker.d.ts +87 -0
  145. package/dist/components/time-picker/time-picker.d.ts.map +1 -0
  146. package/dist/components/time-picker/time-picker.js +4 -0
  147. package/dist/components/toolbar/toolbar.css.d.ts +2 -0
  148. package/dist/components/toolbar/toolbar.css.d.ts.map +1 -0
  149. package/dist/components/toolbar/toolbar.d.ts +53 -0
  150. package/dist/components/toolbar/toolbar.d.ts.map +1 -0
  151. package/dist/components/toolbar/toolbar.js +4 -0
  152. package/dist/components/tooltip/tooltip.css.d.ts +2 -0
  153. package/dist/components/tooltip/tooltip.css.d.ts.map +1 -0
  154. package/dist/components/tooltip/tooltip.d.ts +89 -0
  155. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  156. package/dist/components/tooltip/tooltip.js +4 -0
  157. package/dist/index.d.ts +21 -0
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +148 -2263
  160. package/dist/tokens/index.js +4 -2
  161. package/dist/tokens/index.js.map +1 -1
  162. package/dist/tokens/theme.css.d.ts.map +1 -1
  163. package/llms.txt +919 -0
  164. package/package.json +97 -1
  165. package/dist/chunks/button-B4TSZ7Sl.js.map +0 -1
  166. package/dist/chunks/icon-button-BdSc7eot.js.map +0 -1
  167. package/dist/chunks/search-bar-TXnqJ-gd.js.map +0 -1
  168. package/dist/index.js.map +0 -1
package/llms.txt CHANGED
@@ -20,27 +20,43 @@
20
20
  - [Component Reference](#component-reference)
21
21
  - [Actions](#actions)
22
22
  - [Button (`md-button`)](#button-md-button)
23
+ - [Button Group (`md-button-group`)](#button-group-md-button-group)
24
+ - [Segmented Button (`md-segmented-button`, `md-segmented-button-set`)](#segmented-button-md-segmented-button-md-segmented-button-set)
25
+ - [Split Button (`md-split-button`)](#split-button-md-split-button)
23
26
  - [Icon Button (`md-icon-button`)](#icon-button-md-icon-button)
24
27
  - [Floating Action Button (`md-fab`)](#floating-action-button-md-fab)
28
+ - [FAB Menu (`md-fab-menu`, `md-fab-menu-item`)](#fab-menu-md-fab-menu-md-fab-menu-item)
29
+ - [Toolbar (`md-toolbar`)](#toolbar-md-toolbar)
25
30
  - [Inputs & Controls](#inputs--controls)
26
31
  - [Text Field (`md-text-field`)](#text-field-md-text-field)
27
32
  - [Checkbox (`md-checkbox`)](#checkbox-md-checkbox)
28
33
  - [Radio & Radio Group (`md-radio`, `md-radio-group`)](#radio--radio-group-md-radio-md-radio-group)
29
34
  - [Switch (`md-switch`)](#switch-md-switch)
35
+ - [Slider (`md-slider`)](#slider-md-slider)
36
+ - [Time Picker (`md-time-picker`)](#time-picker-md-time-picker)
37
+ - [Date Picker (`md-date-picker`)](#date-picker-md-date-picker)
30
38
  - [Chip & Chip Set (`md-chip`, `md-chip-set`)](#chip--chip-set-md-chip-md-chip-set)
31
39
  - [Search Bar (`md-search-bar`)](#search-bar-md-search-bar)
32
40
  - [Surfaces & Containment](#surfaces--containment)
33
41
  - [Card (`md-card`)](#card-md-card)
34
42
  - [Dialog (`md-dialog`)](#dialog-md-dialog)
35
43
  - [Divider (`md-divider`)](#divider-md-divider)
44
+ - [Menu (`md-menu`, `md-menu-item`)](#menu-md-menu-md-menu-item)
36
45
  - [List & List Item (`md-list`, `md-list-item`)](#list--list-item-md-list-md-list-item)
37
46
  - [Table & Data Table (`md-table`)](#table--data-table-md-table)
47
+ - [Side Sheet (`md-side-sheet`)](#side-sheet-md-side-sheet)
48
+ - [Bottom Sheet (`md-bottom-sheet`)](#bottom-sheet-md-bottom-sheet)
49
+ - [Carousel (`md-carousel`, `md-carousel-item`)](#carousel-md-carousel-md-carousel-item)
38
50
  - [Communication & Feedback](#communication--feedback)
39
51
  - [Badge (`md-badge`)](#badge-md-badge)
40
52
  - [Progress Indicators (`md-progress`)](#progress-indicators-md-progress)
53
+ - [Loading Indicator (`md-loading-indicator`)](#loading-indicator-md-loading-indicator)
41
54
  - [Snackbar (`md-snackbar`)](#snackbar-md-snackbar)
55
+ - [Tooltip (`md-tooltip`)](#tooltip-md-tooltip)
42
56
  - [Navigation](#navigation)
57
+ - [Navigation Bar (`md-navigation-bar`, `md-navigation-bar-item`)](#navigation-bar-md-navigation-bar-md-navigation-bar-item)
43
58
  - [Navigation Drawer (`md-navigation-drawer`, `md-navigation-drawer-item`)](#navigation-drawer-md-navigation-drawer-md-navigation-drawer-item)
59
+ - [Navigation Rail (`md-navigation-rail`, `md-navigation-rail-item`)](#navigation-rail-md-navigation-rail-md-navigation-rail-item)
44
60
  - [Top App Bar (`md-top-app-bar`)](#top-app-bar-md-top-app-bar)
45
61
  - [Tabs (`md-tabs`, `md-tab`)](#tabs-md-tabs-md-tab)
46
62
  - [App Drawer (`md-app-drawer`, `md-app-drawer-item`)](#app-drawer-md-app-drawer-md-app-drawer-item)
@@ -320,23 +336,39 @@ const isEnabled = ref(true);
320
336
  | Category | Component Tag | Subpath Import | Description |
321
337
  | :--- | :--- | :--- | :--- |
322
338
  | **Actions** | `<md-button>` | `@francofantomius/material-components/button` | Buttons with 5 visual emphasis levels |
339
+ | **Actions** | `<md-button-group>` | `@francofantomius/material-components/button-group` | Button groups with connected shape-shifting or standard layouts |
340
+ | **Actions** | `<md-segmented-button>`, `<md-segmented-button-set>` | `@francofantomius/material-components/segmented-button` | Compact single or multi-select option groups |
341
+ | **Actions** | `<md-split-button>` | `@francofantomius/material-components/split-button` | Primary action button with connected dropdown trigger |
323
342
  | **Actions** | `<md-icon-button>` | `@francofantomius/material-components/icon-button` | Compact action & toggle buttons |
324
343
  | **Actions** | `<md-fab>` | `@francofantomius/material-components/fab` | Floating Action Button (small, medium, large, extended) |
344
+ | **Actions** | `<md-fab-menu>`, `<md-fab-menu-item>` | `@francofantomius/material-components/fab-menu` | FAB Menu / Speed Dial expanding into stacked sub-actions with labels and modal scrim |
345
+ | **Actions** | `<md-toolbar>` | `@francofantomius/material-components/toolbar` | M3 Expressive floating & docked action toolbar |
325
346
  | **Inputs & Controls** | `<md-text-field>` | `@francofantomius/material-components/text-field` | Filled & outlined inputs with validation |
326
347
  | **Inputs & Controls** | `<md-checkbox>` | `@francofantomius/material-components/checkbox` | Checkbox with indeterminate and error states |
327
348
  | **Inputs & Controls** | `<md-radio>`, `<md-radio-group>` | `@francofantomius/material-components/radio` | Mutually exclusive radio selections |
328
349
  | **Inputs & Controls** | `<md-switch>` | `@francofantomius/material-components/switch` | Toggle switch with optional thumb icons |
350
+ | **Inputs & Controls** | `<md-slider>` | `@francofantomius/material-components/slider` | Continuous, discrete, and dual-thumb range sliders |
351
+ | **Inputs & Controls** | `<md-time-picker>` | `@francofantomius/material-components/time-picker` | 12h/24h dial & input time picker with modal and docked modes |
352
+ | **Inputs & Controls** | `<md-date-picker>` | `@francofantomius/material-components/date-picker` | Calendar grid, date range, month/year navigation in modal & docked modes |
329
353
  | **Inputs & Controls** | `<md-chip>`, `<md-chip-set>` | `@francofantomius/material-components/chip` | Assist, filter, input, and suggestion chips |
330
354
  | **Inputs & Controls** | `<md-search-bar>` | `@francofantomius/material-components/search-bar` | Docked and fullscreen search view |
331
355
  | **Surfaces & Containment** | `<md-card>` | `@francofantomius/material-components/card` | Elevated, filled, and outlined surface containers |
332
356
  | **Surfaces & Containment** | `<md-dialog>` | `@francofantomius/material-components/dialog` | Modal dialogs for prompts & confirmation |
333
357
  | **Surfaces & Containment** | `<md-divider>` | `@francofantomius/material-components/divider` | Horizontal, vertical, and inset separators |
358
+ | **Surfaces & Containment** | `<md-menu>`, `<md-menu-item>` | `@francofantomius/material-components/menu` | Temporary surfaces displaying lists of choices anchored to triggers |
334
359
  | **Surfaces & Containment** | `<md-list>`, `<md-list-item>` | `@francofantomius/material-components/list` | 1-line, 2-line, and 3-line structured lists |
335
360
  | **Surfaces & Containment** | `<md-table>` | `@francofantomius/material-components/table` | Data table with sorting, selection, and pagination |
361
+ | **Surfaces & Containment** | `<md-side-sheet>` | `@francofantomius/material-components/side-sheet` | Standard in-flow & modal overlay side sheets |
362
+ | **Surfaces & Containment** | `<md-bottom-sheet>` | `@francofantomius/material-components/bottom-sheet` | Standard docked & modal overlay bottom sheets with drag gestures |
363
+ | **Surfaces & Containment** | `<md-carousel>`, `<md-carousel-item>` | `@francofantomius/material-components/carousel` | Multi-browse, hero, and full-width image & content carousels |
336
364
  | **Communication & Feedback** | `<md-badge>` | `@francofantomius/material-components/badge` | Numeric count and status dot indicators |
337
365
  | **Communication & Feedback** | `<md-progress>` | `@francofantomius/material-components/progress` | Linear and circular progress with M3 wavy lines |
366
+ | **Communication & Feedback** | `<md-loading-indicator>` | `@francofantomius/material-components/loading-indicator` | Contained & morphing shape loading indicator for short wait times |
338
367
  | **Communication & Feedback** | `<md-snackbar>` | `@francofantomius/material-components/snackbar` | Temporary bottom toast messages |
368
+ | **Communication & Feedback** | `<md-tooltip>` | `@francofantomius/material-components/tooltip` | Plain & rich contextual tooltips with directional positioning and delays |
369
+ | **Navigation** | `<md-navigation-bar>`, `<md-navigation-bar-item>` | `@francofantomius/material-components/navigation-bar` | Bottom navigation bar with 3-5 destinations, indicator pills, badges & label modes |
339
370
  | **Navigation** | `<md-navigation-drawer>` | `@francofantomius/material-components/navigation-drawer` | Side drawer navigation (modal / standard / responsive) |
371
+ | **Navigation** | `<md-navigation-rail>`, `<md-navigation-rail-item>` | `@francofantomius/material-components/navigation-rail` | Vertical navigation rail for mid to large screens |
340
372
  | **Navigation** | `<md-top-app-bar>` | `@francofantomius/material-components/top-app-bar` | Header bar (small, center-aligned, medium, large) |
341
373
  | **Navigation** | `<md-tabs>`, `<md-tab>` | `@francofantomius/material-components/tabs` | Top tab navigation with sliding active indicator |
342
374
  | **Navigation** | `<md-app-drawer>` | `@francofantomius/material-components/app-drawer` | Popover application grid launcher with drag reordering |
@@ -385,6 +417,126 @@ const isEnabled = ref(true);
385
417
 
386
418
  ---
387
419
 
420
+ #### Button Group (`md-button-group`)
421
+
422
+ - **Subpath**: `@francofantomius/material-components/button-group`
423
+ - **Description**: Button groups organize related action buttons into cohesive sets with standard or connected shape-shifting layouts according to Material Design 3 specifications.
424
+
425
+ ##### Properties & Attributes
426
+ | Name | Type | Default | Description |
427
+ | :--- | :--- | :--- | :--- |
428
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Layout orientation of the button group |
429
+ | `connected` | `boolean` | `false` | Connects adjacent buttons with seamless shared borders and shape-shifting corner radii |
430
+ | `shape` | `'pill' \| 'rounded' \| 'square'` | `'pill'` | Corner shape morphing style when connected |
431
+ | `variant` | `'filled' \| 'elevated' \| 'tonal' \| 'outlined' \| 'text'` | `''` | Cascades a visual emphasis style to child buttons |
432
+ | `full-width` | `boolean` | `false` | Stretches child buttons evenly across the container width |
433
+ | `disabled` | `boolean` | `false` | Disables all child buttons in the group |
434
+
435
+ ##### Code Example
436
+ ```html
437
+ <!-- Standard Button Group -->
438
+ <md-button-group>
439
+ <md-button variant="outlined" icon="edit">Edit</md-button>
440
+ <md-button variant="outlined" icon="content_copy">Copy</md-button>
441
+ <md-button variant="filled" icon="share">Share</md-button>
442
+ </md-button-group>
443
+
444
+ <!-- Connected Shape-Shifting Group -->
445
+ <md-button-group connected variant="outlined">
446
+ <md-button icon="format_align_left">Left</md-button>
447
+ <md-button icon="format_align_center">Center</md-button>
448
+ <md-button icon="format_align_right">Right</md-button>
449
+ </md-button-group>
450
+
451
+ <!-- Vertical Connected Group -->
452
+ <md-button-group connected orientation="vertical" variant="outlined">
453
+ <md-button icon="zoom_in">Zoom In</md-button>
454
+ <md-button icon="zoom_out">Zoom Out</md-button>
455
+ <md-button icon="fit_screen">Reset</md-button>
456
+ </md-button-group>
457
+ ```
458
+
459
+ ---
460
+
461
+ #### Segmented Button (`md-segmented-button`, `md-segmented-button-set`)
462
+
463
+ - **Subpath**: `@francofantomius/material-components/segmented-button`
464
+ - **Description**: Segmented buttons help users select options, switch views, or sort elements in compact single-select or multi-select groups.
465
+
466
+ ##### Properties & Attributes (`md-segmented-button-set`)
467
+ | Name | Type | Default | Description |
468
+ | :--- | :--- | :--- | :--- |
469
+ | `multiselect` | `boolean` | `false` | Enables multi-selection mode across segments |
470
+ | `disabled` | `boolean` | `false` | Disables all child segmented buttons in the set |
471
+
472
+ ##### Properties & Attributes (`md-segmented-button`)
473
+ | Name | Type | Default | Description |
474
+ | :--- | :--- | :--- | :--- |
475
+ | `selected` | `boolean` | `false` | Active selection state of the segment |
476
+ | `disabled` | `boolean` | `false` | Disables segment interactions |
477
+ | `value` | `string` | `''` | Value associated with the segment |
478
+ | `label` | `string` | `''` | Label text of the segment |
479
+ | `icon` | `string` | `''` | Leading Material Symbols icon name |
480
+ | `no-checkmark` | `boolean` | `false` | Hides the automatic checkmark indicator when selected |
481
+
482
+ ##### Code Example
483
+ ```html
484
+ <!-- Single select (e.g. view filter) -->
485
+ <md-segmented-button-set>
486
+ <md-segmented-button selected label="Songs"></md-segmented-button>
487
+ <md-segmented-button label="Albums"></md-segmented-button>
488
+ <md-segmented-button label="Podcasts"></md-segmented-button>
489
+ </md-segmented-button-set>
490
+
491
+ <!-- Multi select (e.g. text formatting) -->
492
+ <md-segmented-button-set multiselect>
493
+ <md-segmented-button icon="format_bold" label="Bold" selected></md-segmented-button>
494
+ <md-segmented-button icon="format_italic" label="Italic"></md-segmented-button>
495
+ <md-segmented-button icon="format_underlined" label="Underline"></md-segmented-button>
496
+ </md-segmented-button-set>
497
+ ```
498
+
499
+ ---
500
+
501
+ #### Split Button (`md-split-button`)
502
+
503
+ - **Subpath**: `@francofantomius/material-components/split-button`
504
+ - **Description**: Split buttons combine a primary action button with a connected dropdown trigger button for related contextual options.
505
+
506
+ ##### Properties & Attributes
507
+ | Name | Type | Default | Description |
508
+ | :--- | :--- | :--- | :--- |
509
+ | `variant` | `'filled' \| 'elevated' \| 'tonal' \| 'outlined'` | `'filled'` | Visual emphasis style of the split button |
510
+ | `disabled` | `boolean` | `false` | Disables both action and menu trigger buttons |
511
+ | `label` | `string` | `''` | Primary action button text label |
512
+ | `icon` | `string` | `''` | Leading icon for the primary action button |
513
+ | `trailing-icon` | `string` | `'arrow_drop_down'` | Dropdown trigger icon name |
514
+ | `open` | `boolean` | `false` | Whether the associated menu / options dropdown is open |
515
+ | `type` | `'button' \| 'submit' \| 'reset'` | `'button'` | HTML form button type for the main action |
516
+ | `action-aria-label` | `string` | `''` | Accessible label for the main action button |
517
+ | `menu-aria-label` | `string` | `'More options'` | Accessible label for the trailing menu trigger button |
518
+
519
+ ##### Events
520
+ | Name | Detail | Description |
521
+ | :--- | :--- | :--- |
522
+ | `action` | `{ target: MdSplitButton, open: boolean }` | Dispatched when the leading primary action button is clicked |
523
+ | `trailing-click` | `{ target: MdSplitButton, open: boolean }` | Dispatched when the trailing dropdown menu button is clicked |
524
+ | `toggle` | `{ target: MdSplitButton, open: boolean }` | Dispatched when the trailing menu trigger toggles open state |
525
+
526
+ ##### Code Example
527
+ ```html
528
+ <!-- Default filled split button -->
529
+ <md-split-button label="Save"></md-split-button>
530
+
531
+ <!-- Split button with icons and tonal variant -->
532
+ <md-split-button variant="tonal" icon="cloud_upload" label="Upload" trailing-icon="expand_more"></md-split-button>
533
+
534
+ <!-- Outlined split button -->
535
+ <md-split-button variant="outlined" label="Export"></md-split-button>
536
+ ```
537
+
538
+ ---
539
+
388
540
  #### Icon Button (`md-icon-button`)
389
541
 
390
542
  - **Subpath**: `@francofantomius/material-components/icon-button`
@@ -439,6 +591,112 @@ const isEnabled = ref(true);
439
591
 
440
592
  ---
441
593
 
594
+ #### FAB Menu (`md-fab-menu`, `md-fab-menu-item`)
595
+
596
+ - **Subpath**: `@francofantomius/material-components/fab-menu`
597
+ - **Description**: A Floating Action Button Menu (FAB Menu / Speed Dial) expands a primary FAB into a stack of contextual sub-actions with text labels, animated transitions, and optional modal scrim overlay.
598
+
599
+ ##### Properties & Attributes (`md-fab-menu`)
600
+ | Name | Type | Default | Description |
601
+ | :--- | :--- | :--- | :--- |
602
+ | `open` | `boolean` | `false` | Whether the menu stack is open |
603
+ | `modal` | `boolean` | `false` | Displays a scrim backdrop overlay behind the open menu |
604
+ | `direction` | `'up' \| 'down' \| 'left' \| 'right'` | `'up'` | Direction the sub-action stack expands |
605
+ | `icon` | `string` | `'add'` | Material Symbols icon for the trigger FAB |
606
+ | `open-icon` | `string` | `''` | Optional distinct icon shown when opened (defaults to 45° rotation) |
607
+ | `label` | `string` | `''` | Extended text label for the trigger FAB |
608
+ | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Trigger FAB button size |
609
+ | `lowered` | `boolean` | `false` | Applies lower elevation level 1 instead of level 3 |
610
+ | `disabled` | `boolean` | `false` | Disables menu trigger and interactions |
611
+ | `close-on-item-click` | `boolean` | `true` | Automatically closes menu when a sub-item is clicked |
612
+ | `close-on-outside-click` | `boolean` | `true` | Automatically closes menu when clicking outside |
613
+
614
+ ##### Properties & Attributes (`md-fab-menu-item`)
615
+ | Name | Type | Default | Description |
616
+ | :--- | :--- | :--- | :--- |
617
+ | `icon` | `string` | `''` | Material Symbols icon name for the sub-action |
618
+ | `label` | `string` | `''` | Text label displayed beside the mini-FAB |
619
+ | `label-placement` | `'start' \| 'end' \| 'top' \| 'bottom'` | `'start'` | Positioning of the label pill relative to the sub-FAB |
620
+ | `disabled` | `boolean` | `false` | Disables sub-action item interactions |
621
+ | `value` | `string` | `''` | Value or identifier for the action |
622
+ | `size` | `'small' \| 'medium'` | `'small'` | Size of the mini-FAB button |
623
+ | `lowered` | `boolean` | `false` | Lower elevation level |
624
+
625
+ ##### Events
626
+ | Name | Detail | Description |
627
+ | :--- | :--- | :--- |
628
+ | `open` | `undefined` | Dispatched when the FAB menu opens |
629
+ | `close` | `undefined` | Dispatched when the FAB menu closes |
630
+ | `toggle` | `{ open: boolean }` | Dispatched when the menu toggles open/close state |
631
+ | `action` | `{ item: MdFabMenuItem, value: string, label: string }` | Dispatched when a sub-action item is activated |
632
+ | `scrim-click` | `undefined` | Dispatched when modal scrim backdrop is clicked |
633
+
634
+ ##### Code Example
635
+ ```html
636
+ <!-- Standard Upward FAB Menu -->
637
+ <md-fab-menu icon="add">
638
+ <md-fab-menu-item icon="edit" label="Create Post" value="post"></md-fab-menu-item>
639
+ <md-fab-menu-item icon="photo_camera" label="Upload Photo" value="photo"></md-fab-menu-item>
640
+ <md-fab-menu-item icon="videocam" label="Go Live" value="live"></md-fab-menu-item>
641
+ </md-fab-menu>
642
+
643
+ <!-- Modal FAB Menu with Scrim -->
644
+ <md-fab-menu modal icon="add" label="Actions">
645
+ <md-fab-menu-item icon="mail" label="New Message" value="email"></md-fab-menu-item>
646
+ <md-fab-menu-item icon="event" label="Schedule Event" value="event"></md-fab-menu-item>
647
+ </md-fab-menu>
648
+ ```
649
+
650
+ ---
651
+
652
+ #### Toolbar (`md-toolbar`)
653
+
654
+ - **Subpath**: `@francofantomius/material-components/toolbar`
655
+ - **Description**: Material Design 3 Expressive Action Toolbar for housing actions, tools, controls, and integrated floating action buttons in floating island or docked edge-to-edge layouts.
656
+
657
+ ##### Properties & Attributes
658
+ | Name | Type | Default | Description |
659
+ | :--- | :--- | :--- | :--- |
660
+ | `mode` | `'floating' \| 'docked'` | `'floating'` | Layout mode: floating island or docked bar |
661
+ | `docked` | `boolean` | `false` | Shorthand boolean to activate docked mode |
662
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Controls layout orientation |
663
+ | `elevated` | `boolean` | `false` | Increases elevation shadow depth |
664
+ | `fixed` | `boolean` | `false` | Pins position relative to viewport |
665
+ | `dock-position` | `'none' \| 'top' \| 'bottom' \| 'left' \| 'right'` | `'none'` | Viewport edge when docked and fixed |
666
+ | `aria-label` | `string` | `''` | Accessible label for screen readers |
667
+
668
+ ##### Slots
669
+ | Slot Name | Description |
670
+ | :--- | :--- |
671
+ | *(default)* | Primary action buttons, segmented buttons, switches, and dividers |
672
+ | `leading` | Leading navigation or anchor icons |
673
+ | `trailing` | Trailing action buttons or overflow menus |
674
+ | `fab` / `action` | Slotted Primary Action / Floating Action Button (FAB) |
675
+
676
+ ##### Code Example
677
+ ```html
678
+ <!-- Floating Action Toolbar -->
679
+ <md-toolbar aria-label="Formatting Actions">
680
+ <md-icon-button icon="format_bold" aria-label="Bold"></md-icon-button>
681
+ <md-icon-button icon="format_italic" aria-label="Italic"></md-icon-button>
682
+ <md-divider vertical></md-divider>
683
+ <md-icon-button icon="format_align_left" aria-label="Align left"></md-icon-button>
684
+ <md-fab slot="fab" size="small" icon="edit" aria-label="Edit"></md-fab>
685
+ </md-toolbar>
686
+
687
+ <!-- Docked Bottom Toolbar -->
688
+ <md-toolbar mode="docked" aria-label="Document Controls">
689
+ <div slot="leading">
690
+ <md-icon-button icon="attachment" aria-label="Attach"></md-icon-button>
691
+ </div>
692
+ <div slot="trailing">
693
+ <md-button variant="filled" label="Publish"></md-button>
694
+ </div>
695
+ </md-toolbar>
696
+ ```
697
+
698
+ ---
699
+
442
700
  ### Inputs & Controls
443
701
 
444
702
  #### Text Field (`md-text-field`)
@@ -562,6 +820,56 @@ const isEnabled = ref(true);
562
820
 
563
821
  ---
564
822
 
823
+ #### Slider (`md-slider`)
824
+
825
+ - **Subpath**: `@francofantomius/material-components/slider`
826
+ - **Description**: Sliders allow users to view and select a value (or range of values) along a horizontal track, supporting continuous or discrete steps, dual-thumb range selection, value indicator balloon tooltips, and leading/trailing icons.
827
+
828
+ ##### Properties & Attributes
829
+ | Name | Type | Default | Description |
830
+ | :--- | :--- | :--- | :--- |
831
+ | `value` | `number` | `50` | Current value for single slider mode |
832
+ | `value-start` | `number` | `0` | Start value for dual-thumb range mode |
833
+ | `value-end` | `number` | `100` | End value for dual-thumb range mode |
834
+ | `min` | `number` | `0` | Minimum allowed value |
835
+ | `max` | `number` | `100` | Maximum allowed value |
836
+ | `step` | `number` | `1` | Granularity step increment |
837
+ | `range` | `boolean` | `false` | Enables dual-thumb range selection mode |
838
+ | `ticks` | `boolean` | `false` | Displays discrete step tick marks along the track |
839
+ | `labeled` | `boolean` | `false` | Shows floating value indicator balloon tooltip above thumb |
840
+ | `icon` | `string` | `''` | Leading Material Symbols icon name |
841
+ | `leading-icon` | `string` | `''` | Leading Material Symbols icon name |
842
+ | `trailing-icon` | `string` | `''` | Trailing Material Symbols icon name |
843
+ | `disabled` | `boolean` | `false` | Disables user interaction |
844
+ | `name` | `string` | `''` | HTML form input name |
845
+ | `name-start` | `string` | `''` | HTML form input name for start value (range mode) |
846
+ | `name-end` | `string` | `''` | HTML form input name for end value (range mode) |
847
+
848
+ ##### Slots
849
+ - `leading-icon`: Custom leading icon or element.
850
+ - `trailing-icon`: Custom trailing icon or element.
851
+
852
+ ##### Events
853
+ - `input`: Dispatched continuously while dragging or adjusting with keys (`detail: { value, valueStart, valueEnd }`).
854
+ - `change`: Dispatched on pointer release or committed keyboard change (`detail: { value, valueStart, valueEnd }`).
855
+
856
+ ##### Code Example
857
+ ```html
858
+ <!-- Continuous Slider with Icons -->
859
+ <md-slider value="60" icon="volume_down" trailing-icon="volume_up"></md-slider>
860
+
861
+ <!-- Discrete Stepped Slider with Ticks & Value Indicator -->
862
+ <md-slider min="0" max="100" step="10" value="40" ticks labeled></md-slider>
863
+
864
+ <!-- Dual-Thumb Range Slider -->
865
+ <md-slider range min="0" max="100" value-start="20" value-end="80" labeled></md-slider>
866
+
867
+ <!-- Disabled Slider -->
868
+ <md-slider value="50" disabled icon="lock"></md-slider>
869
+ ```
870
+
871
+ ---
872
+
565
873
  #### Chip & Chip Set (`md-chip`, `md-chip-set`)
566
874
 
567
875
  - **Subpath**: `@francofantomius/material-components/chip`
@@ -646,6 +954,121 @@ const isEnabled = ref(true);
646
954
 
647
955
  ---
648
956
 
957
+ #### Time Picker (`md-time-picker`)
958
+
959
+ - **Subpath**: `@francofantomius/material-components/time-picker`
960
+ - **Description**: Time pickers help users select and set a specific time using an interactive Material Design 3 clock dial or numeric text inputs, in both 12-hour (AM/PM) and 24-hour formats with modal or docked modes.
961
+
962
+ ##### Properties & Attributes
963
+ | Name | Type | Default | Description |
964
+ | :--- | :--- | :--- | :--- |
965
+ | `value` | `string` | `''` | Current time value string (e.g. `'08:30 AM'` or `'14:30'`) |
966
+ | `format` | `'12h' \| '24h'` | `'12h'` | Time display and selection format |
967
+ | `view` | `'dial' \| 'input'` | `'dial'` | Active presentation mode: interactive clock dial or numeric text fields |
968
+ | `modal` | `boolean` | `false` | Displays picker as a modal dialog overlay with backdrop scrim |
969
+ | `open` | `boolean` | `false` | Controls open/close visibility state when in modal mode |
970
+ | `headline` | `string` | `'Select time'` | Header headline text |
971
+ | `auto-switch-to-minute` | `boolean` | `true` | Automatically transitions active field from hour to minute on dial |
972
+ | `disabled` | `boolean` | `false` | Disables user interaction |
973
+ | `name` | `string` | `''` | HTML form input name (FACE) |
974
+ | `required` | `boolean` | `false` | Form validation required constraint |
975
+
976
+ ##### Methods
977
+ - `showModal()`: Opens the time picker as a modal dialog.
978
+ - `show()`: Opens the time picker.
979
+ - `close(returnValue?: string)`: Closes the modal time picker.
980
+ - `confirm()`: Commits the selected time and fires `change` / `confirm` events.
981
+ - `cancel()`: Cancels selection and dismisses modal dialog.
982
+ - `getFormattedTime()`: Returns current formatted time according to `format`.
983
+ - `getFormatted24()`: Returns current time in 24-hour `'HH:MM'` format.
984
+ - `getFormatted12()`: Returns current time in 12-hour `'hh:mm A'` format.
985
+
986
+ ##### Events
987
+ - `change`: Dispatched when a time value is confirmed or committed (`detail: { value, hour, minute, period, formatted24, formatted12 }`).
988
+ - `input`: Dispatched during interactive time adjustment (`detail: { value, hour, minute, period, formatted24, formatted12 }`).
989
+ - `confirm`: Dispatched when the user clicks OK (`detail: { value, hour, minute, period, formatted24, formatted12 }`).
990
+ - `cancel`: Dispatched when selection is canceled or backdrop is clicked.
991
+ - `open`: Dispatched when modal dialog opens.
992
+ - `close`: Dispatched when modal dialog closes (`detail: { returnValue?: string }`).
993
+
994
+ ##### Code Example
995
+ ```html
996
+ <!-- 12-hour Clock Dial Picker -->
997
+ <md-time-picker format="12h" value="09:30 AM"></md-time-picker>
998
+
999
+ <!-- 24-hour Text Input Mode -->
1000
+ <md-time-picker view="input" format="24h" value="14:45"></md-time-picker>
1001
+
1002
+ <!-- Modal Time Picker with Trigger Button -->
1003
+ <md-button variant="filled" icon="schedule" onclick="document.getElementById('alarm-picker').showModal()">
1004
+ Set Alarm
1005
+ </md-button>
1006
+ <md-time-picker id="alarm-picker" modal headline="Set Alarm" value="07:00 AM"></md-time-picker>
1007
+ ```
1008
+
1009
+ ---
1010
+
1011
+ #### Date Picker (`md-date-picker`)
1012
+
1013
+ - **Subpath**: `@francofantomius/material-components/date-picker`
1014
+ - **Description**: Date pickers let people select a date or range of dates using an interactive calendar grid, month/year navigation, and Material Design 3 styling in docked and modal dialog formats.
1015
+
1016
+ ##### Properties & Attributes
1017
+ | Name | Type | Default | Description |
1018
+ | :--- | :--- | :--- | :--- |
1019
+ | `variant` | `'docked' \| 'modal'` | `'docked'` | Presentation format: inline/docked container or modal dialog overlay |
1020
+ | `range` | `boolean` | `false` | Enables date range selection mode (start date and end date) |
1021
+ | `value` | `string` | `''` | Selected date string (ISO `'YYYY-MM-DD'` or `'YYYY-MM-DD/YYYY-MM-DD'` for range) |
1022
+ | `start-date` | `string` | `''` | Start date in range selection mode |
1023
+ | `end-date` | `string` | `''` | End date in range selection mode |
1024
+ | `min` | `string` | `''` | Minimum selectable date constraint (ISO `'YYYY-MM-DD'`) |
1025
+ | `max` | `string` | `''` | Maximum selectable date constraint (ISO `'YYYY-MM-DD'`) |
1026
+ | `label` | `string` | `''` | Header subhead / supporting label text (e.g. `'Select date'`) |
1027
+ | `headline` | `string` | `''` | Custom header headline text (defaults to formatted date) |
1028
+ | `open` | `boolean` | `false` | Controls open/close visibility state when in modal mode |
1029
+ | `disabled` | `boolean` | `false` | Disables user interaction |
1030
+ | `required` | `boolean` | `false` | Form validation required constraint |
1031
+ | `first-day-of-week` | `number` | `0` | Starting day of week: `0` for Sunday, `1` for Monday |
1032
+ | `show-actions` | `boolean` | `false` | Displays bottom action buttons (Cancel / OK) in docked mode |
1033
+ | `error` | `boolean` | `false` | Applies error visual styling |
1034
+ | `error-text` | `string` | `''` | Validation error message |
1035
+ | `supporting-text` | `string` | `''` | Helper text below the date picker |
1036
+ | `name` | `string` | `''` | HTML form input name (FACE) |
1037
+
1038
+ ##### Methods
1039
+ - `showModal()`: Opens the date picker as a modal dialog overlay.
1040
+ - `show()`: Opens the date picker.
1041
+ - `close()`: Closes the modal date picker.
1042
+ - `reset()`: Clears the selected date(s) and form association.
1043
+
1044
+ ##### Events
1045
+ - `change`: Dispatched when date selection is committed (`detail: { value, startDate?, endDate? }`).
1046
+ - `input`: Dispatched when date input value updates (`detail: { value }`).
1047
+ - `select`: Dispatched when an individual day is clicked (`detail: { date, type: 'single' | 'start' | 'end' }`).
1048
+ - `open`: Dispatched when modal dialog opens.
1049
+ - `close`: Dispatched when modal dialog closes.
1050
+ - `cancel`: Dispatched when modal dialog is canceled or backdrop is clicked.
1051
+
1052
+ ##### Code Example
1053
+ ```html
1054
+ <!-- Docked Single Date Picker -->
1055
+ <md-date-picker value="2026-08-22" label="Select date"></md-date-picker>
1056
+
1057
+ <!-- Date Range Picker -->
1058
+ <md-date-picker range value="2026-08-10/2026-08-20" label="Select range"></md-date-picker>
1059
+
1060
+ <!-- Min and Max Date Constraints -->
1061
+ <md-date-picker min="2026-08-05" max="2026-08-25" value="2026-08-15"></md-date-picker>
1062
+
1063
+ <!-- Modal Date Picker with Trigger Button -->
1064
+ <md-button variant="filled" icon="calendar_month" onclick="document.getElementById('booking-datepicker').showModal()">
1065
+ Select Date
1066
+ </md-button>
1067
+ <md-date-picker id="booking-datepicker" variant="modal" value="2026-08-22"></md-date-picker>
1068
+ ```
1069
+
1070
+ ---
1071
+
649
1072
  ### Surfaces & Containment
650
1073
 
651
1074
  #### Card (`md-card`)
@@ -743,6 +1166,78 @@ const isEnabled = ref(true);
743
1166
 
744
1167
  ---
745
1168
 
1169
+ #### Menu (`md-menu`, `md-menu-item`)
1170
+
1171
+ - **Subpath**: `@francofantomius/material-components/menu`
1172
+ - **Description**: Menus display a list of choices on temporary surfaces when users interact with a trigger or contextual control, supporting anchoring, keyboard navigation, supporting text, and selection events.
1173
+
1174
+ ##### `<md-menu>` Properties & Attributes
1175
+ | Name | Type | Default | Description |
1176
+ | :--- | :--- | :--- | :--- |
1177
+ | `open` | `boolean` | `false` | Reflects open/closed visibility state |
1178
+ | `anchor` | `string \| HTMLElement \| null` | `null` | Anchor element ID or HTMLElement reference |
1179
+ | `positioning` | `'absolute' \| 'fixed'` | `'absolute'` | Positioning strategy relative to trigger or viewport |
1180
+ | `placement` | `'bottom-start' \| 'bottom-end' \| 'top-start' \| 'top-end'` | `'bottom-start'` | Anchor edge placement for the menu surface |
1181
+ | `alignment` | `'start' \| 'end' \| 'center'` | `'start'` | Alignment of the menu relative to the anchor |
1182
+ | `x-offset` | `number` | `0` | Horizontal pixel offset from the anchor |
1183
+ | `y-offset` | `number` | `4` | Vertical pixel offset from the anchor |
1184
+ | `quick` | `boolean` | `false` | Disables open/close transition animations |
1185
+ | `dense` | `boolean` | `false` | Applies compact vertical spacing and smaller icon sizing |
1186
+ | `stay-open-on-focusout` | `boolean` | `false` | Prevents menu from closing when focus leaves the surface |
1187
+
1188
+ ##### `<md-menu-item>` Properties & Attributes
1189
+ | Name | Type | Default | Description |
1190
+ | :--- | :--- | :--- | :--- |
1191
+ | `headline` | `string` | `''` | Main item label text |
1192
+ | `supporting-text` | `string` | `''` | Secondary helper text below headline |
1193
+ | `trailing-supporting-text` | `string` | `''` | Trailing text (e.g. keyboard shortcut) |
1194
+ | `icon` | `string` | `''` | Leading Material Symbols icon name |
1195
+ | `trailing-icon` | `string` | `''` | Trailing Material Symbols icon name |
1196
+ | `disabled` | `boolean` | `false` | Disables interaction and dims item |
1197
+ | `selected` | `boolean` | `false` | Displays active selection state with checkmark |
1198
+ | `value` | `string` | `''` | Value associated with the menu item |
1199
+ | `href` | `string` | `''` | Renders item as an anchor link |
1200
+ | `target` | `string` | `''` | Anchor target attribute (e.g., `_blank`) |
1201
+ | `keep-open` | `boolean` | `false` | Prevents menu from closing when item is selected |
1202
+ | `dense` | `boolean` | `false` | Applies compact vertical sizing |
1203
+
1204
+ ##### Slots (`md-menu`)
1205
+ - `trigger`: Slotted trigger element (e.g., button or icon-button).
1206
+ - `(default)`: Menu items (`md-menu-item`) and dividers.
1207
+
1208
+ ##### Slots (`md-menu-item`)
1209
+ - `start` / `icon`: Leading icon or custom graphic.
1210
+ - `(default)`: Headline / label text.
1211
+ - `end` / `trailing`: Trailing content, shortcut text, or custom indicator.
1212
+
1213
+ ##### Events
1214
+ - `open`: Dispatched on `md-menu` when the menu opens.
1215
+ - `close`: Dispatched on `md-menu` when the menu closes.
1216
+ - `select`: Dispatched on `md-menu` and `md-menu-item` when an item is selected (`detail: { item: MdMenuItem, value: string }`).
1217
+
1218
+ ##### Code Example
1219
+ ```html
1220
+ <!-- Basic Action Menu with Trigger Button -->
1221
+ <md-menu>
1222
+ <md-button slot="trigger" variant="filled" icon="menu">Options</md-button>
1223
+ <md-menu-item icon="content_cut" headline="Cut" trailing-supporting-text="Ctrl+X" value="cut"></md-menu-item>
1224
+ <md-menu-item icon="content_copy" headline="Copy" trailing-supporting-text="Ctrl+C" value="copy"></md-menu-item>
1225
+ <md-menu-item icon="content_paste" headline="Paste" trailing-supporting-text="Ctrl+V" value="paste"></md-menu-item>
1226
+ <md-divider></md-divider>
1227
+ <md-menu-item icon="delete" headline="Delete" trailing-supporting-text="Del" value="delete"></md-menu-item>
1228
+ </md-menu>
1229
+
1230
+ <!-- Menu Anchored to External Trigger with Supporting Text -->
1231
+ <md-icon-button id="context-btn" icon="more_vert" aria-label="More options"></md-icon-button>
1232
+ <md-menu anchor="context-btn">
1233
+ <md-menu-item headline="Single view" supporting-text="Standard layout" selected value="single"></md-menu-item>
1234
+ <md-menu-item headline="Grid view" supporting-text="Compact card layout" value="grid"></md-menu-item>
1235
+ <md-menu-item headline="Table view" supporting-text="Detailed table row layout" disabled value="table"></md-menu-item>
1236
+ </md-menu>
1237
+ ```
1238
+
1239
+ ---
1240
+
746
1241
  #### List & List Item (`md-list`, `md-list-item`)
747
1242
 
748
1243
  - **Subpath**: `@francofantomius/material-components/list`
@@ -836,6 +1331,233 @@ const isEnabled = ref(true);
836
1331
 
837
1332
  ---
838
1333
 
1334
+ #### Side Sheet (`md-side-sheet`)
1335
+
1336
+ - **Subpath**: `@francofantomius/material-components/side-sheet`
1337
+ - **Description**: Side sheets display secondary content anchored to the side of the screen, supporting standard in-flow side panels and modal overlays with backdrop scrims.
1338
+
1339
+ ##### Properties & Attributes
1340
+ | Name | Type | Default | Description |
1341
+ | :--- | :--- | :--- | :--- |
1342
+ | `open` | `boolean` | `false` | Reflects open/closed state of the side sheet |
1343
+ | `type` | `'standard' \| 'modal'` | `'standard'` | Presentation mode: in-flow side panel or modal overlay |
1344
+ | `modal` | `boolean` | `false` | Enables modal overlay mode with backdrop scrim |
1345
+ | `side` | `'start' \| 'end' \| 'left' \| 'right'` | `'end'` | Screen side placement (start / left or end / right) |
1346
+ | `headline` | `string` | `''` | Header title text |
1347
+ | `subhead` | `string` | `''` | Header subtitle text |
1348
+ | `hide-close-button` | `boolean` | `false` | Hides the default close icon button in the header |
1349
+ | `divider` | `boolean` | `false` | Renders a divider line below the header |
1350
+
1351
+ ##### Slots
1352
+ - `header`: Full custom header area.
1353
+ - `headline`: Custom headline / title content.
1354
+ - `subhead`: Custom subtitle / subhead content.
1355
+ - `header-actions`: Actions next to the close button in the header.
1356
+ - `close-button`: Custom close button element.
1357
+ - `(default)`: Main scrollable body content.
1358
+ - `footer`: Bottom footer / actions section.
1359
+ - `actions`: Action buttons inside the footer.
1360
+
1361
+ ##### Events
1362
+ - `open`: Dispatched when the side sheet opens.
1363
+ - `close`: Dispatched when the side sheet closes.
1364
+ - `cancel`: Dispatched when dismissed via Escape key in modal mode.
1365
+ - `scrim-click`: Dispatched when the modal scrim backdrop is clicked.
1366
+ - `close-click`: Dispatched when the header close button is clicked.
1367
+
1368
+ ##### Code Example
1369
+ ```html
1370
+ <!-- Modal Side Sheet -->
1371
+ <md-button variant="filled" id="open-sheet-btn">Open Filters</md-button>
1372
+
1373
+ <md-side-sheet id="filters-sheet" type="modal" headline="Filters" subhead="Refine product listing">
1374
+ <md-checkbox checked>In Stock</md-checkbox>
1375
+ <md-checkbox>Free Shipping</md-checkbox>
1376
+ <div slot="actions">
1377
+ <md-button variant="text">Reset</md-button>
1378
+ <md-button variant="filled">Apply</md-button>
1379
+ </div>
1380
+ </md-side-sheet>
1381
+
1382
+ <!-- Standard In-Flow Side Sheet -->
1383
+ <div style="display: flex; height: 400px;">
1384
+ <div style="flex: 1; padding: 16px;">Main Page Content</div>
1385
+ <md-side-sheet open headline="Details" divider>
1386
+ <p>Contextual tool details and metadata.</p>
1387
+ </md-side-sheet>
1388
+ </div>
1389
+ ```
1390
+
1391
+ ---
1392
+
1393
+ #### Bottom Sheet (`md-bottom-sheet`)
1394
+
1395
+ - **Subpath**: `@francofantomius/material-components/bottom-sheet`
1396
+ - **Description**: Bottom sheets display supplementary content anchored to the bottom of the screen, supporting standard (docked) and modal (overlay with backdrop scrim) modes, drag handle gestures, touch swipe-to-dismiss, and customizable headers and footers.
1397
+
1398
+ ##### Properties & Attributes
1399
+ | Name | Type | Default | Description |
1400
+ | :--- | :--- | :--- | :--- |
1401
+ | `open` | `boolean` | `false` | Reflects open/closed state of the bottom sheet |
1402
+ | `type` | `'standard' \| 'modal'` | `'standard'` | Presentation mode: standard in-flow panel or modal overlay |
1403
+ | `modal` | `boolean` | `false` | Enables modal overlay mode with backdrop scrim |
1404
+ | `headline` | `string` | `''` | Header title text |
1405
+ | `subhead` | `string` | `''` | Header subtitle text |
1406
+ | `hide-drag-handle` | `boolean` | `false` | Hides the top drag handle bar |
1407
+ | `hide-close-button` | `boolean` | `false` | Hides the default close icon button in the header |
1408
+ | `divider` | `boolean` | `false` | Renders a divider line below the header |
1409
+ | `fullscreen` | `boolean` | `false` | Expands bottom sheet to full viewport height |
1410
+
1411
+ ##### Slots
1412
+ - `drag-handle`: Custom drag handle element.
1413
+ - `header`: Full custom header area.
1414
+ - `headline`: Custom headline / title content.
1415
+ - `subhead`: Custom subtitle / subhead content.
1416
+ - `header-actions`: Actions next to the close button in the header.
1417
+ - `close-button`: Custom close button element.
1418
+ - `(default)`: Main scrollable body content.
1419
+ - `footer`: Bottom footer / actions section.
1420
+ - `actions`: Action buttons inside the footer.
1421
+
1422
+ ##### Events
1423
+ - `open`: Dispatched when the bottom sheet opens.
1424
+ - `close`: Dispatched when the bottom sheet closes.
1425
+ - `cancel`: Dispatched when dismissed via Escape key in modal mode.
1426
+ - `scrim-click`: Dispatched when the modal scrim backdrop is clicked.
1427
+ - `close-click`: Dispatched when the header close button is clicked.
1428
+ - `drag-start`: Dispatched when drag gesture begins.
1429
+ - `drag-end`: Dispatched when drag gesture ends.
1430
+ - `drag-dismiss`: Dispatched when dismissed via downward drag gesture.
1431
+
1432
+ ##### Code Example
1433
+ ```html
1434
+ <!-- Modal Bottom Sheet with Drag Dismissal -->
1435
+ <md-button variant="filled" id="open-sheet-btn">Open Bottom Sheet</md-button>
1436
+
1437
+ <md-bottom-sheet id="demo-bottom-sheet" type="modal" headline="Share" subhead="Select a sharing option">
1438
+ <div style="display: flex; gap: 16px; padding: 12px 0;">
1439
+ <md-icon-button icon="link" aria-label="Copy link"></md-icon-button>
1440
+ <md-icon-button icon="mail" aria-label="Email"></md-icon-button>
1441
+ <md-icon-button icon="chat" aria-label="Messages"></md-icon-button>
1442
+ </div>
1443
+ <div slot="actions">
1444
+ <md-button variant="text">Cancel</md-button>
1445
+ </div>
1446
+ </md-bottom-sheet>
1447
+
1448
+ <!-- Standard Docked Bottom Sheet -->
1449
+ <md-bottom-sheet open headline="Now Playing" subhead="Song queue" divider>
1450
+ <p>Track 1: Ambient Horizon (3:42)</p>
1451
+ </md-bottom-sheet>
1452
+ ```
1453
+
1454
+ ---
1455
+
1456
+ #### Carousel (`md-carousel`, `md-carousel-item`)
1457
+
1458
+ - **Subpath**: `@francofantomius/material-components/carousel`
1459
+ - **Description**: Carousels present an interactive scrollable collection of items with support for multi-browse, hero, and full-width layouts, smooth scrolling, next/prev navigation buttons, swipe/drag gestures, and pagination indicators.
1460
+
1461
+ ##### Properties & Attributes (`<md-carousel>`)
1462
+ | Name | Type | Default | Description |
1463
+ | :--- | :--- | :--- | :--- |
1464
+ | `layout` | `'multi-browse' \| 'hero' \| 'full-width' \| 'uncontained'` | `'multi-browse'` | Layout arrangement and sizing for carousel items |
1465
+ | `active-index` | `number` | `0` | 0-based index of the currently active item |
1466
+ | `hide-controls` | `boolean` | `false` | Hides next and previous navigation arrow buttons |
1467
+ | `hide-indicators` | `boolean` | `false` | Hides bottom pagination indicator dots |
1468
+ | `loop` | `boolean` | `false` | Enables continuous infinite wrap-around navigation |
1469
+ | `autoplay` | `boolean` | `false` | Automatically advances slides periodically |
1470
+ | `autoplay-interval` | `number` | `5000` | Autoplay transition interval in milliseconds |
1471
+ | `item-spacing` | `string \| number` | `'8px'` | Gap between carousel items |
1472
+ | `item-width` | `string` | `''` | Custom width applied to each item |
1473
+ | `item-height` | `string` | `''` | Custom height applied to each item |
1474
+
1475
+ ##### Properties & Attributes (`<md-carousel-item>`)
1476
+ | Name | Type | Default | Description |
1477
+ | :--- | :--- | :--- | :--- |
1478
+ | `src` | `string` | `''` | Image source URL for the carousel item media |
1479
+ | `alt` | `string` | `''` | Alt text for image media |
1480
+ | `headline` | `string` | `''` | Title or headline overlay text |
1481
+ | `subhead` | `string` | `''` | Subtitle or description overlay text |
1482
+ | `href` | `string` | `''` | Optional navigation link URL |
1483
+ | `target` | `string` | `''` | Link target when href is set |
1484
+ | `interactive` | `boolean` | `false` | Enables ripple and hover interactive state |
1485
+ | `disabled` | `boolean` | `false` | Disables item interactions |
1486
+ | `snap-align` | `'start' \| 'center' \| 'end'` | `'start'` | Scroll snap alignment point |
1487
+
1488
+ ##### Methods (`<md-carousel>`)
1489
+ - `next()`: Scrolls to the next slide in the carousel.
1490
+ - `previous()`: Scrolls to the previous slide in the carousel.
1491
+ - `scrollToIndex(index: number, smooth: boolean = true)`: Smoothly scrolls to a specific item index.
1492
+
1493
+ ##### Events
1494
+ - `change`: Fired when the active slide changes (`detail: { activeIndex: number, item: MdCarouselItem }`).
1495
+ - `carousel-item-click`: Fired when an item is clicked (`detail: { item: MdCarouselItem }`).
1496
+
1497
+ ##### Slots (`<md-carousel>`)
1498
+ - `(default)`: Slot for `<md-carousel-item>` elements.
1499
+ - `prev-button`: Custom previous navigation button.
1500
+ - `next-button`: Custom next navigation button.
1501
+
1502
+ ##### Slots (`<md-carousel-item>`)
1503
+ - `(default)`: Custom card/slide body content.
1504
+ - `media`: Custom media element (image, video).
1505
+ - `headline`: Custom headline text element.
1506
+ - `subhead`: Custom subhead text element.
1507
+
1508
+ ##### Code Examples
1509
+
1510
+ ```html
1511
+ <!-- Multi-Browse Layout (Default) -->
1512
+ <md-carousel>
1513
+ <md-carousel-item
1514
+ src="https://images.unsplash.com/photo-1579546929518-9e396f3cc809?w=600&auto=format&fit=crop&q=80"
1515
+ headline="Colorful Gradients"
1516
+ subhead="Modern vibrant colors"
1517
+ ></md-carousel-item>
1518
+ <md-carousel-item
1519
+ src="https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=600&auto=format&fit=crop&q=80"
1520
+ headline="Abstract Waves"
1521
+ subhead="Smooth fluid motion"
1522
+ ></md-carousel-item>
1523
+ <md-carousel-item
1524
+ src="https://images.unsplash.com/photo-1550684848-fac1c5b4e853?w=600&auto=format&fit=crop&q=80"
1525
+ headline="Dark Aesthetics"
1526
+ subhead="Geometric lighting"
1527
+ ></md-carousel-item>
1528
+ </md-carousel>
1529
+
1530
+ <!-- Hero Layout with Loop -->
1531
+ <md-carousel layout="hero" loop>
1532
+ <md-carousel-item
1533
+ src="https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&auto=format&fit=crop&q=80"
1534
+ headline="Mountain Exploration"
1535
+ subhead="Scenic landscapes and trails"
1536
+ ></md-carousel-item>
1537
+ <md-carousel-item
1538
+ src="https://images.unsplash.com/photo-1447752875215-b2761acb3c5d?w=800&auto=format&fit=crop&q=80"
1539
+ headline="Forest Pathways"
1540
+ subhead="Lush greenery and walks"
1541
+ ></md-carousel-item>
1542
+ </md-carousel>
1543
+
1544
+ <!-- Full-Width Layout with Autoplay -->
1545
+ <md-carousel layout="full-width" autoplay autoplay-interval="4000">
1546
+ <md-carousel-item
1547
+ src="https://images.unsplash.com/photo-1518770660439-4636190af475?w=1000&auto=format&fit=crop&q=80"
1548
+ headline="Circuit Technology"
1549
+ subhead="Microchip architecture"
1550
+ ></md-carousel-item>
1551
+ <md-carousel-item
1552
+ src="https://images.unsplash.com/photo-1526374965328-7f61d4dc18c5?w=1000&auto=format&fit=crop&q=80"
1553
+ headline="Data Matrix"
1554
+ subhead="Cybersecurity networks"
1555
+ ></md-carousel-item>
1556
+ </md-carousel>
1557
+ ```
1558
+
1559
+ ---
1560
+
839
1561
  ### Communication & Feedback
840
1562
 
841
1563
  #### Badge (`md-badge`)
@@ -893,6 +1615,39 @@ const isEnabled = ref(true);
893
1615
 
894
1616
  ---
895
1617
 
1618
+ #### Loading Indicator (`md-loading-indicator`)
1619
+
1620
+ - **Subpath**: `@francofantomius/material-components/loading-indicator`
1621
+ - **Description**: Loading indicators express an unspecified wait time for short operations with Material Design 3 Expressive animated morphing shapes and optional contained containers.
1622
+
1623
+ ##### Properties & Attributes
1624
+ | Name | Type | Default | Description |
1625
+ | :--- | :--- | :--- | :--- |
1626
+ | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Visual size of the indicator |
1627
+ | `contained` | `boolean` | `false` | Encloses indicator within a contained surface container |
1628
+ | `shape` | `'morph' \| 'square' \| 'circle' \| 'clover' \| 'star'` | `'morph'` | Shape animation style |
1629
+ | `paused` | `boolean` | `false` | Pauses shape animation |
1630
+ | `label` | `string` | `'Loading'` | Accessible label for screen readers |
1631
+
1632
+ ##### Code Example
1633
+ ```html
1634
+ <!-- Standard morphing loading indicators -->
1635
+ <div style="display: flex; gap: 24px; align-items: center;">
1636
+ <md-loading-indicator size="small"></md-loading-indicator>
1637
+ <md-loading-indicator size="medium"></md-loading-indicator>
1638
+ <md-loading-indicator size="large"></md-loading-indicator>
1639
+ </div>
1640
+
1641
+ <!-- Contained loading indicators -->
1642
+ <div style="display: flex; gap: 24px; align-items: center; margin-top: 16px;">
1643
+ <md-loading-indicator contained size="small"></md-loading-indicator>
1644
+ <md-loading-indicator contained size="medium"></md-loading-indicator>
1645
+ <md-loading-indicator contained size="large"></md-loading-indicator>
1646
+ </div>
1647
+ ```
1648
+
1649
+ ---
1650
+
896
1651
  #### Snackbar (`md-snackbar`)
897
1652
 
898
1653
  - **Subpath**: `@francofantomius/material-components/snackbar`
@@ -926,8 +1681,116 @@ const isEnabled = ref(true);
926
1681
 
927
1682
  ---
928
1683
 
1684
+ #### Tooltip (`md-tooltip`)
1685
+
1686
+ - **Subpath**: `@francofantomius/material-components/tooltip`
1687
+ - **Description**: Tooltips display informative text when users hover over, focus on, or tap an element. Plain tooltips describe an element briefly, while rich tooltips provide detailed context, headlines, and action buttons.
1688
+
1689
+ ##### Properties & Attributes
1690
+ | Name | Type | Default | Description |
1691
+ | :--- | :--- | :--- | :--- |
1692
+ | `open` | `boolean` | `false` | Visibility state of the tooltip |
1693
+ | `position` | `'top' \| 'bottom' \| 'left' \| 'right'` | `'bottom'` | Preferred placement relative to anchor target |
1694
+ | `rich` | `boolean` | `false` | Enables rich tooltip styling with headline, supporting text, and actions |
1695
+ | `for` | `string` | `''` | ID of the target anchor element |
1696
+ | `value` | `string` | `''` | Plain tooltip label or rich tooltip supporting text |
1697
+ | `headline` | `string` | `''` | Headline / subhead for rich tooltips |
1698
+ | `action-text` | `string` | `''` | Action button label for rich tooltips |
1699
+ | `show-delay` | `number` | `500` | Delay in milliseconds before showing tooltip on hover |
1700
+ | `hide-delay` | `number` | `150` | Delay in milliseconds before hiding tooltip after pointer leaves |
1701
+ | `persistent` | `boolean` | `false` | Keeps rich tooltip open until dismissed explicitly |
1702
+ | `has-caret` | `boolean` | `false` | Renders a directional pointing caret |
1703
+ | `disabled` | `boolean` | `false` | Disables tooltip triggering |
1704
+
1705
+ ##### Events
1706
+ - `open`: Dispatched when tooltip becomes visible (`{ target: MdTooltip }`).
1707
+ - `close`: Dispatched when tooltip is dismissed (`{ target: MdTooltip }`).
1708
+ - `action`: Dispatched when rich tooltip action button is clicked (`{ target: MdTooltip }`).
1709
+
1710
+ ##### Slots
1711
+ - `(default)`: Plain tooltip text or rich tooltip supporting content.
1712
+ - `headline`: Custom headline or rich header element.
1713
+ - `actions`: Custom action buttons for rich tooltips.
1714
+ - `anchor`: Slotted anchor element (optional).
1715
+
1716
+ ##### Code Example
1717
+ ```html
1718
+ <!-- Plain Tooltips on Icon Buttons -->
1719
+ <div style="display: flex; gap: 24px; align-items: center;">
1720
+ <div>
1721
+ <md-icon-button id="fav-btn" icon="favorite" aria-label="Favorite"></md-icon-button>
1722
+ <md-tooltip for="fav-btn" value="Add to favorites" position="bottom"></md-tooltip>
1723
+ </div>
1724
+
1725
+ <div>
1726
+ <md-icon-button id="share-btn" icon="share" aria-label="Share"></md-icon-button>
1727
+ <md-tooltip for="share-btn" value="Share link" position="top"></md-tooltip>
1728
+ </div>
1729
+ </div>
1730
+
1731
+ <!-- Rich Tooltip with Headline and Action -->
1732
+ <div>
1733
+ <md-button id="help-btn" variant="tonal" icon="help_outline">Permissions</md-button>
1734
+ <md-tooltip
1735
+ for="help-btn"
1736
+ rich
1737
+ has-caret
1738
+ position="bottom"
1739
+ headline="Access Permissions"
1740
+ value="Members with View permissions can read and comment on documents without editing."
1741
+ action-text="Learn more"
1742
+ ></md-tooltip>
1743
+ </div>
1744
+ ```
1745
+
1746
+ ---
1747
+
929
1748
  ### Navigation
930
1749
 
1750
+ #### Navigation Bar (`md-navigation-bar`, `md-navigation-bar-item`)
1751
+
1752
+ - **Subpath**: `@francofantomius/material-components/navigation-bar`
1753
+ - **Description**: Navigation bars let users switch between 3 to 5 top-level destinations at the bottom of the screen with active indicator pills, badge notifications, and label visibility modes (`alwaysShow`, `selectedShow`, `hidden`).
1754
+
1755
+ ##### `<md-navigation-bar>` Properties
1756
+ | Name | Type | Default | Description |
1757
+ | :--- | :--- | :--- | :--- |
1758
+ | `active-index` | `number` | `0` | Zero-based index of the currently active destination |
1759
+ | `value` | `string` | `''` | Value of the currently active destination |
1760
+ | `label-mode` | `'alwaysShow' \| 'selectedShow' \| 'hidden'` | `'alwaysShow'` | Controls label visibility across destination items |
1761
+ | `hide-inactive-labels` | `boolean` | `false` | Hides labels on inactive items (`selectedShow` behavior) |
1762
+ | `disabled` | `boolean` | `false` | Disables interaction on all items |
1763
+
1764
+ ##### `<md-navigation-bar-item>` Properties
1765
+ | Name | Type | Default | Description |
1766
+ | :--- | :--- | :--- | :--- |
1767
+ | `icon` | `string` | `''` | Material Symbols destination icon |
1768
+ | `active-icon` | `string` | `''` | Optional icon displayed when item is active |
1769
+ | `label` | `string` | `''` | Destination title text |
1770
+ | `badge` | `string` | `''` | Numeric, text, or `"dot"` badge indicator |
1771
+ | `active` | `boolean` | `false` | Highlights item with active indicator pill |
1772
+ | `disabled` | `boolean` | `false` | Disables item interactions |
1773
+ | `value` | `string` | `''` | Value identifier for destination |
1774
+ | `href` | `string` | `''` | Optional navigation hyperlink |
1775
+ | `label-mode` | `'alwaysShow' \| 'selectedShow' \| 'hidden'` | `'alwaysShow'` | Per-item label visibility mode |
1776
+
1777
+ ##### Events
1778
+ - `change`: Dispatched on `<md-navigation-bar>` when the active destination changes (`{ activeIndex, selectedIndex, index, value, item }`).
1779
+ - `item-click`: Dispatched on `<md-navigation-bar-item>` when clicked (`{ item, value, label, active }`).
1780
+
1781
+ ##### Code Example
1782
+ ```html
1783
+ <md-navigation-bar active-index="0" id="bottom-nav">
1784
+ <md-navigation-bar-item icon="home" label="Home" value="home"></md-navigation-bar-item>
1785
+ <md-navigation-bar-item icon="explore" label="Explore" value="explore"></md-navigation-bar-item>
1786
+ <md-navigation-bar-item icon="mail" label="Mail" badge="12" value="mail"></md-navigation-bar-item>
1787
+ <md-navigation-bar-item icon="chat" label="Chat" badge="dot" value="chat"></md-navigation-bar-item>
1788
+ <md-navigation-bar-item icon="person" label="Profile" value="profile"></md-navigation-bar-item>
1789
+ </md-navigation-bar>
1790
+ ```
1791
+
1792
+ ---
1793
+
931
1794
  #### Navigation Drawer (`md-navigation-drawer`, `md-navigation-drawer-item`)
932
1795
 
933
1796
  - **Subpath**: `@francofantomius/material-components/navigation-drawer`
@@ -972,6 +1835,62 @@ const isEnabled = ref(true);
972
1835
 
973
1836
  ---
974
1837
 
1838
+ #### Navigation Rail (`md-navigation-rail`, `md-navigation-rail-item`)
1839
+
1840
+ - **Subpath**: `@francofantomius/material-components/navigation-rail`
1841
+ - **Description**: Navigation rails provide side navigation access to primary destinations in apps on mid-sized to large screens (tablets, desktops), supporting leading menu/header/fab slots, active indicator pill destinations, badges, and top/center/bottom alignment.
1842
+
1843
+ ##### `<md-navigation-rail>` Properties
1844
+ | Name | Type | Default | Description |
1845
+ | :--- | :--- | :--- | :--- |
1846
+ | `alignment` | `'top' \| 'center' \| 'bottom'` | `'top'` | Vertical alignment of destination items |
1847
+ | `hide-labels` | `boolean` | `false` | Hides all destination text labels |
1848
+ | `active-index` | `number` | `-1` | Zero-based index of the currently active destination |
1849
+
1850
+ ##### `<md-navigation-rail-item>` Properties
1851
+ | Name | Type | Default | Description |
1852
+ | :--- | :--- | :--- | :--- |
1853
+ | `icon` | `string` | `''` | Material Symbols destination icon |
1854
+ | `active-icon` | `string` | `''` | Material Symbols icon displayed when active |
1855
+ | `label` | `string` | `''` | Destination title |
1856
+ | `badge` | `string` | `''` | Numeric or text badge indicator |
1857
+ | `badge-dot` | `boolean` | `false` | Small circular status dot badge |
1858
+ | `active` | `boolean` | `false` | Highlights destination with active indicator pill |
1859
+ | `disabled` | `boolean` | `false` | Disables destination interaction |
1860
+ | `hide-label` | `boolean` | `false` | Hides text label for this item |
1861
+ | `href` | `string` | `''` | Optional navigation hyperlink |
1862
+ | `value` | `string` | `''` | Custom item value identifier |
1863
+
1864
+ ##### Slots
1865
+ - `header`: Top header section (logo, title).
1866
+ - `menu`: Top menu button slot.
1867
+ - `fab`: Slotted Floating Action Button (FAB).
1868
+ - `(default)`: Main destination items (`md-navigation-rail-item`).
1869
+ - `footer`: Bottom actions or user profile slot.
1870
+
1871
+ ##### Events
1872
+ - `change`: Dispatched when active destination in the rail changes (`detail: { activeIndex: number, item: MdNavigationRailItem, value: string }`).
1873
+ - `item-click`: Dispatched when an individual rail item is clicked (`detail: { label: string, icon: string, active: boolean, value: string, item: MdNavigationRailItem }`).
1874
+
1875
+ ##### Code Example
1876
+ ```html
1877
+ <md-navigation-rail alignment="top">
1878
+ <md-icon-button slot="menu" icon="menu" aria-label="Menu"></md-icon-button>
1879
+ <md-fab slot="fab" size="small" icon="edit" aria-label="Compose"></md-fab>
1880
+
1881
+ <md-navigation-rail-item icon="inbox" label="Inbox" badge="3" active></md-navigation-rail-item>
1882
+ <md-navigation-rail-item icon="star" label="Starred"></md-navigation-rail-item>
1883
+ <md-navigation-rail-item icon="send" label="Sent"></md-navigation-rail-item>
1884
+ <md-navigation-rail-item icon="chat" label="Chat" badge-dot></md-navigation-rail-item>
1885
+
1886
+ <div slot="footer">
1887
+ <md-icon-button icon="settings" aria-label="Settings"></md-icon-button>
1888
+ </div>
1889
+ </md-navigation-rail>
1890
+ ```
1891
+
1892
+ ---
1893
+
975
1894
  #### Top App Bar (`md-top-app-bar`)
976
1895
 
977
1896
  - **Subpath**: `@francofantomius/material-components/top-app-bar`