@ds-mo/ui 14.18.0 → 14.19.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 (281) hide show
  1. package/README.md +7 -0
  2. package/dist/.package-ready.json +1 -1
  3. package/dist/agent-patterns.json +4 -3
  4. package/dist/agent.json +59 -22
  5. package/dist/angular/ds-filter-menu.d.ts +1 -1
  6. package/dist/angular/ds-filter-menu.js +3 -3
  7. package/dist/angular/ds-input.d.ts +1 -1
  8. package/dist/angular/ds-input.js +3 -3
  9. package/dist/angular/ds-menu.d.ts +1 -1
  10. package/dist/angular/ds-menu.js +3 -3
  11. package/dist/angular/ds-pagination.d.ts +1 -1
  12. package/dist/angular/ds-pagination.js +3 -3
  13. package/dist/angular/ds-panel-tool-header.d.ts +3 -8
  14. package/dist/angular/ds-panel-tools.d.ts +3 -8
  15. package/dist/angular/ds-select.d.ts +1 -1
  16. package/dist/angular/ds-select.js +3 -3
  17. package/dist/angular/ds-tooltip.d.ts +1 -1
  18. package/dist/angular/ds-tooltip.js +3 -3
  19. package/dist/components/ds-agent-activity.js +1 -1
  20. package/dist/components/ds-agent-questionnaire.js +1 -1
  21. package/dist/components/ds-agent-response.js +1 -1
  22. package/dist/components/ds-agent-source-list.js +1 -1
  23. package/dist/components/ds-agent-tool-call.js +1 -1
  24. package/dist/components/ds-attachment-list.js +1 -1
  25. package/dist/components/ds-badge.js +1 -1
  26. package/dist/components/ds-banner.js +1 -1
  27. package/dist/components/ds-banner.js.map +1 -1
  28. package/dist/components/ds-bar-action.js +1 -1
  29. package/dist/components/ds-bar-action.js.map +1 -1
  30. package/dist/components/ds-bar-nav.js +1 -1
  31. package/dist/components/ds-bar-title.js +1 -1
  32. package/dist/components/ds-bar-workflow.js +1 -1
  33. package/dist/components/ds-bar-workflow.js.map +1 -1
  34. package/dist/components/ds-breadcrumb.js +1 -1
  35. package/dist/components/ds-button-filled.js +1 -1
  36. package/dist/components/ds-button-unfilled.js +1 -1
  37. package/dist/components/ds-card-chart.js +1 -1
  38. package/dist/components/ds-card-overview.js +1 -1
  39. package/dist/components/ds-card-setting.js +1 -1
  40. package/dist/components/ds-chart-legend.js +1 -1
  41. package/dist/components/ds-chart.js +1 -1
  42. package/dist/components/ds-checkbox.js +1 -1
  43. package/dist/components/ds-chip.js +1 -1
  44. package/dist/components/ds-code-block.js +1 -1
  45. package/dist/components/ds-conversation-list-item.js +1 -1
  46. package/dist/components/ds-conversation-list-section.js +1 -1
  47. package/dist/components/ds-conversation-list.js +1 -1
  48. package/dist/components/ds-conversation-list.js.map +1 -1
  49. package/dist/components/ds-divider.js +1 -1
  50. package/dist/components/ds-empty-state.js +1 -1
  51. package/dist/components/ds-field.js +1 -1
  52. package/dist/components/ds-filter-menu.js +1 -1
  53. package/dist/components/ds-input.js +1 -1
  54. package/dist/components/ds-markdown.js +1 -1
  55. package/dist/components/ds-menu.js +1 -1
  56. package/dist/components/ds-message-actions.js +1 -1
  57. package/dist/components/ds-message-bubble.js +1 -1
  58. package/dist/components/ds-message-composer.js +1 -1
  59. package/dist/components/ds-message-composer.js.map +1 -1
  60. package/dist/components/ds-message-scroller.js +1 -1
  61. package/dist/components/ds-message.js +1 -1
  62. package/dist/components/ds-mobile-bar-nav.js +1 -1
  63. package/dist/components/ds-mobile-header.js +1 -1
  64. package/dist/components/ds-mobile-section-switcher.js +1 -1
  65. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  66. package/dist/components/ds-modal.js +1 -1
  67. package/dist/components/ds-pagination.js +1 -1
  68. package/dist/components/ds-panel-nav.js +1 -1
  69. package/dist/components/ds-panel-sub-nav.js +1 -1
  70. package/dist/components/ds-panel-tool-header.js +1 -1
  71. package/dist/components/ds-panel-tool-search.js +1 -1
  72. package/dist/components/ds-panel-tools.js +1 -1
  73. package/dist/components/ds-paper-texture.js +1 -1
  74. package/dist/components/ds-radio.js +1 -1
  75. package/dist/components/ds-scroll-overlay.js +1 -1
  76. package/dist/components/ds-select.js +1 -1
  77. package/dist/components/ds-shell-app.js +1 -1
  78. package/dist/components/ds-shell-app.js.map +1 -1
  79. package/dist/components/ds-shell-page.js +1 -1
  80. package/dist/components/ds-shell-tools.js +1 -1
  81. package/dist/components/ds-skeleton.js +1 -1
  82. package/dist/components/ds-slider.js +1 -1
  83. package/dist/components/ds-swatch-picker.js +1 -1
  84. package/dist/components/ds-switch.js +1 -1
  85. package/dist/components/ds-tab-group.js +1 -1
  86. package/dist/components/ds-table-filter.js +1 -1
  87. package/dist/components/ds-table-saved-views.js +1 -1
  88. package/dist/components/ds-table-sort.js +1 -1
  89. package/dist/components/ds-table-toolbar.js +1 -1
  90. package/dist/components/ds-table.js +1 -1
  91. package/dist/components/ds-table.js.map +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-toast.js.map +1 -1
  96. package/dist/components/ds-tooltip-chart.js +1 -1
  97. package/dist/components/ds-tooltip.js +1 -1
  98. package/dist/components/ds-typing-indicator.js +1 -1
  99. package/dist/components/ds-typing-indicator.js.map +1 -1
  100. package/dist/components/p--CRAu9fJ.js +2 -0
  101. package/dist/components/{p-C6yLERx6.js → p-B1JRCDHS.js} +2 -2
  102. package/dist/components/p-BBG6Sswb.js +2 -0
  103. package/dist/components/{p-Drcl4zS9.js.map → p-BBG6Sswb.js.map} +1 -1
  104. package/dist/components/{p-Dd8VKdAO.js → p-BCOl1x0_.js} +2 -2
  105. package/dist/components/{p-C9StMCWg.js → p-BHVOiWz5.js} +2 -2
  106. package/dist/components/p-BNiuAMeh.js +2 -0
  107. package/dist/components/p-BNiuAMeh.js.map +1 -0
  108. package/dist/components/{p-DJ0GCCFa.js → p-BNkU9dcc.js} +2 -2
  109. package/dist/components/p-BPG0r_mC.js +2 -0
  110. package/dist/components/p-BPG0r_mC.js.map +1 -0
  111. package/dist/components/{p-DHzn7INS.js → p-BS0AbMNK.js} +2 -2
  112. package/dist/components/p-BUDAwJVV.js +2 -0
  113. package/dist/components/p-BUDAwJVV.js.map +1 -0
  114. package/dist/components/p-BZVWmzKf.js +2 -0
  115. package/dist/components/p-BZVWmzKf.js.map +1 -0
  116. package/dist/components/{p-CihNoe1M.js → p-B_jZIC9R.js} +2 -2
  117. package/dist/components/{p-CAJIARNW.js → p-Bbb9A3NV.js} +2 -2
  118. package/dist/components/{p-Dginv8PT.js → p-Bf7PZJPT.js} +2 -2
  119. package/dist/components/{p-D6P_1YrL.js → p-BhYS_Ump.js} +2 -2
  120. package/dist/components/p-BknXYAEc.js +2 -0
  121. package/dist/components/{p-9GuNIXuz.js.map → p-BknXYAEc.js.map} +1 -1
  122. package/dist/components/{p-BKx2ihnG.js → p-Bu3dOjpW.js} +2 -2
  123. package/dist/components/{p-BiBXCjjo.js → p-BxGQ3cRJ.js} +2 -2
  124. package/dist/components/{p-Dl3gciej.js → p-BysVBVQv.js} +2 -2
  125. package/dist/components/{p-CBa_6lqj.js → p-C-Y7gYgz.js} +2 -2
  126. package/dist/components/{p-9EQ3xLI1.js → p-C6R5Lft0.js} +2 -2
  127. package/dist/components/{p-DPR0TGGJ.js → p-C9gC4haA.js} +2 -2
  128. package/dist/components/{p-LHzBS95u.js → p-CAnnQL1F.js} +2 -2
  129. package/dist/components/p-CY4YFAT3.js +2 -0
  130. package/dist/components/p-CY4YFAT3.js.map +1 -0
  131. package/dist/components/{p-3WlVHGUe.js → p-Cg0kimXZ.js} +2 -2
  132. package/dist/components/{p-HZz5aJKz.js → p-CsBICYmt.js} +2 -2
  133. package/dist/components/p-CwjVgUqy.js +2 -0
  134. package/dist/components/p-CwjVgUqy.js.map +1 -0
  135. package/dist/components/p-D1eEgwcP.js +2 -0
  136. package/dist/components/p-D1eEgwcP.js.map +1 -0
  137. package/dist/components/{p-oCc3mz_c.js → p-D3fMaUJ3.js} +2 -2
  138. package/dist/components/p-D7R4yE2C.js +2 -0
  139. package/dist/components/{p-Ba7DaFkb.js.map → p-D7R4yE2C.js.map} +1 -1
  140. package/dist/components/{p-CHEt4mW8.js → p-DAvh38E4.js} +2 -2
  141. package/dist/components/{p-DPpHSIzS.js → p-DBue3ISk.js} +2 -2
  142. package/dist/components/{p-BdgoB2ef.js → p-DDgeXGbB.js} +2 -2
  143. package/dist/components/{p-hp_2W2Qy.js → p-DOUDRJbE.js} +2 -2
  144. package/dist/components/{p-Be-vZpWx.js → p-DUdOmSFR.js} +2 -2
  145. package/dist/components/p-DaAXY-XS.js +2 -0
  146. package/dist/components/p-DaAXY-XS.js.map +1 -0
  147. package/dist/components/{p-B9ZfoprK.js → p-DlYw4UGQ.js} +2 -2
  148. package/dist/components/p-DlYw4UGQ.js.map +1 -0
  149. package/dist/components/p-DtndC9f1.js +2 -0
  150. package/dist/components/p-DtndC9f1.js.map +1 -0
  151. package/dist/components/p-HB_cf_aR.js +2 -0
  152. package/dist/components/{p-BBmRD_S0.js.map → p-HB_cf_aR.js.map} +1 -1
  153. package/dist/components/{p-BTTxl3ro.js → p-ZpQBAwZC.js} +2 -2
  154. package/dist/components/p-ZpQBAwZC.js.map +1 -0
  155. package/dist/components/p-ag6Io-kL.js +2 -0
  156. package/dist/components/p-ag6Io-kL.js.map +1 -0
  157. package/dist/components/p-fg9EKoZp.js +2 -0
  158. package/dist/components/{p-DMaQkEYP.js.map → p-fg9EKoZp.js.map} +1 -1
  159. package/dist/components/p-iMuFgSoM.js +2 -0
  160. package/dist/components/p-iMuFgSoM.js.map +1 -0
  161. package/dist/components/{p-CbZ0RU2c.js → p-r8PMqlqm.js} +2 -2
  162. package/dist/components/{p-B145kX-i.js → p-uI6z53BE.js} +2 -2
  163. package/dist/docs/components.json +252 -37
  164. package/dist/lib/components/PanelTools/panel-tools-types.d.ts +12 -0
  165. package/dist/lib/shell/index.d.ts +1 -1
  166. package/dist/lib/shell/index.js.map +1 -1
  167. package/dist/lib/utils/anchored-position.d.ts +6 -2
  168. package/dist/mcp-data/registry/badge.json +7 -9
  169. package/dist/mcp-data/registry/banner.json +2 -2
  170. package/dist/mcp-data/registry/bar-action.json +2 -2
  171. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  172. package/dist/mcp-data/registry/conversation-list.json +2 -2
  173. package/dist/mcp-data/registry/filter-menu.json +21 -6
  174. package/dist/mcp-data/registry/input.json +23 -3
  175. package/dist/mcp-data/registry/menu.json +22 -4
  176. package/dist/mcp-data/registry/message-composer.json +2 -2
  177. package/dist/mcp-data/registry/pagination.json +31 -10
  178. package/dist/mcp-data/registry/panel-nav.json +1 -1
  179. package/dist/mcp-data/registry/panel-tool-header.json +3 -3
  180. package/dist/mcp-data/registry/panel-tools.json +5 -4
  181. package/dist/mcp-data/registry/registry.json +58 -21
  182. package/dist/mcp-data/registry/select.json +17 -3
  183. package/dist/mcp-data/registry/shell-app.json +3 -2
  184. package/dist/mcp-data/registry/table.json +21 -1
  185. package/dist/mcp-data/registry/toast.json +2 -2
  186. package/dist/mcp-data/registry/tooltip.json +20 -3
  187. package/dist/mcp-data/registry/typing-indicator.json +4 -4
  188. package/dist/react/ds-panel-tool-header.d.ts +2 -5
  189. package/dist/react/ds-panel-tools.d.ts +2 -5
  190. package/dist/types/components/Badge/Badge.d.ts +2 -16
  191. package/dist/types/components/Banner/Banner.d.ts +0 -1
  192. package/dist/types/components/BarAction/BarAction.d.ts +0 -7
  193. package/dist/types/components/ConversationList/ConversationList.d.ts +1 -0
  194. package/dist/types/components/FilterMenu/FilterMenu.d.ts +5 -5
  195. package/dist/types/components/Input/Input.d.ts +7 -0
  196. package/dist/types/components/Menu/Menu.d.ts +3 -4
  197. package/dist/types/components/MessageComposer/MessageComposer.d.ts +0 -3
  198. package/dist/types/components/Pagination/Pagination.d.ts +2 -0
  199. package/dist/types/components/Pagination/pagination-types.d.ts +2 -0
  200. package/dist/types/components/PanelToolHeader/PanelToolHeader.d.ts +2 -5
  201. package/dist/types/components/PanelTools/PanelTools.d.ts +2 -5
  202. package/dist/types/components/PanelTools/panel-tools-types.d.ts +12 -0
  203. package/dist/types/components/Select/Select.d.ts +3 -0
  204. package/dist/types/components/Table/Table.d.ts +1 -13
  205. package/dist/types/components/Table/table-body-renderer.d.ts +36 -0
  206. package/dist/types/components/Table/table-load-view.d.ts +17 -0
  207. package/dist/types/components/Table/table-row-view.d.ts +26 -0
  208. package/dist/types/components/Table/table-skeleton-view.d.ts +12 -0
  209. package/dist/types/components/Tooltip/Tooltip.d.ts +3 -0
  210. package/dist/types/components.d.ts +72 -23
  211. package/dist/types/shell/index.d.ts +1 -1
  212. package/dist/types/utils/anchored-overlay-boundary.d.ts +14 -0
  213. package/dist/types/utils/anchored-overlay-interaction-controller.d.ts +26 -0
  214. package/dist/types/utils/anchored-position-controller.d.ts +14 -0
  215. package/dist/types/utils/anchored-position.d.ts +6 -2
  216. package/dist/types/utils/select-controller.d.ts +1 -0
  217. package/dist/vue/ds-filter-menu.js +1 -0
  218. package/dist/vue/ds-input.js +1 -0
  219. package/dist/vue/ds-menu.js +1 -0
  220. package/dist/vue/ds-pagination.js +1 -0
  221. package/dist/vue/ds-select.js +1 -0
  222. package/dist/vue/ds-tooltip.js +1 -0
  223. package/package.json +4 -1
  224. package/dist/components/p-9GuNIXuz.js +0 -2
  225. package/dist/components/p-B9ZfoprK.js.map +0 -1
  226. package/dist/components/p-BBmRD_S0.js +0 -2
  227. package/dist/components/p-BTTxl3ro.js.map +0 -1
  228. package/dist/components/p-Ba7DaFkb.js +0 -2
  229. package/dist/components/p-BcNYvLMi.js +0 -2
  230. package/dist/components/p-BcNYvLMi.js.map +0 -1
  231. package/dist/components/p-CI5Ce8VF.js +0 -2
  232. package/dist/components/p-CI5Ce8VF.js.map +0 -1
  233. package/dist/components/p-Cgm7YMLw.js +0 -2
  234. package/dist/components/p-Cgm7YMLw.js.map +0 -1
  235. package/dist/components/p-Cj5Hkt6Y.js +0 -2
  236. package/dist/components/p-Cj5Hkt6Y.js.map +0 -1
  237. package/dist/components/p-DC_8dK55.js +0 -2
  238. package/dist/components/p-DC_8dK55.js.map +0 -1
  239. package/dist/components/p-DKY3IJqt.js +0 -2
  240. package/dist/components/p-DKY3IJqt.js.map +0 -1
  241. package/dist/components/p-DMaQkEYP.js +0 -2
  242. package/dist/components/p-DQyvAN44.js +0 -2
  243. package/dist/components/p-DQyvAN44.js.map +0 -1
  244. package/dist/components/p-DaxKVtZG.js +0 -2
  245. package/dist/components/p-DbJahF86.js +0 -2
  246. package/dist/components/p-DbJahF86.js.map +0 -1
  247. package/dist/components/p-DhKvqh5G.js +0 -2
  248. package/dist/components/p-DhKvqh5G.js.map +0 -1
  249. package/dist/components/p-Drcl4zS9.js +0 -2
  250. package/dist/components/p-DzPw6aDK.js +0 -2
  251. package/dist/components/p-DzPw6aDK.js.map +0 -1
  252. package/dist/components/p-jk2-y5dH.js +0 -2
  253. package/dist/components/p-jk2-y5dH.js.map +0 -1
  254. package/dist/types/shell/badge-gradient-ring.d.ts +0 -28
  255. /package/dist/components/{p-DaxKVtZG.js.map → p--CRAu9fJ.js.map} +0 -0
  256. /package/dist/components/{p-C6yLERx6.js.map → p-B1JRCDHS.js.map} +0 -0
  257. /package/dist/components/{p-Dd8VKdAO.js.map → p-BCOl1x0_.js.map} +0 -0
  258. /package/dist/components/{p-C9StMCWg.js.map → p-BHVOiWz5.js.map} +0 -0
  259. /package/dist/components/{p-DJ0GCCFa.js.map → p-BNkU9dcc.js.map} +0 -0
  260. /package/dist/components/{p-DHzn7INS.js.map → p-BS0AbMNK.js.map} +0 -0
  261. /package/dist/components/{p-CihNoe1M.js.map → p-B_jZIC9R.js.map} +0 -0
  262. /package/dist/components/{p-CAJIARNW.js.map → p-Bbb9A3NV.js.map} +0 -0
  263. /package/dist/components/{p-Dginv8PT.js.map → p-Bf7PZJPT.js.map} +0 -0
  264. /package/dist/components/{p-D6P_1YrL.js.map → p-BhYS_Ump.js.map} +0 -0
  265. /package/dist/components/{p-BKx2ihnG.js.map → p-Bu3dOjpW.js.map} +0 -0
  266. /package/dist/components/{p-BiBXCjjo.js.map → p-BxGQ3cRJ.js.map} +0 -0
  267. /package/dist/components/{p-Dl3gciej.js.map → p-BysVBVQv.js.map} +0 -0
  268. /package/dist/components/{p-CBa_6lqj.js.map → p-C-Y7gYgz.js.map} +0 -0
  269. /package/dist/components/{p-9EQ3xLI1.js.map → p-C6R5Lft0.js.map} +0 -0
  270. /package/dist/components/{p-DPR0TGGJ.js.map → p-C9gC4haA.js.map} +0 -0
  271. /package/dist/components/{p-LHzBS95u.js.map → p-CAnnQL1F.js.map} +0 -0
  272. /package/dist/components/{p-3WlVHGUe.js.map → p-Cg0kimXZ.js.map} +0 -0
  273. /package/dist/components/{p-HZz5aJKz.js.map → p-CsBICYmt.js.map} +0 -0
  274. /package/dist/components/{p-oCc3mz_c.js.map → p-D3fMaUJ3.js.map} +0 -0
  275. /package/dist/components/{p-CHEt4mW8.js.map → p-DAvh38E4.js.map} +0 -0
  276. /package/dist/components/{p-DPpHSIzS.js.map → p-DBue3ISk.js.map} +0 -0
  277. /package/dist/components/{p-BdgoB2ef.js.map → p-DDgeXGbB.js.map} +0 -0
  278. /package/dist/components/{p-hp_2W2Qy.js.map → p-DOUDRJbE.js.map} +0 -0
  279. /package/dist/components/{p-Be-vZpWx.js.map → p-DUdOmSFR.js.map} +0 -0
  280. /package/dist/components/{p-CbZ0RU2c.js.map → p-r8PMqlqm.js.map} +0 -0
  281. /package/dist/components/{p-B145kX-i.js.map → p-uI6z53BE.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["OPPOSITE_SIDE","top","right","bottom","left","rawPosition","input","side","anchorRect","anchor","popupWidth","popupHeight","align","sideOffsetPx","alignOffsetPx","x","width","y","height","mainAxisOverflow","position","viewportPadPx","viewportWidth","viewportHeight","Math","max","clampToViewport","value","size","viewportSize","padding","maximum","min","computeAnchoredPosition","preferred","oppositeSide","opposite","preferredOverflow","oppositeOverflow","useOpposite","resolvedSide","availableHeight","POSITION_RETRY_BUDGET","AnchoredPositionController","constructor","options","this","scrollResizeHandler","resizeObserver","retryRaf","liveRaf","last","isReady","ready","observe","bindListeners","unobserve","unbindListeners","cancel","schedule","onReady","cancelRetry","remaining","retryBudget","attempt","update","requestAnimationFrame","getAnchor","popup","getPopup","topLayer","showPopover","matches","measure","next","apply","scheduleLiveUpdate","mode","liveUpdate","cancelAnimationFrame","window","addEventListener","observeResize","ResizeObserver","observeResizeTargets","removeEventListener","disconnect"],"sources":["src/wc/utils/anchored-position.ts","src/wc/utils/anchored-position-controller.ts"],"sourcesContent":["export type AnchoredSide = 'top' | 'right' | 'bottom' | 'left';\nexport type AnchoredAlign = 'start' | 'center' | 'end';\n\nexport interface AnchoredPositionInput {\n anchorRect: Pick<DOMRectReadOnly, 'top' | 'left' | 'right' | 'bottom' | 'width' | 'height'>;\n popupWidth: number;\n popupHeight: number;\n side: AnchoredSide;\n align: AnchoredAlign;\n sideOffsetPx: number;\n alignOffsetPx: number;\n viewportPadPx: number;\n viewportWidth: number;\n viewportHeight: number;\n}\n\nexport interface AnchoredPosition {\n x: number;\n y: number;\n /** Side actually used, which differs from the request when placement flipped. */\n resolvedSide: AnchoredSide;\n /** Vertical room available on the resolved side inside the padded viewport. */\n availableHeight: number;\n}\n\nconst OPPOSITE_SIDE: Record<AnchoredSide, AnchoredSide> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\n/** Unclamped coordinates for one candidate side. */\nfunction rawPosition(\n input: AnchoredPositionInput,\n side: AnchoredSide,\n): Pick<AnchoredPosition, 'x' | 'y'> {\n const { anchorRect: anchor, popupWidth, popupHeight, align, sideOffsetPx, alignOffsetPx } = input;\n\n if (side === 'top' || side === 'bottom') {\n return {\n x:\n align === 'start'\n ? anchor.left + alignOffsetPx\n : align === 'end'\n ? anchor.right - popupWidth + alignOffsetPx\n : anchor.left + anchor.width / 2 - popupWidth / 2 + alignOffsetPx,\n y: side === 'top'\n ? anchor.top - popupHeight - sideOffsetPx\n : anchor.bottom + sideOffsetPx,\n };\n }\n\n return {\n x: side === 'left'\n ? anchor.left - popupWidth - sideOffsetPx\n : anchor.right + sideOffsetPx,\n y:\n align === 'start'\n ? anchor.top + alignOffsetPx\n : align === 'end'\n ? anchor.bottom - popupHeight + alignOffsetPx\n : anchor.top + anchor.height / 2 - popupHeight / 2 + alignOffsetPx,\n };\n}\n\n/** Total main-axis spill past the padded viewport for a candidate position. */\nfunction mainAxisOverflow(\n input: AnchoredPositionInput,\n side: AnchoredSide,\n position: Pick<AnchoredPosition, 'x' | 'y'>,\n): number {\n const { popupWidth, popupHeight, viewportPadPx, viewportWidth, viewportHeight } = input;\n\n if (side === 'top' || side === 'bottom') {\n return Math.max(viewportPadPx - position.y, 0) +\n Math.max(position.y + popupHeight - (viewportHeight - viewportPadPx), 0);\n }\n\n return Math.max(viewportPadPx - position.x, 0) +\n Math.max(position.x + popupWidth - (viewportWidth - viewportPadPx), 0);\n}\n\nfunction clampToViewport(value: number, size: number, viewportSize: number, padding: number): number {\n const maximum = Math.max(padding, viewportSize - size - padding);\n return Math.min(Math.max(value, padding), maximum);\n}\n\n/**\n * Pure viewport-fixed anchored-popup layout math shared by every element-anchored\n * overlay: menus, selects, tooltips, and anchored toasts.\n *\n * `side` is preferred. When the popup spills past the padded viewport there and\n * the opposite side spills less, placement flips on the main axis; the result is\n * then clamped into the viewport on both axes. Cross-axis `align` is applied\n * before clamping so `alignOffsetPx` stays an additive nudge.\n *\n * Callers own their own anchor semantics — inner-cell alignment offsets and\n * minimum widths belong to the calling component, not here.\n * @see choice-popup-alignment.ts for the choice-cell alignment transform.\n */\nexport function computeAnchoredPosition(input: AnchoredPositionInput): AnchoredPosition {\n const preferred = rawPosition(input, input.side);\n const oppositeSide = OPPOSITE_SIDE[input.side];\n const opposite = rawPosition(input, oppositeSide);\n const preferredOverflow = mainAxisOverflow(input, input.side, preferred);\n const oppositeOverflow = mainAxisOverflow(input, oppositeSide, opposite);\n const useOpposite = preferredOverflow > 0 && oppositeOverflow < preferredOverflow;\n const resolvedSide = useOpposite ? oppositeSide : input.side;\n const position = useOpposite ? opposite : preferred;\n const availableHeight =\n resolvedSide === 'top'\n ? input.anchorRect.top - input.viewportPadPx - input.sideOffsetPx\n : resolvedSide === 'bottom'\n ? input.viewportHeight - input.viewportPadPx - input.anchorRect.bottom - input.sideOffsetPx\n : input.viewportHeight - input.viewportPadPx * 2;\n\n return {\n x: clampToViewport(position.x, input.popupWidth, input.viewportWidth, input.viewportPadPx),\n y: clampToViewport(position.y, input.popupHeight, input.viewportHeight, input.viewportPadPx),\n resolvedSide,\n availableHeight: Math.max(0, availableHeight),\n };\n}\n","import {\n computeAnchoredPosition,\n type AnchoredPosition,\n type AnchoredPositionInput,\n} from './anchored-position';\n\n/** Frames to wait for an anchor and popup to become measurable before giving up. */\nconst POSITION_RETRY_BUDGET = 8;\n\n/**\n * How the scroll/resize path reschedules. Each consumer family measured\n * differently before consolidation, and the differences are preserved verbatim\n * so placement timing is unchanged.\n *\n * - `sync` — measure inside the listener. Selects.\n * - `frame` — coalesce and measure on the next frame. Tooltips.\n * - `double-frame` — coalesce, measure next frame, then measure once more the\n * frame after. Scroll-driven owners such as ShellPage commit a compact-header\n * render in the frame after the scroll event, so a single frame reads a stale\n * anchor rect. Menus.\n */\nexport type AnchoredLiveUpdateMode = 'sync' | 'frame' | 'double-frame';\n\nexport interface AnchoredPositionControllerOptions {\n /** Resolve the anchor at measure time; positioning retries while this is null. */\n getAnchor: () => HTMLElement | null;\n /** Resolve the popup at measure time; positioning retries while this is null. */\n getPopup: () => HTMLElement | null;\n /**\n * Build the layout input for one measurement pass.\n *\n * The owning component keeps its own anchor semantics here — inner-cell align\n * offsets, minimum widths, and token resolution stay with the component rather\n * than moving into this controller. Return `null` when the component's own\n * guards say the popup is not measurable yet, which schedules a retry.\n */\n measure: (anchor: HTMLElement, popup: HTMLElement) => AnchoredPositionInput | null;\n /** Commit a changed position. Not called when the result is unchanged. */\n apply: (position: AnchoredPosition) => void;\n /**\n * Move a `popover=\"manual\"` popup into the native top layer before measuring.\n *\n * Use this for popups that remain in their owner's DOM tree. The top layer\n * gives `position: fixed` viewport coordinates even when an application\n * ancestor establishes a fixed-position containing block through containment,\n * transforms, or filters.\n */\n topLayer?: boolean;\n /** Fired once per `start()` when the first measurement succeeds. */\n onReady?: () => void;\n /** Scroll/resize behavior. Defaults to `sync`. */\n liveUpdate?: AnchoredLiveUpdateMode;\n /**\n * Re-measure when the popup or anchor resizes. Tooltips need this because the\n * label's `ds-text` upgrade changes the measured width after mount.\n */\n observeResize?: boolean;\n retryBudget?: number;\n}\n\n/**\n * Lifecycle owner for an element-anchored popup: listener binding, measurement\n * retries, frame coalescing, and teardown.\n *\n * Pairs with `computeAnchoredPosition`, which owns the geometry. Split this way\n * because the geometry is pure and exhaustively testable while the lifecycle is\n * timing-dependent; keeping them separate means the risky half lives in exactly\n * one place.\n *\n * Not suitable for overlays that place several popups in one shared pass — Toast\n * positions N anchored records inside a single layout commit and keeps its own\n * scheduler, using only the geometry function.\n */\nexport class AnchoredPositionController {\n private readonly options: AnchoredPositionControllerOptions;\n private scrollResizeHandler: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private retryRaf: number | null = null;\n private liveRaf: number | null = null;\n private last: AnchoredPosition | null = null;\n private isReady = false;\n\n constructor(options: AnchoredPositionControllerOptions) {\n this.options = options;\n }\n\n /** `true` once a measurement has succeeded, for gating popup reveal. */\n get ready(): boolean {\n return this.isReady;\n }\n\n /**\n * Bind scroll/resize tracking for an opening popup.\n *\n * Deliberately does not schedule placement: every consumer binds listeners and\n * then schedules in its own order, and folding both into one call produced two\n * overlapping retry loops. Call `schedule()` or `update()` separately.\n */\n observe(): void {\n this.bindListeners();\n }\n\n /** Unbind tracking, cancel pending frames, and clear the cached position. */\n unobserve(): void {\n this.unbindListeners();\n this.cancel();\n this.last = null;\n this.isReady = false;\n }\n\n /**\n * Retry measurement each frame until it succeeds or the budget runs out, so a\n * popup is never revealed at 0,0 after a failed first pass.\n */\n schedule(onReady?: () => void): void {\n this.cancelRetry();\n this.isReady = false;\n\n let remaining = this.options.retryBudget ?? POSITION_RETRY_BUDGET;\n\n const attempt = () => {\n this.retryRaf = null;\n if (this.update()) {\n this.isReady = true;\n this.options.onReady?.();\n onReady?.();\n return;\n }\n if (remaining > 0) {\n remaining -= 1;\n this.retryRaf = requestAnimationFrame(attempt);\n }\n };\n\n this.retryRaf = requestAnimationFrame(attempt);\n }\n\n /** Measure and commit once. @returns `false` when the popup is not measurable. */\n update(): boolean {\n const anchor = this.options.getAnchor();\n if (!anchor) return false;\n const popup = this.options.getPopup();\n if (!popup) return false;\n\n if (\n this.options.topLayer &&\n typeof popup.showPopover === 'function' &&\n !popup.matches(':popover-open')\n ) {\n try {\n popup.showPopover();\n } catch {\n // The popup may not be connected yet. The scheduled retry will try again\n // on the next frame instead of measuring it in the wrong coordinate space.\n return false;\n }\n }\n\n const input = this.options.measure(anchor, popup);\n if (!input) return false;\n\n const next = computeAnchoredPosition(input);\n if (\n !this.last ||\n this.last.x !== next.x ||\n this.last.y !== next.y ||\n this.last.resolvedSide !== next.resolvedSide ||\n this.last.availableHeight !== next.availableHeight\n ) {\n this.last = next;\n this.options.apply(next);\n }\n return true;\n }\n\n /** Reposition an already-open popup without hiding it. */\n scheduleLiveUpdate(): void {\n const mode = this.options.liveUpdate ?? 'sync';\n if (mode === 'sync') {\n this.update();\n return;\n }\n\n if (this.liveRaf !== null) return;\n\n if (mode === 'frame') {\n this.liveRaf = requestAnimationFrame(() => {\n this.liveRaf = null;\n this.update();\n });\n return;\n }\n\n // double-frame stays coalesced until the second frame resolves.\n this.liveRaf = requestAnimationFrame(() => {\n this.update();\n this.liveRaf = requestAnimationFrame(() => {\n this.liveRaf = null;\n this.update();\n });\n });\n }\n\n /** Cancel pending retry and live frames without unbinding listeners. */\n cancel(): void {\n this.cancelRetry();\n if (this.liveRaf !== null) {\n cancelAnimationFrame(this.liveRaf);\n this.liveRaf = null;\n }\n }\n\n private cancelRetry(): void {\n if (this.retryRaf === null) return;\n cancelAnimationFrame(this.retryRaf);\n this.retryRaf = null;\n }\n\n private bindListeners(): void {\n this.unbindListeners();\n this.scrollResizeHandler = () => this.scheduleLiveUpdate();\n // Capture phase so scrolling inside any ancestor repositions the popup.\n window.addEventListener('scroll', this.scrollResizeHandler, true);\n window.addEventListener('resize', this.scrollResizeHandler);\n\n if (this.options.observeResize && typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver(() => this.update());\n this.observeResizeTargets();\n }\n }\n\n private unbindListeners(): void {\n if (this.scrollResizeHandler) {\n window.removeEventListener('scroll', this.scrollResizeHandler, true);\n window.removeEventListener('resize', this.scrollResizeHandler);\n this.scrollResizeHandler = null;\n }\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n /**\n * Re-attach the resize observer after the popup remounts. Safe to call\n * repeatedly; `ResizeObserver.observe` ignores duplicate targets.\n */\n observeResizeTargets(): void {\n if (!this.resizeObserver) return;\n const popup = this.options.getPopup();\n if (popup) this.resizeObserver.observe(popup);\n const anchor = this.options.getAnchor();\n if (anchor) this.resizeObserver.observe(anchor);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{p as e,H as i,c as a,h as t,a as s,t as n}from"./index.js";import{o,d}from"./p-DC_8dK55.js";import{d as c}from"./p-DbJahF86.js";import{d as r}from"./p-9GuNIXuz.js";import{d as p}from"./p-DJ0GCCFa.js";import{d as l}from"./p-Drcl4zS9.js";import{d as g}from"./p-BFfLvMZd.js";import{d as f}from"./p-JPTkZ3Ji.js";import{d as h}from"./p-BcNYvLMi.js";import{d as b}from"./p-LHzBS95u.js";import{d as m}from"./p-Cj5Hkt6Y.js";const u=[25,50,100,200];function v(e){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):0}function z(e,i){return Number.isFinite(e)&&e>0?Math.trunc(e):i}function _(e){const i=z(e.pageSize,u[0]);const a=e.pageSizeMode==="fit"?"fit":"fixed";const t=v(e.totalItems);const s=Math.max(1,Math.ceil(t/i));const n=Math.min(v(e.pageIndex),s-1);const o=(e.pageSizeOptions?.length?e.pageSizeOptions:u).map((e=>z(e,0))).filter((e=>e>0));const d=[...new Set(a==="fixed"?[...o,i]:o)].sort(((e,i)=>e-i));const c=t===0?0:n*i+1;const r=t===0?0:Math.min(t,c+i-1);return{pageIndex:n,pageSize:i,pageSizeMode:a,totalItems:t,totalPages:s,firstItem:c,lastItem:r,pageSizeOptions:d}}const y=()=>`.ds-visually-hidden.sc-ds-pagination-h,.ds-visually-hidden.sc-ds-pagination{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sc-ds-pagination-h{display:block;box-sizing:border-box;min-width:0;max-width:100%;overflow-x:auto;scrollbar-width:none}.sc-ds-pagination-h::-webkit-scrollbar{display:none}.pagination.sc-ds-pagination,.pagination__page-size.sc-ds-pagination,.pagination__navigation.sc-ds-pagination{display:flex;align-items:center;box-sizing:border-box}.pagination.sc-ds-pagination{width:max-content;min-width:100%;gap:var(--dimension-space-200)}.pagination__page-size.sc-ds-pagination,.pagination__navigation.sc-ds-pagination{flex:0 0 auto}.pagination__page-size.sc-ds-pagination{gap:0;padding-inline-end:var(--dimension-space-100)}.pagination__navigation.sc-ds-pagination{gap:var(--dimension-space-050)}.pagination__total.sc-ds-pagination,.pagination__page.sc-ds-pagination,.pagination__label.sc-ds-pagination{display:inline-flex;align-items:center;flex:0 0 auto;white-space:nowrap}.pagination__total.sc-ds-pagination{margin-inline-start:var(--dimension-space-100)}.pagination.sc-ds-pagination .pagination__page-size-select.sc-ds-pagination{--ds-select-fg-active:var(--color-foreground-secondary)}.pagination__page.sc-ds-pagination{justify-content:center;min-inline-size:0;padding-inline:var(--dimension-space-100)}.pagination--table-compact.sc-ds-pagination .pagination__total.sc-ds-pagination,.pagination--table-compact.sc-ds-pagination .pagination__boundary.sc-ds-pagination{display:none}.pagination--table-compact.sc-ds-pagination{gap:var(--dimension-space-100)}.pagination--table-compact.sc-ds-pagination .pagination__page-size.sc-ds-pagination{padding-inline-end:0}`;let S=0;const x=e(class e extends i{constructor(e){super();if(e!==false){this.__registerHost()}this.dsChange=a(this,"dsChange",7);this.pageIndex=0;this.pageSize=25;this.pageSizeMode="fixed";this.totalItems=0;this.pageSizeOptions=[25,50,100,200];this.fitToPage=false;this.fitToPageInactive=false;this.fitPageSizeLabel="Fit to page";this.fitPageSizeTriggerLabel="Fit";this.itemLabel="items";this.pageSizeLabel="Items";this.label="Pagination";this.loading=false;this.tableCompact=false;this.pageSizeControlId=`ds-pagination-${++S}-page-size`;this.hasLoaded=false}componentDidLoad(){this.hasLoaded=true;this.syncTableCompactObserver()}connectedCallback(){if(this.hasLoaded)this.syncTableCompactObserver()}disconnectedCallback(){this.tableCompactDisconnect?.();this.tableCompactDisconnect=undefined}syncTableCompactObserver(){this.tableCompactDisconnect?.();this.tableCompactDisconnect=o(this.el,(e=>{if(this.tableCompact!==e)this.tableCompact=e}))}requestPage(e){const i=this.resolvedState;if(this.loading||e===i.pageIndex||e<0||e>=i.totalPages){return}this.dsChange.emit({pageIndex:e,pageSize:i.pageSize,pageSizeMode:i.pageSizeMode,totalItems:i.totalItems,pageSizeOptions:i.pageSizeOptions,fitToPage:this.fitToPage,fitToPageInactive:this.fitToPageInactive,fitPageSize:this.resolvedFitPageSize,fitPageSizeLabel:this.fitPageSizeLabel,fitPageSizeTriggerLabel:this.fitPageSizeTriggerLabel,itemLabel:this.itemLabel,pageSizeLabel:this.pageSizeLabel,ariaLabel:this.label,previousPageIndex:i.pageIndex,previousPageSize:i.pageSize,previousPageSizeMode:i.pageSizeMode,reason:"page"})}requestPageSize(e){if(this.loading||typeof e!=="string"||e==="fit"&&this.fitToPageInactive)return;const i=this.resolvedState;const a=e==="fit"?"fit":"fixed";const t=a==="fit"?this.resolvedFitPageSize:Number(e);if(!t||t===i.pageSize&&a===i.pageSizeMode)return;this.dsChange.emit({pageIndex:0,pageSize:Math.trunc(t),pageSizeMode:a,totalItems:i.totalItems,pageSizeOptions:i.pageSizeOptions,fitToPage:this.fitToPage,fitToPageInactive:this.fitToPageInactive,fitPageSize:this.resolvedFitPageSize,fitPageSizeLabel:this.fitPageSizeLabel,fitPageSizeTriggerLabel:this.fitPageSizeTriggerLabel,itemLabel:this.itemLabel,pageSizeLabel:this.pageSizeLabel,ariaLabel:this.label,previousPageIndex:i.pageIndex,previousPageSize:i.pageSize,previousPageSizeMode:i.pageSizeMode,reason:"page-size"})}handleKeyDown(e){if(e.defaultPrevented||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey){return}const a=e.composedPath().some((e=>e instanceof i&&(e.tagName==="DS-SELECT"||["INPUT","SELECT","TEXTAREA"].includes(e.tagName))));if(a||e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;const t=this.resolvedState;const s=e.key==="ArrowLeft"?t.pageIndex-1:t.pageIndex+1;if(this.loading||s<0||s>=t.totalPages)return;e.preventDefault();this.requestPage(s)}get resolvedFitPageSize(){return Number.isFinite(this.fitPageSize)&&Number(this.fitPageSize)>0?Math.trunc(Number(this.fitPageSize)):undefined}get resolvedState(){return _({pageIndex:this.pageIndex,pageSize:this.pageSize,pageSizeMode:this.pageSizeMode,totalItems:this.totalItems,pageSizeOptions:this.pageSizeOptions})}render(){const e=this.resolvedState;const i=e.pageIndex===0;const a=e.pageIndex===e.totalPages-1;const n=e.totalItems===0?0:e.lastItem-e.firstItem+1;const o=`${n} of ${e.totalItems}`;const d=`${e.pageIndex+1} of ${e.totalPages}`;const c=`${e.firstItem}–${e.lastItem} of ${e.totalItems}`;const r=`Page ${e.pageIndex+1} of ${e.totalPages}`;const p=this.pageSizeAriaLabel??`${this.pageSizeLabel} per page`;const l=e.pageSizeOptions.map((e=>({label:String(e),value:String(e)})));if(this.fitToPage){l.push({label:this.fitPageSizeLabel,value:"fit",isInactive:this.fitToPageInactive||this.resolvedFitPageSize===undefined})}return t(s,{key:"afb85edb1ea22969dc15c418dd15446fa0f7b91e"},t("nav",{key:"c2676507ffbb933e09d6f9dd6ee28e544b2e60c7",class:{pagination:true,"pagination--table-compact":this.tableCompact},"aria-label":this.label,"aria-busy":this.loading?"true":undefined,onKeyDown:e=>this.handleKeyDown(e)},t("div",{key:"7c745a206f70e9b6c110bc9cabe44565c191e518",class:"pagination__page-size"},t("ds-text",{key:"8ddbb5050e2c58b8be3d2650784760b03c7b0eaf",class:"pagination__label",as:"span",variant:"text-body-medium",color:"secondary","aria-hidden":"true"},this.pageSizeLabel,":"),t("span",{key:"c6089c3dd20a5b4486196fd81bc8fbe8cab727c2",id:`${this.pageSizeControlId}-label`,class:"ds-visually-hidden"},p),t("ds-select",{key:"6d3a2d9b47ac7516792e844575837111af39df1b",class:"pagination__page-size-select",size:"md",inputId:this.pageSizeControlId,ariaLabelledby:`${this.pageSizeControlId}-label`,options:l,value:e.pageSizeMode==="fit"?"fit":String(e.pageSize),triggerLabel:e.pageSizeMode==="fit"?this.fitPageSizeTriggerLabel:undefined,indicator:"up-down",allowClear:false,activeFill:false,hasBorder:false,isInactive:this.loading,onDsChange:e=>{e.stopPropagation();this.requestPageSize(e.detail)}}),t("ds-text",{key:"dd126c930adb368b92696ca2cf42e72849edd47f",class:"pagination__total",as:"span",variant:"text-body-medium",color:"secondary",fontFeature:"tabular-nums"},o)),t("ds-divider",{key:"2f7e80a2f7db02d065d04e5dc448d955822bc001",class:"pagination__divider",orientation:"vertical",length:"var(--dimension-size-250)"}),t("div",{key:"66e92220a92f3272b8e212d05cc90fb81a91a79b",class:"pagination__navigation"},t("ds-button-unfilled",{key:"ed0553c2ab11ceaee0bb77aed1eb20c1537b942a",class:"pagination__boundary",variant:"icon",size:"md",icon:"ChevronLeftDouble",ariaLabel:"First page",hasBorder:false,isInactive:this.loading||i,onDsClick:()=>this.requestPage(0)}),t("ds-button-unfilled",{key:"4fb11e687f3e5f187a48a4a9b514904e778fb636",variant:"icon",size:"md",icon:"ChevronLeft",ariaLabel:"Previous page",hasBorder:false,isInactive:this.loading||i,onDsClick:()=>this.requestPage(e.pageIndex-1)}),t("ds-text",{key:"b9e537dc005e5c40c6c9279838544f509e6ba46c",class:"pagination__page",as:"span",variant:"text-body-medium",color:"secondary",fontFeature:"tabular-nums"},d),t("ds-button-unfilled",{key:"98f257e9502a02f736f5b89333d1b351102c8963",variant:"icon",size:"md",icon:"ChevronRight",ariaLabel:"Next page",hasBorder:false,isInactive:this.loading||a,onDsClick:()=>this.requestPage(e.pageIndex+1)}),t("ds-button-unfilled",{key:"45cd83ff908c9f9718dd03609a269720ee4aa111",class:"pagination__boundary",variant:"icon",size:"md",icon:"ChevronRightDouble",ariaLabel:"Last page",hasBorder:false,isInactive:this.loading||a,onDsClick:()=>this.requestPage(e.totalPages-1)})),t("span",{key:"c86be3fd949d1207f98677d24661f631eae9255c",class:"ds-visually-hidden",role:"status","aria-live":"polite","aria-atomic":"true"},c," ",this.itemLabel,". ",r,".")))}get el(){return this}static get style(){return y()}},[2,"ds-pagination",{pageIndex:[2,"page-index"],pageSize:[2,"page-size"],pageSizeMode:[1,"page-size-mode"],totalItems:[2,"total-items"],pageSizeOptions:[16],fitToPage:[4,"fit-to-page"],fitToPageInactive:[4,"fit-to-page-inactive"],fitPageSize:[2,"fit-page-size"],fitPageSizeLabel:[1,"fit-page-size-label"],fitPageSizeTriggerLabel:[1,"fit-page-size-trigger-label"],itemLabel:[1,"item-label"],pageSizeLabel:[1,"page-size-label"],pageSizeAriaLabel:[1,"page-size-aria-label"],label:[1],loading:[4],tableCompact:[32]}]);function k(){if(typeof customElements==="undefined"){return}const e=["ds-pagination","ds-badge","ds-button-unfilled","ds-checkbox","ds-divider","ds-empty-state","ds-icon","ds-loader","ds-select","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-pagination":if(!customElements.get(n(e))){customElements.define(n(e),x)}break;case"ds-badge":if(!customElements.get(n(e))){c()}break;case"ds-button-unfilled":if(!customElements.get(n(e))){d()}break;case"ds-checkbox":if(!customElements.get(n(e))){r()}break;case"ds-divider":if(!customElements.get(n(e))){p()}break;case"ds-empty-state":if(!customElements.get(n(e))){l()}break;case"ds-icon":if(!customElements.get(n(e))){g()}break;case"ds-loader":if(!customElements.get(n(e))){f()}break;case"ds-select":if(!customElements.get(n(e))){h()}break;case"ds-text":if(!customElements.get(n(e))){b()}break;case"ds-tooltip":if(!customElements.get(n(e))){m()}break}}))}k();export{x as P,k as d,_ as r};
2
- //# sourceMappingURL=p-jk2-y5dH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["DEFAULT_PAGE_SIZE_OPTIONS","nonNegativeInteger","value","Number","isFinite","Math","max","trunc","positiveInteger","fallback","resolvePaginationState","state","pageSize","pageSizeMode","totalItems","totalPages","ceil","pageIndex","min","options","pageSizeOptions","length","map","filter","Set","sort","left","right","firstItem","lastItem","paginationCss","paginationId","Pagination","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","fitToPage","fitToPageInactive","fitPageSizeLabel","fitPageSizeTriggerLabel","itemLabel","pageSizeLabel","label","loading","tableCompact","pageSizeControlId","hasLoaded","componentDidLoad","syncTableCompactObserver","connectedCallback","disconnectedCallback","tableCompactDisconnect","undefined","observeTableCaptionCompact","el","compact","requestPage","resolvedState","dsChange","emit","fitPageSize","resolvedFitPageSize","ariaLabel","previousPageIndex","previousPageSize","previousPageSizeMode","reason","requestPageSize","nextMode","handleKeyDown","event","defaultPrevented","altKey","ctrlKey","metaKey","shiftKey","fromChoiceControl","composedPath","some","node","tagName","includes","key","preventDefault","render","atStart","atEnd","visibleItems","total","page","announcedRange","announcedPage","pageSizeAriaLabel","String","push","isInactive","h","Host","class","pagination","onKeyDown","as","variant","color","id","size","inputId","ariaLabelledby","triggerLabel","indicator","allowClear","activeFill","hasBorder","onDsChange","stopPropagation","detail","fontFeature","orientation","icon","onDsClick","role"],"sources":["src/wc/components/Pagination/pagination-model.ts","src/wc/components/Pagination/Pagination.css?tag=ds-pagination&encapsulation=scoped","src/wc/components/Pagination/Pagination.tsx"],"sourcesContent":["import type { PaginationPageSizeMode, PaginationState } from './pagination-types';\n\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [25, 50, 100, 200] as const;\n\nexport interface ResolvedPaginationState {\n pageIndex: number;\n pageSize: number;\n pageSizeMode: PaginationPageSizeMode;\n totalItems: number;\n totalPages: number;\n firstItem: number;\n lastItem: number;\n pageSizeOptions: number[];\n}\n\nfunction nonNegativeInteger(value: number): number {\n return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : 0;\n}\n\nfunction positiveInteger(value: number, fallback: number): number {\n return Number.isFinite(value) && value > 0 ? Math.trunc(value) : fallback;\n}\n\nexport function resolvePaginationState(\n state: Pick<\n PaginationState,\n 'pageIndex' | 'pageSize' | 'pageSizeMode' | 'totalItems' | 'pageSizeOptions'\n >,\n): ResolvedPaginationState {\n const pageSize = positiveInteger(state.pageSize, DEFAULT_PAGE_SIZE_OPTIONS[0]);\n const pageSizeMode = state.pageSizeMode === 'fit' ? 'fit' : 'fixed';\n const totalItems = nonNegativeInteger(state.totalItems);\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n const pageIndex = Math.min(nonNegativeInteger(state.pageIndex), totalPages - 1);\n const options = (state.pageSizeOptions?.length\n ? state.pageSizeOptions\n : DEFAULT_PAGE_SIZE_OPTIONS\n )\n .map(value => positiveInteger(value, 0))\n .filter(value => value > 0);\n const pageSizeOptions = [\n ...new Set(pageSizeMode === 'fixed' ? [...options, pageSize] : options),\n ].sort((left, right) => left - right);\n const firstItem = totalItems === 0 ? 0 : pageIndex * pageSize + 1;\n const lastItem = totalItems === 0 ? 0 : Math.min(totalItems, firstItem + pageSize - 1);\n\n return {\n pageIndex,\n pageSize,\n pageSizeMode,\n totalItems,\n totalPages,\n firstItem,\n lastItem,\n pageSizeOptions,\n };\n}\n","@import '../../utils/visually-hidden.css';\n\n:host {\n display: block;\n box-sizing: border-box;\n min-width: 0;\n max-width: 100%;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n:host::-webkit-scrollbar {\n display: none;\n}\n\n.pagination,\n.pagination__page-size,\n.pagination__navigation {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n}\n\n.pagination {\n width: max-content;\n min-width: 100%;\n gap: var(--dimension-space-200);\n}\n\n.pagination__page-size,\n.pagination__navigation {\n flex: 0 0 auto;\n}\n\n.pagination__page-size {\n gap: 0;\n padding-inline-end: var(--dimension-space-100);\n}\n\n.pagination__navigation {\n gap: var(--dimension-space-050);\n}\n\n.pagination__total,\n.pagination__page,\n.pagination__label {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n white-space: nowrap;\n}\n\n.pagination__total {\n margin-inline-start: var(--dimension-space-100);\n}\n\n.pagination .pagination__page-size-select {\n --ds-select-fg-active: var(--color-foreground-secondary);\n}\n\n.pagination__page {\n justify-content: center;\n min-inline-size: 0;\n padding-inline: var(--dimension-space-100);\n}\n\n.pagination--table-compact .pagination__total,\n.pagination--table-compact .pagination__boundary {\n display: none;\n}\n\n.pagination--table-compact {\n gap: var(--dimension-space-100);\n}\n\n.pagination--table-compact .pagination__page-size {\n padding-inline-end: 0;\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Prop, State } from '@stencil/core';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\nimport { resolvePaginationState } from './pagination-model';\nimport type {\n PaginationChangeDetail,\n PaginationPageSizeMode,\n} from './pagination-types';\n\nlet paginationId = 0;\n\n@Component({\n tag: 'ds-pagination',\n styleUrl: 'Pagination.css',\n scoped: true,\n})\nexport class Pagination {\n @Element() el!: HTMLElement;\n\n /** Controlled zero-based page index. */\n @Prop() pageIndex: number = 0;\n /** Controlled number of top-level items on a full page. */\n @Prop() pageSize: number = 25;\n /** Whether pageSize is a fixed choice or a measured Fit snapshot. */\n @Prop() pageSizeMode: PaginationPageSizeMode = 'fixed';\n /** Controlled total number of top-level items across every page. */\n @Prop() totalItems: number = 0;\n /** Available page sizes. Assign arrays through JavaScript. */\n @Prop() pageSizeOptions: number[] = [25, 50, 100, 200];\n /** Include the Fit to page choice. */\n @Prop() fitToPage: boolean = false;\n /** Keep the Fit to page choice visible but unavailable. */\n @Prop() fitToPageInactive: boolean = false;\n /** Effective whole-item capacity to request when Fit is selected. */\n @Prop() fitPageSize: number | undefined;\n /** Full choice-list label for Fit. */\n @Prop() fitPageSizeLabel: string = 'Fit to page';\n /** Compact closed-trigger label while Fit is selected. */\n @Prop() fitPageSizeTriggerLabel: string = 'Fit';\n /** Localized plural noun used by assistive range announcements. */\n @Prop() itemLabel: string = 'items';\n /** Visible page-size control label. */\n @Prop() pageSizeLabel: string = 'Items';\n /** Accessible page-size control label. Defaults to “{pageSizeLabel} per page”. */\n @Prop() pageSizeAriaLabel: string | undefined;\n /** Accessible name for the pagination navigation region. */\n @Prop() label: string = 'Pagination';\n /** Prevent interaction while the owner replaces the current data page. */\n @Prop() loading: boolean = false;\n\n /** Emits the complete next controlled state after a page or page-size request. */\n @Event() dsChange!: EventEmitter<PaginationChangeDetail>;\n\n @State() private tableCompact = false;\n\n private readonly pageSizeControlId = `ds-pagination-${++paginationId}-page-size`;\n private tableCompactDisconnect: (() => void) | undefined;\n private hasLoaded = false;\n\n componentDidLoad(): void {\n this.hasLoaded = true;\n this.syncTableCompactObserver();\n }\n\n connectedCallback(): void {\n if (this.hasLoaded) this.syncTableCompactObserver();\n }\n\n disconnectedCallback(): void {\n this.tableCompactDisconnect?.();\n this.tableCompactDisconnect = undefined;\n }\n\n private syncTableCompactObserver(): void {\n this.tableCompactDisconnect?.();\n this.tableCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.tableCompact !== compact) this.tableCompact = compact;\n });\n }\n\n private requestPage(pageIndex: number): void {\n const state = this.resolvedState;\n if (this.loading || pageIndex === state.pageIndex || pageIndex < 0 || pageIndex >= state.totalPages) {\n return;\n }\n this.dsChange.emit({\n pageIndex,\n pageSize: state.pageSize,\n pageSizeMode: state.pageSizeMode,\n totalItems: state.totalItems,\n pageSizeOptions: state.pageSizeOptions,\n fitToPage: this.fitToPage,\n fitToPageInactive: this.fitToPageInactive,\n fitPageSize: this.resolvedFitPageSize,\n fitPageSizeLabel: this.fitPageSizeLabel,\n fitPageSizeTriggerLabel: this.fitPageSizeTriggerLabel,\n itemLabel: this.itemLabel,\n pageSizeLabel: this.pageSizeLabel,\n ariaLabel: this.label,\n previousPageIndex: state.pageIndex,\n previousPageSize: state.pageSize,\n previousPageSizeMode: state.pageSizeMode,\n reason: 'page',\n });\n }\n\n private requestPageSize(value: string | string[]): void {\n if (\n this.loading ||\n typeof value !== 'string' ||\n (value === 'fit' && this.fitToPageInactive)\n ) return;\n const state = this.resolvedState;\n const nextMode: PaginationPageSizeMode = value === 'fit' ? 'fit' : 'fixed';\n const pageSize = nextMode === 'fit' ? this.resolvedFitPageSize : Number(value);\n if (!pageSize || (pageSize === state.pageSize && nextMode === state.pageSizeMode)) return;\n this.dsChange.emit({\n pageIndex: 0,\n pageSize: Math.trunc(pageSize),\n pageSizeMode: nextMode,\n totalItems: state.totalItems,\n pageSizeOptions: state.pageSizeOptions,\n fitToPage: this.fitToPage,\n fitToPageInactive: this.fitToPageInactive,\n fitPageSize: this.resolvedFitPageSize,\n fitPageSizeLabel: this.fitPageSizeLabel,\n fitPageSizeTriggerLabel: this.fitPageSizeTriggerLabel,\n itemLabel: this.itemLabel,\n pageSizeLabel: this.pageSizeLabel,\n ariaLabel: this.label,\n previousPageIndex: state.pageIndex,\n previousPageSize: state.pageSize,\n previousPageSizeMode: state.pageSizeMode,\n reason: 'page-size',\n });\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n const fromChoiceControl = event.composedPath().some(node =>\n node instanceof HTMLElement &&\n (node.tagName === 'DS-SELECT' || ['INPUT', 'SELECT', 'TEXTAREA'].includes(node.tagName)),\n );\n if (fromChoiceControl || (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')) return;\n const state = this.resolvedState;\n const pageIndex = event.key === 'ArrowLeft' ? state.pageIndex - 1 : state.pageIndex + 1;\n if (this.loading || pageIndex < 0 || pageIndex >= state.totalPages) return;\n event.preventDefault();\n this.requestPage(pageIndex);\n }\n\n private get resolvedFitPageSize(): number | undefined {\n return Number.isFinite(this.fitPageSize) && Number(this.fitPageSize) > 0\n ? Math.trunc(Number(this.fitPageSize))\n : undefined;\n }\n\n private get resolvedState() {\n return resolvePaginationState({\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n pageSizeMode: this.pageSizeMode,\n totalItems: this.totalItems,\n pageSizeOptions: this.pageSizeOptions,\n });\n }\n\n render() {\n const state = this.resolvedState;\n const atStart = state.pageIndex === 0;\n const atEnd = state.pageIndex === state.totalPages - 1;\n const visibleItems = state.totalItems === 0 ? 0 : state.lastItem - state.firstItem + 1;\n const total = `${visibleItems} of ${state.totalItems}`;\n const page = `${state.pageIndex + 1} of ${state.totalPages}`;\n const announcedRange = `${state.firstItem}–${state.lastItem} of ${state.totalItems}`;\n const announcedPage = `Page ${state.pageIndex + 1} of ${state.totalPages}`;\n const pageSizeAriaLabel = this.pageSizeAriaLabel ?? `${this.pageSizeLabel} per page`;\n const options: Array<{ label: string; value: string; isInactive?: boolean }> =\n state.pageSizeOptions.map(value => ({ label: String(value), value: String(value) }));\n if (this.fitToPage) {\n options.push({\n label: this.fitPageSizeLabel,\n value: 'fit',\n isInactive: this.fitToPageInactive || this.resolvedFitPageSize === undefined,\n });\n }\n\n return (\n <Host>\n <nav\n class={{\n pagination: true,\n 'pagination--table-compact': this.tableCompact,\n }}\n aria-label={this.label}\n aria-busy={this.loading ? 'true' : undefined}\n onKeyDown={event => this.handleKeyDown(event)}\n >\n <div class=\"pagination__page-size\">\n <ds-text\n class=\"pagination__label\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n aria-hidden=\"true\"\n >\n {this.pageSizeLabel}:\n </ds-text>\n <span id={`${this.pageSizeControlId}-label`} class=\"ds-visually-hidden\">\n {pageSizeAriaLabel}\n </span>\n <ds-select\n class=\"pagination__page-size-select\"\n size=\"md\"\n inputId={this.pageSizeControlId}\n ariaLabelledby={`${this.pageSizeControlId}-label`}\n options={options}\n value={state.pageSizeMode === 'fit' ? 'fit' : String(state.pageSize)}\n triggerLabel={state.pageSizeMode === 'fit' ? this.fitPageSizeTriggerLabel : undefined}\n indicator=\"up-down\"\n allowClear={false}\n activeFill={false}\n hasBorder={false}\n isInactive={this.loading}\n onDsChange={event => {\n event.stopPropagation();\n this.requestPageSize(event.detail);\n }}\n />\n <ds-text\n class=\"pagination__total\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n fontFeature=\"tabular-nums\"\n >\n {total}\n </ds-text>\n </div>\n <ds-divider\n class=\"pagination__divider\"\n orientation=\"vertical\"\n length=\"var(--dimension-size-250)\"\n />\n <div class=\"pagination__navigation\">\n <ds-button-unfilled\n class=\"pagination__boundary\"\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronLeftDouble\"\n ariaLabel=\"First page\"\n hasBorder={false}\n isInactive={this.loading || atStart}\n onDsClick={() => this.requestPage(0)}\n />\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronLeft\"\n ariaLabel=\"Previous page\"\n hasBorder={false}\n isInactive={this.loading || atStart}\n onDsClick={() => this.requestPage(state.pageIndex - 1)}\n />\n <ds-text\n class=\"pagination__page\"\n as=\"span\"\n variant=\"text-body-medium\"\n color=\"secondary\"\n fontFeature=\"tabular-nums\"\n >\n {page}\n </ds-text>\n <ds-button-unfilled\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronRight\"\n ariaLabel=\"Next page\"\n hasBorder={false}\n isInactive={this.loading || atEnd}\n onDsClick={() => this.requestPage(state.pageIndex + 1)}\n />\n <ds-button-unfilled\n class=\"pagination__boundary\"\n variant=\"icon\"\n size=\"md\"\n icon=\"ChevronRightDouble\"\n ariaLabel=\"Last page\"\n hasBorder={false}\n isInactive={this.loading || atEnd}\n onDsClick={() => this.requestPage(state.totalPages - 1)}\n />\n </div>\n <span class=\"ds-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcedRange} {this.itemLabel}. {announcedPage}.\n </span>\n </nav>\n </Host>\n );\n }\n}\n"],"mappings":"uaAEO,MAAMA,EAA4B,CAAC,GAAI,GAAI,IAAK,KAavD,SAASC,EAAmBC,GAC1B,OAAOC,OAAOC,SAASF,GAASG,KAAKC,IAAI,EAAGD,KAAKE,MAAML,IAAU,CACnE,CAEA,SAASM,EAAgBN,EAAeO,GACtC,OAAON,OAAOC,SAASF,IAAUA,EAAQ,EAAIG,KAAKE,MAAML,GAASO,CACnE,CAEM,SAAUC,EACdC,GAKA,MAAMC,EAAWJ,EAAgBG,EAAMC,SAAUZ,EAA0B,IAC3E,MAAMa,EAAeF,EAAME,eAAiB,MAAQ,MAAQ,QAC5D,MAAMC,EAAab,EAAmBU,EAAMG,YAC5C,MAAMC,EAAaV,KAAKC,IAAI,EAAGD,KAAKW,KAAKF,EAAaF,IACtD,MAAMK,EAAYZ,KAAKa,IAAIjB,EAAmBU,EAAMM,WAAYF,EAAa,GAC7E,MAAMI,GAAWR,EAAMS,iBAAiBC,OACpCV,EAAMS,gBACNpB,GAEDsB,KAAIpB,GAASM,EAAgBN,EAAO,KACpCqB,QAAOrB,GAASA,EAAQ,IAC3B,MAAMkB,EAAkB,IACnB,IAAII,IAAIX,IAAiB,QAAU,IAAIM,EAASP,GAAYO,IAC/DM,MAAK,CAACC,EAAMC,IAAUD,EAAOC,IAC/B,MAAMC,EAAYd,IAAe,EAAI,EAAIG,EAAYL,EAAW,EAChE,MAAMiB,EAAWf,IAAe,EAAI,EAAIT,KAAKa,IAAIJ,EAAYc,EAAYhB,EAAW,GAEpF,MAAO,CACLK,YACAL,WACAC,eACAC,aACAC,aACAa,YACAC,WACAT,kBAEJ,CCxDA,MAAMU,EAAgB,IAAM,kuDCQ5B,IAAIC,EAAe,E,MAONC,EAAUC,EAAA,MAAAD,UAAAE,EALvB,WAAAC,CAAAC,G,+EASUC,KAAApB,UAAoB,EAEpBoB,KAAAzB,SAAmB,GAEnByB,KAAAxB,aAAuC,QAEvCwB,KAAAvB,WAAqB,EAErBuB,KAAAjB,gBAA4B,CAAC,GAAI,GAAI,IAAK,KAE1CiB,KAAAC,UAAqB,MAErBD,KAAAE,kBAA6B,MAI7BF,KAAAG,iBAA2B,cAE3BH,KAAAI,wBAAkC,MAElCJ,KAAAK,UAAoB,QAEpBL,KAAAM,cAAwB,QAIxBN,KAAAO,MAAgB,aAEhBP,KAAAQ,QAAmB,MAKVR,KAAAS,aAAe,MAEfT,KAAAU,kBAAoB,mBAAmBhB,cAEhDM,KAAAW,UAAY,KAqPrB,CAnPC,gBAAAC,GACEZ,KAAKW,UAAY,KACjBX,KAAKa,0B,CAGP,iBAAAC,GACE,GAAId,KAAKW,UAAWX,KAAKa,0B,CAG3B,oBAAAE,GACEf,KAAKgB,2BACLhB,KAAKgB,uBAAyBC,S,CAGxB,wBAAAJ,GACNb,KAAKgB,2BACLhB,KAAKgB,uBAAyBE,EAA2BlB,KAAKmB,IAAIC,IAChE,GAAIpB,KAAKS,eAAiBW,EAASpB,KAAKS,aAAeW,CAAO,G,CAI1D,WAAAC,CAAYzC,GAClB,MAAMN,EAAQ0B,KAAKsB,cACnB,GAAItB,KAAKQ,SAAW5B,IAAcN,EAAMM,WAAaA,EAAY,GAAKA,GAAaN,EAAMI,WAAY,CACnG,M,CAEFsB,KAAKuB,SAASC,KAAK,CACjB5C,YACAL,SAAUD,EAAMC,SAChBC,aAAcF,EAAME,aACpBC,WAAYH,EAAMG,WAClBM,gBAAiBT,EAAMS,gBACvBkB,UAAWD,KAAKC,UAChBC,kBAAmBF,KAAKE,kBACxBuB,YAAazB,KAAK0B,oBAClBvB,iBAAkBH,KAAKG,iBACvBC,wBAAyBJ,KAAKI,wBAC9BC,UAAWL,KAAKK,UAChBC,cAAeN,KAAKM,cACpBqB,UAAW3B,KAAKO,MAChBqB,kBAAmBtD,EAAMM,UACzBiD,iBAAkBvD,EAAMC,SACxBuD,qBAAsBxD,EAAME,aAC5BuD,OAAQ,Q,CAIJ,eAAAC,CAAgBnE,GACtB,GACEmC,KAAKQ,gBACE3C,IAAU,UAChBA,IAAU,OAASmC,KAAKE,kBACzB,OACF,MAAM5B,EAAQ0B,KAAKsB,cACnB,MAAMW,EAAmCpE,IAAU,MAAQ,MAAQ,QACnE,MAAMU,EAAW0D,IAAa,MAAQjC,KAAK0B,oBAAsB5D,OAAOD,GACxE,IAAKU,GAAaA,IAAaD,EAAMC,UAAY0D,IAAa3D,EAAME,aAAe,OACnFwB,KAAKuB,SAASC,KAAK,CACjB5C,UAAW,EACXL,SAAUP,KAAKE,MAAMK,GACrBC,aAAcyD,EACdxD,WAAYH,EAAMG,WAClBM,gBAAiBT,EAAMS,gBACvBkB,UAAWD,KAAKC,UAChBC,kBAAmBF,KAAKE,kBACxBuB,YAAazB,KAAK0B,oBAClBvB,iBAAkBH,KAAKG,iBACvBC,wBAAyBJ,KAAKI,wBAC9BC,UAAWL,KAAKK,UAChBC,cAAeN,KAAKM,cACpBqB,UAAW3B,KAAKO,MAChBqB,kBAAmBtD,EAAMM,UACzBiD,iBAAkBvD,EAAMC,SACxBuD,qBAAsBxD,EAAME,aAC5BuD,OAAQ,a,CAIJ,aAAAG,CAAcC,GACpB,GAAIA,EAAMC,kBAAoBD,EAAME,QAAUF,EAAMG,SAAWH,EAAMI,SAAWJ,EAAMK,SAAU,CAC9F,M,CAEF,MAAMC,EAAoBN,EAAMO,eAAeC,MAAKC,GAClDA,aAAgB/C,IACf+C,EAAKC,UAAY,aAAe,CAAC,QAAS,SAAU,YAAYC,SAASF,EAAKC,YAEjF,GAAIJ,GAAsBN,EAAMY,MAAQ,aAAeZ,EAAMY,MAAQ,aAAe,OACpF,MAAMzE,EAAQ0B,KAAKsB,cACnB,MAAM1C,EAAYuD,EAAMY,MAAQ,YAAczE,EAAMM,UAAY,EAAIN,EAAMM,UAAY,EACtF,GAAIoB,KAAKQ,SAAW5B,EAAY,GAAKA,GAAaN,EAAMI,WAAY,OACpEyD,EAAMa,iBACNhD,KAAKqB,YAAYzC,E,CAGnB,uBAAY8C,GACV,OAAO5D,OAAOC,SAASiC,KAAKyB,cAAgB3D,OAAOkC,KAAKyB,aAAe,EACnEzD,KAAKE,MAAMJ,OAAOkC,KAAKyB,cACvBR,S,CAGN,iBAAYK,GACV,OAAOjD,EAAuB,CAC5BO,UAAWoB,KAAKpB,UAChBL,SAAUyB,KAAKzB,SACfC,aAAcwB,KAAKxB,aACnBC,WAAYuB,KAAKvB,WACjBM,gBAAiBiB,KAAKjB,iB,CAI1B,MAAAkE,GACE,MAAM3E,EAAQ0B,KAAKsB,cACnB,MAAM4B,EAAU5E,EAAMM,YAAc,EACpC,MAAMuE,EAAQ7E,EAAMM,YAAcN,EAAMI,WAAa,EACrD,MAAM0E,EAAe9E,EAAMG,aAAe,EAAI,EAAIH,EAAMkB,SAAWlB,EAAMiB,UAAY,EACrF,MAAM8D,EAAQ,GAAGD,QAAmB9E,EAAMG,aAC1C,MAAM6E,EAAO,GAAGhF,EAAMM,UAAY,QAAQN,EAAMI,aAChD,MAAM6E,EAAiB,GAAGjF,EAAMiB,aAAajB,EAAMkB,eAAelB,EAAMG,aACxE,MAAM+E,EAAgB,QAAQlF,EAAMM,UAAY,QAAQN,EAAMI,aAC9D,MAAM+E,EAAoBzD,KAAKyD,mBAAqB,GAAGzD,KAAKM,yBAC5D,MAAMxB,EACJR,EAAMS,gBAAgBE,KAAIpB,IAAK,CAAO0C,MAAOmD,OAAO7F,GAAQA,MAAO6F,OAAO7F,OAC5E,GAAImC,KAAKC,UAAW,CAClBnB,EAAQ6E,KAAK,CACXpD,MAAOP,KAAKG,iBACZtC,MAAO,MACP+F,WAAY5D,KAAKE,mBAAqBF,KAAK0B,sBAAwBT,W,CAIvE,OACE4C,EAACC,EAAI,CAAAf,IAAA,4CACHc,EAAA,OAAAd,IAAA,2CACEgB,MAAO,CACLC,WAAY,KACZ,4BAA6BhE,KAAKS,cACnC,aACWT,KAAKO,MAAK,YACXP,KAAKQ,QAAU,OAASS,UACnCgD,UAAW9B,GAASnC,KAAKkC,cAAcC,IAEvC0B,EAAA,OAAAd,IAAA,2CAAKgB,MAAM,yBACTF,EAAA,WAAAd,IAAA,2CACEgB,MAAM,oBACNG,GAAG,OACHC,QAAQ,mBACRC,MAAM,YAAW,cACL,QAEXpE,KAAKM,cACE,KACVuD,EAAA,QAAAd,IAAA,2CAAMsB,GAAI,GAAGrE,KAAKU,0BAA2BqD,MAAM,sBAChDN,GAEHI,EAAA,aAAAd,IAAA,2CACEgB,MAAM,+BACNO,KAAK,KACLC,QAASvE,KAAKU,kBACd8D,eAAgB,GAAGxE,KAAKU,0BACxB5B,QAASA,EACTjB,MAAOS,EAAME,eAAiB,MAAQ,MAAQkF,OAAOpF,EAAMC,UAC3DkG,aAAcnG,EAAME,eAAiB,MAAQwB,KAAKI,wBAA0Ba,UAC5EyD,UAAU,UACVC,WAAY,MACZC,WAAY,MACZC,UAAW,MACXjB,WAAY5D,KAAKQ,QACjBsE,WAAY3C,IACVA,EAAM4C,kBACN/E,KAAKgC,gBAAgBG,EAAM6C,OAAO,IAGtCnB,EAAA,WAAAd,IAAA,2CACEgB,MAAM,oBACNG,GAAG,OACHC,QAAQ,mBACRC,MAAM,YACNa,YAAY,gBAEX5B,IAGLQ,EAAA,cAAAd,IAAA,2CACEgB,MAAM,sBACNmB,YAAY,WACZlG,OAAO,8BAET6E,EAAA,OAAAd,IAAA,2CAAKgB,MAAM,0BACTF,EAAA,sBAAAd,IAAA,2CACEgB,MAAM,uBACNI,QAAQ,OACRG,KAAK,KACLa,KAAK,oBACLxD,UAAU,aACVkD,UAAW,MACXjB,WAAY5D,KAAKQ,SAAW0C,EAC5BkC,UAAW,IAAMpF,KAAKqB,YAAY,KAEpCwC,EAAA,sBAAAd,IAAA,2CACEoB,QAAQ,OACRG,KAAK,KACLa,KAAK,cACLxD,UAAU,gBACVkD,UAAW,MACXjB,WAAY5D,KAAKQ,SAAW0C,EAC5BkC,UAAW,IAAMpF,KAAKqB,YAAY/C,EAAMM,UAAY,KAEtDiF,EAAA,WAAAd,IAAA,2CACEgB,MAAM,mBACNG,GAAG,OACHC,QAAQ,mBACRC,MAAM,YACNa,YAAY,gBAEX3B,GAEHO,EAAA,sBAAAd,IAAA,2CACEoB,QAAQ,OACRG,KAAK,KACLa,KAAK,eACLxD,UAAU,YACVkD,UAAW,MACXjB,WAAY5D,KAAKQ,SAAW2C,EAC5BiC,UAAW,IAAMpF,KAAKqB,YAAY/C,EAAMM,UAAY,KAEtDiF,EAAA,sBAAAd,IAAA,2CACEgB,MAAM,uBACNI,QAAQ,OACRG,KAAK,KACLa,KAAK,qBACLxD,UAAU,YACVkD,UAAW,MACXjB,WAAY5D,KAAKQ,SAAW2C,EAC5BiC,UAAW,IAAMpF,KAAKqB,YAAY/C,EAAMI,WAAa,MAGzDmF,EAAA,QAAAd,IAAA,2CAAMgB,MAAM,qBAAqBsB,KAAK,SAAQ,YAAW,SAAQ,cAAa,QAC3E9B,EAAc,IAAGvD,KAAKK,UAAS,KAAImD,EAAa,M","ignoreList":[]}
@@ -1,28 +0,0 @@
1
- /** Per-badge background-position for shell gradient ring sampling. */
2
- export declare const BADGE_GRADIENT_POSITION_VAR = "--_badge-gradient-position";
3
- export interface GradientSurface {
4
- element: HTMLElement;
5
- chromeHost: HTMLElement;
6
- positionVar: string;
7
- }
8
- /** Whether the badge sits under a shell with an active wash preset. */
9
- export declare function isShellGradientActive(from: HTMLElement): boolean;
10
- /** Bar or panel chrome surface that owns the shell gradient stack. */
11
- export declare function findGradientSurface(from: HTMLElement): GradientSurface | null;
12
- interface ParsedPosition {
13
- x: number;
14
- y: number;
15
- }
16
- /** Parse a two-value CSS background-position (e.g. `-200px 0`). */
17
- export declare function parseCssBackgroundPosition(value: string): ParsedPosition;
18
- /**
19
- * Background position for a badge ring so the shell gradient aligns with nav chrome.
20
- * Uses badge center relative to the painted chrome surface.
21
- */
22
- export declare function badgeGradientPosition(badgeHost: HTMLElement, surface: GradientSurface, shellPosition: string): string;
23
- /** Resolve shell gradient position from chrome host custom properties. */
24
- export declare function readShellGradientPosition(surface: GradientSurface): string;
25
- /** Stamp `--_badge-gradient-position` on the badge host (fixed viewport chrome). */
26
- export declare function syncBadgeGradientPosition(badgeHost: HTMLElement): void;
27
- export {};
28
- //# sourceMappingURL=badge-gradient-ring.d.ts.map