@ds-mo/ui 9.2.0 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +0 -79
  2. package/dist/.build-stamp +1 -1
  3. package/dist/agent-patterns.json +1 -1
  4. package/dist/agent.json +17 -1
  5. package/dist/angular/ds-avatar.d.ts +1 -1
  6. package/dist/angular/ds-avatar.js +3 -3
  7. package/dist/angular/ds-conversation-list-item.d.ts +1 -1
  8. package/dist/angular/ds-conversation-list-item.js +3 -3
  9. package/dist/angular/ds-menu.d.ts +6 -1
  10. package/dist/angular/ds-menu.js +5 -2
  11. package/dist/angular/ds-panel-nav.d.ts +1 -1
  12. package/dist/angular/ds-panel-nav.js +3 -3
  13. package/dist/components/ds-agent-activity.js +1 -1
  14. package/dist/components/ds-agent-response.js +1 -1
  15. package/dist/components/ds-agent-response.js.map +1 -1
  16. package/dist/components/ds-agent-source-list.js +1 -1
  17. package/dist/components/ds-agent-tool-call.js +1 -1
  18. package/dist/components/ds-attachment-list.js +1 -1
  19. package/dist/components/ds-avatar.js +1 -1
  20. package/dist/components/ds-avatar.js.map +1 -1
  21. package/dist/components/ds-bar-nav.js +1 -1
  22. package/dist/components/ds-bar-nav.js.map +1 -1
  23. package/dist/components/ds-button-filled.js +1 -1
  24. package/dist/components/ds-button-unfilled.js +1 -1
  25. package/dist/components/ds-card-data-viz-donut.js +1 -1
  26. package/dist/components/ds-card-setting.js +1 -1
  27. package/dist/components/ds-card-shell-data-viz.js +1 -1
  28. package/dist/components/ds-card.js +1 -1
  29. package/dist/components/ds-chart-legend.js +1 -1
  30. package/dist/components/ds-checkbox.js +1 -1
  31. package/dist/components/ds-chip.js +1 -1
  32. package/dist/components/ds-code-block.js +1 -1
  33. package/dist/components/ds-conversation-list-item.js +1 -1
  34. package/dist/components/ds-conversation-list-item.js.map +1 -1
  35. package/dist/components/ds-conversation-list-section.js +1 -1
  36. package/dist/components/ds-conversation-list-section.js.map +1 -1
  37. package/dist/components/ds-conversation-list.js +1 -1
  38. package/dist/components/ds-conversation-list.js.map +1 -1
  39. package/dist/components/ds-divider.js +1 -1
  40. package/dist/components/ds-empty-state.js +1 -1
  41. package/dist/components/ds-icon.js +1 -1
  42. package/dist/components/ds-input.js +1 -1
  43. package/dist/components/ds-markdown.js +1 -1
  44. package/dist/components/ds-menu.js +1 -1
  45. package/dist/components/ds-message-bubble.js +1 -1
  46. package/dist/components/ds-message-composer.js +1 -1
  47. package/dist/components/ds-message-composer.js.map +1 -1
  48. package/dist/components/ds-message-scroller.js +1 -1
  49. package/dist/components/ds-message-scroller.js.map +1 -1
  50. package/dist/components/ds-message.js +1 -1
  51. package/dist/components/ds-panel-nav.js +1 -1
  52. package/dist/components/ds-panel-nav.js.map +1 -1
  53. package/dist/components/ds-panel-tool-header.js +1 -1
  54. package/dist/components/ds-panel-tool-search.js +1 -1
  55. package/dist/components/ds-panel-tools.js +1 -1
  56. package/dist/components/ds-panel-tools.js.map +1 -1
  57. package/dist/components/ds-select-multi.js +1 -1
  58. package/dist/components/ds-select.js +1 -1
  59. package/dist/components/ds-slider.js +1 -1
  60. package/dist/components/ds-slider.js.map +1 -1
  61. package/dist/components/ds-switch.js +1 -1
  62. package/dist/components/ds-tab-group.js +1 -1
  63. package/dist/components/ds-tag.js +1 -1
  64. package/dist/components/ds-tag.js.map +1 -1
  65. package/dist/components/{p-Di-ThR90.js → p-BHpWYKtP.js} +2 -2
  66. package/dist/components/p-BHpWYKtP.js.map +1 -0
  67. package/dist/components/p-BRfOCc_h.js +2 -0
  68. package/dist/components/p-BRfOCc_h.js.map +1 -0
  69. package/dist/components/{p-BEQB8EnB.js → p-CBYuvZKM.js} +2 -2
  70. package/dist/components/{p-BFWC17em.js → p-CJlgONwR.js} +2 -2
  71. package/dist/components/p-CWNdl52Y.js +2 -0
  72. package/dist/components/p-CWNdl52Y.js.map +1 -0
  73. package/dist/components/{p-BZAEZENv.js → p-CblAABEo.js} +2 -2
  74. package/dist/components/{p--KbMQblZ.js → p-CeFBA7Dx.js} +2 -2
  75. package/dist/components/p-CiKGqsA2.js +2 -0
  76. package/dist/components/{p-CnM9SW_8.js.map → p-CiKGqsA2.js.map} +1 -1
  77. package/dist/components/{p-2br9YDbG.js → p-Ci_nVk5P.js} +2 -2
  78. package/dist/components/p-Cijzn3YQ.js +2 -0
  79. package/dist/components/p-Cijzn3YQ.js.map +1 -0
  80. package/dist/components/p-DFxqk71w.js +2 -0
  81. package/dist/components/p-DFxqk71w.js.map +1 -0
  82. package/dist/components/{p-C0sq948W.js → p-DaQ0ZE_V.js} +2 -2
  83. package/dist/components/{p-t9Ei1kHP.js → p-DiooIO2B.js} +2 -2
  84. package/dist/components/{p-DIsDiGcp.js → p-Dj5MejHv.js} +2 -2
  85. package/dist/components/p-Dj5MejHv.js.map +1 -0
  86. package/dist/components/{p-Bo5wikia.js → p-DnMCRAwx.js} +2 -2
  87. package/dist/components/{p-CZMEhdlA.js → p-Dst-OliP.js} +2 -2
  88. package/dist/components/p-Dst-OliP.js.map +1 -0
  89. package/dist/components/p-T0Mzhv3-.js +2 -0
  90. package/dist/components/p-T0Mzhv3-.js.map +1 -0
  91. package/dist/components/{p-Bx1G7P6W.js → p-kezp2_Xu.js} +2 -2
  92. package/dist/components/{p-Di4HBckb.js → p-xB0GPG3-.js} +2 -2
  93. package/dist/docs/components.json +291 -11
  94. package/dist/mcp-data/registry/agent-response.json +1 -1
  95. package/dist/mcp-data/registry/avatar.json +19 -1
  96. package/dist/mcp-data/registry/bar-nav.json +1 -1
  97. package/dist/mcp-data/registry/button-unfilled.json +2 -2
  98. package/dist/mcp-data/registry/code-block.json +1 -1
  99. package/dist/mcp-data/registry/conversation-list-item.json +20 -2
  100. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  101. package/dist/mcp-data/registry/conversation-list.json +1 -1
  102. package/dist/mcp-data/registry/markdown.json +1 -1
  103. package/dist/mcp-data/registry/menu.json +17 -1
  104. package/dist/mcp-data/registry/message-bubble.json +1 -1
  105. package/dist/mcp-data/registry/message-composer.json +1 -1
  106. package/dist/mcp-data/registry/message-scroller.json +2 -2
  107. package/dist/mcp-data/registry/message.json +2 -2
  108. package/dist/mcp-data/registry/panel-nav.json +20 -2
  109. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  110. package/dist/mcp-data/registry/panel-tools.json +1 -1
  111. package/dist/mcp-data/registry/registry.json +16 -0
  112. package/dist/mcp-data/registry/slider.json +1 -1
  113. package/dist/mcp-data/registry/switch.json +1 -1
  114. package/dist/mcp-data/registry/tag.json +2 -2
  115. package/dist/react/ds-menu.d.ts +1 -0
  116. package/dist/react/ds-menu.js +1 -0
  117. package/dist/types/components/Avatar/Avatar.d.ts +3 -0
  118. package/dist/types/components/BarNav/BarNav.d.ts +2 -0
  119. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
  120. package/dist/types/components/ConversationListItem/ConversationListItem.d.ts +2 -0
  121. package/dist/types/components/Menu/Menu.d.ts +6 -0
  122. package/dist/types/components/MessageScroller/MessageScroller.d.ts +4 -0
  123. package/dist/types/components/PanelNav/PanelNav.d.ts +2 -0
  124. package/dist/types/components.d.ts +44 -6
  125. package/package.json +8 -11
  126. package/dist/components/p-41UAx2eq.js +0 -2
  127. package/dist/components/p-41UAx2eq.js.map +0 -1
  128. package/dist/components/p-B7NbIYjS.js +0 -2
  129. package/dist/components/p-B7NbIYjS.js.map +0 -1
  130. package/dist/components/p-CC1C8s6m.js +0 -2
  131. package/dist/components/p-CC1C8s6m.js.map +0 -1
  132. package/dist/components/p-CZMEhdlA.js.map +0 -1
  133. package/dist/components/p-CnM9SW_8.js +0 -2
  134. package/dist/components/p-CuKn9I5f.js +0 -2
  135. package/dist/components/p-CuKn9I5f.js.map +0 -1
  136. package/dist/components/p-DFMM60My.js +0 -2
  137. package/dist/components/p-DFMM60My.js.map +0 -1
  138. package/dist/components/p-DIsDiGcp.js.map +0 -1
  139. package/dist/components/p-Di-ThR90.js.map +0 -1
  140. /package/dist/components/{p-BEQB8EnB.js.map → p-CBYuvZKM.js.map} +0 -0
  141. /package/dist/components/{p-BFWC17em.js.map → p-CJlgONwR.js.map} +0 -0
  142. /package/dist/components/{p-BZAEZENv.js.map → p-CblAABEo.js.map} +0 -0
  143. /package/dist/components/{p--KbMQblZ.js.map → p-CeFBA7Dx.js.map} +0 -0
  144. /package/dist/components/{p-2br9YDbG.js.map → p-Ci_nVk5P.js.map} +0 -0
  145. /package/dist/components/{p-C0sq948W.js.map → p-DaQ0ZE_V.js.map} +0 -0
  146. /package/dist/components/{p-t9Ei1kHP.js.map → p-DiooIO2B.js.map} +0 -0
  147. /package/dist/components/{p-Bo5wikia.js.map → p-DnMCRAwx.js.map} +0 -0
  148. /package/dist/components/{p-Bx1G7P6W.js.map → p-kezp2_Xu.js.map} +0 -0
  149. /package/dist/components/{p-Di4HBckb.js.map → p-xB0GPG3-.js.map} +0 -0
@@ -36,6 +36,8 @@ export declare class Menu {
36
36
  private positionReady;
37
37
  private focusRingVisible;
38
38
  dsClose: EventEmitter<void>;
39
+ /** Emitted after the popup's exit motion is complete and its rendered content is removed. */
40
+ dsAfterClose: EventEmitter<void>;
39
41
  dsSelect: EventEmitter<MenuItemData>;
40
42
  /** Emitted when a `gradient-picker` section swatch is chosen. */
41
43
  dsGradientSelect: EventEmitter<ShellGradientPreset>;
@@ -47,6 +49,9 @@ export declare class Menu {
47
49
  private itemEls;
48
50
  private positionRetryRaf;
49
51
  private listenersReady;
52
+ /** Last content actually painted while open; retained unchanged through exit motion. */
53
+ private lastRenderedSections;
54
+ private closingSections;
50
55
  componentDidLoad(): void;
51
56
  disconnectedCallback(): void;
52
57
  onOpenChange(isOpen: boolean): void;
@@ -59,6 +64,7 @@ export declare class Menu {
59
64
  private get popupFallbackHeightPx();
60
65
  private get closeAnimationMs();
61
66
  private finishClose;
67
+ private captureClosingSections;
62
68
  private get resolvedAnchor();
63
69
  private get anchorFocusTarget();
64
70
  private focusAnchor;
@@ -18,6 +18,8 @@ export declare class MessageScroller {
18
18
  private atStart;
19
19
  private programmatic;
20
20
  private previousScrollHeight;
21
+ private overlayBlockSize;
22
+ private overlayContentBlockSize;
21
23
  componentDidLoad(): void;
22
24
  disconnectedCallback(): void;
23
25
  scrollToMessage(id: string): Promise<boolean>;
@@ -27,6 +29,8 @@ export declare class MessageScroller {
27
29
  private scrollTo;
28
30
  private connectObservers;
29
31
  private handleContentGrowth;
32
+ private syncContentFade;
33
+ private syncOverlayContentBlockSize;
30
34
  private applyDefaultPosition;
31
35
  private isAtLiveEdge;
32
36
  private handleScroll;
@@ -35,6 +35,8 @@ export declare class PanelNav {
35
35
  dashboardLabel: string;
36
36
  settingsLabel: string;
37
37
  accountLabel: string;
38
+ /** Keep the account-menu trigger visually active while its popup is open or closing. */
39
+ accountMenuExpanded: boolean;
38
40
  dashboardNavigationLabel: string;
39
41
  settingsNavigationLabel: string;
40
42
  expandNavigationLabel: string;
@@ -8,6 +8,7 @@ import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
8
  import { AgentActivityItem, AgentResponsePart, AgentSource, AgentToolState, ConversationAttachment, ConversationItemState, MessageComposerStatus, MessageDeliveryState, MessageDirection, MessageGroupPosition, MessageScrollerPosition } from "./components/conversation-types";
9
9
  import { NavChromeStyle } from "./shell/nav-chrome";
10
10
  import { ShellGradientPreset } from "./shell/shell-gradient-presets";
11
+ import { IconColor, IconSize as IconSize1 } from "./components/Icon/Icon";
11
12
  import { BadgeSurface, BadgeVariant } from "./components/Badge/Badge";
12
13
  import { BannerContrast, BannerIntent } from "./components/Banner/Banner";
13
14
  import { BarNavTab } from "./components/BarNav/bar-nav-types";
@@ -22,7 +23,7 @@ import { ChartLegendDirection, ChartLegendPercentageDecimals } from "./component
22
23
  import { CheckboxSize } from "./components/Checkbox/Checkbox";
23
24
  import { ChipSize, ChipState } from "./components/Chip/Chip";
24
25
  import { DividerBackground, DividerInset, DividerLength, DividerOrientation } from "./components/Divider/Divider";
25
- import { IconColor, IconSize } from "./components/Icon/Icon";
26
+ import { IconColor as IconColor1, IconSize } from "./components/Icon/Icon";
26
27
  import { InputSize, InputType, InputWidth } from "./components/Input/Input";
27
28
  import { LoaderColor, LoaderSize } from "./components/Loader/Loader";
28
29
  import { MenuItemData, MenuSection } from "./components/Menu/menu-types";
@@ -43,7 +44,6 @@ import { SelectMultiBackground, SelectMultiOption, SelectMultiSection, SelectMul
43
44
  import { ShellGradientPreset as ShellGradientPreset1 } from "./components/ShellGradientSwatch/shell-gradient-swatch-types";
44
45
  import { SkeletonBackground, SkeletonVariant } from "./components/Skeleton/Skeleton";
45
46
  import { LineTruncation, TextAlign, TextColor, TextDecoration, TextElement, TextFontFeature, TextVariant, TextWrap } from "./components/Text/text-types";
46
- import { IconSize as IconSize1 } from "./components/Icon/Icon";
47
47
  import { ControlSize } from "./utils/control-text";
48
48
  import { SliderOrientation, SliderSize, SliderThumbAlignment, SliderValue } from "./components/Slider/Slider";
49
49
  import { SwatchPickerOption, SwatchPickerSection } from "./components/SwatchPicker/swatch-picker-types";
@@ -55,6 +55,7 @@ import { TooltipAlign, TooltipSide, TooltipSize } from "./components/Tooltip/Too
55
55
  export { AgentActivityItem, AgentResponsePart, AgentSource, AgentToolState, ConversationAttachment, ConversationItemState, MessageComposerStatus, MessageDeliveryState, MessageDirection, MessageGroupPosition, MessageScrollerPosition } from "./components/conversation-types";
56
56
  export { NavChromeStyle } from "./shell/nav-chrome";
57
57
  export { ShellGradientPreset } from "./shell/shell-gradient-presets";
58
+ export { IconColor, IconSize as IconSize1 } from "./components/Icon/Icon";
58
59
  export { BadgeSurface, BadgeVariant } from "./components/Badge/Badge";
59
60
  export { BannerContrast, BannerIntent } from "./components/Banner/Banner";
60
61
  export { BarNavTab } from "./components/BarNav/bar-nav-types";
@@ -69,7 +70,7 @@ export { ChartLegendDirection, ChartLegendPercentageDecimals } from "./component
69
70
  export { CheckboxSize } from "./components/Checkbox/Checkbox";
70
71
  export { ChipSize, ChipState } from "./components/Chip/Chip";
71
72
  export { DividerBackground, DividerInset, DividerLength, DividerOrientation } from "./components/Divider/Divider";
72
- export { IconColor, IconSize } from "./components/Icon/Icon";
73
+ export { IconColor as IconColor1, IconSize } from "./components/Icon/Icon";
73
74
  export { InputSize, InputType, InputWidth } from "./components/Input/Input";
74
75
  export { LoaderColor, LoaderSize } from "./components/Loader/Loader";
75
76
  export { MenuItemData, MenuSection } from "./components/Menu/menu-types";
@@ -90,7 +91,6 @@ export { SelectMultiBackground, SelectMultiOption, SelectMultiSection, SelectMul
90
91
  export { ShellGradientPreset as ShellGradientPreset1 } from "./components/ShellGradientSwatch/shell-gradient-swatch-types";
91
92
  export { SkeletonBackground, SkeletonVariant } from "./components/Skeleton/Skeleton";
92
93
  export { LineTruncation, TextAlign, TextColor, TextDecoration, TextElement, TextFontFeature, TextVariant, TextWrap } from "./components/Text/text-types";
93
- export { IconSize as IconSize1 } from "./components/Icon/Icon";
94
94
  export { ControlSize } from "./utils/control-text";
95
95
  export { SliderOrientation, SliderSize, SliderThumbAlignment, SliderValue } from "./components/Slider/Slider";
96
96
  export { SwatchPickerOption, SwatchPickerSection } from "./components/SwatchPicker/swatch-picker-types";
@@ -208,6 +208,11 @@ export namespace Components {
208
208
  * @default ''
209
209
  */
210
210
  "icon": string;
211
+ /**
212
+ * Semantic color for the icon. Use primary to surface unread or current identity state.
213
+ * @default 'secondary'
214
+ */
215
+ "iconColor": IconColor;
211
216
  /**
212
217
  * Optional accessible label. Omit when the surrounding content already conveys the meaning.
213
218
  */
@@ -776,6 +781,11 @@ export namespace Components {
776
781
  interface DsConversationList {
777
782
  }
778
783
  interface DsConversationListItem {
784
+ /**
785
+ * Keep the contextual-actions surface visible while its popup is open or closing.
786
+ * @default false
787
+ */
788
+ "actionsOpen": boolean;
779
789
  /**
780
790
  * @default ''
781
791
  */
@@ -892,7 +902,7 @@ export namespace Components {
892
902
  * Semantic foreground color token, or a raw CSS var reference. `tertiary` and the still-fainter `quaternary` are restricted to icons inside genuinely inactive/disabled UI or to purely decorative icons; informative icons must retain sufficient contrast.
893
903
  * @default 'inherit'
894
904
  */
895
- "color": IconColor;
905
+ "color": IconColor1;
896
906
  /**
897
907
  * Accessible label. Sets `role="img"` and `aria-label`. Omit for decorative icons.
898
908
  */
@@ -1195,6 +1205,11 @@ export namespace Components {
1195
1205
  * @default 'Account'
1196
1206
  */
1197
1207
  "accountLabel": string;
1208
+ /**
1209
+ * Keep the account-menu trigger visually active while its popup is open or closing.
1210
+ * @default false
1211
+ */
1212
+ "accountMenuExpanded": boolean;
1198
1213
  /**
1199
1214
  * ID of the currently active/selected nav item. Overridden by `currentUrl` matching when set.
1200
1215
  * @default ''
@@ -2772,6 +2787,7 @@ declare global {
2772
2787
  };
2773
2788
  interface HTMLDsMenuElementEventMap {
2774
2789
  "dsClose": void;
2790
+ "dsAfterClose": void;
2775
2791
  "dsSelect": MenuItemData;
2776
2792
  "dsGradientSelect": ShellGradientPreset;
2777
2793
  "dsSwatchSelect": string;
@@ -3360,6 +3376,11 @@ declare namespace LocalJSX {
3360
3376
  * @default ''
3361
3377
  */
3362
3378
  "icon"?: string;
3379
+ /**
3380
+ * Semantic color for the icon. Use primary to surface unread or current identity state.
3381
+ * @default 'secondary'
3382
+ */
3383
+ "iconColor"?: IconColor;
3363
3384
  /**
3364
3385
  * Optional accessible label. Omit when the surrounding content already conveys the meaning.
3365
3386
  */
@@ -3966,6 +3987,11 @@ declare namespace LocalJSX {
3966
3987
  interface DsConversationList {
3967
3988
  }
3968
3989
  interface DsConversationListItem {
3990
+ /**
3991
+ * Keep the contextual-actions surface visible while its popup is open or closing.
3992
+ * @default false
3993
+ */
3994
+ "actionsOpen"?: boolean;
3969
3995
  /**
3970
3996
  * @default ''
3971
3997
  */
@@ -4083,7 +4109,7 @@ declare namespace LocalJSX {
4083
4109
  * Semantic foreground color token, or a raw CSS var reference. `tertiary` and the still-fainter `quaternary` are restricted to icons inside genuinely inactive/disabled UI or to purely decorative icons; informative icons must retain sufficient contrast.
4084
4110
  * @default 'inherit'
4085
4111
  */
4086
- "color"?: IconColor;
4112
+ "color"?: IconColor1;
4087
4113
  /**
4088
4114
  * Accessible label. Sets `role="img"` and `aria-label`. Omit for decorative icons.
4089
4115
  */
@@ -4256,6 +4282,10 @@ declare namespace LocalJSX {
4256
4282
  "menuLabel"?: string;
4257
4283
  "menuWidth"?: string | undefined;
4258
4284
  "minWidth"?: string | undefined;
4285
+ /**
4286
+ * Emitted after the popup's exit motion is complete and its rendered content is removed.
4287
+ */
4288
+ "onDsAfterClose"?: (event: DsMenuCustomEvent<void>) => void;
4259
4289
  "onDsClose"?: (event: DsMenuCustomEvent<void>) => void;
4260
4290
  /**
4261
4291
  * Emitted when a `gradient-picker` section swatch is chosen.
@@ -4398,6 +4428,11 @@ declare namespace LocalJSX {
4398
4428
  * @default 'Account'
4399
4429
  */
4400
4430
  "accountLabel"?: string;
4431
+ /**
4432
+ * Keep the account-menu trigger visually active while its popup is open or closing.
4433
+ * @default false
4434
+ */
4435
+ "accountMenuExpanded"?: boolean;
4401
4436
  /**
4402
4437
  * ID of the currently active/selected nav item. Overridden by `currentUrl` matching when set.
4403
4438
  * @default ''
@@ -5612,6 +5647,7 @@ declare namespace LocalJSX {
5612
5647
  }
5613
5648
  interface DsAvatarAttributes {
5614
5649
  "icon": string;
5650
+ "iconColor": IconColor;
5615
5651
  "label": string | undefined;
5616
5652
  }
5617
5653
  interface DsBadgeAttributes {
@@ -5763,6 +5799,7 @@ declare namespace LocalJSX {
5763
5799
  "state": ConversationItemState;
5764
5800
  "statusLabel": string;
5765
5801
  "unreadCount": number;
5802
+ "actionsOpen": boolean;
5766
5803
  }
5767
5804
  interface DsConversationListSectionAttributes {
5768
5805
  "heading": string;
@@ -5892,6 +5929,7 @@ declare namespace LocalJSX {
5892
5929
  "dashboardLabel": string;
5893
5930
  "settingsLabel": string;
5894
5931
  "accountLabel": string;
5932
+ "accountMenuExpanded": boolean;
5895
5933
  "dashboardNavigationLabel": string;
5896
5934
  "settingsNavigationLabel": string;
5897
5935
  "expandNavigationLabel": string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ds-mo/ui",
3
- "version": "9.2.0",
3
+ "version": "9.2.1",
4
4
  "description": "CompoMo — composable web components styled with TokoMo design tokens",
5
5
  "keywords": [
6
6
  "web-components",
@@ -85,23 +85,17 @@
85
85
  "prestorybook:build": "node scripts/write-build-stamp.mjs",
86
86
  "storybook": "node scripts/storybook-dev.mjs",
87
87
  "storybook:build": "storybook build",
88
- "storybook:test:a11y": "playwright test --config playwright.storybook.config.ts",
89
- "storybook:test:a11y:update": "STORYBOOK_A11Y_UPDATE=1 playwright test --config playwright.storybook.config.ts",
88
+ "storybook:test:a11y": "vitest run --project=storybook-light --project=storybook-dark",
90
89
  "clean": "rm -rf dist",
91
90
  "clean:framework-proxies": "node scripts/clean-framework-proxies.mjs",
92
91
  "typecheck": "tsc --noEmit",
93
92
  "typecheck:storybook": "tsc -p tsconfig.storybook-tests.json",
94
- "lint": "eslint src/ playwright.storybook.config.ts tests/storybook/ && npm run lint:css",
93
+ "lint": "eslint src/ .storybook/vitest.setup.ts vitest.config.ts tests/ci-browser-scope.test.ts && npm run lint:css",
95
94
  "lint:css": "stylelint \"src/wc/components/**/*.css\" \"src/wc/utils/**/*.css\"",
96
95
  "registry:build": "node scripts/build-registry.mjs",
97
96
  "agent:validate": "node scripts/validate-agent-contract.mjs",
98
97
  "agent:validate:trilogy": "node scripts/validate-trilogy-manifests.mjs",
99
- "mcp": "node scripts/mcp-server.mjs",
100
- "figma:connect:help": "figma connect --help",
101
- "figma:connect:publish:dry-run": "figma connect publish --dry-run -c figma.config.json --exit-on-unreadable-files",
102
- "figma:connect:publish": "figma connect publish -c figma.config.json --exit-on-unreadable-files",
103
- "figma:connect:preview": "figma connect preview -c figma.config.json",
104
- "typecheck:figma": "tsc -p tsconfig.figma.json --noEmit"
98
+ "mcp": "node scripts/mcp-server.mjs"
105
99
  },
106
100
  "peerDependencies": {
107
101
  "@angular/core": ">=19 <23",
@@ -134,13 +128,13 @@
134
128
  "@ds-mo/icons": "^6.2.0",
135
129
  "@ds-mo/tokens": "^3.1.1",
136
130
  "@eslint/js": "^10.0.1",
137
- "@figma/code-connect": "^1.4.9",
138
131
  "@modelcontextprotocol/sdk": "^1.29.0",
139
132
  "@playwright/test": "^1.55.0",
140
133
  "@stencil/angular-output-target": "^1.4.0",
141
134
  "@stencil/core": "^4.43.5",
142
135
  "@storybook/addon-a11y": "^10.5.1",
143
136
  "@storybook/addon-docs": "^10.5.0",
137
+ "@storybook/addon-vitest": "^10.5.2",
144
138
  "@storybook/web-components": "^10.5.0",
145
139
  "@storybook/web-components-vite": "^10.5.0",
146
140
  "@types/d3-array": "^3.2.2",
@@ -149,7 +143,9 @@
149
143
  "@types/node": "^24.13.3",
150
144
  "@types/react": "^19.2.17",
151
145
  "@types/react-dom": "^19.2.3",
146
+ "@vitest/browser-playwright": "^4.1.10",
152
147
  "ajv": "^8.20.0",
148
+ "axe-core": "^4.12.1",
153
149
  "concurrently": "^10.0.3",
154
150
  "esbuild": "^0.28.1",
155
151
  "eslint": "^10.7.0",
@@ -165,6 +161,7 @@
165
161
  "typescript": "~6.0.3",
166
162
  "typescript-eslint": "^8.63.0",
167
163
  "vite": "^8.1.4",
164
+ "vitest": "^4.1.10",
168
165
  "zod": "^4.4.3"
169
166
  },
170
167
  "engines": {
@@ -1,2 +0,0 @@
1
- import{p as e,H as s,h as o,a,t as i}from"./index.js";import{d as t}from"./p-CiwdnKKp.js";import{d}from"./p-CZMEhdlA.js";import{d as c}from"./p-BEQB8EnB.js";import{d as r}from"./p-Cpr3K41-.js";import{d as n}from"./p-BSOZXagj.js";const l=()=>`.sc-ds-code-block-h{display:block;width:100%;min-width:0;box-sizing:border-box}.code-block.sc-ds-code-block{width:100%;min-width:0;margin:0;overflow:hidden;border-radius:var(--dimension-radius-050);background:var(--color-background-strong-neutral);color:var(--color-foreground-faint-neutral);box-sizing:border-box}.code-block__header.sc-ds-code-block{display:flex;align-items:center;justify-content:space-between;gap:var(--dimension-space-100);min-height:var(--dimension-size-400);padding:var(--dimension-space-050) var(--dimension-space-100);background:var(--color-background-strong-neutral);box-sizing:border-box}pre.sc-ds-code-block{margin:0;padding:var(--dimension-space-150);overflow:auto;font-family:var(--typography-fontfamily-mono);font-size:var(--typography-fontsize-sm);line-height:var(--typography-lineheight-sm);tab-size:2}code.sc-ds-code-block{font:inherit;white-space:pre}`;const f=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.code="";this.language="";this.filename="";this.copied=false;this.copy=async()=>{if(!navigator.clipboard||!this.code)return;await navigator.clipboard.writeText(this.code);this.copied=true;if(this.copiedTimer)clearTimeout(this.copiedTimer);this.copiedTimer=setTimeout((()=>{this.copied=false}),2e3)}}disconnectedCallback(){if(this.copiedTimer)clearTimeout(this.copiedTimer)}render(){const e=this.filename||this.language||"Code";return o(a,{key:"e1b4ca53d1fa8ec754064867d9b546096f330707"},o("figure",{key:"a280c2970b263601b616f936aaf97c7d75761507",class:"code-block"},o("figcaption",{key:"e5dee362204997c5db535191ff31311dfb8bad18",class:"code-block__header"},o("ds-text",{key:"541d8cce1f290e3bddd26d64d408f789892499af",as:"span",variant:"text-caption",emphasis:true,color:"on-strong"},e),o("ds-button-unfilled",{key:"b6ccdcdd504203a9ac37e5841f133c79a1ade0db",variant:"icon",icon:this.copied?"Check":"Copy",size:"xs","aria-label":this.copied?"Copied":"Copy code",hasBorder:false,onDsClick:this.copy})),o("pre",{key:"8c6fe7a073b7bb6f18122a27a5794c51f8dd9583"},o("code",{key:"5a856e6cb4fd106464e91631eed0fb9e6af9ae8f"},this.code))))}static get style(){return l()}},[2,"ds-code-block",{code:[1],language:[1],filename:[1],copied:[32]}]);function b(){if(typeof customElements==="undefined"){return}const e=["ds-code-block","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-text"];e.forEach((e=>{switch(e){case"ds-code-block":if(!customElements.get(i(e))){customElements.define(i(e),f)}break;case"ds-badge":if(!customElements.get(i(e))){t()}break;case"ds-button-unfilled":if(!customElements.get(i(e))){d()}break;case"ds-icon":if(!customElements.get(i(e))){c()}break;case"ds-loader":if(!customElements.get(i(e))){r()}break;case"ds-text":if(!customElements.get(i(e))){n()}break}}))}b();export{f as C,b as d};
2
- //# sourceMappingURL=p-41UAx2eq.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["codeBlockCss","CodeBlock","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","code","language","filename","copied","copy","async","navigator","clipboard","writeText","copiedTimer","clearTimeout","setTimeout","disconnectedCallback","render","label","h","Host","key","class","as","variant","emphasis","color","icon","size","hasBorder","onDsClick"],"sources":["src/wc/components/CodeBlock/CodeBlock.css?tag=ds-code-block&encapsulation=scoped","src/wc/components/CodeBlock/CodeBlock.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n}\n\n.code-block {\n width: 100%;\n min-width: 0;\n margin: 0;\n overflow: hidden;\n border-radius: var(--dimension-radius-050);\n background: var(--color-background-strong-neutral);\n color: var(--color-foreground-faint-neutral);\n box-sizing: border-box;\n}\n\n.code-block__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--dimension-space-100);\n min-height: var(--dimension-size-400);\n padding: var(--dimension-space-050) var(--dimension-space-100);\n background: var(--color-background-strong-neutral);\n box-sizing: border-box;\n}\n\npre {\n margin: 0;\n padding: var(--dimension-space-150);\n overflow: auto;\n font-family: var(--typography-fontfamily-mono);\n font-size: var(--typography-fontsize-sm);\n line-height: var(--typography-lineheight-sm);\n tab-size: 2;\n}\n\ncode {\n font: inherit;\n white-space: pre;\n}\n","import { Component, h, Host, Prop, State } from '@stencil/core';\n\n@Component({\n tag: 'ds-code-block',\n styleUrl: 'CodeBlock.css',\n scoped: true,\n})\nexport class CodeBlock {\n @Prop() code: string = '';\n @Prop() language: string = '';\n @Prop() filename: string = '';\n\n @State() private copied: boolean = false;\n private copiedTimer?: ReturnType<typeof setTimeout>;\n\n disconnectedCallback() {\n if (this.copiedTimer) clearTimeout(this.copiedTimer);\n }\n\n private copy = async () => {\n if (!navigator.clipboard || !this.code) return;\n await navigator.clipboard.writeText(this.code);\n this.copied = true;\n if (this.copiedTimer) clearTimeout(this.copiedTimer);\n this.copiedTimer = setTimeout(() => {\n this.copied = false;\n }, 2000);\n };\n\n render() {\n const label = this.filename || this.language || 'Code';\n return (\n <Host>\n <figure class=\"code-block\">\n <figcaption class=\"code-block__header\">\n <ds-text as=\"span\" variant=\"text-caption\" emphasis color=\"on-strong\">\n {label}\n </ds-text>\n <ds-button-unfilled\n variant=\"icon\"\n icon={this.copied ? 'Check' : 'Copy'}\n size=\"xs\"\n aria-label={this.copied ? 'Copied' : 'Copy code'}\n hasBorder={false}\n onDsClick={this.copy}\n />\n </figcaption>\n <pre>\n <code>{this.code}</code>\n </pre>\n </figure>\n </Host>\n );\n }\n}\n"],"mappings":"qOAAA,MAAMA,EAAe,IAAM,y3B,MCOdC,EAASC,EAAA,MAAAD,UAAAE,EALtB,WAAAC,CAAAC,G,4CAMUC,KAAAC,KAAe,GACfD,KAAAE,SAAmB,GACnBF,KAAAG,SAAmB,GAEVH,KAAAI,OAAkB,MAO3BJ,KAAAK,KAAOC,UACb,IAAKC,UAAUC,YAAcR,KAAKC,KAAM,aAClCM,UAAUC,UAAUC,UAAUT,KAAKC,MACzCD,KAAKI,OAAS,KACd,GAAIJ,KAAKU,YAAaC,aAAaX,KAAKU,aACxCV,KAAKU,YAAcE,YAAW,KAC5BZ,KAAKI,OAAS,KAAK,GAClB,IAAK,CA4BX,CAvCC,oBAAAS,GACE,GAAIb,KAAKU,YAAaC,aAAaX,KAAKU,Y,CAa1C,MAAAI,GACE,MAAMC,EAAQf,KAAKG,UAAYH,KAAKE,UAAY,OAChD,OACEc,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,UAAAE,IAAA,2CAAQC,MAAM,cACZH,EAAA,cAAAE,IAAA,2CAAYC,MAAM,sBAChBH,EAAA,WAAAE,IAAA,2CAASE,GAAG,OAAOC,QAAQ,eAAeC,SAAQ,KAACC,MAAM,aACtDR,GAEHC,EAAA,sBAAAE,IAAA,2CACEG,QAAQ,OACRG,KAAMxB,KAAKI,OAAS,QAAU,OAC9BqB,KAAK,KAAI,aACGzB,KAAKI,OAAS,SAAW,YACrCsB,UAAW,MACXC,UAAW3B,KAAKK,QAGpBW,EAAA,OAAAE,IAAA,4CACEF,EAAA,QAAAE,IAAA,4CAAOlB,KAAKC,Q","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as e,H as s,h as a,a as r,t as b}from"./index.js";const d=()=>`.sc-ds-message-bubble-h{display:inline-flex;max-width:80%;box-sizing:border-box}.message-bubble--ghost.sc-ds-message-bubble-h{display:block;max-width:100%}.message-bubble.sc-ds-message-bubble{min-width:0;padding:var(--dimension-space-100);border-start-start-radius:var( --ds-message-bubble-radius-start-start, var(--dimension-radius-050) );border-start-end-radius:var(--ds-message-bubble-radius-start-end, var(--dimension-radius-050));border-end-start-radius:var(--ds-message-bubble-radius-end-start, var(--dimension-radius-050));border-end-end-radius:var(--ds-message-bubble-radius-end-end, var(--dimension-radius-050));background:var(--color-background-secondary);color:var(--color-foreground-primary);font-family:var(--typography-font-family);font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md);font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half);box-sizing:border-box;overflow-wrap:anywhere}.message-bubble--primary.sc-ds-message-bubble-h .message-bubble.sc-ds-message-bubble{background:var(--color-background-bold-brand);color:var(--color-foreground-faint-brand)}.message-bubble--secondary.sc-ds-message-bubble-h .message-bubble.sc-ds-message-bubble{box-shadow:inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-tertiary)}.message-bubble--ghost.sc-ds-message-bubble-h .message-bubble.sc-ds-message-bubble{padding-inline:0;background:transparent;border-radius:0}.message-bubble--error.sc-ds-message-bubble-h .message-bubble.sc-ds-message-bubble{background:var(--color-background-faint-negative);color:var(--color-foreground-bold-negative);box-shadow:inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-bold-negative)}`;const o=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.variant="secondary"}render(){return a(r,{key:"e825dc8ebc5ea86c033a669482faa3a738860030",class:`message-bubble--${this.variant}`},a("div",{key:"579f27496e8a41d411594569f445cd4bf8821b55",class:"message-bubble"},a("slot",{key:"7eae5473308c86fe2737c9feb90a3b51013cc877"})))}static get style(){return d()}},[262,"ds-message-bubble",{variant:[1]}]);function t(){if(typeof customElements==="undefined"){return}const e=["ds-message-bubble"];e.forEach((e=>{switch(e){case"ds-message-bubble":if(!customElements.get(b(e))){customElements.define(b(e),o)}break}}))}t();export{o as M,t as d};
2
- //# sourceMappingURL=p-B7NbIYjS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["messageBubbleCss","MessageBubble","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","variant","render","h","Host","key","class"],"sources":["src/wc/components/MessageBubble/MessageBubble.css?tag=ds-message-bubble&encapsulation=scoped","src/wc/components/MessageBubble/MessageBubble.tsx"],"sourcesContent":[":host {\n display: inline-flex;\n max-width: 80%;\n box-sizing: border-box;\n}\n\n:host(.message-bubble--ghost) {\n display: block;\n max-width: 100%;\n}\n\n.message-bubble {\n min-width: 0;\n padding: var(--dimension-space-100);\n border-start-start-radius: var(\n --ds-message-bubble-radius-start-start,\n var(--dimension-radius-050)\n );\n border-start-end-radius: var(--ds-message-bubble-radius-start-end, var(--dimension-radius-050));\n border-end-start-radius: var(--ds-message-bubble-radius-end-start, var(--dimension-radius-050));\n border-end-end-radius: var(--ds-message-bubble-radius-end-end, var(--dimension-radius-050));\n background: var(--color-background-secondary);\n color: var(--color-foreground-primary);\n font-family: var(--typography-font-family);\n font-size: var(--typography-fontsize-md);\n line-height: var(--typography-lineheight-md);\n font-weight: var(--typography-weight-regular);\n letter-spacing: var(--typography-letterspacing-negative-half);\n box-sizing: border-box;\n overflow-wrap: anywhere;\n}\n\n:host(.message-bubble--primary) .message-bubble {\n background: var(--color-background-bold-brand);\n color: var(--color-foreground-faint-brand);\n}\n\n:host(.message-bubble--secondary) .message-bubble {\n box-shadow: inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-tertiary);\n}\n\n:host(.message-bubble--ghost) .message-bubble {\n padding-inline: 0;\n background: transparent;\n border-radius: 0;\n}\n\n:host(.message-bubble--error) .message-bubble {\n background: var(--color-background-faint-negative);\n color: var(--color-foreground-bold-negative);\n box-shadow: inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-bold-negative);\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\nexport type MessageBubbleVariant = 'primary' | 'secondary' | 'ghost' | 'error';\n\n@Component({\n tag: 'ds-message-bubble',\n styleUrl: 'MessageBubble.css',\n scoped: true,\n})\nexport class MessageBubble {\n @Prop() variant: MessageBubbleVariant = 'secondary';\n\n render() {\n return (\n <Host class={`message-bubble--${this.variant}`}>\n <div class=\"message-bubble\"><slot /></div>\n </Host>\n );\n }\n}\n"],"mappings":"2DAAA,MAAMA,EAAmB,IAAM,mtD,MCSlBC,EAAaC,EAAA,MAAAD,UAAAE,EAL1B,WAAAC,CAAAC,G,4CAMUC,KAAAC,QAAgC,WASzC,CAPC,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CAACC,MAAO,mBAAmBN,KAAKC,WACnCE,EAAA,OAAAE,IAAA,2CAAKC,MAAM,kBAAiBH,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as e,H as s,h as r,a,t as n}from"./index.js";import{d as o}from"./p-CiwdnKKp.js";import{d as t}from"./p-CZMEhdlA.js";import{d}from"./p-41UAx2eq.js";import{d as i}from"./p-BEQB8EnB.js";import{d as c}from"./p-Cpr3K41-.js";import{d as l}from"./p-BSOZXagj.js";const m=()=>`.sc-ds-markdown-h{display:block;min-width:0;color:inherit;box-sizing:border-box}.markdown.sc-ds-markdown{min-width:0;font-family:var(--typography-font-family);font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md);font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half);overflow-wrap:anywhere}.markdown.sc-ds-markdown>.sc-ds-markdown:first-child{margin-top:0}.markdown.sc-ds-markdown>.sc-ds-markdown:last-child{margin-bottom:0}p.sc-ds-markdown,ul.sc-ds-markdown,ol.sc-ds-markdown,blockquote.sc-ds-markdown,.markdown__table-wrap.sc-ds-markdown,ds-code-block.sc-ds-markdown{margin:0 0 var(--dimension-space-150)}h1.sc-ds-markdown,h2.sc-ds-markdown,h3.sc-ds-markdown,h4.sc-ds-markdown,h5.sc-ds-markdown,h6.sc-ds-markdown{margin:var(--dimension-space-200) 0 var(--dimension-space-100);color:var(--color-foreground-primary);font-family:var(--typography-font-family);font-weight:var(--typography-weight-semibold)}h1.sc-ds-markdown,h2.sc-ds-markdown{font-size:var(--typography-fontsize-xl);line-height:var(--typography-lineheight-xl)}h3.sc-ds-markdown,h4.sc-ds-markdown,h5.sc-ds-markdown,h6.sc-ds-markdown{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}ul.sc-ds-markdown,ol.sc-ds-markdown{padding-left:var(--dimension-space-300)}li.sc-ds-markdown+li.sc-ds-markdown{margin-top:var(--dimension-space-050)}li.sc-ds-markdown>input.sc-ds-markdown{margin-right:var(--dimension-space-050)}blockquote.sc-ds-markdown{padding-left:var(--dimension-space-150);border-left:var(--dimension-stroke-width-025) solid var(--color-border-secondary);color:var(--color-foreground-secondary)}a.sc-ds-markdown{color:var(--color-foreground-brand);text-decoration:underline}code.sc-ds-markdown:not(ds-code-block code){padding:var(--dimension-space-012) var(--dimension-space-025);border-radius:var(--dimension-radius-025);background:var(--color-background-secondary);font-family:var(--typography-fontfamily-mono);font-size:var(--typography-fontsize-sm)}hr.sc-ds-markdown{margin:var(--dimension-space-200) 0;border:none;border-top:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.markdown__table-wrap.sc-ds-markdown{overflow-x:auto}table.sc-ds-markdown{width:100%;border-collapse:collapse}th.sc-ds-markdown,td.sc-ds-markdown{padding:var(--dimension-space-075);border:var(--dimension-stroke-width-012) solid var(--color-border-tertiary);text-align:left;vertical-align:top}th.sc-ds-markdown{font-weight:var(--typography-weight-semibold)}`;let h;function k(){h??(h=Promise.all([import("./p-BjtXYFhw.js"),import("./p-DVsje4AY.js"),import("./p-gidVv1FX.js")]).then((([e,s,r])=>({fromMarkdown:e.fromMarkdown,gfmFromMarkdown:s.gfmFromMarkdown,gfm:r.gfm}))));return h}function p(e){if(!e)return undefined;try{const s=new URL(e,document.baseURI);if(!["http:","https:","mailto:"].includes(s.protocol))return undefined;return s.href}catch{return undefined}}const w=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.content="";this.streaming=false;this.tree=null;this.parseRevision=0}componentWillLoad(){if(typeof document!=="undefined")return this.parse()}disconnectedCallback(){this.parseRevision+=1;if(this.parseFrame&&typeof cancelAnimationFrame==="function"){cancelAnimationFrame(this.parseFrame)}}scheduleParse(){if(typeof requestAnimationFrame!=="function")return;if(this.parseFrame)cancelAnimationFrame(this.parseFrame);this.parseFrame=requestAnimationFrame((()=>{this.parseFrame=undefined;void this.parse()}))}async parse(){const e=++this.parseRevision;try{const{fromMarkdown:s,gfmFromMarkdown:r,gfm:a}=await k();const n=s(this.content,{extensions:[a()],mdastExtensions:[r()]});if(e===this.parseRevision)this.tree=n}catch{if(e===this.parseRevision)this.tree=null}}children(e){if(!("children"in e))return[];return e.children.map((e=>this.renderNode(e)))}renderNode(e){switch(e.type){case"root":return this.children(e);case"text":return r("span",{class:"markdown__text"},e.value);case"paragraph":return r("p",{class:"markdown__paragraph"},this.children(e));case"heading":{const s=`h${e.depth}`;return r(s,{class:"markdown__heading"},this.children(e))}case"strong":return r("strong",{class:"markdown__strong"},this.children(e));case"emphasis":return r("em",{class:"markdown__emphasis"},this.children(e));case"delete":return r("del",{class:"markdown__delete"},this.children(e));case"blockquote":return r("blockquote",{class:"markdown__blockquote"},this.children(e));case"break":return r("br",{class:"markdown__break"});case"thematicBreak":return r("hr",{class:"markdown__thematic-break"});case"inlineCode":return r("code",{class:"markdown__inline-code"},e.value);case"code":return r("ds-code-block",{class:"markdown__code-block",code:e.value,language:e.lang??"",filename:e.meta??""});case"link":{const s=p(e.url);return s?r("a",{class:"markdown__link",href:s,target:"_blank",rel:"noopener noreferrer"},this.children(e)):this.children(e)}case"list":{const s=e.ordered?"ol":"ul";return r(s,{class:"markdown__list",start:e.ordered&&e.start?e.start:undefined},this.children(e))}case"listItem":return r("li",{class:"markdown__list-item"},typeof e.checked==="boolean"?r("input",{class:"markdown__task-indicator",type:"checkbox",checked:e.checked,disabled:true,"aria-hidden":"true",tabIndex:-1}):null,this.children(e));case"table":{const[s,...a]=e.children;return r("div",{class:"markdown__table-wrap"},r("table",{class:"markdown__table"},s?r("thead",{class:"markdown__table-head"},r("tr",{class:"markdown__table-row"},s.children.map((e=>r("th",{class:"markdown__table-heading",scope:"col"},this.children(e)))))):null,r("tbody",{class:"markdown__table-body"},a.map((e=>this.renderNode(e))))))}case"tableRow":return r("tr",{class:"markdown__table-row"},this.children(e));case"tableCell":return r("td",{class:"markdown__table-cell"},this.children(e));case"image":{const s=p(e.url);return s?r("a",{class:"markdown__image-link",href:s,target:"_blank",rel:"noopener noreferrer"},e.alt||"View image"):e.alt||null}case"html":case"definition":case"footnoteDefinition":return null;case"footnoteReference":return r("sup",{class:"markdown__footnote"},e.label);default:return this.children(e)}}render(){return r(a,{key:"604562b68b4efeec4d5e0547ed4f0ce92a4d49e8","aria-busy":this.streaming?"true":undefined},r("div",{key:"afad454a1e440a1703e29f737b8f6d8e2e01ee89",class:"markdown"},this.tree?this.renderNode(this.tree):r("p",{class:"markdown__paragraph"},r("span",{class:"markdown__text"},this.content))))}static get watchers(){return{content:[{scheduleParse:0}]}}static get style(){return m()}},[2,"ds-markdown",{content:[1],streaming:[4],tree:[32]},undefined,{content:[{scheduleParse:0}]}]);function f(){if(typeof customElements==="undefined"){return}const e=["ds-markdown","ds-badge","ds-button-unfilled","ds-code-block","ds-icon","ds-loader","ds-text"];e.forEach((e=>{switch(e){case"ds-markdown":if(!customElements.get(n(e))){customElements.define(n(e),w)}break;case"ds-badge":if(!customElements.get(n(e))){o()}break;case"ds-button-unfilled":if(!customElements.get(n(e))){t()}break;case"ds-code-block":if(!customElements.get(n(e))){d()}break;case"ds-icon":if(!customElements.get(n(e))){i()}break;case"ds-loader":if(!customElements.get(n(e))){c()}break;case"ds-text":if(!customElements.get(n(e))){l()}break}}))}f();export{w as M,f as d};
2
- //# sourceMappingURL=p-CC1C8s6m.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["markdownCss","parserPromise","loadParser","Promise","all","import","then","fromMarkdownModule","gfmFromMarkdownModule","gfmModule","fromMarkdown","gfmFromMarkdown","gfm","safeHref","value","undefined","url","URL","document","baseURI","includes","protocol","href","Markdown","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","content","streaming","tree","parseRevision","componentWillLoad","parse","disconnectedCallback","parseFrame","cancelAnimationFrame","scheduleParse","requestAnimationFrame","revision","extensions","mdastExtensions","children","node","map","child","renderNode","type","h","class","Tag","depth","code","language","lang","filename","meta","target","rel","ordered","start","checked","disabled","tabIndex","heading","rows","cell","scope","row","alt","label","render","Host","key"],"sources":["src/wc/components/Markdown/Markdown.css?tag=ds-markdown&encapsulation=scoped","src/wc/components/Markdown/Markdown.tsx"],"sourcesContent":[":host {\n display: block;\n min-width: 0;\n color: inherit;\n box-sizing: border-box;\n}\n\n.markdown {\n min-width: 0;\n font-family: var(--typography-font-family);\n font-size: var(--typography-fontsize-md);\n line-height: var(--typography-lineheight-md);\n font-weight: var(--typography-weight-regular);\n letter-spacing: var(--typography-letterspacing-negative-half);\n overflow-wrap: anywhere;\n}\n\n.markdown > :first-child {\n margin-top: 0;\n}\n\n.markdown > :last-child {\n margin-bottom: 0;\n}\n\np,\nul,\nol,\nblockquote,\n.markdown__table-wrap,\nds-code-block {\n margin: 0 0 var(--dimension-space-150);\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin: var(--dimension-space-200) 0 var(--dimension-space-100);\n color: var(--color-foreground-primary);\n font-family: var(--typography-font-family);\n font-weight: var(--typography-weight-semibold);\n}\n\nh1,\nh2 {\n font-size: var(--typography-fontsize-xl);\n line-height: var(--typography-lineheight-xl);\n}\n\nh3,\nh4,\nh5,\nh6 {\n font-size: var(--typography-fontsize-lg);\n line-height: var(--typography-lineheight-lg);\n}\n\nul,\nol {\n padding-left: var(--dimension-space-300);\n}\n\nli + li {\n margin-top: var(--dimension-space-050);\n}\n\nli > input {\n margin-right: var(--dimension-space-050);\n}\n\nblockquote {\n padding-left: var(--dimension-space-150);\n border-left: var(--dimension-stroke-width-025) solid var(--color-border-secondary);\n color: var(--color-foreground-secondary);\n}\n\na {\n color: var(--color-foreground-brand);\n text-decoration: underline;\n}\n\ncode:not(ds-code-block code) {\n padding: var(--dimension-space-012) var(--dimension-space-025);\n border-radius: var(--dimension-radius-025);\n background: var(--color-background-secondary);\n font-family: var(--typography-fontfamily-mono);\n font-size: var(--typography-fontsize-sm);\n}\n\nhr {\n margin: var(--dimension-space-200) 0;\n border: none;\n border-top: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n.markdown__table-wrap {\n overflow-x: auto;\n}\n\ntable {\n width: 100%;\n border-collapse: collapse;\n}\n\nth,\ntd {\n padding: var(--dimension-space-075);\n border: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n text-align: left;\n vertical-align: top;\n}\n\nth {\n font-weight: var(--typography-weight-semibold);\n}\n","import { Component, h, Host, Prop, State, VNode, Watch } from '@stencil/core';\nimport type { Nodes, Root } from 'mdast';\n\ntype MarkdownRender = VNode | string | null | MarkdownRender[];\ntype MarkdownParser = {\n fromMarkdown: typeof import('mdast-util-from-markdown').fromMarkdown;\n gfmFromMarkdown: typeof import('mdast-util-gfm').gfmFromMarkdown;\n gfm: typeof import('micromark-extension-gfm').gfm;\n};\n\nlet parserPromise: Promise<MarkdownParser> | undefined;\n\nfunction loadParser(): Promise<MarkdownParser> {\n parserPromise ??= Promise.all([\n import('mdast-util-from-markdown'),\n import('mdast-util-gfm'),\n import('micromark-extension-gfm'),\n ]).then(([fromMarkdownModule, gfmFromMarkdownModule, gfmModule]) => ({\n fromMarkdown: fromMarkdownModule.fromMarkdown,\n gfmFromMarkdown: gfmFromMarkdownModule.gfmFromMarkdown,\n gfm: gfmModule.gfm,\n }));\n return parserPromise;\n}\n\nfunction safeHref(value: string | null | undefined): string | undefined {\n if (!value) return undefined;\n try {\n const url = new URL(value, document.baseURI);\n if (!['http:', 'https:', 'mailto:'].includes(url.protocol)) return undefined;\n return url.href;\n } catch {\n return undefined;\n }\n}\n\n@Component({\n tag: 'ds-markdown',\n styleUrl: 'Markdown.css',\n scoped: true,\n})\nexport class Markdown {\n @Prop() content: string = '';\n @Prop() streaming: boolean = false;\n\n @State() private tree: Root | null = null;\n private parseFrame?: number;\n private parseRevision = 0;\n\n componentWillLoad() {\n // The browser-targeted named-character decoder used by the Markdown parser\n // creates a DOM element when its module is evaluated. Keep public package\n // imports server-safe by loading that parser only in a browser context.\n if (typeof document !== 'undefined') return this.parse();\n }\n\n disconnectedCallback() {\n this.parseRevision += 1;\n if (this.parseFrame && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.parseFrame);\n }\n }\n\n @Watch('content')\n scheduleParse() {\n if (typeof requestAnimationFrame !== 'function') return;\n if (this.parseFrame) cancelAnimationFrame(this.parseFrame);\n this.parseFrame = requestAnimationFrame(() => {\n this.parseFrame = undefined;\n void this.parse();\n });\n }\n\n private async parse() {\n const revision = ++this.parseRevision;\n try {\n const { fromMarkdown, gfmFromMarkdown, gfm } = await loadParser();\n const tree = fromMarkdown(this.content, {\n extensions: [gfm()],\n mdastExtensions: [gfmFromMarkdown()],\n });\n if (revision === this.parseRevision) this.tree = tree;\n } catch {\n if (revision === this.parseRevision) this.tree = null;\n }\n }\n\n private children(node: Nodes): MarkdownRender[] {\n if (!('children' in node)) return [];\n return node.children.map(child => this.renderNode(child));\n }\n\n private renderNode(node: Nodes): MarkdownRender {\n switch (node.type) {\n case 'root':\n return this.children(node);\n case 'text':\n // Keep prose text on an element boundary. Besides giving streaming updates a\n // stable render target, this avoids axe-core treating a bare Stencil text\n // vnode as an element while it generates a contrast-result selector.\n return <span class=\"markdown__text\">{node.value}</span>;\n case 'paragraph':\n return <p class=\"markdown__paragraph\">{this.children(node)}</p>;\n case 'heading': {\n const Tag = `h${node.depth}`;\n return <Tag class=\"markdown__heading\">{this.children(node)}</Tag>;\n }\n case 'strong':\n return <strong class=\"markdown__strong\">{this.children(node)}</strong>;\n case 'emphasis':\n return <em class=\"markdown__emphasis\">{this.children(node)}</em>;\n case 'delete':\n return <del class=\"markdown__delete\">{this.children(node)}</del>;\n case 'blockquote':\n return <blockquote class=\"markdown__blockquote\">{this.children(node)}</blockquote>;\n case 'break':\n return <br class=\"markdown__break\" />;\n case 'thematicBreak':\n return <hr class=\"markdown__thematic-break\" />;\n case 'inlineCode':\n return <code class=\"markdown__inline-code\">{node.value}</code>;\n case 'code':\n return (\n <ds-code-block\n class=\"markdown__code-block\"\n code={node.value}\n language={node.lang ?? ''}\n filename={node.meta ?? ''}\n />\n );\n case 'link': {\n const href = safeHref(node.url);\n return href ? (\n <a class=\"markdown__link\" href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {this.children(node)}\n </a>\n ) : (\n this.children(node)\n );\n }\n case 'list': {\n const Tag = node.ordered ? 'ol' : 'ul';\n return (\n <Tag class=\"markdown__list\" start={node.ordered && node.start ? node.start : undefined}>\n {this.children(node)}\n </Tag>\n );\n }\n case 'listItem':\n return (\n <li class=\"markdown__list-item\">\n {typeof node.checked === 'boolean' ? (\n <input\n class=\"markdown__task-indicator\"\n type=\"checkbox\"\n checked={node.checked}\n disabled\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n ) : null}\n {this.children(node)}\n </li>\n );\n case 'table': {\n const [heading, ...rows] = node.children;\n return (\n <div class=\"markdown__table-wrap\">\n <table class=\"markdown__table\">\n {heading ? (\n <thead class=\"markdown__table-head\">\n <tr class=\"markdown__table-row\">\n {heading.children.map(cell => (\n <th class=\"markdown__table-heading\" scope=\"col\">\n {this.children(cell)}\n </th>\n ))}\n </tr>\n </thead>\n ) : null}\n <tbody class=\"markdown__table-body\">{rows.map(row => this.renderNode(row))}</tbody>\n </table>\n </div>\n );\n }\n case 'tableRow':\n return <tr class=\"markdown__table-row\">{this.children(node)}</tr>;\n case 'tableCell':\n return <td class=\"markdown__table-cell\">{this.children(node)}</td>;\n case 'image': {\n const href = safeHref(node.url);\n return href ? (\n <a class=\"markdown__image-link\" href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {node.alt || 'View image'}\n </a>\n ) : (\n node.alt || null\n );\n }\n case 'html':\n case 'definition':\n case 'footnoteDefinition':\n return null;\n case 'footnoteReference':\n return <sup class=\"markdown__footnote\">{node.label}</sup>;\n default:\n return this.children(node);\n }\n }\n\n render() {\n return (\n <Host aria-busy={this.streaming ? 'true' : undefined}>\n <div class=\"markdown\">\n {this.tree ? (\n this.renderNode(this.tree)\n ) : (\n <p class=\"markdown__paragraph\">\n <span class=\"markdown__text\">{this.content}</span>\n </p>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["buttonUnfilledCss","ICON_SIZE","md","sm","xs","ButtonUnfilled","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","variant","size","width","label","icon","isActive","activeFill","hasBorder","rounded","dot","isInactive","isLoading","type","ariaLabel","buttonEl","handleClick","event","preventDefault","stopPropagation","dsClick","emit","dsChange","setFocus","focus","showIcon","showLabel","showDot","dotRing","accessibleName","undefined","render","bg","background","textVariant","CONTROL_TEXT_VARIANT","iconSize","cls","h","Host","key","class","controlWidthClass","tabIndex","ref","el","disabled","focusTabIndex","controls","expanded","String","haspopup","pressed","onClick","color","name","as","emphasis"],"sources":["src/wc/components/ButtonUnfilled/ButtonUnfilled.css?tag=ds-button-unfilled&encapsulation=scoped","src/wc/components/ButtonUnfilled/ButtonUnfilled.tsx"],"sourcesContent":["@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/control-inactive.css';\n@import '../../utils/control-density.css';\n@import '../../utils/control-width.css';\n\n:host {\n display: inline-flex;\n outline: none;\n --ds-button-unfilled-fg: var(--color-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-secondary);\n --ds-button-unfilled-border: var(--color-border-secondary);\n}\n\n/* Icon-only: fixed square from density height (hug). Fill stretches the hit target. */\n:host(.button-unfilled-host--icon.ds-control-width--hug) {\n width: var(--ds-control-height, var(--dimension-size-400));\n height: var(--ds-control-height, var(--dimension-size-400));\n min-width: var(--ds-control-height, var(--dimension-size-400));\n min-height: var(--ds-control-height, var(--dimension-size-400));\n}\n\n:host(.button-unfilled-host--icon.ds-control-width--fill) {\n height: var(--ds-control-height, var(--dimension-size-400));\n min-height: var(--ds-control-height, var(--dimension-size-400));\n}\n\n:host(.ds-control-width--fill) .button-unfilled {\n width: 100%;\n}\n\n.button-unfilled {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n height: var(--ds-control-height, var(--dimension-size-400));\n padding: 0 var(--ds-control-padding-inline, var(--dimension-space-075));\n gap: var(--ds-control-gap, var(--dimension-space-050));\n background: transparent;\n border: none;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-button-unfilled-fg);\n cursor: pointer;\n -webkit-user-select: none;\n user-select: none;\n overflow: hidden;\n transition: color var(--effect-motion-short-2);\n /* Hover/press/selected fill: `.ds-interaction-fill` (+ `--selected` / `--on-*`).\n Active always promotes foreground to primary (toggle mode). */\n}\n\n.button-unfilled--icon {\n width: 100%;\n height: 100%;\n padding: 0;\n}\n\n.button-unfilled--rounded {\n --ds-control-radius: var(--dimension-radius-half);\n}\n\n.button-unfilled--active {\n color: var(--ds-button-unfilled-fg-active);\n}\n\n/* Inset stroke via interaction-fill ::after (above selected / hover washes). */\n.button-unfilled--bordered {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--ds-button-unfilled-border);\n}\n\n/* Fallback if interaction-fill is omitted (should be rare — prefer keep the util class). */\n.button-unfilled--bordered:not(.ds-interaction-fill) {\n box-shadow: inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color);\n}\n\n/* Inactive: `.ds-control-inactive` (25% opacity). */\n\n/* Foreground / chrome tokens per surface — interaction tokens come from util `--on-*`. */\n.button-unfilled--background-medium {\n --ds-button-unfilled-fg: var(--color-foreground-on-medium-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-medium-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-medium-neutral);\n --ds-button-unfilled-border: var(--color-border-on-medium-background-secondary);\n}\n\n.button-unfilled--background-bold {\n --ds-button-unfilled-fg: var(--color-foreground-on-bold-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-bold-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-bold-neutral);\n --ds-button-unfilled-border: var(--color-border-on-bold-background-secondary);\n}\n\n.button-unfilled--background-strong {\n --ds-button-unfilled-fg: var(--color-foreground-on-strong-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-strong-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-strong-neutral);\n --ds-button-unfilled-border: var(--color-border-on-strong-background-secondary);\n}\n\n.button-unfilled--background-translucent {\n --ds-button-unfilled-fg: var(--color-translucent-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-translucent-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-translucent-translucent);\n --ds-button-unfilled-border: var(--color-translucent-border-secondary);\n}\n\n.button-unfilled--background-inverted {\n --ds-button-unfilled-fg: var(--color-inverted-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-inverted-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-inverted-background);\n --ds-button-unfilled-border: var(--color-inverted-border-secondary);\n}\n\n.button-unfilled--background-media {\n --ds-button-unfilled-fg: var(--color-media-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-media-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-media-background);\n --ds-button-unfilled-border: var(--color-media-border-secondary);\n}\n\n.button-unfilled--on-always-dark {\n --ds-button-unfilled-fg: var(--color-always-dark-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-always-dark-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-always-dark-background);\n --ds-button-unfilled-border: var(--color-always-dark-border-secondary);\n}\n\n/*\n * After surface ring defaults: selected fill remaps the knock-out to the active\n * wash so the badge halo matches the selected background.\n */\n.button-unfilled.ds-interaction-fill--selected {\n --ds-button-unfilled-dot-ring: var(--ds-interaction-active);\n}\n\n.button-unfilled__icon-wrap {\n position: relative;\n width: var(--ds-control-icon, var(--dimension-iconography-md));\n height: var(--ds-control-icon, var(--dimension-iconography-md));\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n z-index: 2;\n}\n\n.button-unfilled__label {\n position: relative;\n z-index: 2;\n padding: 0 var(--ds-control-label-inset, var(--dimension-space-025));\n white-space: nowrap;\n flex-shrink: 0;\n min-width: 0;\n}\n\n.button-unfilled__label--loading {\n visibility: hidden;\n}\n\n.button-unfilled > .button-unfilled__loader-overlay {\n position: absolute;\n inset: 0;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n}\n\n.button-unfilled__dot {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n pointer-events: none;\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core';\nimport { controlWidthClass, CONTROL_TEXT_VARIANT, type ControlWidth } from '../../utils';\n\nexport type ButtonUnfilledBackground =\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'always-dark';\n\nexport type ButtonUnfilledVariant = 'icon' | 'label' | 'icon-label';\n\nexport type ButtonUnfilledSize = 'md' | 'sm' | 'xs';\n\nexport type ButtonUnfilledWidth = ControlWidth;\nexport type ButtonUnfilledPopup = 'true' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\n\n/**\n * `ds-icon` size prop matching control-density icon metrics\n * (md→20 / sm→16 / xs→12 via `--dimension-iconography-*`).\n */\nconst ICON_SIZE: Record<ButtonUnfilledSize, 'md' | 'sm' | 'xs'> = {\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\n@Component({\n tag: 'ds-button-unfilled',\n styleUrl: 'ButtonUnfilled.css',\n scoped: true,\n})\nexport class ButtonUnfilled {\n @Element() el!: HTMLElement;\n\n /**\n * Content layout. Default is label-only; pass `icon` for icon-only chrome\n * (nav / tool rails) or `icon-label` for leading icon + text.\n */\n @Prop() variant: ButtonUnfilledVariant = 'label';\n\n /** Control density (height, padding, icon, type). */\n @Prop() size: ButtonUnfilledSize = 'md';\n\n /** Width fit — hug content (default) or fill the parent. */\n @Prop() width: ButtonUnfilledWidth = 'hug';\n\n /** Visible text for `label` / `icon-label` variants. */\n @Prop() label: string = '';\n\n /** Icon name passed to <ds-icon> for `icon` / `icon-label` variants. */\n @Prop() icon: string = '';\n\n /** Active/selected visual state. Always promotes foreground to primary. */\n @Prop() isActive: boolean = false;\n\n /**\n * When active, render the selected interaction fill.\n * Default `true` for general UI. Shell chrome (nav / tool rails) should pass\n * `false` so selection is foreground-only (primary color, no fill).\n */\n @Prop() activeFill: boolean = true;\n\n /** Show a 1px secondary inset border. Default on; shell chrome can pass `false`. */\n @Prop() hasBorder: boolean = true;\n\n /** Use the half-radius treatment instead of the default control radius. */\n @Prop() rounded: boolean = false;\n\n /** Show a notification dot at the top-right of the icon zone (icon variant only). */\n @Prop() dot: boolean = false;\n\n /** Disables interaction. */\n @Prop() isInactive: boolean = false;\n\n /** Shows an inline loader and prevents interaction without applying inactive opacity. */\n @Prop() isLoading: boolean = false;\n\n /** Native button type. */\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\n\n /** Actual parent surface context. Omit on primary and secondary surfaces. */\n @Prop() background: ButtonUnfilledBackground | undefined;\n\n /** Accessible name override. Required for icon-only buttons. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop() controls: string | undefined;\n @Prop() expanded: boolean | undefined;\n @Prop() haspopup: ButtonUnfilledPopup | undefined;\n @Prop() pressed: boolean | undefined;\n\n /**\n * Native `tabindex` for roving keyboard groups in shell chrome.\n * Omit for the default button tab stop (`0`).\n */\n @Prop({ attribute: 'tab-index' }) focusTabIndex?: number;\n\n @Event() dsClick!: EventEmitter<MouseEvent>;\n @Event() dsChange!: EventEmitter<boolean>;\n\n private buttonEl: HTMLButtonElement | null = null;\n\n @Method()\n async setFocus() {\n this.buttonEl?.focus();\n }\n\n private handleClick = (event: MouseEvent) => {\n if (this.isInactive || this.isLoading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.dsClick.emit(event);\n this.dsChange.emit(!this.isActive);\n };\n\n private get showIcon(): boolean {\n return this.variant === 'icon' || this.variant === 'icon-label';\n }\n\n private get showLabel(): boolean {\n return this.variant === 'label' || this.variant === 'icon-label';\n }\n\n private get showDot(): boolean {\n return this.variant === 'icon' && this.dot && !this.isLoading;\n }\n\n /** Knock-out ring: selected fill → active wash; otherwise surface token. */\n private get dotRing(): string {\n if (this.isActive && this.activeFill) {\n return 'var(--ds-interaction-active)';\n }\n return 'var(--ds-button-unfilled-dot-ring)';\n }\n\n private get accessibleName(): string | undefined {\n if (this.ariaLabel) return this.ariaLabel;\n if (this.isLoading && this.variant === 'label' && this.label) return this.label;\n return undefined;\n }\n\n render() {\n const bg = this.background;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n\n const cls: Record<string, boolean> = {\n 'button-unfilled': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected': this.isActive && this.activeFill && !this.isInactive,\n 'ds-interaction-fill--on-faint': bg === 'faint',\n 'ds-interaction-fill--on-medium': bg === 'medium',\n 'ds-interaction-fill--on-bold': bg === 'bold',\n 'ds-interaction-fill--on-strong': bg === 'strong',\n 'ds-interaction-fill--on-translucent': bg === 'translucent',\n 'ds-interaction-fill--on-inverted': bg === 'inverted',\n 'ds-interaction-fill--on-media': bg === 'media',\n 'ds-interaction-fill--on-always-dark': bg === 'always-dark',\n 'button-unfilled--active': this.isActive,\n 'button-unfilled--bordered': this.hasBorder,\n 'button-unfilled--rounded': this.rounded,\n 'ds-control-inactive': this.isInactive,\n 'ds-control--md': this.size === 'md',\n 'ds-control--sm': this.size === 'sm',\n 'ds-control--xs': this.size === 'xs',\n 'button-unfilled--icon': this.variant === 'icon',\n 'button-unfilled--label': this.variant === 'label',\n 'button-unfilled--icon-label': this.variant === 'icon-label',\n 'button-unfilled--background-faint': bg === 'faint',\n 'button-unfilled--background-medium': bg === 'medium',\n 'button-unfilled--background-bold': bg === 'bold',\n 'button-unfilled--background-strong': bg === 'strong',\n 'button-unfilled--background-translucent': bg === 'translucent',\n 'button-unfilled--background-inverted': bg === 'inverted',\n 'button-unfilled--background-media': bg === 'media',\n 'button-unfilled--on-always-dark': bg === 'always-dark',\n };\n\n return (\n <Host\n class={{\n 'button-unfilled-host': true,\n 'button-unfilled-host--icon': this.variant === 'icon',\n 'ds-control--md': this.size === 'md',\n 'ds-control--sm': this.size === 'sm',\n 'ds-control--xs': this.size === 'xs',\n ...controlWidthClass(this.width),\n }}\n tabIndex={-1}\n >\n <button\n ref={el => {\n this.buttonEl = el ?? null;\n }}\n type={this.type}\n class={cls}\n disabled={this.isInactive}\n tabIndex={this.focusTabIndex ?? 0}\n aria-label={this.accessibleName}\n aria-busy={this.isLoading ? 'true' : undefined}\n aria-disabled={this.isLoading ? 'true' : undefined}\n aria-controls={this.controls}\n aria-expanded={this.expanded === undefined ? undefined : String(this.expanded)}\n aria-haspopup={this.haspopup}\n aria-pressed={this.pressed === undefined ? undefined : String(this.pressed)}\n onClick={this.handleClick}\n >\n {this.showIcon && (\n <span class=\"button-unfilled__icon-wrap ds-interaction-fill__content\">\n {this.isLoading\n ? <ds-loader size={iconSize} color=\"inherit\" />\n : <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n }\n {this.showDot && (\n <ds-badge\n class=\"button-unfilled__dot\"\n variant=\"dot\"\n background={this.dotRing}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </span>\n )}\n {this.showLabel && (\n <ds-text\n class={{\n 'button-unfilled__label': true,\n 'button-unfilled__label--loading': this.isLoading && this.variant === 'label',\n 'ds-interaction-fill__content': true,\n }}\n as=\"span\"\n variant={textVariant}\n emphasis\n color=\"inherit\"\n >\n {this.label}\n </ds-text>\n )}\n {this.isLoading && this.variant === 'label' && (\n <span class=\"button-unfilled__loader-overlay ds-interaction-fill__content\">\n <ds-loader size={iconSize} color=\"inherit\" />\n </span>\n )}\n </button>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as d,H as r,h as a,a as e,t as s}from"./index.js";import{d as c}from"./p-BSOZXagj.js";const i=()=>`.sc-ds-card-h{display:flex;flex-direction:column;box-sizing:border-box;width:var(--_card-width);min-height:var(--_card-min-height);max-width:100%;border:none;border-radius:var(--dimension-radius-025);background-color:var(--color-background-primary);box-shadow:0 0 0 var(--dimension-stroke-width-012) var(--color-border-tertiary);overflow:hidden}.card--editing.sc-ds-card-h{background-color:var(--color-background-bold-brand);box-shadow:0 0 0 var(--dimension-stroke-width-025) var(--color-border-bold-brand)}.card__header.sc-ds-card{display:flex;align-items:center;justify-content:space-between;gap:var(--dimension-space-100);height:var(--dimension-size-600);flex-shrink:0;padding:var(--dimension-space-100);background-color:var(--color-background-secondary);border-bottom:var(--dimension-stroke-width-012) solid var(--color-border-tertiary);box-sizing:border-box}.card--editing.sc-ds-card-h .card__header.sc-ds-card{background-color:transparent;border-bottom-color:transparent}ds-text.card__title.sc-ds-card{flex:1 1 auto;min-width:0;display:flex;align-items:center;box-sizing:border-box;padding:calc( var(--dimension-space-075) + var(--dimension-space-025) );-webkit-user-select:none;user-select:none}.card__actions.sc-ds-card{display:flex;flex-shrink:0;align-items:center;gap:var(--dimension-space-100)}.card__actions.sc-ds-card:empty{display:none}.card__body.sc-ds-card{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;border-radius:0 0 var(--dimension-radius-025) var(--dimension-radius-025);background-color:var(--color-background-primary);box-sizing:border-box}.card--editing.sc-ds-card-h .card__body.sc-ds-card{border-radius:var(--dimension-radius-025)}`;const o={sm:"var(--dimension-card-width-sm)",md:"var(--dimension-card-width-md)",lg:"var(--dimension-card-width-lg)"};const n={sm:"var(--dimension-card-height-sm)",md:"var(--dimension-card-height-md)",lg:"var(--dimension-card-height-lg)"};const t="var(--color-foreground-faint-brand)";const b=d(class d extends r{constructor(d){super();if(d!==false){this.__registerHost()}this.cardWidth="md";this.appearance="default"}render(){const d=this.appearance==="editing";return a(e,{key:"3055caae521a796b41d8b63ce7bcfb7eac3c51ac",class:{card:true,"card--editing":d},style:{"--_card-width":o[this.cardWidth],"--_card-min-height":n[this.cardWidth]}},a("header",{key:"ca7b30de6c82ab54bc7e5f7091f0c3f930df46df",class:"card__header"},a("ds-text",{key:"3812e92b3230f5bc6bd9cb3d193beef8c96651fb",class:"card__title",variant:"text-title-small",emphasis:true,color:d?t:"primary",as:"h2"},this.heading),a("div",{key:"1adae95915471e1488e6590b431a2ebd933a26fe",class:"card__actions"},a("slot",{key:"2e38d6d86bb71dd1358dfacc3f557f8fced583b3",name:"actions"}))),a("div",{key:"4524dcd8455b435126d48fab8bb79c144dcac5c3",class:"card__body"},a("slot",{key:"36dad2dba425f36d0fbd7e5cecc2fa563ecdc72b"})))}static get style(){return i()}},[262,"ds-card",{heading:[1],cardWidth:[1,"card-width"],appearance:[1]}]);function l(){if(typeof customElements==="undefined"){return}const d=["ds-card","ds-text"];d.forEach((d=>{switch(d){case"ds-card":if(!customElements.get(s(d))){customElements.define(s(d),b)}break;case"ds-text":if(!customElements.get(s(d))){c()}break}}))}l();export{b as C,l as d};
2
- //# sourceMappingURL=p-CnM9SW_8.js.map
@@ -1,2 +0,0 @@
1
- import{p as s,H as i,c as t,h as e,a as n,t as o}from"./index.js";const r=()=>`:host{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}:host(.ds-focus-ring:focus-visible),.ds-focus-ring:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}:host(.ds-focus-ring.ds-focus-ring--visible),.ds-focus-ring.ds-focus-ring--visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}:host(.ds-focus-ring-inset:focus-visible),.ds-focus-ring-inset:focus-visible{outline:none}:host(.ds-focus-ring-inset:focus-visible)::after,.ds-focus-ring-inset:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}:host(.ds-focus-ring-inset.ds-focus-ring--visible),.ds-focus-ring-inset.ds-focus-ring--visible{outline:none}:host(.ds-focus-ring-inset.ds-focus-ring--visible)::after,.ds-focus-ring-inset.ds-focus-ring--visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}:host(.ds-control-inactive),.ds-control-inactive{opacity:0.25;pointer-events:none;cursor:not-allowed}:host{--ds-switch-width:var(--dimension-size-400);--ds-switch-height:var(--dimension-size-250);--ds-switch-thumb-size:var(--dimension-size-150);--ds-switch-gap:var(--dimension-space-050);--ds-switch-stroke:var(--dimension-stroke-width-015);--ds-switch-inset:var(--ds-switch-gap);--ds-switch-thumb-hover:var(--color-interaction-hover);--ds-switch-thumb-pressed:var(--color-interaction-pressed);--ds-switch-travel:calc( var(--ds-switch-width) - var(--ds-switch-thumb-size) - var(--ds-switch-inset) - var(--ds-switch-inset) );position:relative;display:inline-flex;width:var(--ds-switch-width);height:var(--ds-switch-height);padding:0;border:none;border-radius:var(--dimension-radius-half);box-sizing:border-box;flex-shrink:0;overflow:visible;cursor:pointer;user-select:none;outline:none;background-color:transparent;box-shadow:inset 0 0 0 var(--ds-switch-stroke) var(--color-foreground-tertiary);transition:background-color var(--effect-motion-short-3), box-shadow var(--effect-motion-short-3)}:host(.switch--sm){--ds-switch-width:var(--dimension-size-300);--ds-switch-height:var(--dimension-size-200);--ds-switch-thumb-size:calc(var(--dimension-size-base) * 5 / 4);--ds-switch-gap:calc(var(--dimension-space-025) + var(--dimension-space-012));--ds-switch-stroke:var(--dimension-stroke-width-012)}:host(.switch--xs){--ds-switch-width:var(--dimension-size-250);--ds-switch-height:var(--dimension-size-150);--ds-switch-thumb-size:var(--dimension-size-100);--ds-switch-gap:var(--dimension-space-025);--ds-switch-stroke:calc(var(--dimension-stroke-width-base) * 3 / 32)}:host(.checked){background-color:var(--color-background-bold-brand);box-shadow:none}:host(.switch--readonly),:host(.switch--presentation){cursor:default}:host(.switch--presentation){pointer-events:none}.thumb{position:absolute;top:50%;left:var(--ds-switch-inset);width:var(--ds-switch-thumb-size);height:var(--ds-switch-thumb-size);border-radius:var(--dimension-radius-half);background-color:var(--color-foreground-tertiary);box-shadow:none;transform:translateY(-50%);transition:background-color var(--effect-motion-short-3), transform var(--effect-motion-short-3);pointer-events:none}.thumb::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none}:host(:hover:not(:disabled):not(.ds-control-inactive):not(.switch--readonly):not(.switch--presentation)) .thumb::after{background:var(--ds-switch-thumb-hover)}:host(:active:not(:disabled):not(.ds-control-inactive):not(.switch--readonly):not(.switch--presentation)) .thumb::after{background:var(--ds-switch-thumb-pressed)}:host(.checked) .thumb{background-color:var(--color-background-primary);box-shadow:none;transform:translate3d(var(--ds-switch-travel), -50%, 0)}@media (prefers-reduced-motion: reduce){:host{transition:none}.thumb{transition:none}}`;let a=0;const d=s(class s extends i{constructor(s){super();if(s!==false){this.__registerHost()}this.__attachShadow();this.dsChange=t(this,"dsChange");this.internals=this.attachInternals();this.checked=false;this.value="on";this.disabled=false;this.readOnly=false;this.required=false;this.requiredMessage="This field is required.";this.isInactive=false;this.size="md";this.presentation=false;this.initialChecked=false;this.formDisabled=false;this.focused=false;this.touched=false;this.handleClick=()=>{if(this.presentation||this.readOnly||this.isInactive||this.disabled||this.formDisabled)return;this.checked=!this.checked;this.dsChange.emit(this.checked)};this.handleKeyDown=s=>{if(this.presentation||this.readOnly||this.isInactive||this.disabled||this.formDisabled)return;if(s.key===" "||s.key==="Enter"){s.preventDefault();this.handleClick()}};this.handleFocus=()=>{if(!this.presentation)this.focused=true};this.handleBlur=()=>{if(this.presentation)return;this.focused=false;this.touched=true}}componentWillLoad(){this.initialChecked=this.checked;this.syncFormValue()}componentDidLoad(){this.syncNativeLabels()}syncFormValue(){const s=this.presentation||this.isInactive||this.disabled||this.formDisabled;const i=this.checked?this.value:this.uncheckedValue??null;const t=this.checked?"checked":"unchecked";this.internals.setFormValue(s?null:i,t);const e=this.required&&!s&&!this.checked;this.internals.setValidity(e?{valueMissing:true}:{},e?this.requiredMessage:"")}formDisabledCallback(s){this.formDisabled=s;this.syncFormValue()}formResetCallback(){this.checked=this.initialChecked;this.focused=false;this.touched=false}formStateRestoreCallback(s){this.checked=s==="checked"}syncNativeLabels(){if(this.presentation)return;if(this.el.hasAttribute("aria-label")||this.el.hasAttribute("aria-labelledby"))return;const s=Array.from(this.internals.labels).map((s=>{if(!s.id)s.id=`ds-switch-label-${++a}`;return s.id}));if(s.length)this.el.setAttribute("aria-labelledby",s.join(" "))}render(){const s=this.isInactive||this.disabled||this.formDisabled;const i=this.required&&!s&&!this.checked;const t=this.checked!==this.initialChecked;return e(n,{key:"f208fd374b2360e14e8ee644efe301dfc6444a2b",role:this.presentation?undefined:"switch","aria-checked":this.presentation?undefined:String(this.checked),"aria-disabled":!this.presentation&&s?"true":undefined,"aria-readonly":!this.presentation&&this.readOnly?"true":undefined,"aria-required":!this.presentation&&this.required?"true":undefined,"aria-invalid":!this.presentation&&i?"true":undefined,"aria-hidden":this.presentation?"true":undefined,"data-checked":this.checked?"":undefined,"data-unchecked":!this.checked?"":undefined,"data-disabled":s?"":undefined,"data-readonly":this.readOnly?"":undefined,"data-required":this.required?"":undefined,"data-focused":!this.presentation&&this.focused?"":undefined,"data-filled":!this.presentation&&this.checked?"":undefined,"data-dirty":!this.presentation&&t?"":undefined,"data-touched":!this.presentation&&this.touched?"":undefined,"data-valid":!this.presentation&&!s&&!i?"":undefined,"data-invalid":!this.presentation&&i?"":undefined,tabIndex:this.presentation||s?-1:0,class:{switch:true,checked:this.checked,"switch--md":this.size==="md","switch--sm":this.size==="sm","switch--xs":this.size==="xs","switch--readonly":this.readOnly,"switch--presentation":this.presentation,"ds-focus-ring":true,"ds-control-inactive":s},onClick:this.handleClick,onKeyDown:this.handleKeyDown,onFocus:this.handleFocus,onBlur:this.handleBlur},e("span",{key:"e38f5b412ae538d782fa38b228a037c2dff825c5",class:"thumb"}))}static get formAssociated(){return true}get el(){return this}static get watchers(){return{checked:[{syncFormValue:0}],value:[{syncFormValue:0}],uncheckedValue:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],presentation:[{syncFormValue:0}],required:[{syncFormValue:0}]}}static get style(){return r()}},[65,"ds-switch",{checked:[1028],name:[513],value:[1],uncheckedValue:[1,"unchecked-value"],form:[513],disabled:[516],readOnly:[516,"read-only"],required:[516],requiredMessage:[1,"required-message"],isInactive:[4,"is-inactive"],size:[1],presentation:[4],formDisabled:[32],focused:[32],touched:[32]},undefined,{checked:[{syncFormValue:0}],value:[{syncFormValue:0}],uncheckedValue:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],presentation:[{syncFormValue:0}],required:[{syncFormValue:0}]}]);function h(){if(typeof customElements==="undefined"){return}const s=["ds-switch"];s.forEach((s=>{switch(s){case"ds-switch":if(!customElements.get(o(s))){customElements.define(o(s),d)}break}}))}h();export{d as S,h as d};
2
- //# sourceMappingURL=p-CuKn9I5f.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["switchCss","generatedLabelId","Switch","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","checked","value","disabled","readOnly","required","requiredMessage","isInactive","size","presentation","initialChecked","formDisabled","focused","touched","handleClick","dsChange","emit","handleKeyDown","event","key","preventDefault","handleFocus","handleBlur","componentWillLoad","syncFormValue","componentDidLoad","syncNativeLabels","inactive","submissionValue","uncheckedValue","state","internals","setFormValue","missing","setValidity","valueMissing","formDisabledCallback","formResetCallback","formStateRestoreCallback","el","hasAttribute","labelIds","Array","from","labels","map","label","id","length","setAttribute","join","render","invalid","dirty","h","Host","role","undefined","String","tabIndex","class","switch","onClick","onKeyDown","onFocus","onBlur"],"sources":["src/wc/components/Switch/Switch.css?tag=ds-switch&encapsulation=shadow","src/wc/components/Switch/Switch.tsx"],"sourcesContent":["@import '../../utils/focus-ring.css';\n@import '../../utils/control-inactive.css';\n\n:host {\n --ds-switch-width: var(--dimension-size-400);\n --ds-switch-height: var(--dimension-size-250);\n --ds-switch-thumb-size: var(--dimension-size-150);\n --ds-switch-gap: var(--dimension-space-050);\n --ds-switch-stroke: var(--dimension-stroke-width-015);\n --ds-switch-inset: var(--ds-switch-gap);\n --ds-switch-thumb-hover: var(--color-interaction-hover);\n --ds-switch-thumb-pressed: var(--color-interaction-pressed);\n --ds-switch-travel: calc(\n var(--ds-switch-width) - var(--ds-switch-thumb-size) - var(--ds-switch-inset) -\n var(--ds-switch-inset)\n );\n position: relative;\n display: inline-flex;\n width: var(--ds-switch-width);\n height: var(--ds-switch-height);\n padding: 0;\n border: none;\n border-radius: var(--dimension-radius-half);\n box-sizing: border-box;\n flex-shrink: 0;\n overflow: visible;\n cursor: pointer;\n user-select: none;\n outline: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 var(--ds-switch-stroke) var(--color-foreground-tertiary);\n transition:\n background-color var(--effect-motion-short-3),\n box-shadow var(--effect-motion-short-3);\n}\n\n:host(.switch--sm) {\n --ds-switch-width: var(--dimension-size-300);\n --ds-switch-height: var(--dimension-size-200);\n --ds-switch-thumb-size: calc(var(--dimension-size-base) * 5 / 4);\n --ds-switch-gap: calc(var(--dimension-space-025) + var(--dimension-space-012));\n --ds-switch-stroke: var(--dimension-stroke-width-012);\n}\n\n:host(.switch--xs) {\n --ds-switch-width: var(--dimension-size-250);\n --ds-switch-height: var(--dimension-size-150);\n --ds-switch-thumb-size: var(--dimension-size-100);\n --ds-switch-gap: var(--dimension-space-025);\n --ds-switch-stroke: calc(var(--dimension-stroke-width-base) * 3 / 32);\n}\n\n:host(.checked) {\n background-color: var(--color-background-bold-brand);\n box-shadow: none;\n}\n\n:host(.switch--readonly),\n:host(.switch--presentation) {\n cursor: default;\n}\n\n:host(.switch--presentation) {\n pointer-events: none;\n}\n\n/* Inactive: `.ds-control-inactive` (25% opacity). */\n\n.thumb {\n position: absolute;\n top: 50%;\n left: var(--ds-switch-inset);\n width: var(--ds-switch-thumb-size);\n height: var(--ds-switch-thumb-size);\n border-radius: var(--dimension-radius-half);\n background-color: var(--color-foreground-tertiary);\n box-shadow: none;\n transform: translateY(-50%);\n transition:\n background-color var(--effect-motion-short-3),\n transform var(--effect-motion-short-3);\n pointer-events: none;\n}\n\n.thumb::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: transparent;\n pointer-events: none;\n}\n\n:host(:hover:not(:disabled):not(.ds-control-inactive):not(.switch--readonly):not(.switch--presentation))\n .thumb::after {\n background: var(--ds-switch-thumb-hover);\n}\n\n:host(:active:not(:disabled):not(.ds-control-inactive):not(.switch--readonly):not(.switch--presentation))\n .thumb::after {\n background: var(--ds-switch-thumb-pressed);\n}\n\n:host(.checked) .thumb {\n background-color: var(--color-background-primary);\n box-shadow: none;\n transform: translate3d(var(--ds-switch-travel), -50%, 0);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n transition: none;\n }\n\n .thumb {\n transition: none;\n }\n}\n","import { AttachInternals, Component, Element, Prop, State, Event, EventEmitter, Watch, h, Host } from '@stencil/core';\n\nexport type SwitchSize = 'md' | 'sm' | 'xs';\n\nlet generatedLabelId = 0;\n\n@Component({\n tag: 'ds-switch',\n styleUrl: 'Switch.css',\n shadow: true,\n formAssociated: true,\n})\nexport class Switch {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n /** Current on/off state. The initial value is restored when the owning form resets. */\n @Prop({ mutable: true }) checked: boolean = false;\n\n @Prop({ reflect: true }) name: string | undefined;\n @Prop() value: string = 'on';\n\n /** Optional value submitted when unchecked; omitted by default like a native checkbox. */\n @Prop() uncheckedValue: string | undefined;\n\n /** Associates the switch with a form by id when it is rendered outside that form. */\n @Prop({ reflect: true }) form: string | undefined;\n\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = 'This field is required.';\n @Prop() isInactive: boolean = false;\n\n /** Compact track size for placement inside controls, menus, and form rows. */\n @Prop() size: SwitchSize = 'md';\n\n /**\n * Removes standalone control semantics so a composite owner such as a\n * `menuitemcheckbox` can use the switch as an aria-hidden visual indicator.\n */\n @Prop() presentation: boolean = false;\n\n @Event() dsChange!: EventEmitter<boolean>;\n\n private initialChecked = false;\n @State() private formDisabled = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialChecked = this.checked;\n this.syncFormValue();\n }\n\n componentDidLoad() {\n this.syncNativeLabels();\n }\n\n @Watch('checked')\n @Watch('value')\n @Watch('uncheckedValue')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('presentation')\n @Watch('required')\n syncFormValue() {\n const inactive = this.presentation || this.isInactive || this.disabled || this.formDisabled;\n const submissionValue = this.checked ? this.value : this.uncheckedValue ?? null;\n const state = this.checked ? 'checked' : 'unchecked';\n this.internals.setFormValue(inactive ? null : submissionValue, state);\n\n const missing = this.required && !inactive && !this.checked;\n this.internals.setValidity(missing ? { valueMissing: true } : {}, missing ? this.requiredMessage : '');\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.checked = this.initialChecked;\n this.focused = false;\n this.touched = false;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.checked = state === 'checked';\n }\n\n private syncNativeLabels() {\n if (this.presentation) return;\n if (this.el.hasAttribute('aria-label') || this.el.hasAttribute('aria-labelledby')) return;\n\n const labelIds = (Array.from(this.internals.labels) as HTMLLabelElement[]).map(label => {\n if (!label.id) label.id = `ds-switch-label-${++generatedLabelId}`;\n return label.id;\n });\n if (labelIds.length) this.el.setAttribute('aria-labelledby', labelIds.join(' '));\n }\n\n private handleClick = () => {\n if (this.presentation || this.readOnly || this.isInactive || this.disabled || this.formDisabled) return;\n this.checked = !this.checked;\n this.dsChange.emit(this.checked);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (this.presentation || this.readOnly || this.isInactive || this.disabled || this.formDisabled) return;\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.handleClick();\n }\n };\n\n private handleFocus = () => {\n if (!this.presentation) this.focused = true;\n };\n\n private handleBlur = () => {\n if (this.presentation) return;\n this.focused = false;\n this.touched = true;\n };\n\n render() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const invalid = this.required && !inactive && !this.checked;\n const dirty = this.checked !== this.initialChecked;\n // Switch owns its structural track and thumb strokes so nested interaction layers cannot cover them.\n return (\n <Host\n role={this.presentation ? undefined : 'switch'}\n aria-checked={this.presentation ? undefined : String(this.checked)}\n aria-disabled={!this.presentation && inactive ? 'true' : undefined}\n aria-readonly={!this.presentation && this.readOnly ? 'true' : undefined}\n aria-required={!this.presentation && this.required ? 'true' : undefined}\n aria-invalid={!this.presentation && invalid ? 'true' : undefined}\n aria-hidden={this.presentation ? 'true' : undefined}\n data-checked={this.checked ? '' : undefined}\n data-unchecked={!this.checked ? '' : undefined}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-focused={!this.presentation && this.focused ? '' : undefined}\n data-filled={!this.presentation && this.checked ? '' : undefined}\n data-dirty={!this.presentation && dirty ? '' : undefined}\n data-touched={!this.presentation && this.touched ? '' : undefined}\n data-valid={!this.presentation && !inactive && !invalid ? '' : undefined}\n data-invalid={!this.presentation && invalid ? '' : undefined}\n tabIndex={this.presentation || inactive ? -1 : 0}\n class={{\n switch: true,\n checked: this.checked,\n 'switch--md': this.size === 'md',\n 'switch--sm': this.size === 'sm',\n 'switch--xs': this.size === 'xs',\n 'switch--readonly': this.readOnly,\n 'switch--presentation': this.presentation,\n 'ds-focus-ring': true,\n 'ds-control-inactive': inactive,\n }}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n <span class=\"thumb\" />\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as s,H as e,h as a,a as t,t as d}from"./index.js";import{d as m}from"./p-BSOZXagj.js";const g=()=>`.sc-ds-message-h{display:block;box-sizing:border-box;content-visibility:auto;contain-intrinsic-size:auto var(--dimension-size-800)}.message-host--group-middle.sc-ds-message-h,.message-host--group-last.sc-ds-message-h{margin-block-start:calc(-1 * var(--dimension-space-100))}.message.sc-ds-message{display:grid;grid-template-columns:auto minmax(0, 1fr) auto;align-items:end;gap:0;width:100%;box-sizing:border-box}.message--outgoing.sc-ds-message{grid-template-columns:minmax(0, 1fr) auto}.message--outgoing.sc-ds-message .message__avatar.sc-ds-message{display:none}.message__avatar.sc-ds-message:empty,.message__header.sc-ds-message:empty,.message__footer.sc-ds-message:empty,.message__actions.sc-ds-message:empty{display:none}.message__avatar.sc-ds-message:not(:empty){margin-inline-end:var(--dimension-space-075)}.message__actions.sc-ds-message:not(:empty){margin-inline-start:var(--dimension-space-075)}.message__body.sc-ds-message{display:flex;flex-direction:column;min-width:0;gap:var(--dimension-space-025)}.message--incoming.sc-ds-message .message__body.sc-ds-message{width:100%}.message--outgoing.sc-ds-message .message__body.sc-ds-message{align-items:flex-end}.message--outgoing.sc-ds-message .message__header.sc-ds-message{display:none}.message--system.sc-ds-message .message__body.sc-ds-message{align-items:center}.message__header.sc-ds-message,.message__footer.sc-ds-message,.message__actions.sc-ds-message{display:flex;align-items:center;gap:var(--dimension-space-050)}.message__content.sc-ds-message{width:100%;min-width:0}.message--outgoing.sc-ds-message .message__content.sc-ds-message{display:flex;justify-content:flex-end}.message__footer.sc-ds-message time.sc-ds-message{display:inline-flex}.message--group-middle.sc-ds-message .message__header.sc-ds-message,.message--group-last.sc-ds-message .message__header.sc-ds-message{display:none}.message--group-first.sc-ds-message .message__footer.sc-ds-message,.message--group-middle.sc-ds-message .message__footer.sc-ds-message{display:none}.message--incoming.message--group-first .message__content.sc-ds-message-s>ds-message-bubble,.message--incoming.message--group-first .message__content .sc-ds-message-s>ds-message-bubble{--ds-message-bubble-radius-end-start:var(--dimension-radius-025)}.message--incoming.message--group-middle .message__content.sc-ds-message-s>ds-message-bubble,.message--incoming.message--group-middle .message__content .sc-ds-message-s>ds-message-bubble{--ds-message-bubble-radius-start-start:var(--dimension-radius-025);--ds-message-bubble-radius-end-start:var(--dimension-radius-025)}.message--incoming.message--group-last .message__content.sc-ds-message-s>ds-message-bubble,.message--incoming.message--group-last .message__content .sc-ds-message-s>ds-message-bubble{--ds-message-bubble-radius-start-start:var(--dimension-radius-025)}.message--outgoing.message--group-first .message__content.sc-ds-message-s>ds-message-bubble,.message--outgoing.message--group-first .message__content .sc-ds-message-s>ds-message-bubble{--ds-message-bubble-radius-end-end:var(--dimension-radius-025)}.message--outgoing.message--group-middle .message__content.sc-ds-message-s>ds-message-bubble,.message--outgoing.message--group-middle .message__content .sc-ds-message-s>ds-message-bubble{--ds-message-bubble-radius-start-end:var(--dimension-radius-025);--ds-message-bubble-radius-end-end:var(--dimension-radius-025)}.message--outgoing.message--group-last .message__content.sc-ds-message-s>ds-message-bubble,.message--outgoing.message--group-last .message__content .sc-ds-message-s>ds-message-bubble{--ds-message-bubble-radius-start-end:var(--dimension-radius-025)}`;const i={sending:"Sending",sent:"Sent",delivered:"Delivered",read:"Read",failed:"Failed to send"};const n=s(class s extends e{constructor(s){super();if(s!==false){this.__registerHost()}this.messageId="";this.direction="incoming";this.groupPosition="single";this.author="";this.showAuthor=true;this.timestamp="";this.streaming=false;this.scrollAnchor=false}formattedTimestamp(){if(!this.timestamp)return"";const s=Date.parse(this.timestamp);if(Number.isNaN(s))return this.timestamp;return new Intl.DateTimeFormat(undefined,{hour:"numeric",minute:"2-digit"}).format(new Date(s))}render(){const s=this.deliveryState?i[this.deliveryState]:"";const e=this.formattedTimestamp();return a(t,{key:"42f8bdd011bdd738ef7d113bd994f100b391c2dd",class:`message-host--group-${this.groupPosition}`,"data-message-id":this.messageId||undefined,"data-scroll-anchor":this.scrollAnchor?"true":undefined,"aria-busy":this.streaming?"true":undefined},a("article",{key:"01b8df5379be0487decf943e2d73c09910241d00",class:{message:true,[`message--${this.direction}`]:true,[`message--group-${this.groupPosition}`]:true},"aria-label":this.author?`Message from ${this.author}`:"Message"},a("div",{key:"7bb420d0724833c86113e3c7bdc3f55712aab552",class:"message__avatar"},a("slot",{key:"30c85983392182143bff53343505aef25ef8e50d",name:"avatar"})),a("div",{key:"d3decb559799ebc9e11281536111246e86a77b76",class:"message__body"},a("div",{key:"2e2f4d465f9526432683c348c4435fde00999345",class:"message__header"},a("slot",{key:"af2fc8ef1b6b11ba8f1e3553ed1f57a7f0542584",name:"header"}),this.author&&this.showAuthor?a("ds-text",{as:"span",variant:"text-caption",emphasis:true,color:"secondary"},this.author):null),a("div",{key:"e773abc5b1fd8e633ca26b4dc148364368c6eb38",class:"message__content"},a("slot",{key:"df4da973219f3a985529f9c619200841d6c7bf5d"})),a("div",{key:"f15e7e1842f3fb9055242e32918b8a338562c957",class:"message__footer"},a("slot",{key:"855c700cb42ccc315888795dc5f4fe5de2772c1f",name:"footer"}),s?a("ds-text",{as:"span",variant:"text-caption",color:this.deliveryState==="failed"?"negative":"secondary"},s):null,e?a("time",{dateTime:this.timestamp},a("ds-text",{as:"span",variant:"text-caption",color:"secondary"},e)):null)),a("div",{key:"8d4c754d1e89c84f57db1e32e5fbdec4beda38f8",class:"message__actions"},a("slot",{key:"c21896813faff0055b73b84e63c9c388c5885b69",name:"actions"}))))}static get style(){return g()}},[262,"ds-message",{messageId:[513,"message-id"],direction:[513],groupPosition:[1,"group-position"],author:[1],showAuthor:[4,"show-author"],timestamp:[1],deliveryState:[1,"delivery-state"],streaming:[4],scrollAnchor:[516,"scroll-anchor"]}]);function o(){if(typeof customElements==="undefined"){return}const s=["ds-message","ds-text"];s.forEach((s=>{switch(s){case"ds-message":if(!customElements.get(d(s))){customElements.define(d(s),n)}break;case"ds-text":if(!customElements.get(d(s))){m()}break}}))}o();export{n as M,o as d};
2
- //# sourceMappingURL=p-DFMM60My.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["messageCss","DELIVERY_LABELS","sending","sent","delivered","read","failed","Message","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","messageId","direction","groupPosition","author","showAuthor","timestamp","streaming","scrollAnchor","formattedTimestamp","parsed","Date","parse","Number","isNaN","Intl","DateTimeFormat","undefined","hour","minute","format","render","delivery","deliveryState","h","Host","key","class","message","name","as","variant","emphasis","color","dateTime"],"sources":["src/wc/components/Message/Message.css?tag=ds-message&encapsulation=scoped","src/wc/components/Message/Message.tsx"],"sourcesContent":[":host {\n display: block;\n box-sizing: border-box;\n content-visibility: auto;\n contain-intrinsic-size: auto var(--dimension-size-800);\n}\n\n:host(.message-host--group-middle),\n:host(.message-host--group-last) {\n margin-block-start: calc(-1 * var(--dimension-space-100));\n}\n\n.message {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: end;\n gap: 0;\n width: 100%;\n box-sizing: border-box;\n}\n\n.message--outgoing {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.message--outgoing .message__avatar {\n display: none;\n}\n\n.message__avatar:empty,\n.message__header:empty,\n.message__footer:empty,\n.message__actions:empty {\n display: none;\n}\n\n.message__avatar:not(:empty) {\n margin-inline-end: var(--dimension-space-075);\n}\n\n.message__actions:not(:empty) {\n margin-inline-start: var(--dimension-space-075);\n}\n\n.message__body {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: var(--dimension-space-025);\n}\n\n.message--incoming .message__body {\n width: 100%;\n}\n\n.message--outgoing .message__body {\n align-items: flex-end;\n}\n\n.message--outgoing .message__header {\n display: none;\n}\n\n.message--system .message__body {\n align-items: center;\n}\n\n.message__header,\n.message__footer,\n.message__actions {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-050);\n}\n\n.message__content {\n width: 100%;\n min-width: 0;\n}\n\n.message--outgoing .message__content {\n display: flex;\n justify-content: flex-end;\n}\n\n.message__footer time {\n display: inline-flex;\n}\n\n.message--group-middle .message__header,\n.message--group-last .message__header {\n display: none;\n}\n\n.message--group-first .message__footer,\n.message--group-middle .message__footer {\n display: none;\n}\n\n.message--incoming.message--group-first .message__content ::slotted(ds-message-bubble) {\n --ds-message-bubble-radius-end-start: var(--dimension-radius-025);\n}\n\n.message--incoming.message--group-middle .message__content ::slotted(ds-message-bubble) {\n --ds-message-bubble-radius-start-start: var(--dimension-radius-025);\n --ds-message-bubble-radius-end-start: var(--dimension-radius-025);\n}\n\n.message--incoming.message--group-last .message__content ::slotted(ds-message-bubble) {\n --ds-message-bubble-radius-start-start: var(--dimension-radius-025);\n}\n\n.message--outgoing.message--group-first .message__content ::slotted(ds-message-bubble) {\n --ds-message-bubble-radius-end-end: var(--dimension-radius-025);\n}\n\n.message--outgoing.message--group-middle .message__content ::slotted(ds-message-bubble) {\n --ds-message-bubble-radius-start-end: var(--dimension-radius-025);\n --ds-message-bubble-radius-end-end: var(--dimension-radius-025);\n}\n\n.message--outgoing.message--group-last .message__content ::slotted(ds-message-bubble) {\n --ds-message-bubble-radius-start-end: var(--dimension-radius-025);\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\nimport type {\n MessageDeliveryState,\n MessageDirection,\n MessageGroupPosition,\n} from '../conversation-types';\n\nconst DELIVERY_LABELS: Record<MessageDeliveryState, string> = {\n sending: 'Sending',\n sent: 'Sent',\n delivered: 'Delivered',\n read: 'Read',\n failed: 'Failed to send',\n};\n\n@Component({\n tag: 'ds-message',\n styleUrl: 'Message.css',\n scoped: true,\n})\nexport class Message {\n @Prop({ reflect: true }) messageId: string = '';\n @Prop({ reflect: true }) direction: MessageDirection = 'incoming';\n @Prop() groupPosition: MessageGroupPosition = 'single';\n @Prop() author: string = '';\n /** Keep author semantics while allowing products with self-evident roles to hide the visible label. */\n @Prop() showAuthor: boolean = true;\n /** ISO timestamp. */\n @Prop() timestamp: string = '';\n @Prop() deliveryState: MessageDeliveryState | undefined;\n @Prop() streaming: boolean = false;\n @Prop({ reflect: true }) scrollAnchor: boolean = false;\n\n private formattedTimestamp(): string {\n if (!this.timestamp) return '';\n const parsed = Date.parse(this.timestamp);\n if (Number.isNaN(parsed)) return this.timestamp;\n return new Intl.DateTimeFormat(undefined, {\n hour: 'numeric',\n minute: '2-digit',\n }).format(new Date(parsed));\n }\n\n render() {\n const delivery = this.deliveryState ? DELIVERY_LABELS[this.deliveryState] : '';\n const formattedTimestamp = this.formattedTimestamp();\n return (\n <Host\n class={`message-host--group-${this.groupPosition}`}\n data-message-id={this.messageId || undefined}\n data-scroll-anchor={this.scrollAnchor ? 'true' : undefined}\n aria-busy={this.streaming ? 'true' : undefined}\n >\n <article\n class={{\n message: true,\n [`message--${this.direction}`]: true,\n [`message--group-${this.groupPosition}`]: true,\n }}\n aria-label={this.author ? `Message from ${this.author}` : 'Message'}\n >\n <div class=\"message__avatar\">\n <slot name=\"avatar\" />\n </div>\n <div class=\"message__body\">\n <div class=\"message__header\">\n <slot name=\"header\" />\n {this.author && this.showAuthor ? (\n <ds-text as=\"span\" variant=\"text-caption\" emphasis color=\"secondary\">\n {this.author}\n </ds-text>\n ) : null}\n </div>\n <div class=\"message__content\">\n <slot />\n </div>\n <div class=\"message__footer\">\n <slot name=\"footer\" />\n {delivery ? (\n <ds-text\n as=\"span\"\n variant=\"text-caption\"\n color={this.deliveryState === 'failed' ? 'negative' : 'secondary'}\n >\n {delivery}\n </ds-text>\n ) : null}\n {formattedTimestamp ? (\n <time dateTime={this.timestamp}>\n <ds-text as=\"span\" variant=\"text-caption\" color=\"secondary\">\n {formattedTimestamp}\n </ds-text>\n </time>\n ) : null}\n </div>\n </div>\n <div class=\"message__actions\">\n <slot name=\"actions\" />\n </div>\n </article>\n </Host>\n );\n }\n}\n"],"mappings":"+FAAA,MAAMA,EAAa,IAAM,qjHCOzB,MAAMC,EAAwD,CAC5DC,QAAS,UACTC,KAAM,OACNC,UAAW,YACXC,KAAM,OACNC,OAAQ,kB,MAQGC,EAAOC,EAAA,MAAAD,UAAAE,EALpB,WAAAC,CAAAC,G,4CAM2BC,KAAAC,UAAoB,GACpBD,KAAAE,UAA8B,WAC/CF,KAAAG,cAAsC,SACtCH,KAAAI,OAAiB,GAEjBJ,KAAAK,WAAsB,KAEtBL,KAAAM,UAAoB,GAEpBN,KAAAO,UAAqB,MACJP,KAAAQ,aAAwB,KAwElD,CAtES,kBAAAC,GACN,IAAKT,KAAKM,UAAW,MAAO,GAC5B,MAAMI,EAASC,KAAKC,MAAMZ,KAAKM,WAC/B,GAAIO,OAAOC,MAAMJ,GAAS,OAAOV,KAAKM,UACtC,OAAO,IAAIS,KAAKC,eAAeC,UAAW,CACxCC,KAAM,UACNC,OAAQ,YACPC,OAAO,IAAIT,KAAKD,G,CAGrB,MAAAW,GACE,MAAMC,EAAWtB,KAAKuB,cAAgBlC,EAAgBW,KAAKuB,eAAiB,GAC5E,MAAMd,EAAqBT,KAAKS,qBAChC,OACEe,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,uBAAuB3B,KAAKG,gBAAe,kBACjCH,KAAKC,WAAagB,UAAS,qBACxBjB,KAAKQ,aAAe,OAASS,UAAS,YAC/CjB,KAAKO,UAAY,OAASU,WAErCO,EAAA,WAAAE,IAAA,2CACEC,MAAO,CACLC,QAAS,KACT,CAAC,YAAY5B,KAAKE,aAAc,KAChC,CAAC,kBAAkBF,KAAKG,iBAAkB,MAC3C,aACWH,KAAKI,OAAS,gBAAgBJ,KAAKI,SAAW,WAE1DoB,EAAA,OAAAE,IAAA,2CAAKC,MAAM,mBACTH,EAAA,QAAAE,IAAA,2CAAMG,KAAK,YAEbL,EAAA,OAAAE,IAAA,2CAAKC,MAAM,iBACTH,EAAA,OAAAE,IAAA,2CAAKC,MAAM,mBACTH,EAAA,QAAAE,IAAA,2CAAMG,KAAK,WACV7B,KAAKI,QAAUJ,KAAKK,WACnBmB,EAAA,WAASM,GAAG,OAAOC,QAAQ,eAAeC,SAAQ,KAACC,MAAM,aACtDjC,KAAKI,QAEN,MAENoB,EAAA,OAAAE,IAAA,2CAAKC,MAAM,oBACTH,EAAA,QAAAE,IAAA,8CAEFF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,mBACTH,EAAA,QAAAE,IAAA,2CAAMG,KAAK,WACVP,EACCE,EAAA,WACEM,GAAG,OACHC,QAAQ,eACRE,MAAOjC,KAAKuB,gBAAkB,SAAW,WAAa,aAErDD,GAED,KACHb,EACCe,EAAA,QAAMU,SAAUlC,KAAKM,WACnBkB,EAAA,WAASM,GAAG,OAAOC,QAAQ,eAAeE,MAAM,aAC7CxB,IAGH,OAGRe,EAAA,OAAAE,IAAA,2CAAKC,MAAM,oBACTH,EAAA,QAAAE,IAAA,2CAAMG,KAAK,c","ignoreList":[]}