@moni-labs/moni-ui 0.2.0 → 0.3.0

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 (323) hide show
  1. package/README.md +52 -194
  2. package/custom-elements.json +1636 -350
  3. package/dist/actions/index.d.ts +6 -0
  4. package/dist/actions/index.d.ts.map +1 -1
  5. package/dist/actions/index.js +6 -0
  6. package/dist/components/_base/field-styles.d.ts +51 -16
  7. package/dist/components/_base/field-styles.d.ts.map +1 -1
  8. package/dist/components/_base/field-styles.js +164 -36
  9. package/dist/components/_base/index.d.ts +25 -0
  10. package/dist/components/_base/index.d.ts.map +1 -1
  11. package/dist/components/_base/index.js +25 -0
  12. package/dist/components/_base/interaction-styles.d.ts +39 -12
  13. package/dist/components/_base/interaction-styles.d.ts.map +1 -1
  14. package/dist/components/_base/interaction-styles.js +85 -33
  15. package/dist/components/_base/moni-element.d.ts +43 -8
  16. package/dist/components/_base/moni-element.d.ts.map +1 -1
  17. package/dist/components/_base/moni-element.js +43 -8
  18. package/dist/components/_base/shared-styles.d.ts +41 -17
  19. package/dist/components/_base/shared-styles.d.ts.map +1 -1
  20. package/dist/components/_base/shared-styles.js +113 -21
  21. package/dist/components/index.d.ts +6 -0
  22. package/dist/components/index.d.ts.map +1 -1
  23. package/dist/components/index.js +6 -0
  24. package/dist/components/loading-shapes.d.ts +6 -0
  25. package/dist/components/loading-shapes.d.ts.map +1 -1
  26. package/dist/components/loading-shapes.js +6 -0
  27. package/dist/components/moni-app-bar.d.ts +128 -33
  28. package/dist/components/moni-app-bar.d.ts.map +1 -1
  29. package/dist/components/moni-app-bar.js +121 -26
  30. package/dist/components/moni-badge.d.ts +122 -14
  31. package/dist/components/moni-badge.d.ts.map +1 -1
  32. package/dist/components/moni-badge.js +122 -14
  33. package/dist/components/moni-bottom-sheet.d.ts +120 -15
  34. package/dist/components/moni-bottom-sheet.d.ts.map +1 -1
  35. package/dist/components/moni-bottom-sheet.js +116 -12
  36. package/dist/components/moni-button-group.d.ts +53 -27
  37. package/dist/components/moni-button-group.d.ts.map +1 -1
  38. package/dist/components/moni-button-group.js +49 -23
  39. package/dist/components/moni-button-segment.d.ts +28 -8
  40. package/dist/components/moni-button-segment.d.ts.map +1 -1
  41. package/dist/components/moni-button-segment.js +27 -7
  42. package/dist/components/moni-button.d.ts +51 -32
  43. package/dist/components/moni-button.d.ts.map +1 -1
  44. package/dist/components/moni-button.js +50 -31
  45. package/dist/components/moni-card.d.ts +91 -31
  46. package/dist/components/moni-card.d.ts.map +1 -1
  47. package/dist/components/moni-card.js +86 -26
  48. package/dist/components/moni-carousel.d.ts +67 -17
  49. package/dist/components/moni-carousel.d.ts.map +1 -1
  50. package/dist/components/moni-carousel.js +59 -16
  51. package/dist/components/moni-checkbox.d.ts +122 -17
  52. package/dist/components/moni-checkbox.d.ts.map +1 -1
  53. package/dist/components/moni-checkbox.js +118 -14
  54. package/dist/components/moni-chip.d.ts +56 -30
  55. package/dist/components/moni-chip.d.ts.map +1 -1
  56. package/dist/components/moni-chip.js +51 -25
  57. package/dist/components/moni-color-field.d.ts +44 -6
  58. package/dist/components/moni-color-field.d.ts.map +1 -1
  59. package/dist/components/moni-color-field.js +43 -5
  60. package/dist/components/moni-context-menu.d.ts +44 -22
  61. package/dist/components/moni-context-menu.d.ts.map +1 -1
  62. package/dist/components/moni-context-menu.js +43 -21
  63. package/dist/components/moni-dialog.d.ts +107 -15
  64. package/dist/components/moni-dialog.d.ts.map +1 -1
  65. package/dist/components/moni-dialog.js +105 -14
  66. package/dist/components/moni-divider.d.ts +50 -15
  67. package/dist/components/moni-divider.d.ts.map +1 -1
  68. package/dist/components/moni-divider.js +49 -14
  69. package/dist/components/moni-expansion.d.ts +44 -8
  70. package/dist/components/moni-expansion.d.ts.map +1 -1
  71. package/dist/components/moni-expansion.js +43 -7
  72. package/dist/components/moni-fab-menu.d.ts +39 -20
  73. package/dist/components/moni-fab-menu.d.ts.map +1 -1
  74. package/dist/components/moni-fab-menu.js +38 -19
  75. package/dist/components/moni-fab.d.ts +49 -23
  76. package/dist/components/moni-fab.d.ts.map +1 -1
  77. package/dist/components/moni-fab.js +46 -20
  78. package/dist/components/moni-file-field.d.ts +54 -14
  79. package/dist/components/moni-file-field.d.ts.map +1 -1
  80. package/dist/components/moni-file-field.js +53 -13
  81. package/dist/components/moni-icon.d.ts +78 -11
  82. package/dist/components/moni-icon.d.ts.map +1 -1
  83. package/dist/components/moni-icon.js +77 -10
  84. package/dist/components/moni-list-item.d.ts +61 -30
  85. package/dist/components/moni-list-item.d.ts.map +1 -1
  86. package/dist/components/moni-list-item.js +55 -24
  87. package/dist/components/moni-list.d.ts +37 -13
  88. package/dist/components/moni-list.d.ts.map +1 -1
  89. package/dist/components/moni-list.js +36 -12
  90. package/dist/components/moni-loading-indicator.d.ts +38 -11
  91. package/dist/components/moni-loading-indicator.d.ts.map +1 -1
  92. package/dist/components/moni-loading-indicator.js +37 -10
  93. package/dist/components/moni-menu-item.d.ts +31 -8
  94. package/dist/components/moni-menu-item.d.ts.map +1 -1
  95. package/dist/components/moni-menu-item.js +30 -7
  96. package/dist/components/moni-menu.d.ts +58 -33
  97. package/dist/components/moni-menu.d.ts.map +1 -1
  98. package/dist/components/moni-menu.js +51 -26
  99. package/dist/components/moni-morph-modal.d.ts +7 -1
  100. package/dist/components/moni-morph-modal.d.ts.map +1 -1
  101. package/dist/components/moni-morph-modal.js +46 -24
  102. package/dist/components/moni-nav-item.d.ts +50 -10
  103. package/dist/components/moni-nav-item.d.ts.map +1 -1
  104. package/dist/components/moni-nav-item.js +48 -8
  105. package/dist/components/moni-nav.d.ts +57 -22
  106. package/dist/components/moni-nav.d.ts.map +1 -1
  107. package/dist/components/moni-nav.js +53 -18
  108. package/dist/components/moni-progress.d.ts +108 -20
  109. package/dist/components/moni-progress.d.ts.map +1 -1
  110. package/dist/components/moni-progress.js +104 -16
  111. package/dist/components/moni-radio.d.ts +106 -14
  112. package/dist/components/moni-radio.d.ts.map +1 -1
  113. package/dist/components/moni-radio.js +104 -13
  114. package/dist/components/moni-ripple.d.ts +121 -10
  115. package/dist/components/moni-ripple.d.ts.map +1 -1
  116. package/dist/components/moni-ripple.js +120 -9
  117. package/dist/components/moni-segmented-button.d.ts +31 -11
  118. package/dist/components/moni-segmented-button.d.ts.map +1 -1
  119. package/dist/components/moni-segmented-button.js +30 -10
  120. package/dist/components/moni-select-option.d.ts +43 -9
  121. package/dist/components/moni-select-option.d.ts.map +1 -1
  122. package/dist/components/moni-select-option.js +41 -7
  123. package/dist/components/moni-select.d.ts +59 -2
  124. package/dist/components/moni-select.d.ts.map +1 -1
  125. package/dist/components/moni-select.js +58 -1
  126. package/dist/components/moni-shape.d.ts +1 -1
  127. package/dist/components/moni-side-sheet.d.ts +56 -19
  128. package/dist/components/moni-side-sheet.d.ts.map +1 -1
  129. package/dist/components/moni-side-sheet.js +53 -16
  130. package/dist/components/moni-slider.d.ts +56 -25
  131. package/dist/components/moni-slider.d.ts.map +1 -1
  132. package/dist/components/moni-slider.js +55 -24
  133. package/dist/components/moni-snackbar.d.ts +86 -17
  134. package/dist/components/moni-snackbar.d.ts.map +1 -1
  135. package/dist/components/moni-snackbar.js +85 -16
  136. package/dist/components/moni-split-button.d.ts +38 -9
  137. package/dist/components/moni-split-button.d.ts.map +1 -1
  138. package/dist/components/moni-split-button.js +37 -8
  139. package/dist/components/moni-step.d.ts +42 -9
  140. package/dist/components/moni-step.d.ts.map +1 -1
  141. package/dist/components/moni-step.js +41 -8
  142. package/dist/components/moni-stepper.d.ts +43 -6
  143. package/dist/components/moni-stepper.d.ts.map +1 -1
  144. package/dist/components/moni-stepper.js +42 -5
  145. package/dist/components/moni-switch.d.ts +103 -16
  146. package/dist/components/moni-switch.d.ts.map +1 -1
  147. package/dist/components/moni-switch.js +99 -13
  148. package/dist/components/moni-tab.d.ts +35 -8
  149. package/dist/components/moni-tab.d.ts.map +1 -1
  150. package/dist/components/moni-tab.js +34 -7
  151. package/dist/components/moni-tabs.d.ts +51 -13
  152. package/dist/components/moni-tabs.d.ts.map +1 -1
  153. package/dist/components/moni-tabs.js +48 -10
  154. package/dist/components/moni-text-field.d.ts +55 -10
  155. package/dist/components/moni-text-field.d.ts.map +1 -1
  156. package/dist/components/moni-text-field.js +54 -9
  157. package/dist/components/moni-textarea.d.ts +51 -21
  158. package/dist/components/moni-textarea.d.ts.map +1 -1
  159. package/dist/components/moni-textarea.js +48 -18
  160. package/dist/components/moni-time-picker.d.ts +41 -11
  161. package/dist/components/moni-time-picker.d.ts.map +1 -1
  162. package/dist/components/moni-time-picker.js +40 -10
  163. package/dist/components/moni-toolbar.d.ts +43 -15
  164. package/dist/components/moni-toolbar.d.ts.map +1 -1
  165. package/dist/components/moni-toolbar.js +42 -14
  166. package/dist/components/moni-tooltip.d.ts +55 -25
  167. package/dist/components/moni-tooltip.d.ts.map +1 -1
  168. package/dist/components/moni-tooltip.js +54 -24
  169. package/dist/components/moni-typography.d.ts +43 -18
  170. package/dist/components/moni-typography.d.ts.map +1 -1
  171. package/dist/components/moni-typography.js +42 -17
  172. package/dist/index.d.ts +47 -0
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +59 -2
  175. package/dist/styles/tailwind.css +67 -0
  176. package/dist/styles/tokens.css +111 -99
  177. package/dist/utils/color.d.ts +181 -2
  178. package/dist/utils/color.d.ts.map +1 -1
  179. package/dist/utils/color.js +182 -4
  180. package/dist/utils/theme.svelte.d.ts +305 -2
  181. package/dist/utils/theme.svelte.d.ts.map +1 -1
  182. package/dist/utils/theme.svelte.js +331 -2
  183. package/dist/web-components.d.ts +28 -0
  184. package/dist/web-components.d.ts.map +1 -1
  185. package/dist/web-components.js +29 -2
  186. package/package.json +1 -1
  187. package/src/actions/index.ts +7 -0
  188. package/src/components/_base/field-styles.ts +165 -37
  189. package/src/components/_base/index.ts +27 -0
  190. package/src/components/_base/interaction-styles.ts +86 -33
  191. package/src/components/_base/moni-element.ts +44 -8
  192. package/src/components/_base/shared-styles.ts +114 -21
  193. package/src/components/index.ts +7 -0
  194. package/src/components/loading-shapes.ts +7 -0
  195. package/src/components/moni-app-bar.ts +127 -26
  196. package/src/components/moni-badge.ts +128 -14
  197. package/src/components/moni-bottom-sheet.ts +125 -13
  198. package/src/components/moni-button-group.ts +50 -23
  199. package/src/components/moni-button-segment.ts +28 -7
  200. package/src/components/moni-button.ts +51 -31
  201. package/src/components/moni-card.ts +90 -26
  202. package/src/components/moni-carousel.ts +67 -16
  203. package/src/components/moni-checkbox.ts +125 -14
  204. package/src/components/moni-chip.ts +52 -25
  205. package/src/components/moni-color-field.ts +44 -5
  206. package/src/components/moni-context-menu.ts +44 -21
  207. package/src/components/moni-dialog.ts +111 -14
  208. package/src/components/moni-divider.ts +50 -14
  209. package/src/components/moni-expansion.ts +44 -7
  210. package/src/components/moni-fab-menu.ts +39 -19
  211. package/src/components/moni-fab.ts +47 -20
  212. package/src/components/moni-file-field.ts +54 -13
  213. package/src/components/moni-icon.ts +80 -10
  214. package/src/components/moni-list-item.ts +56 -24
  215. package/src/components/moni-list.ts +37 -12
  216. package/src/components/moni-loading-indicator.ts +38 -10
  217. package/src/components/moni-menu-item.ts +31 -7
  218. package/src/components/moni-menu.ts +52 -26
  219. package/src/components/moni-morph-modal.ts +58 -24
  220. package/src/components/moni-nav-item.ts +49 -8
  221. package/src/components/moni-nav.ts +54 -18
  222. package/src/components/moni-progress.ts +109 -16
  223. package/src/components/moni-radio.ts +111 -13
  224. package/src/components/moni-ripple.ts +126 -9
  225. package/src/components/moni-segmented-button.ts +31 -10
  226. package/src/components/moni-select-option.ts +42 -7
  227. package/src/components/moni-select.ts +79 -1
  228. package/src/components/moni-side-sheet.ts +54 -16
  229. package/src/components/moni-slider.ts +56 -24
  230. package/src/components/moni-snackbar.ts +90 -16
  231. package/src/components/moni-split-button.ts +38 -8
  232. package/src/components/moni-step.ts +42 -8
  233. package/src/components/moni-stepper.ts +43 -5
  234. package/src/components/moni-switch.ts +106 -13
  235. package/src/components/moni-tab.ts +35 -7
  236. package/src/components/moni-tabs.ts +49 -10
  237. package/src/components/moni-text-field.ts +55 -9
  238. package/src/components/moni-textarea.ts +49 -18
  239. package/src/components/moni-time-picker.ts +41 -10
  240. package/src/components/moni-toolbar.ts +43 -14
  241. package/src/components/moni-tooltip.ts +55 -24
  242. package/src/components/moni-typography.ts +43 -17
  243. package/src/index.ts +67 -3
  244. package/src/styles/tailwind.css +67 -0
  245. package/src/styles/tokens.css +111 -99
  246. package/src/types/svelte-runes.d.ts +64 -2
  247. package/src/utils/color.ts +286 -5
  248. package/src/utils/theme.svelte.ts +411 -2
  249. package/src/web-components.ts +31 -2
  250. package/dist/assets/shapes/arch.svg +0 -1
  251. package/dist/assets/shapes/arrow.svg +0 -1
  252. package/dist/assets/shapes/boom.svg +0 -1
  253. package/dist/assets/shapes/burst.svg +0 -1
  254. package/dist/assets/shapes/circle.svg +0 -1
  255. package/dist/assets/shapes/clamshell.svg +0 -1
  256. package/dist/assets/shapes/diamond.svg +0 -1
  257. package/dist/assets/shapes/fan.svg +0 -1
  258. package/dist/assets/shapes/flower.svg +0 -1
  259. package/dist/assets/shapes/gem.svg +0 -1
  260. package/dist/assets/shapes/ghost-ish.svg +0 -1
  261. package/dist/assets/shapes/heart.svg +0 -1
  262. package/dist/assets/shapes/leaf-clover4.svg +0 -1
  263. package/dist/assets/shapes/leaf-clover8.svg +0 -1
  264. package/dist/assets/shapes/loading-indicator.svg +0 -1
  265. package/dist/assets/shapes/oval.svg +0 -1
  266. package/dist/assets/shapes/pentagon.svg +0 -1
  267. package/dist/assets/shapes/pill.svg +0 -1
  268. package/dist/assets/shapes/pixel-circle.svg +0 -1
  269. package/dist/assets/shapes/pixel-triangle.svg +0 -1
  270. package/dist/assets/shapes/puffy-diamond.svg +0 -1
  271. package/dist/assets/shapes/puffy.svg +0 -1
  272. package/dist/assets/shapes/semicircle.svg +0 -1
  273. package/dist/assets/shapes/sided-cookie12.svg +0 -1
  274. package/dist/assets/shapes/sided-cookie4.svg +0 -1
  275. package/dist/assets/shapes/sided-cookie6.svg +0 -1
  276. package/dist/assets/shapes/sided-cookie7.svg +0 -1
  277. package/dist/assets/shapes/sided-cookie9.svg +0 -1
  278. package/dist/assets/shapes/slanted.svg +0 -1
  279. package/dist/assets/shapes/soft-boom.svg +0 -1
  280. package/dist/assets/shapes/soft-burst.svg +0 -1
  281. package/dist/assets/shapes/square.svg +0 -1
  282. package/dist/assets/shapes/sunny.svg +0 -1
  283. package/dist/assets/shapes/triangle.svg +0 -1
  284. package/dist/assets/shapes/very-sunny.svg +0 -1
  285. package/dist/assets/shapes/wavy-circle.svg +0 -1
  286. package/dist/assets/shapes/wavy.svg +0 -1
  287. package/src/assets/shapes/arch.svg +0 -1
  288. package/src/assets/shapes/arrow.svg +0 -1
  289. package/src/assets/shapes/boom.svg +0 -1
  290. package/src/assets/shapes/burst.svg +0 -1
  291. package/src/assets/shapes/circle.svg +0 -1
  292. package/src/assets/shapes/clamshell.svg +0 -1
  293. package/src/assets/shapes/diamond.svg +0 -1
  294. package/src/assets/shapes/fan.svg +0 -1
  295. package/src/assets/shapes/flower.svg +0 -1
  296. package/src/assets/shapes/gem.svg +0 -1
  297. package/src/assets/shapes/ghost-ish.svg +0 -1
  298. package/src/assets/shapes/heart.svg +0 -1
  299. package/src/assets/shapes/leaf-clover4.svg +0 -1
  300. package/src/assets/shapes/leaf-clover8.svg +0 -1
  301. package/src/assets/shapes/loading-indicator.svg +0 -1
  302. package/src/assets/shapes/oval.svg +0 -1
  303. package/src/assets/shapes/pentagon.svg +0 -1
  304. package/src/assets/shapes/pill.svg +0 -1
  305. package/src/assets/shapes/pixel-circle.svg +0 -1
  306. package/src/assets/shapes/pixel-triangle.svg +0 -1
  307. package/src/assets/shapes/puffy-diamond.svg +0 -1
  308. package/src/assets/shapes/puffy.svg +0 -1
  309. package/src/assets/shapes/semicircle.svg +0 -1
  310. package/src/assets/shapes/sided-cookie12.svg +0 -1
  311. package/src/assets/shapes/sided-cookie4.svg +0 -1
  312. package/src/assets/shapes/sided-cookie6.svg +0 -1
  313. package/src/assets/shapes/sided-cookie7.svg +0 -1
  314. package/src/assets/shapes/sided-cookie9.svg +0 -1
  315. package/src/assets/shapes/slanted.svg +0 -1
  316. package/src/assets/shapes/soft-boom.svg +0 -1
  317. package/src/assets/shapes/soft-burst.svg +0 -1
  318. package/src/assets/shapes/square.svg +0 -1
  319. package/src/assets/shapes/sunny.svg +0 -1
  320. package/src/assets/shapes/triangle.svg +0 -1
  321. package/src/assets/shapes/very-sunny.svg +0 -1
  322. package/src/assets/shapes/wavy-circle.svg +0 -1
  323. package/src/assets/shapes/wavy.svg +0 -1
@@ -1,34 +1,121 @@
1
+ /**
2
+ * @file components/moni-switch.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
1
7
  import { MoniElement } from './_base/index.js';
2
8
  import './moni-icon.js';
3
9
  /**
4
- * Switch styled per Material Design 3 specs.
5
- *
6
- * M3 measurements (`m3-docs/components/switch/specs.md`):
7
- * - Track: 52dp × 32dp, 2dp outline, full corner radius
8
- * - Handle (thumb): 16dp unselected, 24dp selected, 28dp pressed
9
- * - State layer: 40dp circular ripple on hover/focus/pressed
10
- * - Icon (optional): 16dp on selected and/or unselected handle
11
- *
12
- * Attributes:
13
- * - label: text label (displayed to the right of the switch)
14
- * - checked: present
15
- * - disabled: present
16
- * - icon: present renders check/close icons inside the thumb
17
- * - name: forwarded to input.name
18
- * - value: forwarded to input.value
10
+ * Material Design 3 Switch component.
11
+ *
12
+ * Switches toggle the state of a single setting on or off. They are the
13
+ * binary on/off equivalent of a checkbox, but optimized for toggling a
14
+ * single state rather than selecting from a list.
15
+ *
16
+ * **M3 spec reference:** `m3-docs/components/switch/specs.md`
17
+ *
18
+ * **M3 measurements:**
19
+ * - Track: 52dp × 32dp, 2dp border, full-radius pill shape.
20
+ * - Handle (thumb): 16dp unselected → 24dp selected → 28dp pressed.
21
+ * - State layer: 40dp circular ripple on hover/focus/pressed states.
22
+ * - Icon (optional): 16dp icon rendered inside the thumb when `icon` is set.
23
+ *
24
+ * **Visual architecture:**
25
+ * Like `<moni-checkbox>`, the native `<input type="checkbox" role="switch">`
26
+ * occupies real layout space but is visually hidden via `opacity: 0`. Two
27
+ * `<span>` pseudo-elements render the track (`::after`) and thumb (`::before`).
28
+ * When `icon=true`, `<i>` elements render `close` and `check` glyphs inside
29
+ * the thumb, with visibility toggled via CSS based on the checked state.
30
+ *
31
+ * @fires change - Bubbles and is composed. Fired when the switch is toggled.
32
+ * Read `element.checked` for the new state.
33
+ *
34
+ * @example
35
+ * ```html
36
+ * <moni-switch label="Dark mode" name="dark-mode"></moni-switch>
37
+ * <moni-switch icon checked label="Notifications"></moni-switch>
38
+ *
39
+ * <script>
40
+ * document.querySelector('moni-switch').addEventListener('change', (e) => {
41
+ * console.log('enabled:', e.target.checked);
42
+ * });
43
+ * </script>
44
+ * ```
45
+ *
46
+ * @csspart switch - The outer `<label>` element containing the switch.
19
47
  */
20
48
  export declare class MoniSwitch extends MoniElement {
49
+ /**
50
+ * Text label displayed to the right of the switch.
51
+ *
52
+ * When non-empty, renders as a padded text span after the track.
53
+ * When empty, the default slot is rendered, allowing custom HTML labels.
54
+ *
55
+ * @default ''
56
+ */
21
57
  label: string;
58
+ /**
59
+ * Whether the switch is in the "on" (checked) state.
60
+ *
61
+ * When `true`:
62
+ * - Track fills with `--primary` color.
63
+ * - Thumb grows from 16dp to 24dp and slides to the trailing edge.
64
+ * - Thumb color changes to `--on-primary`.
65
+ *
66
+ * @default false
67
+ */
22
68
  checked: boolean;
69
+ /**
70
+ * When `true`, the switch is non-interactive and renders at 50% opacity.
71
+ *
72
+ * @default false
73
+ */
23
74
  disabled: boolean;
75
+ /**
76
+ * When `true`, renders icon glyphs inside the thumb.
77
+ *
78
+ * Uses Material Symbols ligatures:
79
+ * - Unchecked state: `close` icon.
80
+ * - Checked state: `check` icon.
81
+ *
82
+ * The icon size (16dp) is set via the `--_thumb` CSS custom property.
83
+ *
84
+ * @default false
85
+ */
24
86
  icon: boolean;
87
+ /**
88
+ * Forwarded to the native `<input name>` attribute for form participation.
89
+ *
90
+ * @default ''
91
+ */
25
92
  name: string;
93
+ /**
94
+ * Forwarded to the native `<input value>` attribute.
95
+ * The value submitted in a form when this switch is checked.
96
+ *
97
+ * @default ''
98
+ */
26
99
  value: string;
100
+ /** Direct reference to the native input element for programmatic access. */
27
101
  private _input;
102
+ /**
103
+ * Syncs `checked` and `disabled` imperatively to the native input after render.
104
+ *
105
+ * @param changed - Map of changed property names to their previous values.
106
+ */
28
107
  updated(changed: Map<string, unknown>): void;
108
+ /**
109
+ * Handles the native input `change` event.
110
+ *
111
+ * Updates `this.checked` and re-dispatches a composed `'change'` event
112
+ * so it bubbles across shadow DOM boundaries.
113
+ *
114
+ * @param e - The native `change` event from the hidden `<input>`.
115
+ */
29
116
  private _onChange;
30
117
  static styles: import("lit").CSSResult[];
31
- render(): import("lit-html").TemplateResult<1>;
118
+ render(): import("lit").TemplateResult<1>;
32
119
  }
33
120
  declare global {
34
121
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-switch.d.ts","sourceRoot":"","sources":["../../src/components/moni-switch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,UAAW,SAAQ,WAAW;IACb,KAAK,SAAM;IACI,OAAO,UAAS;IAChB,QAAQ,UAAS;IACjB,IAAI,UAAS;IAC5B,IAAI,SAAM;IACV,KAAK,SAAM;IAExB,OAAO,CAAC,MAAM,CAAoB;IAEzC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO9C,OAAO,CAAC,SAAS;IAKjB,OAAgB,MAAM,4BAiKpB;IAEO,MAAM;CAmBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"moni-switch.d.ts","sourceRoot":"","sources":["../../src/components/moni-switch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBACa,UAAW,SAAQ,WAAW;IAC1C;;;;;;;OAOG;IAC0B,KAAK,SAAM;IAExC;;;;;;;;;OASG;IACyC,OAAO,UAAS;IAE5D;;;;OAIG;IACyC,QAAQ,UAAS;IAE7D;;;;;;;;;;OAUG;IACyC,IAAI,UAAS;IAEzD;;;;OAIG;IAC0B,IAAI,SAAM;IAEvC;;;;;OAKG;IAC0B,KAAK,SAAM;IAExC,4EAA4E;IAC5D,OAAO,CAAC,MAAM,CAAoB;IAElD;;;;OAIG;IACM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO9C;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAKjB,OAAgB,MAAM,4BAiKpB;IAEO,MAAM;CAmBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,aAAa,EAAE,UAAU,CAAC;KAC1B;CACD;AAED,eAAe,UAAU,CAAC"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @file components/moni-switch.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
1
7
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
8
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
9
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -10,32 +16,104 @@ import { ifDefined } from 'lit/directives/if-defined.js';
10
16
  import { MoniElement, sharedStyles } from './_base/index.js';
11
17
  import './moni-icon.js';
12
18
  /**
13
- * Switch styled per Material Design 3 specs.
19
+ * Material Design 3 Switch component.
20
+ *
21
+ * Switches toggle the state of a single setting on or off. They are the
22
+ * binary on/off equivalent of a checkbox, but optimized for toggling a
23
+ * single state rather than selecting from a list.
24
+ *
25
+ * **M3 spec reference:** `m3-docs/components/switch/specs.md`
26
+ *
27
+ * **M3 measurements:**
28
+ * - Track: 52dp × 32dp, 2dp border, full-radius pill shape.
29
+ * - Handle (thumb): 16dp unselected → 24dp selected → 28dp pressed.
30
+ * - State layer: 40dp circular ripple on hover/focus/pressed states.
31
+ * - Icon (optional): 16dp icon rendered inside the thumb when `icon` is set.
32
+ *
33
+ * **Visual architecture:**
34
+ * Like `<moni-checkbox>`, the native `<input type="checkbox" role="switch">`
35
+ * occupies real layout space but is visually hidden via `opacity: 0`. Two
36
+ * `<span>` pseudo-elements render the track (`::after`) and thumb (`::before`).
37
+ * When `icon=true`, `<i>` elements render `close` and `check` glyphs inside
38
+ * the thumb, with visibility toggled via CSS based on the checked state.
39
+ *
40
+ * @fires change - Bubbles and is composed. Fired when the switch is toggled.
41
+ * Read `element.checked` for the new state.
42
+ *
43
+ * @example
44
+ * ```html
45
+ * <moni-switch label="Dark mode" name="dark-mode"></moni-switch>
46
+ * <moni-switch icon checked label="Notifications"></moni-switch>
14
47
  *
15
- * M3 measurements (`m3-docs/components/switch/specs.md`):
16
- * - Track: 52dp × 32dp, 2dp outline, full corner radius
17
- * - Handle (thumb): 16dp unselected, 24dp selected, 28dp pressed
18
- * - State layer: 40dp circular ripple on hover/focus/pressed
19
- * - Icon (optional): 16dp on selected and/or unselected handle
48
+ * <script>
49
+ * document.querySelector('moni-switch').addEventListener('change', (e) => {
50
+ * console.log('enabled:', e.target.checked);
51
+ * });
52
+ * </script>
53
+ * ```
20
54
  *
21
- * Attributes:
22
- * - label: text label (displayed to the right of the switch)
23
- * - checked: present
24
- * - disabled: present
25
- * - icon: present → renders check/close icons inside the thumb
26
- * - name: forwarded to input.name
27
- * - value: forwarded to input.value
55
+ * @csspart switch - The outer `<label>` element containing the switch.
28
56
  */
29
57
  let MoniSwitch = class MoniSwitch extends MoniElement {
30
58
  constructor() {
31
59
  super(...arguments);
60
+ /**
61
+ * Text label displayed to the right of the switch.
62
+ *
63
+ * When non-empty, renders as a padded text span after the track.
64
+ * When empty, the default slot is rendered, allowing custom HTML labels.
65
+ *
66
+ * @default ''
67
+ */
32
68
  this.label = '';
69
+ /**
70
+ * Whether the switch is in the "on" (checked) state.
71
+ *
72
+ * When `true`:
73
+ * - Track fills with `--primary` color.
74
+ * - Thumb grows from 16dp to 24dp and slides to the trailing edge.
75
+ * - Thumb color changes to `--on-primary`.
76
+ *
77
+ * @default false
78
+ */
33
79
  this.checked = false;
80
+ /**
81
+ * When `true`, the switch is non-interactive and renders at 50% opacity.
82
+ *
83
+ * @default false
84
+ */
34
85
  this.disabled = false;
86
+ /**
87
+ * When `true`, renders icon glyphs inside the thumb.
88
+ *
89
+ * Uses Material Symbols ligatures:
90
+ * - Unchecked state: `close` icon.
91
+ * - Checked state: `check` icon.
92
+ *
93
+ * The icon size (16dp) is set via the `--_thumb` CSS custom property.
94
+ *
95
+ * @default false
96
+ */
35
97
  this.icon = false;
98
+ /**
99
+ * Forwarded to the native `<input name>` attribute for form participation.
100
+ *
101
+ * @default ''
102
+ */
36
103
  this.name = '';
104
+ /**
105
+ * Forwarded to the native `<input value>` attribute.
106
+ * The value submitted in a form when this switch is checked.
107
+ *
108
+ * @default ''
109
+ */
37
110
  this.value = '';
38
111
  }
112
+ /**
113
+ * Syncs `checked` and `disabled` imperatively to the native input after render.
114
+ *
115
+ * @param changed - Map of changed property names to their previous values.
116
+ */
39
117
  updated(changed) {
40
118
  if (this._input) {
41
119
  if (changed.has('checked'))
@@ -44,6 +122,14 @@ let MoniSwitch = class MoniSwitch extends MoniElement {
44
122
  this._input.disabled = this.disabled;
45
123
  }
46
124
  }
125
+ /**
126
+ * Handles the native input `change` event.
127
+ *
128
+ * Updates `this.checked` and re-dispatches a composed `'change'` event
129
+ * so it bubbles across shadow DOM boundaries.
130
+ *
131
+ * @param e - The native `change` event from the hidden `<input>`.
132
+ */
47
133
  _onChange(e) {
48
134
  this.checked = e.target.checked;
49
135
  this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
@@ -1,14 +1,41 @@
1
+ /**
2
+ * @file components/moni-tab.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
1
7
  import { MoniElement } from './_base/index.js';
2
8
  import './moni-icon.js';
3
9
  /**
4
- * Visual-only tab. Renders an `<a>` styled with the BeerCSS `.tabs > a`
5
- * helper.
10
+ * Material Design 3 Tab component.
11
+ *
12
+ * An individual interactive tab element designed to be placed inside a
13
+ * `<moni-tabs>` container. Tabs organize content across different screens,
14
+ * data sets, and other interactions.
15
+ *
16
+ * **M3 spec reference:** `m3-docs/components/tabs/specs.md`
17
+ *
18
+ * **Visual layout & interaction:**
19
+ * Internally renders as an `<a>` element to support native link behavior when
20
+ * an `href` is provided, but behaves visually as a tab button. It displays a
21
+ * text label and an optional Material icon. If the parent `<moni-tabs>` has the
22
+ * `vertical` attribute set, the layout automatically adjusts to stack the icon
23
+ * above the text.
24
+ *
25
+ * **State:**
26
+ * The `active` attribute highlights the tab, applying the primary color to the
27
+ * text and rendering the active indicator line (handled via CSS in the parent
28
+ * container or pseudo-elements).
29
+ *
30
+ * @example
31
+ * ```html
32
+ * <moni-tabs>
33
+ * <moni-tab active icon="home" label="Home"></moni-tab>
34
+ * <moni-tab icon="settings" label="Settings" href="/settings"></moni-tab>
35
+ * </moni-tabs>
36
+ * ```
6
37
  *
7
- * Attributes:
8
- * - active: present → active style
9
- * - icon: Material Symbols name
10
- * - label: tab text
11
- * - href: link target
38
+ * @csspart tab - The inner `<a>` element acting as the tab button.
12
39
  */
13
40
  export declare class MoniTab extends MoniElement {
14
41
  active: boolean;
@@ -16,7 +43,7 @@ export declare class MoniTab extends MoniElement {
16
43
  label: string;
17
44
  href: string;
18
45
  static styles: import("lit").CSSResult[];
19
- render(): import("lit-html").TemplateResult<1>;
46
+ render(): import("lit").TemplateResult<1>;
20
47
  }
21
48
  declare global {
22
49
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-tab.d.ts","sourceRoot":"","sources":["../../src/components/moni-tab.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;GASG;AACH,qBACa,OAAQ,SAAQ,WAAW;IACK,MAAM,UAAS;IAC9B,IAAI,SAAM;IACV,KAAK,SAAM;IACX,IAAI,SAAO;IAExC,OAAgB,MAAM,4BAuFpB;IAEO,MAAM;CAaf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,UAAU,EAAE,OAAO,CAAC;KACpB;CACD;AAED,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"moni-tab.d.ts","sourceRoot":"","sources":["../../src/components/moni-tab.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,OAAQ,SAAQ,WAAW;IACK,MAAM,UAAS;IAC9B,IAAI,SAAM;IACV,KAAK,SAAM;IACX,IAAI,SAAO;IAExC,OAAgB,MAAM,4BAuFpB;IAEO,MAAM;CAaf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,UAAU,EAAE,OAAO,CAAC;KACpB;CACD;AAED,eAAe,OAAO,CAAC"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @file components/moni-tab.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
1
7
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
8
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
9
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -9,14 +15,35 @@ import { customElement, property } from 'lit/decorators.js';
9
15
  import { MoniElement, sharedStyles } from './_base/index.js';
10
16
  import './moni-icon.js';
11
17
  /**
12
- * Visual-only tab. Renders an `<a>` styled with the BeerCSS `.tabs > a`
13
- * helper.
18
+ * Material Design 3 Tab component.
19
+ *
20
+ * An individual interactive tab element designed to be placed inside a
21
+ * `<moni-tabs>` container. Tabs organize content across different screens,
22
+ * data sets, and other interactions.
23
+ *
24
+ * **M3 spec reference:** `m3-docs/components/tabs/specs.md`
25
+ *
26
+ * **Visual layout & interaction:**
27
+ * Internally renders as an `<a>` element to support native link behavior when
28
+ * an `href` is provided, but behaves visually as a tab button. It displays a
29
+ * text label and an optional Material icon. If the parent `<moni-tabs>` has the
30
+ * `vertical` attribute set, the layout automatically adjusts to stack the icon
31
+ * above the text.
32
+ *
33
+ * **State:**
34
+ * The `active` attribute highlights the tab, applying the primary color to the
35
+ * text and rendering the active indicator line (handled via CSS in the parent
36
+ * container or pseudo-elements).
37
+ *
38
+ * @example
39
+ * ```html
40
+ * <moni-tabs>
41
+ * <moni-tab active icon="home" label="Home"></moni-tab>
42
+ * <moni-tab icon="settings" label="Settings" href="/settings"></moni-tab>
43
+ * </moni-tabs>
44
+ * ```
14
45
  *
15
- * Attributes:
16
- * - active: present → active style
17
- * - icon: Material Symbols name
18
- * - label: tab text
19
- * - href: link target
46
+ * @csspart tab - The inner `<a>` element acting as the tab button.
20
47
  */
21
48
  let MoniTab = class MoniTab extends MoniElement {
22
49
  constructor() {
@@ -1,17 +1,55 @@
1
+ /**
2
+ * @file components/moni-tabs.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
1
7
  import { MoniElement } from './_base/index.js';
2
8
  /**
3
- * Visual-only tab bar. Renders a `<nav>` styled with the BeerCSS `.tabs`
4
- * helper.
5
- *
6
- * Attributes:
7
- * - mode: primary (default) | secondary
8
- * - scrollable: present → overflow-x: auto
9
- * - align: default (space-around) | left | center | right
10
- * - indicator: default (full) | min | max
11
- * - vertical: present icon above label
12
- *
13
- * Slots:
14
- * - default: <moni-tab> children
9
+ * Material Design 3 Tabs container component.
10
+ *
11
+ * A navigational container that groups multiple `<moni-tab>` elements. Tabs
12
+ * organize content into high-level categories and allow the user to switch
13
+ * between them.
14
+ *
15
+ * **M3 spec reference:** `m3-docs/components/tabs/specs.md`
16
+ *
17
+ * **Modes (Primary vs Secondary):**
18
+ * - `primary` (default): Used for top-level navigation at the highest hierarchy,
19
+ * often placed directly below a top app bar. They span the full width and
20
+ * feature a prominent active indicator.
21
+ * - `secondary`: Used for deeper content hierarchies within a specific area
22
+ * or page. They are typically more subtle.
23
+ *
24
+ * **Layout & Alignment:**
25
+ * - `scrollable`: If the number of tabs exceeds the container width, this
26
+ * enables horizontal scrolling (`overflow-x: auto`) rather than squishing.
27
+ * - `align`: Controls how the tabs are distributed (`default` space-around,
28
+ * `left`, `center`, or `right`).
29
+ * - `vertical`: Stacks the icon above the text label inside the child tabs.
30
+ *
31
+ * **Active Indicator:**
32
+ * The `indicator-size` attribute allows customizing the width of the active
33
+ * underline indicator (`default` fits the tab content, `min` is narrow, `max`
34
+ * fills the full tab width).
35
+ *
36
+ * @example
37
+ * ```html
38
+ * <!-- Primary, scrollable tabs -->
39
+ * <moni-tabs scrollable>
40
+ * <moni-tab active label="Flights"></moni-tab>
41
+ * <moni-tab label="Trips"></moni-tab>
42
+ * <moni-tab label="Explore"></moni-tab>
43
+ * </moni-tabs>
44
+ *
45
+ * <!-- Secondary, centered tabs with vertical layout -->
46
+ * <moni-tabs mode="secondary" align="center" vertical>
47
+ * <moni-tab active icon="video_camera_front" label="Video"></moni-tab>
48
+ * <moni-tab icon="photo_camera" label="Photo"></moni-tab>
49
+ * </moni-tabs>
50
+ * ```
51
+ *
52
+ * @slot default - `<moni-tab>` child elements.
15
53
  */
16
54
  export declare class MoniTabs extends MoniElement {
17
55
  mode: 'primary' | 'secondary';
@@ -20,7 +58,7 @@ export declare class MoniTabs extends MoniElement {
20
58
  align: 'default' | 'left' | 'center' | 'right';
21
59
  indicatorSize: 'default' | 'min' | 'max';
22
60
  static styles: import("lit").CSSResult[];
23
- render(): import("lit-html").TemplateResult<1>;
61
+ render(): import("lit").TemplateResult<1>;
24
62
  }
25
63
  declare global {
26
64
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-tabs.d.ts","sourceRoot":"","sources":["../../src/components/moni-tabs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AACH,qBACa,QAAS,SAAQ,WAAW;IAExC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAa;IACE,UAAU,UAAS;IACnB,QAAQ,UAAS;IAE7D,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAa;IAE3D,aAAa,EAAE,SAAS,GAAG,KAAK,GAAG,KAAK,CAAa;IAErD,OAAgB,MAAM,4BAsCpB;IAEO,MAAM;CAcf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,WAAW,EAAE,QAAQ,CAAC;KACtB;CACD;AAED,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"moni-tabs.d.ts","sourceRoot":"","sources":["../../src/components/moni-tabs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,QAAS,SAAQ,WAAW;IAExC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAa;IACE,UAAU,UAAS;IACnB,QAAQ,UAAS;IAE7D,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAa;IAE3D,aAAa,EAAE,SAAS,GAAG,KAAK,GAAG,KAAK,CAAa;IAErD,OAAgB,MAAM,4BAsCpB;IAEO,MAAM;CAcf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,WAAW,EAAE,QAAQ,CAAC;KACtB;CACD;AAED,eAAe,QAAQ,CAAC"}
@@ -1,3 +1,9 @@
1
+ /**
2
+ * @file components/moni-tabs.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
1
7
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
8
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
9
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -8,18 +14,50 @@ import { html, css } from 'lit';
8
14
  import { customElement, property } from 'lit/decorators.js';
9
15
  import { MoniElement, sharedStyles } from './_base/index.js';
10
16
  /**
11
- * Visual-only tab bar. Renders a `<nav>` styled with the BeerCSS `.tabs`
12
- * helper.
17
+ * Material Design 3 Tabs container component.
18
+ *
19
+ * A navigational container that groups multiple `<moni-tab>` elements. Tabs
20
+ * organize content into high-level categories and allow the user to switch
21
+ * between them.
22
+ *
23
+ * **M3 spec reference:** `m3-docs/components/tabs/specs.md`
24
+ *
25
+ * **Modes (Primary vs Secondary):**
26
+ * - `primary` (default): Used for top-level navigation at the highest hierarchy,
27
+ * often placed directly below a top app bar. They span the full width and
28
+ * feature a prominent active indicator.
29
+ * - `secondary`: Used for deeper content hierarchies within a specific area
30
+ * or page. They are typically more subtle.
31
+ *
32
+ * **Layout & Alignment:**
33
+ * - `scrollable`: If the number of tabs exceeds the container width, this
34
+ * enables horizontal scrolling (`overflow-x: auto`) rather than squishing.
35
+ * - `align`: Controls how the tabs are distributed (`default` space-around,
36
+ * `left`, `center`, or `right`).
37
+ * - `vertical`: Stacks the icon above the text label inside the child tabs.
38
+ *
39
+ * **Active Indicator:**
40
+ * The `indicator-size` attribute allows customizing the width of the active
41
+ * underline indicator (`default` fits the tab content, `min` is narrow, `max`
42
+ * fills the full tab width).
43
+ *
44
+ * @example
45
+ * ```html
46
+ * <!-- Primary, scrollable tabs -->
47
+ * <moni-tabs scrollable>
48
+ * <moni-tab active label="Flights"></moni-tab>
49
+ * <moni-tab label="Trips"></moni-tab>
50
+ * <moni-tab label="Explore"></moni-tab>
51
+ * </moni-tabs>
13
52
  *
14
- * Attributes:
15
- * - mode: primary (default) | secondary
16
- * - scrollable: present → overflow-x: auto
17
- * - align: default (space-around) | left | center | right
18
- * - indicator: default (full) | min | max
19
- * - vertical: present → icon above label
53
+ * <!-- Secondary, centered tabs with vertical layout -->
54
+ * <moni-tabs mode="secondary" align="center" vertical>
55
+ * <moni-tab active icon="video_camera_front" label="Video"></moni-tab>
56
+ * <moni-tab icon="photo_camera" label="Photo"></moni-tab>
57
+ * </moni-tabs>
58
+ * ```
20
59
  *
21
- * Slots:
22
- * - default: <moni-tab> children
60
+ * @slot default - `<moni-tab>` child elements.
23
61
  */
24
62
  let MoniTabs = class MoniTabs extends MoniElement {
25
63
  constructor() {
@@ -1,18 +1,63 @@
1
+ /**
2
+ * @file components/moni-text-field.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
1
7
  import { MoniElement } from './_base/index.js';
2
8
  import './moni-icon.js';
3
9
  import './moni-progress.js';
4
10
  /**
5
- * Visual-only text field. Renders the `.field` family of BeerCSS helpers
6
- * with a native `<input>`.
11
+ * Material Design 3 Text Field component.
12
+ *
13
+ * A full-featured input field that wraps a native `<input>` inside the M3
14
+ * field shell (`.field` class from `fieldStyles`). Supports floating labels,
15
+ * filled and outlined variants, leading/trailing icons, helper text, and
16
+ * error states.
17
+ *
18
+ * **M3 spec reference:** `m3-docs/components/text-fields/specs.md`
19
+ *
20
+ * **Visual architecture:**
21
+ * Uses `fieldStyles` for the complete CSS field shell. The field container
22
+ * is a `<div class="field [modifiers]">` wrapping:
23
+ * 1. Optional leading icon.
24
+ * 2. Native `<input>` element.
25
+ * 3. Floating `<label>` (when `label` is set).
26
+ * 4. Optional trailing icon or loading spinner.
27
+ * 5. `<output>` for helper/error text.
28
+ *
29
+ * **Visual-only contract:**
30
+ * This component does **not** listen to `@input` events to sync the `value`
31
+ * attribute back from the underlying `<input>`. Consumers must either:
32
+ * - Submit the native form (the `<input name>` participates in form submission).
33
+ * - Listen to `change` or `input` events via standard DOM event handling.
34
+ * - Use a framework binding (e.g. `bind:value` in Svelte, `v-model` in Vue).
35
+ *
36
+ * @example
37
+ * ```html
38
+ * <moni-text-field
39
+ * label="Email address"
40
+ * type="email"
41
+ * name="email"
42
+ * icon="mail"
43
+ * variant="outlined"
44
+ * helper="We'll never share your email."
45
+ * ></moni-text-field>
7
46
  *
8
- * This component is **visual-only**: it does NOT listen to `@input` to
9
- * sync the `value` attribute back from the underlying input. Consumers
10
- * either use form submission or wire their own change handling.
47
+ * <moni-text-field
48
+ * label="Amount"
49
+ * type="number"
50
+ * prefix="$"
51
+ * error
52
+ * error-text="Value must be positive"
53
+ * ></moni-text-field>
54
+ * ```
11
55
  *
12
- * Attributes:
13
- * - name, label, value, variant, size, shape, type, icon, trailing-icon,
14
- * prefix, suffix, helper, error, error-text, disabled, placeholder see below.
15
- * - loading: present shows indeterminate circular progress
56
+ * @csspart field - The outer `.field` div container.
57
+ * @csspart input - The native `<input>` element.
58
+ * @csspart label - The floating `<label>` element.
59
+ * @csspart helper - The helper `<output>` element.
60
+ * @csspart error-output - The error `<output>` element.
16
61
  */
17
62
  export declare class MoniTextField extends MoniElement {
18
63
  name: string;
@@ -35,7 +80,7 @@ export declare class MoniTextField extends MoniElement {
35
80
  private _input;
36
81
  updated(changed: Map<string, unknown>): void;
37
82
  static styles: import("lit").CSSResult[];
38
- render(): import("lit-html").TemplateResult<1>;
83
+ render(): import("lit").TemplateResult<1>;
39
84
  }
40
85
  declare global {
41
86
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-text-field.d.ts","sourceRoot":"","sources":["../../src/components/moni-text-field.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAA6B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,gBAAgB,CAAC;AACxB,OAAO,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;GAYG;AACH,qBACa,aAAc,SAAQ,WAAW;IAChB,IAAI,SAAM;IACV,KAAK,SAAM;IACX,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAY;IAEvE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAExD,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAc;IAEpD,IAAI,EACD,MAAM,GACN,UAAU,GACV,OAAO,GACP,QAAQ,GACR,KAAK,GACL,KAAK,GACL,QAAQ,CAAU;IACQ,IAAI,SAAM;IACkB,YAAY,SAAM;IAC9C,MAAM,SAAM;IACZ,MAAM,SAAM;IACZ,MAAM,SAAM;IACa,SAAS,SAAM;IACzB,KAAK,UAAS;IACd,OAAO,UAAS;IAChB,QAAQ,UAAS;IAChC,KAAK,SAAM;IACX,WAAW,SAAM;IAE9B,OAAO,CAAC,MAAM,CAAoB;IAEzC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO9C,OAAgB,MAAM,4BAA+B;IAE5C,MAAM;CA8Ef;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,iBAAiB,EAAE,aAAa,CAAC;KACjC;CACD;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"moni-text-field.d.ts","sourceRoot":"","sources":["../../src/components/moni-text-field.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAA6B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,gBAAgB,CAAC;AACxB,OAAO,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,qBACa,aAAc,SAAQ,WAAW;IAChB,IAAI,SAAM;IACV,KAAK,SAAM;IACX,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAY;IAEvE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAY;IAExD,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAc;IAEpD,IAAI,EACD,MAAM,GACN,UAAU,GACV,OAAO,GACP,QAAQ,GACR,KAAK,GACL,KAAK,GACL,QAAQ,CAAU;IACQ,IAAI,SAAM;IACkB,YAAY,SAAM;IAC9C,MAAM,SAAM;IACZ,MAAM,SAAM;IACZ,MAAM,SAAM;IACa,SAAS,SAAM;IACzB,KAAK,UAAS;IACd,OAAO,UAAS;IAChB,QAAQ,UAAS;IAChC,KAAK,SAAM;IACX,WAAW,SAAM;IAE9B,OAAO,CAAC,MAAM,CAAoB;IAEzC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO9C,OAAgB,MAAM,4BAA+B;IAE5C,MAAM;CA8Ef;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,iBAAiB,EAAE,aAAa,CAAC;KACjC;CACD;AAED,eAAe,aAAa,CAAC"}