@moni-labs/moni-ui 0.3.1 → 0.3.2

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 (251) hide show
  1. package/custom-elements.json +5181 -1043
  2. package/dist/components/_base/moni-element.d.ts +16 -9
  3. package/dist/components/_base/moni-element.d.ts.map +1 -1
  4. package/dist/components/_base/moni-element.js +63 -9
  5. package/dist/components/index.js +2 -2
  6. package/dist/components/loading-shapes.d.ts +19 -0
  7. package/dist/components/loading-shapes.d.ts.map +1 -1
  8. package/dist/components/loading-shapes.js +19 -0
  9. package/dist/components/moni-app-bar.d.ts +72 -62
  10. package/dist/components/moni-app-bar.d.ts.map +1 -1
  11. package/dist/components/moni-app-bar.js +72 -62
  12. package/dist/components/moni-badge.d.ts +64 -65
  13. package/dist/components/moni-badge.d.ts.map +1 -1
  14. package/dist/components/moni-badge.js +64 -66
  15. package/dist/components/moni-bottom-sheet.d.ts +129 -61
  16. package/dist/components/moni-bottom-sheet.d.ts.map +1 -1
  17. package/dist/components/moni-bottom-sheet.js +217 -131
  18. package/dist/components/moni-button-group.d.ts +107 -29
  19. package/dist/components/moni-button-group.d.ts.map +1 -1
  20. package/dist/components/moni-button-group.js +107 -29
  21. package/dist/components/moni-button-segment.d.ts +53 -12
  22. package/dist/components/moni-button-segment.d.ts.map +1 -1
  23. package/dist/components/moni-button-segment.js +53 -12
  24. package/dist/components/moni-button.d.ts +116 -38
  25. package/dist/components/moni-button.d.ts.map +1 -1
  26. package/dist/components/moni-button.js +128 -38
  27. package/dist/components/moni-card.d.ts +68 -50
  28. package/dist/components/moni-card.d.ts.map +1 -1
  29. package/dist/components/moni-card.js +68 -50
  30. package/dist/components/moni-carousel.d.ts +471 -53
  31. package/dist/components/moni-carousel.d.ts.map +1 -1
  32. package/dist/components/moni-carousel.js +862 -264
  33. package/dist/components/moni-checkbox.d.ts +49 -46
  34. package/dist/components/moni-checkbox.d.ts.map +1 -1
  35. package/dist/components/moni-checkbox.js +55 -48
  36. package/dist/components/moni-chip.d.ts +100 -33
  37. package/dist/components/moni-chip.d.ts.map +1 -1
  38. package/dist/components/moni-chip.js +104 -34
  39. package/dist/components/moni-color-field.d.ts +99 -24
  40. package/dist/components/moni-color-field.d.ts.map +1 -1
  41. package/dist/components/moni-color-field.js +99 -24
  42. package/dist/components/moni-context-menu.d.ts +72 -26
  43. package/dist/components/moni-context-menu.d.ts.map +1 -1
  44. package/dist/components/moni-context-menu.js +76 -30
  45. package/dist/components/moni-dialog.d.ts +84 -59
  46. package/dist/components/moni-dialog.d.ts.map +1 -1
  47. package/dist/components/moni-dialog.js +105 -58
  48. package/dist/components/moni-divider.d.ts +39 -27
  49. package/dist/components/moni-divider.d.ts.map +1 -1
  50. package/dist/components/moni-divider.js +42 -30
  51. package/dist/components/moni-expansion.d.ts +32 -22
  52. package/dist/components/moni-expansion.d.ts.map +1 -1
  53. package/dist/components/moni-expansion.js +32 -22
  54. package/dist/components/moni-fab-menu.d.ts +61 -23
  55. package/dist/components/moni-fab-menu.d.ts.map +1 -1
  56. package/dist/components/moni-fab-menu.js +69 -31
  57. package/dist/components/moni-fab.d.ts +86 -28
  58. package/dist/components/moni-fab.d.ts.map +1 -1
  59. package/dist/components/moni-fab.js +92 -34
  60. package/dist/components/moni-file-field.d.ts +118 -30
  61. package/dist/components/moni-file-field.d.ts.map +1 -1
  62. package/dist/components/moni-file-field.js +118 -30
  63. package/dist/components/moni-icon.d.ts +40 -35
  64. package/dist/components/moni-icon.d.ts.map +1 -1
  65. package/dist/components/moni-icon.js +43 -38
  66. package/dist/components/moni-list-item.d.ts +46 -33
  67. package/dist/components/moni-list-item.d.ts.map +1 -1
  68. package/dist/components/moni-list-item.js +61 -41
  69. package/dist/components/moni-list.d.ts +30 -20
  70. package/dist/components/moni-list.d.ts.map +1 -1
  71. package/dist/components/moni-list.js +36 -21
  72. package/dist/components/moni-loading-indicator.d.ts +54 -22
  73. package/dist/components/moni-loading-indicator.d.ts.map +1 -1
  74. package/dist/components/moni-loading-indicator.js +54 -22
  75. package/dist/components/moni-menu-item.d.ts +23 -16
  76. package/dist/components/moni-menu-item.d.ts.map +1 -1
  77. package/dist/components/moni-menu-item.js +23 -16
  78. package/dist/components/moni-menu.d.ts +81 -28
  79. package/dist/components/moni-menu.d.ts.map +1 -1
  80. package/dist/components/moni-menu.js +81 -30
  81. package/dist/components/moni-morph-modal.d.ts +141 -0
  82. package/dist/components/moni-morph-modal.d.ts.map +1 -1
  83. package/dist/components/moni-morph-modal.js +295 -58
  84. package/dist/components/moni-nav-item.d.ts +59 -29
  85. package/dist/components/moni-nav-item.d.ts.map +1 -1
  86. package/dist/components/moni-nav-item.js +59 -29
  87. package/dist/components/moni-nav.d.ts +94 -35
  88. package/dist/components/moni-nav.d.ts.map +1 -1
  89. package/dist/components/moni-nav.js +94 -35
  90. package/dist/components/moni-progress.d.ts +99 -55
  91. package/dist/components/moni-progress.d.ts.map +1 -1
  92. package/dist/components/moni-progress.js +99 -55
  93. package/dist/components/moni-radio.d.ts +62 -50
  94. package/dist/components/moni-radio.d.ts.map +1 -1
  95. package/dist/components/moni-radio.js +65 -52
  96. package/dist/components/moni-ripple.d.ts +74 -59
  97. package/dist/components/moni-ripple.d.ts.map +1 -1
  98. package/dist/components/moni-ripple.js +74 -59
  99. package/dist/components/moni-segmented-button.d.ts +91 -16
  100. package/dist/components/moni-segmented-button.d.ts.map +1 -1
  101. package/dist/components/moni-segmented-button.js +94 -17
  102. package/dist/components/moni-select-option.d.ts +30 -23
  103. package/dist/components/moni-select-option.d.ts.map +1 -1
  104. package/dist/components/moni-select-option.js +30 -23
  105. package/dist/components/moni-select.d.ts +300 -35
  106. package/dist/components/moni-select.d.ts.map +1 -1
  107. package/dist/components/moni-select.js +323 -39
  108. package/dist/components/moni-side-sheet.d.ts +94 -32
  109. package/dist/components/moni-side-sheet.d.ts.map +1 -1
  110. package/dist/components/moni-side-sheet.js +94 -32
  111. package/dist/components/moni-slider.d.ts +152 -41
  112. package/dist/components/moni-slider.d.ts.map +1 -1
  113. package/dist/components/moni-slider.js +154 -42
  114. package/dist/components/moni-snackbar.d.ts +53 -43
  115. package/dist/components/moni-snackbar.d.ts.map +1 -1
  116. package/dist/components/moni-snackbar.js +53 -43
  117. package/dist/components/moni-split-button.d.ts +63 -18
  118. package/dist/components/moni-split-button.d.ts.map +1 -1
  119. package/dist/components/moni-split-button.js +63 -18
  120. package/dist/components/moni-step.d.ts +36 -24
  121. package/dist/components/moni-step.d.ts.map +1 -1
  122. package/dist/components/moni-step.js +41 -29
  123. package/dist/components/moni-stepper.d.ts +64 -27
  124. package/dist/components/moni-stepper.d.ts.map +1 -1
  125. package/dist/components/moni-stepper.js +72 -34
  126. package/dist/components/moni-switch.d.ts +57 -46
  127. package/dist/components/moni-switch.d.ts.map +1 -1
  128. package/dist/components/moni-switch.js +59 -47
  129. package/dist/components/moni-tab.d.ts +26 -18
  130. package/dist/components/moni-tab.d.ts.map +1 -1
  131. package/dist/components/moni-tab.js +29 -21
  132. package/dist/components/moni-tabs.d.ts +34 -28
  133. package/dist/components/moni-tabs.d.ts.map +1 -1
  134. package/dist/components/moni-tabs.js +34 -28
  135. package/dist/components/moni-text-field.d.ts +139 -29
  136. package/dist/components/moni-text-field.d.ts.map +1 -1
  137. package/dist/components/moni-text-field.js +157 -31
  138. package/dist/components/moni-textarea.d.ts +127 -29
  139. package/dist/components/moni-textarea.d.ts.map +1 -1
  140. package/dist/components/moni-textarea.js +131 -32
  141. package/dist/components/moni-time-picker.d.ts +114 -24
  142. package/dist/components/moni-time-picker.d.ts.map +1 -1
  143. package/dist/components/moni-time-picker.js +127 -33
  144. package/dist/components/moni-toolbar.d.ts +37 -23
  145. package/dist/components/moni-toolbar.d.ts.map +1 -1
  146. package/dist/components/moni-toolbar.js +37 -23
  147. package/dist/components/moni-tooltip.d.ts +100 -36
  148. package/dist/components/moni-tooltip.d.ts.map +1 -1
  149. package/dist/components/moni-tooltip.js +104 -40
  150. package/dist/components/moni-typography.d.ts +68 -30
  151. package/dist/components/moni-typography.d.ts.map +1 -1
  152. package/dist/components/moni-typography.js +70 -32
  153. package/dist/styles/tokens.css +7 -7
  154. package/dist/types/events.d.ts +17 -0
  155. package/dist/types/events.d.ts.map +1 -0
  156. package/dist/types/events.js +1 -0
  157. package/dist/utils/event-emitter.d.ts +13 -0
  158. package/dist/utils/event-emitter.d.ts.map +1 -0
  159. package/dist/utils/event-emitter.js +13 -0
  160. package/package.json +2 -1
  161. package/src/components/_base/moni-element.ts +73 -9
  162. package/src/components/index.ts +2 -2
  163. package/src/components/loading-shapes.ts +19 -0
  164. package/src/components/moni-app-bar.test.ts +10 -10
  165. package/src/components/moni-app-bar.ts +72 -62
  166. package/src/components/moni-badge.ts +64 -66
  167. package/src/components/moni-bottom-sheet.test.ts +39 -45
  168. package/src/components/moni-bottom-sheet.ts +222 -131
  169. package/src/components/moni-button-group.test.ts +14 -14
  170. package/src/components/moni-button-group.ts +107 -29
  171. package/src/components/moni-button-segment.ts +53 -12
  172. package/src/components/moni-button.test.ts +28 -26
  173. package/src/components/moni-button.ts +139 -39
  174. package/src/components/moni-card.test.ts +6 -6
  175. package/src/components/moni-card.ts +70 -50
  176. package/src/components/moni-carousel.test.ts +12 -12
  177. package/src/components/moni-carousel.ts +953 -290
  178. package/src/components/moni-checkbox.test.ts +7 -7
  179. package/src/components/moni-checkbox.ts +62 -48
  180. package/src/components/moni-chip.test.ts +17 -17
  181. package/src/components/moni-chip.ts +112 -34
  182. package/src/components/moni-color-field.test.ts +5 -5
  183. package/src/components/moni-color-field.ts +108 -24
  184. package/src/components/moni-context-menu.test.ts +11 -11
  185. package/src/components/moni-context-menu.ts +76 -30
  186. package/src/components/moni-dialog.ts +108 -59
  187. package/src/components/moni-divider.test.ts +4 -4
  188. package/src/components/moni-divider.ts +42 -30
  189. package/src/components/moni-expansion.ts +32 -22
  190. package/src/components/moni-fab-menu.test.ts +11 -11
  191. package/src/components/moni-fab-menu.ts +69 -31
  192. package/src/components/moni-fab.test.ts +16 -16
  193. package/src/components/moni-fab.ts +100 -34
  194. package/src/components/moni-file-field.test.ts +8 -8
  195. package/src/components/moni-file-field.ts +132 -30
  196. package/src/components/moni-icon.test.ts +11 -11
  197. package/src/components/moni-icon.ts +43 -38
  198. package/src/components/moni-list-item.test.ts +10 -10
  199. package/src/components/moni-list-item.ts +61 -41
  200. package/src/components/moni-list.ts +37 -21
  201. package/src/components/moni-loading-indicator.test.ts +3 -3
  202. package/src/components/moni-loading-indicator.ts +54 -22
  203. package/src/components/moni-menu-item.ts +23 -16
  204. package/src/components/moni-menu.test.ts +7 -7
  205. package/src/components/moni-menu.ts +87 -30
  206. package/src/components/moni-morph-modal.test.ts +18 -17
  207. package/src/components/moni-morph-modal.ts +327 -60
  208. package/src/components/moni-nav-item.ts +59 -29
  209. package/src/components/moni-nav.test.ts +11 -11
  210. package/src/components/moni-nav.ts +94 -35
  211. package/src/components/moni-progress.test.ts +9 -9
  212. package/src/components/moni-progress.ts +100 -56
  213. package/src/components/moni-radio.test.ts +8 -8
  214. package/src/components/moni-radio.ts +71 -51
  215. package/src/components/moni-ripple.ts +74 -59
  216. package/src/components/moni-segmented-button.test.ts +4 -4
  217. package/src/components/moni-segmented-button.ts +94 -17
  218. package/src/components/moni-select-option.ts +30 -23
  219. package/src/components/moni-select.test.ts +11 -11
  220. package/src/components/moni-select.ts +361 -50
  221. package/src/components/moni-side-sheet.test.ts +7 -7
  222. package/src/components/moni-side-sheet.ts +94 -32
  223. package/src/components/moni-slider.test.ts +7 -7
  224. package/src/components/moni-slider.ts +165 -42
  225. package/src/components/moni-snackbar.test.ts +8 -8
  226. package/src/components/moni-snackbar.ts +53 -43
  227. package/src/components/moni-split-button.ts +63 -18
  228. package/src/components/moni-step.test.ts +7 -7
  229. package/src/components/moni-step.ts +41 -29
  230. package/src/components/moni-stepper.test.ts +7 -7
  231. package/src/components/moni-stepper.ts +72 -34
  232. package/src/components/moni-switch.test.ts +12 -12
  233. package/src/components/moni-switch.ts +66 -47
  234. package/src/components/moni-tab.test.ts +5 -5
  235. package/src/components/moni-tab.ts +29 -21
  236. package/src/components/moni-tabs.ts +34 -28
  237. package/src/components/moni-text-field.test.ts +13 -13
  238. package/src/components/moni-text-field.ts +181 -30
  239. package/src/components/moni-textarea.test.ts +17 -17
  240. package/src/components/moni-textarea.ts +155 -31
  241. package/src/components/moni-time-picker.test.ts +5 -5
  242. package/src/components/moni-time-picker.ts +128 -33
  243. package/src/components/moni-toolbar.test.ts +8 -8
  244. package/src/components/moni-toolbar.ts +37 -23
  245. package/src/components/moni-tooltip.test.ts +15 -15
  246. package/src/components/moni-tooltip.ts +107 -40
  247. package/src/components/moni-typography.test.ts +10 -10
  248. package/src/components/moni-typography.ts +73 -32
  249. package/src/styles/tokens.css +7 -7
  250. package/src/types/events.ts +17 -0
  251. package/src/utils/event-emitter.ts +26 -0
@@ -6,70 +6,148 @@
6
6
  */
7
7
  import { MoniElement } from './_base/index.js';
8
8
  /**
9
- * Material Design 3 Button Group component.
9
+ * Componente Material Design 3 Button Group.
10
10
  *
11
- * Organizes multiple `<moni-button>` or `<moni-icon-button>` components
12
- * into a single row.
11
+ * Organiza múltiples componentes `<moni-button>` o `<moni-icon-button>`
12
+ * en una sola fila.
13
13
  *
14
- * **Variants:**
15
- * - `standard` (default) — A simple flex row with a gap between buttons.
16
- * - `connected` — The M3 Expressive replacement for segmented buttons. In this
17
- * mode, buttons share borders and form a single continuous pill shape. The
18
- * group manages the single/multi-select toggle state of its children.
14
+ * **Variantes:**
15
+ * - `standard` (por defecto) — Una fila flex simple con un espacio entre botones.
16
+ * - `connected` — El reemplazo de M3 Expressive para los botones segmentados. En este
17
+ * modo, los botones comparten bordes y forman una sola forma de píldora continua. El
18
+ * grupo gestiona el estado de selección única/múltiple de sus hijos.
19
19
  *
20
- * **`connected` variant details:**
21
- * - **Shape propagation:** The group automatically propagates M3 shape classes
22
- * (`left-round-flat`, `no-round`, `right-round-flat`) to its children so
23
- * they interlock seamlessly.
24
- * - **Toggle management:** The group listens to child clicks and toggles their
25
- * `active` attributes. When `multi=false` (default), only one button can be
26
- * active at a time (radio button behavior). When `multi=true`, multiple buttons
27
- * can be active (checkbox behavior).
28
- * - **Event propagation:** Fires a `'change'` event when the selection changes.
20
+ * **Detalles de la variante `connected`:**
21
+ * - **Propagación de forma:** El grupo propaga automáticamente las clases de forma M3
22
+ * (`left-round-flat`, `no-round`, `right-round-flat`) a sus hijos para
23
+ * que se entrelacen sin problemas.
24
+ * - **Gestión del interruptor:** El grupo escucha los clics de los hijos y cambia sus
25
+ * atributos `active`. Cuando `multi=false` (por defecto), solo un botón puede estar
26
+ * activo a la vez (comportamiento de radio button). Cuando `multi=true`, múltiples botones
27
+ * pueden estar activos (comportamiento de checkbox).
28
+ * - **Propagación de eventos:** Dispara un evento `'change'` cuando la selección cambia.
29
29
  *
30
- * **Accessibility:**
31
- * - Renders with `role="group"` (can be overridden to `toolbar` or `radiogroup`).
32
- * - Consumers should provide an `aria-label` or `aria-labelledby` attribute
33
- * to identify the group's purpose to assistive technologies.
30
+ * **Accesibilidad:**
31
+ * - Renderiza con `role="group"` (puede ser sobrescrito a `toolbar` o `radiogroup`).
32
+ * - Los consumidores deben proporcionar un atributo `aria-label` o `aria-labelledby`
33
+ * para identificar el propósito del grupo para las tecnologías de asistencia.
34
34
  *
35
- * @fires change - Fired when a button is clicked in `connected` mode and the
36
- * selection state updates.
35
+ * @fires change - Disparado cuando se hace clic en un botón en modo `connected` y el
36
+ * estado de selección se actualiza.
37
37
  *
38
38
  * @example
39
39
  * ```html
40
- * <!-- Connected single-select group -->
41
- * <moni-button-group variant="connected" label="Alignment">
40
+ * <!-- Grupo conectado de selección única -->
41
+ * <moni-button-group variant="connected" label="Alineación">
42
42
  * <moni-button icon="format_align_left" active></moni-button>
43
43
  * <moni-button icon="format_align_center"></moni-button>
44
44
  * <moni-button icon="format_align_right"></moni-button>
45
45
  * </moni-button-group>
46
46
  *
47
- * <!-- Standard button row -->
47
+ * <!-- Fila estándar de botones -->
48
48
  * <moni-button-group gap="1rem">
49
- * <moni-button variant="text">Cancel</moni-button>
50
- * <moni-button>Save</moni-button>
49
+ * <moni-button variant="text">Cancelar</moni-button>
50
+ * <moni-button>Guardar</moni-button>
51
51
  * </moni-button-group>
52
52
  * ```
53
53
  *
54
- * @slot default - The `<moni-button>` elements that make up the group.
54
+ * @slot default - Los elementos `<moni-button>` que conforman el grupo.
55
55
  */
56
56
  export declare class MoniButtonGroup extends MoniElement {
57
+ /**
58
+ * Variante visual del grupo de botones.
59
+ * - `standard`: Los elementos se espacian normalmente.
60
+ * - `connected`: Los elementos se unen con bordes colapsados y radios internos aplanados.
61
+ * @type {'standard' | 'connected'}
62
+ * @default 'standard'
63
+ */
57
64
  variant: 'standard' | 'connected';
65
+ /**
66
+ * Tamaño de los botones en el grupo. Si se especifica, se propaga hacia abajo a los hijos.
67
+ * @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
68
+ * @default 'medium'
69
+ */
58
70
  size: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra';
71
+ /**
72
+ * Permite que múltiples botones estén activos a la vez (solo aplica a grupos seleccionables).
73
+ * @type {boolean}
74
+ */
59
75
  multi: boolean;
76
+ /**
77
+ * Espacio CSS personalizado entre botones (ej., '1rem').
78
+ * Solo se aplica cuando la variante es 'standard'.
79
+ * @type {string}
80
+ */
60
81
  gap: string;
82
+ /**
83
+ * Rol ARIA del contenedor del grupo.
84
+ * @type {'group' | 'toolbar' | 'radiogroup'}
85
+ * @default 'group'
86
+ */
61
87
  role: 'group' | 'toolbar' | 'radiogroup';
88
+ /**
89
+ * Una etiqueta accesible para el grupo (`aria-label`).
90
+ * @type {string}
91
+ */
62
92
  label: string;
93
+ /**
94
+ * ID de un elemento que etiqueta este grupo (`aria-labelledby`).
95
+ * @type {string}
96
+ */
63
97
  labelledBy: string;
64
98
  private slottedButtons;
65
99
  static styles: import("lit").CSSResult[];
100
+ /**
101
+ * Hook del ciclo de vida reactivo (Lit).
102
+ * Detecta alteraciones estructurales en el propio grupo (como `variant`, `size` o `gap`)
103
+ * y fuerza una re-sincronización de todos los botones hijos para aplicar las físicas CSS.
104
+ */
66
105
  protected updated(changedProperties: Map<string | number | symbol, unknown>): void;
106
+ /**
107
+ * Manejador del slot interno (`<slot>`).
108
+ * Cuando el desarrollador inyecta dinámicamente o remueve botones en runtime,
109
+ * re-sincroniza las formas (shapes) y tamaños de todo el listado.
110
+ */
67
111
  private handleSlotChange;
68
112
  private getGapValue;
113
+ /**
114
+ * Sincronizador de Propiedades (Engine interno).
115
+ * Itera sobre cada botón hijo para transferirle jerárquicamente las configuraciones
116
+ * del grupo. Si el grupo es del tipo `connected` (botones pegados), evalúa matemáticamente
117
+ * la posición del índice actual (primero, en medio o último) e inyecta la propiedad `shape`
118
+ * correspondiente (`left-round-flat`, `inner-round`, etc.) para formar una cápsula unificada.
119
+ */
69
120
  private updateChildren;
121
+ /**
122
+ * Maneja la interacción táctil o de mouse (Pointer Down).
123
+ * Genera un micro-efecto físico (Squish effect). Cuando el usuario presiona un botón
124
+ * dentro de un listado estándar, empuja físicamente (`scaleX` / `translateX`) a los
125
+ * botones adyacentes para simular presión material y desplazamiento.
126
+ */
70
127
  private handlePointerDown;
128
+ /**
129
+ * Conclusión de la interacción táctil (Pointer Up).
130
+ * Restaura todas las transformaciones elásticas aplicadas a los botones adyacentes
131
+ * a su estado nativo neutro.
132
+ */
71
133
  private handlePointerUp;
134
+ /**
135
+ * Interceptor de clics de delegación.
136
+ * En grupos de tipo 'segment', garantiza que solo un botón tenga la clase activa
137
+ * o el atributo encendido de forma excluyente, actuando como un gestor de radio-buttons.
138
+ */
72
139
  private handleClick;
140
+ /**
141
+ * Renders the button group container with `role="group"` semantics.
142
+ *
143
+ * The group is a flex container that distributes its slotted `<moni-button>`
144
+ * or `<moni-button-segment>` children in a row or column (based on `orientation`).
145
+ * CSS handles the shared-border collapse between adjacent segments:
146
+ * - Middle segments use `border-radius: 0` and `margin-inline-start: -1px`
147
+ * to prevent doubled borders.
148
+ * - `_syncSegments()` in `firstUpdated()` injects `left-round` / `right-round`
149
+ * shape attributes into the first and last children for correct pill termination.
150
+ */
73
151
  render(): import("lit").TemplateResult<1>;
74
152
  }
75
153
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-button-group.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-group.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBACa,eAAgB,SAAQ,WAAW;IAE/C,OAAO,EAAE,UAAU,GAAG,WAAW,CAAc;IAG/C,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAG9E,KAAK,UAAS;IAGd,GAAG,SAAM;IAGT,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAW;IAGnD,KAAK,SAAM;IAGX,UAAU,SAAM;IAGhB,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAgB,MAAM,4BAuCpB;cAEiB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAOpF,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,cAAc;IA0CtB,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,WAAW;IA2CV,MAAM;CAyBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,mBAAmB,EAAE,eAAe,CAAC;KACrC;CACD;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"moni-button-group.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-group.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBACa,eAAgB,SAAQ,WAAW;IAC/C;;;;;;OAMG;IAEH,OAAO,EAAE,UAAU,GAAG,WAAW,CAAc;IAE/C;;;;OAIG;IAEH,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE9E;;;OAGG;IAEH,KAAK,UAAS;IAEd;;;;OAIG;IAEH,GAAG,SAAM;IAET;;;;OAIG;IAEH,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAW;IAEnD;;;OAGG;IAEH,KAAK,SAAM;IAEX;;;OAGG;IAEH,UAAU,SAAM;IAGhB,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAgB,MAAM,4BAuCpB;IAEF;;;;OAIG;cACgB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAOpF;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;IAWnB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IA0CtB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA2CnB;;;;;;;;;;OAUG;IACM,MAAM;CAyBf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,mBAAmB,EAAE,eAAe,CAAC;KACrC;CACD;AAED,eAAe,eAAe,CAAC"}
@@ -14,62 +14,96 @@ import { html, css, nothing } from 'lit';
14
14
  import { customElement, property, queryAssignedElements } from 'lit/decorators.js';
15
15
  import { MoniElement, sharedStyles } from './_base/index.js';
16
16
  /**
17
- * Material Design 3 Button Group component.
17
+ * Componente Material Design 3 Button Group.
18
18
  *
19
- * Organizes multiple `<moni-button>` or `<moni-icon-button>` components
20
- * into a single row.
19
+ * Organiza múltiples componentes `<moni-button>` o `<moni-icon-button>`
20
+ * en una sola fila.
21
21
  *
22
- * **Variants:**
23
- * - `standard` (default) — A simple flex row with a gap between buttons.
24
- * - `connected` — The M3 Expressive replacement for segmented buttons. In this
25
- * mode, buttons share borders and form a single continuous pill shape. The
26
- * group manages the single/multi-select toggle state of its children.
22
+ * **Variantes:**
23
+ * - `standard` (por defecto) — Una fila flex simple con un espacio entre botones.
24
+ * - `connected` — El reemplazo de M3 Expressive para los botones segmentados. En este
25
+ * modo, los botones comparten bordes y forman una sola forma de píldora continua. El
26
+ * grupo gestiona el estado de selección única/múltiple de sus hijos.
27
27
  *
28
- * **`connected` variant details:**
29
- * - **Shape propagation:** The group automatically propagates M3 shape classes
30
- * (`left-round-flat`, `no-round`, `right-round-flat`) to its children so
31
- * they interlock seamlessly.
32
- * - **Toggle management:** The group listens to child clicks and toggles their
33
- * `active` attributes. When `multi=false` (default), only one button can be
34
- * active at a time (radio button behavior). When `multi=true`, multiple buttons
35
- * can be active (checkbox behavior).
36
- * - **Event propagation:** Fires a `'change'` event when the selection changes.
28
+ * **Detalles de la variante `connected`:**
29
+ * - **Propagación de forma:** El grupo propaga automáticamente las clases de forma M3
30
+ * (`left-round-flat`, `no-round`, `right-round-flat`) a sus hijos para
31
+ * que se entrelacen sin problemas.
32
+ * - **Gestión del interruptor:** El grupo escucha los clics de los hijos y cambia sus
33
+ * atributos `active`. Cuando `multi=false` (por defecto), solo un botón puede estar
34
+ * activo a la vez (comportamiento de radio button). Cuando `multi=true`, múltiples botones
35
+ * pueden estar activos (comportamiento de checkbox).
36
+ * - **Propagación de eventos:** Dispara un evento `'change'` cuando la selección cambia.
37
37
  *
38
- * **Accessibility:**
39
- * - Renders with `role="group"` (can be overridden to `toolbar` or `radiogroup`).
40
- * - Consumers should provide an `aria-label` or `aria-labelledby` attribute
41
- * to identify the group's purpose to assistive technologies.
38
+ * **Accesibilidad:**
39
+ * - Renderiza con `role="group"` (puede ser sobrescrito a `toolbar` o `radiogroup`).
40
+ * - Los consumidores deben proporcionar un atributo `aria-label` o `aria-labelledby`
41
+ * para identificar el propósito del grupo para las tecnologías de asistencia.
42
42
  *
43
- * @fires change - Fired when a button is clicked in `connected` mode and the
44
- * selection state updates.
43
+ * @fires change - Disparado cuando se hace clic en un botón en modo `connected` y el
44
+ * estado de selección se actualiza.
45
45
  *
46
46
  * @example
47
47
  * ```html
48
- * <!-- Connected single-select group -->
49
- * <moni-button-group variant="connected" label="Alignment">
48
+ * <!-- Grupo conectado de selección única -->
49
+ * <moni-button-group variant="connected" label="Alineación">
50
50
  * <moni-button icon="format_align_left" active></moni-button>
51
51
  * <moni-button icon="format_align_center"></moni-button>
52
52
  * <moni-button icon="format_align_right"></moni-button>
53
53
  * </moni-button-group>
54
54
  *
55
- * <!-- Standard button row -->
55
+ * <!-- Fila estándar de botones -->
56
56
  * <moni-button-group gap="1rem">
57
- * <moni-button variant="text">Cancel</moni-button>
58
- * <moni-button>Save</moni-button>
57
+ * <moni-button variant="text">Cancelar</moni-button>
58
+ * <moni-button>Guardar</moni-button>
59
59
  * </moni-button-group>
60
60
  * ```
61
61
  *
62
- * @slot default - The `<moni-button>` elements that make up the group.
62
+ * @slot default - Los elementos `<moni-button>` que conforman el grupo.
63
63
  */
64
64
  let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
65
65
  constructor() {
66
66
  super(...arguments);
67
+ /**
68
+ * Variante visual del grupo de botones.
69
+ * - `standard`: Los elementos se espacian normalmente.
70
+ * - `connected`: Los elementos se unen con bordes colapsados y radios internos aplanados.
71
+ * @type {'standard' | 'connected'}
72
+ * @default 'standard'
73
+ */
67
74
  this.variant = 'standard';
75
+ /**
76
+ * Tamaño de los botones en el grupo. Si se especifica, se propaga hacia abajo a los hijos.
77
+ * @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
78
+ * @default 'medium'
79
+ */
68
80
  this.size = 'medium';
81
+ /**
82
+ * Permite que múltiples botones estén activos a la vez (solo aplica a grupos seleccionables).
83
+ * @type {boolean}
84
+ */
69
85
  this.multi = false;
86
+ /**
87
+ * Espacio CSS personalizado entre botones (ej., '1rem').
88
+ * Solo se aplica cuando la variante es 'standard'.
89
+ * @type {string}
90
+ */
70
91
  this.gap = '';
92
+ /**
93
+ * Rol ARIA del contenedor del grupo.
94
+ * @type {'group' | 'toolbar' | 'radiogroup'}
95
+ * @default 'group'
96
+ */
71
97
  this.role = 'group';
98
+ /**
99
+ * Una etiqueta accesible para el grupo (`aria-label`).
100
+ * @type {string}
101
+ */
72
102
  this.label = '';
103
+ /**
104
+ * ID de un elemento que etiqueta este grupo (`aria-labelledby`).
105
+ * @type {string}
106
+ */
73
107
  this.labelledBy = '';
74
108
  }
75
109
  static { this.styles = [
@@ -112,12 +146,22 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
112
146
  }
113
147
  `
114
148
  ]; }
149
+ /**
150
+ * Hook del ciclo de vida reactivo (Lit).
151
+ * Detecta alteraciones estructurales en el propio grupo (como `variant`, `size` o `gap`)
152
+ * y fuerza una re-sincronización de todos los botones hijos para aplicar las físicas CSS.
153
+ */
115
154
  updated(changedProperties) {
116
155
  super.updated(changedProperties);
117
156
  if (changedProperties.has('variant') || changedProperties.has('size') || changedProperties.has('gap')) {
118
157
  this.updateChildren();
119
158
  }
120
159
  }
160
+ /**
161
+ * Manejador del slot interno (`<slot>`).
162
+ * Cuando el desarrollador inyecta dinámicamente o remueve botones en runtime,
163
+ * re-sincroniza las formas (shapes) y tamaños de todo el listado.
164
+ */
121
165
  handleSlotChange() {
122
166
  this.updateChildren();
123
167
  }
@@ -137,6 +181,13 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
137
181
  return '0.5rem';
138
182
  return gap;
139
183
  }
184
+ /**
185
+ * Sincronizador de Propiedades (Engine interno).
186
+ * Itera sobre cada botón hijo para transferirle jerárquicamente las configuraciones
187
+ * del grupo. Si el grupo es del tipo `connected` (botones pegados), evalúa matemáticamente
188
+ * la posición del índice actual (primero, en medio o último) e inyecta la propiedad `shape`
189
+ * correspondiente (`left-round-flat`, `inner-round`, etc.) para formar una cápsula unificada.
190
+ */
140
191
  updateChildren() {
141
192
  const buttons = this.slottedButtons.filter((el) => el.tagName.toLowerCase() === 'moni-button' || el.tagName.toLowerCase() === 'moni-icon-button');
142
193
  buttons.forEach((btn, index) => {
@@ -182,6 +233,12 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
182
233
  }
183
234
  });
184
235
  }
236
+ /**
237
+ * Maneja la interacción táctil o de mouse (Pointer Down).
238
+ * Genera un micro-efecto físico (Squish effect). Cuando el usuario presiona un botón
239
+ * dentro de un listado estándar, empuja físicamente (`scaleX` / `translateX`) a los
240
+ * botones adyacentes para simular presión material y desplazamiento.
241
+ */
185
242
  handlePointerDown(e) {
186
243
  if (this.variant !== 'standard')
187
244
  return;
@@ -206,6 +263,11 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
206
263
  next.style.transformOrigin = 'left center';
207
264
  }
208
265
  }
266
+ /**
267
+ * Conclusión de la interacción táctil (Pointer Up).
268
+ * Restaura todas las transformaciones elásticas aplicadas a los botones adyacentes
269
+ * a su estado nativo neutro.
270
+ */
209
271
  handlePointerUp() {
210
272
  const buttons = this.slottedButtons.filter((el) => el.tagName.toLowerCase() === 'moni-button' || el.tagName.toLowerCase() === 'moni-icon-button');
211
273
  buttons.forEach((btn) => {
@@ -213,6 +275,11 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
213
275
  btn.style.transformOrigin = '';
214
276
  });
215
277
  }
278
+ /**
279
+ * Interceptor de clics de delegación.
280
+ * En grupos de tipo 'segment', garantiza que solo un botón tenga la clase activa
281
+ * o el atributo encendido de forma excluyente, actuando como un gestor de radio-buttons.
282
+ */
216
283
  handleClick(e) {
217
284
  const target = e.target;
218
285
  const clickedButton = target.closest('moni-button, moni-icon-button');
@@ -247,6 +314,17 @@ let MoniButtonGroup = class MoniButtonGroup extends MoniElement {
247
314
  }
248
315
  }));
249
316
  }
317
+ /**
318
+ * Renders the button group container with `role="group"` semantics.
319
+ *
320
+ * The group is a flex container that distributes its slotted `<moni-button>`
321
+ * or `<moni-button-segment>` children in a row or column (based on `orientation`).
322
+ * CSS handles the shared-border collapse between adjacent segments:
323
+ * - Middle segments use `border-radius: 0` and `margin-inline-start: -1px`
324
+ * to prevent doubled borders.
325
+ * - `_syncSegments()` in `firstUpdated()` injects `left-round` / `right-round`
326
+ * shape attributes into the first and last children for correct pill termination.
327
+ */
250
328
  render() {
251
329
  const resolvedGap = this.getGapValue(this.gap);
252
330
  const inlineStyles = resolvedGap
@@ -7,37 +7,78 @@
7
7
  import { MoniElement } from './_base/index.js';
8
8
  import './moni-icon.js';
9
9
  /**
10
- * Material Design 3 Segmented Button component (Legacy).
10
+ * Componente Material Design 3 Segmented Button (Heredado).
11
11
  *
12
- * **Deprecation Notice:** The M3 spec (`m3-docs/components/segmented-buttons/overview.md`)
13
- * has replaced the bespoke segmented button component with standard buttons arranged
14
- * in a "connected" group. Please use `<moni-button-group variant="connected">`
15
- * containing standard `<moni-button>` elements instead of this component.
12
+ * **Aviso de obsolescencia:** La especificación M3 (`m3-docs/components/segmented-buttons/overview.md`)
13
+ * ha reemplazado el componente a medida "segmented button" con botones estándar organizados
14
+ * en un grupo "conectado". Por favor usa `<moni-button-group variant="connected">`
15
+ * conteniendo elementos `<moni-button>` estándar en lugar de este componente.
16
16
  *
17
- * This component remains for backwards compatibility but will be removed in a
18
- * future major release. It renders a single segment within a `<moni-segmented-button>`.
17
+ * Este componente permanece por compatibilidad hacia atrás pero será eliminado en una
18
+ * futura versión mayor. Renderiza un segmento único dentro de un `<moni-segmented-button>`.
19
19
  *
20
- * @deprecated Use `<moni-button-group variant="connected">` instead.
20
+ * @deprecated Usa `<moni-button-group variant="connected">` en su lugar.
21
21
  *
22
22
  * @example
23
23
  * ```html
24
- * <!-- Legacy usage (not recommended) -->
24
+ * <!-- Uso heredado (no recomendado) -->
25
25
  * <moni-segmented-button>
26
- * <moni-button-segment value="day" checked>Day</moni-button-segment>
27
- * <moni-button-segment value="week">Week</moni-button-segment>
26
+ * <moni-button-segment value="day" checked>Día</moni-button-segment>
27
+ * <moni-button-segment value="week">Semana</moni-button-segment>
28
28
  * </moni-segmented-button>
29
29
  * ```
30
30
  *
31
- * @slot default - The segment label text.
31
+ * @slot default - El texto de la etiqueta del segmento.
32
32
  */
33
33
  export declare class MoniButtonSegment extends MoniElement {
34
+ /**
35
+ * Valor asociado con el segmento, usado por el grupo padre.
36
+ * @type {string}
37
+ * @default 'on'
38
+ */
34
39
  value: string;
40
+ /**
41
+ * Estado seleccionado del segmento.
42
+ * @type {boolean}
43
+ */
35
44
  checked: boolean;
45
+ /**
46
+ * Tamaño del segmento (usualmente heredado del botón segmentado padre).
47
+ * @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
48
+ * @default 'medium'
49
+ */
36
50
  size: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra';
51
+ /**
52
+ * Deshabilita el segmento.
53
+ * @type {boolean}
54
+ */
37
55
  disabled: boolean;
56
+ /**
57
+ * Índice posicional del segmento dentro del grupo.
58
+ * Determina la lógica de redondeo del border-radius.
59
+ * @type {'first' | 'middle' | 'last' | 'solo'}
60
+ * @default 'solo'
61
+ */
38
62
  position: 'first' | 'middle' | 'last' | 'solo';
63
+ /**
64
+ * Si es verdadero, oculta el icono de marca de verificación que normalmente reemplaza al icono inicial cuando se selecciona.
65
+ * @type {boolean}
66
+ */
39
67
  hideCheck: boolean;
40
68
  static styles: import("lit").CSSResult[];
69
+ /**
70
+ * Renders the segment as a `role="radio"` toggle button within its group.
71
+ *
72
+ * **`role="radio"` + `aria-checked`:**
73
+ * Per the ARIA Segmented Button pattern, each segment acts as a radio button
74
+ * (`role="radio"`, `aria-checked=${this.active}`) within a `role="radiogroup"`
75
+ * container (the parent `<moni-segmented-button>`).
76
+ *
77
+ * **Checkmark icon:**
78
+ * When `active=true`, a `<moni-icon name="check">` is prepended to the label
79
+ * to signal the selected state visually (M3 Segmented Button spec, Figure 5).
80
+ * This icon disappears with a `scale(0)` transition when `active=false`.
81
+ */
41
82
  render(): import("lit").TemplateResult<1>;
42
83
  }
43
84
  declare global {
@@ -1 +1 @@
1
- {"version":3,"file":"moni-button-segment.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-segment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,iBAAkB,SAAQ,WAAW;IAEjD,KAAK,SAAQ;IAGb,OAAO,UAAS;IAGhB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAG9E,QAAQ,UAAS;IAGjB,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAU;IAGxD,SAAS,UAAS;IAElB,OAAgB,MAAM,4BA0OpB;IAEO,MAAM;CAWf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,qBAAqB,EAAE,iBAAiB,CAAC;KACzC;CACD;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"moni-button-segment.d.ts","sourceRoot":"","sources":["../../src/components/moni-button-segment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAC7D,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,iBAAkB,SAAQ,WAAW;IACjD;;;;OAIG;IAEH,KAAK,SAAQ;IAEb;;;OAGG;IAEH,OAAO,UAAS;IAEhB;;;;OAIG;IAEH,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE9E;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;;;OAKG;IAEH,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAU;IAExD;;;OAGG;IAEH,SAAS,UAAS;IAElB,OAAgB,MAAM,4BA0OpB;IAEF;;;;;;;;;;;;OAYG;IACM,MAAM;CAWf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,qBAAqB,EAAE,iBAAiB,CAAC;KACzC;CACD;AAED,eAAe,iBAAiB,CAAC"}
@@ -15,37 +15,65 @@ import { customElement, property } from 'lit/decorators.js';
15
15
  import { MoniElement, sharedStyles } from './_base/index.js';
16
16
  import './moni-icon.js';
17
17
  /**
18
- * Material Design 3 Segmented Button component (Legacy).
18
+ * Componente Material Design 3 Segmented Button (Heredado).
19
19
  *
20
- * **Deprecation Notice:** The M3 spec (`m3-docs/components/segmented-buttons/overview.md`)
21
- * has replaced the bespoke segmented button component with standard buttons arranged
22
- * in a "connected" group. Please use `<moni-button-group variant="connected">`
23
- * containing standard `<moni-button>` elements instead of this component.
20
+ * **Aviso de obsolescencia:** La especificación M3 (`m3-docs/components/segmented-buttons/overview.md`)
21
+ * ha reemplazado el componente a medida "segmented button" con botones estándar organizados
22
+ * en un grupo "conectado". Por favor usa `<moni-button-group variant="connected">`
23
+ * conteniendo elementos `<moni-button>` estándar en lugar de este componente.
24
24
  *
25
- * This component remains for backwards compatibility but will be removed in a
26
- * future major release. It renders a single segment within a `<moni-segmented-button>`.
25
+ * Este componente permanece por compatibilidad hacia atrás pero será eliminado en una
26
+ * futura versión mayor. Renderiza un segmento único dentro de un `<moni-segmented-button>`.
27
27
  *
28
- * @deprecated Use `<moni-button-group variant="connected">` instead.
28
+ * @deprecated Usa `<moni-button-group variant="connected">` en su lugar.
29
29
  *
30
30
  * @example
31
31
  * ```html
32
- * <!-- Legacy usage (not recommended) -->
32
+ * <!-- Uso heredado (no recomendado) -->
33
33
  * <moni-segmented-button>
34
- * <moni-button-segment value="day" checked>Day</moni-button-segment>
35
- * <moni-button-segment value="week">Week</moni-button-segment>
34
+ * <moni-button-segment value="day" checked>Día</moni-button-segment>
35
+ * <moni-button-segment value="week">Semana</moni-button-segment>
36
36
  * </moni-segmented-button>
37
37
  * ```
38
38
  *
39
- * @slot default - The segment label text.
39
+ * @slot default - El texto de la etiqueta del segmento.
40
40
  */
41
41
  let MoniButtonSegment = class MoniButtonSegment extends MoniElement {
42
42
  constructor() {
43
43
  super(...arguments);
44
+ /**
45
+ * Valor asociado con el segmento, usado por el grupo padre.
46
+ * @type {string}
47
+ * @default 'on'
48
+ */
44
49
  this.value = 'on';
50
+ /**
51
+ * Estado seleccionado del segmento.
52
+ * @type {boolean}
53
+ */
45
54
  this.checked = false;
55
+ /**
56
+ * Tamaño del segmento (usualmente heredado del botón segmentado padre).
57
+ * @type {'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'extra'}
58
+ * @default 'medium'
59
+ */
46
60
  this.size = 'medium';
61
+ /**
62
+ * Deshabilita el segmento.
63
+ * @type {boolean}
64
+ */
47
65
  this.disabled = false;
66
+ /**
67
+ * Índice posicional del segmento dentro del grupo.
68
+ * Determina la lógica de redondeo del border-radius.
69
+ * @type {'first' | 'middle' | 'last' | 'solo'}
70
+ * @default 'solo'
71
+ */
48
72
  this.position = 'solo';
73
+ /**
74
+ * Si es verdadero, oculta el icono de marca de verificación que normalmente reemplaza al icono inicial cuando se selecciona.
75
+ * @type {boolean}
76
+ */
49
77
  this.hideCheck = false;
50
78
  }
51
79
  static { this.styles = [
@@ -283,6 +311,19 @@ let MoniButtonSegment = class MoniButtonSegment extends MoniElement {
283
311
  }
284
312
  `
285
313
  ]; }
314
+ /**
315
+ * Renders the segment as a `role="radio"` toggle button within its group.
316
+ *
317
+ * **`role="radio"` + `aria-checked`:**
318
+ * Per the ARIA Segmented Button pattern, each segment acts as a radio button
319
+ * (`role="radio"`, `aria-checked=${this.active}`) within a `role="radiogroup"`
320
+ * container (the parent `<moni-segmented-button>`).
321
+ *
322
+ * **Checkmark icon:**
323
+ * When `active=true`, a `<moni-icon name="check">` is prepended to the label
324
+ * to signal the selected state visually (M3 Segmented Button spec, Figure 5).
325
+ * This icon disappears with a `scale(0)` transition when `active=false`.
326
+ */
286
327
  render() {
287
328
  return html `
288
329
  <button class="button ${this.size}" type="button" ?disabled=${this.disabled}>