@ttt-productions/ui-core 0.11.33 → 0.11.35

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 (238) hide show
  1. package/README.md +1 -1
  2. package/dist/browser/index.d.ts +2 -2
  3. package/dist/browser/index.d.ts.map +1 -1
  4. package/dist/browser/index.js +1 -2
  5. package/dist/browser/index.js.map +1 -1
  6. package/dist/browser/reload-recovery-watch.d.ts +2 -6
  7. package/dist/browser/reload-recovery-watch.d.ts.map +1 -1
  8. package/dist/browser/reload-recovery-watch.js +5 -10
  9. package/dist/browser/reload-recovery-watch.js.map +1 -1
  10. package/dist/index.d.ts +3 -3
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +3 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/format-numbers.d.ts +0 -6
  15. package/dist/lib/format-numbers.d.ts.map +1 -1
  16. package/dist/lib/format-numbers.js +2 -8
  17. package/dist/lib/format-numbers.js.map +1 -1
  18. package/dist/lib/reload-recovery.d.ts +1 -9
  19. package/dist/lib/reload-recovery.d.ts.map +1 -1
  20. package/dist/lib/reload-recovery.js +14 -24
  21. package/dist/lib/reload-recovery.js.map +1 -1
  22. package/dist/lib/utils.d.ts +0 -3
  23. package/dist/lib/utils.d.ts.map +1 -1
  24. package/dist/lib/utils.js +0 -3
  25. package/dist/lib/utils.js.map +1 -1
  26. package/dist/react/components/accordion.d.ts +2 -2
  27. package/dist/react/components/accordion.d.ts.map +1 -1
  28. package/dist/react/components/accordion.js +8 -8
  29. package/dist/react/components/accordion.js.map +1 -1
  30. package/dist/react/components/action-row.d.ts +2 -9
  31. package/dist/react/components/action-row.d.ts.map +1 -1
  32. package/dist/react/components/action-row.js +7 -11
  33. package/dist/react/components/action-row.js.map +1 -1
  34. package/dist/react/components/alert-dialog.d.ts +2 -2
  35. package/dist/react/components/alert-dialog.d.ts.map +1 -1
  36. package/dist/react/components/alert-dialog.js +15 -15
  37. package/dist/react/components/alert-dialog.js.map +1 -1
  38. package/dist/react/components/alert.d.ts +2 -2
  39. package/dist/react/components/alert.d.ts.map +1 -1
  40. package/dist/react/components/alert.js +12 -12
  41. package/dist/react/components/alert.js.map +1 -1
  42. package/dist/react/components/avatar.d.ts +2 -2
  43. package/dist/react/components/avatar.d.ts.map +1 -1
  44. package/dist/react/components/avatar.js +7 -7
  45. package/dist/react/components/avatar.js.map +1 -1
  46. package/dist/react/components/badge.d.ts +2 -2
  47. package/dist/react/components/badge.d.ts.map +1 -1
  48. package/dist/react/components/badge.js +9 -9
  49. package/dist/react/components/badge.js.map +1 -1
  50. package/dist/react/components/button.d.ts +2 -12
  51. package/dist/react/components/button.d.ts.map +1 -1
  52. package/dist/react/components/button.js +30 -35
  53. package/dist/react/components/button.js.map +1 -1
  54. package/dist/react/components/card.d.ts +1 -1
  55. package/dist/react/components/card.d.ts.map +1 -1
  56. package/dist/react/components/card.js +15 -15
  57. package/dist/react/components/card.js.map +1 -1
  58. package/dist/react/components/checkbox.d.ts +2 -2
  59. package/dist/react/components/checkbox.d.ts.map +1 -1
  60. package/dist/react/components/checkbox.js +6 -6
  61. package/dist/react/components/checkbox.js.map +1 -1
  62. package/dist/react/components/collapsible.d.ts +1 -1
  63. package/dist/react/components/collapsible.d.ts.map +1 -1
  64. package/dist/react/components/collapsible.js +2 -2
  65. package/dist/react/components/collapsible.js.map +1 -1
  66. package/dist/react/components/consequence-dialog.d.ts +1 -48
  67. package/dist/react/components/consequence-dialog.d.ts.map +1 -1
  68. package/dist/react/components/consequence-dialog.js +7 -23
  69. package/dist/react/components/consequence-dialog.js.map +1 -1
  70. package/dist/react/components/date-picker.d.ts +1 -18
  71. package/dist/react/components/date-picker.d.ts.map +1 -1
  72. package/dist/react/components/date-picker.js +102 -98
  73. package/dist/react/components/date-picker.js.map +1 -1
  74. package/dist/react/components/date-time-picker.d.ts +1 -24
  75. package/dist/react/components/date-time-picker.d.ts.map +1 -1
  76. package/dist/react/components/date-time-picker.js +20 -37
  77. package/dist/react/components/date-time-picker.js.map +1 -1
  78. package/dist/react/components/dialog.d.ts +2 -2
  79. package/dist/react/components/dialog.d.ts.map +1 -1
  80. package/dist/react/components/dialog.js +14 -14
  81. package/dist/react/components/dialog.js.map +1 -1
  82. package/dist/react/components/dropdown-menu.d.ts +2 -10
  83. package/dist/react/components/dropdown-menu.d.ts.map +1 -1
  84. package/dist/react/components/dropdown-menu.js +24 -20
  85. package/dist/react/components/dropdown-menu.js.map +1 -1
  86. package/dist/react/components/end-of-list-indicator.d.ts +1 -1
  87. package/dist/react/components/end-of-list-indicator.js +3 -3
  88. package/dist/react/components/end-of-list-indicator.js.map +1 -1
  89. package/dist/react/components/form.d.ts +3 -3
  90. package/dist/react/components/form.d.ts.map +1 -1
  91. package/dist/react/components/form.js +17 -17
  92. package/dist/react/components/form.js.map +1 -1
  93. package/dist/react/components/format-control.d.ts +7 -20
  94. package/dist/react/components/format-control.d.ts.map +1 -1
  95. package/dist/react/components/format-control.js +18 -22
  96. package/dist/react/components/format-control.js.map +1 -1
  97. package/dist/react/components/input.d.ts +10 -27
  98. package/dist/react/components/input.d.ts.map +1 -1
  99. package/dist/react/components/input.js +11 -9
  100. package/dist/react/components/input.js.map +1 -1
  101. package/dist/react/components/label.d.ts +3 -3
  102. package/dist/react/components/label.d.ts.map +1 -1
  103. package/dist/react/components/label.js +6 -6
  104. package/dist/react/components/label.js.map +1 -1
  105. package/dist/react/components/layout/screen-adaptive-view.d.ts +2 -9
  106. package/dist/react/components/layout/screen-adaptive-view.d.ts.map +1 -1
  107. package/dist/react/components/layout/screen-adaptive-view.js +40 -37
  108. package/dist/react/components/layout/screen-adaptive-view.js.map +1 -1
  109. package/dist/react/components/list-pagination.d.ts +1 -31
  110. package/dist/react/components/list-pagination.d.ts.map +1 -1
  111. package/dist/react/components/list-pagination.js +10 -37
  112. package/dist/react/components/list-pagination.js.map +1 -1
  113. package/dist/react/components/menubar.d.ts +2 -2
  114. package/dist/react/components/menubar.d.ts.map +1 -1
  115. package/dist/react/components/menubar.js +17 -17
  116. package/dist/react/components/menubar.js.map +1 -1
  117. package/dist/react/components/opener-focus.d.ts +2 -8
  118. package/dist/react/components/opener-focus.d.ts.map +1 -1
  119. package/dist/react/components/opener-focus.js +4 -10
  120. package/dist/react/components/opener-focus.js.map +1 -1
  121. package/dist/react/components/pending-guard.d.ts +1 -7
  122. package/dist/react/components/pending-guard.d.ts.map +1 -1
  123. package/dist/react/components/pending-guard.js +1 -7
  124. package/dist/react/components/pending-guard.js.map +1 -1
  125. package/dist/react/components/popover.d.ts +2 -2
  126. package/dist/react/components/popover.d.ts.map +1 -1
  127. package/dist/react/components/popover.js +5 -5
  128. package/dist/react/components/popover.js.map +1 -1
  129. package/dist/react/components/progress.d.ts +2 -2
  130. package/dist/react/components/progress.d.ts.map +1 -1
  131. package/dist/react/components/progress.js +5 -5
  132. package/dist/react/components/progress.js.map +1 -1
  133. package/dist/react/components/radio-group.d.ts +2 -2
  134. package/dist/react/components/radio-group.d.ts.map +1 -1
  135. package/dist/react/components/radio-group.js +7 -7
  136. package/dist/react/components/radio-group.js.map +1 -1
  137. package/dist/react/components/relative-time.d.ts +1 -9
  138. package/dist/react/components/relative-time.d.ts.map +1 -1
  139. package/dist/react/components/relative-time.js +8 -11
  140. package/dist/react/components/relative-time.js.map +1 -1
  141. package/dist/react/components/reload-recovery-notice.d.ts +3 -17
  142. package/dist/react/components/reload-recovery-notice.d.ts.map +1 -1
  143. package/dist/react/components/reload-recovery-notice.js +7 -12
  144. package/dist/react/components/reload-recovery-notice.js.map +1 -1
  145. package/dist/react/components/scroll-area.d.ts +2 -2
  146. package/dist/react/components/scroll-area.d.ts.map +1 -1
  147. package/dist/react/components/scroll-area.js +6 -8
  148. package/dist/react/components/scroll-area.js.map +1 -1
  149. package/dist/react/components/scroll-to-top-button.d.ts +6 -30
  150. package/dist/react/components/scroll-to-top-button.d.ts.map +1 -1
  151. package/dist/react/components/scroll-to-top-button.js +9 -9
  152. package/dist/react/components/scroll-to-top-button.js.map +1 -1
  153. package/dist/react/components/search-dropdown.d.ts +0 -53
  154. package/dist/react/components/search-dropdown.d.ts.map +1 -1
  155. package/dist/react/components/search-dropdown.js +10 -39
  156. package/dist/react/components/search-dropdown.js.map +1 -1
  157. package/dist/react/components/select.d.ts +2 -9
  158. package/dist/react/components/select.d.ts.map +1 -1
  159. package/dist/react/components/select.js +19 -21
  160. package/dist/react/components/select.js.map +1 -1
  161. package/dist/react/components/separator.d.ts +2 -2
  162. package/dist/react/components/separator.d.ts.map +1 -1
  163. package/dist/react/components/separator.js +5 -5
  164. package/dist/react/components/separator.js.map +1 -1
  165. package/dist/react/components/sheet.d.ts +3 -3
  166. package/dist/react/components/sheet.d.ts.map +1 -1
  167. package/dist/react/components/sheet.js +21 -21
  168. package/dist/react/components/sheet.js.map +1 -1
  169. package/dist/react/components/show-more-toggle.d.ts +2 -18
  170. package/dist/react/components/show-more-toggle.d.ts.map +1 -1
  171. package/dist/react/components/show-more-toggle.js +6 -11
  172. package/dist/react/components/show-more-toggle.js.map +1 -1
  173. package/dist/react/components/skeleton.d.ts +1 -1
  174. package/dist/react/components/skeleton.d.ts.map +1 -1
  175. package/dist/react/components/skeleton.js +3 -3
  176. package/dist/react/components/skeleton.js.map +1 -1
  177. package/dist/react/components/slider.d.ts +2 -2
  178. package/dist/react/components/slider.d.ts.map +1 -1
  179. package/dist/react/components/slider.js +5 -5
  180. package/dist/react/components/slider.js.map +1 -1
  181. package/dist/react/components/spinner.d.ts +1 -15
  182. package/dist/react/components/spinner.d.ts.map +1 -1
  183. package/dist/react/components/spinner.js +10 -18
  184. package/dist/react/components/spinner.js.map +1 -1
  185. package/dist/react/components/switch.d.ts +2 -9
  186. package/dist/react/components/switch.d.ts.map +1 -1
  187. package/dist/react/components/switch.js +13 -10
  188. package/dist/react/components/switch.js.map +1 -1
  189. package/dist/react/components/table.d.ts +2 -12
  190. package/dist/react/components/table.d.ts.map +1 -1
  191. package/dist/react/components/table.js +24 -30
  192. package/dist/react/components/table.js.map +1 -1
  193. package/dist/react/components/tabs.d.ts +2 -2
  194. package/dist/react/components/tabs.d.ts.map +1 -1
  195. package/dist/react/components/tabs.js +7 -7
  196. package/dist/react/components/tabs.js.map +1 -1
  197. package/dist/react/components/textarea.d.ts +5 -16
  198. package/dist/react/components/textarea.d.ts.map +1 -1
  199. package/dist/react/components/textarea.js +11 -9
  200. package/dist/react/components/textarea.js.map +1 -1
  201. package/dist/react/components/toast.d.ts +4 -8
  202. package/dist/react/components/toast.d.ts.map +1 -1
  203. package/dist/react/components/toast.js +26 -47
  204. package/dist/react/components/toast.js.map +1 -1
  205. package/dist/react/components/toaster.d.ts.map +1 -1
  206. package/dist/react/components/toaster.js +5 -5
  207. package/dist/react/components/toaster.js.map +1 -1
  208. package/dist/react/components/tooltip.d.ts +2 -2
  209. package/dist/react/components/tooltip.d.ts.map +1 -1
  210. package/dist/react/components/tooltip.js +5 -5
  211. package/dist/react/components/tooltip.js.map +1 -1
  212. package/dist/react/hooks/use-async-action.d.ts +1 -21
  213. package/dist/react/hooks/use-async-action.d.ts.map +1 -1
  214. package/dist/react/hooks/use-async-action.js +3 -11
  215. package/dist/react/hooks/use-async-action.js.map +1 -1
  216. package/dist/react/hooks/use-cursor-page.d.ts +1 -63
  217. package/dist/react/hooks/use-cursor-page.d.ts.map +1 -1
  218. package/dist/react/hooks/use-cursor-page.js +3 -39
  219. package/dist/react/hooks/use-cursor-page.js.map +1 -1
  220. package/dist/react/hooks/use-media-query.js +5 -5
  221. package/dist/react/hooks/use-media-query.js.map +1 -1
  222. package/dist/react/hooks/use-paged-list.d.ts +0 -43
  223. package/dist/react/hooks/use-paged-list.d.ts.map +1 -1
  224. package/dist/react/hooks/use-paged-list.js +2 -17
  225. package/dist/react/hooks/use-paged-list.js.map +1 -1
  226. package/dist/react/hooks/use-return-scroll.d.ts +1 -10
  227. package/dist/react/hooks/use-return-scroll.d.ts.map +1 -1
  228. package/dist/react/hooks/use-return-scroll.js +13 -45
  229. package/dist/react/hooks/use-return-scroll.js.map +1 -1
  230. package/dist/react/hooks/use-toast.d.ts +3 -11
  231. package/dist/react/hooks/use-toast.d.ts.map +1 -1
  232. package/dist/react/hooks/use-toast.js +18 -21
  233. package/dist/react/hooks/use-toast.js.map +1 -1
  234. package/dist/react/index.d.ts +74 -74
  235. package/dist/react/index.d.ts.map +1 -1
  236. package/dist/react/index.js +51 -57
  237. package/dist/react/index.js.map +1 -1
  238. package/package.json +8 -6
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @ttt-productions/ui-core
2
2
 
3
- Shared UI package for TTT Productions projects.
3
+ Shared UI package for consuming apps.
4
4
 
5
5
  ## Installation
6
6
 
@@ -1,3 +1,3 @@
1
- export { createReloadRecoveryWatch } from "./reload-recovery-watch.js";
2
- export type { ReloadRecoveryTarget, ReloadRecoveryWatch } from "./reload-recovery-watch.js";
1
+ export { createReloadRecoveryWatch } from './reload-recovery-watch.js';
2
+ export type { ReloadRecoveryTarget, ReloadRecoveryWatch } from './reload-recovery-watch.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1,3 +1,2 @@
1
- // Browser runtime with no React: what a client entry starts before the app mounts.
2
- export { createReloadRecoveryWatch } from "./reload-recovery-watch.js";
1
+ export { createReloadRecoveryWatch } from './reload-recovery-watch.js';
3
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["// Browser runtime with no React: what a client entry starts before the app mounts.\nexport { createReloadRecoveryWatch } from \"./reload-recovery-watch.js\";\nexport type { ReloadRecoveryTarget, ReloadRecoveryWatch } from \"./reload-recovery-watch.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["export { createReloadRecoveryWatch } from './reload-recovery-watch.js';\nexport type { ReloadRecoveryTarget, ReloadRecoveryWatch } from './reload-recovery-watch.js';\n"]}
@@ -1,12 +1,8 @@
1
- import { type ReloadRecoveryKind } from "../lib/reload-recovery.js";
2
- /** What the watch listens on: the page's window. */
3
- export type ReloadRecoveryTarget = Pick<Window, "addEventListener" | "removeEventListener">;
1
+ import { type ReloadRecoveryKind } from '../lib/reload-recovery.js';
2
+ export type ReloadRecoveryTarget = Pick<Window, 'addEventListener' | 'removeEventListener'>;
4
3
  export interface ReloadRecoveryWatch {
5
- /** The first failure only a reload repairs since the watch started, or `null` while there is none. */
6
4
  current: () => ReloadRecoveryKind | null;
7
- /** Calls `listener` once, when the first failure is recorded. Answers the unsubscribe. */
8
5
  subscribe: (listener: () => void) => () => void;
9
- /** Stops listening; a failure already recorded stays. */
10
6
  stop: () => void;
11
7
  }
12
8
  export declare function createReloadRecoveryWatch(target?: ReloadRecoveryTarget): ReloadRecoveryWatch;
@@ -1 +1 @@
1
- {"version":3,"file":"reload-recovery-watch.d.ts","sourceRoot":"","sources":["../../src/browser/reload-recovery-watch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE1F,oDAAoD;AACpD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CAAC,CAAC;AAE5F,MAAM,WAAW,mBAAmB;IAClC,sGAAsG;IACtG,OAAO,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACzC,0FAA0F;IAC1F,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,yDAAyD;IACzD,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CAAC,MAAM,GAAE,oBAA6B,GAAG,mBAAmB,CA6BpG"}
1
+ {"version":3,"file":"reload-recovery-watch.d.ts","sourceRoot":"","sources":["../../src/browser/reload-recovery-watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE1F,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CAAC,CAAC;AAE5F,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,oBAA6B,GACpC,mBAAmB,CA4BrB"}
@@ -1,13 +1,8 @@
1
- // Watches the page for the first failure only a reload repairs. Started once at the app's client
2
- // entry, before React mounts, so a failure raised during startup is recorded for the notice to show
3
- // once it mounts. It only listens: it never calls `preventDefault`, so the app's monitoring still
4
- // captures every event once, and it never reloads the page.
5
- import { reloadRecoveryKindOf } from "../lib/reload-recovery.js";
1
+ import { reloadRecoveryKindOf } from '../lib/reload-recovery.js';
6
2
  export function createReloadRecoveryWatch(target = window) {
7
3
  let recorded = null;
8
4
  const listeners = new Set();
9
5
  const record = (kind) => {
10
- // The first failure stands: a repeat of it, or the other one after it, changes nothing.
11
6
  if (kind === null || recorded !== null)
12
7
  return;
13
8
  recorded = kind;
@@ -17,8 +12,8 @@ export function createReloadRecoveryWatch(target = window) {
17
12
  // An error event's `error` is the thrown value; a cross-origin script's carries only the message.
18
13
  const onError = (event) => record(reloadRecoveryKindOf(event.error) ?? reloadRecoveryKindOf({ message: event.message }));
19
14
  const onRejection = (event) => record(reloadRecoveryKindOf(event.reason));
20
- target.addEventListener("error", onError);
21
- target.addEventListener("unhandledrejection", onRejection);
15
+ target.addEventListener('error', onError);
16
+ target.addEventListener('unhandledrejection', onRejection);
22
17
  return {
23
18
  current: () => recorded,
24
19
  subscribe: (listener) => {
@@ -26,8 +21,8 @@ export function createReloadRecoveryWatch(target = window) {
26
21
  return () => listeners.delete(listener);
27
22
  },
28
23
  stop: () => {
29
- target.removeEventListener("error", onError);
30
- target.removeEventListener("unhandledrejection", onRejection);
24
+ target.removeEventListener('error', onError);
25
+ target.removeEventListener('unhandledrejection', onRejection);
31
26
  },
32
27
  };
33
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reload-recovery-watch.js","sourceRoot":"","sources":["../../src/browser/reload-recovery-watch.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,oGAAoG;AACpG,kGAAkG;AAClG,4DAA4D;AAE5D,OAAO,EAAE,oBAAoB,EAA2B,MAAM,2BAA2B,CAAC;AAc1F,MAAM,UAAU,yBAAyB,CAAC,SAA+B,MAAM;IAC7E,IAAI,QAAQ,GAA8B,IAAI,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAExC,MAAM,MAAM,GAAG,CAAC,IAA+B,EAAE,EAAE;QACjD,wFAAwF;QACxF,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO;QAC/C,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC;YAAE,QAAQ,EAAE,CAAC;IACpD,CAAC,CAAC;IACF,kGAAkG;IAClG,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE,CACpC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChG,MAAM,WAAW,GAAG,CAAC,KAA4B,EAAE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;QACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Watches the page for the first failure only a reload repairs. Started once at the app's client\n// entry, before React mounts, so a failure raised during startup is recorded for the notice to show\n// once it mounts. It only listens: it never calls `preventDefault`, so the app's monitoring still\n// captures every event once, and it never reloads the page.\n\nimport { reloadRecoveryKindOf, type ReloadRecoveryKind } from \"../lib/reload-recovery.js\";\n\n/** What the watch listens on: the page's window. */\nexport type ReloadRecoveryTarget = Pick<Window, \"addEventListener\" | \"removeEventListener\">;\n\nexport interface ReloadRecoveryWatch {\n /** The first failure only a reload repairs since the watch started, or `null` while there is none. */\n current: () => ReloadRecoveryKind | null;\n /** Calls `listener` once, when the first failure is recorded. Answers the unsubscribe. */\n subscribe: (listener: () => void) => () => void;\n /** Stops listening; a failure already recorded stays. */\n stop: () => void;\n}\n\nexport function createReloadRecoveryWatch(target: ReloadRecoveryTarget = window): ReloadRecoveryWatch {\n let recorded: ReloadRecoveryKind | null = null;\n const listeners = new Set<() => void>();\n\n const record = (kind: ReloadRecoveryKind | null) => {\n // The first failure stands: a repeat of it, or the other one after it, changes nothing.\n if (kind === null || recorded !== null) return;\n recorded = kind;\n for (const listener of [...listeners]) listener();\n };\n // An error event's `error` is the thrown value; a cross-origin script's carries only the message.\n const onError = (event: ErrorEvent) =>\n record(reloadRecoveryKindOf(event.error) ?? reloadRecoveryKindOf({ message: event.message }));\n const onRejection = (event: PromiseRejectionEvent) => record(reloadRecoveryKindOf(event.reason));\n\n target.addEventListener(\"error\", onError);\n target.addEventListener(\"unhandledrejection\", onRejection);\n\n return {\n current: () => recorded,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n stop: () => {\n target.removeEventListener(\"error\", onError);\n target.removeEventListener(\"unhandledrejection\", onRejection);\n },\n };\n}\n"]}
1
+ {"version":3,"file":"reload-recovery-watch.js","sourceRoot":"","sources":["../../src/browser/reload-recovery-watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA2B,MAAM,2BAA2B,CAAC;AAU1F,MAAM,UAAU,yBAAyB,CACvC,SAA+B,MAAM;IAErC,IAAI,QAAQ,GAA8B,IAAI,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAExC,MAAM,MAAM,GAAG,CAAC,IAA+B,EAAE,EAAE;QACjD,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO;QAC/C,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC;YAAE,QAAQ,EAAE,CAAC;IACpD,CAAC,CAAC;IACF,kGAAkG;IAClG,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE,CACpC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChG,MAAM,WAAW,GAAG,CAAC,KAA4B,EAAE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAE3D,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;QACvB,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { reloadRecoveryKindOf, type ReloadRecoveryKind } from '../lib/reload-recovery.js';\n\nexport type ReloadRecoveryTarget = Pick<Window, 'addEventListener' | 'removeEventListener'>;\n\nexport interface ReloadRecoveryWatch {\n current: () => ReloadRecoveryKind | null;\n subscribe: (listener: () => void) => () => void;\n stop: () => void;\n}\n\nexport function createReloadRecoveryWatch(\n target: ReloadRecoveryTarget = window,\n): ReloadRecoveryWatch {\n let recorded: ReloadRecoveryKind | null = null;\n const listeners = new Set<() => void>();\n\n const record = (kind: ReloadRecoveryKind | null) => {\n if (kind === null || recorded !== null) return;\n recorded = kind;\n for (const listener of [...listeners]) listener();\n };\n // An error event's `error` is the thrown value; a cross-origin script's carries only the message.\n const onError = (event: ErrorEvent) =>\n record(reloadRecoveryKindOf(event.error) ?? reloadRecoveryKindOf({ message: event.message }));\n const onRejection = (event: PromiseRejectionEvent) => record(reloadRecoveryKindOf(event.reason));\n\n target.addEventListener('error', onError);\n target.addEventListener('unhandledrejection', onRejection);\n\n return {\n current: () => recorded,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n stop: () => {\n target.removeEventListener('error', onError);\n target.removeEventListener('unhandledrejection', onRejection);\n },\n };\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from "./lib/utils.js";
2
- export * from "./lib/format-numbers.js";
3
- export * from "./lib/reload-recovery.js";
1
+ export * from './lib/utils.js';
2
+ export * from './lib/format-numbers.js';
3
+ export * from './lib/reload-recovery.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,4 @@
1
- // Server-safe utilities only. React components and hooks live behind ./react.
2
- export * from "./lib/utils.js";
3
- export * from "./lib/format-numbers.js";
4
- export * from "./lib/reload-recovery.js";
1
+ export * from './lib/utils.js';
2
+ export * from './lib/format-numbers.js';
3
+ export * from './lib/reload-recovery.js';
5
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC","sourcesContent":["// Server-safe utilities only. React components and hooks live behind ./react.\nexport * from \"./lib/utils.js\";\nexport * from \"./lib/format-numbers.js\";\nexport * from \"./lib/reload-recovery.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './lib/utils.js';\nexport * from './lib/format-numbers.js';\nexport * from './lib/reload-recovery.js';\n"]}
@@ -1,8 +1,2 @@
1
- /**
2
- * Compact number formatter:
3
- * < 10,000 → "1234"
4
- * 10,000 ≤ n < 1,000,000 → "12.3k" (trailing ".0" stripped)
5
- * ≥ 1,000,000 → "1.2M" (trailing ".0" stripped)
6
- */
7
1
  export declare function formatLargeNumber(num: number): string;
8
2
  //# sourceMappingURL=format-numbers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-numbers.d.ts","sourceRoot":"","sources":["../../src/lib/format-numbers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUrD"}
1
+ {"version":3,"file":"format-numbers.d.ts","sourceRoot":"","sources":["../../src/lib/format-numbers.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUrD"}
@@ -1,17 +1,11 @@
1
- /**
2
- * Compact number formatter:
3
- * < 10,000 → "1234"
4
- * 10,000 ≤ n < 1,000,000 → "12.3k" (trailing ".0" stripped)
5
- * ≥ 1,000,000 → "1.2M" (trailing ".0" stripped)
6
- */
7
1
  export function formatLargeNumber(num) {
8
2
  if (num >= 1_000_000) {
9
3
  const formatted = (num / 1_000_000).toFixed(1);
10
- return (formatted.endsWith(".0") ? formatted.slice(0, -2) : formatted) + "M";
4
+ return (formatted.endsWith('.0') ? formatted.slice(0, -2) : formatted) + 'M';
11
5
  }
12
6
  if (num >= 10_000) {
13
7
  const formatted = (num / 1000).toFixed(1);
14
- return (formatted.endsWith(".0") ? formatted.slice(0, -2) : formatted) + "k";
8
+ return (formatted.endsWith('.0') ? formatted.slice(0, -2) : formatted) + 'k';
15
9
  }
16
10
  return num.toString();
17
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"format-numbers.js","sourceRoot":"","sources":["../../src/lib/format-numbers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IAC/E,CAAC;IACD,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IAC/E,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC","sourcesContent":["/**\n * Compact number formatter:\n * < 10,000 → \"1234\"\n * 10,000 ≤ n < 1,000,000 → \"12.3k\" (trailing \".0\" stripped)\n * ≥ 1,000,000 → \"1.2M\" (trailing \".0\" stripped)\n */\nexport function formatLargeNumber(num: number): string {\n if (num >= 1_000_000) {\n const formatted = (num / 1_000_000).toFixed(1);\n return (formatted.endsWith(\".0\") ? formatted.slice(0, -2) : formatted) + \"M\";\n }\n if (num >= 10_000) {\n const formatted = (num / 1000).toFixed(1);\n return (formatted.endsWith(\".0\") ? formatted.slice(0, -2) : formatted) + \"k\";\n }\n return num.toString();\n}\n"]}
1
+ {"version":3,"file":"format-numbers.js","sourceRoot":"","sources":["../../src/lib/format-numbers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IAC/E,CAAC;IACD,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IAC/E,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC","sourcesContent":["export function formatLargeNumber(num: number): string {\n if (num >= 1_000_000) {\n const formatted = (num / 1_000_000).toFixed(1);\n return (formatted.endsWith('.0') ? formatted.slice(0, -2) : formatted) + 'M';\n }\n if (num >= 10_000) {\n const formatted = (num / 1000).toFixed(1);\n return (formatted.endsWith('.0') ? formatted.slice(0, -2) : formatted) + 'k';\n }\n return num.toString();\n}\n"]}
@@ -1,15 +1,7 @@
1
- /** Each failure only a reload repairs. */
2
1
  export declare const RELOAD_RECOVERY_KINDS: readonly ["storageDisconnect", "staleChunk"];
3
2
  export type ReloadRecoveryKind = (typeof RELOAD_RECOVERY_KINDS)[number];
4
- /**
5
- * WebKit dropping a page's IndexedDB connection when it reclaims a backgrounded tab: an
6
- * `UnknownError` whose message says the connection to the Indexed Database server was lost. Every
7
- * storage call after it fails until the page reloads. No other `UnknownError`, and no quota, blocked
8
- * storage, or network failure, is this one.
9
- */
3
+ /** WebKit drops a backgrounded tab's IndexedDB connection; every storage call after it fails until the page reloads. */
10
4
  export declare function isStorageDisconnectError(reason: unknown): boolean;
11
- /** A code chunk the deployed build no longer serves: a `ChunkLoadError`, or "Failed to load chunk". */
12
5
  export declare function isStaleChunkError(reason: unknown): boolean;
13
- /** Which failure only a reload repairs `reason` is, or `null` for any other. */
14
6
  export declare function reloadRecoveryKindOf(reason: unknown): ReloadRecoveryKind | null;
15
7
  //# sourceMappingURL=reload-recovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reload-recovery.d.ts","sourceRoot":"","sources":["../../src/lib/reload-recovery.ts"],"names":[],"mappings":"AAGA,0CAA0C;AAC1C,eAAO,MAAM,qBAAqB,8CAA+C,CAAC;AAClF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAaxE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKjE;AAED,uGAAuG;AACvG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAK1D;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAI/E"}
1
+ {"version":3,"file":"reload-recovery.d.ts","sourceRoot":"","sources":["../../src/lib/reload-recovery.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,8CAA+C,CAAC;AAClF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAaxE,wHAAwH;AACxH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAKjE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAK1D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAI/E"}
@@ -1,38 +1,28 @@
1
- // The failures that leave a page only a reload repairs, recognised narrowly. Server-safe: pure
2
- // predicates over whatever an `error` or `unhandledrejection` event carries.
3
- /** Each failure only a reload repairs. */
4
- export const RELOAD_RECOVERY_KINDS = ["storageDisconnect", "staleChunk"];
5
- const STORAGE_DISCONNECT_NAME = "UnknownError";
6
- const STORAGE_DISCONNECT_MESSAGE = "Connection to Indexed Database server lost";
7
- const STALE_CHUNK_NAME = "ChunkLoadError";
8
- const STALE_CHUNK_MESSAGE = "Failed to load chunk";
1
+ export const RELOAD_RECOVERY_KINDS = ['storageDisconnect', 'staleChunk'];
2
+ const STORAGE_DISCONNECT_NAME = 'UnknownError';
3
+ const STORAGE_DISCONNECT_MESSAGE = 'Connection to Indexed Database server lost';
4
+ const STALE_CHUNK_NAME = 'ChunkLoadError';
5
+ const STALE_CHUNK_MESSAGE = 'Failed to load chunk';
9
6
  function fieldOf(reason, field) {
10
- if (typeof reason !== "object" || reason === null)
7
+ if (typeof reason !== 'object' || reason === null)
11
8
  return null;
12
9
  const value = reason[field];
13
- return typeof value === "string" ? value : null;
10
+ return typeof value === 'string' ? value : null;
14
11
  }
15
- /**
16
- * WebKit dropping a page's IndexedDB connection when it reclaims a backgrounded tab: an
17
- * `UnknownError` whose message says the connection to the Indexed Database server was lost. Every
18
- * storage call after it fails until the page reloads. No other `UnknownError`, and no quota, blocked
19
- * storage, or network failure, is this one.
20
- */
12
+ /** WebKit drops a backgrounded tab's IndexedDB connection; every storage call after it fails until the page reloads. */
21
13
  export function isStorageDisconnectError(reason) {
22
- return (fieldOf(reason, "name") === STORAGE_DISCONNECT_NAME &&
23
- (fieldOf(reason, "message")?.includes(STORAGE_DISCONNECT_MESSAGE) ?? false));
14
+ return (fieldOf(reason, 'name') === STORAGE_DISCONNECT_NAME &&
15
+ (fieldOf(reason, 'message')?.includes(STORAGE_DISCONNECT_MESSAGE) ?? false));
24
16
  }
25
- /** A code chunk the deployed build no longer serves: a `ChunkLoadError`, or "Failed to load chunk". */
26
17
  export function isStaleChunkError(reason) {
27
- return (fieldOf(reason, "name") === STALE_CHUNK_NAME ||
28
- (fieldOf(reason, "message")?.includes(STALE_CHUNK_MESSAGE) ?? false));
18
+ return (fieldOf(reason, 'name') === STALE_CHUNK_NAME ||
19
+ (fieldOf(reason, 'message')?.includes(STALE_CHUNK_MESSAGE) ?? false));
29
20
  }
30
- /** Which failure only a reload repairs `reason` is, or `null` for any other. */
31
21
  export function reloadRecoveryKindOf(reason) {
32
22
  if (isStorageDisconnectError(reason))
33
- return "storageDisconnect";
23
+ return 'storageDisconnect';
34
24
  if (isStaleChunkError(reason))
35
- return "staleChunk";
25
+ return 'staleChunk';
36
26
  return null;
37
27
  }
38
28
  //# sourceMappingURL=reload-recovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reload-recovery.js","sourceRoot":"","sources":["../../src/lib/reload-recovery.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,6EAA6E;AAE7E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAU,CAAC;AAGlF,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAC/C,MAAM,0BAA0B,GAAG,4CAA4C,CAAC;AAChF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAC1C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAEnD,SAAS,OAAO,CAAC,MAAe,EAAE,KAAyB;IACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,KAAK,GAAI,MAAkC,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAe;IACtD,OAAO,CACL,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,uBAAuB;QACnD,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,0BAA0B,CAAC,IAAI,KAAK,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,OAAO,CACL,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,gBAAgB;QAC5C,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,CACrE,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,IAAI,wBAAwB,CAAC,MAAM,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACjE,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO,YAAY,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// The failures that leave a page only a reload repairs, recognised narrowly. Server-safe: pure\n// predicates over whatever an `error` or `unhandledrejection` event carries.\n\n/** Each failure only a reload repairs. */\nexport const RELOAD_RECOVERY_KINDS = [\"storageDisconnect\", \"staleChunk\"] as const;\nexport type ReloadRecoveryKind = (typeof RELOAD_RECOVERY_KINDS)[number];\n\nconst STORAGE_DISCONNECT_NAME = \"UnknownError\";\nconst STORAGE_DISCONNECT_MESSAGE = \"Connection to Indexed Database server lost\";\nconst STALE_CHUNK_NAME = \"ChunkLoadError\";\nconst STALE_CHUNK_MESSAGE = \"Failed to load chunk\";\n\nfunction fieldOf(reason: unknown, field: \"name\" | \"message\"): string | null {\n if (typeof reason !== \"object\" || reason === null) return null;\n const value = (reason as Record<string, unknown>)[field];\n return typeof value === \"string\" ? value : null;\n}\n\n/**\n * WebKit dropping a page's IndexedDB connection when it reclaims a backgrounded tab: an\n * `UnknownError` whose message says the connection to the Indexed Database server was lost. Every\n * storage call after it fails until the page reloads. No other `UnknownError`, and no quota, blocked\n * storage, or network failure, is this one.\n */\nexport function isStorageDisconnectError(reason: unknown): boolean {\n return (\n fieldOf(reason, \"name\") === STORAGE_DISCONNECT_NAME &&\n (fieldOf(reason, \"message\")?.includes(STORAGE_DISCONNECT_MESSAGE) ?? false)\n );\n}\n\n/** A code chunk the deployed build no longer serves: a `ChunkLoadError`, or \"Failed to load chunk\". */\nexport function isStaleChunkError(reason: unknown): boolean {\n return (\n fieldOf(reason, \"name\") === STALE_CHUNK_NAME ||\n (fieldOf(reason, \"message\")?.includes(STALE_CHUNK_MESSAGE) ?? false)\n );\n}\n\n/** Which failure only a reload repairs `reason` is, or `null` for any other. */\nexport function reloadRecoveryKindOf(reason: unknown): ReloadRecoveryKind | null {\n if (isStorageDisconnectError(reason)) return \"storageDisconnect\";\n if (isStaleChunkError(reason)) return \"staleChunk\";\n return null;\n}\n"]}
1
+ {"version":3,"file":"reload-recovery.js","sourceRoot":"","sources":["../../src/lib/reload-recovery.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAU,CAAC;AAGlF,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAC/C,MAAM,0BAA0B,GAAG,4CAA4C,CAAC;AAChF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAC1C,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAEnD,SAAS,OAAO,CAAC,MAAe,EAAE,KAAyB;IACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,KAAK,GAAI,MAAkC,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,wHAAwH;AACxH,MAAM,UAAU,wBAAwB,CAAC,MAAe;IACtD,OAAO,CACL,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,uBAAuB;QACnD,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,0BAA0B,CAAC,IAAI,KAAK,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,OAAO,CACL,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,gBAAgB;QAC5C,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,CACrE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,IAAI,wBAAwB,CAAC,MAAM,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACjE,IAAI,iBAAiB,CAAC,MAAM,CAAC;QAAE,OAAO,YAAY,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["export const RELOAD_RECOVERY_KINDS = ['storageDisconnect', 'staleChunk'] as const;\nexport type ReloadRecoveryKind = (typeof RELOAD_RECOVERY_KINDS)[number];\n\nconst STORAGE_DISCONNECT_NAME = 'UnknownError';\nconst STORAGE_DISCONNECT_MESSAGE = 'Connection to Indexed Database server lost';\nconst STALE_CHUNK_NAME = 'ChunkLoadError';\nconst STALE_CHUNK_MESSAGE = 'Failed to load chunk';\n\nfunction fieldOf(reason: unknown, field: 'name' | 'message'): string | null {\n if (typeof reason !== 'object' || reason === null) return null;\n const value = (reason as Record<string, unknown>)[field];\n return typeof value === 'string' ? value : null;\n}\n\n/** WebKit drops a backgrounded tab's IndexedDB connection; every storage call after it fails until the page reloads. */\nexport function isStorageDisconnectError(reason: unknown): boolean {\n return (\n fieldOf(reason, 'name') === STORAGE_DISCONNECT_NAME &&\n (fieldOf(reason, 'message')?.includes(STORAGE_DISCONNECT_MESSAGE) ?? false)\n );\n}\n\nexport function isStaleChunkError(reason: unknown): boolean {\n return (\n fieldOf(reason, 'name') === STALE_CHUNK_NAME ||\n (fieldOf(reason, 'message')?.includes(STALE_CHUNK_MESSAGE) ?? false)\n );\n}\n\nexport function reloadRecoveryKindOf(reason: unknown): ReloadRecoveryKind | null {\n if (isStorageDisconnectError(reason)) return 'storageDisconnect';\n if (isStaleChunkError(reason)) return 'staleChunk';\n return null;\n}\n"]}
@@ -1,6 +1,3 @@
1
1
  import { type ClassValue } from 'clsx';
2
- /**
3
- * Merge Tailwind CSS classes with proper precedence
4
- */
5
2
  export declare function cn(...inputs: ClassValue[]): string;
6
3
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C;;GAEG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
package/dist/lib/utils.js CHANGED
@@ -1,8 +1,5 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
- /**
4
- * Merge Tailwind CSS classes with proper precedence
5
- */
6
3
  export function cn(...inputs) {
7
4
  return twMerge(clsx(inputs));
8
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge Tailwind CSS classes with proper precedence\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -1,5 +1,5 @@
1
- import * as React from "react";
2
- import * as AccordionPrimitive from "@radix-ui/react-accordion";
1
+ import * as React from 'react';
2
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
3
3
  declare const Accordion: React.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React.RefAttributes<HTMLDivElement>>;
4
4
  declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
5
  declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/react/components/accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAA;AAK/D,QAAA,MAAM,SAAS,8JAA0B,CAAA;AAEzC,QAAA,MAAM,aAAa,iKAKjB,CAAA;AAGF,QAAA,MAAM,gBAAgB,0KAiBpB,CAAA;AAGF,QAAA,MAAM,gBAAgB,oKAcpB,CAAA;AAGF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/react/components/accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAKhE,QAAA,MAAM,SAAS,8JAA0B,CAAC;AAE1C,QAAA,MAAM,aAAa,iKAKjB,CAAC;AAGH,QAAA,MAAM,gBAAgB,0KAiBpB,CAAC;AAGH,QAAA,MAAM,gBAAgB,oKAapB,CAAC;AAGH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,15 +1,15 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import * as AccordionPrimitive from "@radix-ui/react-accordion";
5
- import { ChevronDown } from "lucide-react";
6
- import { cn } from "../../lib/utils.js";
3
+ import * as React from 'react';
4
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
5
+ import { ChevronDown } from 'lucide-react';
6
+ import { cn } from '../../lib/utils.js';
7
7
  const Accordion = AccordionPrimitive.Root;
8
8
  const AccordionItem = React.forwardRef(({ className, ...props }, ref) => (_jsx(AccordionPrimitive.Item, { ref: ref, className: cn(className), ...props })));
9
- AccordionItem.displayName = "AccordionItem";
10
- const AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { ref: ref, className: cn("flex flex-1 items-center justify-between py-4 font-medium hover:underline [&[data-state=open]>svg]:rotate-180", className), ...props, children: [children, _jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-[var(--motion-base)] ease-[var(--motion-ease)]" })] }) })));
9
+ AccordionItem.displayName = 'AccordionItem';
10
+ const AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { ref: ref, className: cn('flex flex-1 items-center justify-between py-4 font-medium hover:underline [&[data-state=open]>svg]:rotate-180', className), ...props, children: [children, _jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-[var(--motion-base)] ease-[var(--motion-ease)]" })] }) })));
11
11
  AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
12
- const AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsx(AccordionPrimitive.Content, { ref: ref, className: "overflow-clip text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down", ...props, children: _jsx("div", { className: cn("pb-4 pt-0", className), children: children }) })));
12
+ const AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsx(AccordionPrimitive.Content, { ref: ref, className: "overflow-clip text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down", ...props, children: _jsx("div", { className: cn('pb-4 pt-0', className), children: children }) })));
13
13
  AccordionContent.displayName = AccordionPrimitive.Content.displayName;
14
14
  export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
15
15
  //# sourceMappingURL=accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../../src/react/components/accordion.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAEvC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAA;AAEzC,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAGpC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,kBAAkB,CAAC,IAAI,IAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CAC3E,CAAC,CAAA;AACF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAA;AAE3C,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAGvC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC5C,KAAC,kBAAkB,CAAC,MAAM,IAAC,SAAS,EAAC,MAAM,YACzC,MAAC,kBAAkB,CAAC,OAAO,IACzB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,+GAA+G,EAC/G,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,KAAC,WAAW,IAAC,SAAS,EAAC,+FAA+F,GAAG,IAC9F,GACH,CAC7B,CAAC,CAAA;AACF,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAA;AAErE,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAGvC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAI5C,KAAC,kBAAkB,CAAC,OAAO,IACzB,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,yGAAyG,KAC/G,KAAK,YAET,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,GACjC,CAC9B,CAAC,CAAA;AACF,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAA;AAErE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn(className)} {...props} />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex flex-1 items-center justify-between py-4 font-medium hover:underline [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-[var(--motion-base)] ease-[var(--motion-ease)]\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n // `overflow-clip`, never `overflow-hidden`: a hidden box is still a scroll container, so a focus or\n // scroll-into-view while it animates open scrolls it, and the content snaps back down when the\n // animation ends — carrying an open select or popover out of a scroll-locked viewport.\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-clip text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n"]}
1
+ {"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../../src/react/components/accordion.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAE1C,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAGpC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,kBAAkB,CAAC,IAAI,IAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAM,KAAK,GAAI,CAC3E,CAAC,CAAC;AACH,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAE5C,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAGvC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC5C,KAAC,kBAAkB,CAAC,MAAM,IAAC,SAAS,EAAC,MAAM,YACzC,MAAC,kBAAkB,CAAC,OAAO,IACzB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,+GAA+G,EAC/G,SAAS,CACV,KACG,KAAK,aAER,QAAQ,EACT,KAAC,WAAW,IAAC,SAAS,EAAC,+FAA+F,GAAG,IAC9F,GACH,CAC7B,CAAC,CAAC;AACH,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC;AAEtE,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAGvC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAG5C,KAAC,kBAAkB,CAAC,OAAO,IACzB,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,yGAAyG,KAC/G,KAAK,YAET,cAAK,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAO,GACjC,CAC9B,CAAC,CAAC;AACH,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown } from 'lucide-react';\n\nimport { cn } from '../../lib/utils.js';\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn(className)} {...props} />\n));\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between py-4 font-medium hover:underline [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-[var(--motion-base)] ease-[var(--motion-ease)]\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n // `overflow-clip`, never `overflow-hidden`: a hidden box is still a scroll container, so a focus\n // mid-animation scrolls it and the content snaps back when the animation ends.\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-clip text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn('pb-4 pt-0', className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n"]}
@@ -1,26 +1,19 @@
1
- import * as React from "react";
2
- /** What the app's link element must carry to be a row's link target. */
1
+ import * as React from 'react';
3
2
  export interface ActionRowLinkTargetProps {
4
3
  className: string;
5
- "aria-labelledby": string;
4
+ 'aria-labelledby': string;
6
5
  }
7
6
  interface ActionRowCommonProps {
8
- /** Layout of the content (padding, flex, borders). */
9
7
  className?: string;
10
8
  children: React.ReactNode;
11
9
  }
12
10
  export interface ActionRowButtonProps extends ActionRowCommonProps {
13
11
  onClick: () => void;
14
12
  disabled?: boolean;
15
- /** The row's own action is in flight. */
16
13
  busy?: boolean;
17
14
  renderLink?: never;
18
15
  }
19
16
  export interface ActionRowLinkProps extends ActionRowCommonProps {
20
- /**
21
- * Renders the row's target as the app's own link element (its guarded in-app link), spreading
22
- * the given props onto it. The link takes no children: the row's content names it.
23
- */
24
17
  renderLink: (target: ActionRowLinkTargetProps) => React.ReactElement;
25
18
  onClick?: never;
26
19
  disabled?: never;
@@ -1 +1 @@
1
- {"version":3,"file":"action-row.d.ts","sourceRoot":"","sources":["../../../src/react/components/action-row.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,wEAAwE;AACxE,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,oBAAoB;IAC5B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D;;;OAGG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,KAAK,CAAC,YAAY,CAAC;IACrE,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAEvE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBAqB9C"}
1
+ {"version":3,"file":"action-row.d.ts","sourceRoot":"","sources":["../../../src/react/components/action-row.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,UAAU,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,KAAK,CAAC,YAAY,CAAC;IACrE,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAEvE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBAqB9C"}
@@ -1,16 +1,12 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- // A whole-row action that can still hold controls of its own (FRONTEND-001, FRONTEND-203). A row can
4
- // never be a single <button> or <a>: a control inside it would be nested in the row's target. So the
5
- // target is a sibling laid over the row, named by the row's content, and the content sits above it
6
- // letting clicks through everywhere but on its own controls. The target comes first in tab order,
7
- // then any control inside the row.
8
- import * as React from "react";
9
- import { cn } from "../../lib/utils.js";
10
- const TARGET_CLASS = "peer absolute inset-0 w-full cursor-pointer transition-colors duration-[var(--motion-fast)] ease-[var(--motion-ease)] group-hover/action-row:bg-accent disabled:cursor-default disabled:group-hover/action-row:bg-transparent";
11
- const CONTENT_CLASS = "relative pointer-events-none peer-disabled:opacity-70 [&_:is(a,button,input,select,textarea,[role=button])]:pointer-events-auto";
3
+ // A row is never one <button> or <a>: a control inside it would be nested in the row's target.
4
+ import * as React from 'react';
5
+ import { cn } from '../../lib/utils.js';
6
+ const TARGET_CLASS = 'peer absolute inset-0 w-full cursor-pointer transition-colors duration-[var(--motion-fast)] ease-[var(--motion-ease)] group-hover/action-row:bg-accent disabled:cursor-default disabled:group-hover/action-row:bg-transparent';
7
+ const CONTENT_CLASS = 'relative pointer-events-none peer-disabled:opacity-70 [&_:is(a,button,input,select,textarea,[role=button])]:pointer-events-auto';
12
8
  export function ActionRow(props) {
13
9
  const contentId = React.useId();
14
- return (_jsxs("div", { className: "ui-action-row group/action-row relative", children: [props.renderLink ? (props.renderLink({ className: TARGET_CLASS, "aria-labelledby": contentId })) : (_jsx("button", { type: "button", className: TARGET_CLASS, onClick: props.onClick, disabled: props.disabled ?? false, "aria-busy": props.busy || undefined, "aria-labelledby": contentId })), _jsx("div", { id: contentId, className: cn(CONTENT_CLASS, props.className), children: props.children })] }));
10
+ return (_jsxs("div", { className: "ui-action-row group/action-row relative", children: [props.renderLink ? (props.renderLink({ className: TARGET_CLASS, 'aria-labelledby': contentId })) : (_jsx("button", { type: "button", className: TARGET_CLASS, onClick: props.onClick, disabled: props.disabled ?? false, "aria-busy": props.busy || undefined, "aria-labelledby": contentId })), _jsx("div", { id: contentId, className: cn(CONTENT_CLASS, props.className), children: props.children })] }));
15
11
  }
16
12
  //# sourceMappingURL=action-row.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-row.js","sourceRoot":"","sources":["../../../src/react/components/action-row.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,qGAAqG;AACrG,qGAAqG;AACrG,mGAAmG;AACnG,kGAAkG;AAClG,mCAAmC;AAEnC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,YAAY,GAChB,+NAA+N,CAAC;AAElO,MAAM,aAAa,GACjB,iIAAiI,CAAC;AAmCpI,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAChC,OAAO,CACL,eAAK,SAAS,EAAC,yCAAyC,aACrD,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAC5E,CAAC,CAAC,CAAC,CACF,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,eACtB,KAAK,CAAC,IAAI,IAAI,SAAS,qBACjB,SAAS,GAC1B,CACH,EACD,cAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,YAC9D,KAAK,CAAC,QAAQ,GACX,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["\"use client\";\n\n// A whole-row action that can still hold controls of its own (FRONTEND-001, FRONTEND-203). A row can\n// never be a single <button> or <a>: a control inside it would be nested in the row's target. So the\n// target is a sibling laid over the row, named by the row's content, and the content sits above it\n// letting clicks through everywhere but on its own controls. The target comes first in tab order,\n// then any control inside the row.\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils.js\";\n\nconst TARGET_CLASS =\n \"peer absolute inset-0 w-full cursor-pointer transition-colors duration-[var(--motion-fast)] ease-[var(--motion-ease)] group-hover/action-row:bg-accent disabled:cursor-default disabled:group-hover/action-row:bg-transparent\";\n\nconst CONTENT_CLASS =\n \"relative pointer-events-none peer-disabled:opacity-70 [&_:is(a,button,input,select,textarea,[role=button])]:pointer-events-auto\";\n\n/** What the app's link element must carry to be a row's link target. */\nexport interface ActionRowLinkTargetProps {\n className: string;\n \"aria-labelledby\": string;\n}\n\ninterface ActionRowCommonProps {\n /** Layout of the content (padding, flex, borders). */\n className?: string;\n children: React.ReactNode;\n}\n\nexport interface ActionRowButtonProps extends ActionRowCommonProps {\n onClick: () => void;\n disabled?: boolean;\n /** The row's own action is in flight. */\n busy?: boolean;\n renderLink?: never;\n}\n\nexport interface ActionRowLinkProps extends ActionRowCommonProps {\n /**\n * Renders the row's target as the app's own link element (its guarded in-app link), spreading\n * the given props onto it. The link takes no children: the row's content names it.\n */\n renderLink: (target: ActionRowLinkTargetProps) => React.ReactElement;\n onClick?: never;\n disabled?: never;\n busy?: never;\n}\n\nexport type ActionRowProps = ActionRowButtonProps | ActionRowLinkProps;\n\nexport function ActionRow(props: ActionRowProps) {\n const contentId = React.useId();\n return (\n <div className=\"ui-action-row group/action-row relative\">\n {props.renderLink ? (\n props.renderLink({ className: TARGET_CLASS, \"aria-labelledby\": contentId })\n ) : (\n <button\n type=\"button\"\n className={TARGET_CLASS}\n onClick={props.onClick}\n disabled={props.disabled ?? false}\n aria-busy={props.busy || undefined}\n aria-labelledby={contentId}\n />\n )}\n <div id={contentId} className={cn(CONTENT_CLASS, props.className)}>\n {props.children}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"action-row.js","sourceRoot":"","sources":["../../../src/react/components/action-row.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,+FAA+F;AAE/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,YAAY,GAChB,+NAA+N,CAAC;AAElO,MAAM,aAAa,GACjB,iIAAiI,CAAC;AA4BpI,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAChC,OAAO,CACL,eAAK,SAAS,EAAC,yCAAyC,aACrD,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAC5E,CAAC,CAAC,CAAC,CACF,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,eACtB,KAAK,CAAC,IAAI,IAAI,SAAS,qBACjB,SAAS,GAC1B,CACH,EACD,cAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,YAC9D,KAAK,CAAC,QAAQ,GACX,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["'use client';\n\n// A row is never one <button> or <a>: a control inside it would be nested in the row's target.\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils.js';\n\nconst TARGET_CLASS =\n 'peer absolute inset-0 w-full cursor-pointer transition-colors duration-[var(--motion-fast)] ease-[var(--motion-ease)] group-hover/action-row:bg-accent disabled:cursor-default disabled:group-hover/action-row:bg-transparent';\n\nconst CONTENT_CLASS =\n 'relative pointer-events-none peer-disabled:opacity-70 [&_:is(a,button,input,select,textarea,[role=button])]:pointer-events-auto';\n\nexport interface ActionRowLinkTargetProps {\n className: string;\n 'aria-labelledby': string;\n}\n\ninterface ActionRowCommonProps {\n className?: string;\n children: React.ReactNode;\n}\n\nexport interface ActionRowButtonProps extends ActionRowCommonProps {\n onClick: () => void;\n disabled?: boolean;\n busy?: boolean;\n renderLink?: never;\n}\n\nexport interface ActionRowLinkProps extends ActionRowCommonProps {\n renderLink: (target: ActionRowLinkTargetProps) => React.ReactElement;\n onClick?: never;\n disabled?: never;\n busy?: never;\n}\n\nexport type ActionRowProps = ActionRowButtonProps | ActionRowLinkProps;\n\nexport function ActionRow(props: ActionRowProps) {\n const contentId = React.useId();\n return (\n <div className=\"ui-action-row group/action-row relative\">\n {props.renderLink ? (\n props.renderLink({ className: TARGET_CLASS, 'aria-labelledby': contentId })\n ) : (\n <button\n type=\"button\"\n className={TARGET_CLASS}\n onClick={props.onClick}\n disabled={props.disabled ?? false}\n aria-busy={props.busy || undefined}\n aria-labelledby={contentId}\n />\n )}\n <div id={contentId} className={cn(CONTENT_CLASS, props.className)}>\n {props.children}\n </div>\n </div>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
- import * as React from "react";
2
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
1
+ import * as React from 'react';
2
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
3
3
  declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
4
4
  declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
5
  declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../../src/react/components/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAA;AAMpE,QAAA,MAAM,WAAW,iDAA4B,CAAA;AAC7C,QAAA,MAAM,kBAAkB,wHAA+B,CAAA;AACvD,QAAA,MAAM,iBAAiB,uDAA8B,CAAA;AAErD,QAAA,MAAM,kBAAkB,wKAYtB,CAAA;AAGF,QAAA,MAAM,kBAAkB,wKAmBtB,CAAA;AAGF,QAAA,MAAM,iBAAiB;8BAGpB,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAKtC,CAAA;AAGD,QAAA,MAAM,iBAAiB;8BAGpB,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,gBAAgB,8KASpB,CAAA;AAGF,QAAA,MAAM,sBAAsB,wLAS1B,CAAA;AAGF,QAAA,MAAM,iBAAiB,6KASrB,CAAA;AAGF,QAAA,MAAM,iBAAiB,6KASrB,CAAA;AAGF,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,CAAA"}
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../../src/react/components/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AAMrE,QAAA,MAAM,WAAW,iDAA4B,CAAC;AAC9C,QAAA,MAAM,kBAAkB,wHAA+B,CAAC;AACxD,QAAA,MAAM,iBAAiB,uDAA8B,CAAC;AAEtD,QAAA,MAAM,kBAAkB,wKAYtB,CAAC;AAGH,QAAA,MAAM,kBAAkB,wKAmBtB,CAAC;AAGH,QAAA,MAAM,iBAAiB;8BAA6B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAEvF,CAAC;AAGF,QAAA,MAAM,iBAAiB;8BAA6B,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAKvF,CAAC;AAGF,QAAA,MAAM,gBAAgB,8KASpB,CAAC;AAGH,QAAA,MAAM,sBAAsB,wLAS1B,CAAC;AAGH,QAAA,MAAM,iBAAiB,6KAKrB,CAAC;AAGH,QAAA,MAAM,iBAAiB,6KASrB,CAAC;AAGH,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,CAAC"}
@@ -1,31 +1,31 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
5
- import { cn } from "../../lib/utils.js";
6
- import { buttonVariants } from "./button.js";
7
- import { useOpenerFocus } from "./opener-focus.js";
3
+ import * as React from 'react';
4
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
5
+ import { cn } from '../../lib/utils.js';
6
+ import { buttonVariants } from './button.js';
7
+ import { useOpenerFocus } from './opener-focus.js';
8
8
  const AlertDialog = AlertDialogPrimitive.Root;
9
9
  const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
10
10
  const AlertDialogPortal = AlertDialogPrimitive.Portal;
11
- const AlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Overlay, { className: cn("fixed inset-0 z-50 bg-[color:var(--scrim)] duration-[var(--motion-base)] ease-[var(--motion-ease)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className), ...props, ref: ref })));
11
+ const AlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Overlay, { className: cn('fixed inset-0 z-50 bg-[color:var(--scrim)] duration-[var(--motion-base)] ease-[var(--motion-ease)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', className), ...props, ref: ref })));
12
12
  AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
13
13
  const AlertDialogContent = React.forwardRef(({ className, onOpenAutoFocus, onCloseAutoFocus, ...props }, ref) => {
14
14
  const openerFocus = useOpenerFocus({ onOpenAutoFocus, onCloseAutoFocus });
15
- return (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { ref: ref, className: cn("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 elevation-raised duration-[var(--motion-base)] ease-[var(--motion-ease)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg [&>*]:min-w-0", className), ...props, ...openerFocus })] }));
15
+ return (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { ref: ref, className: cn('fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 elevation-raised duration-[var(--motion-base)] ease-[var(--motion-ease)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg [&>*]:min-w-0', className), ...props, ...openerFocus })] }));
16
16
  });
17
17
  AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
18
- const AlertDialogHeader = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props }));
19
- AlertDialogHeader.displayName = "AlertDialogHeader";
20
- const AlertDialogFooter = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props }));
21
- AlertDialogFooter.displayName = "AlertDialogFooter";
22
- const AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Title, { ref: ref, className: cn("text-lg font-semibold break-words", className), ...props })));
18
+ const AlertDialogHeader = ({ className, ...props }) => (_jsx("div", { className: cn('flex flex-col space-y-2 text-center sm:text-left', className), ...props }));
19
+ AlertDialogHeader.displayName = 'AlertDialogHeader';
20
+ const AlertDialogFooter = ({ className, ...props }) => (_jsx("div", { className: cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className), ...props }));
21
+ AlertDialogFooter.displayName = 'AlertDialogFooter';
22
+ const AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Title, { ref: ref, className: cn('text-lg font-semibold break-words', className), ...props })));
23
23
  AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
24
- const AlertDialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Description, { ref: ref, className: cn("text-sm text-muted-foreground break-words", className), ...props })));
24
+ const AlertDialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Description, { ref: ref, className: cn('text-sm text-muted-foreground break-words', className), ...props })));
25
25
  AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
26
26
  const AlertDialogAction = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Action, { ref: ref, className: cn(buttonVariants(), className), ...props })));
27
27
  AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
28
- const AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Cancel, { ref: ref, className: cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className), ...props })));
28
+ const AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => (_jsx(AlertDialogPrimitive.Cancel, { ref: ref, className: cn(buttonVariants({ variant: 'outline' }), 'mt-2 sm:mt-0', className), ...props })));
29
29
  AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
30
30
  export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel, };
31
31
  //# sourceMappingURL=alert-dialog.js.map