@astryxdesign/core 0.1.1 → 0.1.2-canary.03536f1

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 (207) 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 +10 -1
  36. package/dist/Link/Link.d.ts.map +1 -1
  37. package/dist/Link/Link.js +7 -2
  38. package/dist/Link/LinkProvider.d.ts +1 -0
  39. package/dist/Link/LinkProvider.d.ts.map +1 -1
  40. package/dist/Link/LinkProvider.js +1 -0
  41. package/dist/Markdown/Markdown.d.ts.map +1 -1
  42. package/dist/Markdown/Markdown.js +13 -3
  43. package/dist/MobileNav/MobileNav.d.ts.map +1 -1
  44. package/dist/MobileNav/MobileNav.js +13 -0
  45. package/dist/Pagination/Pagination.d.ts.map +1 -1
  46. package/dist/Pagination/Pagination.js +31 -27
  47. package/dist/Slider/Slider.js +2 -2
  48. package/dist/Table/BaseTable.d.ts.map +1 -1
  49. package/dist/Table/BaseTable.js +38 -16
  50. package/dist/Table/Table.d.ts.map +1 -1
  51. package/dist/Table/Table.js +30 -7
  52. package/dist/Table/TableCell.d.ts +8 -1
  53. package/dist/Table/TableCell.d.ts.map +1 -1
  54. package/dist/Table/TableCell.js +10 -10
  55. package/dist/Table/TableHeaderCell.d.ts +8 -1
  56. package/dist/Table/TableHeaderCell.d.ts.map +1 -1
  57. package/dist/Table/TableHeaderCell.js +16 -16
  58. package/dist/Table/TableRow.d.ts +6 -1
  59. package/dist/Table/TableRow.d.ts.map +1 -1
  60. package/dist/Table/TableRow.js +15 -7
  61. package/dist/Table/index.d.ts +4 -1
  62. package/dist/Table/index.d.ts.map +1 -1
  63. package/dist/Table/index.js +2 -0
  64. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  65. package/dist/Table/plugins/sortable/useTableSortable.js +59 -3
  66. package/dist/Table/plugins/stickyColumns/index.d.ts +3 -0
  67. package/dist/Table/plugins/stickyColumns/index.d.ts.map +1 -0
  68. package/dist/Table/plugins/stickyColumns/index.js +3 -0
  69. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts +25 -0
  70. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -0
  71. package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +369 -0
  72. package/dist/Table/tableContextMenu.d.ts +33 -0
  73. package/dist/Table/tableContextMenu.d.ts.map +1 -0
  74. package/dist/Table/tableContextMenu.js +136 -0
  75. package/dist/Table/types.d.ts +161 -5
  76. package/dist/Table/types.d.ts.map +1 -1
  77. package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
  78. package/dist/Table/useBaseTablePlugins.js +1 -1
  79. package/dist/Text/text.stylex.d.ts +2 -2
  80. package/dist/Text/text.stylex.js +2 -2
  81. package/dist/Timestamp/Timestamp.d.ts +1 -1
  82. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  83. package/dist/Timestamp/Timestamp.js +28 -3
  84. package/dist/ToggleButton/ToggleButton.d.ts +7 -9
  85. package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
  86. package/dist/ToggleButton/ToggleButton.js +34 -57
  87. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  88. package/dist/Tokenizer/Tokenizer.js +1 -1
  89. package/dist/Tooltip/useTooltip.d.ts.map +1 -1
  90. package/dist/Tooltip/useTooltip.js +1 -0
  91. package/dist/astryx.css +30 -1
  92. package/dist/astryx.umd.js +147 -0
  93. package/dist/astryx.umd.js.map +7 -0
  94. package/dist/theme/generateThemeRules.js +1 -1
  95. package/dist/theme/syntax/SyntaxTheme.d.ts +1 -1
  96. package/dist/theme/syntax/SyntaxTheme.js +1 -1
  97. package/dist/theme/syntax/defineSyntaxTheme.d.ts.map +1 -1
  98. package/dist/theme/syntax/defineSyntaxTheme.js +2 -2
  99. package/dist/theme/syntax/presets.d.ts +1 -1
  100. package/dist/theme/syntax/presets.d.ts.map +1 -1
  101. package/dist/theme/syntax/presets.js +1 -1
  102. package/dist/theme/syntax/tokens.d.ts +1 -1
  103. package/dist/theme/syntax/tokens.js +1 -1
  104. package/dist/theme/types.d.ts +1 -1
  105. package/dist/utils/dateTypes.d.ts +12 -0
  106. package/dist/utils/dateTypes.d.ts.map +1 -1
  107. package/dist/utils/dateTypes.js +41 -1
  108. package/package.json +6 -2
  109. package/src/AvatarGroup/AvatarGroupOverflow.tsx +3 -0
  110. package/src/Banner/Banner.doc.mjs +8 -0
  111. package/src/Banner/Banner.test.tsx +16 -7
  112. package/src/Banner/Banner.tsx +9 -2
  113. package/src/Button/Button.doc.mjs +6 -0
  114. package/src/Button/Button.test.tsx +105 -11
  115. package/src/Button/Button.tsx +73 -5
  116. package/src/Calendar/Calendar.doc.mjs +4 -4
  117. package/src/Calendar/Calendar.test.tsx +21 -26
  118. package/src/Calendar/Calendar.tsx +21 -5
  119. package/src/Calendar/index.ts +1 -0
  120. package/src/Chat/ChatComposer.doc.mjs +3 -0
  121. package/src/Chat/ChatComposerDrawer.doc.mjs +12 -0
  122. package/src/CheckboxInput/CheckboxInput.doc.mjs +8 -0
  123. package/src/ClickableCard/ClickableCard.doc.mjs +15 -0
  124. package/src/DateTimeInput/DateTimeInput.doc.mjs +11 -3
  125. package/src/DateTimeInput/DateTimeInput.test.tsx +23 -3
  126. package/src/DateTimeInput/DateTimeInput.tsx +13 -10
  127. package/src/Dialog/Dialog.doc.mjs +2 -2
  128. package/src/EmptyState/EmptyState.test.tsx +4 -2
  129. package/src/EmptyState/EmptyState.tsx +6 -2
  130. package/src/HoverCard/HoverCard.doc.mjs +3 -0
  131. package/src/HoverCard/HoverCard.test.tsx +189 -2
  132. package/src/HoverCard/HoverCard.tsx +20 -16
  133. package/src/HoverCard/useHoverCard.tsx +13 -10
  134. package/src/Icon/Icon.doc.mjs +8 -0
  135. package/src/Kbd/Kbd.tsx +2 -9
  136. package/src/Layer/anchorName.test.ts +146 -0
  137. package/src/Layer/anchorName.ts +46 -0
  138. package/src/Layer/useLayer.doc.mjs +7 -2
  139. package/src/Layer/useLayer.tsx +33 -9
  140. package/src/Layout/Layout.doc.mjs +1 -1
  141. package/src/Lightbox/Lightbox.doc.mjs +0 -2
  142. package/src/Link/Link.test.tsx +20 -2
  143. package/src/Link/Link.tsx +12 -3
  144. package/src/Link/LinkProvider.tsx +1 -0
  145. package/src/List/List.doc.mjs +7 -0
  146. package/src/Markdown/Markdown.doc.mjs +2 -0
  147. package/src/Markdown/Markdown.test.tsx +17 -26
  148. package/src/Markdown/Markdown.tsx +16 -6
  149. package/src/MobileNav/MobileNav.doc.mjs +8 -8
  150. package/src/MobileNav/MobileNav.tsx +13 -0
  151. package/src/MobileNav/MobileNavReopen.test.tsx +118 -0
  152. package/src/OverflowList/OverflowList.doc.mjs +17 -0
  153. package/src/Pagination/Pagination.test.tsx +137 -13
  154. package/src/Pagination/Pagination.tsx +33 -28
  155. package/src/ProgressBar/ProgressBar.test.tsx +13 -3
  156. package/src/Resizable/Resizable.doc.mjs +1 -1
  157. package/src/Section/Section.doc.mjs +11 -0
  158. package/src/SelectableCard/SelectableCard.doc.mjs +15 -0
  159. package/src/Selector/Selector.doc.mjs +4 -0
  160. package/src/Skeleton/Skeleton.doc.mjs +11 -1
  161. package/src/Slider/Slider.doc.mjs +4 -0
  162. package/src/Slider/Slider.test.tsx +3 -16
  163. package/src/Slider/Slider.tsx +1 -1
  164. package/src/TabList/TabList.doc.mjs +6 -0
  165. package/src/Table/BaseTable.tsx +72 -41
  166. package/src/Table/Table.doc.mjs +12 -0
  167. package/src/Table/Table.test.tsx +29 -30
  168. package/src/Table/Table.tsx +22 -1
  169. package/src/Table/TableCell.tsx +25 -23
  170. package/src/Table/TableHeaderCell.tsx +28 -29
  171. package/src/Table/TableRow.tsx +37 -7
  172. package/src/Table/index.ts +6 -0
  173. package/src/Table/plugins/sortable/useTableSortable.test.tsx +91 -2
  174. package/src/Table/plugins/sortable/useTableSortable.tsx +53 -1
  175. package/src/Table/plugins/stickyColumns/index.ts +4 -0
  176. package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +163 -0
  177. package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +407 -0
  178. package/src/Table/tableContextMenu.test.tsx +157 -0
  179. package/src/Table/tableContextMenu.tsx +146 -0
  180. package/src/Table/types.ts +175 -4
  181. package/src/Table/useBaseTablePlugins.ts +1 -0
  182. package/src/Table/useTableColumnResize.doc.mjs +96 -0
  183. package/src/Table/useTableStickyColumns.doc.mjs +59 -0
  184. package/src/Text/Heading.doc.mjs +15 -2
  185. package/src/Text/Text.doc.mjs +7 -1
  186. package/src/Text/text.stylex.ts +2 -2
  187. package/src/Timestamp/Timestamp.doc.mjs +9 -0
  188. package/src/Timestamp/Timestamp.test.tsx +44 -18
  189. package/src/Timestamp/Timestamp.tsx +30 -10
  190. package/src/ToggleButton/ToggleButton.doc.mjs +9 -3
  191. package/src/ToggleButton/ToggleButton.test.tsx +39 -18
  192. package/src/ToggleButton/ToggleButton.tsx +46 -83
  193. package/src/Tokenizer/Tokenizer.tsx +4 -1
  194. package/src/Toolbar/Toolbar.doc.mjs +65 -5
  195. package/src/Tooltip/Tooltip.test.tsx +13 -0
  196. package/src/Tooltip/useTooltip.tsx +2 -3
  197. package/src/hooks/useImageMode.test.ts +133 -0
  198. package/src/theme/derivedVarRegistry.test.ts +4 -0
  199. package/src/theme/generateThemeRules.test.ts +7 -8
  200. package/src/theme/generateThemeRules.ts +1 -1
  201. package/src/theme/syntax/SyntaxTheme.tsx +1 -1
  202. package/src/theme/syntax/defineSyntaxTheme.ts +20 -11
  203. package/src/theme/syntax/presets.ts +5 -2
  204. package/src/theme/syntax/tokens.ts +1 -1
  205. package/src/theme/types.ts +1 -1
  206. package/src/utils/dateTypes.test.ts +40 -0
  207. package/src/utils/dateTypes.ts +40 -0
@@ -217,6 +217,26 @@ export interface HeaderCellRenderProps {
217
217
  overlay?: ReactNode;
218
218
  /** Content rendered below the header label row (e.g. inline filter controls). */
219
219
  below?: ReactNode;
220
+ /**
221
+ * Right-click context-menu actions for this header cell. Plugins append
222
+ * their actions in `transformHeaderCell`; BaseTable concatenates the arrays
223
+ * across plugins (never overridden) and renders one menu per header cell.
224
+ */
225
+ contextMenuActions?: TableContextActions;
226
+ /**
227
+ * Index of this column within the final, ordered list of rendered columns
228
+ * (after column injection/reordering by other plugins). Populated by
229
+ * BaseTable. Optional for backward compatibility with hand-constructed
230
+ * renders in tests.
231
+ */
232
+ columnIndex?: number;
233
+ /**
234
+ * The full, final ordered list of columns being rendered (after column
235
+ * injection/reordering by other plugins). Populated by BaseTable so plugins
236
+ * can reason about column position — e.g. cumulative sticky offsets. Optional
237
+ * for backward compatibility.
238
+ */
239
+ columns?: ReadonlyArray<TableColumn<Record<string, unknown>>>;
220
240
  }
221
241
  /** Props passed through the plugin pipeline for each body `<tr>` */
222
242
  export interface BodyRowRenderProps {
@@ -230,7 +250,92 @@ export interface BodyRowRenderProps {
230
250
  export interface BodyCellRenderProps {
231
251
  htmlProps: TdHTMLAttributes<HTMLTableCellElement>;
232
252
  styles: StyleXStyles[];
253
+ /**
254
+ * Right-click context-menu actions for this body cell. Plugins append their
255
+ * actions in `transformBodyCell`; BaseTable concatenates the arrays across
256
+ * plugins and across the row's cells (never overridden) and renders one menu
257
+ * per row.
258
+ */
259
+ contextMenuActions?: TableContextActions;
260
+ /**
261
+ * Index of this cell's column within the final ordered column list.
262
+ * Mirrors the `columnIndex` passed to `transformHeaderCell`. Populated by
263
+ * BaseTable. Optional for backward compatibility with hand-constructed
264
+ * renders in tests.
265
+ */
266
+ columnIndex?: number;
267
+ /**
268
+ * The full, final ordered list of columns being rendered. Populated by
269
+ * BaseTable so plugins can reason about column position — e.g. cumulative
270
+ * sticky offsets. Optional for backward compatibility.
271
+ */
272
+ columns?: ReadonlyArray<TableColumn<Record<string, unknown>>>;
273
+ }
274
+ /**
275
+ * Props passed through the plugin pipeline for the scroll-wrapper region — the
276
+ * `<div>` wrapping the `<table>` element (the horizontal scroll container, see
277
+ * the `scrollWrapper` prop on `BaseTableProps`). Lets plugins attach a `ref` to
278
+ * the scrollable element (e.g. for scroll-aware sticky-column shadows or
279
+ * virtualization) and inject chrome before/after the table.
280
+ *
281
+ * Named after `scrollWrapper` (not "layout") to avoid ambiguity: it transforms
282
+ * the wrapper element, not the internal header/body/footer layout of `<table>`.
283
+ *
284
+ * Runs after `transformTable`/cell transforms but inside `transformTableContext`,
285
+ * so plugin chrome added here stays within any context providers but wraps the
286
+ * scroll area.
287
+ */
288
+ export interface ScrollWrapperRenderProps {
289
+ /**
290
+ * HTML attributes applied to the scroll container `<div>`, including an
291
+ * optional `ref`. Plugins compose refs by reading the existing `ref` and
292
+ * merging their own (see `useTableStickyColumns`).
293
+ */
294
+ htmlProps: HTMLAttributes<HTMLDivElement> & {
295
+ ref?: Ref<HTMLDivElement>;
296
+ };
297
+ styles: StyleXStyles[];
298
+ /** Content rendered before the `<table>`, inside the scroll container. */
299
+ beforeTable?: ReactNode;
300
+ /** Content rendered after the `<table>`, inside the scroll container. */
301
+ afterTable?: ReactNode;
302
+ }
303
+ /**
304
+ * A single right-click context-menu action contributed by a plugin.
305
+ *
306
+ * Plugins contribute actions via the `contextMenuActions` field on
307
+ * `HeaderCellRenderProps` / `BodyCellRenderProps` (set in
308
+ * `transformHeaderCell` / `transformBodyCell`); the table aggregates actions
309
+ * from every enabled plugin into a single menu per header cell / row.
310
+ */
311
+ export interface TableContextAction {
312
+ /** Stable identifier, unique within a single menu. */
313
+ id: string;
314
+ /** Visible label for the menu item. */
315
+ label: ReactNode;
316
+ /** Optional leading icon. */
317
+ icon?: ReactNode;
318
+ /** Invoked when the item is selected. */
319
+ onSelect: () => void;
320
+ /** When true, the item is rendered but not selectable. */
321
+ disabled?: boolean;
322
+ /**
323
+ * Group key used to cluster related actions and insert a divider between
324
+ * groups (e.g. 'sort', 'selection'). Actions without a group form a trailing
325
+ * group. Group order follows first-seen order across the aggregated list.
326
+ */
327
+ group?: string;
328
+ /** When true, the item renders as checked (e.g. the active sort direction). */
329
+ checked?: boolean;
233
330
  }
331
+ /**
332
+ * Context-menu actions for a cell — either a static array, or a getter that
333
+ * returns the actions lazily. Prefer the getter for actions derived from state
334
+ * (e.g. the active sort direction): it's only invoked when the menu is opened,
335
+ * so the plugin doesn't build an action array (with closures) for every cell on
336
+ * every render.
337
+ */
338
+ export type TableContextActions = TableContextAction[] | (() => TableContextAction[]);
234
339
  /**
235
340
  * Table plugin — transforms render props at each structural level.
236
341
  * Plugins compose by sequential application (first plugin's output feeds next).
@@ -243,7 +348,12 @@ export interface BodyCellRenderProps {
243
348
  * 4. `transformHeaderCell` — transform each `<th>` props
244
349
  * 5. `transformBodyRow` — transform each body `<tr>` props
245
350
  * 6. `transformBodyCell` — transform each body `<td>` props
246
- * 7. `transformTableContext` — wrap the table output in context providers
351
+ * 7. `transformScrollWrapper` — transform the scroll-container wrapper around the table
352
+ * 8. `transformTableContext` — wrap the table output in context providers
353
+ *
354
+ * Plugins may also contribute right-click menu actions by appending to
355
+ * `contextMenuActions` in `transformHeaderCell` / `transformBodyCell`
356
+ * (aggregated into one menu per header cell / row).
247
357
  */
248
358
  export interface TablePlugin<T extends Record<string, unknown> = Record<string, unknown>> {
249
359
  /**
@@ -256,12 +366,29 @@ export interface TablePlugin<T extends Record<string, unknown> = Record<string,
256
366
  transformTable?: (props: TableRenderProps) => TableRenderProps;
257
367
  /** Transform the header `<tr>` props */
258
368
  transformHeaderRow?: (props: HeaderRowRenderProps) => HeaderRowRenderProps;
259
- /** Transform each `<th>` props */
260
- transformHeaderCell?: (props: HeaderCellRenderProps, column: TableColumn<T>) => HeaderCellRenderProps;
369
+ /**
370
+ * Transform each `<th>` props.
371
+ *
372
+ * `columnIndex` and the full `columns` list are provided for plugins that
373
+ * need to reason about column position (e.g. cumulative sticky offsets).
374
+ */
375
+ transformHeaderCell?: (props: HeaderCellRenderProps, column: TableColumn<T>, columnIndex: number, columns: ReadonlyArray<TableColumn<T>>) => HeaderCellRenderProps;
261
376
  /** Transform each body `<tr>` props */
262
377
  transformBodyRow?: (props: BodyRowRenderProps, item: T, index: number) => BodyRowRenderProps;
263
- /** Transform each body `<td>` props */
264
- transformBodyCell?: (props: BodyCellRenderProps, column: TableColumn<T>, item: T) => BodyCellRenderProps;
378
+ /**
379
+ * Transform each body `<td>` props.
380
+ *
381
+ * `columnIndex` and the full `columns` list are provided for plugins that
382
+ * need to reason about column position (e.g. cumulative sticky offsets).
383
+ */
384
+ transformBodyCell?: (props: BodyCellRenderProps, column: TableColumn<T>, item: T, columnIndex: number, columns: ReadonlyArray<TableColumn<T>>) => BodyCellRenderProps;
385
+ /**
386
+ * Transform the scroll-wrapper region — the `<div>` wrapping the `<table>`
387
+ * (see the `scrollWrapper` prop). Use to attach a `ref` to the scrollable
388
+ * element (scroll-aware shadows, virtualization) or to inject chrome
389
+ * before/after the table.
390
+ */
391
+ transformScrollWrapper?: (props: ScrollWrapperRenderProps) => ScrollWrapperRenderProps;
265
392
  /** Wrap the table output in context providers */
266
393
  transformTableContext?: (children: ReactNode) => ReactNode;
267
394
  }
@@ -271,16 +398,34 @@ export interface TableRowComponentProps extends HTMLAttributes<HTMLTableRowEleme
271
398
  ref?: Ref<HTMLTableRowElement>;
272
399
  children: ReactNode;
273
400
  xstyle?: StyleXStyles[];
401
+ /**
402
+ * Whether this row is the header row. Header rows skip the striped/hover
403
+ * row styling, which is only meant for body rows.
404
+ */
405
+ isHeaderRow?: boolean;
274
406
  }
275
407
  /** Props for cell components used in the components prop */
276
408
  export interface TableCellComponentProps extends TdHTMLAttributes<HTMLTableCellElement> {
277
409
  children?: ReactNode;
278
410
  xstyle?: StyleXStyles | StyleXStyles[];
411
+ /**
412
+ * Right-click actions to render as a context menu around the cell content.
413
+ * The cell owns the menu wrapper so it can control how it interacts with
414
+ * padding / content sizing. Empty/undefined renders no menu (native passes
415
+ * through).
416
+ */
417
+ contextMenuActions?: TableContextActions;
279
418
  }
280
419
  /** Props for header cell components used in the components prop */
281
420
  export interface TableHeaderCellComponentProps extends ThHTMLAttributes<HTMLTableCellElement> {
282
421
  children?: ReactNode;
283
422
  xstyle?: StyleXStyles | StyleXStyles[];
423
+ /**
424
+ * Right-click actions to render as a context menu around the header content.
425
+ * The cell owns the menu wrapper so it can control how it interacts with
426
+ * padding / content sizing. Empty/undefined renders no menu.
427
+ */
428
+ contextMenuActions?: TableContextActions;
284
429
  }
285
430
  /**
286
431
  * Props for the unstyled BaseTable component.
@@ -311,9 +456,20 @@ export interface BaseTableProps<T extends Record<string, unknown>> extends BaseP
311
456
  * plugin `transformTableContext` layer. Used by `Table` to add a
312
457
  * horizontal scroll container so plugin chrome (pagination, toolbars)
313
458
  * stays outside the scrollable area.
459
+ *
460
+ * Receives `htmlProps` (including an optional `ref`) and `styles` produced
461
+ * by the plugin `transformScrollWrapper` pipeline, plus `beforeTable`/`afterTable`
462
+ * chrome. The wrapper must spread `htmlProps` (and apply `styles`) onto its
463
+ * scroll-container element so plugins can attach refs / scroll listeners.
314
464
  */
315
465
  scrollWrapper?: ComponentType<{
316
466
  children: ReactNode;
467
+ htmlProps?: HTMLAttributes<HTMLDivElement> & {
468
+ ref?: Ref<HTMLDivElement>;
469
+ };
470
+ styles?: StyleXStyles[];
471
+ beforeTable?: ReactNode;
472
+ afterTable?: ReactNode;
317
473
  }>;
318
474
  /**
319
475
  * How default-rendered body cell text behaves when it exceeds column width.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Table/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Table/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBaseTablePlugins.d.ts","sourceRoot":"","sources":["../../src/Table/useBaseTablePlugins.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AA4GzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACtD,WAAW,CAAC,CAAC,CAAC,EAAE,CA2ClB"}
1
+ {"version":3,"file":"useBaseTablePlugins.d.ts","sourceRoot":"","sources":["../../src/Table/useBaseTablePlugins.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AA6GzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACtD,WAAW,CAAC,CAAC,CAAC,EAAE,CA2ClB"}
@@ -67,7 +67,7 @@ function sortPluginEntries(entries) {
67
67
  // Plugin Validation (dev mode only)
68
68
  // ======================================================================
69
69
  /** Known transform method names on the TablePlugin interface. */
70
- const VALID_TRANSFORM_KEYS = new Set(['transformColumns', 'transformTable', 'transformHeaderRow', 'transformHeaderCell', 'transformBodyRow', 'transformBodyCell', 'transformTableContext']);
70
+ const VALID_TRANSFORM_KEYS = new Set(['transformColumns', 'transformTable', 'transformHeaderRow', 'transformHeaderCell', 'transformBodyRow', 'transformBodyCell', 'transformScrollWrapper', 'transformTableContext']);
71
71
 
72
72
  /**
73
73
  * Validate a plugin object in development mode.
@@ -21,8 +21,8 @@ export declare const colorStyles: Readonly<{
21
21
  readonly placeholder: Readonly<{
22
22
  readonly color: stylex.StyleXClassNameFor<"color", "light-dark(#4E606F, #AAAFB5)">;
23
23
  }>;
24
- readonly active: Readonly<{
25
- readonly color: stylex.StyleXClassNameFor<"color", "light-dark(#0064E0, #2694FE)">;
24
+ readonly accent: Readonly<{
25
+ readonly color: stylex.StyleXClassNameFor<"color", "light-dark(#0064E0, #3E9EFB)">;
26
26
  }>;
27
27
  readonly inherit: Readonly<{
28
28
  readonly color: stylex.StyleXClassNameFor<"color", "inherit">;
@@ -35,8 +35,8 @@ export const colorStyles = {
35
35
  kMwMTN: "xv1l7n4",
36
36
  $$css: true
37
37
  },
38
- active: {
39
- kMwMTN: "xqwr325",
38
+ accent: {
39
+ kMwMTN: "xjse4m1",
40
40
  $$css: true
41
41
  },
42
42
  inherit: {
@@ -8,7 +8,7 @@ export interface TimestampProps extends BaseProps<HTMLTimeElement> {
8
8
  value: string | number;
9
9
  /**
10
10
  * Display format.
11
- * - `'relative'`: "2 hours ago", "yesterday", "just now"
11
+ * - `'relative'`: "2 hours ago", "yesterday", "now"
12
12
  * - `'auto'`: Relative for recent times, `date_time` for older
13
13
  * - `'date'`: "Mar 21, 2025"
14
14
  * - `'date_time'`: "Mar 21, 2025, 2:51 PM"
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../src/Timestamp/Timestamp.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAW5C,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,aAAa,GACb,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,eAAe,CAAC;IAChE,kDAAkD;IAClD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC,uFAAuF;IACvF,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAqMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,MAAe,EACf,aAAsC,EACtC,UAAiB,EACjB,eAAuB,EACvB,MAAc,EACd,IAAmB,EACnB,IAAI,EACJ,KAAmB,EACnB,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,aAAa,EAAE,MAAM,GACtB,EAAE,cAAc,+BAqFhB;yBArGe,SAAS"}
1
+ {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../src/Timestamp/Timestamp.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAE9E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAW5C,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,aAAa,GACb,kBAAkB,GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,eAAe,CAAC;IAChE,kDAAkD;IAClD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjC,uFAAuF;IACvF,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA8ND;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,MAAe,EACf,aAAsC,EACtC,UAAiB,EACjB,eAAuB,EACvB,MAAc,EACd,IAAmB,EACnB,IAAI,EACJ,KAAmB,EACnB,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,aAAa,EAAE,MAAM,GACtB,EAAE,cAAc,+BAqFhB;yBArGe,SAAS"}
@@ -45,6 +45,18 @@ const YEAR = 365 * DAY;
45
45
 
46
46
  /** Default auto threshold: 7 days in seconds */
47
47
  const DEFAULT_AUTO_THRESHOLD = 7 * DAY;
48
+
49
+ /**
50
+ * Tolerance (in seconds) for treating a *future* timestamp as the present.
51
+ * A value only a handful of seconds ahead of our reference clock is almost
52
+ * always clock skew — the displayed `now` lagging the real clock, or the value
53
+ * being produced on a slightly faster clock — not a genuine future event, so
54
+ * it reads as "now" rather than a confusing "in a few seconds". The future
55
+ * side gets a wider window than the past (which only needs to absorb the
56
+ * sub-second render-time lag) because future drift is far more likely to be
57
+ * skew than real.
58
+ */
59
+ const FUTURE_SKEW_TOLERANCE = 30;
48
60
  function parseValue(value) {
49
61
  if (typeof value === 'number') {
50
62
  // Heuristic: if the number is less than 1e12, treat as seconds; otherwise ms.
@@ -55,9 +67,25 @@ function parseValue(value) {
55
67
  }
56
68
  function getRelativeTimeString(date, now) {
57
69
  const diffSeconds = Math.round((now.getTime() - date.getTime()) / 1000);
70
+
71
+ // Treat values at (or a hair before/after) the present as "now". The
72
+ // internal `now` reference is captured at render time, so it can lag the
73
+ // real clock; a value equal to "right now" can land a fraction of a second
74
+ // in the future and round to a small negative delta. Without this clamp,
75
+ // such values fall into the future branch and render "in a few seconds".
76
+ if (Math.abs(diffSeconds) < 10) {
77
+ return 'now';
78
+ }
58
79
  if (diffSeconds < 0) {
59
80
  // Future dates
60
81
  const absDiff = Math.abs(diffSeconds);
82
+ // A value only a few seconds ahead of our clock is almost always skew, not
83
+ // a genuine future event — render it as the present rather than a
84
+ // confusing "in a few seconds". Wider than the past window above on
85
+ // purpose (see FUTURE_SKEW_TOLERANCE).
86
+ if (absDiff <= FUTURE_SKEW_TOLERANCE) {
87
+ return 'now';
88
+ }
61
89
  if (absDiff < MINUTE) {
62
90
  return 'in a few seconds';
63
91
  }
@@ -80,9 +108,6 @@ function getRelativeTimeString(date, now) {
80
108
  const years = Math.round(absDiff / YEAR);
81
109
  return `in ${years} ${years === 1 ? 'year' : 'years'}`;
82
110
  }
83
- if (diffSeconds < 10) {
84
- return 'just now';
85
- }
86
111
  if (diffSeconds < MINUTE) {
87
112
  return `${diffSeconds} seconds ago`;
88
113
  }
@@ -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
  };