@astryxdesign/core 0.2.0-canary.e0de50f → 0.2.0-canary.e37aae7

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 (179) hide show
  1. package/dist/AppShell/AppShell.d.ts.map +1 -1
  2. package/dist/AppShell/AppShell.js +24 -4
  3. package/dist/Calendar/index.d.ts +1 -1
  4. package/dist/Calendar/index.d.ts.map +1 -1
  5. package/dist/Calendar/index.js +1 -1
  6. package/dist/Calendar/utils.d.ts +0 -4
  7. package/dist/Calendar/utils.d.ts.map +1 -1
  8. package/dist/Calendar/utils.js +1 -8
  9. package/dist/Dialog/Dialog.d.ts +4 -18
  10. package/dist/Dialog/Dialog.d.ts.map +1 -1
  11. package/dist/Dialog/Dialog.js +7 -19
  12. package/dist/Grid/Grid.d.ts +1 -9
  13. package/dist/Grid/Grid.d.ts.map +1 -1
  14. package/dist/Grid/Grid.js +0 -9
  15. package/dist/Icon/defaultIcons.d.ts.map +1 -1
  16. package/dist/Icon/defaultIcons.js +14 -0
  17. package/dist/Icon/globalIconRegistry.d.ts +1 -1
  18. package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
  19. package/dist/Lightbox/Lightbox.d.ts +5 -3
  20. package/dist/Lightbox/Lightbox.d.ts.map +1 -1
  21. package/dist/Lightbox/Lightbox.js +101 -23
  22. package/dist/MetadataList/MetadataList.d.ts.map +1 -1
  23. package/dist/MetadataList/MetadataList.js +33 -9
  24. package/dist/NavMenu/index.d.ts +0 -2
  25. package/dist/NavMenu/index.d.ts.map +1 -1
  26. package/dist/NavMenu/index.js +1 -3
  27. package/dist/NumberInput/NumberInput.d.ts.map +1 -1
  28. package/dist/NumberInput/NumberInput.js +15 -4
  29. package/dist/Pagination/Pagination.d.ts +25 -1
  30. package/dist/Pagination/Pagination.d.ts.map +1 -1
  31. package/dist/Pagination/Pagination.js +155 -12
  32. package/dist/Pagination/index.d.ts +1 -0
  33. package/dist/Pagination/index.d.ts.map +1 -1
  34. package/dist/ProgressBar/ProgressBar.d.ts +48 -2
  35. package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
  36. package/dist/ProgressBar/ProgressBar.js +79 -8
  37. package/dist/ProgressBar/ProgressBarMarkTooltip.d.ts +27 -0
  38. package/dist/ProgressBar/ProgressBarMarkTooltip.d.ts.map +1 -0
  39. package/dist/ProgressBar/ProgressBarMarkTooltip.js +35 -0
  40. package/dist/ProgressBar/index.d.ts +1 -1
  41. package/dist/ProgressBar/index.d.ts.map +1 -1
  42. package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
  43. package/dist/Resizable/ResizeHandle.js +12 -1
  44. package/dist/Switch/Switch.d.ts +1 -5
  45. package/dist/Switch/Switch.d.ts.map +1 -1
  46. package/dist/Switch/Switch.js +2 -5
  47. package/dist/TabList/TabMenu.d.ts.map +1 -1
  48. package/dist/TabList/TabMenu.js +10 -2
  49. package/dist/Table/BaseTable.d.ts.map +1 -1
  50. package/dist/Table/BaseTable.js +3 -6
  51. package/dist/Table/TableCell.js +3 -1
  52. package/dist/Table/TableHeaderCell.js +3 -1
  53. package/dist/Table/index.d.ts +1 -1
  54. package/dist/Table/index.d.ts.map +1 -1
  55. package/dist/Table/index.js +1 -1
  56. package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +1 -1
  57. package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +1 -1
  58. package/dist/Table/types.d.ts +0 -9
  59. package/dist/Table/types.d.ts.map +1 -1
  60. package/dist/Timestamp/Timestamp.d.ts +23 -12
  61. package/dist/Timestamp/Timestamp.d.ts.map +1 -1
  62. package/dist/Timestamp/Timestamp.js +51 -59
  63. package/dist/Timestamp/TimestampHoverCard.d.ts +45 -0
  64. package/dist/Timestamp/TimestampHoverCard.d.ts.map +1 -0
  65. package/dist/Timestamp/TimestampHoverCard.js +228 -0
  66. package/dist/Timestamp/formatInstant.d.ts.map +1 -1
  67. package/dist/Timestamp/formatInstant.js +5 -0
  68. package/dist/Timestamp/tooltipEntries.d.ts +14 -0
  69. package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
  70. package/dist/Timestamp/tooltipEntries.js +1 -0
  71. package/dist/TopNav/TopNavHeading.d.ts +1 -7
  72. package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
  73. package/dist/TopNav/TopNavHeading.js +1 -4
  74. package/dist/astryx.css +8 -8
  75. package/dist/astryx.umd.js +46 -50
  76. package/dist/astryx.umd.js.map +4 -4
  77. package/dist/index.d.ts +0 -1
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +1 -6
  80. package/dist/theme/contrast.d.ts +45 -0
  81. package/dist/theme/contrast.d.ts.map +1 -0
  82. package/dist/theme/contrast.js +88 -0
  83. package/dist/theme/defineTheme.d.ts +3 -3
  84. package/dist/theme/defineTheme.d.ts.map +1 -1
  85. package/dist/theme/defineTheme.js +2 -3
  86. package/dist/theme/expandColorScale.d.ts +10 -0
  87. package/dist/theme/expandColorScale.d.ts.map +1 -1
  88. package/dist/theme/expandColorScale.js +53 -2
  89. package/dist/theme/generateThemeRules.d.ts +0 -6
  90. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  91. package/dist/theme/generateThemeRules.js +0 -15
  92. package/dist/theme/index.d.ts +3 -3
  93. package/dist/theme/index.d.ts.map +1 -1
  94. package/dist/theme/index.js +2 -2
  95. package/dist/theme/tokens.stylex.d.ts +0 -17
  96. package/dist/theme/tokens.stylex.d.ts.map +1 -1
  97. package/dist/theme/tokens.stylex.js +0 -22
  98. package/locales/en.json +84 -0
  99. package/locales/pseudo.json +63 -0
  100. package/package.json +2 -2
  101. package/src/AppShell/AppShell.test.tsx +55 -0
  102. package/src/AppShell/AppShell.tsx +25 -2
  103. package/src/Calendar/Calendar.test.tsx +7 -3
  104. package/src/Calendar/index.ts +1 -6
  105. package/src/Calendar/utils.ts +0 -11
  106. package/src/CommandPalette/CommandPaletteGroup.test.tsx +6 -2
  107. package/src/DateInput/DateInput.test.tsx +7 -3
  108. package/src/DateRangeInput/DateRangeInput.test.tsx +7 -2
  109. package/src/DateTimeInput/DateTimeInput.test.tsx +6 -2
  110. package/src/Dialog/Dialog.doc.mjs +1 -3
  111. package/src/Dialog/Dialog.test.tsx +4 -44
  112. package/src/Dialog/Dialog.tsx +9 -34
  113. package/src/Grid/Grid.doc.mjs +0 -5
  114. package/src/Grid/Grid.tsx +0 -24
  115. package/src/Icon/Icon.doc.mjs +3 -3
  116. package/src/Icon/defaultIcons.tsx +14 -0
  117. package/src/Icon/globalIconRegistry.tsx +2 -0
  118. package/src/Lightbox/Lightbox.doc.mjs +2 -2
  119. package/src/Lightbox/Lightbox.test.tsx +178 -0
  120. package/src/Lightbox/Lightbox.tsx +93 -18
  121. package/src/MetadataList/MetadataList.test.tsx +58 -0
  122. package/src/MetadataList/MetadataList.tsx +38 -17
  123. package/src/MultiSelector/MultiSelector.test.tsx +7 -3
  124. package/src/NavMenu/NavHeadingMenu.test.tsx +0 -16
  125. package/src/NavMenu/index.ts +0 -4
  126. package/src/NumberInput/NumberInput.doc.mjs +0 -3
  127. package/src/NumberInput/NumberInput.test.tsx +38 -3
  128. package/src/NumberInput/NumberInput.tsx +23 -0
  129. package/src/Pagination/Pagination.doc.mjs +52 -5
  130. package/src/Pagination/Pagination.test.tsx +567 -0
  131. package/src/Pagination/Pagination.tsx +209 -9
  132. package/src/Pagination/index.ts +1 -0
  133. package/src/ProgressBar/ProgressBar.doc.mjs +15 -0
  134. package/src/ProgressBar/ProgressBar.test.tsx +340 -2
  135. package/src/ProgressBar/ProgressBar.tsx +152 -4
  136. package/src/ProgressBar/ProgressBarMarkTooltip.tsx +43 -0
  137. package/src/ProgressBar/index.ts +5 -1
  138. package/src/Resizable/ResizeHandle.test.tsx +49 -1
  139. package/src/Resizable/ResizeHandle.tsx +17 -1
  140. package/src/Selector/Selector.test.tsx +7 -3
  141. package/src/Switch/Switch.doc.mjs +2 -2
  142. package/src/Switch/Switch.test.tsx +0 -25
  143. package/src/Switch/Switch.tsx +3 -14
  144. package/src/TabList/TabList.test.tsx +21 -18
  145. package/src/TabList/TabMenu.tsx +10 -2
  146. package/src/Table/BaseTable.tsx +3 -4
  147. package/src/Table/Table.doc.mjs +2 -2
  148. package/src/Table/Table.test.tsx +27 -49
  149. package/src/Table/TableCell.tsx +1 -1
  150. package/src/Table/TableHeaderCell.tsx +1 -1
  151. package/src/Table/index.ts +1 -1
  152. package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +1 -1
  153. package/src/Table/types.ts +0 -9
  154. package/src/Table/useTableRowStatus.doc.mjs +1 -1
  155. package/src/Timestamp/Timestamp.doc.mjs +26 -21
  156. package/src/Timestamp/Timestamp.test.tsx +307 -107
  157. package/src/Timestamp/Timestamp.tsx +75 -94
  158. package/src/Timestamp/TimestampHoverCard.tsx +283 -0
  159. package/src/Timestamp/formatInstant.ts +6 -0
  160. package/src/Timestamp/tooltipEntries.test.ts +9 -0
  161. package/src/Timestamp/tooltipEntries.ts +15 -0
  162. package/src/TopNav/TopNav.test.tsx +2 -2
  163. package/src/TopNav/TopNavHeading.doc.mjs +0 -11
  164. package/src/TopNav/TopNavHeading.tsx +1 -10
  165. package/src/TreeList/TreeList.test.tsx +10 -6
  166. package/src/index.ts +0 -21
  167. package/src/theme/contrast.test.ts +94 -0
  168. package/src/theme/contrast.ts +99 -0
  169. package/src/theme/defineTheme.test.ts +29 -30
  170. package/src/theme/defineTheme.ts +0 -4
  171. package/src/theme/expandColorScale.test.ts +243 -1
  172. package/src/theme/expandColorScale.ts +73 -2
  173. package/src/theme/generateThemeRules.ts +0 -15
  174. package/src/theme/index.ts +0 -4
  175. package/src/theme/tokens.stylex.ts +0 -19
  176. package/dist/NavMenu/NavMenuItem.d.ts +0 -13
  177. package/dist/NavMenu/NavMenuItem.d.ts.map +0 -1
  178. package/dist/NavMenu/NavMenuItem.js +0 -16
  179. package/src/NavMenu/NavMenuItem.tsx +0 -19
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAM5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA8BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAkKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBAsXf;yBArYe,QAAQ"}
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAM5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA8BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AA2KD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBAoYf;yBAnZe,QAAQ"}
@@ -129,6 +129,10 @@ const styles = {
129
129
  kAzted: "x1ov3xa9",
130
130
  $$css: true
131
131
  },
132
+ mainFocusTarget: {
133
+ kI3sdo: "x1uvtmcs",
134
+ $$css: true
135
+ },
132
136
  contentBgSurface: {
133
137
  kWkggS: "x10xzikg",
134
138
  $$css: true
@@ -242,6 +246,13 @@ export function AppShell({
242
246
  }
243
247
  mobileNavConfig?.onOpenChange?.(open);
244
248
  }, [mobileNavIsControlled, mobileNavConfig]);
249
+
250
+ // Move focus to the main content container when the skip link is activated.
251
+ // Hash navigation alone doesn't reliably move focus in every browser, so
252
+ // focus the target explicitly (it's focusable via tabIndex={-1}).
253
+ const handleSkipLinkClick = useCallback(() => {
254
+ document.getElementById(MAIN_CONTENT_ID)?.focus();
255
+ }, []);
245
256
  const isFill = height === 'fill';
246
257
  const isAuto = height === 'auto';
247
258
 
@@ -348,7 +359,11 @@ export function AppShell({
348
359
  }), hasTopNav && topNavContent]
349
360
  }) : undefined;
350
361
  const headerContent = headerInner != null ? /*#__PURE__*/_jsx("div", {
351
- ref: headerRef,
362
+ ref: headerRef
363
+ // Top-level banner landmark for the header region (topNav + banner).
364
+ // Safe here: the wrapper is never nested inside main/nav/other landmarks.
365
+ ,
366
+ role: "banner",
352
367
  ...mergeProps(themeProps('app-shell-header', {
353
368
  variant
354
369
  }), stylex.props(navAreaStyle, isAuto && styles.headerSticky)),
@@ -387,9 +402,13 @@ export function AppShell({
387
402
  const mainInner = /*#__PURE__*/_jsx(LayoutContent, {
388
403
  padding: contentPadding ?? 0,
389
404
  role: "main",
390
- id: MAIN_CONTENT_ID,
405
+ id: MAIN_CONTENT_ID
406
+ // Focusable skip-link target (WCAG 2.4.1) — without tabIndex, several
407
+ // browsers won't move focus to the div when the skip link is activated.
408
+ ,
409
+ tabIndex: -1,
391
410
  isScrollable: isFill,
392
- xstyle: contentAreaStyle,
411
+ xstyle: [contentAreaStyle, styles.mainFocusTarget],
393
412
  children: children
394
413
  });
395
414
  const mainContent = shouldElevateWithCorner ? /*#__PURE__*/_jsxs("div", {
@@ -448,11 +467,12 @@ export function AppShell({
448
467
  }), stylex.props(styles.root, variant === 'wash' ? styles.variantWash : variant === 'surface' ? styles.variantSurface : variant === 'section' ? styles.variantSection : styles.variantElevated, isFill ? styles.rootFill : styles.rootAuto, xstyle), className, style),
449
468
  children: [/*#__PURE__*/_jsx("a", {
450
469
  href: `#${MAIN_CONTENT_ID}`,
470
+ onClick: handleSkipLinkClick,
451
471
  ...{
452
472
  className: "x10l6tqk x1xrnuwo x1i1rx1s x1jqxupm xjm9jq1 x15cytp8 xt970qd xh2mrf5 xnjsko4 x1cf3d6k xkdpibf x1y5lnwp xb3r6kr xomzh7y x1hyvwdk x1rsz1da xuxw1ft x1hbpcn8 xc342km x13vifvy x1rw3289 x1o0tod xodanix x10xzikg xjse4m1 x1q2oy4v x1hl2dhg x2mo6ok xjm74w1"
453
473
  },
454
474
  "data-testid": "skip-to-content",
455
- children: "Skip to content"
475
+ children: t('@astryx.appShell.skipToContent')
456
476
  }), /*#__PURE__*/_jsx(Layout, {
457
477
  height: height,
458
478
  padding: 0,
@@ -10,5 +10,5 @@ export { Calendar } from './Calendar';
10
10
  export type { CalendarProps, CalendarHandle, ISODateString, DayOfWeek, DayOfWeekName, DateRange, } from './Calendar';
11
11
  export { useCalendarDays, useCalendarConstraints, useCalendarNavigation, } from './hooks';
12
12
  export type { CalendarDay, UseCalendarDaysOptions, UseCalendarDaysReturn, UseCalendarConstraintsOptions, UseCalendarConstraintsReturn, UseCalendarNavigationOptions, UseCalendarNavigationReturn, } from './hooks';
13
- export { isSameDay, isDateInRange, getWeekNumber, formatAccessibleDate, } from './utils';
13
+ export { isSameDay, isDateInRange, getWeekNumber } from './utils';
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Calendar/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,SAAS,EACT,aAAa,EACb,aAAa,EACb,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Calendar/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAC,SAAS,EAAE,aAAa,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC"}
@@ -14,6 +14,6 @@ export { Calendar } from "./Calendar.js";
14
14
  // Re-export hooks for advanced usage
15
15
  export { useCalendarDays, useCalendarConstraints, useCalendarNavigation } from "./hooks/index.js";
16
16
  // Re-export calendar-specific utilities for advanced usage
17
- export { isSameDay, isDateInRange, getWeekNumber, formatAccessibleDate } from "./utils.js";
17
+ export { isSameDay, isDateInRange, getWeekNumber } from "./utils.js";
18
18
 
19
19
  // Re-export theme styles for customization
@@ -4,9 +4,5 @@
4
4
  * @output Re-exports shared date utility functions for calendar components
5
5
  * @position Shared utilities; used by Calendar, CalendarMonthGrid, CalendarDayCell
6
6
  */
7
- import { plainDateFormat, DATE_FORMAT_WITH_WEEKDAY } from '../utils/plainDate';
8
7
  export { type PlainDate, plainDateFromISO as parseISO, plainDateToISO as dateToISO, plainDateIsEqual as isSameDay, plainDateIsInRange as isDateInRange, plainDateGetWeekNumber as getWeekNumber, } from '../utils/plainDate';
9
- export { plainDateFormat, DATE_FORMAT_WITH_WEEKDAY };
10
- /** @deprecated Use `plainDateFormat(pd, DATE_FORMAT_WITH_WEEKDAY)` instead. */
11
- export declare function formatAccessibleDate(...args: Parameters<typeof plainDateFormat>): string;
12
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/Calendar/utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAC,eAAe,EAAE,wBAAwB,EAAC,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EACL,KAAK,SAAS,EACd,gBAAgB,IAAI,QAAQ,EAC5B,cAAc,IAAI,SAAS,EAC3B,gBAAgB,IAAI,SAAS,EAC7B,kBAAkB,IAAI,aAAa,EACnC,sBAAsB,IAAI,aAAa,GACxC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,eAAe,EAAE,wBAAwB,EAAC,CAAC;AAEnD,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAClC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,GAC1C,MAAM,CAER"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/Calendar/utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,gBAAgB,IAAI,QAAQ,EAC5B,cAAc,IAAI,SAAS,EAC3B,gBAAgB,IAAI,SAAS,EAC7B,kBAAkB,IAAI,aAAa,EACnC,sBAAsB,IAAI,aAAa,GACxC,MAAM,oBAAoB,CAAC"}
@@ -7,11 +7,4 @@
7
7
  * @position Shared utilities; used by Calendar, CalendarMonthGrid, CalendarDayCell
8
8
  */
9
9
 
10
- import { plainDateFormat, DATE_FORMAT_WITH_WEEKDAY } from "../utils/plainDate.js";
11
- export { plainDateFromISO as parseISO, plainDateToISO as dateToISO, plainDateIsEqual as isSameDay, plainDateIsInRange as isDateInRange, plainDateGetWeekNumber as getWeekNumber } from "../utils/plainDate.js";
12
- export { plainDateFormat, DATE_FORMAT_WITH_WEEKDAY };
13
-
14
- /** @deprecated Use `plainDateFormat(pd, DATE_FORMAT_WITH_WEEKDAY)` instead. */
15
- export function formatAccessibleDate(...args) {
16
- return plainDateFormat(args[0], DATE_FORMAT_WITH_WEEKDAY);
17
- }
10
+ export { plainDateFromISO as parseISO, plainDateToISO as dateToISO, plainDateIsEqual as isSameDay, plainDateIsInRange as isDateInRange, plainDateGetWeekNumber as getWeekNumber } from "../utils/plainDate.js";
@@ -39,30 +39,18 @@ interface DialogBlockPosition {
39
39
  * Static position for a dialog. The inline axis is logical XOR physical — the
40
40
  * type forbids mixing the two, so a single dialog can't be positioned both ways:
41
41
  * - Logical `start`/`end` map to `inset-inline-*` and mirror under RTL (preferred).
42
- * - Physical `left`/`right` are deprecated, do not mirror, and are removed in a
43
- * future major.
44
42
  * Block-axis `top`/`bottom` may be combined with either.
45
43
  */
46
- export type DialogPosition = (DialogBlockPosition & {
44
+ export interface DialogPosition extends DialogBlockPosition {
47
45
  /** Logical inline-start offset (`inset-inline-start`); mirrors under RTL. */
48
46
  start?: number | string;
49
47
  /** Logical inline-end offset (`inset-inline-end`); mirrors under RTL. */
50
48
  end?: number | string;
51
- left?: never;
52
- right?: never;
53
- }) | (DialogBlockPosition & {
54
- /** @deprecated Use `start`. Physical (never mirrors); removed in a future major. */
55
- left?: number | string;
56
- /** @deprecated Use `end`. Physical (never mirrors); removed in a future major. */
57
- right?: number | string;
58
- start?: never;
59
- end?: never;
60
- });
49
+ }
61
50
  /**
62
51
  * Map a {@link DialogPosition} to resolved CSS offsets. Logical `start`/`end`
63
- * become `inset-inline-*` (mirror under RTL); physical `left`/`right` stay
64
- * physical. The union type guarantees at most one inline pair is set, so no
65
- * precedence is needed — each unset offset falls back to `auto`.
52
+ * become `inset-inline-*` (mirror under RTL); each unset offset falls back to
53
+ * `auto`.
66
54
  *
67
55
  * Not re-exported from the package; internal to Dialog. Directly unit-tested
68
56
  * so the mapping is verified without StyleX class compilation.
@@ -74,8 +62,6 @@ export declare function resolveDialogPositionOffsets(position: DialogPosition):
74
62
  bottom: string;
75
63
  insetInlineStart: string;
76
64
  insetInlineEnd: string;
77
- left: string;
78
- right: string;
79
65
  };
80
66
  export interface DialogProps extends BaseProps<HTMLDialogElement> {
81
67
  /** Ref forwarded to the root element */
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAoB5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAqB9C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,4EAA4E;AAC5E,UAAU,mBAAmB;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB,CAAC,mBAAmB,GAAG;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC,GACF,CAAC,mBAAmB,GAAG;IACrB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,CAAC;CACb,CAAC,CAAC;AAqIP;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,cAAc;;;;;;;EAapE;AAED,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE3C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,QAAgB,EAChB,YAAY,EACZ,KAAW,EACX,SAAkB,EAClB,QAAQ,EACR,OAAoB,EACpB,OAAgB,EAChB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,sCA6Sb;yBA7Te,MAAM"}
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAoB5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAqB9C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,4EAA4E;AAC5E,UAAU,mBAAmB;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AA+HD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,cAAc;;;;;EAUpE;AAED,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE3C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,QAAgB,EAChB,YAAY,EACZ,KAAW,EACX,SAAkB,EAClB,QAAQ,EACR,OAAoB,EACpB,OAAgB,EAChB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,sCA2Sb;yBA3Te,MAAM"}
@@ -65,8 +65,6 @@ function getDialogDirection(triggerEl, distance = 16) {
65
65
  * Static position for a dialog. The inline axis is logical XOR physical — the
66
66
  * type forbids mixing the two, so a single dialog can't be positioned both ways:
67
67
  * - Logical `start`/`end` map to `inset-inline-*` and mirror under RTL (preferred).
68
- * - Physical `left`/`right` are deprecated, do not mirror, and are removed in a
69
- * future major.
70
68
  * Block-axis `top`/`bottom` may be combined with either.
71
69
  */
72
70
 
@@ -159,21 +157,17 @@ const dynamicStyles = {
159
157
  "--x-width": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(typeof width === 'number' ? `${width}px` : width),
160
158
  "--x-maxHeight": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight)
161
159
  }],
162
- position: (top, insetInlineStart, insetInlineEnd, right, bottom, left) => [_temp2, {
160
+ position: (top, insetInlineStart, insetInlineEnd, bottom) => [_temp2, {
163
161
  k87sOh: top != null ? "xjbys53" : top,
164
162
  kLqNvP: insetInlineStart != null ? "x1lxsm33" : insetInlineStart,
165
163
  kt4wiu: insetInlineEnd != null ? "xqxgn94" : insetInlineEnd,
166
- kCIrl2: right != null ? "x7ok3n0" : right,
167
164
  krVfgx: bottom != null ? "x1nqzi6q" : bottom,
168
- kbCHJM: left != null ? "xgq9j65" : left,
169
165
  $$css: true
170
166
  }, {
171
167
  "--x-top": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(top),
172
168
  "--x-insetInlineStart": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(insetInlineStart),
173
169
  "--x-insetInlineEnd": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(insetInlineEnd),
174
- "--x-right": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(right),
175
- "--x-bottom": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(bottom),
176
- "--x-left": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(left)
170
+ "--x-bottom": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(bottom)
177
171
  }]
178
172
  };
179
173
 
@@ -186,9 +180,8 @@ function formatPosition(value) {
186
180
 
187
181
  /**
188
182
  * Map a {@link DialogPosition} to resolved CSS offsets. Logical `start`/`end`
189
- * become `inset-inline-*` (mirror under RTL); physical `left`/`right` stay
190
- * physical. The union type guarantees at most one inline pair is set, so no
191
- * precedence is needed — each unset offset falls back to `auto`.
183
+ * become `inset-inline-*` (mirror under RTL); each unset offset falls back to
184
+ * `auto`.
192
185
  *
193
186
  * Not re-exported from the package; internal to Dialog. Directly unit-tested
194
187
  * so the mapping is verified without StyleX class compilation.
@@ -200,19 +193,14 @@ export function resolveDialogPositionOffsets(position) {
200
193
  top,
201
194
  bottom,
202
195
  start,
203
- end,
204
- left,
205
- right
196
+ end
206
197
  } = position;
207
198
  return {
208
199
  top: top !== undefined ? formatPosition(top) : 'auto',
209
200
  bottom: bottom !== undefined ? formatPosition(bottom) : 'auto',
210
201
  // Logical offsets mirror under RTL (preferred replacements).
211
202
  insetInlineStart: start !== undefined ? formatPosition(start) : 'auto',
212
- insetInlineEnd: end !== undefined ? formatPosition(end) : 'auto',
213
- // Deprecated physical offsets never mirror.
214
- left: left !== undefined ? formatPosition(left) : 'auto',
215
- right: right !== undefined ? formatPosition(right) : 'auto'
203
+ insetInlineEnd: end !== undefined ? formatPosition(end) : 'auto'
216
204
  };
217
205
  }
218
206
  /**
@@ -461,7 +449,7 @@ export function Dialog({
461
449
  variant
462
450
  }), stylex.props(styles.dialog, isOpen && styles.open, styles.backdrop, !isFullscreen && dynamicStyles.sizing(width, maxHeight), hasPosition && (() => {
463
451
  const o = resolveDialogPositionOffsets(position);
464
- return dynamicStyles.position(o.top, o.insetInlineStart, o.insetInlineEnd, o.right, o.bottom, o.left);
452
+ return dynamicStyles.position(o.top, o.insetInlineStart, o.insetInlineEnd, o.bottom);
465
453
  })(), isFullscreen && styles.fullscreen, xstyle), className, style),
466
454
  onClick: handleClick,
467
455
  onCancel: handleCancel,
@@ -47,14 +47,6 @@ export interface GridProps extends BaseProps<HTMLDivElement> {
47
47
  * @see GridColumns
48
48
  */
49
49
  columns?: GridColumns;
50
- /**
51
- * Minimum width of each grid item in pixels.
52
- * Enables responsive auto-fit behavior.
53
- *
54
- * @deprecated Use `columns={{minWidth: 280}}` instead.
55
- * @default 0 (disabled)
56
- */
57
- minChildWidth?: number;
58
50
  /**
59
51
  * Width of the grid container.
60
52
  * Numbers are treated as pixels, strings are used as-is (e.g., '100%').
@@ -137,7 +129,7 @@ export interface GridProps extends BaseProps<HTMLDivElement> {
137
129
  * </Grid>
138
130
  * ```
139
131
  */
140
- export declare function Grid({ columns, minChildWidth, rowHeight, width, height, maxWidth, minHeight, gap, rowGap, columnGap, align, justify, xstyle, className, style, children, ref, ...props }: GridProps): import("react").JSX.Element;
132
+ export declare function Grid({ columns, rowHeight, width, height, maxWidth, minHeight, gap, rowGap, columnGap, align, justify, xstyle, className, style, children, ref, ...props }: GridProps): import("react").JSX.Element;
141
133
  export declare namespace Grid {
142
134
  var displayName: string;
143
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/Grid/Grid.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACzB,CAAC;AAEN,MAAM,WAAW,SAAU,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC1D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA2ND;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,EACnB,OAAO,EACP,aAAiB,EACjB,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,+BA2FX;yBA9Ge,IAAI"}
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/Grid/Grid.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACzB,CAAC;AAEN,MAAM,WAAW,SAAU,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC1D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;;OAGG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA2ND;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,EACnB,OAAO,EACP,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,+BA6EX;yBA/Fe,IAAI"}
package/dist/Grid/Grid.js CHANGED
@@ -305,7 +305,6 @@ function buildCappedTemplate(minWidth, maxCols, repeatMode, gap, columnGap) {
305
305
  */
306
306
  export function Grid({
307
307
  columns,
308
- minChildWidth = 0,
309
308
  rowHeight,
310
309
  width,
311
310
  height,
@@ -334,14 +333,6 @@ export function Grid({
334
333
  } else {
335
334
  gridTemplateColumns = `repeat(${repeatMode}, minmax(${columns.minWidth}px, 1fr))`;
336
335
  }
337
- } else if (minChildWidth > 0) {
338
- // Deprecated path: minChildWidth uses auto-fit for backward compat
339
- const numColumns = typeof columns === 'number' ? columns : 0;
340
- if (numColumns > 0) {
341
- gridTemplateColumns = buildCappedTemplate(minChildWidth, numColumns, 'auto-fit', gap, columnGap);
342
- } else {
343
- gridTemplateColumns = `repeat(auto-fit, minmax(${minChildWidth}px, 1fr))`;
344
- }
345
336
  } else if (typeof columns === 'number' && columns > 0) {
346
337
  // Fixed columns mode
347
338
  gridTemplateColumns = `repeat(${columns}, 1fr)`;
@@ -1 +1 @@
1
- {"version":3,"file":"defaultIcons.d.ts","sourceRoot":"","sources":["../../src/Icon/defaultIcons.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AA8BvD,eAAO,MAAM,YAAY,EAAE,YAgN1B,CAAC"}
1
+ {"version":3,"file":"defaultIcons.d.ts","sourceRoot":"","sources":["../../src/Icon/defaultIcons.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AA8BvD,eAAO,MAAM,YAAY,EAAE,YA8N1B,CAAC"}
@@ -80,6 +80,20 @@ export const defaultIcons = {
80
80
  d: "M9 6l6 6-6 6"
81
81
  })
82
82
  }),
83
+ /** « — double left chevron (first / jump to start) */
84
+ chevronsLeft: /*#__PURE__*/_jsx("svg", {
85
+ ...svgProps,
86
+ children: /*#__PURE__*/_jsx("path", {
87
+ d: "M18 6l-6 6 6 6M11 6l-6 6 6 6"
88
+ })
89
+ }),
90
+ /** » — double right chevron (last / jump to end) */
91
+ chevronsRight: /*#__PURE__*/_jsx("svg", {
92
+ ...svgProps,
93
+ children: /*#__PURE__*/_jsx("path", {
94
+ d: "M6 6l6 6-6 6M13 6l6 6-6 6"
95
+ })
96
+ }),
83
97
  /** ✓ — checkmark */
84
98
  check: /*#__PURE__*/_jsx("svg", {
85
99
  ...svgProps,
@@ -15,7 +15,7 @@ import type { DefinedTheme } from '../theme/defineTheme';
15
15
  * These represent the functional purpose of each icon, not a specific
16
16
  * visual representation. Themes provide the actual icon components.
17
17
  */
18
- export type IconName = 'close' | 'chevronDown' | 'chevronLeft' | 'chevronRight' | 'check' | 'success' | 'error' | 'warning' | 'info' | 'calendar' | 'clock' | 'externalLink' | 'menu' | 'moreHorizontal' | 'search' | 'arrowUp' | 'arrowDown' | 'arrowsUpDown' | 'funnel' | 'eyeSlash' | 'viewColumns' | 'copy' | 'checkDouble' | 'wrench' | 'stop' | 'microphone';
18
+ export type IconName = 'close' | 'chevronDown' | 'chevronLeft' | 'chevronRight' | 'chevronsLeft' | 'chevronsRight' | 'check' | 'success' | 'error' | 'warning' | 'info' | 'calendar' | 'clock' | 'externalLink' | 'menu' | 'moreHorizontal' | 'search' | 'arrowUp' | 'arrowDown' | 'arrowsUpDown' | 'funnel' | 'eyeSlash' | 'viewColumns' | 'copy' | 'checkDouble' | 'wrench' | 'stop' | 'microphone';
19
19
  /**
20
20
  * A semantic icon name — either one of the built-in {@link IconName}s or an
21
21
  * arbitrary string key contributed by a library/app.
@@ -1 +1 @@
1
- {"version":3,"file":"globalIconRegistry.d.ts","sourceRoot":"","sources":["../../src/Icon/globalIconRegistry.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAQvD;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,aAAa,GACb,aAAa,GACb,cAAc,GACd,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,cAAc,GACd,MAAM,GACN,gBAAgB,GAChB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,cAAc,GACd,QAAQ,GACR,UAAU,GACV,aAAa,GACb,MAAM,GACN,aAAa,GACb,QAAQ,GACR,MAAM,GACN,YAAY,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAsB1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,GAClD,IAAI,CAON;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,QAAQ,CAAC,YAAY,CAAC,CAkBxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,gBAAgB,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,SAAS,CAOX;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gBAAgB,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,SAAS,CAQX;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
1
+ {"version":3,"file":"globalIconRegistry.d.ts","sourceRoot":"","sources":["../../src/Icon/globalIconRegistry.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAQvD;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,aAAa,GACb,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe,GACf,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,cAAc,GACd,MAAM,GACN,gBAAgB,GAChB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,cAAc,GACd,QAAQ,GACR,UAAU,GACV,aAAa,GACb,MAAM,GACN,aAAa,GACb,QAAQ,GACR,MAAM,GACN,YAAY,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAsB1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,GAClD,IAAI,CAON;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,QAAQ,CAAC,YAAY,CAAC,CAkBxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,gBAAgB,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,SAAS,CAOX;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gBAAgB,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,SAAS,CAQX;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
@@ -65,8 +65,8 @@ export interface LightboxProps extends BaseProps<HTMLDialogElement> {
65
65
  */
66
66
  onIndexChange?: (index: number) => void;
67
67
  /**
68
- * Enable zoom on double-click (images only).
69
- * When zoomed, drag to pan.
68
+ * Enable zoom on double-click, or Enter/Space/`+`/`-` via keyboard
69
+ * (images only). When zoomed, drag or use arrow keys to pan.
70
70
  * @default false
71
71
  */
72
72
  hasZoom?: boolean;
@@ -81,7 +81,9 @@ export interface LightboxProps extends BaseProps<HTMLDialogElement> {
81
81
  *
82
82
  * Supports single image and gallery modes. In gallery mode, provides
83
83
  * prev/next navigation via buttons and arrow keys. Optionally supports
84
- * zoom (double-click to toggle 2x) and pan (drag when zoomed).
84
+ * zoom (double-click, Enter/Space on the image, or `+`/`-` to toggle 2x)
85
+ * and pan (drag or arrow keys when zoomed; arrows navigate the gallery
86
+ * when not zoomed).
85
87
  *
86
88
  * Uses the native `<dialog>` element with `showModal()` for focus
87
89
  * trapping and top-layer placement. Dismiss via Escape, close button,
@@ -1 +1 @@
1
- {"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAI5C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACjE,+CAA+C;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,KAAK,EAAE,eAAe,EACtB,YAAgB,EAChB,aAAa,EACb,OAAe,EACf,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,KAAK,EACT,EAAE,aAAa,sCAwVf;yBAxWe,QAAQ"}
1
+ {"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAI5C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACjE,+CAA+C;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA6JD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,KAAK,EAAE,eAAe,EACtB,YAAgB,EAChB,aAAa,EACb,OAAe,EACf,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,KAAK,EACT,EAAE,aAAa,sCAyYf;yBAzZe,QAAQ"}
@@ -85,12 +85,28 @@ const dynamicStyles = {
85
85
  }]
86
86
  };
87
87
 
88
+ /**
89
+ * Pan distance (px) per arrow-key press while zoomed. Offsets move the
90
+ * viewport in the arrow's direction — pressing ArrowRight reveals content to
91
+ * the right, so the image itself shifts left (negative x), matching how
92
+ * scrolling and pointer-drag panning feel.
93
+ */
94
+ const KEYBOARD_PAN_STEP = 50;
95
+ const KEYBOARD_PAN_OFFSETS = {
96
+ ArrowLeft: [KEYBOARD_PAN_STEP, 0],
97
+ ArrowRight: [-KEYBOARD_PAN_STEP, 0],
98
+ ArrowUp: [0, KEYBOARD_PAN_STEP],
99
+ ArrowDown: [0, -KEYBOARD_PAN_STEP]
100
+ };
101
+
88
102
  /**
89
103
  * A fullscreen overlay for viewing images at full resolution.
90
104
  *
91
105
  * Supports single image and gallery modes. In gallery mode, provides
92
106
  * prev/next navigation via buttons and arrow keys. Optionally supports
93
- * zoom (double-click to toggle 2x) and pan (drag when zoomed).
107
+ * zoom (double-click, Enter/Space on the image, or `+`/`-` to toggle 2x)
108
+ * and pan (drag or arrow keys when zoomed; arrows navigate the gallery
109
+ * when not zoomed).
94
110
  *
95
111
  * Uses the native `<dialog>` element with `showModal()` for focus
96
112
  * trapping and top-layer placement. Dismiss via Escape, close button,
@@ -266,8 +282,49 @@ export function Lightbox({
266
282
  }
267
283
  }, [canNext, index, setIndex]);
268
284
 
269
- // Keyboard navigation
285
+ // Zoom: double-click, Enter/Space on the image, or +/- keys toggle 1x ↔ 2x.
286
+ // Zoom changes are silent to assistive tech (only the transform changes), so
287
+ // mirror them in the polite live region, including a hint that arrow keys
288
+ // pan while zoomed.
289
+ const applyZoom = useCallback(next => {
290
+ if (!hasZoom || isVideo || next === zoom) {
291
+ return;
292
+ }
293
+ setZoom(next);
294
+ setPan({
295
+ x: 0,
296
+ y: 0
297
+ });
298
+ announce(next > 1 ? t('@astryx.lightbox.zoomedIn') : t('@astryx.lightbox.zoomedOut'));
299
+ }, [hasZoom, isVideo, zoom, announce, t]);
300
+ const handleDoubleClick = useCallback(() => {
301
+ applyZoom(zoom === 1 ? 2 : 1);
302
+ }, [applyZoom, zoom]);
303
+
304
+ // Keyboard navigation. While zoomed, arrows pan the image (matching common
305
+ // lightbox conventions); when not zoomed they navigate the gallery.
270
306
  const handleKeyDown = useCallback(e => {
307
+ if (hasZoom && !isVideo) {
308
+ if (e.key === '+' || e.key === '=') {
309
+ e.preventDefault();
310
+ applyZoom(2);
311
+ return;
312
+ }
313
+ if (e.key === '-') {
314
+ e.preventDefault();
315
+ applyZoom(1);
316
+ return;
317
+ }
318
+ if (zoom > 1 && KEYBOARD_PAN_OFFSETS[e.key] !== undefined) {
319
+ e.preventDefault();
320
+ const [dx, dy] = KEYBOARD_PAN_OFFSETS[e.key];
321
+ setPan(prev => ({
322
+ x: prev.x + dx,
323
+ y: prev.y + dy
324
+ }));
325
+ return;
326
+ }
327
+ }
271
328
  if (e.key === 'ArrowLeft') {
272
329
  e.preventDefault();
273
330
  goToPrev();
@@ -275,27 +332,15 @@ export function Lightbox({
275
332
  e.preventDefault();
276
333
  goToNext();
277
334
  }
278
- }, [goToPrev, goToNext]);
335
+ }, [hasZoom, isVideo, zoom, applyZoom, goToPrev, goToNext]);
279
336
 
280
- // Zoom: double-click toggles 1x ↔ 2x
281
- const handleDoubleClick = useCallback(() => {
282
- if (!hasZoom) {
283
- return;
284
- }
285
- if (zoom === 1) {
286
- setZoom(2);
287
- setPan({
288
- x: 0,
289
- y: 0
290
- });
291
- } else {
292
- setZoom(1);
293
- setPan({
294
- x: 0,
295
- y: 0
296
- });
337
+ // Enter/Space on the focused image wrapper (role="button") toggles zoom.
338
+ const handleImageKeyDown = useCallback(e => {
339
+ if (e.key === 'Enter' || e.key === ' ') {
340
+ e.preventDefault();
341
+ handleDoubleClick();
297
342
  }
298
- }, [hasZoom, zoom]);
343
+ }, [handleDoubleClick]);
299
344
 
300
345
  // Pan: mouse drag when zoomed
301
346
  const handlePointerDown = useCallback(e => {
@@ -335,6 +380,7 @@ export function Lightbox({
335
380
  };
336
381
  }, [isDragging]);
337
382
  const isZoomed = zoom > 1;
383
+ const isZoomTarget = hasZoom && !isVideo;
338
384
  const imageTransform = zoom === 1 ? null : `scale(${zoom}) translate(${pan.x / zoom}px, ${pan.y / zoom}px)`;
339
385
  if (!currentItem) {
340
386
  return null;
@@ -397,34 +443,66 @@ export function Lightbox({
397
443
  className: "x78zum5 xdt5ytf x6s0dn4 x193iq5w xmz0i5r xb3r6kr"
398
444
  },
399
445
  children: [/*#__PURE__*/_jsx("div", {
400
- ref: imageWrapperRef,
446
+ ref: imageWrapperRef
447
+ // The wrapper is a keyboard-operable zoom toggle when zoom is
448
+ // enabled: Enter/Space toggles, aria-pressed reflects state.
449
+ ,
450
+ role: isZoomTarget ? 'button' : undefined,
451
+ tabIndex: isZoomTarget ? 0 : undefined,
452
+ "aria-pressed": isZoomTarget ? isZoomed : undefined,
453
+ "aria-label": isZoomTarget ? t('@astryx.lightbox.zoom') : undefined,
401
454
  ...{
402
455
  0: {
403
456
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr xt0e3qv x87ps6o x2lwn1j"
404
457
  },
458
+ 8: {
459
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr xt0e3qv x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk"
460
+ },
405
461
  4: {
406
462
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1huxd7x x2dt3px"
407
463
  },
464
+ 12: {
465
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk x1huxd7x x2dt3px"
466
+ },
408
467
  2: {
409
468
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1jm3nie"
410
469
  },
470
+ 10: {
471
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk x1jm3nie"
472
+ },
411
473
  6: {
412
474
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1jm3nie"
413
475
  },
476
+ 14: {
477
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk x1jm3nie"
478
+ },
414
479
  1: {
415
480
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
416
481
  },
482
+ 9: {
483
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
484
+ },
417
485
  5: {
418
486
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
419
487
  },
488
+ 13: {
489
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
490
+ },
420
491
  3: {
421
492
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
422
493
  },
494
+ 11: {
495
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
496
+ },
423
497
  7: {
424
498
  className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
499
+ },
500
+ 15: {
501
+ className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
425
502
  }
426
- }[!!(!isVideo && hasZoom && !isZoomed) << 2 | !!(!isVideo && isZoomed) << 1 | !!(!isVideo && isDragging) << 0],
503
+ }[!!isZoomTarget << 3 | !!(!isVideo && hasZoom && !isZoomed) << 2 | !!(!isVideo && isZoomed) << 1 | !!(!isVideo && isDragging) << 0],
427
504
  onDoubleClick: isVideo ? undefined : handleDoubleClick,
505
+ onKeyDown: isZoomTarget ? handleImageKeyDown : undefined,
428
506
  onPointerDown: isVideo ? undefined : handlePointerDown,
429
507
  children: isVideo ? /*#__PURE__*/_jsx("video", {
430
508
  src: currentItem.src,
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataList.d.ts","sourceRoot":"","sources":["../../src/MetadataList/MetadataList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAqC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAQzE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,OAAO,CACR;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAuFD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,OAAkB,EAClB,KAAK,EACL,aAAa,EACb,WAAwB,EACxB,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,iBAAiB,+BAuGnB;yBAnHe,YAAY"}
1
+ {"version":3,"file":"MetadataList.d.ts","sourceRoot":"","sources":["../../src/MetadataList/MetadataList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAqC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAQzE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,OAAO,CACR;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,uBAAuB,CAAC;IAChC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA6FD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,OAAkB,EAClB,KAAK,EACL,aAAa,EACb,WAAwB,EACxB,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,iBAAiB,+BAsHnB;yBAlIe,YAAY"}