@mozaic-ds/web-components 1.1.0 → 1.2.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 (230) hide show
  1. package/README.md +26 -104
  2. package/dist/Cross20.js +1 -1
  3. package/dist/Cross20.js.map +1 -1
  4. package/dist/Cross24.js +1 -1
  5. package/dist/CrossCircleFilled24.js +1 -1
  6. package/dist/attributes.js +1 -1
  7. package/dist/attributes.js.map +1 -1
  8. package/dist/bundle.d.ts +5 -5
  9. package/dist/bundle.d.ts.map +1 -1
  10. package/dist/bundle.js +5 -5
  11. package/dist/components/avatar/Avatar.js +2 -2
  12. package/dist/components/avatar/Avatar.js.map +1 -1
  13. package/dist/components/avatar/Avatar.svelte +1 -1
  14. package/dist/components/breadcrumb/Breadcrumb.js +2 -2
  15. package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
  16. package/dist/components/breadcrumb/Breadcrumb.svelte +1 -1
  17. package/dist/components/button/Button.js +3 -3
  18. package/dist/components/button/Button.js.map +1 -1
  19. package/dist/components/button/Button.svelte +2 -2
  20. package/dist/components/callout/Callout.js +1 -1
  21. package/dist/components/callout/Callout.js.map +1 -1
  22. package/dist/components/callout/Callout.svelte +1 -1
  23. package/dist/components/checkbox/Checkbox.js +2 -2
  24. package/dist/components/checkbox/Checkbox.svelte +2 -2
  25. package/dist/components/checkboxgroup/CheckboxGroup.js +1 -1
  26. package/dist/components/checkboxgroup/CheckboxGroup.svelte +2 -2
  27. package/dist/components/circularprogressbar/CircularProgressbar.js +2 -2
  28. package/dist/components/circularprogressbar/CircularProgressbar.js.map +1 -1
  29. package/dist/components/circularprogressbar/CircularProgressbar.stories.js +2 -2
  30. package/dist/components/circularprogressbar/CircularProgressbar.svelte +10 -1
  31. package/dist/components/circularprogressbar/CircularProgressbar.svelte.d.ts +1 -0
  32. package/dist/components/circularprogressbar/CircularProgressbar.svelte.d.ts.map +1 -1
  33. package/dist/components/container/Container.js +14 -0
  34. package/dist/components/container/Container.js.map +1 -0
  35. package/dist/components/container/Container.spec.js +26 -0
  36. package/dist/components/container/Container.stories.d.ts +7 -0
  37. package/dist/components/container/Container.stories.d.ts.map +1 -0
  38. package/dist/components/container/Container.stories.js +23 -0
  39. package/dist/components/container/Container.svelte +60 -0
  40. package/dist/components/container/Container.svelte.d.ts +39 -0
  41. package/dist/components/container/Container.svelte.d.ts.map +1 -0
  42. package/dist/components/container/README.md +16 -0
  43. package/dist/components/datepicker/Datepicker.js +3 -3
  44. package/dist/components/datepicker/Datepicker.js.map +1 -1
  45. package/dist/components/datepicker/Datepicker.svelte +9 -9
  46. package/dist/components/divider/Divider.js +4 -0
  47. package/dist/components/divider/Divider.js.map +1 -0
  48. package/dist/components/divider/Divider.spec.js +50 -0
  49. package/dist/components/divider/Divider.stories.d.ts +9 -0
  50. package/dist/components/divider/Divider.stories.d.ts.map +1 -0
  51. package/dist/components/divider/Divider.stories.js +57 -0
  52. package/dist/components/divider/Divider.svelte +90 -0
  53. package/dist/components/divider/Divider.svelte.d.ts +47 -0
  54. package/dist/components/divider/Divider.svelte.d.ts.map +1 -0
  55. package/dist/components/divider/README.md +18 -0
  56. package/dist/components/drawer/Drawer.js +4 -4
  57. package/dist/components/drawer/Drawer.js.map +1 -1
  58. package/dist/components/drawer/Drawer.svelte +4 -4
  59. package/dist/components/flag/Flag.js +2 -2
  60. package/dist/components/flag/Flag.js.map +1 -1
  61. package/dist/components/flag/Flag.svelte +1 -1
  62. package/dist/components/iconbutton/IconButton.js +2 -2
  63. package/dist/components/iconbutton/IconButton.js.map +1 -1
  64. package/dist/components/iconbutton/IconButton.svelte +2 -2
  65. package/dist/components/kpiitem/KpiItem.js +5 -0
  66. package/dist/components/kpiitem/KpiItem.js.map +1 -0
  67. package/dist/components/kpiitem/KpiItem.spec.js +60 -0
  68. package/dist/components/kpiitem/KpiItem.stories.d.ts +8 -0
  69. package/dist/components/kpiitem/KpiItem.stories.d.ts.map +1 -0
  70. package/dist/components/kpiitem/KpiItem.stories.js +56 -0
  71. package/dist/components/kpiitem/KpiItem.svelte +231 -0
  72. package/dist/components/kpiitem/KpiItem.svelte.d.ts +34 -0
  73. package/dist/components/kpiitem/KpiItem.svelte.d.ts.map +1 -0
  74. package/dist/components/kpiitem/README.md +15 -0
  75. package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.js +2 -2
  76. package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.js.map +1 -1
  77. package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.svelte +2 -2
  78. package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.js +2 -2
  79. package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.js.map +1 -1
  80. package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.svelte +3 -3
  81. package/dist/components/link/Link.js +1 -1
  82. package/dist/components/link/Link.js.map +1 -1
  83. package/dist/components/link/Link.svelte +1 -1
  84. package/dist/components/modal/Modal.js +3 -3
  85. package/dist/components/modal/Modal.js.map +1 -1
  86. package/dist/components/modal/Modal.svelte +4 -4
  87. package/dist/components/numberbadge/NumberBadge.js +1 -1
  88. package/dist/components/numberbadge/NumberBadge.js.map +1 -1
  89. package/dist/components/numberbadge/NumberBadge.svelte +1 -1
  90. package/dist/components/pagination/Pagination.js +6 -6
  91. package/dist/components/pagination/Pagination.js.map +1 -1
  92. package/dist/components/pagination/Pagination.svelte +5 -5
  93. package/dist/components/passwordinput/PasswordInput.js +3 -3
  94. package/dist/components/passwordinput/PasswordInput.js.map +1 -1
  95. package/dist/components/passwordinput/PasswordInput.svelte +8 -8
  96. package/dist/components/pincode/Pincode.js +2 -2
  97. package/dist/components/pincode/Pincode.js.map +1 -1
  98. package/dist/components/pincode/Pincode.svelte +5 -5
  99. package/dist/components/quantityselector/QuantitySelector.js +3 -3
  100. package/dist/components/quantityselector/QuantitySelector.js.map +1 -1
  101. package/dist/components/quantityselector/QuantitySelector.svelte +10 -12
  102. package/dist/components/quantityselector/QuantitySelector.svelte.d.ts.map +1 -1
  103. package/dist/components/radio/Radio.js +2 -2
  104. package/dist/components/radio/Radio.js.map +1 -1
  105. package/dist/components/radio/Radio.svelte +2 -2
  106. package/dist/components/radiogroup/RadioGroup.js +1 -1
  107. package/dist/components/radiogroup/RadioGroup.svelte +2 -2
  108. package/dist/components/select/Select.js +3 -3
  109. package/dist/components/select/Select.svelte +5 -5
  110. package/dist/components/statusbadge/StatusBadge.js +2 -2
  111. package/dist/components/statusbadge/StatusBadge.js.map +1 -1
  112. package/dist/components/statusbadge/StatusBadge.svelte +9 -9
  113. package/dist/components/statusdot/StatusDot.js +1 -1
  114. package/dist/components/statusdot/StatusDot.svelte +2 -2
  115. package/dist/components/statusmessage/README.md +11 -0
  116. package/dist/components/statusmessage/StatusMessage.js +4 -0
  117. package/dist/components/statusmessage/StatusMessage.js.map +1 -0
  118. package/dist/components/statusmessage/StatusMessage.spec.js +47 -0
  119. package/dist/components/statusmessage/StatusMessage.stories.d.ts +11 -0
  120. package/dist/components/statusmessage/StatusMessage.stories.d.ts.map +1 -0
  121. package/dist/components/statusmessage/StatusMessage.stories.js +37 -0
  122. package/dist/components/statusmessage/StatusMessage.svelte +84 -0
  123. package/dist/components/statusmessage/StatusMessage.svelte.d.ts +17 -0
  124. package/dist/components/statusmessage/StatusMessage.svelte.d.ts.map +1 -0
  125. package/dist/components/statusnotification/StatusNotification.js +2 -2
  126. package/dist/components/statusnotification/StatusNotification.js.map +1 -1
  127. package/dist/components/statusnotification/StatusNotification.svelte +12 -12
  128. package/dist/components/steppercompact/README.md +13 -0
  129. package/dist/components/steppercompact/StepperCompact.js +4 -0
  130. package/dist/components/steppercompact/StepperCompact.js.map +1 -0
  131. package/dist/components/steppercompact/StepperCompact.spec.js +119 -0
  132. package/dist/components/steppercompact/StepperCompact.stories.d.ts +6 -0
  133. package/dist/components/steppercompact/StepperCompact.stories.d.ts.map +1 -0
  134. package/dist/components/steppercompact/StepperCompact.stories.js +28 -0
  135. package/dist/components/steppercompact/StepperCompact.svelte +123 -0
  136. package/dist/components/steppercompact/StepperCompact.svelte.d.ts +25 -0
  137. package/dist/components/steppercompact/StepperCompact.svelte.d.ts.map +1 -0
  138. package/dist/components/tab/Tab.js +2 -2
  139. package/dist/components/tab/Tab.js.map +1 -1
  140. package/dist/components/tab/Tab.svelte +1 -1
  141. package/dist/components/tabs/Tabs.svelte +1 -1
  142. package/dist/components/tag/README.md +30 -0
  143. package/dist/components/tag/Tag.js +4 -0
  144. package/dist/components/tag/Tag.js.map +1 -0
  145. package/dist/components/tag/Tag.stories.d.ts +12 -0
  146. package/dist/components/tag/Tag.stories.d.ts.map +1 -0
  147. package/dist/components/tag/Tag.stories.js +70 -0
  148. package/dist/components/{tags/TagRemovable.svelte → tag/Tag.svelte} +111 -26
  149. package/dist/components/tag/Tag.svelte.d.ts +65 -0
  150. package/dist/components/tag/Tag.svelte.d.ts.map +1 -0
  151. package/dist/components/textarea/Textarea.js +2 -2
  152. package/dist/components/textarea/Textarea.js.map +1 -1
  153. package/dist/components/textarea/Textarea.svelte +5 -5
  154. package/dist/components/textinput/Textinput.js +5 -5
  155. package/dist/components/textinput/Textinput.js.map +1 -1
  156. package/dist/components/textinput/Textinput.svelte +6 -6
  157. package/dist/components/toaster/Toaster.js +3 -3
  158. package/dist/components/toaster/Toaster.js.map +1 -1
  159. package/dist/components/toaster/Toaster.svelte +11 -11
  160. package/dist/components/toggle/Toggle.js +2 -2
  161. package/dist/components/toggle/Toggle.js.map +1 -1
  162. package/dist/components/toggle/Toggle.svelte +2 -2
  163. package/dist/components/togglegroup/ToggleGroup.js +1 -1
  164. package/dist/components/togglegroup/ToggleGroup.js.map +1 -1
  165. package/dist/components/togglegroup/ToggleGroup.svelte +2 -2
  166. package/dist/components/tooltip/Tooltip.js +1 -1
  167. package/dist/components/tooltip/Tooltip.svelte +2 -2
  168. package/dist/custom-element-forward-events.js +1 -1
  169. package/dist/custom-element-forward-events.js.map +1 -1
  170. package/dist/custom-element.js +3 -3
  171. package/dist/custom-element.js.map +1 -1
  172. package/dist/documentation/Svelte/usingPresets.mdx +2 -3
  173. package/dist/documentation/WebComponents/usingPresets.mdx +2 -3
  174. package/dist/each.js +1 -1
  175. package/dist/each.js.map +1 -1
  176. package/dist/if.js +1 -1
  177. package/dist/if.js.map +1 -1
  178. package/dist/input.js +1 -1
  179. package/dist/input.js.map +1 -1
  180. package/dist/legacy.js +1 -1
  181. package/dist/main.d.ts +7 -6
  182. package/dist/main.d.ts.map +1 -1
  183. package/dist/main.js +7 -6
  184. package/dist/slot.js +1 -1
  185. package/dist/slot.js.map +1 -1
  186. package/dist/svelte-component.js +2 -0
  187. package/dist/svelte-component.js.map +1 -0
  188. package/dist/this.js +1 -1
  189. package/dist/this.js.map +1 -1
  190. package/package.json +14 -17
  191. package/dist/components/tags/README.md +0 -9
  192. package/dist/components/tags/Tag.js +0 -4
  193. package/dist/components/tags/Tag.js.map +0 -1
  194. package/dist/components/tags/Tag.svelte +0 -218
  195. package/dist/components/tags/Tag.svelte.d.ts +0 -9
  196. package/dist/components/tags/Tag.svelte.d.ts.map +0 -1
  197. package/dist/components/tags/TagContextualised.js +0 -4
  198. package/dist/components/tags/TagContextualised.js.map +0 -1
  199. package/dist/components/tags/TagContextualised.svelte +0 -235
  200. package/dist/components/tags/TagContextualised.svelte.d.ts +0 -11
  201. package/dist/components/tags/TagContextualised.svelte.d.ts.map +0 -1
  202. package/dist/components/tags/TagInteractive.js +0 -4
  203. package/dist/components/tags/TagInteractive.js.map +0 -1
  204. package/dist/components/tags/TagInteractive.svelte +0 -223
  205. package/dist/components/tags/TagInteractive.svelte.d.ts +0 -10
  206. package/dist/components/tags/TagInteractive.svelte.d.ts.map +0 -1
  207. package/dist/components/tags/TagRemovable.js +0 -4
  208. package/dist/components/tags/TagRemovable.js.map +0 -1
  209. package/dist/components/tags/TagRemovable.svelte.d.ts +0 -11
  210. package/dist/components/tags/TagRemovable.svelte.d.ts.map +0 -1
  211. package/dist/components/tags/TagSelectable.js +0 -4
  212. package/dist/components/tags/TagSelectable.js.map +0 -1
  213. package/dist/components/tags/TagSelectable.svelte +0 -243
  214. package/dist/components/tags/TagSelectable.svelte.d.ts +0 -13
  215. package/dist/components/tags/TagSelectable.svelte.d.ts.map +0 -1
  216. package/dist/components/tags/Tags.stories.d.ts +0 -5
  217. package/dist/components/tags/Tags.stories.d.ts.map +0 -1
  218. package/dist/components/tags/Tags.stories.js +0 -41
  219. package/dist/components/tags/TagsContextualised.stories.d.ts +0 -5
  220. package/dist/components/tags/TagsContextualised.stories.d.ts.map +0 -1
  221. package/dist/components/tags/TagsContextualised.stories.js +0 -57
  222. package/dist/components/tags/TagsInteractive.stories.d.ts +0 -5
  223. package/dist/components/tags/TagsInteractive.stories.d.ts.map +0 -1
  224. package/dist/components/tags/TagsInteractive.stories.js +0 -61
  225. package/dist/components/tags/TagsRemovable.stories.d.ts +0 -5
  226. package/dist/components/tags/TagsRemovable.stories.d.ts.map +0 -1
  227. package/dist/components/tags/TagsRemovable.stories.js +0 -60
  228. package/dist/components/tags/TagsSelectable.stories.d.ts +0 -5
  229. package/dist/components/tags/TagsSelectable.stories.d.ts.map +0 -1
  230. package/dist/components/tags/TagsSelectable.stories.js +0 -76
@@ -121,7 +121,7 @@
121
121
  vertical-align: middle;
122
122
  text-align: center;
123
123
  border: 2px solid transparent;
124
- border-radius: var(--button-radius, 0.25rem);
124
+ border-radius: var(--button-border-radius-s, 0.25rem);
125
125
  transition: all ease 200ms;
126
126
  transition: box-shadow 200ms ease;
127
127
  align-items: center;
@@ -285,7 +285,7 @@
285
285
  cursor: not-allowed;
286
286
  }
287
287
  .mc-button--icon-button {
288
- border-radius: var(--radius-full, 100%);
288
+ border-radius: var(--border-radius-full, 100%);
289
289
  padding: 0;
290
290
  }
291
291
  .mc-button--loading .mc-button__loader {
@@ -430,9 +430,9 @@
430
430
  }
431
431
 
432
432
  .mc-status-notification {
433
- border-radius: var(--radius-m, 0.5rem);
434
- background: var(--status-notification-color-background-information, #e1f3f9);
435
- box-shadow: inset 0 0 0 var(--border-s, 1px) var(--status-notification-color-border-information, #3facd7);
433
+ border-radius: var(--border-radius-m, 0.5rem);
434
+ background: var(--status-notification-color-background-info, #e1f3f9);
435
+ box-shadow: inset 0 0 0 var(--border-width-s, 0.0625rem) var(--status-notification-color-border-info, #3facd7);
436
436
  display: flex;
437
437
  flex-flow: row wrap;
438
438
  align-items: flex-start;
@@ -444,7 +444,7 @@
444
444
  width: 2rem;
445
445
  height: 2rem;
446
446
  margin: 0.75rem;
447
- fill: var(--status-notification-color-icon-information, #0b96cc);
447
+ fill: var(--status-notification-color-icon-info, #0b96cc);
448
448
  }
449
449
  .mc-status-notification__content {
450
450
  flex: 1 1 0;
@@ -471,29 +471,29 @@
471
471
  margin-bottom: 0.5rem;
472
472
  }
473
473
  .mc-status-notification--information {
474
- background: var(--status-notification-color-background-information, #e1f3f9);
475
- box-shadow: inset 0 0 0 var(--border-s, 1px) var(--status-notification-color-border-information, #3facd7);
474
+ background: var(--status-notification-color-background-info, #e1f3f9);
475
+ box-shadow: inset 0 0 0 var(--border-width-s, 0.0625rem) var(--status-notification-color-border-info, #3facd7);
476
476
  }
477
477
  .mc-status-notification--information .mc-status-notification__icon {
478
- fill: var(--status-notification-color-icon-information, #0b96cc);
478
+ fill: var(--status-notification-color-icon-info, #0b96cc);
479
479
  }
480
480
  .mc-status-notification--success {
481
481
  background: var(--status-notification-color-background-success, #ebf5de);
482
- box-shadow: inset 0 0 0 var(--border-s, 1px) var(--status-notification-color-border-success, #78be20);
482
+ box-shadow: inset 0 0 0 var(--border-width-s, 0.0625rem) var(--status-notification-color-border-success, #78be20);
483
483
  }
484
484
  .mc-status-notification--success .mc-status-notification__icon {
485
485
  fill: var(--status-notification-color-icon-success, #3f9e10);
486
486
  }
487
487
  .mc-status-notification--warning {
488
488
  background: var(--status-notification-color-background-warning, #fdf1e8);
489
- box-shadow: inset 0 0 0 var(--border-s, 1px) var(--status-notification-color-border-warning, #ef934a);
489
+ box-shadow: inset 0 0 0 var(--border-width-s, 0.0625rem) var(--status-notification-color-border-warning, #ef934a);
490
490
  }
491
491
  .mc-status-notification--warning .mc-status-notification__icon {
492
492
  fill: var(--status-notification-color-icon-warning, #ea7315);
493
493
  }
494
494
  .mc-status-notification--error {
495
495
  background: var(--status-notification-color-background-error, #fdeaea);
496
- box-shadow: inset 0 0 0 var(--border-s, 1px) var(--status-notification-color-border-error, #ef5f5c);
496
+ box-shadow: inset 0 0 0 var(--border-width-s, 0.0625rem) var(--status-notification-color-border-error, #ef5f5c);
497
497
  }
498
498
  .mc-status-notification--error .mc-status-notification__icon {
499
499
  fill: var(--status-notification-color-icon-error, #ea302d);
@@ -0,0 +1,13 @@
1
+ # `m-stepper-compact`
2
+
3
+ A stepper is a navigation component that guides users through a sequence of steps in a structured process. It visually represents progress, completed steps, and upcoming steps, helping users understand their position within a workflow. Steppers are commonly used in multi-step forms, onboarding flows, checkout processes, and task completion sequences to improve clarity and reduce cognitive load.
4
+
5
+ ## Props
6
+
7
+ | Name | Description | Type | Default |
8
+ |------|-------------|------|---------|
9
+ | `value` | Current step of the stepper compact. | `number` | `$bindable(1)` |
10
+ | `maxsteps` | Maximum number of steps for the stepper compact. | `number` | `$bindable(4)` |
11
+ | `label*` | Label of the stepper compact. | `string` | |
12
+ | `description` | Description displayed below the label of the stepper compact. | `string` | |
13
+
@@ -0,0 +1,4 @@
1
+ import{c as E,p as M,a as q,b as p,f as w,m as l,C as m,d as s,s as b,t as f,i as x,j as A,k as n,r as a,h as y}from"../../custom-element.js";import{i as B}from"../../if.js";import{C as F}from"../circularprogressbar/CircularProgressbar.js";import"../../attributes.js";var G=w('<p class="mc-stepper-compact__description svelte-1o3m5eh"> </p>'),H=w('<div class="mc-stepper-compact svelte-1o3m5eh"><div class="mc-circular-progressbar mc-stepper-compact__progress svelte-1o3m5eh"><!></div> <div class="mc-stepper-compact__label-container"><p class="mc-stepper-compact__label svelte-1o3m5eh"> </p> <!></div></div>');const I={hash:"svelte-1o3m5eh",code:`/**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */.mc-stepper-compact.svelte-1o3m5eh {display:inline-flex;justify-content:start;align-items:center;}.mc-stepper-compact__progress.svelte-1o3m5eh {width:3rem;height:3rem;}.mc-stepper-compact__label.svelte-1o3m5eh, .mc-stepper-compact__description.svelte-1o3m5eh {padding-left:0.5rem;}.mc-stepper-compact__label.svelte-1o3m5eh {margin:0;font-weight:var(--font-weight-semi-bold, 600);font-size:var(--font-size-100, 0.875rem);color:var(--progressbar-color-text, #000000);line-height:var(--line-height-s, 1.3);}.mc-stepper-compact__description.svelte-1o3m5eh {margin:0.25rem 0 0;font-weight:var(--font-weight-regular, 400);font-size:var(--font-size-50, 0.75rem);color:var(--stepper-color-information, #666666);line-height:var(--line-height-s, 1.3);}.mc-stepper-compact__progress.svelte-1o3m5eh {width:3rem;height:3rem;}.mc-stepper-compact__progress.svelte-1o3m5eh .mc-circular-progressbar__content {display:block !important;visibility:visible;font-weight:600;font-size:0.875rem;}.mc-stepper-compact__progress.svelte-1o3m5eh .mc-circular-progressbar__number {display:block;visibility:visible;opacity:1;color:inherit;font-size:inherit;line-height:inherit;}.mc-stepper-compact__progress.svelte-1o3m5eh .mc-circular-progressbar__indicator {stroke-width:calc(4 / (48 / 100));stroke:var(--stepper-color-progress-bar-indicator, #117f03);fill:none;stroke-linecap:round;}`};function J(g,r){M(r,!0),q(g,I);let o=p(r,"value",15,1),c=p(r,"maxsteps",15,4),v=p(r,"label",7),i=p(r,"description",7);const k=m(()=>()=>{const e=o()??0,t=c()??1;return Math.round(e/t*100)}),z=m(()=>()=>`${o()} / ${c()}`);var C={get value(){return o()},set value(e=1){o(e),n()},get maxsteps(){return c()},set maxsteps(e=4){c(e),n()},get label(){return v()},set label(e){v(e),n()},get description(){return i()},set description(e){i(e),n()}},_=H(),h=s(_),j=s(h);{let e=m(()=>l(z)()),t=m(()=>l(k)());F(j,{"aria-label":"Progress bar",type:"content",size:"m",get contentvalue(){return l(e)},get value(){return l(t)},class:"mc-circular-progressbar mc-circular-progressbar--m mc-stepper-compact__indicator mc-stepper-compact__number"})}a(h);var u=b(h,2),d=s(u),P=s(d,!0);a(d);var S=b(d,2);{var V=e=>{var t=G(),D=s(t,!0);a(t),f(()=>y(D,i())),x(e,t)};B(S,e=>{i()&&e(V)})}return a(u),a(_),f(()=>y(P,v())),x(g,_),A(C)}customElements.define("m-stepper-compact",E(J,{value:{},maxsteps:{},label:{},description:{}},[],[],!0));
4
+ //# sourceMappingURL=StepperCompact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepperCompact.js","sources":["../../../src/components/steppercompact/StepperCompact.svelte"],"sourcesContent":["<svelte:options customElement={{ tag: 'm-stepper-compact' }} />\n\n<script lang=\"ts\">\n import CircularProgressbar from '../circularprogressbar/CircularProgressbar.svelte';\n /**\n * A stepper is a navigation component that guides users through a sequence of steps in a structured process. It visually represents progress, completed steps, and upcoming steps, helping users understand their position within a workflow. Steppers are commonly used in multi-step forms, onboarding flows, checkout processes, and task completion sequences to improve clarity and reduce cognitive load.\n */\n interface Props {\n /**\n * Current step of the stepper compact.\n */\n value?: number;\n /**\n * Maximum number of steps for the stepper compact.\n */\n maxsteps?: number;\n /**\n * Label of the stepper compact.\n */\n label: string;\n /**\n * Description displayed below the label of the stepper compact.\n */\n description?: string;\n }\n\n let { value = $bindable(1), maxsteps = $bindable(4), label, description }: Props = $props();\n\n const progressValue = $derived(() => {\n const v = value ?? 0;\n const m = maxsteps ?? 1;\n return Math.round((v / m) * 100);\n });\n\n const contentValue = $derived(() => {\n return `${value} / ${maxsteps}`;\n });\n</script>\n\n<div class=\"mc-stepper-compact\">\n <div class=\"mc-circular-progressbar mc-stepper-compact__progress\">\n <CircularProgressbar\n aria-label=\"Progress bar\"\n type=\"content\"\n size=\"m\"\n contentvalue={contentValue()}\n value={progressValue()}\n class=\"mc-circular-progressbar mc-circular-progressbar--m mc-stepper-compact__indicator mc-stepper-compact__number\"\n />\n </div>\n <div class=\"mc-stepper-compact__label-container\">\n <p class=\"mc-stepper-compact__label\">{label}</p>\n {#if description}\n <p class=\"mc-stepper-compact__description\">{description}</p>\n {/if}\n </div>\n</div>\n\n<style lang=\"scss\">\n @use '@mozaic-ds/styles/components/stepper-compact';\n @use '@mozaic-ds/styles/components/circular-progressbar/_t.circular-progressbar' as *;\n\n .mc-stepper-compact__progress {\n width: $spacing-600;\n height: $spacing-600;\n\n :global(.mc-circular-progressbar__content) {\n display: block !important;\n visibility: visible;\n font-weight: 600;\n font-size: 0.875rem;\n }\n\n :global(.mc-circular-progressbar__number) {\n display: block;\n visibility: visible;\n opacity: 1;\n color: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n\n :global(.mc-circular-progressbar__indicator) {\n @include calculate-border-width(4, 48, 100);\n stroke: $stepper-color-progress-bar-indicator;\n fill: none;\n stroke-linecap: round;\n }\n }\n</style>\n"],"names":["value","maxsteps","label","$.prop","$$props","description","progressValue","$.derived","v","m","contentValue","$$render","consequent"],"mappings":";;g2CAAA,gBA0BQ,IAAAA,iBAAkB,CAAC,EAAGC,oBAAqB,CAAC,EAAGC,EAAKC,EAAAC,EAAA,QAAA,CAAA,EAAEC,EAAWF,EAAAC,EAAA,cAAA,CAAA,EAEjE,MAAAE,EAAaC,EAAA,IAAA,IAAkB,OAC7BC,EAAIR,EAAK,GAAI,EACbS,EAAIR,EAAQ,GAAI,EACf,OAAA,KAAK,MAAOO,EAAIC,EAAK,GAAG,CACjC,CAAC,EAEKC,EAAYH,EAAA,IAAA,IACN,GAAAP,EAAK,OAAMC,EAAQ,CAAA,EAC9B,6CAVuB,EAAC,qDAAwB,EAAC,yJAmBhCS,CAAY,EAAA,CAAA,YACnBJ,CAAa,EAAA,CAAA,6UAOwBD,EAAW,CAAA,CAAA,kBADpDA,EAAW,GAAAM,EAAAC,CAAA,+BADsBV,EAAK,CAAA,CAAA,aAd/C"}
@@ -0,0 +1,119 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { render } from '@testing-library/svelte';
3
+ import StepperCompact from './StepperCompact.svelte';
4
+ describe('StepperCompact component', () => {
5
+ it('renders with a label by default', () => {
6
+ const { container } = render(StepperCompact, { props: { label: 'My label' } });
7
+ expect(container.querySelector('.mc-stepper-compact')).toBeTruthy();
8
+ expect(container.querySelector('.mc-stepper-compact__label')?.textContent).toBe('My label');
9
+ expect(container.querySelector('.mc-stepper-compact__description')).toBeFalsy();
10
+ });
11
+ it('calculates progress value correctly', () => {
12
+ const { container } = render(StepperCompact, {
13
+ props: {
14
+ label: 'Étape 2',
15
+ value: 2,
16
+ maxsteps: 5,
17
+ },
18
+ });
19
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
20
+ });
21
+ it('displays current step and max steps in progress bar', () => {
22
+ const { container } = render(StepperCompact, {
23
+ props: {
24
+ label: 'Step 3',
25
+ value: 3,
26
+ maxsteps: 7,
27
+ },
28
+ });
29
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
30
+ });
31
+ it('renders with custom size', () => {
32
+ const { container } = render(StepperCompact, {
33
+ props: {
34
+ label: 'Taille m',
35
+ size: 'm',
36
+ },
37
+ });
38
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
39
+ });
40
+ it('handles edge cases for progress calculation with value 0', () => {
41
+ const { container } = render(StepperCompact, {
42
+ props: {
43
+ label: 'Zero',
44
+ value: 0,
45
+ maxsteps: 1,
46
+ },
47
+ });
48
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
49
+ });
50
+ it('handles maximum progress correctly', () => {
51
+ const { container } = render(StepperCompact, {
52
+ props: {
53
+ label: 'Maximum',
54
+ value: 5,
55
+ maxsteps: 5,
56
+ },
57
+ });
58
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
59
+ });
60
+ it('shows description when additionalInfo is true and description is provided', () => {
61
+ const { container } = render(StepperCompact, {
62
+ props: {
63
+ label: 'Test step',
64
+ description: 'Description visible',
65
+ additionalInfo: true,
66
+ },
67
+ });
68
+ expect(container.querySelector('.mc-stepper-compact__description')?.textContent).toBe('Description visible');
69
+ });
70
+ it('hides description when additionalInfo is true and description is empty', () => {
71
+ const { container } = render(StepperCompact, {
72
+ props: {
73
+ label: 'Test step',
74
+ description: '',
75
+ additionalInfo: true,
76
+ },
77
+ });
78
+ expect(container.querySelector('.mc-stepper-compact__description')).toBeFalsy();
79
+ });
80
+ it('renders with custom label', () => {
81
+ const customLabel = 'Step 2 of 5';
82
+ const { container } = render(StepperCompact, {
83
+ props: {
84
+ label: customLabel,
85
+ },
86
+ });
87
+ expect(container.querySelector('.mc-stepper-compact__label')?.textContent).toBe(customLabel);
88
+ });
89
+ it('handles null/undefined values gracefully', () => {
90
+ const { container } = render(StepperCompact, {
91
+ props: {
92
+ label: 'Undefined steps',
93
+ value: undefined,
94
+ maxsteps: undefined,
95
+ },
96
+ });
97
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
98
+ });
99
+ it('has proper ARIA label on progress bar', () => {
100
+ const { container } = render(StepperCompact, {
101
+ props: {
102
+ label: 'ARIA',
103
+ },
104
+ });
105
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
106
+ });
107
+ it('applies correct CSS classes', () => {
108
+ const { container } = render(StepperCompact, {
109
+ props: {
110
+ label: 'Classes',
111
+ },
112
+ });
113
+ expect(container.querySelector('.mc-stepper-compact')).toBeTruthy();
114
+ expect(container.querySelector('.mc-circular-progressbar')).toBeTruthy();
115
+ expect(container.querySelector('.mc-stepper-compact__progress')).toBeTruthy();
116
+ expect(container.querySelector('.mc-stepper-compact__label-container')).toBeTruthy();
117
+ expect(container.querySelector('.mc-stepper-compact__label')).toBeTruthy();
118
+ });
119
+ });
@@ -0,0 +1,6 @@
1
+ import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ declare const meta: Meta;
3
+ export default meta;
4
+ type Story = StoryObj;
5
+ export declare const Default: Story;
6
+ //# sourceMappingURL=StepperCompact.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepperCompact.stories.d.ts","sourceRoot":"","sources":["../../../src/components/steppercompact/StepperCompact.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAIrE,QAAA,MAAM,IAAI,EAAE,IAwBX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { html } from 'lit';
2
+ import { ifDefined } from 'lit-html/directives/if-defined.js';
3
+ const meta = {
4
+ title: 'Indicators/Stepper Compact',
5
+ component: 'm-stepper-compact',
6
+ argTypes: {
7
+ value: {
8
+ control: { type: 'number', min: 1, max: 10 },
9
+ },
10
+ maxsteps: {
11
+ control: { type: 'number', min: 2, max: 10 },
12
+ },
13
+ },
14
+ args: {
15
+ value: 1,
16
+ maxsteps: 4,
17
+ label: 'Current Step',
18
+ description: 'Next: Step label',
19
+ },
20
+ render: (args) => html `<m-stepper-compact
21
+ value="${ifDefined(args.value)}"
22
+ maxsteps="${ifDefined(args.maxsteps)}"
23
+ label="${ifDefined(args.label)}"
24
+ description="${ifDefined(args.description)}"
25
+ ></m-stepper-compact>`,
26
+ };
27
+ export default meta;
28
+ export const Default = {};
@@ -0,0 +1,123 @@
1
+ <svelte:options customElement={{ tag: 'm-stepper-compact' }} />
2
+
3
+ <script lang="ts">
4
+ import CircularProgressbar from '../circularprogressbar/CircularProgressbar.svelte';
5
+ /**
6
+ * A stepper is a navigation component that guides users through a sequence of steps in a structured process. It visually represents progress, completed steps, and upcoming steps, helping users understand their position within a workflow. Steppers are commonly used in multi-step forms, onboarding flows, checkout processes, and task completion sequences to improve clarity and reduce cognitive load.
7
+ */
8
+ interface Props {
9
+ /**
10
+ * Current step of the stepper compact.
11
+ */
12
+ value?: number;
13
+ /**
14
+ * Maximum number of steps for the stepper compact.
15
+ */
16
+ maxsteps?: number;
17
+ /**
18
+ * Label of the stepper compact.
19
+ */
20
+ label: string;
21
+ /**
22
+ * Description displayed below the label of the stepper compact.
23
+ */
24
+ description?: string;
25
+ }
26
+
27
+ let { value = $bindable(1), maxsteps = $bindable(4), label, description }: Props = $props();
28
+
29
+ const progressValue = $derived(() => {
30
+ const v = value ?? 0;
31
+ const m = maxsteps ?? 1;
32
+ return Math.round((v / m) * 100);
33
+ });
34
+
35
+ const contentValue = $derived(() => {
36
+ return `${value} / ${maxsteps}`;
37
+ });
38
+ </script>
39
+
40
+ <div class="mc-stepper-compact">
41
+ <div class="mc-circular-progressbar mc-stepper-compact__progress">
42
+ <CircularProgressbar
43
+ aria-label="Progress bar"
44
+ type="content"
45
+ size="m"
46
+ contentvalue={contentValue()}
47
+ value={progressValue()}
48
+ class="mc-circular-progressbar mc-circular-progressbar--m mc-stepper-compact__indicator mc-stepper-compact__number"
49
+ />
50
+ </div>
51
+ <div class="mc-stepper-compact__label-container">
52
+ <p class="mc-stepper-compact__label">{label}</p>
53
+ {#if description}
54
+ <p class="mc-stepper-compact__description">{description}</p>
55
+ {/if}
56
+ </div>
57
+ </div>
58
+
59
+ <style>/**
60
+ * Do not edit directly, this file was auto-generated.
61
+ */
62
+ .mc-stepper-compact {
63
+ display: inline-flex;
64
+ justify-content: start;
65
+ align-items: center;
66
+ }
67
+ .mc-stepper-compact__progress {
68
+ width: 3rem;
69
+ height: 3rem;
70
+ }
71
+ .mc-stepper-compact__indicator {
72
+ stroke-width: calc(4 / (48 / 100));
73
+ stroke: var(--stepper-color-progress-bar-indicator, #117f03);
74
+ fill: none;
75
+ stroke-linecap: round;
76
+ }
77
+ .mc-stepper-compact__number {
78
+ font-size: var(--font-size-100, 0.875rem);
79
+ font-weight: var(--font-weight-semi-bold, 600);
80
+ color: var(--progressbar-color-text, #000000);
81
+ }
82
+ .mc-stepper-compact__label, .mc-stepper-compact__description {
83
+ padding-left: 0.5rem;
84
+ }
85
+ .mc-stepper-compact__label {
86
+ margin: 0;
87
+ font-weight: var(--font-weight-semi-bold, 600);
88
+ font-size: var(--font-size-100, 0.875rem);
89
+ color: var(--progressbar-color-text, #000000);
90
+ line-height: var(--line-height-s, 1.3);
91
+ }
92
+ .mc-stepper-compact__description {
93
+ margin: 0.25rem 0 0;
94
+ font-weight: var(--font-weight-regular, 400);
95
+ font-size: var(--font-size-50, 0.75rem);
96
+ color: var(--stepper-color-information, #666666);
97
+ line-height: var(--line-height-s, 1.3);
98
+ }
99
+
100
+ .mc-stepper-compact__progress {
101
+ width: 3rem;
102
+ height: 3rem;
103
+ }
104
+ .mc-stepper-compact__progress :global(.mc-circular-progressbar__content) {
105
+ display: block !important;
106
+ visibility: visible;
107
+ font-weight: 600;
108
+ font-size: 0.875rem;
109
+ }
110
+ .mc-stepper-compact__progress :global(.mc-circular-progressbar__number) {
111
+ display: block;
112
+ visibility: visible;
113
+ opacity: 1;
114
+ color: inherit;
115
+ font-size: inherit;
116
+ line-height: inherit;
117
+ }
118
+ .mc-stepper-compact__progress :global(.mc-circular-progressbar__indicator) {
119
+ stroke-width: calc(4 / (48 / 100));
120
+ stroke: var(--stepper-color-progress-bar-indicator, #117f03);
121
+ fill: none;
122
+ stroke-linecap: round;
123
+ }</style>
@@ -0,0 +1,25 @@
1
+ /**
2
+ * A stepper is a navigation component that guides users through a sequence of steps in a structured process. It visually represents progress, completed steps, and upcoming steps, helping users understand their position within a workflow. Steppers are commonly used in multi-step forms, onboarding flows, checkout processes, and task completion sequences to improve clarity and reduce cognitive load.
3
+ */
4
+ interface Props {
5
+ /**
6
+ * Current step of the stepper compact.
7
+ */
8
+ value?: number;
9
+ /**
10
+ * Maximum number of steps for the stepper compact.
11
+ */
12
+ maxsteps?: number;
13
+ /**
14
+ * Label of the stepper compact.
15
+ */
16
+ label: string;
17
+ /**
18
+ * Description displayed below the label of the stepper compact.
19
+ */
20
+ description?: string;
21
+ }
22
+ declare const StepperCompact: import("svelte").Component<Props, {}, "value" | "maxsteps">;
23
+ type StepperCompact = ReturnType<typeof StepperCompact>;
24
+ export default StepperCompact;
25
+ //# sourceMappingURL=StepperCompact.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepperCompact.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/steppercompact/StepperCompact.svelte.ts"],"names":[],"mappings":"AAKE;;GAEG;AACH,UAAU,KAAK;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoCH,QAAA,MAAM,cAAc,6DAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -1,4 +1,4 @@
1
- import{c as E,p as S,a as T,b as f,f as h,d as o,i as u,j as q,k as i,z as A,r,s as y}from"../../custom-element.js";import{i as B}from"../../if.js";import{s as b}from"../../slot.js";import{b as x}from"../../attributes.js";var C=h('<button><span class="mc-tabs__icon svelte-g14hff"><!></span> <span class="mc-tabs__label svelte-g14hff"><!></span></button>'),F=h('<a><span class="mc-tabs__icon svelte-g14hff"><!></span> <span class="mc-tabs__label svelte-g14hff"><!></span></a>'),G=h('<li class="mc-tabs__item" role="presentation"><!></li>');const H={hash:"svelte-g14hff",code:`/**
1
+ import{c as E,p as S,a as T,b as d,f as h,d as o,i as u,j as q,k as i,D as A,r,s as y}from"../../custom-element.js";import{i as B}from"../../if.js";import{s as f}from"../../slot.js";import{b as x}from"../../attributes.js";var C=h('<button><span class="mc-tabs__icon svelte-g14hff"><!></span> <span class="mc-tabs__label svelte-g14hff"><!></span></button>'),F=h('<a><span class="mc-tabs__icon svelte-g14hff"><!></span> <span class="mc-tabs__label svelte-g14hff"><!></span></a>'),G=h('<li class="mc-tabs__item" role="presentation"><!></li>');const H={hash:"svelte-g14hff",code:`/**
2
2
  * Do not edit directly, this file was auto-generated.
3
- */.mc-tabs.svelte-g14hff {background-color:var(--tabs-color-background-default, #ffffff);position:relative;width:100%;height:3.5rem;}.mc-tabs__list.svelte-g14hff {list-style-type:none;padding-inline-start:0;margin-block:0;display:flex;gap:0.5rem;padding:0.5rem 0.25rem;}.mc-tabs__tab.svelte-g14hff {font-size:var(--font-size-100, 0.875rem);font-weight:var(--font-weight-semi-bold, 600);align-items:center;background:none;border:none;border-radius:var(--radius-s, 0.25rem);color:var(--tabs-color-text-default, #404040);cursor:pointer;display:flex;gap:0.25rem;height:2.5rem;justify-content:center;outline:none;padding-left:0.75rem;padding-right:0.75rem;position:relative;text-decoration:none;}.mc-tabs__tab.svelte-g14hff:hover {background-color:var(--tabs-color-background-hover, rgba(0, 0, 0, 0.05));}.mc-tabs__tab.svelte-g14hff:focus-visible {box-shadow:0 0 0 0.125rem var(--focus-color-mid, var(--focus-color-outline-mid, #ffffff)), 0 0 0 0.25rem var(--focus-color-outer, var(--focus-color-outline-outer, #000000));outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-tabs__tab--selected.svelte-g14hff {color:var(--tabs-color-text-selected, #006902);background-color:var(--tabs-color-background-selected, #ebf5de);}.mc-tabs__tab--selected.svelte-g14hff:hover {background-color:var(--tabs-color-background-selected-hover, #c5e39e);}.mc-tabs__tab--disabled.svelte-g14hff {color:var(--tabs-color-text-disabled, #b3b3b3);cursor:not-allowed;}.mc-tabs__tab--disabled.svelte-g14hff:hover {background:none;}.mc-tabs__label.svelte-g14hff {pointer-events:none;}.mc-tabs__icon.svelte-g14hff {fill:currentcolor;height:1.5rem;width:1.5rem;}.mc-tabs__icon.svelte-g14hff:empty {display:none;}`};function I(p,t){S(t,!0),T(p,H);let d=f(t,"tag",7,"button"),l=f(t,"selected",7,!1),v=f(t,"href",7),n=f(t,"disabled",7),k=A(t,["$$slots","$$events","$$legacy","$$host","tag","selected","href","disabled"]);var w={get tag(){return d()},set tag(e="button"){d(e),i()},get selected(){return l()},set selected(e=!1){l(e),i()},get href(){return v()},set href(e){v(e),i()},get disabled(){return n()},set disabled(e){n(e),i()}},m=G(),z=o(m);{var j=e=>{var a=C();x(a,()=>({type:"button",role:"tab","aria-selected":l(),class:["mc-tabs__tab",l()&&"mc-tabs__tab--selected",n()&&"mc-tabs__tab--disabled"],...k}),void 0,void 0,"svelte-g14hff");var s=o(a),_=o(s);b(_,t,"icon",{}),r(s);var c=y(s,2),g=o(c);b(g,t,"default",{}),r(c),r(a),u(e,a)},D=e=>{var a=F();x(a,()=>({href:v(),role:"tab","aria-selected":l(),class:["mc-tabs__tab",l()&&"mc-tabs__tab--selected",n()&&"mc-tabs__tab--disabled"],...k}),void 0,void 0,"svelte-g14hff");var s=o(a),_=o(s);b(_,t,"icon",{}),r(s);var c=y(s,2),g=o(c);b(g,t,"default",{}),r(c),r(a),u(e,a)};B(z,e=>{d()==="button"?e(j):e(D,!1)})}return r(m),u(p,m),q(w)}customElements.define("m-tab",E(I,{tag:{},selected:{},href:{},disabled:{}},["icon","default"],[],!0));
3
+ */.mc-tabs.svelte-g14hff {background-color:var(--tabs-color-background-default, #ffffff);position:relative;width:100%;height:3.5rem;}.mc-tabs__list.svelte-g14hff {list-style-type:none;padding-inline-start:0;margin-block:0;display:flex;gap:0.5rem;padding:0.5rem 0.25rem;}.mc-tabs__tab.svelte-g14hff {font-size:var(--font-size-100, 0.875rem);font-weight:var(--font-weight-semi-bold, 600);align-items:center;background:none;border:none;border-radius:var(--border-radius-s, 0.25rem);color:var(--tabs-color-text-default, #404040);cursor:pointer;display:flex;gap:0.25rem;height:2.5rem;justify-content:center;outline:none;padding-left:0.75rem;padding-right:0.75rem;position:relative;text-decoration:none;}.mc-tabs__tab.svelte-g14hff:hover {background-color:var(--tabs-color-background-hover, rgba(0, 0, 0, 0.05));}.mc-tabs__tab.svelte-g14hff:focus-visible {box-shadow:0 0 0 0.125rem var(--focus-color-mid, var(--focus-color-outline-mid, #ffffff)), 0 0 0 0.25rem var(--focus-color-outer, var(--focus-color-outline-outer, #000000));outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-tabs__tab--selected.svelte-g14hff {color:var(--tabs-color-text-selected, #006902);background-color:var(--tabs-color-background-selected, #ebf5de);}.mc-tabs__tab--selected.svelte-g14hff:hover {background-color:var(--tabs-color-background-selected-hover, #c5e39e);}.mc-tabs__tab--disabled.svelte-g14hff {color:var(--tabs-color-text-disabled, #b3b3b3);cursor:not-allowed;}.mc-tabs__tab--disabled.svelte-g14hff:hover {background:none;}.mc-tabs__label.svelte-g14hff {pointer-events:none;}.mc-tabs__icon.svelte-g14hff {fill:currentcolor;height:1.5rem;width:1.5rem;}.mc-tabs__icon.svelte-g14hff:empty {display:none;}`};function I(p,t){S(t,!0),T(p,H);let b=d(t,"tag",7,"button"),l=d(t,"selected",7,!1),v=d(t,"href",7),n=d(t,"disabled",7),k=A(t,["$$slots","$$events","$$legacy","$$host","tag","selected","href","disabled"]);var w={get tag(){return b()},set tag(e="button"){b(e),i()},get selected(){return l()},set selected(e=!1){l(e),i()},get href(){return v()},set href(e){v(e),i()},get disabled(){return n()},set disabled(e){n(e),i()}},m=G(),j=o(m);{var z=e=>{var a=C();x(a,()=>({type:"button",role:"tab","aria-selected":l(),class:["mc-tabs__tab",l()&&"mc-tabs__tab--selected",n()&&"mc-tabs__tab--disabled"],...k}),void 0,void 0,void 0,"svelte-g14hff");var s=o(a),_=o(s);f(_,t,"icon",{}),r(s);var c=y(s,2),g=o(c);f(g,t,"default",{}),r(c),r(a),u(e,a)},D=e=>{var a=F();x(a,()=>({href:v(),role:"tab","aria-selected":l(),class:["mc-tabs__tab",l()&&"mc-tabs__tab--selected",n()&&"mc-tabs__tab--disabled"],...k}),void 0,void 0,void 0,"svelte-g14hff");var s=o(a),_=o(s);f(_,t,"icon",{}),r(s);var c=y(s,2),g=o(c);f(g,t,"default",{}),r(c),r(a),u(e,a)};B(j,e=>{b()==="button"?e(z):e(D,!1)})}return r(m),u(p,m),q(w)}customElements.define("m-tab",E(I,{tag:{},selected:{},href:{},disabled:{}},["icon","default"],[],!0));
4
4
  //# sourceMappingURL=Tab.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.js","sources":["../../../src/components/tab/Tab.svelte"],"sourcesContent":["<svelte:options customElement={{ tag: 'm-tab' }} />\n\n<script lang=\"ts\">\n /**\n * Tabs are a navigation component that allows users to switch between different sections within the same context. They help organize content efficiently by displaying only one section at a time, reducing clutter and improving accessibility. Tabs can include icons, labels, and notification badges to provide additional context. They are commonly used in dashboards, product management, and settings interfaces.\n *\n * @slot default - The content displayed in the tab.\n * @slot icon - Use this slot to insert an icon for the tab.\n */\n interface Props {\n [key: string]: any;\n /**\n * The HTML tag used for the tab.\n */\n tag?: 'a' | 'button';\n /**\n * If `true`, the tab will be selected.\n */\n selected?: boolean;\n /**\n * URL for the tab link.\n */\n href?: string;\n /**\n * If `true`, the tab will be disabled.\n */\n disabled?: boolean;\n }\n\n let { tag = 'button', selected = false, href, disabled, ...attrs }: Props = $props();\n</script>\n\n<li class=\"mc-tabs__item\" role=\"presentation\">\n {#if tag === 'button'}\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n class={[\n 'mc-tabs__tab',\n selected && 'mc-tabs__tab--selected',\n disabled && 'mc-tabs__tab--disabled',\n ]}\n {...attrs}\n >\n <span class=\"mc-tabs__icon\">\n <slot name=\"icon\" />\n </span>\n\n <span class=\"mc-tabs__label\">\n <slot />\n </span>\n </button>\n {:else}\n <a\n {href}\n role=\"tab\"\n aria-selected={selected}\n class={[\n 'mc-tabs__tab',\n selected && 'mc-tabs__tab--selected',\n disabled && 'mc-tabs__tab--disabled',\n ]}\n {...attrs}\n >\n <span class=\"mc-tabs__icon\">\n <slot name=\"icon\" />\n </span>\n <span class=\"mc-tabs__label\">\n <slot />\n </span>\n </a>\n {/if}\n</li>\n\n<style lang=\"scss\">\n @use '@mozaic-ds/styles/components/tabs';\n\n .mc-tabs__icon:empty {\n display: none;\n }\n</style>\n"],"names":["tag","selected","href","$.prop","$$props","disabled","attrs","$.rest_props","$$render","consequent","alternate"],"mappings":";;4qDAAA,gBA6BQ,IAAAA,cAAM,QAAQ,EAAEC,mBAAW,EAAK,EAAEC,EAAIC,EAAAC,EAAA,OAAA,CAAA,EAAEC,EAAQF,EAAAC,EAAA,WAAA,CAAA,EAAKE,EAAKC,EAAAH,EAAA,sHAApD,SAAQ,qDAAa,GAAK,mMAQnBH,EAAQ,SAErB,eACAA,EAAQ,GAAI,yBACZI,KAAY,6BAEVC,mMAcWL,EAAQ,SAErB,eACAA,EAAQ,GAAI,yBACZI,KAAY,6BAEVC,6IA9BHN,EAAG,IAAK,SAAQQ,EAAAC,CAAA,EAAAD,EAAAE,EAAA,EAAA,2BAHvB"}
1
+ {"version":3,"file":"Tab.js","sources":["../../../src/components/tab/Tab.svelte"],"sourcesContent":["<svelte:options customElement={{ tag: 'm-tab' }} />\n\n<script lang=\"ts\">\n /**\n * Tabs are a navigation component that allows users to switch between different sections within the same context. They help organize content efficiently by displaying only one section at a time, reducing clutter and improving accessibility. Tabs can include icons, labels, and notification badges to provide additional context. They are commonly used in dashboards, product management, and settings interfaces.\n *\n * @slot default - The content displayed in the tab.\n * @slot icon - Use this slot to insert an icon for the tab.\n */\n interface Props {\n [key: string]: any;\n /**\n * The HTML tag used for the tab.\n */\n tag?: 'a' | 'button';\n /**\n * If `true`, the tab will be selected.\n */\n selected?: boolean;\n /**\n * URL for the tab link.\n */\n href?: string;\n /**\n * If `true`, the tab will be disabled.\n */\n disabled?: boolean;\n }\n\n let { tag = 'button', selected = false, href, disabled, ...attrs }: Props = $props();\n</script>\n\n<li class=\"mc-tabs__item\" role=\"presentation\">\n {#if tag === 'button'}\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n class={[\n 'mc-tabs__tab',\n selected && 'mc-tabs__tab--selected',\n disabled && 'mc-tabs__tab--disabled',\n ]}\n {...attrs}\n >\n <span class=\"mc-tabs__icon\">\n <slot name=\"icon\" />\n </span>\n\n <span class=\"mc-tabs__label\">\n <slot />\n </span>\n </button>\n {:else}\n <a\n {href}\n role=\"tab\"\n aria-selected={selected}\n class={[\n 'mc-tabs__tab',\n selected && 'mc-tabs__tab--selected',\n disabled && 'mc-tabs__tab--disabled',\n ]}\n {...attrs}\n >\n <span class=\"mc-tabs__icon\">\n <slot name=\"icon\" />\n </span>\n <span class=\"mc-tabs__label\">\n <slot />\n </span>\n </a>\n {/if}\n</li>\n\n<style lang=\"scss\">\n @use '@mozaic-ds/styles/components/tabs';\n\n .mc-tabs__icon:empty {\n display: none;\n }\n</style>\n"],"names":["tag","selected","href","$.prop","$$props","disabled","attrs","$.rest_props","$$render","consequent","alternate"],"mappings":";;mrDAAA,gBA6BQ,IAAAA,cAAM,QAAQ,EAAEC,mBAAW,EAAK,EAAEC,EAAIC,EAAAC,EAAA,OAAA,CAAA,EAAEC,EAAQF,EAAAC,EAAA,WAAA,CAAA,EAAKE,EAAKC,EAAAH,EAAA,sHAApD,SAAQ,qDAAa,GAAK,mMAQnBH,EAAQ,SAErB,eACAA,EAAQ,GAAI,yBACZI,KAAY,6BAEVC,0MAcWL,EAAQ,SAErB,eACAA,EAAQ,GAAI,yBACZI,KAAY,6BAEVC,oJA9BHN,EAAG,IAAK,SAAQQ,EAAAC,CAAA,EAAAD,EAAAE,EAAA,EAAA,2BAHvB"}
@@ -96,7 +96,7 @@
96
96
  align-items: center;
97
97
  background: none;
98
98
  border: none;
99
- border-radius: var(--radius-s, 0.25rem);
99
+ border-radius: var(--border-radius-s, 0.25rem);
100
100
  color: var(--tabs-color-text-default, #404040);
101
101
  cursor: pointer;
102
102
  display: flex;
@@ -56,7 +56,7 @@
56
56
  align-items: center;
57
57
  background: none;
58
58
  border: none;
59
- border-radius: var(--radius-s, 0.25rem);
59
+ border-radius: var(--border-radius-s, 0.25rem);
60
60
  color: var(--tabs-color-text-default, #404040);
61
61
  cursor: pointer;
62
62
  display: flex;
@@ -0,0 +1,30 @@
1
+ # `m-tag`
2
+
3
+ A Tag is a UI element used to filter data, categorize, select or deselect an option. It can appear standalone, in a group, or embedded within other components. Depending on its use, a tag can be interactive (clickable, removable, selectable) or static (serving as a visual indicator).
4
+
5
+ ## Props
6
+
7
+ | Name | Description | Type | Default |
8
+ |------|-------------|------|---------|
9
+ | `type` | Defines the behavior and layout of the tag. | `'informative'` `'interactive'` `'contextualised'` `'removable'` `'selectable'` | `informative` |
10
+ | `size` | Determines the size of the tag. | `'s'` `'m'` `'l'` | `m` |
11
+ | `id` | A unique identifier for the tag, used to associate the label with the form element. **Required** when type is 'selectable' or 'removable'. | `string` | |
12
+ | `name` | The name attribute for the tag element, typically used for form submission. (only relevant for type: 'selectable'). | `string` | |
13
+ | `label*` | The text label displayed next to the tag. | `string` | |
14
+ | `checked` | The tag's checked state. Used only for type: 'selectable'. | `boolean` | `$bindable()` |
15
+ | `disabled` | If `true`, disables the tag, making it non-interactive. Applicable to selectable, interactive, and contextualised types. | `boolean` | |
16
+ | `contextualisednumber` | A number displayed in the badge when the tag is contextualised. | `number` | `99` |
17
+ | `removablelabel` | Accessible label text for the remove button in removable tags. | `string` | |
18
+
19
+ ## Slots
20
+
21
+ | Name | Description |
22
+ |------|-------------|
23
+ | `icon` | Use this slot to insert an icon in the tag. |
24
+
25
+ ## Events
26
+
27
+ | Name | Description | Type |
28
+ |------|------|-------------|
29
+ | `remove-tag` | Emits when the remove button of a tag is clicked, passing the tag's ID. | `CustomEvent<string>` |
30
+
@@ -0,0 +1,4 @@
1
+ import{c as Z,p as $,b as r,z as ce,t as L,i as v,j as ee,k as l,e as P,g as F,v as me,a as fe,A as j,B as A,f as R,d,s as N,r as i,h as M,m as ge,C as ue}from"../../custom-element.js";import{i as B}from"../../if.js";import{s as Y}from"../../slot.js";import{s as D,a as be,r as he}from"../../attributes.js";import{a as pe}from"../../input.js";import{b as _e}from"../../this.js";import{C as we}from"../../CrossCircleFilled24.js";import"../../legacy.js";import{N as xe}from"../numberbadge/NumberBadge.js";var ke=ce('<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20px" height="20px"><path fill-rule="evenodd" d="M10 1.75a8.25 8.25 0 1 0 0 16.5 8.25 8.25 0 0 0 0-16.5M6.97 6.97a.75.75 0 0 1 1.06 0L10 8.94l1.97-1.97a.75.75 0 1 1 1.06 1.06L11.06 10l1.97 1.97a.75.75 0 1 1-1.06 1.06L10 11.06l-1.97 1.97a.75.75 0 0 1-1.06-1.06L8.94 10 6.97 8.03a.75.75 0 0 1 0-1.06"></path></svg>');function te(S,t){$(t,!1);let a=r(t,"id",12,void 0),o=r(t,"style",12,void 0),g=r(t,"className",12,void 0),k=r(t,"fill",12,void 0),c=r(t,"size",12,"1.25rem");var E={get id(){return a()},set id(s){a(s),l()},get style(){return o()},set style(s){o(s),l()},get className(){return g()},set className(s){g(s),l()},get fill(){return k()},set fill(s){k(s),l()},get size(){return c()},set size(s){c(s),l()}},n=ke();return L(()=>{D(n,"id",a()),be(n,o()),P(n,0,F(g())),D(n,"fill",k())}),v(S,n),ee(E)}customElements.define("cross-circle-filled-20",Z(te,{id:{},style:{},className:{},fill:{},size:{}},[],[],!1));var Ce=R('<label><!> <input type="checkbox" class="mc-tag__input svelte-1f9dt2v"/> <span class="mc-tag__label svelte-1f9dt2v"> </span></label>'),Ee=R('<button type="button"><!> <span class="mc-tag__label svelte-1f9dt2v"> </span></button>'),ze=R('<button type="button"><!> <span class="mc-tag__label svelte-1f9dt2v"> </span></button>'),ye=R('<span><span class="mc-tag__label svelte-1f9dt2v"> </span> <button class="mc-tag-removable__remove svelte-1f9dt2v" type="button"><span class="mc-tag-removable__icon svelte-1f9dt2v"><!></span> <span class="mc-tag-removable__text svelte-1f9dt2v"> </span></button></span>'),Ne=R('<span><span class="mc-tag__label svelte-1f9dt2v"> </span></span>');const Me={hash:"svelte-1f9dt2v",code:`/**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */.mc-tag.svelte-1f9dt2v {font-size:var(--font-size-100, 0.875rem);border-radius:2rem;height:2rem;padding-inline:0.75rem;box-sizing:border-box;display:inline-flex;align-items:center;background:var(--tag-color-background-standard, #ffffff);color:var(--tag-color-text-standard, #242938);border:var(--border-width-s, 0.0625rem) solid var(--tag-color-border, #999999);}.mc-tag--s.svelte-1f9dt2v {font-size:var(--font-size-50, 0.75rem);border-radius:1.5rem;height:1.5rem;padding-inline:0.5rem;}.mc-tag--l.svelte-1f9dt2v {font-size:var(--font-size-100, 0.875rem);border-radius:2.5rem;height:2.5rem;padding-inline:1rem;}.mc-tag.is-disabled.svelte-1f9dt2v, .mc-tag.svelte-1f9dt2v:disabled {cursor:not-allowed;background:var(--color-background-disabled, #d9d9d9);color:var(--color-text-disabled, #737373);border-color:var(--color-background-disabled, #d9d9d9);box-shadow:none;}.mc-tag-interactive.svelte-1f9dt2v {text-decoration:none;outline:none;cursor:pointer;font-weight:var(--font-weight-semi-bold, 600);}.mc-tag-interactive.svelte-1f9dt2v:not(:disabled):hover {box-shadow:inset 0 0 0 var(--border-width-s, 0.0625rem) var(--tag-color-border, #999999);}.mc-tag-interactive.svelte-1f9dt2v:focus-visible {box-shadow:0 0 0 0.125rem var(--focus-color-mid, var(--focus-color-outline-mid, #ffffff)), 0 0 0 0.25rem var(--focus-color-outer, var(--focus-color-outline-outer, #000000));outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-tag-contextualised.svelte-1f9dt2v {gap:0.25rem;text-decoration:none;outline:none;color:var(--tag-color-text-inverse, #ffffff);border:none;background:var(--tag-color-background-selected, #117f03);cursor:pointer;font-weight:var(--font-weight-semi-bold, 600);padding-inline-end:1rem;padding-inline-start:0.5rem;}.mc-tag-contextualised.svelte-1f9dt2v:not(:disabled):hover {background:var(--tag-color-background-selected-hover, #006902);}.mc-tag-contextualised.svelte-1f9dt2v:focus-visible {box-shadow:0 0 0 0.125rem var(--focus-color-mid, var(--focus-color-outline-mid, #ffffff)), 0 0 0 0.25rem var(--focus-color-outer, var(--focus-color-outline-outer, #000000));outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-tag-contextualised.mc-tag--s.svelte-1f9dt2v {padding-inline-end:0.5rem;padding-inline-start:0.25rem;}.mc-tag-removable.svelte-1f9dt2v {padding:0 0 0 1rem;background:var(--tag-color-background-inverse, #242938);color:var(--tag-color-text-inverse, #ffffff);border:none;}.mc-tag-removable__remove.svelte-1f9dt2v {width:2rem;height:2rem;background-size:1.5rem;background:transparent;border:none;margin:0 0 0 0.125rem;padding:0.25rem;display:block;cursor:pointer;border-radius:var(--border-radius-full, 100%);}.mc-tag-removable__remove.svelte-1f9dt2v:hover {background:var(--tag-color-background-inverse-hover, #343b4c);}.mc-tag-removable__remove.svelte-1f9dt2v:focus-visible {box-shadow:0 0 0 0.125rem var(--focus-color-mid, var(--focus-color-outline-mid, #ffffff)), 0 0 0 0.25rem var(--focus-color-outer, var(--focus-color-outline-outer, #000000));outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-tag-removable__icon.svelte-1f9dt2v {fill:var(--tag-color-delete-icon, #c9d0de);width:1.5rem;height:1.5rem;}.mc-tag-removable__text.svelte-1f9dt2v {clip-path:inset(100%);clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;padding:0;width:1px;}.mc-tag-removable.mc-tag--s.svelte-1f9dt2v {padding:0 0 0 0.5rem;}.mc-tag-removable.mc-tag--s.svelte-1f9dt2v .mc-tag-removable__remove:where(.svelte-1f9dt2v) {width:1.5rem;height:1.5rem;padding:0.125rem;}.mc-tag-removable.mc-tag--s.svelte-1f9dt2v .mc-tag-removable__icon:where(.svelte-1f9dt2v) {width:1.25rem;height:1.25rem;}.mc-tag-removable.mc-tag--l.svelte-1f9dt2v .mc-tag-removable__remove:where(.svelte-1f9dt2v) {width:2.5rem;height:2.5rem;}.mc-tag-removable.mc-tag--l.svelte-1f9dt2v .mc-tag-removable__icon:where(.svelte-1f9dt2v) {width:2rem;height:2rem;}.mc-tag-selectable.svelte-1f9dt2v {gap:0.25rem;white-space:nowrap;cursor:pointer;padding-inline-start:0.5rem;font-weight:var(--font-weight-semi-bold, 600);}.mc-tag-selectable.svelte-1f9dt2v:hover {box-shadow:inset 0 0 0 var(--border-width-s, 0.0625rem) var(--tag-color-border, #999999);}.mc-tag-selectable.svelte-1f9dt2v:has(:where(.svelte-1f9dt2v):focus-visible) {box-shadow:0 0 0 0.125rem var(--focus-color-mid, var(--focus-color-outline-mid, #ffffff)), 0 0 0 0.25rem var(--focus-color-outer, var(--focus-color-outline-outer, #000000));outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-tag-selectable.svelte-1f9dt2v:has(:where(.svelte-1f9dt2v):checked) {background:var(--tag-color-background-selected, #117f03);color:var(--tag-color-text-inverse, #ffffff);border:none;}.mc-tag-selectable.svelte-1f9dt2v:has(:where(.svelte-1f9dt2v):checked)::before {display:inline-block;content:"";height:1.25rem;width:1.25rem;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' height='1.25rem' width='1.25rem' fill='var(--tag-color-text-inverse, %23ffffff)' viewBox='0 0 20 20'%3E%3Cg clip-path='url(%23a)'%3E%3Cpath fill-rule='evenodd' d='M14.697 6.553a.75.75 0 0 1 0 1.06l-5.833 5.834a.75.75 0 0 1-1.06 0l-2.5-2.5a.75.75 0 0 1 1.06-1.06l1.97 1.97 5.303-5.304a.75.75 0 0 1 1.06 0'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath fill='%23fff' d='M0 0h20v20H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E");}.mc-tag-selectable.svelte-1f9dt2v:has(:where(.svelte-1f9dt2v):checked):not(:has(:disabled)):hover {background:var(--tag-color-background-selected-hover, #006902);border-color:var(--tag-color-background-selected-hover, #006902);box-shadow:none;}.mc-tag-selectable.svelte-1f9dt2v:has(:where(.svelte-1f9dt2v):disabled) {cursor:not-allowed;background:var(--color-background-disabled, #d9d9d9);color:var(--color-text-disabled, #737373);border-color:var(--color-background-disabled, #d9d9d9);box-shadow:none;}.mc-tag-selectable.svelte-1f9dt2v:has(:where(.svelte-1f9dt2v):disabled)::before {background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' height='1.25rem' width='1.25rem' fill='var(--color-text-disabled, %23737373)' viewBox='0 0 20 20'%3E%3Cg clip-path='url(%23a)'%3E%3Cpath fill-rule='evenodd' d='M14.697 6.553a.75.75 0 0 1 0 1.06l-5.833 5.834a.75.75 0 0 1-1.06 0l-2.5-2.5a.75.75 0 0 1 1.06-1.06l1.97 1.97 5.303-5.304a.75.75 0 0 1 1.06 0'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='a'%3E%3Cpath fill='%23fff' d='M0 0h20v20H0z'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E");}.mc-tag-selectable.svelte-1f9dt2v .mc-tag__input:where(.svelte-1f9dt2v) {clip-path:inset(100%);clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;padding:0;width:1px;}.mc-tag-selectable.svelte-1f9dt2v .mc-tag__label:where(.svelte-1f9dt2v) {user-select:none;}.mc-tag-selectable.mc-tag--s.svelte-1f9dt2v {padding-inline-start:0.25rem;gap:0.125rem;}.mc-tag-selectable.mc-tag--l.svelte-1f9dt2v {padding-inline-start:0.75rem;}.mc-tag-interactive.svelte-1f9dt2v {gap:0.25rem;}`};function Be(S,t){$(t,!0),fe(S,Me);let a=r(t,"type",7,"informative"),o=r(t,"size",7,"m"),g=r(t,"id",7),k=r(t,"name",7),c=r(t,"label",7),E=r(t,"checked",15),n=r(t,"disabled",7),s=r(t,"contextualisednumber",7,99),I=r(t,"removablelabel",7),J;const ae=()=>{const e=new CustomEvent("remove-tag",{detail:g(),bubbles:!0,composed:!0});J.dispatchEvent(e)};var re={get type(){return a()},set type(e="informative"){a(e),l()},get size(){return o()},set size(e="m"){o(e),l()},get id(){return g()},set id(e){g(e),l()},get name(){return k()},set name(e){k(e),l()},get label(){return c()},set label(e){c(e),l()},get checked(){return E()},set checked(e){E(e),l()},get disabled(){return n()},set disabled(e){n(e),l()},get contextualisednumber(){return s()},set contextualisednumber(e=99){s(e),l()},get removablelabel(){return I()},set removablelabel(e){I(e),l()}},W=j(),le=A(W);{var oe=e=>{var b=Ce(),T=d(b);{var K=p=>{var C=j(),H=A(C);Y(H,t,"icon",{}),v(p,C)};B(T,p=>{E()||p(K)})}var h=N(T,2);he(h);var u=N(h,2),m=d(u,!0);i(u),i(b),L(()=>{D(b,"for",g()),P(b,1,F(["mc-tag",`mc-tag-${a()}`,`mc-tag--${o()}`]),"svelte-1f9dt2v"),D(h,"id",g()),D(h,"name",k()),h.disabled=n(),M(m,c())}),pe(h,E),v(e,b)},se=e=>{var b=j(),T=A(b);{var K=u=>{var m=Ee(),p=d(m);Y(p,t,"icon",{});var C=N(p,2),H=d(C,!0);i(C),i(m),L(()=>{P(m,1,F(["mc-tag",`mc-tag-${a()}`,`mc-tag--${o()}`]),"svelte-1f9dt2v"),m.disabled=n(),M(H,c())}),v(u,m)},h=u=>{var m=j(),p=A(m);{var C=z=>{var _=ze(),q=d(_);{let w=ue(()=>o()==="l"?"m":void 0);xe(q,{appearance:"inverse",get label(){return s()},get size(){return ge(w)}})}var G=N(q,2),O=d(G,!0);i(G),i(_),L(()=>{P(_,1,F(["mc-tag",`mc-tag-${a()}`,`mc-tag--${o()}`]),"svelte-1f9dt2v"),_.disabled=n(),M(O,c())}),v(z,_)},H=z=>{var _=j(),q=A(_);{var G=w=>{var f=ye(),y=d(f),Q=d(y,!0);i(y);var U=N(y,2);U.__click=ae;var V=d(U),de=d(V);{var ie=x=>{te(x,{"aria-hidden":"true"})},ne=x=>{we(x,{"aria-hidden":"true"})};B(de,x=>{o()==="s"?x(ie):x(ne,!1)})}i(V);var X=N(V,2),ve=d(X,!0);i(X),i(U),i(f),_e(f,x=>J=x,()=>J),L(()=>{P(f,1,F(["mc-tag",`mc-tag-${a()}`,`mc-tag--${o()}`]),"svelte-1f9dt2v"),M(Q,c()),M(ve,I())}),v(w,f)},O=w=>{var f=Ne(),y=d(f),Q=d(y,!0);i(y),i(f),L(()=>{P(f,1,F(["mc-tag",`mc-tag-${a()}`,`mc-tag--${o()}`]),"svelte-1f9dt2v"),M(Q,c())}),v(w,f)};B(q,w=>{a()==="removable"?w(G):w(O,!1)},!0)}v(z,_)};B(p,z=>{a()==="contextualised"?z(C):z(H,!1)},!0)}v(u,m)};B(T,u=>{a()==="interactive"?u(K):u(h,!1)},!0)}v(e,b)};B(le,e=>{a()==="selectable"?e(oe):e(se,!1)})}return v(S,W),ee(re)}me(["click"]);customElements.define("m-tag",Z(Be,{type:{},size:{},id:{},name:{},label:{},checked:{},disabled:{},contextualisednumber:{},removablelabel:{}},["icon"],[],!0));
4
+ //# sourceMappingURL=Tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tag.js","sources":["../../../node_modules/@mozaic-ds/icons-svelte/dist/components/CrossCircleFilled20/CrossCircleFilled20.svelte","../../../src/components/tag/Tag.svelte"],"sourcesContent":["<svelte:options customElement={{ tag: 'cross-circle-filled-20', shadow: 'none' }} />\n<script>\n export let id = undefined;\n export let style = undefined;\n export let className = undefined;\n export let fill = undefined;\n export let size = \"1.25rem\";\n</script>\n\n<svg aria-hidden=\"true\" id={id} style={style} class={className} fill={fill} xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" width=\"20px\" height=\"20px\"><path fill-rule=\"evenodd\" d=\"M10 1.75a8.25 8.25 0 1 0 0 16.5 8.25 8.25 0 0 0 0-16.5M6.97 6.97a.75.75 0 0 1 1.06 0L10 8.94l1.97-1.97a.75.75 0 1 1 1.06 1.06L11.06 10l1.97 1.97a.75.75 0 1 1-1.06 1.06L10 11.06l-1.97 1.97a.75.75 0 0 1-1.06-1.06L8.94 10 6.97 8.03a.75.75 0 0 1 0-1.06\"/></svg>","<svelte:options customElement={{ tag: 'm-tag' }} />\n\n<script lang=\"ts\">\n import CrossCircleFilled24 from '@mozaic-ds/icons-svelte/svelte/CrossCircleFilled24/CrossCircleFilled24.svelte';\n import CrossCircleFilled20 from '@mozaic-ds/icons-svelte/svelte/CrossCircleFilled20/CrossCircleFilled20.svelte';\n import NumberBadge from '../numberbadge/NumberBadge.svelte';\n /**\n * A Tag is a UI element used to filter data, categorize, select or deselect an option. It can appear standalone, in a group, or embedded within other components. Depending on its use, a tag can be interactive (clickable, removable, selectable) or static (serving as a visual indicator).\n *\n * @event remove-tag {CustomEvent<string>} - Emits when the remove button of a tag is clicked, passing the tag's ID.\n * @slot icon - Use this slot to insert an icon in the tag.\n */\n interface Props {\n /**\n * Defines the behavior and layout of the tag.\n */\n type?: 'informative' | 'interactive' | 'contextualised' | 'removable' | 'selectable';\n /**\n * Determines the size of the tag.\n */\n size?: 's' | 'm' | 'l';\n /**\n * A unique identifier for the tag, used to associate the label with the form element. **Required** when type is 'selectable' or 'removable'.\n */\n id?: string;\n /**\n * The name attribute for the tag element, typically used for form submission. (only relevant for type: 'selectable').\n */\n name?: string;\n /**\n * The text label displayed next to the tag.\n */\n label: string;\n /**\n * The tag's checked state. Used only for type: 'selectable'.\n */\n checked?: boolean;\n /**\n * If `true`, disables the tag, making it non-interactive. Applicable to selectable, interactive, and contextualised types.\n */\n disabled?: boolean;\n /**\n * A number displayed in the badge when the tag is contextualised.\n */\n contextualisednumber?: number;\n /**\n * Accessible label text for the remove button in removable tags.\n */\n removablelabel?: string;\n }\n\n let {\n type = 'informative',\n size = 'm',\n id,\n name,\n label,\n checked = $bindable(),\n disabled,\n contextualisednumber = 99,\n removablelabel,\n }: Props = $props();\n let element: HTMLElement;\n\n const onRemove = () => {\n const event = new CustomEvent('remove-tag', {\n detail: id,\n bubbles: true,\n composed: true,\n });\n element.dispatchEvent(event);\n };\n</script>\n\n{#if type === 'selectable'}\n <label for={id} class={['mc-tag', `mc-tag-${type}`, `mc-tag--${size}`]}>\n {#if !checked}\n <slot name=\"icon\" />\n {/if}\n <input type=\"checkbox\" class=\"mc-tag__input\" {id} {name} {disabled} bind:checked />\n <span class=\"mc-tag__label\">{label}</span>\n </label>\n{:else if type === 'interactive'}\n <button class={['mc-tag', `mc-tag-${type}`, `mc-tag--${size}`]} type=\"button\" {disabled}>\n <slot name=\"icon\" />\n <span class=\"mc-tag__label\">{label}</span>\n </button>\n{:else if type === 'contextualised'}\n <button class={['mc-tag', `mc-tag-${type}`, `mc-tag--${size}`]} type=\"button\" {disabled}>\n <NumberBadge\n appearance=\"inverse\"\n label={contextualisednumber}\n size={size === 'l' ? 'm' : undefined}\n />\n <span class=\"mc-tag__label\">{label}</span>\n </button>\n{:else if type === 'removable'}\n <span class={['mc-tag', `mc-tag-${type}`, `mc-tag--${size}`]} bind:this={element}>\n <span class=\"mc-tag__label\">{label}</span>\n <button class=\"mc-tag-removable__remove\" type=\"button\" onclick={onRemove}>\n <span class=\"mc-tag-removable__icon\">\n {#if size === 's'}\n <CrossCircleFilled20 aria-hidden=\"true\" />\n {:else}\n <CrossCircleFilled24 aria-hidden=\"true\" />\n {/if}\n </span>\n <span class=\"mc-tag-removable__text\">{removablelabel}</span>\n </button>\n </span>\n{:else}\n <span class={['mc-tag', `mc-tag-${type}`, `mc-tag--${size}`]}>\n <span class=\"mc-tag__label\">{label}</span>\n </span>\n{/if}\n\n<style lang=\"scss\">\n @use '@mozaic-ds/styles/components/tag';\n\n .mc-tag-interactive {\n gap: 0.25rem;\n }\n</style>\n"],"names":["id","style","className","fill","size","type","$.prop","$$props","name","label","checked","disabled","contextualisednumber","removablelabel","element","onRemove","event","$$render","consequent","$0","$.derived","consequent_4","alternate","$.bind_this","span_3","$$value","consequent_5","alternate_1","consequent_3","alternate_2","consequent_2","alternate_3","consequent_1","alternate_4"],"mappings":"m6BAAA,SAEa,IAAAA,cAAK,MAAS,EACdC,iBAAQ,MAAS,EACjBC,qBAAY,MAAS,EACrBC,gBAAO,MAAS,EAChBC,gBAAO,SAAS,iRAGDJ,GAAE,OAAUC,GAAK,UAASC,EAAS,CAAA,CAAA,aAAQC,GAAI,gBAF3E;;u2NCPA,kBAoDI,IAAAE,eAAO,aAAa,EACpBD,eAAO,GAAG,EACVJ,EAAEM,EAAAC,EAAA,KAAA,CAAA,EACFC,EAAIF,EAAAC,EAAA,OAAA,CAAA,EACJE,EAAKH,EAAAC,EAAA,QAAA,CAAA,EACLG,EAAOJ,EAAAC,EAAA,UAAA,EAAA,EACPI,EAAQL,EAAAC,EAAA,WAAA,CAAA,EACRK,+BAAuB,EAAE,EACzBC,EAAcP,EAAAC,EAAA,iBAAA,CAAA,EAEZO,EAEE,MAAAC,GAAQ,IAAS,CACf,MAAAC,EAAK,IAAO,YAAY,cAC5B,OAAQhB,EAAE,EACV,QAAS,GACT,SAAU,EAAI,CAAA,EAEhBc,EAAQ,cAAcE,CAAK,CAC7B,4CAnBS,cAAa,6CACb,IAAG,0TAMa,GAAE,sLAiBnBN,EAAO,GAAAO,EAAAC,CAAA,yEADHlB,GAAE,WAAU,SAAQ,UAAYK,EAAI,CAAA,GAAA,WAAeD,EAAI,CAAA,EAAA,CAAA,EAAA,gBAAA,mDAKpCK,GAAK,2IAGpB,SAAQ,UAAYJ,EAAI,CAAA,GAAA,WAAeD,EAAI,CAAA,EAAA,CAAA,EAAA,gBAAA,qBAE5BK,GAAK,iEAO1B,IAAAU,EAAAC,GAAA,IAAAhB,EAAI,IAAK,IAAM,IAAM,MAAS,gDAD7BQ,EAAoB,+EAHf,SAAQ,UAAYP,EAAI,CAAA,GAAA,WAAeD,EAAI,CAAA,EAAA,CAAA,EAAA,gBAAA,qBAM5BK,GAAK,sGAK8BM,8GAEvDX,EAAI,IAAK,IAAGa,EAAAI,EAAA,EAAAJ,EAAAK,GAAA,EAAA,gDAJkDC,GAAAC,EAAAC,GAAAX,QAAAA,CAAO,kBAAlE,SAAQ,UAAYT,EAAI,CAAA,GAAA,WAAeD,EAAI,CAAA,EAAA,CAAA,EAAA,gBAAA,MAC1BK,GAAK,OASMI,GAAc,wEAI1C,SAAQ,UAAYR,EAAI,CAAA,GAAA,WAAeD,EAAI,CAAA,EAAA,CAAA,EAAA,gBAAA,MAC1BK,GAAK,oBAhB5BJ,EAAI,IAAK,YAAWY,EAAAS,CAAA,EAAAT,EAAAU,EAAA,EAAA,uBATpBtB,EAAI,IAAK,iBAAgBY,EAAAW,CAAA,EAAAX,EAAAY,EAAA,EAAA,uBALzBxB,EAAI,IAAK,cAAaY,EAAAa,CAAA,EAAAb,EAAAc,EAAA,EAAA,wBAR3B1B,EAAI,IAAK,aAAYY,EAAAe,EAAA,EAAAf,EAAAgB,GAAA,EAAA,wBAF1B","x_google_ignoreList":[0]}
@@ -0,0 +1,12 @@
1
+ import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ declare const meta: Meta;
3
+ export default meta;
4
+ type Story = StoryObj;
5
+ export declare const Default: Story;
6
+ export declare const Size: Story;
7
+ export declare const Interactive: Story;
8
+ export declare const Disabled: Story;
9
+ export declare const Contextualised: Story;
10
+ export declare const Removable: Story;
11
+ export declare const Selectable: Story;
12
+ //# sourceMappingURL=Tag.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tag.stories.d.ts","sourceRoot":"","sources":["../../../src/components/tag/Tag.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAMrE,QAAA,MAAM,IAAI,EAAE,IAkCX,CAAC;AACF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAKvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC"}