@persona/design-system 0.10.10 → 0.10.12

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 (356) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/AdvancedFilterRuleRow.d.mts +5 -2
  3. package/dist/AdvancedFilterRulesPopover.d.mts +6 -2
  4. package/dist/ArrayValueControl.d.mts +1 -1
  5. package/dist/{Badge-BCdsVKuj.mjs → Badge-B2AJMf3d.mjs} +2 -2
  6. package/dist/{Badge-BCdsVKuj.mjs.map → Badge-B2AJMf3d.mjs.map} +1 -1
  7. package/dist/BooleanValueControl.d.mts +1 -1
  8. package/dist/{Breadcrumbs-CMf3Uvow.mjs → Breadcrumbs-DRs9eo1o.mjs} +5 -5
  9. package/dist/Breadcrumbs-DRs9eo1o.mjs.map +1 -0
  10. package/dist/{CardV2-CrV6eEQb.mjs → CardV2-DO-8COfu.mjs} +11 -8
  11. package/dist/CardV2-DO-8COfu.mjs.map +1 -0
  12. package/dist/ChartFrame.d.mts +61 -0
  13. package/dist/ChartLegend.d.mts +60 -0
  14. package/dist/ChartPopover.d.mts +155 -0
  15. package/dist/{Checkbox-Dr4LMKHV.mjs → Checkbox-BAh-wF_F.mjs} +5 -5
  16. package/dist/Checkbox-BAh-wF_F.mjs.map +1 -0
  17. package/dist/{CheckboxGroupField-Bpu2j6G2.d.mts → CheckboxGroupField-XSVAmESI.d.mts} +2 -2
  18. package/dist/CheckboxGroupField.d.mts +1 -1
  19. package/dist/ChoicesValueControl.d.mts +1 -1
  20. package/dist/{Combobox-Gb_j1dg6.mjs → Combobox-BNjYEAmv.mjs} +313 -138
  21. package/dist/Combobox-BNjYEAmv.mjs.map +1 -0
  22. package/dist/Combobox-DbcSss15.d.mts +12 -0
  23. package/dist/Combobox.d.mts +3 -3
  24. package/dist/{ComboboxBase-BPXqJHaQ.d.mts → ComboboxBase-CrFweFGi.d.mts} +61 -21
  25. package/dist/ComboboxBase.d.mts +2 -2
  26. package/dist/{ComboboxMultiSelect-BwkkSymj.d.mts → ComboboxMultiSelect-Cp5GBGQj.d.mts} +10 -6
  27. package/dist/ComboboxMultiSelect.d.mts +2 -2
  28. package/dist/{ComboboxSingleSelect-CdNNJNkp.d.mts → ComboboxSingleSelect-u7fK3Yvy.d.mts} +8 -6
  29. package/dist/ComboboxSingleSelect.d.mts +2 -2
  30. package/dist/{DataTable-BE9inUi-.d.mts → DataTable-C1mdfmQa.d.mts} +17 -7
  31. package/dist/{DataTable-CIZJ1vO8.mjs → DataTable-DdSY9mzT.mjs} +36 -23
  32. package/dist/DataTable-DdSY9mzT.mjs.map +1 -0
  33. package/dist/DataTable.d.mts +1 -1
  34. package/dist/{DatePicker-C9redLBr.mjs → DatePicker-DiilpYQg.mjs} +5 -5
  35. package/dist/{DatePicker-C9redLBr.mjs.map → DatePicker-DiilpYQg.mjs.map} +1 -1
  36. package/dist/DateRangeValueControl.d.mts +1 -1
  37. package/dist/DateValueControl.d.mts +1 -1
  38. package/dist/{DropdownButton-DpLG-cIj.mjs → DropdownButton-BxZ5hn0X.mjs} +3 -3
  39. package/dist/{DropdownButton-DpLG-cIj.mjs.map → DropdownButton-BxZ5hn0X.mjs.map} +1 -1
  40. package/dist/DropdownButton.d.mts +1 -1
  41. package/dist/{DropdownMenu-B6D4stkF.d.mts → DropdownMenu-CQR0U-zM.d.mts} +2 -2
  42. package/dist/{DropdownMenu-c8XK2Lr4.mjs → DropdownMenu-Ip75l4Th.mjs} +21 -2
  43. package/dist/DropdownMenu-Ip75l4Th.mjs.map +1 -0
  44. package/dist/DropdownMenu.d.mts +1 -1
  45. package/dist/{FieldRegistry-C2NVPhMO.d.mts → FieldRegistry-CJwGpUVK.d.mts} +2 -2
  46. package/dist/FieldRegistry.d.mts +1 -1
  47. package/dist/{FilterBar-BE_gBM0H.d.mts → FilterBar-CA4mDAXK.d.mts} +13 -5
  48. package/dist/FilterBar.d.mts +1 -1
  49. package/dist/FilterPickerMenu.d.mts +2 -2
  50. package/dist/FilterPill.d.mts +1 -1
  51. package/dist/FilterPopover.d.mts +1 -1
  52. package/dist/FloatValueControl.d.mts +3 -2
  53. package/dist/{FloatingToolbar-DLRaE0o7.mjs → FloatingToolbar-BA8Fqmrz.mjs} +35 -38
  54. package/dist/FloatingToolbar-BA8Fqmrz.mjs.map +1 -0
  55. package/dist/{FormControl-BztNXLn6.mjs → FormControl-BoKGiWdQ.mjs} +2 -2
  56. package/dist/{FormControl-BztNXLn6.mjs.map → FormControl-BoKGiWdQ.mjs.map} +1 -1
  57. package/dist/{FormField-Cf1VMvoa.mjs → FormField-yYJFkJ6R.mjs} +13 -13
  58. package/dist/{FormField-Cf1VMvoa.mjs.map → FormField-yYJFkJ6R.mjs.map} +1 -1
  59. package/dist/{HoverCopyableField-XHC_n9tp.mjs → HoverCopyableField-X2XfKTTh.mjs} +10 -5
  60. package/dist/HoverCopyableField-X2XfKTTh.mjs.map +1 -0
  61. package/dist/{IconButton-DxHB2g80.mjs → IconButton-Bj1fry_K.mjs} +4 -3
  62. package/dist/IconButton-Bj1fry_K.mjs.map +1 -0
  63. package/dist/IndexTableLayout.d.mts +11 -3
  64. package/dist/InlineCombobox.d.mts +1 -1
  65. package/dist/InlineInput.d.mts +1 -1
  66. package/dist/{Input-RHXujO9u.mjs → Input-DcbzPaax.mjs} +2 -2
  67. package/dist/{Input-RHXujO9u.mjs.map → Input-DcbzPaax.mjs.map} +1 -1
  68. package/dist/IntegerValueControl.d.mts +3 -2
  69. package/dist/{Link-D_kCyLYX.mjs → Link-B29ZMN6m.mjs} +3 -3
  70. package/dist/Link-B29ZMN6m.mjs.map +1 -0
  71. package/dist/{ListBox-BZp6exb8.mjs → ListBox-4rTgr3IJ.mjs} +6 -6
  72. package/dist/{ListBox-BZp6exb8.mjs.map → ListBox-4rTgr3IJ.mjs.map} +1 -1
  73. package/dist/{ListBox-DpFcM-dM.d.mts → ListBox-ZDaitaXR.d.mts} +2 -2
  74. package/dist/ListBox.d.mts +1 -1
  75. package/dist/{ListBoxField-DL6Zk8TU.d.mts → ListBoxField-CGvVWKyL.d.mts} +4 -4
  76. package/dist/ListBoxField.d.mts +1 -1
  77. package/dist/{LoadingShimmer-oPIv2ESr.mjs → LoadingShimmer-BVVdBeN-.mjs} +18 -20
  78. package/dist/LoadingShimmer-BVVdBeN-.mjs.map +1 -0
  79. package/dist/{LogicRow-BakOUtzx.d.mts → LogicRow-Bzp5o1sL.d.mts} +2 -2
  80. package/dist/LogicRow.d.mts +1 -1
  81. package/dist/{Menu-D6OrKCTC.d.mts → Menu-DviYNrFd.d.mts} +2 -2
  82. package/dist/Menu.d.mts +1 -1
  83. package/dist/{Modal-De5_bPJ_.mjs → Modal-CiPFqr0L.mjs} +52 -23
  84. package/dist/{Modal-De5_bPJ_.mjs.map → Modal-CiPFqr0L.mjs.map} +1 -1
  85. package/dist/{PageHeader-7_Hf6rHl.mjs → PageHeader-6KvtGED-.mjs} +2 -2
  86. package/dist/{PageHeader-7_Hf6rHl.mjs.map → PageHeader-6KvtGED-.mjs.map} +1 -1
  87. package/dist/{PageLayout-DjtGrvJa.mjs → PageLayout-CPiVnS_r.mjs} +3 -1
  88. package/dist/PageLayout-CPiVnS_r.mjs.map +1 -0
  89. package/dist/{Pagination-DMH2IaV0.mjs → Pagination-CqFvnlXc.mjs} +4 -4
  90. package/dist/{Pagination-DMH2IaV0.mjs.map → Pagination-CqFvnlXc.mjs.map} +1 -1
  91. package/dist/{Pii-24D_nSRQ.mjs → Pii-jSYND7Cn.mjs} +2 -2
  92. package/dist/{Pii-24D_nSRQ.mjs.map → Pii-jSYND7Cn.mjs.map} +1 -1
  93. package/dist/{PillShell-B7Bm-dsE.d.mts → PillShell-Bkyu5FXB.d.mts} +2 -2
  94. package/dist/PillShell.d.mts +1 -1
  95. package/dist/{Popover-DordjYNM.mjs → Popover-CVX-dfYb.mjs} +48 -18
  96. package/dist/Popover-CVX-dfYb.mjs.map +1 -0
  97. package/dist/{Radio-BlEtetrr.mjs → Radio-B1H_S-Qj.mjs} +2 -2
  98. package/dist/Radio-B1H_S-Qj.mjs.map +1 -0
  99. package/dist/{RadioGroup-CMrXmmn4.mjs → RadioGroup-7hdcVhsp.mjs} +2 -2
  100. package/dist/{RadioGroup-CMrXmmn4.mjs.map → RadioGroup-7hdcVhsp.mjs.map} +1 -1
  101. package/dist/RuleEditorFields.d.mts +2 -2
  102. package/dist/RulesPill.d.mts +1 -1
  103. package/dist/{SegmentedControl-D_DA-MU1.mjs → SegmentedControl-BNOJ1FYQ.mjs} +5 -2
  104. package/dist/SegmentedControl-BNOJ1FYQ.mjs.map +1 -0
  105. package/dist/{Select-DOlw_LPR.mjs → Select-DbWEgH5c.mjs} +5 -3
  106. package/dist/Select-DbWEgH5c.mjs.map +1 -0
  107. package/dist/{Select-CR9TjFfo.d.mts → Select-DsVeAyZy.d.mts} +2 -2
  108. package/dist/Select.d.mts +1 -1
  109. package/dist/SmartTextInputField.d.mts +2 -2
  110. package/dist/{Spinner-CXb-KUs1.mjs → Spinner-k9ZiOdTr.mjs} +1 -1
  111. package/dist/{Spinner-CXb-KUs1.mjs.map → Spinner-k9ZiOdTr.mjs.map} +1 -1
  112. package/dist/{Sticker-C1_6I08u.mjs → Sticker-4VdGEFAu.mjs} +2 -2
  113. package/dist/{Sticker-C1_6I08u.mjs.map → Sticker-4VdGEFAu.mjs.map} +1 -1
  114. package/dist/StringValueControl.d.mts +2 -1
  115. package/dist/{TabBar-BCFO38E0.mjs → TabBar-d4sdknti.mjs} +5 -5
  116. package/dist/TabBar-d4sdknti.mjs.map +1 -0
  117. package/dist/{Table-DPi4Dt5H.mjs → Table-9mNn8Q-d.mjs} +14 -6
  118. package/dist/Table-9mNn8Q-d.mjs.map +1 -0
  119. package/dist/{TableBox-DNQsgQ8x.mjs → TableBox-D9NA-s9l.mjs} +16 -12
  120. package/dist/TableBox-D9NA-s9l.mjs.map +1 -0
  121. package/dist/TableBox.d.mts +1 -1
  122. package/dist/{TableBoxCell-CsRt_5gP.d.mts → TableBoxCell-CQOL30et.d.mts} +4 -4
  123. package/dist/TableBoxCell.d.mts +1 -1
  124. package/dist/{TableBoxField-Db0Vjo6Z.d.mts → TableBoxField-z0GIFeQw.d.mts} +5 -5
  125. package/dist/TableBoxField.d.mts +1 -1
  126. package/dist/{TableBoxRow-exMlZyc4.d.mts → TableBoxRow-tb9-KMr9.d.mts} +2 -2
  127. package/dist/TableBoxRow.d.mts +1 -1
  128. package/dist/{TableBoxRowActions-UO9YN34k.d.mts → TableBoxRowActions-BZwulsFP.d.mts} +2 -2
  129. package/dist/TableBoxRowActions.d.mts +1 -1
  130. package/dist/{TableControls-BrP_BqnF.mjs → TableControls-BXykbUBf.mjs} +126 -40
  131. package/dist/TableControls-BXykbUBf.mjs.map +1 -0
  132. package/dist/{TableControls-Clo_0Mty.d.mts → TableControls-DE6eHq8h.d.mts} +4 -4
  133. package/dist/TableControls.d.mts +1 -1
  134. package/dist/{TableControlsContext-BNd6z9mD.d.mts → TableControlsContext-C2_2EuMh.d.mts} +2 -2
  135. package/dist/TableControlsContext.d.mts +1 -1
  136. package/dist/{TableViewConfigurationDropdown-Cp7ausV_.d.mts → TableViewConfigurationDropdown-DE9HFXYY.d.mts} +2 -2
  137. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  138. package/dist/{TechnicalSticker-Cq5jzYKQ.mjs → TechnicalSticker-DtV7Gawf.mjs} +5 -3
  139. package/dist/TechnicalSticker-DtV7Gawf.mjs.map +1 -0
  140. package/dist/{TextArea-Dro-HH8O.mjs → TextArea-CQ1YNi2b.mjs} +4 -5
  141. package/dist/TextArea-CQ1YNi2b.mjs.map +1 -0
  142. package/dist/{Toggle-D9MzTIZs.mjs → Toggle-CzHoIR-n.mjs} +8 -4
  143. package/dist/Toggle-CzHoIR-n.mjs.map +1 -0
  144. package/dist/{Tooltip-YViXzMdm.mjs → Tooltip-CVBxc1yf.mjs} +17 -4
  145. package/dist/Tooltip-CVBxc1yf.mjs.map +1 -0
  146. package/dist/chartColors.d.mts +92 -0
  147. package/dist/chartFrameLayout.d.mts +46 -0
  148. package/dist/{clientFilterUtils-CGHYF5NE.d.mts → clientFilterUtils-2TBUC31K.d.mts} +2 -2
  149. package/dist/clientFilterUtils.d.mts +1 -1
  150. package/dist/components/Accordion/index.mjs +22 -13
  151. package/dist/components/Accordion/index.mjs.map +1 -1
  152. package/dist/components/Attribute/index.mjs +6 -4
  153. package/dist/components/Attribute/index.mjs.map +1 -1
  154. package/dist/components/Badge/index.mjs +1 -1
  155. package/dist/components/Banner/index.mjs +1 -1
  156. package/dist/components/BottomPanel/index.mjs +7 -5
  157. package/dist/components/BottomPanel/index.mjs.map +1 -1
  158. package/dist/components/Breadcrumbs/index.mjs +1 -1
  159. package/dist/components/Button/index.mjs +1 -1
  160. package/dist/components/ButtonGroup/index.mjs +1 -1
  161. package/dist/components/CardV2/index.mjs +1 -1
  162. package/dist/components/Chart/index.d.mts +9 -0
  163. package/dist/components/Chart/index.mjs +680 -0
  164. package/dist/components/Chart/index.mjs.map +1 -0
  165. package/dist/components/Checkbox/index.mjs +1 -1
  166. package/dist/components/CodeHighlight/index.mjs +1 -1
  167. package/dist/components/Combobox/index.d.mts +5 -3
  168. package/dist/components/Combobox/index.mjs +1 -1
  169. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  170. package/dist/components/DataTable/TableControls/index.mjs +2 -2
  171. package/dist/components/DataTable/index.d.mts +5 -5
  172. package/dist/components/DataTable/index.mjs +1 -1
  173. package/dist/components/DataTable/types.d.mts +1 -1
  174. package/dist/components/DatePicker/index.mjs +1 -1
  175. package/dist/components/DropdownButton/index.mjs +1 -1
  176. package/dist/components/DropdownMenu/index.d.mts +1 -1
  177. package/dist/components/DropdownMenu/index.mjs +1 -1
  178. package/dist/components/FloatingPanel/index.mjs +16 -14
  179. package/dist/components/FloatingPanel/index.mjs.map +1 -1
  180. package/dist/components/FloatingToolbar/index.mjs +1 -1
  181. package/dist/components/FormControl/index.mjs +1 -1
  182. package/dist/components/FormField/index.d.mts +4 -4
  183. package/dist/components/FormField/index.mjs +1 -1
  184. package/dist/components/HoverCopyableField/index.mjs +1 -1
  185. package/dist/components/ImageTile/index.mjs +7 -7
  186. package/dist/components/ImageTile/index.mjs.map +1 -1
  187. package/dist/components/Input/index.mjs +1 -1
  188. package/dist/components/Link/index.mjs +1 -1
  189. package/dist/components/ListBox/index.d.mts +3 -3
  190. package/dist/components/ListBox/index.mjs +1 -1
  191. package/dist/components/LoadingShimmer/index.mjs +1 -1
  192. package/dist/components/MaskedInput/index.mjs +1 -1
  193. package/dist/components/Menu/index.d.mts +1 -1
  194. package/dist/components/Modal/index.mjs +1 -1
  195. package/dist/components/PageHeader/index.mjs +1 -1
  196. package/dist/components/Pagination/index.mjs +1 -1
  197. package/dist/components/Pii/index.mjs +1 -1
  198. package/dist/components/Popover/index.mjs +1 -1
  199. package/dist/components/ProgressBar/index.mjs +20 -3
  200. package/dist/components/ProgressBar/index.mjs.map +1 -1
  201. package/dist/components/Radio/index.mjs +1 -1
  202. package/dist/components/RadioGroup/index.mjs +1 -1
  203. package/dist/components/RichTextEditor/index.mjs +5 -5
  204. package/dist/components/RightPanel/index.mjs +28 -13
  205. package/dist/components/RightPanel/index.mjs.map +1 -1
  206. package/dist/components/SegmentedControl/index.mjs +1 -1
  207. package/dist/components/Select/index.d.mts +1 -1
  208. package/dist/components/Select/index.mjs +1 -1
  209. package/dist/components/SelectionCard/index.mjs +2 -2
  210. package/dist/components/Slider/index.mjs +3 -2
  211. package/dist/components/Slider/index.mjs.map +1 -1
  212. package/dist/components/SmartTextInput/index.mjs +9 -78
  213. package/dist/components/SmartTextInput/index.mjs.map +1 -1
  214. package/dist/{safe-parse.d.mts → components/SmartTextInput/parser/safe-parse.d.mts} +1 -1
  215. package/dist/components/SmartTextInput/parser/safe-parse.mjs +30 -0
  216. package/dist/components/SmartTextInput/parser/safe-parse.mjs.map +1 -0
  217. package/dist/{tree.d.mts → components/SmartTextInput/parser/tree.d.mts} +1 -1
  218. package/dist/components/SmartTextInput/parser/tree.mjs +42 -0
  219. package/dist/components/SmartTextInput/parser/tree.mjs.map +1 -0
  220. package/dist/components/Spinner/index.mjs +1 -1
  221. package/dist/components/Sticker/index.mjs +1 -1
  222. package/dist/components/SwatchPicker/index.mjs +2 -1
  223. package/dist/components/SwatchPicker/index.mjs.map +1 -1
  224. package/dist/components/TabBar/index.mjs +1 -1
  225. package/dist/components/Table/index.mjs +1 -1
  226. package/dist/components/TableBox/index.d.mts +1 -1
  227. package/dist/components/TableBox/index.mjs +1 -1
  228. package/dist/components/TechnicalSticker/index.mjs +1 -1
  229. package/dist/components/TextArea/index.mjs +1 -1
  230. package/dist/components/Tile/index.mjs +2 -2
  231. package/dist/components/Toast/index.mjs +16 -10
  232. package/dist/components/Toast/index.mjs.map +1 -1
  233. package/dist/components/Toggle/index.mjs +1 -1
  234. package/dist/components/Tooltip/index.mjs +1 -1
  235. package/dist/components/VersionHistory/index.mjs +5 -5
  236. package/dist/compound-expression.d.mts +1 -1
  237. package/dist/{date-range-rule-value-ASr06ClE.d.mts → date-range-rule-value-DyLlMtjr.d.mts} +2 -2
  238. package/dist/date-range-rule-value.d.mts +1 -1
  239. package/dist/display.d.mts +1 -1
  240. package/dist/duration-token.d.mts +11 -0
  241. package/dist/exit-motion.d.mts +7 -0
  242. package/dist/fieldPickerOptions.d.mts +2 -2
  243. package/dist/{filter-size-context-CmFyIPCm.d.mts → filter-size-context-DVnjmuhk.d.mts} +2 -2
  244. package/dist/filter-size-context.d.mts +1 -1
  245. package/dist/{filters-DTBc0mE7.d.mts → filters-DW7pqWv3.d.mts} +2 -2
  246. package/dist/filters.d.mts +1 -1
  247. package/dist/{helpers-CBJ2AqGZ.d.mts → helpers-BTD2kXLs.d.mts} +2 -2
  248. package/dist/helpers.d.mts +1 -1
  249. package/dist/{index-OkdnW-u5.d.mts → index-B4tE0RxY.d.mts} +3 -3
  250. package/dist/{index-kIon1vPp.d.mts → index-DTM_t7OG.d.mts} +2 -2
  251. package/dist/index4.d.mts +3 -3
  252. package/dist/index5.d.mts +1 -1
  253. package/dist/index6.d.mts +14 -14
  254. package/dist/{inputFields-DpHeZiFX.d.mts → inputFields-DnBb3NhK.d.mts} +4 -4
  255. package/dist/inputFields.d.mts +1 -1
  256. package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
  257. package/dist/lib/useCloseFocus.d.mts +45 -0
  258. package/dist/lib/useCloseFocus.mjs +123 -0
  259. package/dist/lib/useCloseFocus.mjs.map +1 -0
  260. package/dist/lib/useModalInsetRight.d.mts +4 -3
  261. package/dist/lib/useModalInsetRight.mjs +7 -5
  262. package/dist/lib/useModalInsetRight.mjs.map +1 -1
  263. package/dist/lint/THIRD_PARTY_NOTICES.md +30 -0
  264. package/dist/lint/index.mjs +696 -11
  265. package/dist/lint/index.mjs.map +1 -1
  266. package/dist/lint/recommended.json +7 -1
  267. package/dist/mixins/hoverable.mjs +1 -1
  268. package/dist/mixins/hoverable.mjs.map +1 -1
  269. package/dist/mixins/input.mjs +1 -0
  270. package/dist/mixins/input.mjs.map +1 -1
  271. package/dist/mixins/menuItem.mjs +2 -0
  272. package/dist/mixins/menuItem.mjs.map +1 -1
  273. package/dist/mixins/motion.d.mts +28 -0
  274. package/dist/mixins/motion.mjs +66 -0
  275. package/dist/mixins/motion.mjs.map +1 -0
  276. package/dist/motion-origin.d.mts +7 -0
  277. package/dist/motion.d.mts +63 -0
  278. package/dist/no-layout-motion.d.mts +7 -0
  279. package/dist/no-transition-all.d.mts +7 -0
  280. package/dist/{operators-BHxKZcpD.d.mts → operators-B8_k3r69.d.mts} +10 -3
  281. package/dist/operators.d.mts +2 -2
  282. package/dist/overlay-motion.d.mts +7 -0
  283. package/dist/patterns/CardGrouping/index.mjs +6 -6
  284. package/dist/patterns/CardGrouping/index.mjs.map +1 -1
  285. package/dist/patterns/IndexTableLayout/index.mjs +23 -16
  286. package/dist/patterns/IndexTableLayout/index.mjs.map +1 -1
  287. package/dist/patterns/LayoutLoadingShimmer/index.mjs +4 -4
  288. package/dist/patterns/LayoutLoadingSpinner/index.mjs +3 -1
  289. package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -1
  290. package/dist/patterns/PageLayout/index.mjs +1 -1
  291. package/dist/patterns/WizardModal/index.mjs +2 -2
  292. package/dist/relative-date-label.d.mts +1 -1
  293. package/dist/{types-DLnCkvTt.d.mts → types-BJqmRXFV.d.mts} +15 -1
  294. package/dist/{types-CqcbWyUY.d.mts → types-BOsCi-kZ.d.mts} +8 -2
  295. package/dist/{types-BiqzeNsa.d.mts → types-Dws2XDz2.d.mts} +2 -2
  296. package/dist/{types-BEdERA4v.d.mts → types-NO2GRlM-.d.mts} +2 -2
  297. package/dist/types4.d.mts +1 -1
  298. package/dist/types5.d.mts +1 -1
  299. package/dist/types6.d.mts +1 -1
  300. package/dist/{url-state-CXUuK3_r.d.mts → url-state-CXPmXzIZ.d.mts} +2 -2
  301. package/dist/url-state.d.mts +1 -1
  302. package/dist/useChartColors.d.mts +30 -0
  303. package/dist/useChartSeriesVisibility.d.mts +22 -0
  304. package/dist/useChartStyles.d.mts +108 -0
  305. package/dist/useColumnConfiguration.d.mts +2 -2
  306. package/dist/useComboboxFooterAction.d.mts +1 -1
  307. package/dist/{useFilterStateV2-DBpbxAEC.d.mts → useFilterStateV2-DiTS9DTg.d.mts} +3 -3
  308. package/dist/useFilterStateV2.d.mts +1 -1
  309. package/dist/{useTableColumns-Xd14vx_h.d.mts → useTableColumns-tITjHasE.d.mts} +2 -2
  310. package/dist/useTableColumns.d.mts +1 -1
  311. package/dist/useTruncation.d.mts +1 -1
  312. package/dist/useValueControlError.d.mts +26 -0
  313. package/dist/utils.d.mts +1 -1
  314. package/dist/{validation-Tgg3AhuP.d.mts → validation-BDQdQ1cY.d.mts} +3 -3
  315. package/dist/validation.d.mts +1 -1
  316. package/dist/{value-control-resolver-XQbGCdsP.d.mts → value-control-resolver-BFJZEWDn.d.mts} +9 -3
  317. package/dist/value-control-resolver.d.mts +1 -1
  318. package/dist/value-labels.d.mts +12 -0
  319. package/dist/variables/keyframes.d.mts +2 -1
  320. package/dist/variables/keyframes.mjs +9 -1
  321. package/dist/variables/keyframes.mjs.map +1 -1
  322. package/dist/variables/transitions.d.mts +31 -1
  323. package/dist/variables/transitions.mjs +50 -1
  324. package/dist/variables/transitions.mjs.map +1 -1
  325. package/llms.txt +2 -1
  326. package/package.json +20 -4
  327. package/skills/new-screen/SKILL.md +33 -0
  328. package/skills/ui-authoring/COMPONENTS.md +19 -1
  329. package/skills/ui-authoring/PATTERNS.md +57 -36
  330. package/skills/ui-authoring/STANDARD.md +78 -4
  331. package/skills/ui-authoring/TOKENS.md +27 -24
  332. package/dist/Breadcrumbs-CMf3Uvow.mjs.map +0 -1
  333. package/dist/CardV2-CrV6eEQb.mjs.map +0 -1
  334. package/dist/Checkbox-Dr4LMKHV.mjs.map +0 -1
  335. package/dist/Combobox-CIKqTYZt.d.mts +0 -11
  336. package/dist/Combobox-Gb_j1dg6.mjs.map +0 -1
  337. package/dist/DataTable-CIZJ1vO8.mjs.map +0 -1
  338. package/dist/DropdownMenu-c8XK2Lr4.mjs.map +0 -1
  339. package/dist/FloatingToolbar-DLRaE0o7.mjs.map +0 -1
  340. package/dist/HoverCopyableField-XHC_n9tp.mjs.map +0 -1
  341. package/dist/IconButton-DxHB2g80.mjs.map +0 -1
  342. package/dist/Link-D_kCyLYX.mjs.map +0 -1
  343. package/dist/LoadingShimmer-oPIv2ESr.mjs.map +0 -1
  344. package/dist/PageLayout-DjtGrvJa.mjs.map +0 -1
  345. package/dist/Popover-DordjYNM.mjs.map +0 -1
  346. package/dist/Radio-BlEtetrr.mjs.map +0 -1
  347. package/dist/SegmentedControl-D_DA-MU1.mjs.map +0 -1
  348. package/dist/Select-DOlw_LPR.mjs.map +0 -1
  349. package/dist/TabBar-BCFO38E0.mjs.map +0 -1
  350. package/dist/Table-DPi4Dt5H.mjs.map +0 -1
  351. package/dist/TableBox-DNQsgQ8x.mjs.map +0 -1
  352. package/dist/TableControls-BrP_BqnF.mjs.map +0 -1
  353. package/dist/TechnicalSticker-Cq5jzYKQ.mjs.map +0 -1
  354. package/dist/TextArea-Dro-HH8O.mjs.map +0 -1
  355. package/dist/Toggle-D9MzTIZs.mjs.map +0 -1
  356. package/dist/Tooltip-YViXzMdm.mjs.map +0 -1
@@ -0,0 +1,45 @@
1
+ import { Ref, RefObject } from "react";
2
+
3
+ //#region src/lib/useCloseFocus.d.ts
4
+ type OutsideEvent = CustomEvent<{
5
+ originalEvent: PointerEvent | FocusEvent;
6
+ }>;
7
+ interface CloseFocusOptions {
8
+ /** Runs once, when the close starts. `preventDefault` keeps focus where it is. */
9
+ onCloseAutoFocus?: (event: Event) => void;
10
+ /** Runs when the content reopens before its exit ends; Radix doesn't run it again then. */
11
+ onOpenAutoFocus?: (event: Event) => void;
12
+ onInteractOutside?: (event: OutsideEvent) => void;
13
+ onEscapeKeyDown?: (event: KeyboardEvent) => void;
14
+ /**
15
+ * Modal content closes at once (it has no exit), so Radix's own focus handling is left alone:
16
+ * until unmount Radix hides the rest of the page from assistive technology.
17
+ */
18
+ modal?: boolean;
19
+ /** Where focus returns. Falls back to the element whose `aria-controls` names the content. */
20
+ triggerRef?: RefObject<HTMLElement | null>;
21
+ /** What takes focus on a reopen mid-exit: the first tabbable element, or the content itself. */
22
+ reopenFocus?: 'first-tabbable' | 'content';
23
+ }
24
+ interface CloseFocus {
25
+ ref: (node: HTMLElement | null) => void;
26
+ onCloseAutoFocus?: (event: Event) => void;
27
+ onInteractOutside?: (event: OutsideEvent) => void;
28
+ onEscapeKeyDown?: (event: KeyboardEvent) => void;
29
+ 'data-modal'?: '';
30
+ }
31
+ /**
32
+ * Returns focus when a Radix popover or menu starts to close, instead of when its exit animation
33
+ * ends and it unmounts, and stops the closing content taking input. Spread the result onto the
34
+ * Radix `Content`, after the consumer's props.
35
+ *
36
+ * At close start it calls `onCloseAutoFocus` and, unless that's prevented or the close came from
37
+ * an interaction outside, focuses the trigger, as Radix would. Radix's own call at unmount is then
38
+ * prevented. Content that unmounts at once (no exit running) is left to Radix.
39
+ */
40
+ declare function useCloseFocus(options: CloseFocusOptions): CloseFocus;
41
+ /** Sets every ref to the node. Memoize the result, or React re-attaches it on every render. */
42
+ declare function mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void;
43
+ //#endregion
44
+ export { CloseFocus, CloseFocusOptions, mergeRefs, useCloseFocus };
45
+ //# sourceMappingURL=useCloseFocus.d.mts.map
@@ -0,0 +1,123 @@
1
+ import { useCallback, useRef } from "react";
2
+ //#region src/lib/useCloseFocus.ts
3
+ const TABBABLE = "button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
4
+ /**
5
+ * Returns focus when a Radix popover or menu starts to close, instead of when its exit animation
6
+ * ends and it unmounts, and stops the closing content taking input. Spread the result onto the
7
+ * Radix `Content`, after the consumer's props.
8
+ *
9
+ * At close start it calls `onCloseAutoFocus` and, unless that's prevented or the close came from
10
+ * an interaction outside, focuses the trigger, as Radix would. Radix's own call at unmount is then
11
+ * prevented. Content that unmounts at once (no exit running) is left to Radix.
12
+ */
13
+ function useCloseFocus(options) {
14
+ const latest = useRef(options);
15
+ latest.current = options;
16
+ const state = useRef({
17
+ open: true,
18
+ interactedOutside: false,
19
+ trigger: null,
20
+ handled: /* @__PURE__ */ new WeakSet(),
21
+ observer: null,
22
+ node: null
23
+ });
24
+ const findTrigger = (node) => {
25
+ return (node.id ? node.ownerDocument.querySelector(`[aria-controls="${node.id.replace(/["\\]/g, "\\$&")}"]`) : null) ?? latest.current.triggerRef?.current ?? state.current.trigger;
26
+ };
27
+ const opened = (node) => {
28
+ const s = state.current;
29
+ s.open = true;
30
+ s.interactedOutside = false;
31
+ s.trigger = findTrigger(node);
32
+ if (!s.handled.has(node)) return;
33
+ s.handled.delete(node);
34
+ node.removeAttribute("inert");
35
+ const event = new CustomEvent("focusScope.autoFocusOnMount", { cancelable: true });
36
+ latest.current.onOpenAutoFocus?.(event);
37
+ if (!event.defaultPrevented) (latest.current.reopenFocus === "content" ? node : node.querySelector(TABBABLE) ?? node).focus({ preventScroll: true });
38
+ };
39
+ const closed = (node) => {
40
+ const s = state.current;
41
+ s.open = false;
42
+ if (!node.isConnected) return;
43
+ s.handled.add(node);
44
+ const active = node.ownerDocument.activeElement;
45
+ const focusInside = active == null || active === node.ownerDocument.body || node.contains(active) || !!active.closest("[data-radix-popper-content-wrapper] [data-state=\"closed\"]");
46
+ const interactedOutside = s.interactedOutside;
47
+ const restore = () => {
48
+ if (s.open) return;
49
+ const event = new CustomEvent("focusScope.autoFocusOnUnmount", { cancelable: true });
50
+ latest.current.onCloseAutoFocus?.(event);
51
+ if (!event.defaultPrevented && focusInside && !interactedOutside) findTrigger(node)?.focus({ preventScroll: true });
52
+ };
53
+ if (node.ownerDocument.defaultView?.event?.type === "keydown") setTimeout(restore, 0);
54
+ else restore();
55
+ node.setAttribute("inert", "");
56
+ };
57
+ const ref = useCallback((node) => {
58
+ const s = state.current;
59
+ if (!node || node === s.node) return;
60
+ s.observer?.disconnect();
61
+ s.observer = null;
62
+ s.node = node;
63
+ if (latest.current.modal) return;
64
+ s.open = node.getAttribute("data-state") !== "closed";
65
+ s.interactedOutside = false;
66
+ const active = node.ownerDocument.activeElement;
67
+ s.trigger = active && active !== node.ownerDocument.body ? active : null;
68
+ s.trigger = findTrigger(node);
69
+ s.observer = new MutationObserver(() => {
70
+ const isOpen = node.getAttribute("data-state") !== "closed";
71
+ if (isOpen && !s.open) opened(node);
72
+ else if (!isOpen && s.open) closed(node);
73
+ });
74
+ s.observer.observe(node, {
75
+ attributes: true,
76
+ attributeFilter: ["data-state"]
77
+ });
78
+ }, []);
79
+ if (options.modal) return {
80
+ ref,
81
+ onCloseAutoFocus: options.onCloseAutoFocus,
82
+ onInteractOutside: options.onInteractOutside,
83
+ onEscapeKeyDown: options.onEscapeKeyDown,
84
+ "data-modal": ""
85
+ };
86
+ return {
87
+ ref,
88
+ onCloseAutoFocus: (event) => {
89
+ if (event.currentTarget && state.current.handled.has(event.currentTarget)) {
90
+ state.current.handled.delete(event.currentTarget);
91
+ event.preventDefault();
92
+ return;
93
+ }
94
+ latest.current.onCloseAutoFocus?.(event);
95
+ },
96
+ onInteractOutside: (event) => {
97
+ if (!state.current.open) {
98
+ event.preventDefault();
99
+ return;
100
+ }
101
+ latest.current.onInteractOutside?.(event);
102
+ if (!event.defaultPrevented) state.current.interactedOutside = true;
103
+ },
104
+ onEscapeKeyDown: (event) => {
105
+ if (!state.current.open) {
106
+ event.preventDefault();
107
+ return;
108
+ }
109
+ latest.current.onEscapeKeyDown?.(event);
110
+ }
111
+ };
112
+ }
113
+ /** Sets every ref to the node. Memoize the result, or React re-attaches it on every render. */
114
+ function mergeRefs(...refs) {
115
+ return (node) => {
116
+ for (const ref of refs) if (typeof ref === "function") ref(node);
117
+ else if (ref) ref.current = node;
118
+ };
119
+ }
120
+ //#endregion
121
+ export { mergeRefs, useCloseFocus };
122
+
123
+ //# sourceMappingURL=useCloseFocus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCloseFocus.mjs","names":[],"sources":["../../src/lib/useCloseFocus.ts"],"sourcesContent":["import { type Ref, type RefObject, useCallback, useRef } from 'react';\n\ntype OutsideEvent = CustomEvent<{ originalEvent: PointerEvent | FocusEvent }>;\n\nexport interface CloseFocusOptions {\n /** Runs once, when the close starts. `preventDefault` keeps focus where it is. */\n onCloseAutoFocus?: (event: Event) => void;\n /** Runs when the content reopens before its exit ends; Radix doesn't run it again then. */\n onOpenAutoFocus?: (event: Event) => void;\n onInteractOutside?: (event: OutsideEvent) => void;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Modal content closes at once (it has no exit), so Radix's own focus handling is left alone:\n * until unmount Radix hides the rest of the page from assistive technology.\n */\n modal?: boolean;\n /** Where focus returns. Falls back to the element whose `aria-controls` names the content. */\n triggerRef?: RefObject<HTMLElement | null>;\n /** What takes focus on a reopen mid-exit: the first tabbable element, or the content itself. */\n reopenFocus?: 'first-tabbable' | 'content';\n}\n\nexport interface CloseFocus {\n ref: (node: HTMLElement | null) => void;\n onCloseAutoFocus?: (event: Event) => void;\n onInteractOutside?: (event: OutsideEvent) => void;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n 'data-modal'?: '';\n}\n\nconst TABBABLE =\n 'button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Returns focus when a Radix popover or menu starts to close, instead of when its exit animation\n * ends and it unmounts, and stops the closing content taking input. Spread the result onto the\n * Radix `Content`, after the consumer's props.\n *\n * At close start it calls `onCloseAutoFocus` and, unless that's prevented or the close came from\n * an interaction outside, focuses the trigger, as Radix would. Radix's own call at unmount is then\n * prevented. Content that unmounts at once (no exit running) is left to Radix.\n */\nexport function useCloseFocus(options: CloseFocusOptions): CloseFocus {\n const latest = useRef(options);\n latest.current = options;\n const state = useRef({\n open: true,\n interactedOutside: false,\n trigger: null as HTMLElement | null,\n handled: new WeakSet<EventTarget>(),\n observer: null as MutationObserver | null,\n node: null as HTMLElement | null,\n });\n\n const findTrigger = (node: HTMLElement): HTMLElement | null => {\n // The `aria-controls` match wins: a raw Root nested in a PDS Popover inherits its triggerRef.\n const controlled = node.id\n ? node.ownerDocument.querySelector<HTMLElement>(\n `[aria-controls=\"${node.id.replace(/[\"\\\\]/g, '\\\\$&')}\"]`,\n )\n : null;\n return controlled ?? latest.current.triggerRef?.current ?? state.current.trigger;\n };\n\n const opened = (node: HTMLElement) => {\n const s = state.current;\n s.open = true;\n s.interactedOutside = false;\n s.trigger = findTrigger(node);\n if (!s.handled.has(node)) {\n return;\n }\n s.handled.delete(node);\n node.removeAttribute('inert');\n const event = new CustomEvent('focusScope.autoFocusOnMount', { cancelable: true });\n latest.current.onOpenAutoFocus?.(event);\n if (!event.defaultPrevented) {\n const target =\n latest.current.reopenFocus === 'content'\n ? node\n : (node.querySelector<HTMLElement>(TABBABLE) ?? node);\n target.focus({ preventScroll: true });\n }\n };\n\n const closed = (node: HTMLElement) => {\n const s = state.current;\n s.open = false;\n if (!node.isConnected) {\n return;\n }\n s.handled.add(node);\n const active = node.ownerDocument.activeElement;\n // A portaled child layer closing in the same commit (a menu item that closes its Popover)\n // holds focus outside `node`, and its own trigger is about to go inert with `node`.\n const focusInside =\n active == null ||\n active === node.ownerDocument.body ||\n node.contains(active) ||\n !!active.closest('[data-radix-popper-content-wrapper] [data-state=\"closed\"]');\n const interactedOutside = s.interactedOutside;\n const restore = () => {\n if (s.open) {\n return;\n }\n const event = new CustomEvent('focusScope.autoFocusOnUnmount', { cancelable: true });\n latest.current.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented && focusInside && !interactedOutside) {\n findTrigger(node)?.focus({ preventScroll: true });\n }\n };\n // Focus moved during a keydown takes that key's keypress, so an Enter that closes from a\n // field would click the trigger and reopen it. Radix restores after a task for the same reason.\n if (node.ownerDocument.defaultView?.event?.type === 'keydown') {\n setTimeout(restore, 0);\n } else {\n restore();\n }\n node.setAttribute('inert', '');\n };\n\n const ref = useCallback((node: HTMLElement | null) => {\n const s = state.current;\n // Radix composes its content refs afresh on every render, so React detaches (null) and\n // reattaches the same node each time; only a new node starts a new open.\n if (!node || node === s.node) {\n return;\n }\n s.observer?.disconnect();\n s.observer = null;\n s.node = node;\n if (latest.current.modal) {\n return;\n }\n s.open = node.getAttribute('data-state') !== 'closed';\n s.interactedOutside = false;\n const active = node.ownerDocument.activeElement;\n s.trigger = active && active !== node.ownerDocument.body ? (active as HTMLElement) : null;\n s.trigger = findTrigger(node);\n s.observer = new MutationObserver(() => {\n const isOpen = node.getAttribute('data-state') !== 'closed';\n if (isOpen && !s.open) {\n opened(node);\n } else if (!isOpen && s.open) {\n closed(node);\n }\n });\n s.observer.observe(node, { attributes: true, attributeFilter: ['data-state'] });\n }, []);\n\n if (options.modal) {\n return {\n ref,\n onCloseAutoFocus: options.onCloseAutoFocus,\n onInteractOutside: options.onInteractOutside,\n onEscapeKeyDown: options.onEscapeKeyDown,\n 'data-modal': '',\n };\n }\n\n return {\n ref,\n onCloseAutoFocus: (event) => {\n if (event.currentTarget && state.current.handled.has(event.currentTarget)) {\n state.current.handled.delete(event.currentTarget);\n event.preventDefault();\n return;\n }\n latest.current.onCloseAutoFocus?.(event);\n },\n onInteractOutside: (event) => {\n if (!state.current.open) {\n event.preventDefault();\n return;\n }\n latest.current.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n state.current.interactedOutside = true;\n }\n },\n onEscapeKeyDown: (event) => {\n if (!state.current.open) {\n event.preventDefault();\n return;\n }\n latest.current.onEscapeKeyDown?.(event);\n },\n };\n}\n\n/** Sets every ref to the node. Memoize the result, or React re-attaches it on every render. */\nexport function mergeRefs<T>(...refs: (Ref<T> | undefined)[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as { current: T | null }).current = node;\n }\n }\n };\n}\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  //#region src/lib/useModalInsetRight.d.ts
2
- declare const SIDEBAR_OPEN_TRANSITION_MS = 425;
3
- declare const SIDEBAR_CLOSE_TRANSITION_MS = 200;
2
+ declare const SIDEBAR_OPEN_TRANSITION_MS: number;
3
+ declare const SIDEBAR_CLOSE_TRANSITION_MS: number;
4
+ declare const SIDEBAR_TRANSITION_EASING = "ease-out";
4
5
  type PanelInsetState = 'closed' | 'opening' | 'open' | 'closing';
5
6
  interface ModalInsetRight {
6
7
  /** Animated inset value — starts at 0px on panel open so CSS transition fires */
@@ -17,5 +18,5 @@ interface ModalInsetRight {
17
18
  */
18
19
  declare const useModalInsetRight: () => ModalInsetRight;
19
20
  //#endregion
20
- export { ModalInsetRight, PanelInsetState, SIDEBAR_CLOSE_TRANSITION_MS, SIDEBAR_OPEN_TRANSITION_MS, useModalInsetRight as default };
21
+ export { ModalInsetRight, PanelInsetState, SIDEBAR_CLOSE_TRANSITION_MS, SIDEBAR_OPEN_TRANSITION_MS, SIDEBAR_TRANSITION_EASING, useModalInsetRight as default };
21
22
  //# sourceMappingURL=useModalInsetRight.d.mts.map
@@ -1,8 +1,10 @@
1
+ import "../variables/transitions.mjs";
1
2
  import { useEffect, useRef, useState } from "react";
2
3
  //#region src/lib/useModalInsetRight.ts
3
4
  const CSS_VAR = "--modal-inset-right";
4
- const SIDEBAR_OPEN_TRANSITION_MS = 425;
5
- const SIDEBAR_CLOSE_TRANSITION_MS = 200;
5
+ const SIDEBAR_OPEN_TRANSITION_MS = parseInt("400ms", 10);
6
+ const SIDEBAR_CLOSE_TRANSITION_MS = parseInt("300ms", 10);
7
+ const SIDEBAR_TRANSITION_EASING = "ease-out";
6
8
  const getModalInsetRight = () => getComputedStyle(document.documentElement).getPropertyValue(CSS_VAR).trim() || "0px";
7
9
  const prefersReducedMotion = () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
8
10
  /**
@@ -33,7 +35,7 @@ const useModalInsetRight = () => {
33
35
  setInsetRight("0px");
34
36
  setPanelState("opening");
35
37
  rafRef.current = requestAnimationFrame(() => setInsetRight(next));
36
- transitionTimerRef.current = setTimeout(() => setPanelState("open"), 425);
38
+ transitionTimerRef.current = setTimeout(() => setPanelState("open"), SIDEBAR_OPEN_TRANSITION_MS);
37
39
  }
38
40
  else if (prev !== "0px" && next === "0px") if (prefersReducedMotion()) {
39
41
  setInsetRight("0px");
@@ -44,7 +46,7 @@ const useModalInsetRight = () => {
44
46
  setInsetRight(prev);
45
47
  setPanelState("closing");
46
48
  rafRef.current = requestAnimationFrame(() => setInsetRight("0px"));
47
- transitionTimerRef.current = setTimeout(() => setPanelState("closed"), 200);
49
+ transitionTimerRef.current = setTimeout(() => setPanelState("closed"), SIDEBAR_CLOSE_TRANSITION_MS);
48
50
  }
49
51
  else setInsetRight(next);
50
52
  });
@@ -64,6 +66,6 @@ const useModalInsetRight = () => {
64
66
  };
65
67
  };
66
68
  //#endregion
67
- export { SIDEBAR_CLOSE_TRANSITION_MS, SIDEBAR_OPEN_TRANSITION_MS, useModalInsetRight as default };
69
+ export { SIDEBAR_CLOSE_TRANSITION_MS, SIDEBAR_OPEN_TRANSITION_MS, SIDEBAR_TRANSITION_EASING, useModalInsetRight as default };
68
70
 
69
71
  //# sourceMappingURL=useModalInsetRight.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useModalInsetRight.mjs","names":[],"sources":["../../src/lib/useModalInsetRight.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nconst CSS_VAR = '--modal-inset-right';\n\n// Match AgentsPanel sidebar transition durations\nexport const SIDEBAR_OPEN_TRANSITION_MS = 425;\nexport const SIDEBAR_CLOSE_TRANSITION_MS = 200;\n\nconst getModalInsetRight = () =>\n getComputedStyle(document.documentElement).getPropertyValue(CSS_VAR).trim() || '0px';\n\nconst prefersReducedMotion = () =>\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\nexport type PanelInsetState = 'closed' | 'opening' | 'open' | 'closing';\n\nexport interface ModalInsetRight {\n /** Animated inset value — starts at 0px on panel open so CSS transition fires */\n insetRight: string;\n panelState: PanelInsetState;\n}\n\n/**\n * Returns the current value of --modal-inset-right from :root, reactively updating\n * as the agents side panel animates open/closed or is resized. Also tracks whether\n * the panel is opening, open, closing, or closed.\n *\n * panelState stays 'opening'/'closing' for the full transition duration so that\n * CSS transitions on consumers have time to animate.\n */\nconst useModalInsetRight = (): ModalInsetRight => {\n const [insetRight, setInsetRight] = useState(getModalInsetRight);\n const [panelState, setPanelState] = useState<PanelInsetState>(() =>\n getModalInsetRight() !== '0px' ? 'open' : 'closed',\n );\n const prevInsetRight = useRef(getModalInsetRight());\n const transitionTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const prev = prevInsetRight.current;\n const next = getModalInsetRight();\n prevInsetRight.current = next;\n\n if (prev === '0px' && next !== '0px') {\n if (prefersReducedMotion()) {\n setInsetRight(next);\n setPanelState('open');\n } else {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n if (transitionTimerRef.current) {\n clearTimeout(transitionTimerRef.current);\n }\n setInsetRight('0px');\n setPanelState('opening');\n rafRef.current = requestAnimationFrame(() => setInsetRight(next));\n transitionTimerRef.current = setTimeout(\n () => setPanelState('open'),\n SIDEBAR_OPEN_TRANSITION_MS,\n );\n }\n } else if (prev !== '0px' && next === '0px') {\n if (prefersReducedMotion()) {\n setInsetRight('0px');\n setPanelState('closed');\n } else {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n if (transitionTimerRef.current) {\n clearTimeout(transitionTimerRef.current);\n }\n setInsetRight(prev);\n setPanelState('closing');\n rafRef.current = requestAnimationFrame(() => setInsetRight('0px'));\n transitionTimerRef.current = setTimeout(\n () => setPanelState('closed'),\n SIDEBAR_CLOSE_TRANSITION_MS,\n );\n }\n } else {\n setInsetRight(next);\n }\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n\n return () => {\n observer.disconnect();\n if (transitionTimerRef.current) {\n clearTimeout(transitionTimerRef.current);\n }\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, []);\n\n return { insetRight, panelState };\n};\n\nexport default useModalInsetRight;\n"],"mappings":";;AAEA,MAAM,UAAU;AAGhB,MAAa,6BAA6B;AAC1C,MAAa,8BAA8B;AAE3C,MAAM,2BACJ,iBAAiB,SAAS,gBAAgB,CAAC,iBAAiB,QAAQ,CAAC,MAAM,IAAI;AAEjF,MAAM,6BACJ,OAAO,WAAW,eAAe,OAAO,WAAW,mCAAmC,CAAC;;;;;;;;;AAkBzF,MAAM,2BAA4C;CAChD,MAAM,CAAC,YAAY,iBAAiB,SAAS,mBAAmB;CAChE,MAAM,CAAC,YAAY,iBAAiB,eAClC,oBAAoB,KAAK,QAAQ,SAAS,SAC3C;CACD,MAAM,iBAAiB,OAAO,oBAAoB,CAAC;CACnD,MAAM,qBAAqB,OAA6C,KAAK;CAC7E,MAAM,SAAS,OAAsB,KAAK;AAE1C,iBAAgB;EACd,MAAM,WAAW,IAAI,uBAAuB;GAC1C,MAAM,OAAO,eAAe;GAC5B,MAAM,OAAO,oBAAoB;AACjC,kBAAe,UAAU;AAEzB,OAAI,SAAS,SAAS,SAAS,MAC7B,KAAI,sBAAsB,EAAE;AAC1B,kBAAc,KAAK;AACnB,kBAAc,OAAO;UAChB;AACL,QAAI,OAAO,QACT,sBAAqB,OAAO,QAAQ;AAEtC,QAAI,mBAAmB,QACrB,cAAa,mBAAmB,QAAQ;AAE1C,kBAAc,MAAM;AACpB,kBAAc,UAAU;AACxB,WAAO,UAAU,4BAA4B,cAAc,KAAK,CAAC;AACjE,uBAAmB,UAAU,iBACrB,cAAc,OAAO,EAAA,IAE5B;;YAEM,SAAS,SAAS,SAAS,MACpC,KAAI,sBAAsB,EAAE;AAC1B,kBAAc,MAAM;AACpB,kBAAc,SAAS;UAClB;AACL,QAAI,OAAO,QACT,sBAAqB,OAAO,QAAQ;AAEtC,QAAI,mBAAmB,QACrB,cAAa,mBAAmB,QAAQ;AAE1C,kBAAc,KAAK;AACnB,kBAAc,UAAU;AACxB,WAAO,UAAU,4BAA4B,cAAc,MAAM,CAAC;AAClE,uBAAmB,UAAU,iBACrB,cAAc,SAAS,EAAA,IAE9B;;OAGH,eAAc,KAAK;IAErB;AAEF,WAAS,QAAQ,SAAS,iBAAiB;GACzC,YAAY;GACZ,iBAAiB,CAAC,QAAQ;GAC3B,CAAC;AAEF,eAAa;AACX,YAAS,YAAY;AACrB,OAAI,mBAAmB,QACrB,cAAa,mBAAmB,QAAQ;AAE1C,OAAI,OAAO,QACT,sBAAqB,OAAO,QAAQ;;IAGvC,EAAE,CAAC;AAEN,QAAO;EAAE;EAAY;EAAY"}
1
+ {"version":3,"file":"useModalInsetRight.mjs","names":[],"sources":["../../src/lib/useModalInsetRight.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { TransitionDuration } from '#src/variables/transitions';\n\nconst CSS_VAR = '--modal-inset-right';\n\n// Must equal the agents panel's open and close durations in persona-web, or the modal's edge and the panel's drift apart.\nexport const SIDEBAR_OPEN_TRANSITION_MS = parseInt(TransitionDuration.Medium, 10);\nexport const SIDEBAR_CLOSE_TRANSITION_MS = parseInt(TransitionDuration.MediumFast, 10);\n// The agents panel slides on framer-motion's `easeOut`; switch with it to `TransitionEasing.Enter`/`Exit`.\nexport const SIDEBAR_TRANSITION_EASING = 'ease-out';\n\nconst getModalInsetRight = () =>\n getComputedStyle(document.documentElement).getPropertyValue(CSS_VAR).trim() || '0px';\n\nconst prefersReducedMotion = () =>\n typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\nexport type PanelInsetState = 'closed' | 'opening' | 'open' | 'closing';\n\nexport interface ModalInsetRight {\n /** Animated inset value — starts at 0px on panel open so CSS transition fires */\n insetRight: string;\n panelState: PanelInsetState;\n}\n\n/**\n * Returns the current value of --modal-inset-right from :root, reactively updating\n * as the agents side panel animates open/closed or is resized. Also tracks whether\n * the panel is opening, open, closing, or closed.\n *\n * panelState stays 'opening'/'closing' for the full transition duration so that\n * CSS transitions on consumers have time to animate.\n */\nconst useModalInsetRight = (): ModalInsetRight => {\n const [insetRight, setInsetRight] = useState(getModalInsetRight);\n const [panelState, setPanelState] = useState<PanelInsetState>(() =>\n getModalInsetRight() !== '0px' ? 'open' : 'closed',\n );\n const prevInsetRight = useRef(getModalInsetRight());\n const transitionTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const prev = prevInsetRight.current;\n const next = getModalInsetRight();\n prevInsetRight.current = next;\n\n if (prev === '0px' && next !== '0px') {\n if (prefersReducedMotion()) {\n setInsetRight(next);\n setPanelState('open');\n } else {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n if (transitionTimerRef.current) {\n clearTimeout(transitionTimerRef.current);\n }\n setInsetRight('0px');\n setPanelState('opening');\n rafRef.current = requestAnimationFrame(() => setInsetRight(next));\n transitionTimerRef.current = setTimeout(\n () => setPanelState('open'),\n SIDEBAR_OPEN_TRANSITION_MS,\n );\n }\n } else if (prev !== '0px' && next === '0px') {\n if (prefersReducedMotion()) {\n setInsetRight('0px');\n setPanelState('closed');\n } else {\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n if (transitionTimerRef.current) {\n clearTimeout(transitionTimerRef.current);\n }\n setInsetRight(prev);\n setPanelState('closing');\n rafRef.current = requestAnimationFrame(() => setInsetRight('0px'));\n transitionTimerRef.current = setTimeout(\n () => setPanelState('closed'),\n SIDEBAR_CLOSE_TRANSITION_MS,\n );\n }\n } else {\n setInsetRight(next);\n }\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n\n return () => {\n observer.disconnect();\n if (transitionTimerRef.current) {\n clearTimeout(transitionTimerRef.current);\n }\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, []);\n\n return { insetRight, panelState };\n};\n\nexport default useModalInsetRight;\n"],"mappings":";;;AAIA,MAAM,UAAU;AAGhB,MAAa,6BAA6B,SAAA,SAAoC,GAAG;AACjF,MAAa,8BAA8B,SAAA,SAAwC,GAAG;AAEtF,MAAa,4BAA4B;AAEzC,MAAM,2BACJ,iBAAiB,SAAS,gBAAgB,CAAC,iBAAiB,QAAQ,CAAC,MAAM,IAAI;AAEjF,MAAM,6BACJ,OAAO,WAAW,eAAe,OAAO,WAAW,mCAAmC,CAAC;;;;;;;;;AAkBzF,MAAM,2BAA4C;CAChD,MAAM,CAAC,YAAY,iBAAiB,SAAS,mBAAmB;CAChE,MAAM,CAAC,YAAY,iBAAiB,eAClC,oBAAoB,KAAK,QAAQ,SAAS,SAC3C;CACD,MAAM,iBAAiB,OAAO,oBAAoB,CAAC;CACnD,MAAM,qBAAqB,OAA6C,KAAK;CAC7E,MAAM,SAAS,OAAsB,KAAK;AAE1C,iBAAgB;EACd,MAAM,WAAW,IAAI,uBAAuB;GAC1C,MAAM,OAAO,eAAe;GAC5B,MAAM,OAAO,oBAAoB;AACjC,kBAAe,UAAU;AAEzB,OAAI,SAAS,SAAS,SAAS,MAC7B,KAAI,sBAAsB,EAAE;AAC1B,kBAAc,KAAK;AACnB,kBAAc,OAAO;UAChB;AACL,QAAI,OAAO,QACT,sBAAqB,OAAO,QAAQ;AAEtC,QAAI,mBAAmB,QACrB,cAAa,mBAAmB,QAAQ;AAE1C,kBAAc,MAAM;AACpB,kBAAc,UAAU;AACxB,WAAO,UAAU,4BAA4B,cAAc,KAAK,CAAC;AACjE,uBAAmB,UAAU,iBACrB,cAAc,OAAO,EAC3B,2BACD;;YAEM,SAAS,SAAS,SAAS,MACpC,KAAI,sBAAsB,EAAE;AAC1B,kBAAc,MAAM;AACpB,kBAAc,SAAS;UAClB;AACL,QAAI,OAAO,QACT,sBAAqB,OAAO,QAAQ;AAEtC,QAAI,mBAAmB,QACrB,cAAa,mBAAmB,QAAQ;AAE1C,kBAAc,KAAK;AACnB,kBAAc,UAAU;AACxB,WAAO,UAAU,4BAA4B,cAAc,MAAM,CAAC;AAClE,uBAAmB,UAAU,iBACrB,cAAc,SAAS,EAC7B,4BACD;;OAGH,eAAc,KAAK;IAErB;AAEF,WAAS,QAAQ,SAAS,iBAAiB;GACzC,YAAY;GACZ,iBAAiB,CAAC,QAAQ;GAC3B,CAAC;AAEF,eAAa;AACX,YAAS,YAAY;AACrB,OAAI,mBAAmB,QACrB,cAAa,mBAAmB,QAAQ;AAE1C,OAAI,OAAO,QACT,sBAAqB,OAAO,QAAQ;;IAGvC,EAAE,CAAC;AAEN,QAAO;EAAE;EAAY;EAAY"}
@@ -0,0 +1,30 @@
1
+ # Third-party notices
2
+
3
+ The `pds/duration-token`, `pds/exit-motion`, `pds/motion-origin`, `pds/no-layout-motion`,
4
+ `pds/no-transition-all` and `pds/overlay-motion` rules adapt checks from the transitions.dev Motion
5
+ Agent (<https://github.com/Jakubantalik/transitions.dev>, `agent/lib/rules.mjs`,
6
+ `agent/lib/components.mjs` and `agent/lib/catalog.mjs`), used under the MIT License that the
7
+ repository's `LICENSE` grants its tooling (section 2, covering `agent/`). Nothing is taken from its
8
+ `transitions/` or `skills/` directories, which are under a different licence.
9
+
10
+ ```
11
+ Copyright (c) 2026 Jakub Antalik / Transitions.dev
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in
21
+ all copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
30
+ ```