@moni-labs/moni-ui 0.2.0 → 0.3.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 (323) hide show
  1. package/README.md +52 -194
  2. package/custom-elements.json +1709 -338
  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 +80 -17
  49. package/dist/components/moni-carousel.d.ts.map +1 -1
  50. package/dist/components/moni-carousel.js +258 -34
  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 +282 -34
  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,3 +1,10 @@
1
+ /**
2
+ * @file components/moni-textarea.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
7
+
1
8
  import { html, nothing } from 'lit';
2
9
  import { customElement, property, query } from 'lit/decorators.js';
3
10
  import { ifDefined } from 'lit/directives/if-defined.js';
@@ -7,26 +14,50 @@ import './moni-icon.js';
7
14
  import './moni-progress.js';
8
15
 
9
16
  /**
10
- * Visual-only textarea. Same field shell as moni-text-field but renders a
11
- * `<textarea>`. Visual-only: no `@input` listener.
17
+ * Material Design 3 Textarea component.
18
+ *
19
+ * A multi-line text input field designed for collecting longer amounts of text,
20
+ * such as comments, descriptions, or messages.
21
+ *
22
+ * **M3 spec reference:** `m3-docs/components/text-fields/specs.md`
23
+ *
24
+ * **Visual architecture:**
25
+ * It shares the exact same `.field` shell and styling engine as
26
+ * `<moni-text-field>`, but internally renders a native `<textarea>` instead
27
+ * of an `<input>`. This ensures visual consistency across all form elements
28
+ * regarding floating labels, helper text, error states, and icons.
29
+ *
30
+ * **Character Counter:**
31
+ * If the `maxlength` attribute is set, the textarea automatically displays
32
+ * a character counter (`{current length} / {maxlength}`) positioned at the
33
+ * trailing edge of the supporting text area (bottom right). This can be
34
+ * suppressed by setting the `no-counter` attribute.
35
+ *
36
+ * **State management:**
37
+ * This component is purely visual and presentational. It reflects attributes
38
+ * down to the native textarea, but it does NOT attach internal `@input` or
39
+ * `@change` listeners. Consumers should attach standard DOM listeners directly
40
+ * to this element to capture user input, just as they would with a native
41
+ * textarea.
42
+ *
43
+ * @example
44
+ * ```html
45
+ * <!-- Standard filled textarea -->
46
+ * <moni-textarea label="Description" rows="4"></moni-textarea>
12
47
  *
13
- * M3 spec (`m3-docs/components/text-fields/specs.md`): the textarea supports
14
- * both **filled** and **outlined** variants. When `maxlength` is set, a
15
- * character counter is shown next to the supporting text
16
- * (`{value.length} / {maxlength}`).
48
+ * <!-- Outlined textarea with character counter -->
49
+ * <moni-textarea
50
+ * variant="outlined"
51
+ * label="Bio"
52
+ * maxlength="160"
53
+ * ></moni-textarea>
54
+ * ```
17
55
  *
18
- * Attributes:
19
- * - name, label, value, variant, size, shape, disabled, helper, error,
20
- * error-text, placeholder see moni-text-field.
21
- * - icon: leading Material Symbols name
22
- * - trailing-icon: trailing Material Symbols name
23
- * - prefix: short text rendered before the input (e.g. "https://")
24
- * - suffix: short text rendered after the input (e.g. ".com")
25
- * - loading: present → shows indeterminate circular progress
26
- * - rows: native textarea rows attribute (default 3)
27
- * - maxlength: when set, displays a character counter
28
- * (auto-shown; can be hidden via `no-counter`)
29
- * - no-counter: suppress the character counter even when maxlength is set
56
+ * @csspart field - The outer `.field` div container.
57
+ * @csspart input - The native `<textarea>` element.
58
+ * @csspart label - The floating `<label>` element.
59
+ * @csspart helper - The helper/error text area.
60
+ * @csspart counter - The character counter element.
30
61
  */
31
62
  @customElement('moni-textarea')
32
63
  export class MoniTextarea extends MoniElement {
@@ -1,3 +1,10 @@
1
+ /**
2
+ * @file components/moni-time-picker.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
7
+
1
8
  import { html, css, PropertyValues } from 'lit';
2
9
  import { customElement, property, state, query } from 'lit/decorators.js';
3
10
  import { MoniElement, sharedStyles } from './_base/index.js';
@@ -5,18 +12,42 @@ import './moni-icon.js';
5
12
  import './moni-button.js';
6
13
 
7
14
  /**
8
- * Material Design 3 Time Picker Component.
9
- * Supports interactive clock face (dial) and manual keyboard input.
15
+ * Material Design 3 Time Picker component.
16
+ *
17
+ * A highly interactive control that allows users to select a specific time.
18
+ * It provides two distinct input modes:
19
+ * 1. **Dial mode:** An interactive clock face where users can drag or click
20
+ * to select hours and minutes.
21
+ * 2. **Input mode:** Standard text inputs for precise keyboard entry.
22
+ *
23
+ * **M3 spec reference:** `m3-docs/components/time-pickers/specs.md`
24
+ *
25
+ * **Time formats & modes:**
26
+ * - The `value` property expects and always outputs a 24-hour formatted string
27
+ * (`HH:MM`, e.g., `"14:30"`).
28
+ * - Setting `use-24-hour` configures the visual presentation to use a 24-hour
29
+ * clock dial (inner and outer rings) and removes the AM/PM toggle. Otherwise,
30
+ * it uses a standard 12-hour dial with an AM/PM toggle.
31
+ *
32
+ * **Responsive design:**
33
+ * The `orientation` attribute configures the layout. `vertical` stacks the
34
+ * time display above the clock face, `horizontal` places them side-by-side,
35
+ * and `auto` responds to the container/viewport width automatically.
36
+ *
37
+ * @fires change - Fired when the selected time changes interactively. The
38
+ * `detail.value` contains the new time in `HH:MM` format.
39
+ * @fires cancel - Fired when the 'Cancel' button is clicked.
40
+ * @fires ok - Fired when the 'OK' button is clicked. The `detail.value`
41
+ * contains the final confirmed time.
10
42
  *
11
- * Attributes:
12
- * - value: Time value in "HH:MM" 24h format (default "00:00")
13
- * - use24Hour: If true, uses 24-hour mode without AM/PM toggle (default false)
14
- * - mode: "dial" | "input" (default "dial")
43
+ * @example
44
+ * ```html
45
+ * <!-- 12-hour format (AM/PM) -->
46
+ * <moni-time-picker value="14:30"></moni-time-picker>
15
47
  *
16
- * Events:
17
- * - change: Fired when value changes (detail: { value })
18
- * - cancel: Fired when cancel button is clicked
19
- * - ok: Fired when OK button is clicked (detail: { value })
48
+ * <!-- 24-hour format -->
49
+ * <moni-time-picker use-24-hour value="14:30"></moni-time-picker>
50
+ * ```
20
51
  */
21
52
  @customElement('moni-time-picker')
22
53
  export class MoniTimePicker extends MoniElement {
@@ -1,26 +1,55 @@
1
+ /**
2
+ * @file components/moni-toolbar.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
7
+
1
8
  import { html, css } from 'lit';
2
9
  import { customElement, property } from 'lit/decorators.js';
3
10
  import { MoniElement, sharedStyles } from './_base/index.js';
4
11
 
5
12
  /**
6
- * Material 3 Toolbar (`m3-docs/components/top-app-bar/specs.md`).
13
+ * Material Design 3 Top App Bar (Toolbar) component.
14
+ *
15
+ * Top app bars display information and actions at the top of a screen.
16
+ * They are used for branding, screen titles, navigation, and actions.
17
+ *
18
+ * **M3 spec reference:** `m3-docs/components/top-app-bar/specs.md`
19
+ *
20
+ * **Note:** This is the standard top-level toolbar. For bottom navigation
21
+ * bars (often used on mobile), use `<moni-app-bar>`.
22
+ *
23
+ * **Variants:**
24
+ * - `standard` (default): A full-width bar (64dp height) that sits flush
25
+ * against the top of the screen.
26
+ * - `floating`: A detached bar with a 4dp margin and rounded 8dp corners,
27
+ * appearing to float above the content.
7
28
  *
8
- * This is the larger/top-level variant. If you need the compact
9
- * Navigation Bar at the bottom of the screen, use `<moni-app-bar>`.
29
+ * **Scroll behavior:**
30
+ * When the `scroll` attribute is present, the toolbar visually responds to
31
+ * scrolling by increasing its elevation (shadow) and dynamically shifting
32
+ * its surface color to indicate depth over the scrolling content.
10
33
  *
11
- * Supported M3 types:
12
- * - **standard** (default): 64dp height, flat surface color, bottom shadow.
13
- * - **floating**: 4dp margin, rounded 8dp corners, elevated.
34
+ * @example
35
+ * ```html
36
+ * <!-- Standard toolbar with navigation and actions -->
37
+ * <moni-toolbar title="Inbox">
38
+ * <moni-icon-button slot="leading" icon="menu"></moni-icon-button>
39
+ * <moni-icon-button slot="trailing" icon="search"></moni-icon-button>
40
+ * <moni-icon-button slot="trailing" icon="more_vert"></moni-icon-button>
41
+ * </moni-toolbar>
14
42
  *
15
- * Slots:
16
- * - default: title / center content.
17
- * - leading: navigation icon/button.
18
- * - trailing: action icons/buttons.
19
- * - action-button: floating action button (moni-fab) anchored right.
43
+ * <!-- Floating toolbar with an attached FAB -->
44
+ * <moni-toolbar type="floating" title="Notes">
45
+ * <moni-fab slot="action-button" icon="add"></moni-fab>
46
+ * </moni-toolbar>
47
+ * ```
20
48
  *
21
- * Attributes:
22
- * - type: standard (default) | floating
23
- * - scroll: true | false (default). When true, elevation increases on scroll.
49
+ * @slot default - The title text or center content.
50
+ * @slot leading - Navigation icon/button placed on the far left.
51
+ * @slot trailing - Action icons/buttons placed on the far right.
52
+ * @slot action-button - A floating action button (FAB) anchored to the right side.
24
53
  */
25
54
  @customElement('moni-toolbar')
26
55
  export class MoniToolbar extends MoniElement {
@@ -1,36 +1,67 @@
1
+ /**
2
+ * @file components/moni-tooltip.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
7
+
1
8
  import { html, css } from 'lit';
2
9
  import { customElement, property } from 'lit/decorators.js';
3
10
  import { MoniElement, sharedStyles } from './_base/index.js';
4
11
 
5
12
  /**
6
- * Tooltip that faithfully ports BeerCSS's `.tooltip` styles and adds M3
7
- * Expressive semantics.
13
+ * Material Design 3 Tooltip component.
14
+ *
15
+ * Tooltips provide contextual text labels or rich content that appear when
16
+ * users hover over, focus on, or tap an element. They surface supplementary
17
+ * information that helps users understand interface elements without
18
+ * permanently occupying screen space.
19
+ *
20
+ * **M3 spec reference:** `m3-docs/components/tooltips/specs.md`
21
+ *
22
+ * **Types:**
23
+ * - **Plain** (default) — Text-only label for simple descriptions (max 1 line).
24
+ * - **Rich** (`rich` attribute) — HTML content including formatted text,
25
+ * links, and icons. Rich tooltips can contain multiple lines and action links.
26
+ *
27
+ * **Placements:**
28
+ * - `top` (default), `top-start`, `top-end`
29
+ * - `bottom`, `bottom-start`, `bottom-end`
30
+ *
31
+ * **Trigger mechanism:**
32
+ * The tooltip uses `position: absolute` inside the parent element. The parent
33
+ * must have `position: relative` (set automatically via `connectedCallback`).
34
+ * Hover/focus events on the parent trigger the tooltip's CSS `:hover` and
35
+ * `:focus-within` selectors, which drive the show/hide transition.
36
+ *
37
+ * **Accessibility:**
38
+ * - The tooltip has `role="tooltip"`.
39
+ * - For keyboard accessibility, the parent should have `aria-describedby`
40
+ * pointing to the tooltip's `id` attribute. The component exposes a
41
+ * `tooltipId` getter for this purpose.
42
+ * - The `Escape` key closes rich tooltips.
8
43
  *
9
- * **M3 spec** (`m3-docs/components/tooltips/specs.md`):
10
- * - Two types: **plain** (text only) and **rich** (HTML content).
11
- * - 6 placements: top, top-start, top-end, bottom, bottom-start, bottom-end.
12
- * - Trigger: hover (mouse) or focus (keyboard) on the parent.
13
- * - Auto-dismiss: tooltip hides on `mouseleave` / `focusout` / `Escape`.
44
+ * @example
45
+ * ```html
46
+ * <!-- Plain tooltip -->
47
+ * <button aria-describedby="save-tip">
48
+ * Save
49
+ * <moni-tooltip id="save-tip" text="Ctrl+S"></moni-tooltip>
50
+ * </button>
14
51
  *
15
- * The component delegates trigger detection to the parent element (consistent
16
- * with the original BeerCSS port). The tooltip element is `position: absolute`
17
- * inside the parent so it follows the trigger naturally.
52
+ * <!-- Rich tooltip -->
53
+ * <button>
54
+ * Filter
55
+ * <moni-tooltip rich position="bottom">
56
+ * <strong>Filter by date</strong>
57
+ * <p>Select a date range to filter results.</p>
58
+ * </moni-tooltip>
59
+ * </button>
60
+ * ```
18
61
  *
19
- * **Accessibility**:
20
- * - The tooltip has `role="tooltip"` (M3 spec).
21
- * - When `rich` content is used, the parent should also have
22
- * `aria-describedby="<tooltip-id>"`. The component sets a unique `id` on
23
- * the tooltip element and exposes it via `tooltipId` getter.
24
- * - `Escape` closes the tooltip (WAI-ARIA tooltip pattern).
62
+ * @slot default - Rich content for the tooltip body (only used when `rich=true`).
25
63
  *
26
- * Attributes:
27
- * - text: tooltip text (plain tooltip)
28
- * - position: top (default) | top-start | top-end | bottom | bottom-start | bottom-end
29
- * - size: '' (default) | small | medium | large
30
- * - rich: boolean — when true, the default slot accepts arbitrary HTML
31
- * for rich content (links, icons, etc.). When false (default),
32
- * the slot is rendered as text only.
33
- * - id: forwarded to the tooltip element (useful for aria-describedby)
64
+ * @csspart tooltip - The tooltip container element.
34
65
  */
35
66
  @customElement('moni-tooltip')
36
67
  export class MoniTooltip extends MoniElement {
@@ -1,31 +1,57 @@
1
+ /**
2
+ * @file components/moni-typography.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
7
+
1
8
  import { css, nothing } from 'lit';
2
9
  import { customElement, property } from 'lit/decorators.js';
3
10
  import { unsafeStatic, html as staticHtml } from 'lit/static-html.js';
4
11
  import { MoniElement, sharedStyles } from './_base/index.js';
5
12
 
6
13
  /**
7
- * Material 3 Typography (`m3-docs/components/`).
14
+ * Material Design 3 Typography component.
15
+ *
16
+ * A specialized text component that enforces the M3 type scale. It ensures
17
+ * typography is consistent, accessible, and correctly styled across the
18
+ * application without requiring manual CSS classes.
19
+ *
20
+ * **M3 spec reference:** `m3-docs/components/typography/specs.md`
21
+ *
22
+ * **Type Scale Categories:**
23
+ * - `display`: The largest text on the screen, reserved for short, important
24
+ * text or numerals. Works best on large screens. (Renders `<h1>` by default).
25
+ * - `headline`: High-emphasis text for primary page/section headers.
26
+ * (Renders `<h2>` by default).
27
+ * - `title`: Medium-emphasis text used for dialog headers or smaller section
28
+ * titles. (Renders `<h3>` by default).
29
+ * - `body`: Standard paragraph text used for long-form content.
30
+ * (Renders `<p>` by default).
31
+ * - `label`: Small, utilitarian text used for buttons, captions, and form
32
+ * elements. (Renders `<label>` by default).
33
+ *
34
+ * Each category supports three sizes: `large`, `medium`, and `small`.
8
35
  *
9
- * Renders a single piece of text using the M3 type scale. The component
10
- * chooses both the semantic tag and the typography class based on the
11
- * `variant` attribute. Consumers can override the tag via `as`.
36
+ * **Semantic Tags:**
37
+ * The component automatically selects an appropriate HTML semantic tag based on
38
+ * the variant. You can explicitly override this by setting the `as` attribute
39
+ * (e.g., to render a `headline` style but using a `<span>` tag for SEO or
40
+ * structural reasons).
12
41
  *
13
- * M3 type scale (5 categories, 3 sizes each):
14
- * - **display**: largest text, used for marketing or hero content.
15
- * - **headline**: page-level headings (H1 equivalent).
16
- * - **title**: section headings, dialog titles.
17
- * - **body**: paragraph text.
18
- * - **label**: button text, captions.
42
+ * @example
43
+ * ```html
44
+ * <!-- Renders an <h1> with display-large styles -->
45
+ * <moni-typography variant="display" size="large">Hero Text</moni-typography>
19
46
  *
20
- * Each category has `large`, `medium`, and `small` sizes (per M3 spec).
47
+ * <!-- Renders a <p> with body-medium styles -->
48
+ * <moni-typography variant="body">Standard paragraph text.</moni-typography>
21
49
  *
22
- * Attributes:
23
- * - variant: display | headline | title | body | label (default body)
24
- * - size: large | medium | small (default medium)
25
- * - as: override the rendered tag (e.g. "span", "p", "label")
50
+ * <!-- Overriding the semantic tag -->
51
+ * <moni-typography variant="title" as="span">Inline title</moni-typography>
52
+ * ```
26
53
  *
27
- * Slots:
28
- * - default: text content (falls back to `text` attribute if empty)
54
+ * @slot default - The text content to display.
29
55
  */
30
56
  @customElement('moni-typography')
31
57
  export class MoniTypography extends MoniElement {
package/src/index.ts CHANGED
@@ -1,7 +1,56 @@
1
+ /**
2
+ * @file index.ts
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
7
+
8
+ /**
9
+ * @module @moni-labs/moni-ui
10
+ *
11
+ * Main entry point for the Moni UI component library.
12
+ *
13
+ * **What this file does:**
14
+ * 1. **Side-effect import** — `import './components/index.js'` triggers the
15
+ * auto-registration of every `<moni-*>` custom element with the browser's
16
+ * Custom Element registry. This must happen before any component is rendered
17
+ * in the DOM.
18
+ * 2. **Re-exports** — All component classes, utilities, and TypeScript types
19
+ * are re-exported so consumers get a single import path:
20
+ *
21
+ * ```ts
22
+ * import {
23
+ * MoniButton,
24
+ * getThemeEngine,
25
+ * generateScheme,
26
+ * type ColorScheme
27
+ * } from '@moni-labs/moni-ui';
28
+ * ```
29
+ *
30
+ * **Import strategies:**
31
+ * - **Full bundle** (this file): imports and registers ALL components at once.
32
+ * Best for SPAs that use many components.
33
+ * - **Tree-shaken per-component**: import individual files from
34
+ * `@moni-labs/moni-ui/components/moni-button.js` etc. to let bundlers
35
+ * include only what is used. Better for apps that use a small subset.
36
+ *
37
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry Custom Element Registry}
38
+ */
39
+
40
+ // ─────────────────────────────────────────────────────────────────────────────
1
41
  // Auto-register all Moni UI Web Components
42
+ // ─────────────────────────────────────────────────────────────────────────────
43
+ // This import has side effects: it calls customElements.define() for every
44
+ // <moni-*> element. Bundlers must NOT tree-shake this import.
2
45
  import './components/index.js';
3
46
 
4
- // Web Components (visual-only)
47
+ // ─────────────────────────────────────────────────────────────────────────────
48
+ // Web Component class exports
49
+ // ─────────────────────────────────────────────────────────────────────────────
50
+ // Exporting the class enables TypeScript consumers to:
51
+ // - Subclass components for customization.
52
+ // - Use the class in type narrowing (instanceof MoniButton).
53
+ // - Access static members and properties programmatically.
5
54
  export {
6
55
  MoniBadge,
7
56
  MoniBottomSheet,
@@ -45,8 +94,17 @@ export {
45
94
  MoniShape,
46
95
  } from './components/index.js';
47
96
 
48
- // Utils
97
+ // ─────────────────────────────────────────────────────────────────────────────
98
+ // Utility exports
99
+ // ─────────────────────────────────────────────────────────────────────────────
100
+
101
+ /**
102
+ * Theme engine singleton factory.
103
+ * @see {@link getThemeEngine} for full documentation.
104
+ */
49
105
  export { getThemeEngine, resetThemeEngine } from './utils/theme.svelte.js';
106
+
107
+ /** TypeScript types for theme engine configuration. */
50
108
  export type {
51
109
  ThemeSettings,
52
110
  ThemeMode,
@@ -54,6 +112,11 @@ export type {
54
112
  ThemeRadius,
55
113
  ThemeFont
56
114
  } from './utils/theme.svelte.js';
115
+
116
+ /**
117
+ * Color generation and application utilities.
118
+ * @see utils/color.ts for full documentation.
119
+ */
57
120
  export {
58
121
  generateScheme,
59
122
  applySchemeToDocument,
@@ -61,5 +124,6 @@ export {
61
124
  hexToHsl,
62
125
  hslToHex
63
126
  } from './utils/color.js';
64
- export type { ColorScheme, ContrastLevel } from './utils/color.js';
65
127
 
128
+ /** TypeScript types for the color system. */
129
+ export type { ColorScheme, ContrastLevel } from './utils/color.js';
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @file styles/tailwind.css
3
+ * @package @moni-labs/moni-ui
4
+ * @license MIT
5
+ * @contributors Moni Labs & Contributors
6
+ */
7
+
8
+ @import 'tailwindcss';
9
+
10
+ @theme {
11
+ /* ─── Material Design 3 Expressive tokens integration ─── */
12
+ --color-primary: var(--moni-primary);
13
+ --color-on-primary: var(--moni-on-primary);
14
+ --color-primary-container: var(--moni-primary-container);
15
+ --color-on-primary-container: var(--moni-on-primary-container);
16
+
17
+ --color-secondary: var(--moni-secondary);
18
+ --color-on-secondary: var(--moni-on-secondary);
19
+ --color-secondary-container: var(--moni-secondary-container);
20
+ --color-on-secondary-container: var(--moni-on-secondary-container);
21
+
22
+ --color-tertiary: var(--moni-tertiary);
23
+ --color-on-tertiary: var(--moni-on-tertiary);
24
+ --color-tertiary-container: var(--moni-tertiary-container);
25
+ --color-on-tertiary-container: var(--moni-on-tertiary-container);
26
+
27
+ --color-error: var(--moni-error);
28
+ --color-on-error: var(--moni-on-error);
29
+ --color-error-container: var(--moni-error-container);
30
+ --color-on-error-container: var(--moni-on-error-container);
31
+
32
+ --color-background: var(--moni-background);
33
+ --color-on-background: var(--moni-on-background);
34
+ --color-surface: var(--moni-surface);
35
+ --color-on-surface: var(--moni-on-surface);
36
+ --color-surface-variant: var(--moni-surface-variant);
37
+ --color-on-surface-variant: var(--moni-on-surface-variant);
38
+
39
+ --color-outline: var(--moni-outline);
40
+ --color-outline-variant: var(--moni-outline-variant);
41
+
42
+ --color-surface-container-lowest: var(--moni-surface-container-lowest);
43
+ --color-surface-container-low: var(--moni-surface-container-low);
44
+ --color-surface-container: var(--moni-surface-container);
45
+ --color-surface-container-high: var(--moni-surface-container-high);
46
+ --color-surface-container-highest: var(--moni-surface-container-highest);
47
+
48
+ --color-inverse-surface: var(--moni-inverse-surface);
49
+ --color-inverse-on-surface: var(--moni-inverse-on-surface);
50
+ --color-inverse-primary: var(--moni-inverse-primary);
51
+
52
+ /* ─── Typography ─── */
53
+ --font-sans: var(--moni-font-sans, 'Geist', system-ui, -apple-system, sans-serif);
54
+ --font-serif: var(--moni-font-title, 'Instrument Serif', Georgia, serif);
55
+ --font-mono: 'Geist Mono', 'Fira Code', monospace;
56
+ --font-brand: var(--moni-font-sans, 'Geist', system-ui, sans-serif);
57
+ --font-title: var(--moni-font-title, 'Instrument Serif', Georgia, serif);
58
+ --font-icon: var(--moni-font-icon, 'Material Symbols Rounded');
59
+
60
+ /* ─── Radius scale ─── */
61
+ --radius-base: var(--moni-radius-base, 12px);
62
+ --radius-sm: calc(var(--moni-radius-base, 12px) * 0.5);
63
+ --radius-md: var(--moni-radius-base, 12px);
64
+ --radius-lg: calc(var(--moni-radius-base, 12px) * 1.5);
65
+ --radius-xl: calc(var(--moni-radius-base, 12px) * 2);
66
+ --radius-full: 9999px;
67
+ }