@astryxdesign/core 0.1.1 → 0.1.2-canary.2581eb4

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 (189) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/README.md +119 -1
  3. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +1 -1
  4. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  5. package/dist/AvatarGroup/AvatarGroupOverflow.js +4 -1
  6. package/dist/Banner/Banner.d.ts +7 -0
  7. package/dist/Banner/Banner.d.ts.map +1 -1
  8. package/dist/Banner/Banner.js +9 -2
  9. package/dist/Button/Button.d.ts +12 -2
  10. package/dist/Button/Button.d.ts.map +1 -1
  11. package/dist/Button/Button.js +51 -13
  12. package/dist/Calendar/Calendar.d.ts +5 -4
  13. package/dist/Calendar/Calendar.d.ts.map +1 -1
  14. package/dist/Calendar/Calendar.js +6 -1
  15. package/dist/Calendar/index.d.ts +1 -1
  16. package/dist/Calendar/index.d.ts.map +1 -1
  17. package/dist/DateTimeInput/DateTimeInput.d.ts +7 -2
  18. package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
  19. package/dist/DateTimeInput/DateTimeInput.js +5 -4
  20. package/dist/EmptyState/EmptyState.d.ts.map +1 -1
  21. package/dist/EmptyState/EmptyState.js +7 -1
  22. package/dist/HoverCard/HoverCard.d.ts +2 -2
  23. package/dist/HoverCard/HoverCard.d.ts.map +1 -1
  24. package/dist/HoverCard/HoverCard.js +18 -6
  25. package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
  26. package/dist/HoverCard/useHoverCard.js +7 -3
  27. package/dist/Kbd/Kbd.d.ts.map +1 -1
  28. package/dist/Kbd/Kbd.js +1 -1
  29. package/dist/Layer/anchorName.d.ts +20 -0
  30. package/dist/Layer/anchorName.d.ts.map +1 -0
  31. package/dist/Layer/anchorName.js +36 -0
  32. package/dist/Layer/useLayer.d.ts +19 -0
  33. package/dist/Layer/useLayer.d.ts.map +1 -1
  34. package/dist/Layer/useLayer.js +15 -6
  35. package/dist/Link/Link.d.ts +1 -1
  36. package/dist/Link/Link.js +2 -2
  37. package/dist/Link/LinkProvider.d.ts +1 -0
  38. package/dist/Link/LinkProvider.d.ts.map +1 -1
  39. package/dist/Link/LinkProvider.js +1 -0
  40. package/dist/Markdown/Markdown.d.ts.map +1 -1
  41. package/dist/Markdown/Markdown.js +13 -3
  42. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  43. package/dist/MobileNav/MobileNav.js +13 -0
  44. package/dist/Pagination/Pagination.d.ts.map +1 -1
  45. package/dist/Pagination/Pagination.js +31 -27
  46. package/dist/Slider/Slider.js +2 -2
  47. package/dist/Table/BaseTable.d.ts.map +1 -1
  48. package/dist/Table/BaseTable.js +27 -8
  49. package/dist/Table/Table.d.ts.map +1 -1
  50. package/dist/Table/Table.js +30 -7
  51. package/dist/Table/TableRow.d.ts +6 -1
  52. package/dist/Table/TableRow.d.ts.map +1 -1
  53. package/dist/Table/TableRow.js +15 -7
  54. package/dist/Table/index.d.ts +3 -1
  55. package/dist/Table/index.d.ts.map +1 -1
  56. package/dist/Table/index.js +1 -0
  57. package/dist/Table/plugins/stickyColumns/index.d.ts +3 -0
  58. package/dist/Table/plugins/stickyColumns/index.d.ts.map +1 -0
  59. package/dist/Table/plugins/stickyColumns/index.js +3 -0
  60. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts +25 -0
  61. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -0
  62. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +369 -0
  63. package/dist/Table/types.d.ts +95 -5
  64. package/dist/Table/types.d.ts.map +1 -1
  65. package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
  66. package/dist/Table/useBaseTablePlugins.js +1 -1
  67. package/dist/Text/text.stylex.d.ts +2 -2
  68. package/dist/Text/text.stylex.js +2 -2
  69. package/dist/Timestamp/Timestamp.d.ts +1 -1
  70. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  71. package/dist/Timestamp/Timestamp.js +28 -3
  72. package/dist/ToggleButton/ToggleButton.d.ts +7 -9
  73. package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
  74. package/dist/ToggleButton/ToggleButton.js +34 -57
  75. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  76. package/dist/Tokenizer/Tokenizer.js +1 -1
  77. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  78. package/dist/Tooltip/useTooltip.js +1 -0
  79. package/dist/astryx.css +30 -1
  80. package/dist/astryx.umd.js +147 -0
  81. package/dist/astryx.umd.js.map +7 -0
  82. package/dist/theme/generateThemeRules.js +1 -1
  83. package/dist/theme/syntax/SyntaxTheme.d.ts +1 -1
  84. package/dist/theme/syntax/SyntaxTheme.js +1 -1
  85. package/dist/theme/syntax/defineSyntaxTheme.d.ts.map +1 -1
  86. package/dist/theme/syntax/defineSyntaxTheme.js +2 -2
  87. package/dist/theme/syntax/presets.d.ts +1 -1
  88. package/dist/theme/syntax/presets.d.ts.map +1 -1
  89. package/dist/theme/syntax/presets.js +1 -1
  90. package/dist/theme/syntax/tokens.d.ts +1 -1
  91. package/dist/theme/syntax/tokens.js +1 -1
  92. package/dist/theme/types.d.ts +1 -1
  93. package/dist/utils/dateTypes.d.ts +12 -0
  94. package/dist/utils/dateTypes.d.ts.map +1 -1
  95. package/dist/utils/dateTypes.js +41 -1
  96. package/package.json +6 -2
  97. package/src/AvatarGroup/AvatarGroupOverflow.tsx +3 -0
  98. package/src/Banner/Banner.doc.mjs +8 -0
  99. package/src/Banner/Banner.test.tsx +16 -7
  100. package/src/Banner/Banner.tsx +9 -2
  101. package/src/Button/Button.doc.mjs +6 -0
  102. package/src/Button/Button.test.tsx +105 -11
  103. package/src/Button/Button.tsx +73 -5
  104. package/src/Calendar/Calendar.doc.mjs +4 -4
  105. package/src/Calendar/Calendar.test.tsx +21 -26
  106. package/src/Calendar/Calendar.tsx +21 -5
  107. package/src/Calendar/index.ts +1 -0
  108. package/src/Chat/ChatComposer.doc.mjs +3 -0
  109. package/src/Chat/ChatComposerDrawer.doc.mjs +12 -0
  110. package/src/CheckboxInput/CheckboxInput.doc.mjs +8 -0
  111. package/src/ClickableCard/ClickableCard.doc.mjs +15 -0
  112. package/src/DateTimeInput/DateTimeInput.doc.mjs +11 -3
  113. package/src/DateTimeInput/DateTimeInput.test.tsx +23 -3
  114. package/src/DateTimeInput/DateTimeInput.tsx +13 -10
  115. package/src/Dialog/Dialog.doc.mjs +2 -2
  116. package/src/EmptyState/EmptyState.test.tsx +4 -2
  117. package/src/EmptyState/EmptyState.tsx +6 -2
  118. package/src/HoverCard/HoverCard.doc.mjs +3 -0
  119. package/src/HoverCard/HoverCard.test.tsx +189 -2
  120. package/src/HoverCard/HoverCard.tsx +20 -16
  121. package/src/HoverCard/useHoverCard.tsx +13 -10
  122. package/src/Icon/Icon.doc.mjs +8 -0
  123. package/src/Kbd/Kbd.tsx +2 -9
  124. package/src/Layer/anchorName.test.ts +146 -0
  125. package/src/Layer/anchorName.ts +46 -0
  126. package/src/Layer/useLayer.doc.mjs +7 -2
  127. package/src/Layer/useLayer.tsx +33 -9
  128. package/src/Layout/Layout.doc.mjs +1 -1
  129. package/src/Lightbox/Lightbox.doc.mjs +0 -2
  130. package/src/Link/Link.test.tsx +2 -2
  131. package/src/Link/Link.tsx +3 -3
  132. package/src/Link/LinkProvider.tsx +1 -0
  133. package/src/List/List.doc.mjs +7 -0
  134. package/src/Markdown/Markdown.doc.mjs +2 -0
  135. package/src/Markdown/Markdown.test.tsx +17 -26
  136. package/src/Markdown/Markdown.tsx +16 -6
  137. package/src/MobileNav/MobileNav.doc.mjs +8 -8
  138. package/src/MobileNav/MobileNav.tsx +13 -0
  139. package/src/MobileNav/MobileNavReopen.test.tsx +118 -0
  140. package/src/OverflowList/OverflowList.doc.mjs +17 -0
  141. package/src/Pagination/Pagination.test.tsx +137 -13
  142. package/src/Pagination/Pagination.tsx +33 -28
  143. package/src/ProgressBar/ProgressBar.test.tsx +13 -3
  144. package/src/Resizable/Resizable.doc.mjs +1 -1
  145. package/src/Section/Section.doc.mjs +11 -0
  146. package/src/SelectableCard/SelectableCard.doc.mjs +15 -0
  147. package/src/Selector/Selector.doc.mjs +4 -0
  148. package/src/Skeleton/Skeleton.doc.mjs +11 -1
  149. package/src/Slider/Slider.doc.mjs +4 -0
  150. package/src/Slider/Slider.test.tsx +3 -16
  151. package/src/Slider/Slider.tsx +1 -1
  152. package/src/TabList/TabList.doc.mjs +6 -0
  153. package/src/Table/BaseTable.tsx +51 -24
  154. package/src/Table/Table.doc.mjs +12 -0
  155. package/src/Table/Table.test.tsx +29 -30
  156. package/src/Table/Table.tsx +22 -1
  157. package/src/Table/TableRow.tsx +37 -7
  158. package/src/Table/index.ts +3 -0
  159. package/src/Table/plugins/stickyColumns/index.ts +4 -0
  160. package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +163 -0
  161. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +407 -0
  162. package/src/Table/types.ts +101 -4
  163. package/src/Table/useBaseTablePlugins.ts +1 -0
  164. package/src/Table/useTableColumnResize.doc.mjs +96 -0
  165. package/src/Table/useTableStickyColumns.doc.mjs +59 -0
  166. package/src/Text/Heading.doc.mjs +15 -2
  167. package/src/Text/Text.doc.mjs +7 -1
  168. package/src/Text/text.stylex.ts +2 -2
  169. package/src/Timestamp/Timestamp.doc.mjs +9 -0
  170. package/src/Timestamp/Timestamp.test.tsx +44 -18
  171. package/src/Timestamp/Timestamp.tsx +30 -10
  172. package/src/ToggleButton/ToggleButton.doc.mjs +9 -3
  173. package/src/ToggleButton/ToggleButton.test.tsx +39 -18
  174. package/src/ToggleButton/ToggleButton.tsx +46 -83
  175. package/src/Tokenizer/Tokenizer.tsx +4 -1
  176. package/src/Toolbar/Toolbar.doc.mjs +65 -5
  177. package/src/Tooltip/Tooltip.test.tsx +13 -0
  178. package/src/Tooltip/useTooltip.tsx +2 -3
  179. package/src/hooks/useImageMode.test.ts +133 -0
  180. package/src/theme/derivedVarRegistry.test.ts +4 -0
  181. package/src/theme/generateThemeRules.test.ts +7 -8
  182. package/src/theme/generateThemeRules.ts +1 -1
  183. package/src/theme/syntax/SyntaxTheme.tsx +1 -1
  184. package/src/theme/syntax/defineSyntaxTheme.ts +20 -11
  185. package/src/theme/syntax/presets.ts +5 -2
  186. package/src/theme/syntax/tokens.ts +1 -1
  187. package/src/theme/types.ts +1 -1
  188. package/src/utils/dateTypes.test.ts +40 -0
  189. package/src/utils/dateTypes.ts +40 -0
@@ -32,22 +32,20 @@ export interface ToggleButtonProps extends BaseProps<HTMLButtonElement> {
32
32
  */
33
33
  isPressed?: boolean;
34
34
  /**
35
- * Called when the pressed state should change.
35
+ * Called when the pressed state should change. Receives the next pressed
36
+ * state and the originating click event. Call `event.preventDefault()` to
37
+ * opt out of running `pressedChangeAction` (e.g. to handle the toggle
38
+ * entirely in this callback).
36
39
  * When used inside ToggleButtonGroup, this is handled by the group
37
40
  * and this prop is ignored.
38
41
  */
39
- onPressedChange?: (isPressed: boolean) => void;
42
+ onPressedChange?: (isPressed: boolean, event: React.MouseEvent<HTMLButtonElement>) => void;
40
43
  /**
41
44
  * Action handler for API- or navigation-backed toggles, run inside a
42
- * transition. The button shows a loading spinner while the action is
43
- * pending — whether it returns a promise or synchronously triggers a
45
+ * transition by Button. The button shows a loading spinner while the action
46
+ * is pending — whether it returns a promise or synchronously triggers a
44
47
  * suspending update (e.g. a router navigation that suspends on data).
45
48
  *
46
- * Because it runs in a transition, the toggle is *interruptible*: clicking
47
- * again while an action is pending starts a new transition with the next
48
- * optimistic state, so the action reflects the latest intent rather than
49
- * being dropped.
50
- *
51
49
  * @example
52
50
  * ```
53
51
  * <ToggleButton
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleButton.d.ts","sourceRoot":"","sources":["../../src/ToggleButton/ToggleButton.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAMZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EAAS,KAAK,UAAU,EAAC,MAAM,WAAW,CAAC;AAElD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAyE5C,MAAM,WAAW,iBAAkB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACrE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAE/C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,KAAK,EACL,SAAS,EAAE,aAAa,EACxB,eAAe,EAAE,mBAAmB,EACpC,mBAAmB,EACnB,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,cAAsB,EAClC,SAAiB,EACjB,IAAI,EACJ,UAAkB,EAClB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACN,SAAS,EAAE,UAAU,EACrB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,iBAAiB,GAAG,SAAS,CAyG/B;yBA5He,YAAY"}
1
+ {"version":3,"file":"ToggleButton.d.ts","sourceRoot":"","sources":["../../src/ToggleButton/ToggleButton.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAgB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAI3D,OAAO,EAAS,KAAK,UAAU,EAAC,MAAM,WAAW,CAAC;AAElD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA0C5C,MAAM,WAAW,iBAAkB,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACrE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,CAChB,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KACvC,IAAI,CAAC;IAEV;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,GAAG,EACH,KAAK,EACL,SAAS,EAAE,aAAa,EACxB,eAAe,EAAE,mBAAmB,EACpC,mBAAmB,EACnB,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,cAAsB,EAClC,SAAiB,EACjB,IAAI,EACJ,UAAkB,EAClB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACN,SAAS,EAAE,UAAU,EACrB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,iBAAiB,GAAG,SAAS,CAyG/B;yBA5He,YAAY"}
@@ -19,7 +19,7 @@
19
19
  * - /apps/storybook/stories/ToggleButton.stories.tsx
20
20
  * - /packages/cli/templates/blocks/components/ToggleButton/ (showcase blocks)
21
21
  */
22
- import React, { useCallback, useEffect, useOptimistic, useState, useTransition } from 'react';
22
+ import React, { useOptimistic } from 'react';
23
23
  import * as stylex from '@stylexjs/stylex';
24
24
  import "../theme/tokens.stylex.js";
25
25
  import { colorVars, fontWeightVars } from "../theme/tokens.stylex.js";
@@ -27,38 +27,6 @@ import { Button } from "../Button/index.js";
27
27
  import { useToggleButtonGroup } from "./ToggleButtonGroup.js";
28
28
  import { themeProps } from "../utils/themeProps.js";
29
29
 
30
- // =============================================================================
31
- // Constants & helpers
32
- // =============================================================================
33
-
34
- /**
35
- * The spinner only appears once the action has been pending for this long.
36
- * A fast action shows the optimistic pressed state immediately with no spinner
37
- * flash, and rapid re-clicks can interrupt the in-flight action before the
38
- * button locks behind the spinner.
39
- */
40
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
41
- const PENDING_SPINNER_DELAY_MS = 150;
42
-
43
- /**
44
- * Returns `true` only once `active` has stayed `true` for `delayMs`.
45
- * Used to debounce the loading spinner so the optimistic state shows first.
46
- */
47
- function useDelayed(active, delayMs) {
48
- const [delayed, setDelayed] = useState(false);
49
- useEffect(() => {
50
- if (!active) {
51
- return undefined;
52
- }
53
- const timer = setTimeout(() => setDelayed(true), delayMs);
54
- return () => {
55
- clearTimeout(timer);
56
- setDelayed(false);
57
- };
58
- }, [active, delayMs]);
59
- return active && delayed;
60
- }
61
-
62
30
  // =============================================================================
63
31
  // Styles
64
32
  // =============================================================================
@@ -68,6 +36,7 @@ function useDelayed(active, delayMs) {
68
36
  * A hidden span renders the same text at semibold weight to reserve
69
37
  * the wider width, preventing layout shift when toggling.
70
38
  */
39
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
71
40
  const pressedStyles = {
72
41
  background: {
73
42
  kWkggS: "xi89dp7",
@@ -129,41 +98,47 @@ export function ToggleButton({
129
98
  const size = sizeProp ?? group?.size ?? 'md';
130
99
  const isDisabled = group?.isDisabled ?? isDisabledProp;
131
100
 
132
- // Track the pressed state optimistically. While an action is pending, the
133
- // button reflects the intended (optimistic) state immediately, and a click
134
- // mid-flight derives its next state from this value — so rapid toggles read
135
- // true -> false -> true rather than stalling on the last committed value.
101
+ // Track the pressed state optimistically so the button reflects the intended
102
+ // state immediately while an async action is pending. The optimistic update
103
+ // is applied inside Button's clickAction transition (below), satisfying
104
+ // React's "useOptimistic must run in a transition" rule.
136
105
  const [optimisticPressed, setOptimisticPressed] = useOptimistic(committedPressed);
137
106
  const isPressed = optimisticPressed;
107
+
108
+ // Next state derives from the *optimistic* value, not the committed one, so a
109
+ // re-click while an action is pending reads the in-flight intent and toggles
110
+ // (true -> false -> true) rather than recomputing from the stale committed
111
+ // state. handleClick and clickAction share this so the callback and the
112
+ // optimistic update always agree within a single click.
113
+ const nextPressed = !isPressed;
138
114
  const resolvedIcon = isPressed && pressedIcon ? pressedIcon : icon;
139
115
 
140
- // Run the toggle inside a transition. The action is interruptible: clicking
141
- // again while it is pending starts a fresh transition with the next
142
- // optimistic state instead of being dropped, so there is no re-entry guard.
143
- // Both onPressedChange and pressedChangeAction run inside the transition,
144
- // which means a synchronous-but-suspending handler (e.g. a router navigation
145
- // that suspends on data) also drives the pending state — not just promises.
146
- const [isPending, startTransition] = useTransition();
147
- // Debounce the spinner so a fast action shows the optimistic state without a
148
- // spinner flash, and rapid re-clicks can interrupt before the button locks.
149
- const showSpinner = useDelayed(isPending, PENDING_SPINNER_DELAY_MS);
150
- const isLoadingState = isLoading || showSpinner;
151
- const handleClick = useCallback(() => {
116
+ // Synchronous part of the toggle. Button calls onClick before clickAction and
117
+ // skips clickAction when the event is defaultPrevented, so calling
118
+ // preventDefault() inside onPressedChange opts out of pressedChangeAction.
119
+ const handleClick = event => {
152
120
  if (isDisabled) {
153
121
  return;
154
122
  }
155
123
  if (group && value != null) {
156
124
  // Group mode delegates selection to the group; no async-action path.
157
125
  group.toggle(value);
126
+ event.preventDefault();
158
127
  return;
159
128
  }
160
- const newState = !optimisticPressed;
161
- startTransition(async () => {
162
- setOptimisticPressed(newState);
163
- onPressedChangeProp?.(newState);
164
- await pressedChangeAction?.(newState);
165
- });
166
- }, [isDisabled, group, value, optimisticPressed, onPressedChangeProp, pressedChangeAction, setOptimisticPressed]);
129
+ onPressedChangeProp?.(nextPressed, event);
130
+ };
131
+
132
+ // Async part of the toggle, run inside Button's transition (so the optimistic
133
+ // update is valid and Button's isPending drives the pending spinner). Skipped
134
+ // automatically by Button when handleClick called preventDefault, and never
135
+ // wired in group mode (where there is no async action). Button is rendered
136
+ // interruptible, so it stays clickable while pending and a re-click starts a
137
+ // fresh transition that interrupts the previous one.
138
+ const clickAction = group && value != null ? undefined : async () => {
139
+ setOptimisticPressed(nextPressed);
140
+ await pressedChangeAction?.(nextPressed);
141
+ };
167
142
 
168
143
  // isIconOnly prop is the source of truth for icon-only rendering.
169
144
  const labelContent = children != null ? /*#__PURE__*/_jsxs("span", {
@@ -211,7 +186,8 @@ export function ToggleButton({
211
186
  variant: "ghost",
212
187
  size: size,
213
188
  isDisabled: isDisabled,
214
- isLoading: isLoadingState,
189
+ isLoading: isLoading,
190
+ isInterruptible: true,
215
191
  isIconOnly: isIconOnly,
216
192
  "aria-pressed": isPressed,
217
193
  icon: resolvedIcon,
@@ -222,6 +198,7 @@ export function ToggleButton({
222
198
  xstyle: [isPressed ? pressedStyles.background : undefined, xstyle],
223
199
  style: style,
224
200
  onClick: handleClick,
201
+ clickAction: clickAction,
225
202
  ...props,
226
203
  children: labelContent
227
204
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/Tokenizer/Tokenizer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/Tokenizer/Tokenizer.tsx"],"names":[],"mappings":"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"}
@@ -75,7 +75,7 @@ const styles = {
75
75
  },
76
76
  endSection: {
77
77
  kVAEAm: "x10l6tqk",
78
- kt4wiu: "xuxqglg",
78
+ kt4wiu: "x72tfeb",
79
79
  k1xSpc: "x78zum5",
80
80
  kGNEyG: "x6s0dn4",
81
81
  kOIVth: "x1txdalj",
@@ -1 +1 @@
1
- {"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../src/Tooltip/useTooltip.tsx"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AA+C3B;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAEnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEtC;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,kBAAkB,KAAK,SAAS,CAAC;CAC/E;AAyBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAsNf"}
1
+ {"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../src/Tooltip/useTooltip.tsx"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AA+C3B;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAEnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEtC;;;;OAIG;IACH,cAAc,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,kBAAkB,KAAK,SAAS,CAAC;CAC/E;AAyBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAuNtE"}
@@ -251,6 +251,7 @@ export function useTooltip(options = {}) {
251
251
  const renderProps = {
252
252
  placement: renderPlacement,
253
253
  alignment: props?.alignment ?? alignment,
254
+ role: 'tooltip',
254
255
  xstyle: [popoverXstyle, layerAnimations[renderPlacement]],
255
256
  className: themeProps('tooltip').className
256
257
  };
package/dist/astryx.css CHANGED
@@ -26,6 +26,7 @@
26
26
  @property --x-transform { syntax: "*"; inherits: false;}
27
27
  @property --x-WebkitLineClamp { syntax: "*"; inherits: false;}
28
28
  @property --x-width { syntax: "*"; inherits: false;}
29
+ @keyframes x188b6p3-B{from{color:inherit;}to{color:transparent;}}
29
30
  @keyframes x13kz0yu-B{0%, 100%{opacity:1;}50%{opacity:.5;}}
30
31
  @keyframes x18re5ia-B{from{opacity:0;}to{opacity:1;}}
31
32
  @keyframes xgnty7z-B{0%{opacity:.25;}100%{opacity:1;}}
@@ -247,7 +248,9 @@
247
248
  .xkce8z9{--separator-display:flex}
248
249
  .x11woleg:focus-visible{--indicator-color:var(--color-accent)}
249
250
  .x1ibt0lz:first-child{--separator-display:none}
251
+ .x1rht92:nth-child(even){--table-row-overlay:var(--color-background-muted)}
250
252
  .x1m3wso9:hover{--indicator-color:var(--color-accent)}
253
+ @media (hover: hover){.x1pkcbo2.x1pkcbo2:hover{--table-row-overlay:var(--color-overlay-hover)}}
251
254
  .xln7xf2:not(#\#){font:inherit}
252
255
  .x10a8y8t:not(#\#){inset:0}
253
256
  .xh3736h:not(#\#){inset:unset}
@@ -453,17 +456,22 @@
453
456
  .x1y8v6su:not(#\#):not(#\#):not(#\#){align-self:start}
454
457
  .xkh2ocl:not(#\#):not(#\#):not(#\#){align-self:stretch}
455
458
  .x7dpabl:not(#\#):not(#\#):not(#\#){anchor-name:--outline-active}
459
+ .x17yabm6:not(#\#):not(#\#):not(#\#){animation-delay:var(--duration-medium-min)}
456
460
  .xvo38ju:not(#\#):not(#\#):not(#\#){animation-delay:var(--x-animationDelay)}
457
461
  .xpz12be:not(#\#):not(#\#):not(#\#){animation-direction:alternate}
458
462
  .xmg6eyc:not(#\#):not(#\#):not(#\#){animation-duration:1.5s}
463
+ .xjlvqhv:not(#\#):not(#\#):not(#\#){animation-duration:1ms}
459
464
  .x1c74tu6:not(#\#):not(#\#):not(#\#){animation-duration:2s}
460
465
  .x9uej1z:not(#\#):not(#\#):not(#\#){animation-duration:var(--duration-fast-max)}
466
+ .xb2rp9n:not(#\#):not(#\#):not(#\#){animation-duration:var(--duration-fast)}
461
467
  .xqgcaz:not(#\#):not(#\#):not(#\#){animation-duration:var(--duration-medium-max)}
462
468
  .x14qxm4i:not(#\#):not(#\#):not(#\#){animation-duration:var(--duration-slow-min)}
463
469
  .xskzprw:not(#\#):not(#\#):not(#\#){animation-fill-mode:backwards}
470
+ .x10e4vud:not(#\#):not(#\#):not(#\#){animation-fill-mode:forwards}
464
471
  .xa4qsjk:not(#\#):not(#\#):not(#\#){animation-iteration-count:infinite}
465
472
  .x1ewfqum:not(#\#):not(#\#):not(#\#){animation-name:x11lauxq-B}
466
473
  .xcx56e2:not(#\#):not(#\#):not(#\#){animation-name:x13kz0yu-B}
474
+ .x1ffowhz:not(#\#):not(#\#):not(#\#){animation-name:x188b6p3-B}
467
475
  .xqcmdr3:not(#\#):not(#\#):not(#\#){animation-name:x18re5ia-B}
468
476
  .x3psbcj:not(#\#):not(#\#):not(#\#){animation-name:x1ahk7ht-B}
469
477
  .x1dvww92:not(#\#):not(#\#):not(#\#){animation-name:x1b6yrix-B}
@@ -485,6 +493,7 @@
485
493
  .xioom0i:not(#\#):not(#\#):not(#\#){aspect-ratio:var(--button-icon-only-aspect)}
486
494
  .xvn2z4z:not(#\#):not(#\#):not(#\#){backdrop-filter:blur(12px)}
487
495
  .xlp1x4z:not(#\#):not(#\#):not(#\#){backface-visibility:hidden}
496
+ .xx83zyx:not(#\#):not(#\#):not(#\#){background-clip:padding-box}
488
497
  .x1rkw3yq:not(#\#):not(#\#):not(#\#){background-color:color-mix(in srgb,white 60%,transparent)}
489
498
  .xtwfq29:not(#\#):not(#\#):not(#\#){background-color:currentColor}
490
499
  .xgcd1z6:not(#\#):not(#\#):not(#\#){background-color:inherit}
@@ -527,8 +536,10 @@
527
536
  .x16fr6go:not(#\#):not(#\#):not(#\#){background-color:var(--color-text-disabled)}
528
537
  .x19aspcf:not(#\#):not(#\#):not(#\#){background-color:var(--color-text-primary)}
529
538
  .xdomwnj:not(#\#):not(#\#):not(#\#){background-color:var(--color-text-secondary)}
539
+ .xdsb6cv:not(#\#):not(#\#):not(#\#){background-color:var(--color-track)}
530
540
  .x24i8r5:not(#\#):not(#\#):not(#\#){background-color:var(--color-warning-muted)}
531
541
  .x1q8g9m5:not(#\#):not(#\#):not(#\#){background-color:var(--color-warning)}
542
+ .x1fd97le:not(#\#):not(#\#):not(#\#){background-color:var(--table-sticky-background,var(--color-background-card))}
532
543
  .x1vrk509:not(#\#):not(#\#):not(#\#){background-image:linear-gradient(var(--color-background-muted),var(--color-background-muted))}
533
544
  .x14bno8m:not(#\#):not(#\#):not(#\#){background-image:linear-gradient(var(--color-neutral),var(--color-neutral))}
534
545
  .x18o3ruo:not(#\#):not(#\#):not(#\#){background-image:none}
@@ -739,7 +750,6 @@
739
750
  .xtijo5x:not(#\#):not(#\#):not(#\#){inset-inline-end:0}
740
751
  .x1oinnt5:not(#\#):not(#\#):not(#\#){inset-inline-end:calc((var(--size-element-md) - 20px) / 2 - 1px)}
741
752
  .x8qlsd8:not(#\#):not(#\#):not(#\#){inset-inline-end:calc((var(--size-element-sm) - 20px) / 2 - 1px)}
742
- .xuxqglg:not(#\#):not(#\#):not(#\#){inset-inline-end:calc(var(--spacing-1) - 1px)}
743
753
  .x72tfeb:not(#\#):not(#\#):not(#\#){inset-inline-end:var(--spacing-2)}
744
754
  .x1o0tod:not(#\#):not(#\#):not(#\#){inset-inline-start:0}
745
755
  .xc8icb0:not(#\#):not(#\#):not(#\#){isolation:isolate}
@@ -989,6 +999,7 @@
989
999
  .x1ja2u2z:not(#\#):not(#\#):not(#\#){z-index:0}
990
1000
  .x1vjfegm:not(#\#):not(#\#):not(#\#){z-index:1}
991
1001
  .xhtitgo:not(#\#):not(#\#):not(#\#){z-index:2}
1002
+ .xzkaem6:not(#\#):not(#\#):not(#\#){z-index:3}
992
1003
  .x6cuj84:not(#\#):not(#\#):not(#\#){z-index:500}
993
1004
  .x1q2oy4v:not(#\#):not(#\#):not(#\#){z-index:9999}
994
1005
  .x1v2claj.x1v2claj:where(.x84s7jz:focus-within *):not(#\#):not(#\#):not(#\#){opacity:1}
@@ -1047,6 +1058,7 @@
1047
1058
  .x1tmayz8:active:not(#\#):not(#\#):not(#\#){opacity:.75}
1048
1059
  .x1pdlv7q:active:not(#\#):not(#\#):not(#\#){transform:none}
1049
1060
  .xk4oym4:active:not(#\#):not(#\#):not(#\#){transform:scale(.98)}
1061
+ @media (prefers-reduced-motion: reduce){.x14q22ui.x14q22ui:not(#\#):not(#\#):not(#\#){animation-delay:0s}}
1050
1062
  @media (prefers-reduced-motion: reduce){.xnh0sag.xnh0sag:not(#\#):not(#\#):not(#\#){animation-duration:3s}}
1051
1063
  @media (prefers-reduced-motion: reduce){.x1aquc0h.x1aquc0h:not(#\#):not(#\#):not(#\#){animation-name:none}}
1052
1064
  @media (prefers-contrast: more){.x1r1p5j5.x1r1p5j5:not(#\#):not(#\#):not(#\#){background-color:color-mix(in srgb,var(--color-skeleton),var(--color-text-primary) 30%)}}
@@ -1091,6 +1103,7 @@
1091
1103
  @media (hover: hover){.xhouywz.xhouywz:hover:not(#\#):not(#\#):not(#\#){box-shadow:var(--shadow-med)}}
1092
1104
  @media (hover: hover){.x140uwzg.x140uwzg:hover:not(#\#):not(#\#):not(#\#){color:var(--color-text-primary)}}
1093
1105
  @media (hover: hover){.xzomjkg.xzomjkg:hover:not(#\#):not(#\#):not(#\#){opacity:.85}}
1106
+ .xib2hle:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-color:var(--color-border-emphasized)}
1094
1107
  .xw8gpjh:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-color:var(--color-border)}
1095
1108
  .xfrllxf:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-left-radius:0}
1096
1109
  .x6bqyzk:not(#\#):not(#\#):not(#\#):not(#\#){border-bottom-left-radius:var(--_chat-composer-radius)}
@@ -1412,6 +1425,7 @@
1412
1425
  @starting-style{.x1sopeo2.x1sopeo2:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){grid-template-rows:0fr}}
1413
1426
  .x1xsm0q9:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{inset:-14px}
1414
1427
  .xarstr8:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{inset:0}
1428
+ .xxx281p:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{inset:0}
1415
1429
  @starting-style{.x4itv7f.x4itv7f:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){opacity:0}}
1416
1430
  @starting-style{.xub2912.xub2912:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){transform:translateY(-100%)}}
1417
1431
  @starting-style{.x12p7p72.x12p7p72:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){transform:translateY(-4px)}}
@@ -1420,27 +1434,41 @@
1420
1434
  .x1k48kgn:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{border-radius:inherit}
1421
1435
  @starting-style{.x5rzir7.x5rzir7:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:0}}
1422
1436
  .xvtkv6q:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transition:background-color .15s ease,width .15s ease}
1437
+ .x17s1k9h:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transition:opacity .15s ease}
1423
1438
  .x1abwkk1:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{backdrop-filter:blur(2px)}
1424
1439
  .xyhc2n1:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{background-color:transparent}
1425
1440
  .xnixb3f:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{background-color:var(--color-overlay)}
1426
1441
  .x1i3206j:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{background-color:var(--indicator-color,transparent)}
1442
+ .x1uvfo0n:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{background-color:var(--table-row-overlay,transparent)}
1443
+ .x14ofgck:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{background-image:linear-gradient(to left,light-dark(rgba(0,0,0,.12),rgba(0,0,0,.32)),transparent)}
1444
+ .x156sm4c:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{background-image:linear-gradient(to right,light-dark(rgba(0,0,0,.12),rgba(0,0,0,.32)),transparent)}
1427
1445
  .xnf3u0:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::placeholder{color:var(--color-text-disabled)}
1428
1446
  .xeyghm5:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::placeholder{color:var(--color-text-secondary)}
1429
1447
  .x1cpjm7i:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{content:""}
1430
1448
  .x1s928wv:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{content:""}
1431
1449
  .xc2ndz5:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{content:counter(astryx-list) "."}
1432
1450
  .x1unh1gc:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{inset-inline-end:0}
1451
+ .x1iygr5g:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{inset-inline-start:0}
1433
1452
  .xph5o2a:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{opacity:0}
1434
1453
  .xb3n6bw:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{opacity:1}
1454
+ .x1c2idit:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{opacity:var(--table-sticky-shadow-end,0)}
1455
+ .x1sggmfs:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{opacity:var(--table-sticky-shadow-start,0)}
1435
1456
  .x2q1x1w:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{pointer-events:none}
1457
+ .xkk1bqk:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{pointer-events:none}
1436
1458
  .x1hmns74:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{position:absolute}
1437
1459
  .x1j6awrg:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{position:absolute}
1460
+ .xvs0bi2:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transform:translateX(-100%)}
1461
+ .x1qyefdi:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transform:translateX(100%)}
1462
+ .x1y1nw7a:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{transition-duration:var(--duration-fast)}
1438
1463
  .x97pup0:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transition-duration:var(--duration-fast)}
1439
1464
  .xft5bk6:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{transition-duration:var(--duration-medium)}
1440
1465
  .x1ywzrc5:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transition-property:background-color}
1466
+ .xxcwgru:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{transition-property:background-color}
1441
1467
  .x167zut7:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{transition-property:opacity}
1442
1468
  .x15h3t91:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{transition-timing-function:var(--ease-standard)}
1443
1469
  .x1dlmc9c:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transition-timing-function:var(--ease-standard)}
1470
+ .xa5v58t:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{transition-timing-function:var(--ease-standard)}
1471
+ .xy5mcqj:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{z-index:-1}
1444
1472
  .xotisz4:active:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{background-color:color-mix(in srgb,currentColor 10%,transparent)}
1445
1473
  @media (prefers-reduced-motion: reduce){.x1viac0w.x1viac0w:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{transition-duration:.01s}}
1446
1474
  @media (hover: hover){.x1vwwndy.x1vwwndy:hover:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{background-color:color-mix(in srgb,currentColor 5%,transparent)}}
@@ -1450,5 +1478,6 @@
1450
1478
  .x1ydowbf:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{right:-2px}
1451
1479
  .x51xajf:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{top:-2px}
1452
1480
  .x1m1drc7:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{top:0}
1481
+ .xzkji8o:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{width:6px}
1453
1482
  .xi8c0p9:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{width:var(--indicator-width,1px)}
1454
1483
  }