cursedbelt 5.23.0 → 5.26.0

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 (131) hide show
  1. package/dist/react/components/Badge.d.ts +6 -6
  2. package/dist/react/components/Badge.d.ts.map +1 -1
  3. package/dist/react/components/Badge.js +13 -5
  4. package/dist/react/components/Badge.js.map +1 -1
  5. package/dist/react/components/DataTable/CardView.d.ts +6 -2
  6. package/dist/react/components/DataTable/CardView.d.ts.map +1 -1
  7. package/dist/react/components/DataTable/CardView.js +6 -5
  8. package/dist/react/components/DataTable/CardView.js.map +1 -1
  9. package/dist/react/components/DataTable/DataTable.d.ts +165 -5
  10. package/dist/react/components/DataTable/DataTable.d.ts.map +1 -1
  11. package/dist/react/components/DataTable/DataTable.js +445 -114
  12. package/dist/react/components/DataTable/DataTable.js.map +1 -1
  13. package/dist/react/components/DataTable/RowActions.d.ts +3 -1
  14. package/dist/react/components/DataTable/RowActions.d.ts.map +1 -1
  15. package/dist/react/components/DataTable/RowActions.js +9 -2
  16. package/dist/react/components/DataTable/RowActions.js.map +1 -1
  17. package/dist/react/components/DataTable/SortHeader.d.ts +4 -1
  18. package/dist/react/components/DataTable/SortHeader.d.ts.map +1 -1
  19. package/dist/react/components/DataTable/SortHeader.js +7 -1
  20. package/dist/react/components/DataTable/SortHeader.js.map +1 -1
  21. package/dist/react/components/DataTable/cells/CellRenderer.d.ts.map +1 -1
  22. package/dist/react/components/DataTable/cells/CellRenderer.js +4 -1
  23. package/dist/react/components/DataTable/cells/CellRenderer.js.map +1 -1
  24. package/dist/react/components/DataTable/index.d.ts +2 -2
  25. package/dist/react/components/DataTable/index.d.ts.map +1 -1
  26. package/dist/react/components/DataTable/index.js +1 -1
  27. package/dist/react/components/DataTable/index.js.map +1 -1
  28. package/dist/react/components/DataTable/lazyPart.d.ts +27 -0
  29. package/dist/react/components/DataTable/lazyPart.d.ts.map +1 -0
  30. package/dist/react/components/DataTable/lazyPart.js +46 -0
  31. package/dist/react/components/DataTable/lazyPart.js.map +1 -0
  32. package/dist/react/components/DataTable/types.d.ts +106 -0
  33. package/dist/react/components/DataTable/types.d.ts.map +1 -1
  34. package/dist/react/components/DataTable/types.js.map +1 -1
  35. package/dist/react/components/auth/SignInCard.d.ts +49 -0
  36. package/dist/react/components/auth/SignInCard.d.ts.map +1 -0
  37. package/dist/react/components/auth/SignInCard.js +21 -0
  38. package/dist/react/components/auth/SignInCard.js.map +1 -0
  39. package/dist/react/components/auth/index.d.ts +1 -0
  40. package/dist/react/components/auth/index.d.ts.map +1 -1
  41. package/dist/react/components/auth/index.js +1 -0
  42. package/dist/react/components/auth/index.js.map +1 -1
  43. package/dist/react/deep-link/index.d.ts +1 -1
  44. package/dist/react/deep-link/index.d.ts.map +1 -1
  45. package/dist/react/deep-link/index.js.map +1 -1
  46. package/dist/react/deep-link/useDeepLink.d.ts +21 -15
  47. package/dist/react/deep-link/useDeepLink.d.ts.map +1 -1
  48. package/dist/react/deep-link/useDeepLink.js +8 -5
  49. package/dist/react/deep-link/useDeepLink.js.map +1 -1
  50. package/dist/react/file-tree/FileTree.d.ts +14 -1
  51. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  52. package/dist/react/file-tree/FileTree.js +2 -2
  53. package/dist/react/file-tree/FileTree.js.map +1 -1
  54. package/dist/react/file-tree/fileTree.css +8 -0
  55. package/dist/react/filter-rail/FilterRail.d.ts +31 -1
  56. package/dist/react/filter-rail/FilterRail.d.ts.map +1 -1
  57. package/dist/react/filter-rail/FilterRail.js +20 -5
  58. package/dist/react/filter-rail/FilterRail.js.map +1 -1
  59. package/dist/react/filter-rail/RailSection.d.ts +56 -0
  60. package/dist/react/filter-rail/RailSection.d.ts.map +1 -0
  61. package/dist/react/filter-rail/RailSection.js +108 -0
  62. package/dist/react/filter-rail/RailSection.js.map +1 -0
  63. package/dist/react/filter-rail/index.d.ts +2 -1
  64. package/dist/react/filter-rail/index.d.ts.map +1 -1
  65. package/dist/react/filter-rail/index.js +2 -1
  66. package/dist/react/filter-rail/index.js.map +1 -1
  67. package/dist/react/hooks/useScrollMemory.d.ts +6 -0
  68. package/dist/react/hooks/useScrollMemory.d.ts.map +1 -1
  69. package/dist/react/hooks/useScrollMemory.js +11 -0
  70. package/dist/react/hooks/useScrollMemory.js.map +1 -1
  71. package/dist/react/index.d.ts +3 -1
  72. package/dist/react/index.d.ts.map +1 -1
  73. package/dist/react/index.js +6 -1
  74. package/dist/react/index.js.map +1 -1
  75. package/dist/react/media-gallery/preferenceBus.d.ts +10 -0
  76. package/dist/react/media-gallery/preferenceBus.d.ts.map +1 -1
  77. package/dist/react/media-gallery/preferenceBus.js +24 -0
  78. package/dist/react/media-gallery/preferenceBus.js.map +1 -1
  79. package/dist/react/media-gallery/preferenceSync.d.ts.map +1 -1
  80. package/dist/react/media-gallery/preferenceSync.js +3 -0
  81. package/dist/react/media-gallery/preferenceSync.js.map +1 -1
  82. package/dist/react/nav/TopBar.d.ts +8 -1
  83. package/dist/react/nav/TopBar.d.ts.map +1 -1
  84. package/dist/react/nav/TopBar.js +2 -2
  85. package/dist/react/nav/TopBar.js.map +1 -1
  86. package/dist/styles-areas/analytics.css +18 -15
  87. package/dist/styles-areas/core.css +8 -7
  88. package/dist/styles-areas/data-table.css +13 -10
  89. package/dist/styles-areas/filter-rail.css +6 -5
  90. package/dist/styles-utilities.css +90 -0
  91. package/package.json +3 -3
  92. package/src/react/components/Badge.capsule.spec.ts +178 -0
  93. package/src/react/components/Badge.tsx +13 -5
  94. package/src/react/components/DataTable/CardView.tsx +8 -1
  95. package/src/react/components/DataTable/DataTable.spec.tsx +6 -2
  96. package/src/react/components/DataTable/DataTable.tsx +770 -86
  97. package/src/react/components/DataTable/RowActions.tsx +18 -10
  98. package/src/react/components/DataTable/SortHeader.tsx +19 -0
  99. package/src/react/components/DataTable/cells/CellRenderer.tsx +2 -0
  100. package/src/react/components/DataTable/index.ts +10 -1
  101. package/src/react/components/DataTable/lazyPart.spec.tsx +99 -0
  102. package/src/react/components/DataTable/lazyPart.tsx +58 -0
  103. package/src/react/components/DataTable/rowHooks.spec.tsx +289 -0
  104. package/src/react/components/DataTable/selection.spec.tsx +193 -0
  105. package/src/react/components/DataTable/tableSystem.spec.tsx +6 -2
  106. package/src/react/components/DataTable/types.ts +110 -0
  107. package/src/react/components/DataTable/virtualize.spec.tsx +38 -2
  108. package/src/react/components/auth/SignInCard.spec.tsx +48 -0
  109. package/src/react/components/auth/SignInCard.tsx +90 -0
  110. package/src/react/components/auth/index.ts +1 -0
  111. package/src/react/deep-link/index.ts +1 -0
  112. package/src/react/deep-link/useDeepLink.spec.tsx +31 -0
  113. package/src/react/deep-link/useDeepLink.tsx +31 -11
  114. package/src/react/file-tree/FileTree.tsx +15 -1
  115. package/src/react/file-tree/fileTree.css +8 -0
  116. package/src/react/filter-rail/FilterRail.tsx +93 -26
  117. package/src/react/filter-rail/RailSection.spec.tsx +156 -0
  118. package/src/react/filter-rail/RailSection.tsx +216 -0
  119. package/src/react/filter-rail/index.ts +2 -0
  120. package/src/react/hooks/useScrollMemory.ts +11 -0
  121. package/src/react/index.ts +10 -0
  122. package/src/react/media-gallery/MediaGallery.spec.tsx +9 -3
  123. package/src/react/media-gallery/preferenceBus.ts +28 -0
  124. package/src/react/media-gallery/preferenceSync.ts +3 -0
  125. package/src/react/nav/TopBar.spec.tsx +11 -0
  126. package/src/react/nav/TopBar.tsx +9 -1
  127. package/src/styles-areas/analytics.css +18 -15
  128. package/src/styles-areas/core.css +8 -7
  129. package/src/styles-areas/data-table.css +13 -10
  130. package/src/styles-areas/filter-rail.css +6 -5
  131. package/src/styles-utilities.css +90 -0
@@ -1,3 +1,4 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
1
2
  import type { FieldOption } from '../FieldInput.js';
2
3
  export type { FieldOption } from '../FieldInput.js';
3
4
  /**
@@ -54,9 +55,114 @@ export interface ColDef<TRow = Record<string, unknown>> {
54
55
  /** Display-only formatter for table/card cells — may differ from the edit input.
55
56
  * The base `text` renderer uses it; custom renderers may read it too. */
56
57
  displayValue?: (value: unknown, row: TRow) => string;
58
+ /**
59
+ * Draw this column's cell yourself — `(row) => <StarRating … />`. Wins over `type` in every
60
+ * view the table has (grid, tablet list, phone card, card view), because it is read in the one
61
+ * seam they all pass through (`CellRenderer`).
62
+ *
63
+ * 🔴 Why (forge task 2302): the only other route to app JSX in a cell was
64
+ * `registerCellRenderer(type, …)`, a GLOBAL registry keyed by a string — one entry per
65
+ * column per app, a name to collide on, and a renderer that cannot close over the component
66
+ * state it needs (apps/music's star rating writes back through the list's `onRate`). A
67
+ * render function is the shape of that need. `type` still decides the edit field and, unless
68
+ * `align` or `meta.numeric` says otherwise, the alignment.
69
+ */
70
+ render?: (row: TRow) => ReactNode;
71
+ /**
72
+ * Hide this column when the TABLE (its container, not the viewport) is narrower than:
73
+ * `'sm'` 42rem · `'md'` 56rem · `'lg'` 72rem. The header cell and the body cells go
74
+ * together, so a label never sits over another column's values. The column collapses to zero
75
+ * width rather than leaving the table, so rows that span it stay true (see `HIDE_BELOW_CLASS`).
76
+ *
77
+ * 🔴 Why (forge task 2302): the table's own narrow answer is `mobileCards`, which re-renders
78
+ * every loaded row as a card or a compact list — right for a record table, wrong for a
79
+ * five-thousand-row track list whose narrow form is the SAME rows with fewer columns. With
80
+ * `mobileCards={false}` this is how the grid sheds its least important columns instead.
81
+ * Container-sized, like the tiers, so a table in a narrow pane on a wide screen sheds them too.
82
+ * Applies to the grid; the card tiers already choose their own fields.
83
+ */
84
+ hideBelow?: 'sm' | 'md' | 'lg';
85
+ /**
86
+ * A header click on this column starts DESCENDING — for columns where "most" is the
87
+ * interesting end (plays, rating, date added, length). Sorting a play count ascending first
88
+ * is right for nobody.
89
+ */
90
+ sortDescFirst?: boolean;
91
+ /**
92
+ * Draw this column BEFORE the row-selection checkbox — a drag handle, which leads the row in
93
+ * every product that has both (Notion's ⋮⋮, Linear's grip). Leading columns keep their order
94
+ * among themselves, and are never the frozen column under `stickyFirstColumn`. Grid only.
95
+ *
96
+ * 🔴 Why (forge task 2302): apps/music's grab handle is the row's first cell by the owner's
97
+ * own draft (2026-09-18) — the thing that says "pick this up" sits at the edge the hand comes
98
+ * from, with the checkbox beside it. The selection column was always first, so a list that had
99
+ * both could not keep that order.
100
+ */
101
+ leading?: boolean;
102
+ }
103
+ /**
104
+ * Attributes and handlers for ONE body row — `DataTable`'s `getRowProps`. `data-*` included,
105
+ * which is what a browser test addresses a windowed row by.
106
+ */
107
+ export type DataTableRowProps = Omit<HTMLAttributes<HTMLElement>, 'children' | 'dangerouslySetInnerHTML'> & {
108
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
109
+ };
110
+ /**
111
+ * `DataTable`'s `selectAll` — the header box, owned by the caller. See the prop doc.
112
+ */
113
+ export interface DataTableSelectAll {
114
+ checked: boolean | 'indeterminate';
115
+ /** The box's accessible name AND its tooltip — say what a press will do. */
116
+ label: string;
117
+ /** `true` from an unchecked or indeterminate box, `false` from a checked one. */
118
+ onChange: (next: boolean) => void;
119
+ disabled?: boolean;
57
120
  }
58
121
  /** The view modes a page can switch a dataset between (table rows vs. card grid). */
59
122
  export type TableViewMode = 'table' | 'card';
60
123
  /** The alignment a column ACTUALLY gets: explicit `align` wins, else the type decides. */
61
124
  export declare function resolveColumnAlign<TRow>(col: ColDef<TRow>): 'left' | 'right';
125
+ /**
126
+ * `DataTable`'s `serverWindow` — the loaded rows are `[start, start + data.length)` of a
127
+ * result set of `total` rows the server holds. See the prop's doc for why each part is there.
128
+ */
129
+ export interface DataTableServerWindow {
130
+ /** The row number of `data[0]` within the whole result set. */
131
+ start: number;
132
+ /** How many rows the query matches — what the spacer and the scrollbar describe. */
133
+ total: number;
134
+ /** The viewport is within `reachRows` of the END of the loaded window, and there is more. */
135
+ onReachEnd?: () => void;
136
+ /** The viewport is within `reachRowsUp` of the START of a window that does not begin at 0. */
137
+ onReachStart?: () => void;
138
+ /** The viewport came to REST wholly outside the window; the argument is its first row. */
139
+ onNeedWindow?: (firstVisibleRow: number) => void;
140
+ /** Default 20 — generous, because the page has to arrive before the reader does. */
141
+ reachRows?: number;
142
+ /** Default 8 — tighter, so a reveal landing near a window's top does not cascade upward. */
143
+ reachRowsUp?: number;
144
+ /** How long the scroll must be still before `onNeedWindow` fires. Default 120 ms. */
145
+ settleMs?: number;
146
+ /**
147
+ * Every row's height in px — FIXED, never measured (see the prop doc for why). Defaults to
148
+ * `virtualize.estimateRowHeight`, else the density's row (44, or 36 compact). Cells must fit
149
+ * it: truncate, do not wrap.
150
+ */
151
+ rowHeight?: number;
152
+ }
153
+ /** `DataTable`'s imperative handle (`handleRef`). */
154
+ export interface DataTableHandle {
155
+ /** The box that scrolls — `null` until mounted, or when the table has no rows to show. */
156
+ readonly scrollElement: HTMLDivElement | null;
157
+ /**
158
+ * Scroll a row number over the WHOLE result set (a `serverWindow` row, loaded or not) into view.
159
+ * `align` defaults to `center`, `behavior` to `auto`. Returns the `scrollTop` it asked
160
+ * for — what a caller telling its own scrolls from the reader's compares against — or
161
+ * `null` when the table is not virtualized or not mounted.
162
+ */
163
+ scrollToIndex(index: number, options?: {
164
+ align?: 'start' | 'center' | 'end' | 'auto';
165
+ behavior?: 'auto' | 'smooth';
166
+ }): number | null;
167
+ }
62
168
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/react/components/DataTable/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,WAAW,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpD,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;gFAI4E;IAC5E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB;;;6DAGyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;+EAG2E;IAC3E,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;4EAGwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;gFAE4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mFAAmF;IACnF,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B;8EAC0E;IAC1E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC;CACtD;AAED,qFAAqF;AACrF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AA6B7C,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,CAI5E"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/react/components/DataTable/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/react/components/DataTable/types.ts"],"names":[],"mappings":"AAiEA;;;;;;;;;;;;;GAaG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,QAAQ;IACR,KAAK;IACL,OAAO;IACP,UAAU;IACV,UAAU;IACV,IAAI;IACJ,SAAS;IACT,UAAU;IACV,OAAO;IACP,SAAS;CACV,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,UAAU,kBAAkB,CAAO,GAAiB;IACxD,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IAChC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAC/C,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/react/components/DataTable/types.ts"],"names":[],"mappings":"AAkIA;;;;;;;;;;;;;GAaG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,QAAQ;IACR,KAAK;IACL,OAAO;IACP,UAAU;IACV,UAAU;IACV,IAAI;IACJ,SAAS;IACT,UAAU;IACV,OAAO;IACP,SAAS;CACV,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,UAAU,kBAAkB,CAAO,GAAiB;IACxD,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC;IAChC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAC/C,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface SignInCardProps {
3
+ /** The app's name — the card's heading. */
4
+ title: ReactNode;
5
+ /** One line on what the app is, under the heading. */
6
+ subtitle?: ReactNode;
7
+ /** Brand mark above the heading. */
8
+ logo?: ReactNode;
9
+ /** What the button does — a single-sign-on app passes `() => startSsoSignIn()`. */
10
+ onSignIn: () => void;
11
+ /**
12
+ * Why the last attempt came back here (a refused grant, an app the account has no
13
+ * access to). Rendered as a warning above the button; nothing when absent. A
14
+ * cursedauth app passes `takeSsoError()` read once at mount.
15
+ */
16
+ refusal?: ReactNode;
17
+ /** The warning's heading. Default "That sign-in did not go through". */
18
+ refusalTitle?: ReactNode;
19
+ /** The navigation has started — the button spins and cannot be pressed twice. */
20
+ busy?: boolean;
21
+ /**
22
+ * Signing in cannot work right now — the button is disabled and this is its
23
+ * tooltip (a control that cannot work is visible with the reason, never hidden).
24
+ */
25
+ disabledReason?: string;
26
+ /** Button label. Default "Sign in". */
27
+ label?: ReactNode;
28
+ /** Button tooltip. Default "Sign in with your account". */
29
+ tooltip?: string;
30
+ /** Anything the app must say between the warning and the button. */
31
+ children?: ReactNode;
32
+ /** A line under the card, outside it. */
33
+ footer?: ReactNode;
34
+ }
35
+ /**
36
+ * The fleet's signed-out front door: {@link AuthCard}'s aurora page chrome, an
37
+ * optional refusal {@link Alert}, and one full-width primary button.
38
+ *
39
+ * Seven apps drew this card by hand — the same aurora, the same glass box, the same
40
+ * button — each with its own radius, padding, blur and its own idea of how a refused
41
+ * sign-in looks (a bare red line in two, a warning box in one, nothing in the rest).
42
+ * The owner, 2026-09-28: *"General components like containers and cards should not
43
+ * be hand made and should all be using standardized versions in cb."*
44
+ *
45
+ * It knows nothing about HOW signing in works — `onSignIn` and `refusal` are the
46
+ * app's — so it has no dependency on cursedauth and a password app can use it too.
47
+ */
48
+ export declare function SignInCard({ title, subtitle, logo, onSignIn, refusal, refusalTitle, busy, disabledReason, label, tooltip, children, footer, }: SignInCardProps): import("react").JSX.Element;
49
+ //# sourceMappingURL=SignInCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInCard.d.ts","sourceRoot":"","sources":["../../../../src/react/components/auth/SignInCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,KAAK,EAAE,SAAS,CAAC;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,oCAAoC;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wEAAwE;IACxE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,yCAAyC;IACzC,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAgD,EAChD,IAAY,EACZ,cAAc,EACd,KAAiB,EACjB,OAAqC,EACrC,QAAQ,EACR,MAAM,GACP,EAAE,eAAe,+BAwBjB"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Alert } from '../Alert.js';
3
+ import { Button } from '../Button.js';
4
+ import { AuthCard } from './AuthCard.js';
5
+ /**
6
+ * The fleet's signed-out front door: {@link AuthCard}'s aurora page chrome, an
7
+ * optional refusal {@link Alert}, and one full-width primary button.
8
+ *
9
+ * Seven apps drew this card by hand — the same aurora, the same glass box, the same
10
+ * button — each with its own radius, padding, blur and its own idea of how a refused
11
+ * sign-in looks (a bare red line in two, a warning box in one, nothing in the rest).
12
+ * The owner, 2026-09-28: *"General components like containers and cards should not
13
+ * be hand made and should all be using standardized versions in cb."*
14
+ *
15
+ * It knows nothing about HOW signing in works — `onSignIn` and `refusal` are the
16
+ * app's — so it has no dependency on cursedauth and a password app can use it too.
17
+ */
18
+ export function SignInCard({ title, subtitle, logo, onSignIn, refusal, refusalTitle = 'That sign-in did not go through', busy = false, disabledReason, label = 'Sign in', tooltip = 'Sign in with your account', children, footer, }) {
19
+ return (_jsx(AuthCard, { aurora: true, title: title, subtitle: subtitle, logo: logo, footer: footer, children: _jsxs("div", { className: 'flex flex-col gap-4', children: [refusal ? (_jsx(Alert, { tone: 'warning', title: refusalTitle, children: refusal })) : null, children, _jsx(Button, { className: 'w-full', variant: 'primary', loading: busy, disabled: disabledReason !== undefined, tooltip: disabledReason ?? tooltip, tooltipMobile: disabledReason ? 'icon' : 'off', onClick: onSignIn, children: label })] }) }));
20
+ }
21
+ //# sourceMappingURL=SignInCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInCard.js","sourceRoot":"","sources":["../../../../src/react/components/auth/SignInCard.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAoCzC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,YAAY,GAAG,iCAAiC,EAChD,IAAI,GAAG,KAAK,EACZ,cAAc,EACd,KAAK,GAAG,SAAS,EACjB,OAAO,GAAG,2BAA2B,EACrC,QAAQ,EACR,MAAM,GACU;IAChB,OAAO,CACL,KAAC,QAAQ,IAAC,MAAM,QAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAC3E,eAAK,SAAS,EAAC,qBAAqB,aACjC,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,KAAK,IAAC,IAAI,EAAC,SAAS,EAAC,KAAK,EAAE,YAAY,YACtC,OAAO,GACF,CACT,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,EACT,KAAC,MAAM,IACL,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,cAAc,KAAK,SAAS,EACtC,OAAO,EAAE,cAAc,IAAI,OAAO,EAClC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAC9C,OAAO,EAAE,QAAQ,YAEhB,KAAK,GACC,IACL,GACG,CACZ,CAAC;AACJ,CAAC"}
@@ -10,6 +10,7 @@ export { PasswordStrengthMeter, type PasswordStrengthMeterProps } from './Passwo
10
10
  export { type PasswordStrengthLevel, type PasswordStrengthResult, scorePasswordStrength, } from './passwordStrength.js';
11
11
  export { RegisterForm, type RegisterFormProps, type RegisterValues } from './RegisterForm.js';
12
12
  export { SetInitialPassword, type SetInitialPasswordProps, type SetInitialPasswordValues, } from './SetInitialPassword.js';
13
+ export { SignInCard, type SignInCardProps } from './SignInCard.js';
13
14
  export { SignupForm, type SignupFormProps, type SignupValues } from './SignupForm.js';
14
15
  export { TotpEntry, type TotpEntryProps, type TotpValues } from './TotpEntry.js';
15
16
  export type { AuthError, AuthErrorMapper, AuthNavProps, AuthSubmitHandler } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/components/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjF,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/components/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjF,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
@@ -10,6 +10,7 @@ export { PasswordStrengthMeter } from './PasswordStrengthMeter.js';
10
10
  export { scorePasswordStrength, } from './passwordStrength.js';
11
11
  export { RegisterForm } from './RegisterForm.js';
12
12
  export { SetInitialPassword, } from './SetInitialPassword.js';
13
+ export { SignInCard } from './SignInCard.js';
13
14
  export { SignupForm } from './SignupForm.js';
14
15
  export { TotpEntry } from './TotpEntry.js';
15
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/components/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,iBAAiB,EAEjB,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAyC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAmC,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAGL,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAA+C,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EACL,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAA2C,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,SAAS,EAAwC,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/react/components/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,iBAAiB,EAEjB,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAyC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAmC,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAGL,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAA+C,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EACL,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAA2C,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,SAAS,EAAwC,MAAM,gBAAgB,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { defineDeepLinks, type DeepLinkLocation, type DeepLinkMode, type DeepLinkPatch, type DeepLinks, type DeepLinksOptions, type ViewSpec, } from './links.js';
2
2
  export { createResumeClient, resumeHrefOf, useResume, type ResumeClient, type ResumeClientOptions, type UseResumeOptions, type UseResumeResult, } from './resume.js';
3
- export { DeepLinkProvider, useDeepLink, type DeepLinkContextValue, type DeepLinkProviderProps, type NavItemProps, type UseDeepLinkResult, } from './useDeepLink.js';
3
+ export { DeepLinkProvider, useDeepLink, type DeepLinkContextValue, type DeepLinkNavigateOptions, type DeepLinkProviderProps, type NavItemProps, type UseDeepLinkResult, } from './useDeepLink.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/deep-link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/deep-link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/deep-link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAOhB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,GAKV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,GAKZ,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/deep-link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAOhB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,SAAS,GAKV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,GAMZ,MAAM,kBAAkB,CAAC"}
@@ -15,6 +15,22 @@
15
15
  */
16
16
  import React from 'react';
17
17
  import type { DeepLinkLocation, DeepLinkPatch, DeepLinks } from './links.js';
18
+ /**
19
+ * How a navigation writes history.
20
+ *
21
+ * - `replace` rewrites the CURRENT entry's URL instead of pushing a new one. 🔴 It keeps
22
+ * `history.state`: the URL is the only thing a replace changes, and the state is where other
23
+ * code files what it knows about the entry — `useScrollMemory`'s id above all. Replacing it
24
+ * with `null` (≤ 5.23.0) threw that id away, so a cursor written in place (music's `track=`)
25
+ * read as a fresh arrival and sent the list to the top.
26
+ * - `fresh` (with `replace`) says the replace puts a DIFFERENT list on screen — a search typed,
27
+ * a filter changed — so the entry's remembered scroll offset no longer applies and the list
28
+ * starts at its top. Only the scroll memory's key is dropped; the rest of the state stays.
29
+ */
30
+ export interface DeepLinkNavigateOptions {
31
+ replace?: boolean;
32
+ fresh?: boolean;
33
+ }
18
34
  export interface DeepLinkContextValue<V extends string = string> {
19
35
  links: DeepLinks<V>;
20
36
  location: DeepLinkLocation<V>;
@@ -32,13 +48,9 @@ export interface DeepLinkContextValue<V extends string = string> {
32
48
  * made resume a no-op on the one entry it exists for.
33
49
  */
34
50
  entryWasBare: boolean;
35
- navigate(patch: DeepLinkPatch<V>, options?: {
36
- replace?: boolean;
37
- }): void;
51
+ navigate(patch: DeepLinkPatch<V>, options?: DeepLinkNavigateOptions): void;
38
52
  /** Navigate to a whole location (what resume restores). */
39
- navigateTo(location: DeepLinkLocation<V>, options?: {
40
- replace?: boolean;
41
- }): void;
53
+ navigateTo(location: DeepLinkLocation<V>, options?: DeepLinkNavigateOptions): void;
42
54
  hrefFor(patch: DeepLinkPatch<V>): string;
43
55
  }
44
56
  export interface DeepLinkProviderProps<V extends string> {
@@ -60,17 +72,11 @@ export interface NavItemProps {
60
72
  }
61
73
  export interface UseDeepLinkResult<V extends string> extends DeepLinkContextValue<V> {
62
74
  /** Merge a patch into the current view's query state. `null` removes a key. */
63
- setParams(params: DeepLinkPatch<V>['params'], options?: {
64
- replace?: boolean;
65
- }): void;
75
+ setParams(params: DeepLinkPatch<V>['params'], options?: DeepLinkNavigateOptions): void;
66
76
  /** Replace the segments below the current view — the selection. */
67
- setPath(path: readonly string[], options?: {
68
- replace?: boolean;
69
- }): void;
77
+ setPath(path: readonly string[], options?: DeepLinkNavigateOptions): void;
70
78
  /** Go to a view's ROOT. This is what a nav item does, always. */
71
- goToRoot(view: V, options?: {
72
- replace?: boolean;
73
- }): void;
79
+ goToRoot(view: V, options?: DeepLinkNavigateOptions): void;
74
80
  /** `href` + `onClick` for a nav control, with the no-op case handled. */
75
81
  navItemProps(view: V): NavItemProps;
76
82
  /** True when the URL the page was ENTERED with said nothing about where the
@@ -1 +1 @@
1
- {"version":3,"file":"useDeepLink.d.ts","sourceRoot":"","sources":["../../../src/react/deep-link/useDeepLink.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC7D,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,2DAA2D;IAC3D,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjF,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;CAC1C;AAOD,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM;IACrD,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,EACjD,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAgB,GACjB,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CA0J/C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAClF,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACrF,mEAAmE;IACnE,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,yEAAyE;IACzE,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC;IACpC;4EACwE;IACxE,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,CA0B7E"}
1
+ {"version":3,"file":"useDeepLink.d.ts","sourceRoot":"","sources":["../../../src/react/deep-link/useDeepLink.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC7D,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3E,2DAA2D;IAC3D,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACnF,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;CAC1C;AAOD,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM;IACrD,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,EACjD,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAgB,GACjB,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CA4J/C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IAClF,+EAA+E;IAC/E,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACvF,mEAAmE;IACnE,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC1E,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC3D,yEAAyE;IACzE,YAAY,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC;IACpC;4EACwE;IACxE,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,CA0B7E"}
@@ -15,6 +15,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
15
15
  * the screen was already the current URL, so no event fired and nothing closed.
16
16
  */
17
17
  import React from 'react';
18
+ import { forgetScrollEntry } from '../hooks/useScrollMemory.js';
18
19
  const DeepLinkContext = React.createContext(null);
19
20
  const currentHref = () => typeof window === 'undefined' ? '/' : `${window.location.pathname}${window.location.search}${window.location.hash}`;
20
21
  export function DeepLinkProvider({ links, children, initialHref, normalize = true, }) {
@@ -117,15 +118,17 @@ export function DeepLinkProvider({ links, children, initialHref, normalize = tru
117
118
  const url = links.mode === 'hash'
118
119
  ? `${window.location.pathname}${window.location.search}${canonical}`
119
120
  : canonical;
120
- window.history.replaceState(null, '', url);
121
+ window.history.replaceState(window.history.state, '', url);
121
122
  }, [links, normalize]);
122
- const commit = React.useCallback((next, replace) => {
123
+ const commit = React.useCallback((next, options) => {
124
+ const replace = options?.replace === true;
123
125
  navigatedSelf.current = true;
124
126
  const href = links.format(next);
125
127
  if (typeof window !== 'undefined') {
126
128
  const url = links.mode === 'hash' ? `${window.location.pathname}${window.location.search}${href}` : href;
127
129
  if (replace) {
128
- window.history.replaceState(null, '', url);
130
+ const kept = window.history.state;
131
+ window.history.replaceState(options?.fresh ? forgetScrollEntry(kept) : kept, '', url);
129
132
  }
130
133
  else if (links.mode === 'hash') {
131
134
  // Assigning the hash is what pushes a history entry a reader can walk
@@ -155,8 +158,8 @@ export function DeepLinkProvider({ links, children, initialHref, normalize = tru
155
158
  nonce: state.nonce,
156
159
  entryWasBare,
157
160
  // Every one of these reads the LIVE location, not this render's — see `currentLocation`.
158
- navigate: (patch, options) => commit(links.apply(currentLocation.current, patch), options?.replace === true),
159
- navigateTo: (location, options) => commit(location, options?.replace === true),
161
+ navigate: (patch, options) => commit(links.apply(currentLocation.current, patch), options),
162
+ navigateTo: (location, options) => commit(location, options),
160
163
  hrefFor: (patch) => links.format(links.apply(currentLocation.current, patch)),
161
164
  }), [commit, entryWasBare, links, state]);
162
165
  return (_jsx(DeepLinkContext.Provider, { value: value, children: children }));
@@ -1 +1 @@
1
- {"version":3,"file":"useDeepLink.js","sourceRoot":"","sources":["../../../src/react/deep-link/useDeepLink.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDeepLink.js","sourceRoot":"","sources":["../../../src/react/deep-link/useDeepLink.tsx"],"names":[],"mappings":"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"}
@@ -509,6 +509,19 @@ export interface FileTreeProps {
509
509
  empty?: ReactNode;
510
510
  ariaLabel?: string;
511
511
  className?: string;
512
+ /**
513
+ * Who scrolls the tree. `'own'` (the default): the tree fills the height it is given and
514
+ * scrolls inside its own frame. `'host'`: the tree draws at its FULL height inside a scroller
515
+ * the host already has — a sidebar with sections above it — and its frame never scrolls.
516
+ *
517
+ * 🔴 `'host'` is not cosmetic. A frame that is `overflow-y: auto; overscroll-behavior: contain`
518
+ * but has nothing to scroll still CATCHES the wheel and, being `contain`, hands it to nobody —
519
+ * measured in Chromium, 2026-09-28: a wheel over such a box moved its scrolling parent 0px
520
+ * (and 200px with `auto`). Owner, music, the same day: *"To see the bottom Folders I have to
521
+ * hover outside of Folders and scroll down."* So a tree laid out at its natural height inside
522
+ * a scrolling rail must say so, and then its frame is not a scroll container at all.
523
+ */
524
+ scroll?: 'own' | 'host';
512
525
  }
513
- export declare function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelectionChange, onOpen, collapsed: collapsedProp, onCollapsedChange, expandOnReveal, onRevealExpand, pinnedIds, onPinnedChange, pinnedLabel, onMove, onMoveMany, allowReorder, lockedReason, canDrop, takesDrop, unavailableReason, renamingId, onRenameStart, onRename, onRenameCancel, onDelete, onDeleteMany, onCopy, canCopy, draft, onDraftCommit, onDraftCancel, draftPlaceholder, onWrapStart, canWrap, onRowMenu, renderTools, renderIcon, thumbnailTransform, renderAccessory, onDropExternal, acceptsExternalDrag, accessCopy, nameTooltips, markPath, filter, empty, ariaLabel, className, }: FileTreeProps): JSX.Element;
526
+ export declare function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelectionChange, onOpen, collapsed: collapsedProp, onCollapsedChange, expandOnReveal, onRevealExpand, pinnedIds, onPinnedChange, pinnedLabel, onMove, onMoveMany, allowReorder, lockedReason, canDrop, takesDrop, unavailableReason, renamingId, onRenameStart, onRename, onRenameCancel, onDelete, onDeleteMany, onCopy, canCopy, draft, onDraftCommit, onDraftCancel, draftPlaceholder, onWrapStart, canWrap, onRowMenu, renderTools, renderIcon, thumbnailTransform, renderAccessory, onDropExternal, acceptsExternalDrag, accessCopy, nameTooltips, markPath, filter, empty, ariaLabel, className, scroll, }: FileTreeProps): JSX.Element;
514
527
  //# sourceMappingURL=FileTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileTree.d.ts","sourceRoot":"","sources":["../../../src/react/file-tree/FileTree.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileTree.d.ts","sourceRoot":"","sources":["../../../src/react/file-tree/FileTree.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgKG;AACH,OAAO,KAAK,EACV,SAAS,IAAI,cAAc,EAC3B,GAAG,EAEH,SAAS,EACV,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,KAAK,cAAc,EAKnB,KAAK,YAAY,EACjB,KAAK,YAAY,EAOlB,MAAM,2CAA2C,CAAC;AAenD,OAAO,gBAAgB,CAAC;AAiExB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAEvC;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAEtC,gFAAgF;IAChF,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IAElD;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACtE,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC;IACzE;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC;IACnE,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,CAAC;IAExD;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAClE;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC;IAEhD;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IACrE;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IACjE,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChF;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC;IAEhD;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAEvE,oFAAoF;IACpF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC;IAChD,qDAAqD;IACrD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC;IAC/C;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;IAChE,2DAA2D;IAC3D,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,SAAS,CAAC;IAEpD;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5E,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;IAEzD;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACzB;AA8FD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,SAAS,EAAE,aAAa,EACxB,iBAAiB,EACjB,cAAsB,EACtB,cAAc,EACd,SAAS,EACT,cAAc,EACd,WAAsB,EACtB,MAAM,EACN,UAAU,EACV,YAAoB,EACpB,YAAY,EACZ,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,OAAO,EACP,KAAK,EACL,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,YAAmB,EACnB,QAAe,EACf,MAAM,EACN,KAA2B,EAC3B,SAAmB,EACnB,SAAS,EACT,MAAc,GACf,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAq4D7B"}
@@ -92,7 +92,7 @@ function RowGlyph({ node, open, renderIcon, transform, }) {
92
92
  return icon;
93
93
  return (_jsx("img", { ref: ref, className: 'cbft-thumb', src: seen || inView ? src : undefined, alt: '', "aria-hidden": 'true', loading: 'lazy', decoding: 'async', draggable: false, onError: () => setFailed(src), ...(transform ? { style: { transform } } : {}) }, src));
94
94
  }
95
- export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelectionChange, onOpen, collapsed: collapsedProp, onCollapsedChange, expandOnReveal = false, onRevealExpand, pinnedIds, onPinnedChange, pinnedLabel = 'Pinned', onMove, onMoveMany, allowReorder = false, lockedReason, canDrop, takesDrop, unavailableReason, renamingId, onRenameStart, onRename, onRenameCancel, onDelete, onDeleteMany, onCopy, canCopy, draft, onDraftCommit, onDraftCancel, draftPlaceholder, onWrapStart, canWrap, onRowMenu, renderTools, renderIcon, thumbnailTransform, renderAccessory, onDropExternal, acceptsExternalDrag, accessCopy, nameTooltips = true, markPath = true, filter, empty = 'Nothing here yet.', ariaLabel = 'Files', className, }) {
95
+ export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelectionChange, onOpen, collapsed: collapsedProp, onCollapsedChange, expandOnReveal = false, onRevealExpand, pinnedIds, onPinnedChange, pinnedLabel = 'Pinned', onMove, onMoveMany, allowReorder = false, lockedReason, canDrop, takesDrop, unavailableReason, renamingId, onRenameStart, onRename, onRenameCancel, onDelete, onDeleteMany, onCopy, canCopy, draft, onDraftCommit, onDraftCancel, draftPlaceholder, onWrapStart, canWrap, onRowMenu, renderTools, renderIcon, thumbnailTransform, renderAccessory, onDropExternal, acceptsExternalDrag, accessCopy, nameTooltips = true, markPath = true, filter, empty = 'Nothing here yet.', ariaLabel = 'Files', className, scroll = 'own', }) {
96
96
  const scrollRef = useRef(null);
97
97
  const rowRefs = useRef(new Map());
98
98
  /**
@@ -1463,7 +1463,7 @@ export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelection
1463
1463
  // being made in a place, and the place is where the folder actually lives.
1464
1464
  return !pinnedCopy && draft && draft.parentId === node.id ? (_jsxs(Fragment, { children: [body, draftRow(row.depth + 1)] }, node.id)) : (body);
1465
1465
  };
1466
- return (_jsxs("div", { className: `cbft${className ? ` ${className}` : ''}`, "data-quiet-path": markPath ? undefined : true, children: [pinnedRows.length > 0 ? (_jsxs("div", { className: 'cbft-pinned', children: [_jsx("div", { className: 'cbft-pinned-head', children: pinnedLabel }), _jsx("div", { role: 'tree', "aria-label": pinnedLabel, ...(onSelectionChange ? { 'aria-multiselectable': true } : {}), className: `cbft-pinned-list${drag?.active ? ' cbft-list-dragging' : ''}`, children: pinnedRows.map((row) => renderRow(row, true)) })] })) : null, _jsx("div", { className: 'cbft-scroll', ref: scrollRef, "data-into-root": (drag?.active && drag.offer.target?.kind === 'root') ||
1466
+ return (_jsxs("div", { className: `cbft${scroll === 'host' ? ' cbft--host-scroll' : ''}${className ? ` ${className}` : ''}`, "data-quiet-path": markPath ? undefined : true, children: [pinnedRows.length > 0 ? (_jsxs("div", { className: 'cbft-pinned', children: [_jsx("div", { className: 'cbft-pinned-head', children: pinnedLabel }), _jsx("div", { role: 'tree', "aria-label": pinnedLabel, ...(onSelectionChange ? { 'aria-multiselectable': true } : {}), className: `cbft-pinned-list${drag?.active ? ' cbft-list-dragging' : ''}`, children: pinnedRows.map((row) => renderRow(row, true)) })] })) : null, _jsx("div", { className: 'cbft-scroll', ref: scrollRef, "data-into-root": (drag?.active && drag.offer.target?.kind === 'root') ||
1467
1467
  externalOverId === EXTERNAL_OVER_ROOT ||
1468
1468
  undefined, ...externalHandlers(null), onPointerUp: () => {
1469
1469
  // Releasing over the blank space means the top level; the pointer capture keeps