@ds-mo/ui 12.6.2 → 12.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +44 -115
  2. package/dist/.build-stamp +1 -1
  3. package/dist/agent-patterns.json +5 -3
  4. package/dist/agent.json +56 -32
  5. package/dist/angular/ds-menu.d.ts +1 -1
  6. package/dist/angular/ds-menu.js +3 -3
  7. package/dist/components/ds-agent-activity.js +1 -1
  8. package/dist/components/ds-agent-response.js +1 -1
  9. package/dist/components/ds-agent-source-list.js +1 -1
  10. package/dist/components/ds-agent-tool-call.js +1 -1
  11. package/dist/components/ds-attachment-list.js +1 -1
  12. package/dist/components/ds-badge.js +1 -1
  13. package/dist/components/ds-bar-nav.js +1 -1
  14. package/dist/components/ds-bar-nav.js.map +1 -1
  15. package/dist/components/ds-bar-title.js +1 -1
  16. package/dist/components/ds-bar-title.js.map +1 -1
  17. package/dist/components/ds-bar-workflow.js +1 -1
  18. package/dist/components/ds-bar-workflow.js.map +1 -1
  19. package/dist/components/ds-breadcrumb.js +1 -1
  20. package/dist/components/ds-button-filled.js +1 -1
  21. package/dist/components/ds-button-unfilled.js +1 -1
  22. package/dist/components/ds-card-data-viz-bar.js +1 -1
  23. package/dist/components/ds-card-data-viz-bar.js.map +1 -1
  24. package/dist/components/ds-card-data-viz-donut.js +1 -1
  25. package/dist/components/ds-card-data-viz-donut.js.map +1 -1
  26. package/dist/components/ds-card-data-viz-line.js +1 -1
  27. package/dist/components/ds-card-data-viz-line.js.map +1 -1
  28. package/dist/components/ds-card-setting.js +1 -1
  29. package/dist/components/ds-card-setting.js.map +1 -1
  30. package/dist/components/ds-card-shell-data-viz.js +1 -1
  31. package/dist/components/ds-chart-bar.js +1 -1
  32. package/dist/components/ds-chart-donut.js +1 -1
  33. package/dist/components/ds-chart-legend.js +1 -1
  34. package/dist/components/ds-chart-line.js +1 -1
  35. package/dist/components/ds-checkbox.js +1 -1
  36. package/dist/components/ds-chip.js +1 -1
  37. package/dist/components/ds-code-block.js +1 -1
  38. package/dist/components/ds-conversation-list-item.js +1 -1
  39. package/dist/components/ds-conversation-list-item.js.map +1 -1
  40. package/dist/components/ds-conversation-list-section.js +1 -1
  41. package/dist/components/ds-conversation-list.js +1 -1
  42. package/dist/components/ds-conversation-list.js.map +1 -1
  43. package/dist/components/ds-empty-state.js +1 -1
  44. package/dist/components/ds-field.js +1 -1
  45. package/dist/components/ds-field.js.map +1 -1
  46. package/dist/components/ds-input.js +1 -1
  47. package/dist/components/ds-input.js.map +1 -1
  48. package/dist/components/ds-markdown.js +1 -1
  49. package/dist/components/ds-menu.js +1 -1
  50. package/dist/components/ds-message-composer.js +1 -1
  51. package/dist/components/ds-message-composer.js.map +1 -1
  52. package/dist/components/ds-message-scroller.js +1 -1
  53. package/dist/components/ds-message-scroller.js.map +1 -1
  54. package/dist/components/ds-message.js +1 -1
  55. package/dist/components/ds-mobile-bar-nav.js +1 -1
  56. package/dist/components/ds-mobile-bar-nav.js.map +1 -1
  57. package/dist/components/ds-mobile-header.js +1 -1
  58. package/dist/components/ds-mobile-section-switcher.js +1 -1
  59. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  60. package/dist/components/ds-mobile-sheet-nav.js.map +1 -1
  61. package/dist/components/ds-modal.js +1 -1
  62. package/dist/components/ds-modal.js.map +1 -1
  63. package/dist/components/ds-panel-nav.js +1 -1
  64. package/dist/components/ds-panel-nav.js.map +1 -1
  65. package/dist/components/ds-panel-sub-nav.js +1 -1
  66. package/dist/components/ds-panel-tool-header.js +1 -1
  67. package/dist/components/ds-panel-tool-search.js +1 -1
  68. package/dist/components/ds-panel-tool-search.js.map +1 -1
  69. package/dist/components/ds-panel-tools.js +1 -1
  70. package/dist/components/ds-radio.js +1 -1
  71. package/dist/components/ds-radio.js.map +1 -1
  72. package/dist/components/ds-scroll-overlay.js +1 -1
  73. package/dist/components/ds-scroll-overlay.js.map +1 -1
  74. package/dist/components/ds-select-multi.js +1 -1
  75. package/dist/components/ds-select-multi.js.map +1 -1
  76. package/dist/components/ds-select.js +1 -1
  77. package/dist/components/ds-select.js.map +1 -1
  78. package/dist/components/ds-shell-app.js +1 -1
  79. package/dist/components/ds-shell-app.js.map +1 -1
  80. package/dist/components/ds-shell-gradient-picker.js +1 -1
  81. package/dist/components/ds-shell-gradient-picker.js.map +1 -1
  82. package/dist/components/ds-shell-gradient-swatch.js +1 -1
  83. package/dist/components/ds-shell-page.js +1 -1
  84. package/dist/components/ds-shell-tools.js +1 -1
  85. package/dist/components/ds-shell-tools.js.map +1 -1
  86. package/dist/components/ds-skeleton.js +1 -1
  87. package/dist/components/ds-slider.js +1 -1
  88. package/dist/components/ds-slider.js.map +1 -1
  89. package/dist/components/ds-swatch-picker.js +1 -1
  90. package/dist/components/ds-switch.js +1 -1
  91. package/dist/components/ds-tab-group.js +1 -1
  92. package/dist/components/ds-tag.js +1 -1
  93. package/dist/components/ds-text.js +1 -1
  94. package/dist/components/ds-toast.js +1 -1
  95. package/dist/components/ds-tooltip-data-viz.js +1 -1
  96. package/dist/components/ds-tooltip.js +1 -1
  97. package/dist/components/ds-typing-indicator.js +1 -1
  98. package/dist/components/{p-DwX7UmLl.js → p--eKXTylf.js} +2 -2
  99. package/dist/components/p-1darPzys.js +2 -0
  100. package/dist/components/{p-DXLWm4PF.js.map → p-1darPzys.js.map} +1 -1
  101. package/dist/components/{p-DIoiApa-.js → p-5-QAFB4j.js} +2 -2
  102. package/dist/components/{p-D-xttdpn.js → p-B-9A0e_0.js} +2 -2
  103. package/dist/components/{p-CaRyxTMz.js → p-BT5hgg5i.js} +2 -2
  104. package/dist/components/{p-DQDpDYyF.js → p-B_5nxOeB.js} +2 -2
  105. package/dist/components/p-BcfC6phQ.js +2 -0
  106. package/dist/components/p-BcfC6phQ.js.map +1 -0
  107. package/dist/components/{p-BkAMkjIR.js → p-Bl001G0Y.js} +2 -2
  108. package/dist/components/p-BuiZcSga.js +2 -0
  109. package/dist/components/p-BuiZcSga.js.map +1 -0
  110. package/dist/components/p-Bv9frkvW.js +2 -0
  111. package/dist/components/p-Bv9frkvW.js.map +1 -0
  112. package/dist/components/{p-DWdRSOBV.js → p-C0-K8vnW.js} +2 -2
  113. package/dist/components/p-C61yJkfr.js +2 -0
  114. package/dist/components/p-C61yJkfr.js.map +1 -0
  115. package/dist/components/p-C6xC48hG.js +2 -0
  116. package/dist/components/p-C6xC48hG.js.map +1 -0
  117. package/dist/components/p-C9h13YnX.js +2 -0
  118. package/dist/components/{p-CnHrJTD5.js → p-CUAYsK44.js} +2 -2
  119. package/dist/components/p-C_9ZH0A3.js +2 -0
  120. package/dist/components/p-C_9ZH0A3.js.map +1 -0
  121. package/dist/components/p-Ca9-fnFl.js +2 -0
  122. package/dist/components/p-Ca9-fnFl.js.map +1 -0
  123. package/dist/components/p-CnAkobDW.js +2 -0
  124. package/dist/components/p-CnAkobDW.js.map +1 -0
  125. package/dist/components/{p-CWTih3Gc.js → p-CqWV4Hl_.js} +2 -2
  126. package/dist/components/{p-B9bxDfZV.js → p-Crsn82rz.js} +2 -2
  127. package/dist/components/p-CuwopElg.js +2 -0
  128. package/dist/components/p-CuwopElg.js.map +1 -0
  129. package/dist/components/{p-BwsGYxZx.js → p-CvyTZ4Mg.js} +2 -2
  130. package/dist/components/p-DIa73GJP.js +2 -0
  131. package/dist/components/p-DIa73GJP.js.map +1 -0
  132. package/dist/components/{p-DqubRds2.js → p-DNFd4Ao-.js} +2 -2
  133. package/dist/components/p-De7NquTI.js +2 -0
  134. package/dist/components/p-De7NquTI.js.map +1 -0
  135. package/dist/components/p-DjbTFy2B.js +2 -0
  136. package/dist/components/p-DjbTFy2B.js.map +1 -0
  137. package/dist/components/p-guQ7hv6W.js +2 -0
  138. package/dist/components/p-guQ7hv6W.js.map +1 -0
  139. package/dist/components/{p-BwGnhInj.js → p-k0Hmj1KV.js} +2 -2
  140. package/dist/components/p-pgxlkvUy.js +2 -0
  141. package/dist/docs/components.json +110 -25
  142. package/dist/lib/utils/control-text.d.ts +3 -1
  143. package/dist/lib/utils/index.d.ts +1 -1
  144. package/dist/lib/utils/index.js +8 -0
  145. package/dist/lib/utils/index.js.map +2 -2
  146. package/dist/mcp-data/registry/bar-nav.json +2 -2
  147. package/dist/mcp-data/registry/bar-title.json +2 -2
  148. package/dist/mcp-data/registry/bar-workflow.json +2 -2
  149. package/dist/mcp-data/registry/button-filled.json +5 -4
  150. package/dist/mcp-data/registry/button-unfilled.json +3 -2
  151. package/dist/mcp-data/registry/card-data-viz-bar.json +3 -2
  152. package/dist/mcp-data/registry/card-data-viz-donut.json +3 -2
  153. package/dist/mcp-data/registry/card-data-viz-line.json +3 -2
  154. package/dist/mcp-data/registry/card-setting.json +2 -2
  155. package/dist/mcp-data/registry/card-shell-data-viz.json +2 -2
  156. package/dist/mcp-data/registry/checkbox.json +9 -9
  157. package/dist/mcp-data/registry/conversation-list-item.json +2 -2
  158. package/dist/mcp-data/registry/conversation-list.json +2 -2
  159. package/dist/mcp-data/registry/empty-state.json +5 -1
  160. package/dist/mcp-data/registry/field.json +3 -2
  161. package/dist/mcp-data/registry/input.json +8 -7
  162. package/dist/mcp-data/registry/menu.json +22 -3
  163. package/dist/mcp-data/registry/message-scroller.json +2 -2
  164. package/dist/mcp-data/registry/mobile-bar-nav.json +3 -3
  165. package/dist/mcp-data/registry/mobile-header.json +2 -2
  166. package/dist/mcp-data/registry/mobile-sheet-nav.json +5 -3
  167. package/dist/mcp-data/registry/modal.json +2 -2
  168. package/dist/mcp-data/registry/panel-nav.json +2 -2
  169. package/dist/mcp-data/registry/panel-tool-header.json +2 -2
  170. package/dist/mcp-data/registry/panel-tool-search.json +2 -2
  171. package/dist/mcp-data/registry/panel-tools.json +2 -2
  172. package/dist/mcp-data/registry/radio.json +9 -9
  173. package/dist/mcp-data/registry/registry.json +55 -31
  174. package/dist/mcp-data/registry/select-multi.json +9 -7
  175. package/dist/mcp-data/registry/select.json +9 -7
  176. package/dist/mcp-data/registry/shell-app.json +2 -1
  177. package/dist/mcp-data/registry/shell-tools.json +1 -1
  178. package/dist/mcp-data/registry/skeleton.json +2 -2
  179. package/dist/mcp-data/registry/slider.json +3 -2
  180. package/dist/mcp-data/registry/switch.json +7 -7
  181. package/dist/styles/control-elevation.css +27 -2
  182. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +1 -1
  183. package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
  184. package/dist/types/components/Input/Input.d.ts +1 -1
  185. package/dist/types/components/Menu/Menu.d.ts +4 -1
  186. package/dist/types/components/MobileSheetNav/MobileSheetNav.d.ts +0 -1
  187. package/dist/types/components/Radio/Radio.d.ts +1 -1
  188. package/dist/types/components/Select/Select.d.ts +6 -23
  189. package/dist/types/components/SelectMulti/SelectMulti.d.ts +5 -20
  190. package/dist/types/components/ShellTools/ShellTools.d.ts +1 -0
  191. package/dist/types/components/Switch/Switch.d.ts +1 -1
  192. package/dist/types/components.d.ts +13 -2
  193. package/dist/types/utils/choice-list-parts.d.ts +4 -0
  194. package/dist/types/utils/control-press.d.ts +9 -0
  195. package/dist/types/utils/control-text.d.ts +3 -1
  196. package/dist/types/utils/index.d.ts +1 -1
  197. package/dist/types/utils/select-controller.d.ts +67 -0
  198. package/package.json +1 -1
  199. package/dist/components/p-B9xVWER6.js +0 -2
  200. package/dist/components/p-B9xVWER6.js.map +0 -1
  201. package/dist/components/p-BLea0TrP.js +0 -2
  202. package/dist/components/p-BLea0TrP.js.map +0 -1
  203. package/dist/components/p-BY0PzkUp.js +0 -2
  204. package/dist/components/p-BbgPGF2a.js +0 -2
  205. package/dist/components/p-BbgPGF2a.js.map +0 -1
  206. package/dist/components/p-BhC1YyId.js +0 -2
  207. package/dist/components/p-BhC1YyId.js.map +0 -1
  208. package/dist/components/p-Ccj5Op6E.js +0 -2
  209. package/dist/components/p-CiqnkENu.js +0 -2
  210. package/dist/components/p-CiqnkENu.js.map +0 -1
  211. package/dist/components/p-Cx-ywr1e.js +0 -2
  212. package/dist/components/p-Cx-ywr1e.js.map +0 -1
  213. package/dist/components/p-DPME1wUJ.js +0 -2
  214. package/dist/components/p-DPME1wUJ.js.map +0 -1
  215. package/dist/components/p-DSa0Hnd3.js +0 -2
  216. package/dist/components/p-DSa0Hnd3.js.map +0 -1
  217. package/dist/components/p-DUlqUNbE.js +0 -2
  218. package/dist/components/p-DUlqUNbE.js.map +0 -1
  219. package/dist/components/p-DXLWm4PF.js +0 -2
  220. package/dist/components/p-DYcC5-R9.js +0 -2
  221. package/dist/components/p-DYcC5-R9.js.map +0 -1
  222. package/dist/components/p-DbpfpeQT.js +0 -2
  223. package/dist/components/p-DbpfpeQT.js.map +0 -1
  224. package/dist/components/p-DuFm-ieS.js +0 -2
  225. package/dist/components/p-DuFm-ieS.js.map +0 -1
  226. package/dist/components/p-uQhuDEVt.js +0 -2
  227. package/dist/components/p-uQhuDEVt.js.map +0 -1
  228. /package/dist/components/{p-DwX7UmLl.js.map → p--eKXTylf.js.map} +0 -0
  229. /package/dist/components/{p-DIoiApa-.js.map → p-5-QAFB4j.js.map} +0 -0
  230. /package/dist/components/{p-D-xttdpn.js.map → p-B-9A0e_0.js.map} +0 -0
  231. /package/dist/components/{p-CaRyxTMz.js.map → p-BT5hgg5i.js.map} +0 -0
  232. /package/dist/components/{p-DQDpDYyF.js.map → p-B_5nxOeB.js.map} +0 -0
  233. /package/dist/components/{p-BkAMkjIR.js.map → p-Bl001G0Y.js.map} +0 -0
  234. /package/dist/components/{p-DWdRSOBV.js.map → p-C0-K8vnW.js.map} +0 -0
  235. /package/dist/components/{p-Ccj5Op6E.js.map → p-C9h13YnX.js.map} +0 -0
  236. /package/dist/components/{p-CnHrJTD5.js.map → p-CUAYsK44.js.map} +0 -0
  237. /package/dist/components/{p-CWTih3Gc.js.map → p-CqWV4Hl_.js.map} +0 -0
  238. /package/dist/components/{p-B9bxDfZV.js.map → p-Crsn82rz.js.map} +0 -0
  239. /package/dist/components/{p-BwsGYxZx.js.map → p-CvyTZ4Mg.js.map} +0 -0
  240. /package/dist/components/{p-DqubRds2.js.map → p-DNFd4Ao-.js.map} +0 -0
  241. /package/dist/components/{p-BwGnhInj.js.map → p-k0Hmj1KV.js.map} +0 -0
  242. /package/dist/components/{p-BY0PzkUp.js.map → p-pgxlkvUy.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-07-26T04:15:23",
2
+ "timestamp": "2026-07-26T22:57:55",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.43.5",
@@ -3360,10 +3360,10 @@
3360
3360
  },
3361
3361
  {
3362
3362
  "name": "size",
3363
- "type": "\"md\" | \"sm\" | \"xs\"",
3363
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
3364
3364
  "complexType": {
3365
3365
  "original": "ButtonFilledSize",
3366
- "resolved": "\"md\" | \"sm\" | \"xs\"",
3366
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
3367
3367
  "references": {
3368
3368
  "ButtonFilledSize": {
3369
3369
  "location": "local",
@@ -3384,6 +3384,10 @@
3384
3384
  ],
3385
3385
  "default": "'md'",
3386
3386
  "values": [
3387
+ {
3388
+ "value": "lg",
3389
+ "type": "string"
3390
+ },
3387
3391
  {
3388
3392
  "value": "md",
3389
3393
  "type": "string"
@@ -6674,10 +6678,10 @@
6674
6678
  },
6675
6679
  {
6676
6680
  "name": "size",
6677
- "type": "\"md\" | \"sm\" | \"xs\"",
6681
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
6678
6682
  "complexType": {
6679
6683
  "original": "CheckboxSize",
6680
- "resolved": "\"md\" | \"sm\" | \"xs\"",
6684
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
6681
6685
  "references": {
6682
6686
  "CheckboxSize": {
6683
6687
  "location": "local",
@@ -6698,6 +6702,10 @@
6698
6702
  ],
6699
6703
  "default": "'md'",
6700
6704
  "values": [
6705
+ {
6706
+ "value": "lg",
6707
+ "type": "string"
6708
+ },
6701
6709
  {
6702
6710
  "value": "md",
6703
6711
  "type": "string"
@@ -9251,10 +9259,10 @@
9251
9259
  },
9252
9260
  {
9253
9261
  "name": "size",
9254
- "type": "\"md\" | \"sm\" | \"xs\"",
9262
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
9255
9263
  "complexType": {
9256
9264
  "original": "InputSize",
9257
- "resolved": "\"md\" | \"sm\" | \"xs\"",
9265
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
9258
9266
  "references": {
9259
9267
  "InputSize": {
9260
9268
  "location": "local",
@@ -9275,6 +9283,10 @@
9275
9283
  ],
9276
9284
  "default": "'md'",
9277
9285
  "values": [
9286
+ {
9287
+ "value": "lg",
9288
+ "type": "string"
9289
+ },
9278
9290
  {
9279
9291
  "value": "md",
9280
9292
  "type": "string"
@@ -10461,6 +10473,54 @@
10461
10473
  "required": false,
10462
10474
  "getter": false,
10463
10475
  "setter": false
10476
+ },
10477
+ {
10478
+ "name": "size",
10479
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
10480
+ "complexType": {
10481
+ "original": "MenuSize",
10482
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
10483
+ "references": {
10484
+ "MenuSize": {
10485
+ "location": "local",
10486
+ "path": "/home/runner/work/compomo/compomo/src/wc/components/Menu/Menu.tsx",
10487
+ "id": "src/wc/components/Menu/Menu.tsx::MenuSize"
10488
+ }
10489
+ }
10490
+ },
10491
+ "mutable": false,
10492
+ "attr": "size",
10493
+ "reflectToAttr": false,
10494
+ "docs": "Choice-row density.",
10495
+ "docsTags": [
10496
+ {
10497
+ "name": "default",
10498
+ "text": "'md'"
10499
+ }
10500
+ ],
10501
+ "default": "'md'",
10502
+ "values": [
10503
+ {
10504
+ "value": "lg",
10505
+ "type": "string"
10506
+ },
10507
+ {
10508
+ "value": "md",
10509
+ "type": "string"
10510
+ },
10511
+ {
10512
+ "value": "sm",
10513
+ "type": "string"
10514
+ },
10515
+ {
10516
+ "value": "xs",
10517
+ "type": "string"
10518
+ }
10519
+ ],
10520
+ "optional": false,
10521
+ "required": false,
10522
+ "getter": false,
10523
+ "setter": false
10464
10524
  }
10465
10525
  ],
10466
10526
  "methods": [],
@@ -16215,10 +16275,10 @@
16215
16275
  },
16216
16276
  {
16217
16277
  "name": "size",
16218
- "type": "\"md\" | \"sm\" | \"xs\"",
16278
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
16219
16279
  "complexType": {
16220
16280
  "original": "RadioSize",
16221
- "resolved": "\"md\" | \"sm\" | \"xs\"",
16281
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
16222
16282
  "references": {
16223
16283
  "RadioSize": {
16224
16284
  "location": "local",
@@ -16239,6 +16299,10 @@
16239
16299
  ],
16240
16300
  "default": "'md'",
16241
16301
  "values": [
16302
+ {
16303
+ "value": "lg",
16304
+ "type": "string"
16305
+ },
16242
16306
  {
16243
16307
  "value": "md",
16244
16308
  "type": "string"
@@ -17250,10 +17314,10 @@
17250
17314
  },
17251
17315
  {
17252
17316
  "name": "size",
17253
- "type": "\"md\" | \"sm\" | \"xs\"",
17317
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
17254
17318
  "complexType": {
17255
17319
  "original": "SelectSize",
17256
- "resolved": "\"md\" | \"sm\" | \"xs\"",
17320
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
17257
17321
  "references": {
17258
17322
  "SelectSize": {
17259
17323
  "location": "local",
@@ -17274,6 +17338,10 @@
17274
17338
  ],
17275
17339
  "default": "'md'",
17276
17340
  "values": [
17341
+ {
17342
+ "value": "lg",
17343
+ "type": "string"
17344
+ },
17277
17345
  {
17278
17346
  "value": "md",
17279
17347
  "type": "string"
@@ -18291,10 +18359,10 @@
18291
18359
  },
18292
18360
  {
18293
18361
  "name": "size",
18294
- "type": "\"md\" | \"sm\" | \"xs\"",
18362
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
18295
18363
  "complexType": {
18296
18364
  "original": "SelectMultiSize",
18297
- "resolved": "\"md\" | \"sm\" | \"xs\"",
18365
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
18298
18366
  "references": {
18299
18367
  "SelectMultiSize": {
18300
18368
  "location": "local",
@@ -18315,6 +18383,10 @@
18315
18383
  ],
18316
18384
  "default": "'md'",
18317
18385
  "values": [
18386
+ {
18387
+ "value": "lg",
18388
+ "type": "string"
18389
+ },
18318
18390
  {
18319
18391
  "value": "md",
18320
18392
  "type": "string"
@@ -20120,10 +20192,10 @@
20120
20192
  },
20121
20193
  {
20122
20194
  "name": "controlSize",
20123
- "type": "\"md\" | \"sm\" | \"xs\"",
20195
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
20124
20196
  "complexType": {
20125
20197
  "original": "ControlSize",
20126
- "resolved": "\"md\" | \"sm\" | \"xs\"",
20198
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
20127
20199
  "references": {
20128
20200
  "ControlSize": {
20129
20201
  "location": "import",
@@ -20145,6 +20217,10 @@
20145
20217
  ],
20146
20218
  "default": "'md'",
20147
20219
  "values": [
20220
+ {
20221
+ "value": "lg",
20222
+ "type": "string"
20223
+ },
20148
20224
  {
20149
20225
  "value": "md",
20150
20226
  "type": "string"
@@ -21817,10 +21893,10 @@
21817
21893
  },
21818
21894
  {
21819
21895
  "name": "size",
21820
- "type": "\"md\" | \"sm\" | \"xs\"",
21896
+ "type": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
21821
21897
  "complexType": {
21822
21898
  "original": "SwitchSize",
21823
- "resolved": "\"md\" | \"sm\" | \"xs\"",
21899
+ "resolved": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
21824
21900
  "references": {
21825
21901
  "SwitchSize": {
21826
21902
  "location": "local",
@@ -21841,6 +21917,10 @@
21841
21917
  ],
21842
21918
  "default": "'md'",
21843
21919
  "values": [
21920
+ {
21921
+ "value": "lg",
21922
+ "type": "string"
21923
+ },
21844
21924
  {
21845
21925
  "value": "md",
21846
21926
  "type": "string"
@@ -24411,7 +24491,7 @@
24411
24491
  "path": "src/wc/components/ButtonFilled/ButtonFilled.tsx"
24412
24492
  },
24413
24493
  "src/wc/components/ButtonFilled/ButtonFilled.tsx::ButtonFilledSize": {
24414
- "declaration": "export type ButtonFilledSize = 'md' | 'sm' | 'xs';",
24494
+ "declaration": "export type ButtonFilledSize = 'lg' | 'md' | 'sm' | 'xs';",
24415
24495
  "docstring": "",
24416
24496
  "path": "src/wc/components/ButtonFilled/ButtonFilled.tsx"
24417
24497
  },
@@ -24516,7 +24596,7 @@
24516
24596
  "path": "src/wc/components/ChartLegend/ChartLegend.tsx"
24517
24597
  },
24518
24598
  "src/wc/components/Checkbox/Checkbox.tsx::CheckboxSize": {
24519
- "declaration": "export type CheckboxSize = 'md' | 'sm' | 'xs';",
24599
+ "declaration": "export type CheckboxSize = 'lg' | 'md' | 'sm' | 'xs';",
24520
24600
  "docstring": "",
24521
24601
  "path": "src/wc/components/Checkbox/Checkbox.tsx"
24522
24602
  },
@@ -24561,7 +24641,7 @@
24561
24641
  "path": "src/wc/components/Input/Input.tsx"
24562
24642
  },
24563
24643
  "src/wc/components/Input/Input.tsx::InputSize": {
24564
- "declaration": "export type InputSize = 'md' | 'sm' | 'xs';",
24644
+ "declaration": "export type InputSize = 'lg' | 'md' | 'sm' | 'xs';",
24565
24645
  "docstring": "",
24566
24646
  "path": "src/wc/components/Input/Input.tsx"
24567
24647
  },
@@ -24585,6 +24665,11 @@
24585
24665
  "docstring": "",
24586
24666
  "path": "src/wc/components/Menu/menu-types.ts"
24587
24667
  },
24668
+ "src/wc/components/Menu/Menu.tsx::MenuSize": {
24669
+ "declaration": "export type ControlSize = 'lg' | 'md' | 'sm' | 'xs';",
24670
+ "docstring": "",
24671
+ "path": "src/wc/components/Menu/Menu.tsx"
24672
+ },
24588
24673
  "src/wc/components/Menu/Menu.tsx::MenuSelectionMode": {
24589
24674
  "declaration": "export type MenuSelectionMode = 'none' | 'single';",
24590
24675
  "docstring": "",
@@ -24646,7 +24731,7 @@
24646
24731
  "path": "src/wc/components/Radio/Radio.tsx"
24647
24732
  },
24648
24733
  "src/wc/components/Radio/Radio.tsx::RadioSize": {
24649
- "declaration": "export type RadioSize = 'md' | 'sm' | 'xs';",
24734
+ "declaration": "export type RadioSize = 'lg' | 'md' | 'sm' | 'xs';",
24650
24735
  "docstring": "",
24651
24736
  "path": "src/wc/components/Radio/Radio.tsx"
24652
24737
  },
@@ -24666,7 +24751,7 @@
24666
24751
  "path": "src/wc/components/Select/Select.tsx"
24667
24752
  },
24668
24753
  "src/wc/components/Select/Select.tsx::SelectSize": {
24669
- "declaration": "export type SelectSize = 'md' | 'sm' | 'xs';",
24754
+ "declaration": "export type SelectSize = 'lg' | 'md' | 'sm' | 'xs';",
24670
24755
  "docstring": "",
24671
24756
  "path": "src/wc/components/Select/Select.tsx"
24672
24757
  },
@@ -24691,7 +24776,7 @@
24691
24776
  "path": "src/wc/components/SelectMulti/SelectMulti.tsx"
24692
24777
  },
24693
24778
  "src/wc/components/SelectMulti/SelectMulti.tsx::SelectMultiSize": {
24694
- "declaration": "export type SelectSize = 'md' | 'sm' | 'xs';",
24779
+ "declaration": "export type SelectSize = 'lg' | 'md' | 'sm' | 'xs';",
24695
24780
  "docstring": "",
24696
24781
  "path": "src/wc/components/SelectMulti/SelectMulti.tsx"
24697
24782
  },
@@ -24716,7 +24801,7 @@
24716
24801
  "path": "src/wc/components/Text/text-types.ts"
24717
24802
  },
24718
24803
  "src/wc/utils/control-text.ts::ControlSize": {
24719
- "declaration": "export type ControlSize = 'md' | 'sm' | 'xs';",
24804
+ "declaration": "export type ControlSize = 'lg' | 'md' | 'sm' | 'xs';",
24720
24805
  "docstring": "",
24721
24806
  "path": "src/wc/utils/control-text.ts"
24722
24807
  },
@@ -24746,7 +24831,7 @@
24746
24831
  "path": "src/wc/components/Slider/Slider.tsx"
24747
24832
  },
24748
24833
  "src/wc/components/Switch/Switch.tsx::SwitchSize": {
24749
- "declaration": "export type SwitchSize = 'md' | 'sm' | 'xs';",
24834
+ "declaration": "export type SwitchSize = 'lg' | 'md' | 'sm' | 'xs';",
24750
24835
  "docstring": "",
24751
24836
  "path": "src/wc/components/Switch/Switch.tsx"
24752
24837
  },
@@ -1,5 +1,7 @@
1
1
  import type { TextVariant } from '../components/Text/text-types';
2
2
  /** Shared public control sizes. Typography is derived; it is not a separate density API. */
3
- export type ControlSize = 'md' | 'sm' | 'xs';
3
+ export type ControlSize = 'lg' | 'md' | 'sm' | 'xs';
4
4
  /** Complete text variant selected internally by each control size. */
5
5
  export declare const CONTROL_TEXT_VARIANT: Record<ControlSize, TextVariant>;
6
+ /** Supporting copy paired with each control density in two-line choice rows. */
7
+ export declare const CONTROL_SUPPORTING_TEXT_VARIANT: Record<ControlSize, TextVariant>;
@@ -12,7 +12,7 @@ export type { TokenDefaultKey } from './token-defaults';
12
12
  export { DEFAULT_REQUIRED_MESSAGE, setRequiredValidity } from './required-validity';
13
13
  export { controlWidthClass } from './control-width';
14
14
  export type { ControlWidth } from './control-width';
15
- export { CONTROL_TEXT_VARIANT } from './control-text';
15
+ export { CONTROL_SUPPORTING_TEXT_VARIANT, CONTROL_TEXT_VARIANT } from './control-text';
16
16
  export type { ControlSize } from './control-text';
17
17
  export { choicePopupMinWidth, resolveChoicePopupAlignOffset, } from './choice-popup-alignment';
18
18
  export type { ChoicePopupAnchorAlignment } from './choice-popup-alignment';
@@ -338,10 +338,17 @@ function controlWidthClass(width) {
338
338
 
339
339
  // src/wc/utils/control-text.ts
340
340
  var CONTROL_TEXT_VARIANT = {
341
+ lg: "text-body-large",
341
342
  md: "text-body-medium",
342
343
  sm: "text-body-small",
343
344
  xs: "text-caption"
344
345
  };
346
+ var CONTROL_SUPPORTING_TEXT_VARIANT = {
347
+ lg: "text-body-medium",
348
+ md: "text-body-small",
349
+ sm: "text-caption",
350
+ xs: "text-caption"
351
+ };
345
352
 
346
353
  // src/wc/utils/choice-popup-alignment.ts
347
354
  function resolveChoicePopupAlignOffset({
@@ -357,6 +364,7 @@ function choicePopupMinWidth(anchorWidth, sectionInsetPx) {
357
364
  return anchorWidth + sectionInsetPx * 2;
358
365
  }
359
366
  export {
367
+ CONTROL_SUPPORTING_TEXT_VARIANT,
360
368
  CONTROL_TEXT_VARIANT,
361
369
  DEFAULT_REQUIRED_MESSAGE,
362
370
  SCROLL_EDGE_FADE_DEFAULT_SIZE,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/wc/components/Icon/icon-cache.ts", "../../../src/wc/utils/resolve-css-length-px.ts", "../../../src/wc/utils/format-compact-number.ts", "../../../src/wc/utils/format-percentage.ts", "../../../src/wc/utils/truncate-svg-text.ts", "../../../src/wc/utils/resolve-css-time-ms.ts", "../../../src/wc/utils/scroll-edge-fade.ts", "../../../src/wc/utils/token-defaults.ts", "../../../src/wc/utils/required-validity.ts", "../../../src/wc/utils/control-width.ts", "../../../src/wc/utils/control-text.ts", "../../../src/wc/utils/choice-popup-alignment.ts"],
4
- "sourcesContent": ["/**\n * Shared SVG glyph cache for ds-icon.\n *\n * Keyed on a global symbol so every module instance (the compiled Stencil chunk\n * inside dist/components and any direct source import, e.g. via `@ds-mo/ui/utils`)\n * reads and writes the same cache. Without this, `registerIcons` called from an\n * app would fill a different Map than the one ds-icon resolves from.\n */\nconst CACHE_KEY = Symbol.for('ds-mo.icon-svg-cache');\n\ntype IconCacheMap = Map<string, string>;\n\ntype GlobalWithIconCache = { [CACHE_KEY]?: IconCacheMap };\n\nexport function iconCacheKey(name: string, flag: boolean): string {\n return flag ? `flag:${name}` : `system:${name}`;\n}\n\nexport function iconCache(): IconCacheMap {\n const g = globalThis as GlobalWithIconCache;\n return (g[CACHE_KEY] ??= new Map());\n}\n\n/**\n * Pre-register glyphs so ds-icon renders them synchronously \u2014 no lazy-chunk\n * fetch, no first-paint pop-in. Import the SVG strings from `@ds-mo/icons`\n * in the app (statically, so they ship in the app's own bundle):\n *\n * ```ts\n * import { Bell } from '@ds-mo/icons/svg/Bell';\n * import { FlagUnitedStates } from '@ds-mo/icons/svg/flags/FlagUnitedStates';\n * import { registerIcons } from '@ds-mo/ui/utils';\n *\n * registerIcons({ Bell });\n * registerIcons({ FlagUnitedStates });\n * ```\n *\n * Icons that are not registered still work \u2014 they lazy-load on first render\n * and stay cached afterwards.\n */\nexport function registerIcons(icons: Record<string, string>, options?: { flag?: boolean }): void {\n const cache = iconCache();\n for (const [name, svg] of Object.entries(icons)) {\n const flag = options?.flag ?? name.startsWith('Flag');\n cache.set(iconCacheKey(name, flag), svg);\n }\n}\n", "const lengthPxCache = new Map<string, number>();\n\nlet probeEl: HTMLElement | null = null;\n\nfunction getProbeElement(): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n\n if (!probeEl) {\n probeEl = document.createElement('div');\n probeEl.setAttribute('aria-hidden', 'true');\n probeEl.style.cssText =\n 'position:absolute;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:0;overflow:hidden;';\n document.documentElement.appendChild(probeEl);\n }\n\n return probeEl;\n}\n\n/** Clear session cache (tests only). */\nexport function clearCssLengthPxCache(): void {\n lengthPxCache.clear();\n}\n\n/**\n * Resolve a CSS length to pixels for layout math.\n * Numbers pass through; `var(--dimension-*)`, `calc(...)`, and `16px` resolve via a hidden probe.\n */\nexport function resolveCssLengthPx(\n value: number | string | undefined,\n fallback: number | string,\n): number {\n const resolved = value === undefined || value === null || value === '' ? fallback : value;\n if (typeof resolved === 'number') return resolved;\n\n const trimmed = resolved.trim();\n if (!trimmed) return resolveCssLengthPx(fallback, 0);\n\n const cached = lengthPxCache.get(trimmed);\n if (cached !== undefined) return cached;\n\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n const n = Number(trimmed);\n lengthPxCache.set(trimmed, n);\n return n;\n }\n\n const pxMatch = trimmed.match(/^(-?\\d+(\\.\\d+)?)px$/);\n if (pxMatch) {\n const px = parseFloat(pxMatch[1]);\n lengthPxCache.set(trimmed, px);\n return px;\n }\n\n const cssLength = /^--[\\w-]+$/.test(trimmed) ? `var(${trimmed})` : trimmed;\n\n const probe = getProbeElement();\n if (!probe) {\n return typeof fallback === 'number' ? fallback : 0;\n }\n\n probe.style.width = cssLength;\n const px = probe.getBoundingClientRect().width;\n probe.style.width = '';\n // A stylesheet can finish loading after a custom element's first layout\n // pass (notably in WebKit). Do not permanently cache the probe's temporary\n // zero when the length depends on a custom property; a later call must be\n // able to resolve the now-available token.\n if (px !== 0 || !cssLength.includes('var(')) {\n lengthPxCache.set(trimmed, px);\n }\n return px;\n}\n", "const COMPACT_UNITS: { threshold: number; suffix: string }[] = [\n { threshold: 1_000_000_000, suffix: 'b' },\n { threshold: 1_000_000, suffix: 'm' },\n { threshold: 1_000, suffix: 'k' },\n];\n\n/** Compact large numbers for display: 1000 -> \"1k\", 1500 -> \"1.5k\", 110100 -> \"110.1k\", 1000000 -> \"1m\". */\nexport function formatCompactNumber(value: number, locale?: string): string {\n if (locale) {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n compactDisplay: 'short',\n maximumFractionDigits: 1,\n }).format(value);\n }\n const sign = value < 0 ? '-' : '';\n const abs = Math.abs(value);\n if (abs < 1000) return String(value);\n\n for (let i = 0; i < COMPACT_UNITS.length; i++) {\n const unit = COMPACT_UNITS[i];\n if (abs < unit.threshold) continue;\n\n let scaled = Math.round((abs / unit.threshold) * 10) / 10;\n // Carry over, e.g. 999.96k rounds to \"1000k\" \u2014 bump to the next unit instead.\n if (scaled >= 1000 && i > 0) {\n const next = COMPACT_UNITS[i - 1];\n scaled = Math.round((abs / next.threshold) * 10) / 10;\n return `${sign}${scaled}${next.suffix}`;\n }\n return `${sign}${scaled}${unit.suffix}`;\n }\n return String(value);\n}\n", "export type PercentageDecimals = 1 | 2;\n\n/** Format a ratio as a locale-aware percentage with an exact, supported precision. */\nexport function formatPercentage(\n ratio: number,\n decimals: PercentageDecimals = 1,\n locale?: string,\n): string {\n const precision = decimals === 2 ? 2 : 1;\n const value = Number.isFinite(ratio) ? ratio : 0;\n\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }).format(value);\n}\n", "/**\n * Binary-searches the longest prefix of `text` (plus an ellipsis) that fits within `maxWidth`\n * px when rendered by `el`, using the SVG `getComputedTextLength()` API for exact measurement \u2014\n * `text-overflow: ellipsis` doesn't apply to raw SVG `<text>` nodes.\n *\n * Mutates `el.textContent` during measurement; the caller's next render (driven by the\n * returned string going into state) overwrites it with the final value.\n */\nexport function truncateSvgTextToWidth(el: SVGTextElement, text: string, maxWidth: number): string {\n el.textContent = text;\n if (maxWidth <= 0 || el.getComputedTextLength() <= maxWidth) return text;\n\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = Math.ceil((lo + hi) / 2);\n el.textContent = `${text.slice(0, mid)}\u2026`;\n if (el.getComputedTextLength() <= maxWidth) {\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n return lo > 0 ? `${text.slice(0, lo)}\u2026` : '\u2026';\n}\n", "/** Parse a CSS <time> value (or motion shorthand's first token) to milliseconds. */\nexport function parseCssTimeMs(value: string, fallback: number): number {\n const firstToken = value.trim().split(/\\s+/)[0] ?? '';\n const num = parseFloat(firstToken);\n if (Number.isNaN(num)) return fallback;\n if (/ms\\s*$/.test(firstToken)) return num;\n if (/s\\s*$/.test(firstToken)) return num * 1000;\n return num;\n}\n\nfunction extractCssCustomProp(ref: string): string | null {\n const varMatch = ref.match(/^var\\(\\s*(--[^),]+)/);\n if (varMatch) return varMatch[1].trim();\n if (ref.startsWith('--')) return ref.trim();\n return null;\n}\n\nfunction readTokenTimeMs(token: string, fallback: number): number {\n if (typeof document === 'undefined') return fallback;\n\n const prop = extractCssCustomProp(token);\n if (!prop) return parseCssTimeMs(token, fallback);\n\n const raw = getComputedStyle(document.documentElement).getPropertyValue(prop).trim();\n return parseCssTimeMs(raw, fallback);\n}\n\n/**\n * Resolve a duration to milliseconds for JS timers aligned with CSS motion tokens.\n * Accepts numbers (ms), raw times (`200ms`, `0.75s`), or `var(--effect-*)` references.\n */\nexport function resolveCssTimeMs(\n value: number | string | undefined,\n fallbackToken: string,\n): number {\n if (typeof value === 'number') return value;\n\n const token = typeof value === 'string' && value.trim() ? value.trim() : fallbackToken;\n const prop = extractCssCustomProp(token);\n\n if (prop) {\n return readTokenTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n }\n\n return parseCssTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n}\n\n/** Whether the user has requested reduced non-essential motion. */\nexport function prefersReducedMotion(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Resolve an animation-coupled duration. Returns zero under reduced motion so\n * JS cleanup stays synchronized with CSS that removes the corresponding motion.\n */\nexport function resolveMotionTimeMs(\n value: number | string | undefined,\n fallbackToken: string,\n): number {\n return prefersReducedMotion() ? 0 : resolveCssTimeMs(value, fallbackToken);\n}\n", "/** CSS custom property for scroll-edge fade depth (dimension token or length). */\nexport const SCROLL_EDGE_FADE_SIZE_VAR = '--ds-scroll-edge-fade-size';\n\nexport const SCROLL_EDGE_FADE_DEFAULT_SIZE = 'var(--dimension-size-600)';\n\nexport type ScrollEdgeFadeEdge = 'top' | 'bottom' | 'left' | 'right';\n\nexport type ScrollEdgeFadeSizeToken =\n | 'size-000'\n | 'size-050'\n | 'size-075'\n | 'size-100'\n | 'size-150'\n | 'size-200'\n | 'size-250'\n | 'size-300'\n | 'size-400'\n | 'size-500'\n | 'size-600'\n | 'size-800';\n\nexport type ScrollEdgeFadeSize = ScrollEdgeFadeSizeToken | (string & {});\n\nconst SIZE_VALUE: Record<ScrollEdgeFadeSizeToken, string> = {\n 'size-000': 'var(--dimension-size-000)',\n 'size-050': 'var(--dimension-size-050)',\n 'size-075': 'var(--dimension-size-075)',\n 'size-100': 'var(--dimension-size-100)',\n 'size-150': 'var(--dimension-size-150)',\n 'size-200': 'var(--dimension-size-200)',\n 'size-250': 'var(--dimension-size-250)',\n 'size-300': 'var(--dimension-size-300)',\n 'size-400': 'var(--dimension-size-400)',\n 'size-500': 'var(--dimension-size-500)',\n 'size-600': 'var(--dimension-size-600)',\n 'size-800': 'var(--dimension-size-800)',\n};\n\nconst SIZE_REF = `var(${SCROLL_EDGE_FADE_SIZE_VAR}, ${SCROLL_EDGE_FADE_DEFAULT_SIZE})`;\n\nexport interface ScrollEdgeFadeOptions {\n /** One or more edges to fade. */\n edges: ScrollEdgeFadeEdge | ScrollEdgeFadeEdge[];\n /**\n * Reveal and hide configured fades from the container's own scroll position.\n * Uses CSS scroll-driven animations with a static-fade fallback; no listener required.\n */\n scrollAware?: boolean;\n /**\n * When true, removes the complete mask. Pass a map to remove only configured\n * edges that are flush when scroll state already lives in JavaScript.\n */\n atEnd?: boolean | Partial<Record<ScrollEdgeFadeEdge, boolean>>;\n /** Force the mask off regardless of scroll position (`ds-fade` `visible={false}`). */\n hidden?: boolean;\n}\n\n/** Resolve a dimension size token name or raw CSS length for `--ds-scroll-edge-fade-size`. */\nexport function resolveScrollEdgeFadeSize(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string,\n): string {\n if (height) return height;\n return Object.prototype.hasOwnProperty.call(SIZE_VALUE, size)\n ? SIZE_VALUE[size as ScrollEdgeFadeSizeToken]\n : size;\n}\n\n/** Inline style map setting fade depth on a scroll container. */\nexport function scrollEdgeFadeSizeStyle(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string,\n): Record<string, string> {\n return {\n [SCROLL_EDGE_FADE_SIZE_VAR]: resolveScrollEdgeFadeSize(size, height),\n };\n}\n\n/**\n * Alpha mask for a scroll container edge \u2014 content fades to transparent so\n * textured backgrounds (shell gradients, images) show through.\n */\nexport function scrollEdgeFadeMaskImage(edge: ScrollEdgeFadeEdge): string {\n switch (edge) {\n case 'top':\n return `linear-gradient(to bottom, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'bottom':\n return `linear-gradient(to bottom, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n case 'left':\n return `linear-gradient(to right, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'right':\n return `linear-gradient(to right, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n }\n}\n\n/** Inline style map for a masked scroll region (single edge). */\nexport function scrollEdgeFadeMaskStyle(\n edge: ScrollEdgeFadeEdge,\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string,\n): Record<string, string> {\n const mask = scrollEdgeFadeMaskImage(edge);\n return {\n ...scrollEdgeFadeSizeStyle(size, height),\n WebkitMaskImage: mask,\n maskImage: mask,\n WebkitMaskSize: '100% 100%',\n maskSize: '100% 100%',\n };\n}\n\n/** Class map for `scroll-edge-fade` modifiers \u2014 pair with `scroll-edge-fade.css`. */\nexport function scrollEdgeFadeClassMap(opts: ScrollEdgeFadeOptions): Record<string, boolean> {\n const edges = Array.isArray(opts.edges) ? opts.edges : [opts.edges];\n const classes: Record<string, boolean> = {\n 'scroll-edge-fade': true,\n 'scroll-edge-fade--scroll-aware': opts.scrollAware === true,\n 'scroll-edge-fade--hidden': opts.hidden === true,\n };\n\n for (const edge of edges) {\n classes[`scroll-edge-fade--${edge}`] = true;\n }\n\n const { atEnd } = opts;\n if (atEnd === true) {\n classes['scroll-edge-fade--at-end'] = true;\n } else if (atEnd && typeof atEnd === 'object') {\n for (const edge of edges) {\n if (atEnd[edge]) {\n classes[`scroll-edge-fade--${edge}-at-edge`] = true;\n }\n }\n }\n\n return classes;\n}\n\n/** Whether a scroll container is flush with the given edge (within `threshold` px). */\nexport function isScrollAtEdge(\n el: HTMLElement,\n edge: ScrollEdgeFadeEdge,\n threshold = 2,\n): boolean {\n switch (edge) {\n case 'top':\n return el.scrollTop <= threshold;\n case 'bottom':\n return el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;\n case 'left':\n return el.scrollLeft <= threshold;\n case 'right':\n return el.scrollWidth - el.scrollLeft - el.clientWidth <= threshold;\n }\n}\n", "import {\n dimensionIconographyMd,\n dimensionIconographySm,\n dimensionIconographyXs,\n dimensionMenuWidthXs,\n dimensionPanelWidth2xs,\n dimensionPanelWidthLg,\n dimensionPanelWidthMd,\n dimensionRadius025,\n dimensionSize200,\n dimensionSize300,\n dimensionSize400,\n dimensionSize600,\n dimensionSize800,\n dimensionSpace050,\n dimensionSpace200,\n typographyLineheightLg,\n typographyLineheightMd,\n typographyLineheightSm,\n typographyLineheightXl,\n typographyLineheightXs,\n effectAnimationDelayLong2,\n effectAnimationDelayMedium1,\n effectAnimationDelayMedium3,\n effectAnimationDelayInstant,\n effectAnimationDelayShort2,\n effectAnimationDurationMedium1,\n effectAnimationDurationShort3,\n effectMotionShort2,\n effectMotionShort3,\n} from '@ds-mo/tokens/ts';\n\n/** TokoMo CSS custom-property names for shared component defaults (runtime resolution). */\nexport const TOKEN_DEFAULTS = {\n space050: dimensionSpace050,\n space200: dimensionSpace200,\n radius025: dimensionRadius025,\n size200: dimensionSize200,\n size300: dimensionSize300,\n size400: dimensionSize400,\n size600: dimensionSize600,\n size800: dimensionSize800,\n iconographyMd: dimensionIconographyMd,\n iconographySm: dimensionIconographySm,\n iconographyXs: dimensionIconographyXs,\n panelWidth2xs: dimensionPanelWidth2xs,\n panelWidthMd: dimensionPanelWidthMd,\n panelWidthLg: dimensionPanelWidthLg,\n menuWidthXs: dimensionMenuWidthXs,\n lineheightLg: typographyLineheightLg,\n lineheightMd: typographyLineheightMd,\n lineheightSm: typographyLineheightSm,\n lineheightXl: typographyLineheightXl,\n lineheightXs: typographyLineheightXs,\n motionShort2: effectMotionShort2,\n motionShort3: effectMotionShort3,\n animationDurationShort3: effectAnimationDurationShort3,\n animationDurationMedium1: effectAnimationDurationMedium1,\n animationDelayInstant: effectAnimationDelayInstant,\n animationDelayMedium1: effectAnimationDelayMedium1,\n animationDelayMedium3: effectAnimationDelayMedium3,\n animationDelayShort2: effectAnimationDelayShort2,\n animationDelayLong2: effectAnimationDelayLong2,\n /** Unmeasured menu height fallback: 20\u00D7 base (160px at default scale). */\n menuFallbackHeight: 'calc(var(--dimension-size-base) * 20)',\n /** Unmeasured tooltip width fallback: size-800 + size-200 (80px). */\n tooltipFallbackWidth: 'calc(var(--dimension-size-800) + var(--dimension-size-200))',\n /** Fill-mode donut diameter floor: 16\u00D7 size-base (128px). */\n donutFillMin: 'calc(var(--dimension-size-base) * 16)',\n /** Fill-mode donut diameter ceiling: 24\u00D7 size-base (192px). */\n donutFillMax: 'calc(var(--dimension-size-base) * 24)',\n} as const;\n\nexport type TokenDefaultKey = keyof typeof TOKEN_DEFAULTS;\n\n/** Valid CSS length strings for overlay offset props \u2014 bind on `sideOffset` / `alignOffset` in hosts. */\nexport const TOKEN_CSS_LENGTHS = {\n space050: `var(${dimensionSpace050})`,\n space200: `var(${dimensionSpace200})`,\n menuWidthXs: `var(${dimensionMenuWidthXs})`,\n} as const;\n", "/**\n * Shared \"required field\" validity contract for form-associated custom\n * elements (Checkbox, Radio, Switch, Input, Select, SelectMulti, \u2026).\n *\n * Each control computes its own `missing` condition (what counts as empty\n * differs: unchecked, no value, no selection, \u2026) and its own form value, then\n * calls `setRequiredValidity` instead of hand-rolling the `setValidity` call\n * and the default message string.\n *\n * @see AGENTS.md \u2014 \"Required-field validity\"\n */\n\nexport const DEFAULT_REQUIRED_MESSAGE = 'This field is required.';\n\n/** Sets or clears the `valueMissing` validity flag on a form-associated element. */\nexport function setRequiredValidity(\n internals: ElementInternals,\n missing: boolean,\n message: string,\n): void {\n internals.setValidity(missing ? { valueMissing: true } : {}, missing ? message : '');\n}\n", "/** Shared width fit for interactive controls (buttons, select, \u2026). */\nexport type ControlWidth = 'hug' | 'fill';\n\n/** Host / control class map for `width=\"hug\" | \"fill\"`. */\nexport function controlWidthClass(width: ControlWidth): Record<string, boolean> {\n return {\n 'ds-control-width--hug': width === 'hug',\n 'ds-control-width--fill': width === 'fill',\n };\n}\n", "import type { TextVariant } from '../components/Text/text-types';\n\n/** Shared public control sizes. Typography is derived; it is not a separate density API. */\nexport type ControlSize = 'md' | 'sm' | 'xs';\n\n/** Complete text variant selected internally by each control size. */\nexport const CONTROL_TEXT_VARIANT: Record<ControlSize, TextVariant> = {\n md: 'text-body-medium',\n sm: 'text-body-small',\n xs: 'text-caption',\n};\n", "import type { AnchoredPopupAlign } from './anchored-popup';\n\n/**\n * `choice-cell` aligns the first/last interactive row edge with the anchor,\n * allowing the popup frame to extend by the section inset. `popup-frame`\n * aligns the popup frame itself and is reserved for deliberate custom geometry.\n */\nexport type ChoicePopupAnchorAlignment = 'choice-cell' | 'popup-frame';\n\nexport interface ChoicePopupAlignOffsetInput {\n align: AnchoredPopupAlign;\n alignOffsetPx: number;\n sectionInsetPx: number;\n anchorAlignment?: ChoicePopupAnchorAlignment;\n}\n\n/**\n * Resolve the cross-axis offset for a choice popup. Authored `alignOffsetPx`\n * remains an additive nudge after the shared inner-cell alignment is applied.\n */\nexport function resolveChoicePopupAlignOffset({\n align,\n alignOffsetPx,\n sectionInsetPx,\n anchorAlignment = 'choice-cell',\n}: ChoicePopupAlignOffsetInput): number {\n if (anchorAlignment === 'popup-frame' || align === 'center') return alignOffsetPx;\n return alignOffsetPx + (align === 'start' ? -sectionInsetPx : sectionInsetPx);\n}\n\n/** Minimum popup width that keeps both choice-cell edges aligned to a trigger. */\nexport function choicePopupMinWidth(anchorWidth: number, sectionInsetPx: number): number {\n return anchorWidth + sectionInsetPx * 2;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Shared SVG glyph cache for ds-icon.\n *\n * Keyed on a global symbol so every module instance (the compiled Stencil chunk\n * inside dist/components and any direct source import, e.g. via `@ds-mo/ui/utils`)\n * reads and writes the same cache. Without this, `registerIcons` called from an\n * app would fill a different Map than the one ds-icon resolves from.\n */\nconst CACHE_KEY = Symbol.for('ds-mo.icon-svg-cache');\n\ntype IconCacheMap = Map<string, string>;\n\ntype GlobalWithIconCache = { [CACHE_KEY]?: IconCacheMap };\n\nexport function iconCacheKey(name: string, flag: boolean): string {\n return flag ? `flag:${name}` : `system:${name}`;\n}\n\nexport function iconCache(): IconCacheMap {\n const g = globalThis as GlobalWithIconCache;\n return (g[CACHE_KEY] ??= new Map());\n}\n\n/**\n * Pre-register glyphs so ds-icon renders them synchronously \u2014 no lazy-chunk\n * fetch, no first-paint pop-in. Import the SVG strings from `@ds-mo/icons`\n * in the app (statically, so they ship in the app's own bundle):\n *\n * ```ts\n * import { Bell } from '@ds-mo/icons/svg/Bell';\n * import { FlagUnitedStates } from '@ds-mo/icons/svg/flags/FlagUnitedStates';\n * import { registerIcons } from '@ds-mo/ui/utils';\n *\n * registerIcons({ Bell });\n * registerIcons({ FlagUnitedStates });\n * ```\n *\n * Icons that are not registered still work \u2014 they lazy-load on first render\n * and stay cached afterwards.\n */\nexport function registerIcons(icons: Record<string, string>, options?: { flag?: boolean }): void {\n const cache = iconCache();\n for (const [name, svg] of Object.entries(icons)) {\n const flag = options?.flag ?? name.startsWith('Flag');\n cache.set(iconCacheKey(name, flag), svg);\n }\n}\n", "const lengthPxCache = new Map<string, number>();\n\nlet probeEl: HTMLElement | null = null;\n\nfunction getProbeElement(): HTMLElement | null {\n if (typeof document === 'undefined') return null;\n\n if (!probeEl) {\n probeEl = document.createElement('div');\n probeEl.setAttribute('aria-hidden', 'true');\n probeEl.style.cssText =\n 'position:absolute;visibility:hidden;pointer-events:none;top:0;left:0;width:0;height:0;overflow:hidden;';\n document.documentElement.appendChild(probeEl);\n }\n\n return probeEl;\n}\n\n/** Clear session cache (tests only). */\nexport function clearCssLengthPxCache(): void {\n lengthPxCache.clear();\n}\n\n/**\n * Resolve a CSS length to pixels for layout math.\n * Numbers pass through; `var(--dimension-*)`, `calc(...)`, and `16px` resolve via a hidden probe.\n */\nexport function resolveCssLengthPx(\n value: number | string | undefined,\n fallback: number | string,\n): number {\n const resolved = value === undefined || value === null || value === '' ? fallback : value;\n if (typeof resolved === 'number') return resolved;\n\n const trimmed = resolved.trim();\n if (!trimmed) return resolveCssLengthPx(fallback, 0);\n\n const cached = lengthPxCache.get(trimmed);\n if (cached !== undefined) return cached;\n\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n const n = Number(trimmed);\n lengthPxCache.set(trimmed, n);\n return n;\n }\n\n const pxMatch = trimmed.match(/^(-?\\d+(\\.\\d+)?)px$/);\n if (pxMatch) {\n const px = parseFloat(pxMatch[1]);\n lengthPxCache.set(trimmed, px);\n return px;\n }\n\n const cssLength = /^--[\\w-]+$/.test(trimmed) ? `var(${trimmed})` : trimmed;\n\n const probe = getProbeElement();\n if (!probe) {\n return typeof fallback === 'number' ? fallback : 0;\n }\n\n probe.style.width = cssLength;\n const px = probe.getBoundingClientRect().width;\n probe.style.width = '';\n // A stylesheet can finish loading after a custom element's first layout\n // pass (notably in WebKit). Do not permanently cache the probe's temporary\n // zero when the length depends on a custom property; a later call must be\n // able to resolve the now-available token.\n if (px !== 0 || !cssLength.includes('var(')) {\n lengthPxCache.set(trimmed, px);\n }\n return px;\n}\n", "const COMPACT_UNITS: { threshold: number; suffix: string }[] = [\n { threshold: 1_000_000_000, suffix: 'b' },\n { threshold: 1_000_000, suffix: 'm' },\n { threshold: 1_000, suffix: 'k' },\n];\n\n/** Compact large numbers for display: 1000 -> \"1k\", 1500 -> \"1.5k\", 110100 -> \"110.1k\", 1000000 -> \"1m\". */\nexport function formatCompactNumber(value: number, locale?: string): string {\n if (locale) {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n compactDisplay: 'short',\n maximumFractionDigits: 1,\n }).format(value);\n }\n const sign = value < 0 ? '-' : '';\n const abs = Math.abs(value);\n if (abs < 1000) return String(value);\n\n for (let i = 0; i < COMPACT_UNITS.length; i++) {\n const unit = COMPACT_UNITS[i];\n if (abs < unit.threshold) continue;\n\n let scaled = Math.round((abs / unit.threshold) * 10) / 10;\n // Carry over, e.g. 999.96k rounds to \"1000k\" \u2014 bump to the next unit instead.\n if (scaled >= 1000 && i > 0) {\n const next = COMPACT_UNITS[i - 1];\n scaled = Math.round((abs / next.threshold) * 10) / 10;\n return `${sign}${scaled}${next.suffix}`;\n }\n return `${sign}${scaled}${unit.suffix}`;\n }\n return String(value);\n}\n", "export type PercentageDecimals = 1 | 2;\n\n/** Format a ratio as a locale-aware percentage with an exact, supported precision. */\nexport function formatPercentage(\n ratio: number,\n decimals: PercentageDecimals = 1,\n locale?: string,\n): string {\n const precision = decimals === 2 ? 2 : 1;\n const value = Number.isFinite(ratio) ? ratio : 0;\n\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }).format(value);\n}\n", "/**\n * Binary-searches the longest prefix of `text` (plus an ellipsis) that fits within `maxWidth`\n * px when rendered by `el`, using the SVG `getComputedTextLength()` API for exact measurement \u2014\n * `text-overflow: ellipsis` doesn't apply to raw SVG `<text>` nodes.\n *\n * Mutates `el.textContent` during measurement; the caller's next render (driven by the\n * returned string going into state) overwrites it with the final value.\n */\nexport function truncateSvgTextToWidth(el: SVGTextElement, text: string, maxWidth: number): string {\n el.textContent = text;\n if (maxWidth <= 0 || el.getComputedTextLength() <= maxWidth) return text;\n\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = Math.ceil((lo + hi) / 2);\n el.textContent = `${text.slice(0, mid)}\u2026`;\n if (el.getComputedTextLength() <= maxWidth) {\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n return lo > 0 ? `${text.slice(0, lo)}\u2026` : '\u2026';\n}\n", "/** Parse a CSS <time> value (or motion shorthand's first token) to milliseconds. */\nexport function parseCssTimeMs(value: string, fallback: number): number {\n const firstToken = value.trim().split(/\\s+/)[0] ?? '';\n const num = parseFloat(firstToken);\n if (Number.isNaN(num)) return fallback;\n if (/ms\\s*$/.test(firstToken)) return num;\n if (/s\\s*$/.test(firstToken)) return num * 1000;\n return num;\n}\n\nfunction extractCssCustomProp(ref: string): string | null {\n const varMatch = ref.match(/^var\\(\\s*(--[^),]+)/);\n if (varMatch) return varMatch[1].trim();\n if (ref.startsWith('--')) return ref.trim();\n return null;\n}\n\nfunction readTokenTimeMs(token: string, fallback: number): number {\n if (typeof document === 'undefined') return fallback;\n\n const prop = extractCssCustomProp(token);\n if (!prop) return parseCssTimeMs(token, fallback);\n\n const raw = getComputedStyle(document.documentElement).getPropertyValue(prop).trim();\n return parseCssTimeMs(raw, fallback);\n}\n\n/**\n * Resolve a duration to milliseconds for JS timers aligned with CSS motion tokens.\n * Accepts numbers (ms), raw times (`200ms`, `0.75s`), or `var(--effect-*)` references.\n */\nexport function resolveCssTimeMs(\n value: number | string | undefined,\n fallbackToken: string,\n): number {\n if (typeof value === 'number') return value;\n\n const token = typeof value === 'string' && value.trim() ? value.trim() : fallbackToken;\n const prop = extractCssCustomProp(token);\n\n if (prop) {\n return readTokenTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n }\n\n return parseCssTimeMs(token, readTokenTimeMs(fallbackToken, 200));\n}\n\n/** Whether the user has requested reduced non-essential motion. */\nexport function prefersReducedMotion(): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Resolve an animation-coupled duration. Returns zero under reduced motion so\n * JS cleanup stays synchronized with CSS that removes the corresponding motion.\n */\nexport function resolveMotionTimeMs(\n value: number | string | undefined,\n fallbackToken: string,\n): number {\n return prefersReducedMotion() ? 0 : resolveCssTimeMs(value, fallbackToken);\n}\n", "/** CSS custom property for scroll-edge fade depth (dimension token or length). */\nexport const SCROLL_EDGE_FADE_SIZE_VAR = '--ds-scroll-edge-fade-size';\n\nexport const SCROLL_EDGE_FADE_DEFAULT_SIZE = 'var(--dimension-size-600)';\n\nexport type ScrollEdgeFadeEdge = 'top' | 'bottom' | 'left' | 'right';\n\nexport type ScrollEdgeFadeSizeToken =\n | 'size-000'\n | 'size-050'\n | 'size-075'\n | 'size-100'\n | 'size-150'\n | 'size-200'\n | 'size-250'\n | 'size-300'\n | 'size-400'\n | 'size-500'\n | 'size-600'\n | 'size-800';\n\nexport type ScrollEdgeFadeSize = ScrollEdgeFadeSizeToken | (string & {});\n\nconst SIZE_VALUE: Record<ScrollEdgeFadeSizeToken, string> = {\n 'size-000': 'var(--dimension-size-000)',\n 'size-050': 'var(--dimension-size-050)',\n 'size-075': 'var(--dimension-size-075)',\n 'size-100': 'var(--dimension-size-100)',\n 'size-150': 'var(--dimension-size-150)',\n 'size-200': 'var(--dimension-size-200)',\n 'size-250': 'var(--dimension-size-250)',\n 'size-300': 'var(--dimension-size-300)',\n 'size-400': 'var(--dimension-size-400)',\n 'size-500': 'var(--dimension-size-500)',\n 'size-600': 'var(--dimension-size-600)',\n 'size-800': 'var(--dimension-size-800)',\n};\n\nconst SIZE_REF = `var(${SCROLL_EDGE_FADE_SIZE_VAR}, ${SCROLL_EDGE_FADE_DEFAULT_SIZE})`;\n\nexport interface ScrollEdgeFadeOptions {\n /** One or more edges to fade. */\n edges: ScrollEdgeFadeEdge | ScrollEdgeFadeEdge[];\n /**\n * Reveal and hide configured fades from the container's own scroll position.\n * Uses CSS scroll-driven animations with a static-fade fallback; no listener required.\n */\n scrollAware?: boolean;\n /**\n * When true, removes the complete mask. Pass a map to remove only configured\n * edges that are flush when scroll state already lives in JavaScript.\n */\n atEnd?: boolean | Partial<Record<ScrollEdgeFadeEdge, boolean>>;\n /** Force the mask off regardless of scroll position (`ds-fade` `visible={false}`). */\n hidden?: boolean;\n}\n\n/** Resolve a dimension size token name or raw CSS length for `--ds-scroll-edge-fade-size`. */\nexport function resolveScrollEdgeFadeSize(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string,\n): string {\n if (height) return height;\n return Object.prototype.hasOwnProperty.call(SIZE_VALUE, size)\n ? SIZE_VALUE[size as ScrollEdgeFadeSizeToken]\n : size;\n}\n\n/** Inline style map setting fade depth on a scroll container. */\nexport function scrollEdgeFadeSizeStyle(\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string,\n): Record<string, string> {\n return {\n [SCROLL_EDGE_FADE_SIZE_VAR]: resolveScrollEdgeFadeSize(size, height),\n };\n}\n\n/**\n * Alpha mask for a scroll container edge \u2014 content fades to transparent so\n * textured backgrounds (shell gradients, images) show through.\n */\nexport function scrollEdgeFadeMaskImage(edge: ScrollEdgeFadeEdge): string {\n switch (edge) {\n case 'top':\n return `linear-gradient(to bottom, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'bottom':\n return `linear-gradient(to bottom, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n case 'left':\n return `linear-gradient(to right, transparent 0, #000 ${SIZE_REF}, #000 100%)`;\n case 'right':\n return `linear-gradient(to right, #000 0, #000 calc(100% - ${SIZE_REF}), transparent 100%)`;\n }\n}\n\n/** Inline style map for a masked scroll region (single edge). */\nexport function scrollEdgeFadeMaskStyle(\n edge: ScrollEdgeFadeEdge,\n size: ScrollEdgeFadeSize = 'size-600',\n height?: string,\n): Record<string, string> {\n const mask = scrollEdgeFadeMaskImage(edge);\n return {\n ...scrollEdgeFadeSizeStyle(size, height),\n WebkitMaskImage: mask,\n maskImage: mask,\n WebkitMaskSize: '100% 100%',\n maskSize: '100% 100%',\n };\n}\n\n/** Class map for `scroll-edge-fade` modifiers \u2014 pair with `scroll-edge-fade.css`. */\nexport function scrollEdgeFadeClassMap(opts: ScrollEdgeFadeOptions): Record<string, boolean> {\n const edges = Array.isArray(opts.edges) ? opts.edges : [opts.edges];\n const classes: Record<string, boolean> = {\n 'scroll-edge-fade': true,\n 'scroll-edge-fade--scroll-aware': opts.scrollAware === true,\n 'scroll-edge-fade--hidden': opts.hidden === true,\n };\n\n for (const edge of edges) {\n classes[`scroll-edge-fade--${edge}`] = true;\n }\n\n const { atEnd } = opts;\n if (atEnd === true) {\n classes['scroll-edge-fade--at-end'] = true;\n } else if (atEnd && typeof atEnd === 'object') {\n for (const edge of edges) {\n if (atEnd[edge]) {\n classes[`scroll-edge-fade--${edge}-at-edge`] = true;\n }\n }\n }\n\n return classes;\n}\n\n/** Whether a scroll container is flush with the given edge (within `threshold` px). */\nexport function isScrollAtEdge(\n el: HTMLElement,\n edge: ScrollEdgeFadeEdge,\n threshold = 2,\n): boolean {\n switch (edge) {\n case 'top':\n return el.scrollTop <= threshold;\n case 'bottom':\n return el.scrollHeight - el.scrollTop - el.clientHeight <= threshold;\n case 'left':\n return el.scrollLeft <= threshold;\n case 'right':\n return el.scrollWidth - el.scrollLeft - el.clientWidth <= threshold;\n }\n}\n", "import {\n dimensionIconographyMd,\n dimensionIconographySm,\n dimensionIconographyXs,\n dimensionMenuWidthXs,\n dimensionPanelWidth2xs,\n dimensionPanelWidthLg,\n dimensionPanelWidthMd,\n dimensionRadius025,\n dimensionSize200,\n dimensionSize300,\n dimensionSize400,\n dimensionSize600,\n dimensionSize800,\n dimensionSpace050,\n dimensionSpace200,\n typographyLineheightLg,\n typographyLineheightMd,\n typographyLineheightSm,\n typographyLineheightXl,\n typographyLineheightXs,\n effectAnimationDelayLong2,\n effectAnimationDelayMedium1,\n effectAnimationDelayMedium3,\n effectAnimationDelayInstant,\n effectAnimationDelayShort2,\n effectAnimationDurationMedium1,\n effectAnimationDurationShort3,\n effectMotionShort2,\n effectMotionShort3,\n} from '@ds-mo/tokens/ts';\n\n/** TokoMo CSS custom-property names for shared component defaults (runtime resolution). */\nexport const TOKEN_DEFAULTS = {\n space050: dimensionSpace050,\n space200: dimensionSpace200,\n radius025: dimensionRadius025,\n size200: dimensionSize200,\n size300: dimensionSize300,\n size400: dimensionSize400,\n size600: dimensionSize600,\n size800: dimensionSize800,\n iconographyMd: dimensionIconographyMd,\n iconographySm: dimensionIconographySm,\n iconographyXs: dimensionIconographyXs,\n panelWidth2xs: dimensionPanelWidth2xs,\n panelWidthMd: dimensionPanelWidthMd,\n panelWidthLg: dimensionPanelWidthLg,\n menuWidthXs: dimensionMenuWidthXs,\n lineheightLg: typographyLineheightLg,\n lineheightMd: typographyLineheightMd,\n lineheightSm: typographyLineheightSm,\n lineheightXl: typographyLineheightXl,\n lineheightXs: typographyLineheightXs,\n motionShort2: effectMotionShort2,\n motionShort3: effectMotionShort3,\n animationDurationShort3: effectAnimationDurationShort3,\n animationDurationMedium1: effectAnimationDurationMedium1,\n animationDelayInstant: effectAnimationDelayInstant,\n animationDelayMedium1: effectAnimationDelayMedium1,\n animationDelayMedium3: effectAnimationDelayMedium3,\n animationDelayShort2: effectAnimationDelayShort2,\n animationDelayLong2: effectAnimationDelayLong2,\n /** Unmeasured menu height fallback: 20\u00D7 base (160px at default scale). */\n menuFallbackHeight: 'calc(var(--dimension-size-base) * 20)',\n /** Unmeasured tooltip width fallback: size-800 + size-200 (80px). */\n tooltipFallbackWidth: 'calc(var(--dimension-size-800) + var(--dimension-size-200))',\n /** Fill-mode donut diameter floor: 16\u00D7 size-base (128px). */\n donutFillMin: 'calc(var(--dimension-size-base) * 16)',\n /** Fill-mode donut diameter ceiling: 24\u00D7 size-base (192px). */\n donutFillMax: 'calc(var(--dimension-size-base) * 24)',\n} as const;\n\nexport type TokenDefaultKey = keyof typeof TOKEN_DEFAULTS;\n\n/** Valid CSS length strings for overlay offset props \u2014 bind on `sideOffset` / `alignOffset` in hosts. */\nexport const TOKEN_CSS_LENGTHS = {\n space050: `var(${dimensionSpace050})`,\n space200: `var(${dimensionSpace200})`,\n menuWidthXs: `var(${dimensionMenuWidthXs})`,\n} as const;\n", "/**\n * Shared \"required field\" validity contract for form-associated custom\n * elements (Checkbox, Radio, Switch, Input, Select, SelectMulti, \u2026).\n *\n * Each control computes its own `missing` condition (what counts as empty\n * differs: unchecked, no value, no selection, \u2026) and its own form value, then\n * calls `setRequiredValidity` instead of hand-rolling the `setValidity` call\n * and the default message string.\n *\n * @see AGENTS.md \u2014 \"Required-field validity\"\n */\n\nexport const DEFAULT_REQUIRED_MESSAGE = 'This field is required.';\n\n/** Sets or clears the `valueMissing` validity flag on a form-associated element. */\nexport function setRequiredValidity(\n internals: ElementInternals,\n missing: boolean,\n message: string,\n): void {\n internals.setValidity(missing ? { valueMissing: true } : {}, missing ? message : '');\n}\n", "/** Shared width fit for interactive controls (buttons, select, \u2026). */\nexport type ControlWidth = 'hug' | 'fill';\n\n/** Host / control class map for `width=\"hug\" | \"fill\"`. */\nexport function controlWidthClass(width: ControlWidth): Record<string, boolean> {\n return {\n 'ds-control-width--hug': width === 'hug',\n 'ds-control-width--fill': width === 'fill',\n };\n}\n", "import type { TextVariant } from '../components/Text/text-types';\n\n/** Shared public control sizes. Typography is derived; it is not a separate density API. */\nexport type ControlSize = 'lg' | 'md' | 'sm' | 'xs';\n\n/** Complete text variant selected internally by each control size. */\nexport const CONTROL_TEXT_VARIANT: Record<ControlSize, TextVariant> = {\n lg: 'text-body-large',\n md: 'text-body-medium',\n sm: 'text-body-small',\n xs: 'text-caption',\n};\n\n/** Supporting copy paired with each control density in two-line choice rows. */\nexport const CONTROL_SUPPORTING_TEXT_VARIANT: Record<ControlSize, TextVariant> = {\n lg: 'text-body-medium',\n md: 'text-body-small',\n sm: 'text-caption',\n xs: 'text-caption',\n};\n", "import type { AnchoredPopupAlign } from './anchored-popup';\n\n/**\n * `choice-cell` aligns the first/last interactive row edge with the anchor,\n * allowing the popup frame to extend by the section inset. `popup-frame`\n * aligns the popup frame itself and is reserved for deliberate custom geometry.\n */\nexport type ChoicePopupAnchorAlignment = 'choice-cell' | 'popup-frame';\n\nexport interface ChoicePopupAlignOffsetInput {\n align: AnchoredPopupAlign;\n alignOffsetPx: number;\n sectionInsetPx: number;\n anchorAlignment?: ChoicePopupAnchorAlignment;\n}\n\n/**\n * Resolve the cross-axis offset for a choice popup. Authored `alignOffsetPx`\n * remains an additive nudge after the shared inner-cell alignment is applied.\n */\nexport function resolveChoicePopupAlignOffset({\n align,\n alignOffsetPx,\n sectionInsetPx,\n anchorAlignment = 'choice-cell',\n}: ChoicePopupAlignOffsetInput): number {\n if (anchorAlignment === 'popup-frame' || align === 'center') return alignOffsetPx;\n return alignOffsetPx + (align === 'start' ? -sectionInsetPx : sectionInsetPx);\n}\n\n/** Minimum popup width that keeps both choice-cell edges aligned to a trigger. */\nexport function choicePopupMinWidth(anchorWidth: number, sectionInsetPx: number): number {\n return anchorWidth + sectionInsetPx * 2;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["px"]
7
7
  }