cursedbelt 5.22.1 → 5.25.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 (105) hide show
  1. package/dist/react/components/DataTable/CardView.d.ts +6 -2
  2. package/dist/react/components/DataTable/CardView.d.ts.map +1 -1
  3. package/dist/react/components/DataTable/CardView.js +6 -5
  4. package/dist/react/components/DataTable/CardView.js.map +1 -1
  5. package/dist/react/components/DataTable/DataTable.d.ts +41 -1
  6. package/dist/react/components/DataTable/DataTable.d.ts.map +1 -1
  7. package/dist/react/components/DataTable/DataTable.js +130 -13
  8. package/dist/react/components/DataTable/DataTable.js.map +1 -1
  9. package/dist/react/components/SearchInput.d.ts +15 -1
  10. package/dist/react/components/SearchInput.d.ts.map +1 -1
  11. package/dist/react/components/SearchInput.js +36 -4
  12. package/dist/react/components/SearchInput.js.map +1 -1
  13. package/dist/react/components/searchInput.css +179 -0
  14. package/dist/react/deep-link/index.d.ts +1 -1
  15. package/dist/react/deep-link/index.d.ts.map +1 -1
  16. package/dist/react/deep-link/index.js.map +1 -1
  17. package/dist/react/deep-link/useDeepLink.d.ts +21 -15
  18. package/dist/react/deep-link/useDeepLink.d.ts.map +1 -1
  19. package/dist/react/deep-link/useDeepLink.js +8 -5
  20. package/dist/react/deep-link/useDeepLink.js.map +1 -1
  21. package/dist/react/file-tree/FileTree.d.ts +14 -1
  22. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  23. package/dist/react/file-tree/FileTree.js +2 -2
  24. package/dist/react/file-tree/FileTree.js.map +1 -1
  25. package/dist/react/file-tree/fileTree.css +8 -0
  26. package/dist/react/filter-rail/FilterRail.d.ts +31 -1
  27. package/dist/react/filter-rail/FilterRail.d.ts.map +1 -1
  28. package/dist/react/filter-rail/FilterRail.js +20 -5
  29. package/dist/react/filter-rail/FilterRail.js.map +1 -1
  30. package/dist/react/filter-rail/RailSection.d.ts +56 -0
  31. package/dist/react/filter-rail/RailSection.d.ts.map +1 -0
  32. package/dist/react/filter-rail/RailSection.js +108 -0
  33. package/dist/react/filter-rail/RailSection.js.map +1 -0
  34. package/dist/react/filter-rail/index.d.ts +2 -1
  35. package/dist/react/filter-rail/index.d.ts.map +1 -1
  36. package/dist/react/filter-rail/index.js +2 -1
  37. package/dist/react/filter-rail/index.js.map +1 -1
  38. package/dist/react/hooks/useScrollMemory.d.ts +6 -0
  39. package/dist/react/hooks/useScrollMemory.d.ts.map +1 -1
  40. package/dist/react/hooks/useScrollMemory.js +11 -0
  41. package/dist/react/hooks/useScrollMemory.js.map +1 -1
  42. package/dist/react/index.d.ts +2 -0
  43. package/dist/react/index.d.ts.map +1 -1
  44. package/dist/react/index.js +5 -0
  45. package/dist/react/index.js.map +1 -1
  46. package/dist/react/media/DenseGalleryShell.d.ts +8 -2
  47. package/dist/react/media/DenseGalleryShell.d.ts.map +1 -1
  48. package/dist/react/media/DenseGalleryShell.js +2 -2
  49. package/dist/react/media/DenseGalleryShell.js.map +1 -1
  50. package/dist/react/media-gallery/GalleryTable.js +1 -1
  51. package/dist/react/media-gallery/GalleryTable.js.map +1 -1
  52. package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
  53. package/dist/react/media-gallery/MediaGallery.js +16 -4
  54. package/dist/react/media-gallery/MediaGallery.js.map +1 -1
  55. package/dist/react/media-gallery/galleryReturn.d.ts +50 -0
  56. package/dist/react/media-gallery/galleryReturn.d.ts.map +1 -0
  57. package/dist/react/media-gallery/galleryReturn.js +221 -0
  58. package/dist/react/media-gallery/galleryReturn.js.map +1 -0
  59. package/dist/react/media-gallery/preferenceBus.d.ts +10 -0
  60. package/dist/react/media-gallery/preferenceBus.d.ts.map +1 -1
  61. package/dist/react/media-gallery/preferenceBus.js +24 -0
  62. package/dist/react/media-gallery/preferenceBus.js.map +1 -1
  63. package/dist/react/media-gallery/preferenceSync.d.ts.map +1 -1
  64. package/dist/react/media-gallery/preferenceSync.js +3 -0
  65. package/dist/react/media-gallery/preferenceSync.js.map +1 -1
  66. package/dist/react/nav/TopBar.d.ts +8 -1
  67. package/dist/react/nav/TopBar.d.ts.map +1 -1
  68. package/dist/react/nav/TopBar.js +2 -2
  69. package/dist/react/nav/TopBar.js.map +1 -1
  70. package/dist/styles-areas/analytics.css +11 -11
  71. package/dist/styles-areas/data-table.css +7 -7
  72. package/dist/styles-areas/filter-rail.css +6 -5
  73. package/dist/styles-utilities.css +15 -0
  74. package/package.json +9 -2
  75. package/src/demoFixture.spec.ts +4 -2
  76. package/src/react/components/DataTable/CardView.tsx +8 -1
  77. package/src/react/components/DataTable/DataTable.tsx +287 -17
  78. package/src/react/components/DataTable/selection.spec.tsx +189 -0
  79. package/src/react/components/SearchInput.spec.tsx +57 -0
  80. package/src/react/components/SearchInput.tsx +74 -20
  81. package/src/react/components/searchInput.css +179 -0
  82. package/src/react/deep-link/index.ts +1 -0
  83. package/src/react/deep-link/useDeepLink.spec.tsx +31 -0
  84. package/src/react/deep-link/useDeepLink.tsx +31 -11
  85. package/src/react/file-tree/FileTree.tsx +15 -1
  86. package/src/react/file-tree/fileTree.css +8 -0
  87. package/src/react/filter-rail/FilterRail.tsx +93 -26
  88. package/src/react/filter-rail/RailSection.spec.tsx +156 -0
  89. package/src/react/filter-rail/RailSection.tsx +216 -0
  90. package/src/react/filter-rail/index.ts +2 -0
  91. package/src/react/hooks/useScrollMemory.ts +11 -0
  92. package/src/react/index.ts +5 -0
  93. package/src/react/media/DenseGalleryShell.tsx +9 -1
  94. package/src/react/media-gallery/GalleryTable.tsx +2 -0
  95. package/src/react/media-gallery/MediaGallery.spec.tsx +9 -3
  96. package/src/react/media-gallery/MediaGallery.tsx +19 -1
  97. package/src/react/media-gallery/galleryReturn.ts +248 -0
  98. package/src/react/media-gallery/preferenceBus.ts +28 -0
  99. package/src/react/media-gallery/preferenceSync.ts +3 -0
  100. package/src/react/nav/TopBar.spec.tsx +11 -0
  101. package/src/react/nav/TopBar.tsx +9 -1
  102. package/src/styles-areas/analytics.css +11 -11
  103. package/src/styles-areas/data-table.css +7 -7
  104. package/src/styles-areas/filter-rail.css +6 -5
  105. package/src/styles-utilities.css +15 -0
@@ -1,5 +1,6 @@
1
1
  import { type SearchSyntaxOptions } from 'cursedbelt-core/search-pattern';
2
2
  import { type InputProps } from './Input.js';
3
+ import './searchInput.css';
3
4
  export interface SearchInputProps extends Omit<InputProps, 'value' | 'onChange' | 'type'> {
4
5
  value: string;
5
6
  onChange: (value: string) => void;
@@ -16,6 +17,12 @@ export interface SearchInputProps extends Omit<InputProps, 'value' | 'onChange'
16
17
  className?: string;
17
18
  /** Classes for the `<input>` itself — colours, radius, text size. */
18
19
  inputClassName?: string;
20
+ /**
21
+ * Draw a ✕ that empties the box (and keeps the caret in it) while there is text to clear.
22
+ * Default `false`, so a box that never had one does not grow one. The browser's own ✕ on a
23
+ * `type="search"` field is hidden while this is on, so there is only ever one.
24
+ */
25
+ clearable?: boolean;
19
26
  }
20
27
  /**
21
28
  * The one search box — a magnifier, a themed {@link Input}, and a badge the
@@ -34,6 +41,13 @@ export interface SearchInputProps extends Omit<InputProps, 'value' | 'onChange'
34
41
  * Parsing is the app's too: this component only DISPLAYS the pattern. An app
35
42
  * that filters in memory calls `createSearchMatcher(value, syntax)`; one that
36
43
  * queries a server parses there with the same options.
44
+ *
45
+ * ── In an app with no Tailwind ──────────────────────────────────────────────
46
+ * It draws from its own `searchInput.css` (5.23.0, task 2256), so import it by its
47
+ * own subpath, `cursedbelt/react/search-input`, rather than the `cursedbelt/react`
48
+ * barrel. Everything else a field needs passes straight to the `<input>`: `ref`,
49
+ * `autoFocus`, and any `data-*` attribute (desk's ⌘F finds its field by
50
+ * `data-find-field="true"`).
37
51
  */
38
- export declare function SearchInput({ value, onChange, syntax, showSyntaxBadge, className, inputClassName, placeholder, 'aria-label': ariaLabel, ...inputProps }: SearchInputProps): import("react").JSX.Element;
52
+ export declare function SearchInput({ value, onChange, syntax, showSyntaxBadge, className, inputClassName, placeholder, 'aria-label': ariaLabel, clearable, ref, ...inputProps }: SearchInputProps): import("react").JSX.Element;
39
53
  //# sourceMappingURL=SearchInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/react/components/SearchInput.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAGpD,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IACrC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAsBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,eAAsB,EACtB,SAAS,EACT,cAAc,EACd,WAAuB,EACvB,YAAY,EAAE,SAAS,EACvB,GAAG,UAAU,EACd,EAAE,gBAAgB,+BAuClB"}
1
+ {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/react/components/SearchInput.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIpD,OAAO,mBAAmB,CAAC;AAE3B,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IACrC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAsBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,eAAsB,EACtB,SAAS,EACT,cAAc,EACd,WAAuB,EACvB,YAAY,EAAE,SAAS,EACvB,SAAiB,EACjB,GAAG,EACH,GAAG,UAAU,EACd,EAAE,gBAAgB,+BA2ElB"}
@@ -1,10 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Asterisk, Regex, Search, TriangleAlert } from 'lucide-react';
3
- import { useMemo } from 'react';
2
+ import { Asterisk, Regex, Search, TriangleAlert, X } from 'lucide-react';
3
+ import { useMemo, useRef } from 'react';
4
4
  import { parseSearchPattern, } from 'cursedbelt-core/search-pattern';
5
5
  import { cn } from '../lib/cn.js';
6
6
  import { Input } from './Input.js';
7
7
  import { Tooltip } from './Tooltip.js';
8
+ // 🔴 The look travels with the component — see the stylesheet's header for why every rule in it
9
+ // sits in `@layer base`, below the Tailwind utilities this file still carries.
10
+ import './searchInput.css';
8
11
  const PLAIN_ONLY = { wildcard: false, regex: false };
9
12
  /** What the badge says, per pattern kind that has one. */
10
13
  function badgeFor(pattern) {
@@ -40,11 +43,40 @@ function badgeFor(pattern) {
40
43
  * Parsing is the app's too: this component only DISPLAYS the pattern. An app
41
44
  * that filters in memory calls `createSearchMatcher(value, syntax)`; one that
42
45
  * queries a server parses there with the same options.
46
+ *
47
+ * ── In an app with no Tailwind ──────────────────────────────────────────────
48
+ * It draws from its own `searchInput.css` (5.23.0, task 2256), so import it by its
49
+ * own subpath, `cursedbelt/react/search-input`, rather than the `cursedbelt/react`
50
+ * barrel. Everything else a field needs passes straight to the `<input>`: `ref`,
51
+ * `autoFocus`, and any `data-*` attribute (desk's ⌘F finds its field by
52
+ * `data-find-field="true"`).
43
53
  */
44
- export function SearchInput({ value, onChange, syntax, showSyntaxBadge = true, className, inputClassName, placeholder = 'Search…', 'aria-label': ariaLabel, ...inputProps }) {
54
+ export function SearchInput({ value, onChange, syntax, showSyntaxBadge = true, className, inputClassName, placeholder = 'Search…', 'aria-label': ariaLabel, clearable = false, ref, ...inputProps }) {
45
55
  const pattern = useMemo(() => parseSearchPattern(value, syntax === false ? PLAIN_ONLY : syntax), [value, syntax]);
46
56
  const badge = showSyntaxBadge ? badgeFor(pattern) : null;
47
57
  const invalid = pattern.kind === 'invalid';
48
- return (_jsxs("div", { className: cn('relative min-w-0', className), children: [_jsx(Search, { "aria-hidden": true, className: '-translate-y-1/2 pointer-events-none absolute top-1/2 left-2.5 size-4 text-muted-foreground' }), _jsx(Input, { ...inputProps, type: 'search', value: value, onChange: (event) => onChange(event.target.value), placeholder: placeholder, "aria-label": ariaLabel ?? (typeof placeholder === 'string' ? placeholder : 'Search'), "aria-invalid": invalid || undefined, className: cn('pl-8', badge && 'pr-9', inputClassName) }), badge ? (_jsx(Tooltip, { content: badge.tip, side: 'bottom', multiline: true, children: _jsx("span", { role: 'img', "aria-label": badge.label, "data-testid": 'search-syntax-badge', "data-kind": pattern.kind, className: cn('-translate-y-1/2 absolute top-1/2 right-2 inline-flex size-6 items-center justify-center rounded-full', invalid ? 'bg-destructive/15 text-destructive' : 'bg-accent/15 text-accent-strong'), children: _jsx(badge.icon, { className: 'size-3.5', "aria-hidden": true }) }) })) : null] }));
58
+ const clear = clearable && value !== '';
59
+ const trailing = (badge ? 1 : 0) + (clear ? 1 : 0);
60
+ // Our own handle on the field, so the ✕ can put the caret back — merged with the caller's.
61
+ const own = useRef(null);
62
+ const setRef = (node) => {
63
+ own.current = node;
64
+ if (typeof ref === 'function')
65
+ ref(node);
66
+ else if (ref)
67
+ ref.current = node;
68
+ };
69
+ /*
70
+ * Every element carries BOTH its `cbsi-` class (the plain look, for an app with no Tailwind)
71
+ * and the Tailwind utilities it always had (the look a Tailwind app restyles through
72
+ * `className`/`inputClassName`). The stylesheet's header says why the two cannot fight.
73
+ */
74
+ return (_jsxs("div", { className: cn('cbsi relative min-w-0', className), children: [_jsx(Search, { "aria-hidden": true, className: 'cbsi-icon -translate-y-1/2 pointer-events-none absolute top-1/2 left-2.5 size-4 text-muted-foreground' }), _jsx(Input, { ...inputProps, ref: setRef, type: 'search', value: value, onChange: (event) => onChange(event.target.value), placeholder: placeholder, "aria-label": ariaLabel ?? (typeof placeholder === 'string' ? placeholder : 'Search'), "aria-invalid": invalid || undefined, "data-trailing": trailing || undefined, "data-clearable": clearable || undefined, className: cn('cbsi-input pl-8', trailing === 1 && 'pr-9', trailing === 2 && 'pr-16', inputClassName) }), trailing > 0 ? (_jsxs("span", { className: 'cbsi-trail -translate-y-1/2 absolute top-1/2 right-2 inline-flex items-center gap-1', children: [badge ? (_jsx(Tooltip, { content: badge.tip, side: 'bottom', multiline: true, children: _jsx("span", { role: 'img', "aria-label": badge.label, "data-testid": 'search-syntax-badge', "data-kind": pattern.kind, className: cn('cbsi-badge inline-flex size-6 items-center justify-center rounded-full', invalid ? 'bg-destructive/15 text-destructive' : 'bg-accent/15 text-accent-strong'), children: _jsx(badge.icon, { className: 'size-3.5', "aria-hidden": true }) }) })) : null, clear ? (_jsx("button", {
75
+ // guardrails-ignore no-raw-action-button: a 24px glyph INSIDE the field, styled by
76
+ // this component's own plain CSS (`.cbsi-clear`) so it draws without Tailwind.
77
+ type: 'button', className: 'cbsi-clear', "aria-label": 'Clear search', onClick: () => {
78
+ onChange('');
79
+ own.current?.focus();
80
+ }, children: _jsx(X, { "aria-hidden": true }) })) : null] })) : null] }));
49
81
  }
50
82
  //# sourceMappingURL=SearchInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","sourceRoot":"","sources":["../../../src/react/components/SearchInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SearchInput.js","sourceRoot":"","sources":["../../../src/react/components/SearchInput.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EACL,kBAAkB,GAGnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,gGAAgG;AAChG,+EAA+E;AAC/E,OAAO,mBAAmB,CAAC;AA0B3B,MAAM,UAAU,GAAwB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAE1E,0DAA0D;AAC1D,SAAS,QAAQ,CAAC,OAAsB;IACtC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,iBAAiB;gBACxB,GAAG,EAAE,+EAA+E;aACrF,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,aAAa,OAAO,CAAC,MAAM,mBAAmB,EAAE,CAAC;QAC3G,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QACnF;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,eAAe,GAAG,IAAI,EACtB,SAAS,EACT,cAAc,EACd,WAAW,GAAG,SAAS,EACvB,YAAY,EAAE,SAAS,EACvB,SAAS,GAAG,KAAK,EACjB,GAAG,EACH,GAAG,UAAU,EACI;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAClH,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,2FAA2F;IAC3F,MAAM,GAAG,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACrD,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC;aACpC,IAAI,GAAG;YAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACnC,CAAC,CAAC;IAEF;;;;OAIG;IACH,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,aACpD,KAAC,MAAM,yBAEL,SAAS,EAAC,uGAAuG,GACjH,EACF,KAAC,KAAK,OACA,UAAU,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACjD,WAAW,EAAE,WAAW,gBACZ,SAAS,IAAI,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,kBACrE,OAAO,IAAI,SAAS,mBACnB,QAAQ,IAAI,SAAS,oBACpB,SAAS,IAAI,SAAS,EACtC,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,KAAK,CAAC,IAAI,MAAM,EAAE,QAAQ,KAAK,CAAC,IAAI,OAAO,EAAE,cAAc,CAAC,GACrG,EACD,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CACd,gBAAM,SAAS,EAAC,qFAAqF,aAClG,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,OAAO,IAAC,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAC,QAAQ,EAAC,SAAS,kBAClD,eACE,IAAI,EAAC,KAAK,gBACE,KAAK,CAAC,KAAK,iBACX,qBAAqB,eACtB,OAAO,CAAC,IAAI,EACvB,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,iCAAiC,CACnF,YAED,KAAC,KAAK,CAAC,IAAI,IAAC,SAAS,EAAC,UAAU,wBAAe,GAC1C,GACC,CACX,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,CACP;wBACE,mFAAmF;wBACnF,+EAA+E;wBAC/E,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,YAAY,gBACX,cAAc,EACzB,OAAO,EAAE,GAAG,EAAE;4BACZ,QAAQ,CAAC,EAAE,CAAC,CAAC;4BACb,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wBACvB,CAAC,YAED,KAAC,CAAC,0BAAe,GACV,CACV,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,179 @@
1
+ /*
2
+ * SearchInput's own look, as plain CSS — so it draws in an app with NO Tailwind (desk), the way
3
+ * `activityBar.css` and `fileTree.css` let those two travel. Prefix `cbsi-`. Task 2256.
4
+ *
5
+ * 🔴 Everything here is inside `@layer base`, and that is the whole trick — read before editing.
6
+ *
7
+ * The component KEEPS its Tailwind utilities, because a Tailwind app restyles the field through
8
+ * them: flix passes `inputClassName="rounded-full bg-[var(--surface-1)] …"`. An UNLAYERED rule
9
+ * beats every layered one whatever its specificity, and Tailwind v4 puts utilities in
10
+ * `@layer utilities` — so a plain `.cbsi-input { border-radius: … }` would silently undo flix's
11
+ * `rounded-full`. In `@layer base` these rules sit BELOW utilities in every Tailwind app, in
12
+ * either load order: if Tailwind's `@layer theme, base, components, utilities` came first,
13
+ * `base` is second of four; if this file came first, `base` is registered first and Tailwind's
14
+ * statement appends the rest after it. Within `base`, a `.cbsi-` class out-ranks preflight's
15
+ * element selectors, and every value below is the value Tailwind already computes, so a
16
+ * Tailwind app draws exactly what it drew before this file existed.
17
+ *
18
+ * In an app without Tailwind this is the only author layer that matches these elements, so it
19
+ * is the look. Its tokens fall back to the plainer ones an app is most likely to bridge
20
+ * (`--border`, `--background`, `--foreground`, `--muted-foreground`, `--ring`, `--accent`,
21
+ * `--destructive`, `--radius-sm`) — desk answers those on `.cs-root`.
22
+ */
23
+
24
+ @layer base {
25
+ .cbsi {
26
+ position: relative;
27
+ min-width: 0;
28
+ }
29
+
30
+ .cbsi-icon {
31
+ position: absolute;
32
+ top: 50%;
33
+ left: 0.625rem;
34
+ translate: 0 -50%;
35
+ width: 1rem;
36
+ height: 1rem;
37
+ pointer-events: none;
38
+ color: var(--muted-foreground);
39
+ }
40
+
41
+ /* The field — `fieldControlClass('md')`, written out. */
42
+ .cbsi-input {
43
+ box-sizing: border-box;
44
+ width: 100%;
45
+ height: var(--control-h-md, 36px);
46
+ margin: 0;
47
+ padding: 0 0.75rem 0 2rem;
48
+ border: 1px solid var(--field-border, var(--border));
49
+ border-radius: var(--field-radius, var(--radius-md, var(--radius-sm, 0.375rem)));
50
+ background-color: var(--field-bg, var(--background));
51
+ color: var(--field-fg, var(--foreground));
52
+ font: inherit;
53
+ font-size: 1rem;
54
+ line-height: 1.5rem;
55
+ outline: none;
56
+ appearance: none;
57
+ }
58
+
59
+ /* 16px on a phone keeps iOS from zooming on focus; 14px from `sm:` up, as `text-sm`. */
60
+ @media (min-width: 40rem) {
61
+ .cbsi-input {
62
+ font-size: 0.875rem;
63
+ line-height: 1.25rem;
64
+ }
65
+ }
66
+
67
+ /* DESIGN.md §5: 44px to a thumb. */
68
+ @media (pointer: coarse) {
69
+ .cbsi-input {
70
+ min-height: 2.75rem;
71
+ }
72
+ }
73
+
74
+ .cbsi-input::placeholder {
75
+ color: var(--field-placeholder, var(--muted-foreground));
76
+ }
77
+
78
+ .cbsi-input:focus-visible {
79
+ border-color: var(--field-ring, var(--ring));
80
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--field-ring, var(--ring)) 30%, transparent);
81
+ }
82
+
83
+ .cbsi-input[aria-invalid='true'] {
84
+ border-color: var(--field-error, var(--destructive));
85
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--field-error, var(--destructive)) 30%, transparent);
86
+ }
87
+
88
+ .cbsi-input:disabled {
89
+ cursor: not-allowed;
90
+ opacity: 0.5;
91
+ }
92
+
93
+ /* Room on the right for whatever sits there: a badge, a clear button, or both. */
94
+ .cbsi-input[data-trailing='1'] {
95
+ padding-right: 2.25rem;
96
+ }
97
+
98
+ .cbsi-input[data-trailing='2'] {
99
+ padding-right: 4rem;
100
+ }
101
+
102
+ /* A clearable box draws its own ✕, so the browser's must not draw a second one. */
103
+ .cbsi-input[data-clearable]::-webkit-search-cancel-button {
104
+ appearance: none;
105
+ display: none;
106
+ }
107
+
108
+ .cbsi-trail {
109
+ position: absolute;
110
+ top: 50%;
111
+ right: 0.5rem;
112
+ translate: 0 -50%;
113
+ display: inline-flex;
114
+ align-items: center;
115
+ gap: 0.25rem;
116
+ }
117
+
118
+ /* The badge: a filled capsule (DESIGN.md §3), accent while a syntax is in play. */
119
+ .cbsi-badge {
120
+ display: inline-flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ width: 1.5rem;
124
+ height: 1.5rem;
125
+ border-radius: 9999px;
126
+ background-color: color-mix(in oklab, var(--accent) 15%, transparent);
127
+ color: var(--accent-strong, var(--accent));
128
+ }
129
+
130
+ .cbsi-badge[data-kind='invalid'] {
131
+ background-color: color-mix(in oklab, var(--destructive) 15%, transparent);
132
+ color: var(--destructive);
133
+ }
134
+
135
+ .cbsi-badge svg {
136
+ width: 0.875rem;
137
+ height: 0.875rem;
138
+ }
139
+
140
+ .cbsi-clear {
141
+ position: relative;
142
+ display: inline-flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ width: 1.5rem;
146
+ height: 1.5rem;
147
+ margin: 0;
148
+ padding: 0;
149
+ border: 0;
150
+ border-radius: var(--radius-sm, 0.375rem);
151
+ background: transparent;
152
+ color: var(--muted-foreground);
153
+ cursor: pointer;
154
+ }
155
+
156
+ .cbsi-clear:hover {
157
+ color: var(--foreground);
158
+ background: var(--muted, color-mix(in oklab, var(--foreground) 8%, transparent));
159
+ }
160
+
161
+ .cbsi-clear:focus-visible {
162
+ outline: 2px solid var(--ring);
163
+ outline-offset: 1px;
164
+ }
165
+
166
+ /* The ✕ is 24px to the eye; to a thumb it reaches the 44px floor (DESIGN.md §5). */
167
+ @media (pointer: coarse) {
168
+ .cbsi-clear::after {
169
+ content: '';
170
+ position: absolute;
171
+ inset: -10px;
172
+ }
173
+ }
174
+
175
+ .cbsi-clear svg {
176
+ width: 0.75rem;
177
+ height: 0.75rem;
178
+ }
179
+ }
@@ -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":";AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AA0B1B,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAAsC,IAAI,CAAC,CAAC;AAEvF,MAAM,WAAW,GAAG,GAAW,EAAE,CAC/B,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AActH,MAAM,UAAU,gBAAgB,CAAmB,EACjD,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,GAAG,IAAI,GACS;IACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;QACzC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC,CAAC,CAAC;IACH,iFAAiF;IACjF,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;IACxF;;;;0BAIsB;IACtB,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAgB,GAAG,EAAE,CACrD,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CACjD,CAAC;IACF;;gFAE4E;IAC5E,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C;;;;;;;;OAQG;IACH,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrD,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC;IAEzC,gFAAgF;IAChF,gFAAgF;IAChF,oEAAoE;IACpE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,MAAM,GAAG,GAAS,EAAE;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1C,eAAe,CAAC,OAAO,GAAG,MAAM,CAAC;YACjC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClC,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACvF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAgCG;QACH,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,WAAW,EAAE,KAAK,SAAS;YAAE,MAAM,EAAE,CAAC;QAC1F,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAEvB;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClH,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,KAAK,EAAE,IAAI,SAAS,KAAK,IAAI,CAAC;YAAE,OAAO;QACpE,MAAM,GAAG,GACP,KAAK,CAAC,IAAI,KAAK,MAAM;YACnB,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE;YACpE,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAC9B,CAAC,IAAyB,EAAE,OAAgB,EAAQ,EAAE;QACpD,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACzG,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjC,sEAAsE;gBACtE,sEAAsE;gBACtE,iDAAiD;gBACjD,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI;oBAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACxC,oEAAoE;gBACpE,wCAAwC;gBACxC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,2EAA2E;QAC3E,uEAAuE;QACvE,wEAAwE;QACxE,kBAAkB;QAClB,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC;QACL,KAAK;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,YAAY;QACZ,yFAAyF;QACzF,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;QAChF,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;QAC9E,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAC9E,CAAC,EACF,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAqC,YAAG,QAAQ,GAA4B,CAC9G,CAAC;AACJ,CAAC;AAsBD,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAmC,CAAC;IACpF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACtF,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE9C,OAAO,KAAK,CAAC,OAAO,CAAuB,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAG,CAAC,IAAO,EAAE,OAA+B,EAAQ,EAAE,CAClE,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO;YACL,GAAG,OAAO;YACV,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC;YAC7D,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC;YACvD,QAAQ;YACR,YAAY,EAAE,CAAC,IAAO,EAAgB,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB,cAAc,EAAE,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC3D,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjB,qEAAqE;oBACrE,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM;wBAAE,OAAO;oBACvG,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC;aACF,CAAC;YACF,WAAW,EAAE,OAAO,CAAC,YAAY;SAClC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChD,CAAC"}
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":"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"}
@@ -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