cursedbelt 5.45.0 → 5.46.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.
- package/dist/react/canvas-hud/CanvasMinimap.d.ts +32 -0
- package/dist/react/canvas-hud/CanvasMinimap.d.ts.map +1 -0
- package/dist/react/canvas-hud/CanvasMinimap.js +32 -0
- package/dist/react/canvas-hud/CanvasMinimap.js.map +1 -0
- package/dist/react/canvas-hud/CanvasNodeMenu.d.ts +34 -0
- package/dist/react/canvas-hud/CanvasNodeMenu.d.ts.map +1 -0
- package/dist/react/canvas-hud/CanvasNodeMenu.js +21 -0
- package/dist/react/canvas-hud/CanvasNodeMenu.js.map +1 -0
- package/dist/react/canvas-hud/CanvasSearchField.d.ts +27 -0
- package/dist/react/canvas-hud/CanvasSearchField.d.ts.map +1 -0
- package/dist/react/canvas-hud/CanvasSearchField.js +35 -0
- package/dist/react/canvas-hud/CanvasSearchField.js.map +1 -0
- package/dist/react/canvas-hud/HudControls.d.ts +43 -0
- package/dist/react/canvas-hud/HudControls.d.ts.map +1 -0
- package/dist/react/canvas-hud/HudControls.js +22 -0
- package/dist/react/canvas-hud/HudControls.js.map +1 -0
- package/dist/react/canvas-hud/index.d.ts +13 -0
- package/dist/react/canvas-hud/index.d.ts.map +1 -0
- package/dist/react/canvas-hud/index.js +7 -0
- package/dist/react/canvas-hud/index.js.map +1 -0
- package/dist/react/canvas-hud/useCanvasWheel.d.ts +41 -0
- package/dist/react/canvas-hud/useCanvasWheel.d.ts.map +1 -0
- package/dist/react/canvas-hud/useCanvasWheel.js +65 -0
- package/dist/react/canvas-hud/useCanvasWheel.js.map +1 -0
- package/dist/react/canvas-hud/viewport.d.ts +68 -0
- package/dist/react/canvas-hud/viewport.d.ts.map +1 -0
- package/dist/react/canvas-hud/viewport.js +77 -0
- package/dist/react/canvas-hud/viewport.js.map +1 -0
- package/dist/react/charts/format.d.ts.map +1 -1
- package/dist/react/charts/format.js +2 -1
- package/dist/react/charts/format.js.map +1 -1
- package/dist/react/components/AppShell.d.ts.map +1 -1
- package/dist/react/components/AppShell.js +23 -3
- package/dist/react/components/AppShell.js.map +1 -1
- package/dist/react/components/AsyncPanel.d.ts.map +1 -1
- package/dist/react/components/AsyncPanel.js +1 -1
- package/dist/react/components/AsyncPanel.js.map +1 -1
- package/dist/react/components/Checkbox.d.ts.map +1 -1
- package/dist/react/components/Checkbox.js +7 -2
- package/dist/react/components/Checkbox.js.map +1 -1
- package/dist/react/components/Field.d.ts.map +1 -1
- package/dist/react/components/Field.js +4 -1
- package/dist/react/components/Field.js.map +1 -1
- package/dist/react/components/PageGuideButton.d.ts +1 -1
- package/dist/react/components/PageGuideButton.d.ts.map +1 -1
- package/dist/react/components/PageGuideButton.js +45 -6
- package/dist/react/components/PageGuideButton.js.map +1 -1
- package/dist/react/components/PageGuidePopover.d.ts +14 -0
- package/dist/react/components/PageGuidePopover.d.ts.map +1 -0
- package/dist/react/components/PageGuidePopover.js +25 -0
- package/dist/react/components/PageGuidePopover.js.map +1 -0
- package/dist/react/components/TagsInput.d.ts.map +1 -1
- package/dist/react/components/TagsInput.js +3 -1
- package/dist/react/components/TagsInput.js.map +1 -1
- package/dist/react/folder-tree/FolderPicker.d.ts.map +1 -1
- package/dist/react/folder-tree/FolderPicker.js +5 -1
- package/dist/react/folder-tree/FolderPicker.js.map +1 -1
- package/dist/react/icons.d.ts +28 -0
- package/dist/react/icons.d.ts.map +1 -1
- package/dist/react/icons.js +28 -0
- package/dist/react/icons.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/lib/whenIdle.d.ts +7 -0
- package/dist/react/lib/whenIdle.d.ts.map +1 -0
- package/dist/react/lib/whenIdle.js +14 -0
- package/dist/react/lib/whenIdle.js.map +1 -0
- package/dist/react/media/DenseGalleryShell.d.ts +7 -1
- package/dist/react/media/DenseGalleryShell.d.ts.map +1 -1
- package/dist/react/media/DenseGalleryShell.js +3 -3
- package/dist/react/media/DenseGalleryShell.js.map +1 -1
- package/dist/react/media/denseGallery.css +91 -0
- package/dist/react/media-gallery/MediaGallery.d.ts +5 -2
- package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
- package/dist/react/media-gallery/MediaGallery.js +1 -1
- package/dist/react/media-gallery/MediaGallery.js.map +1 -1
- package/dist/styles-areas/auth.css +2 -2
- package/dist/styles-areas/calendar.css +5 -6
- package/dist/styles-areas/canvas-hud.css +30 -0
- package/dist/styles-areas/core.css +5 -5
- package/dist/styles-areas/folder-tree.css +6 -6
- package/dist/styles-areas/layout-engine.css +4 -4
- package/dist/styles-areas/media-gallery.css +7 -6
- package/dist/styles-areas/nav.css +3 -3
- package/dist/styles-areas/palette.css +1 -1
- package/dist/styles-areas/rich-text.css +2 -2
- package/dist/styles-areas/sharing.css +4 -4
- package/dist/styles-areas/test-report.css +2 -2
- package/dist/styles-utilities.css +24 -3
- package/package.json +8 -1
- package/scripts/generateAreaStyles.ts +3 -1
- package/scripts/styleAreas.ts +88 -6
- package/src/bundlerOnlyEntries.spec.ts +25 -8
- package/src/react/canvas-hud/CanvasMinimap.tsx +88 -0
- package/src/react/canvas-hud/CanvasNodeMenu.tsx +91 -0
- package/src/react/canvas-hud/CanvasSearchField.tsx +91 -0
- package/src/react/canvas-hud/HudControls.spec.tsx +160 -0
- package/src/react/canvas-hud/HudControls.tsx +128 -0
- package/src/react/canvas-hud/index.ts +33 -0
- package/src/react/canvas-hud/useCanvasWheel.ts +99 -0
- package/src/react/canvas-hud/viewport.spec.ts +105 -0
- package/src/react/canvas-hud/viewport.ts +124 -0
- package/src/react/charts/capacityFormat.spec.ts +12 -0
- package/src/react/charts/format.ts +2 -1
- package/src/react/components/AppShell.tsx +23 -4
- package/src/react/components/AsyncPanel.spec.tsx +10 -0
- package/src/react/components/AsyncPanel.tsx +3 -1
- package/src/react/components/Checkbox.spec.tsx +18 -0
- package/src/react/components/Checkbox.tsx +8 -5
- package/src/react/components/Field.spec.tsx +3 -2
- package/src/react/components/Field.tsx +7 -4
- package/src/react/components/Field.width.spec.tsx +3 -3
- package/src/react/components/PageGuideButton.spec.tsx +39 -0
- package/src/react/components/PageGuideButton.tsx +91 -23
- package/src/react/components/PageGuidePopover.tsx +52 -0
- package/src/react/components/TagsInput.spec.tsx +8 -0
- package/src/react/components/TagsInput.tsx +3 -1
- package/src/react/components/entryChunks.graph.spec.ts +89 -0
- package/src/react/folder-tree/FolderPicker.spec.tsx +8 -0
- package/src/react/folder-tree/FolderPicker.tsx +4 -1
- package/src/react/icons.spec.ts +21 -1
- package/src/react/icons.tsx +135 -1
- package/src/react/index.ts +10 -0
- package/src/react/lib/whenIdle.ts +13 -0
- package/src/react/media/DenseGalleryShell.tsx +20 -4
- package/src/react/media/denseGallery.css +91 -0
- package/src/react/media-gallery/MediaGallery.spec.tsx +26 -0
- package/src/react/media-gallery/MediaGallery.tsx +10 -3
- package/src/styles-areas/auth.css +2 -2
- package/src/styles-areas/calendar.css +5 -6
- package/src/styles-areas/canvas-hud.css +30 -0
- package/src/styles-areas/core.css +5 -5
- package/src/styles-areas/folder-tree.css +6 -6
- package/src/styles-areas/layout-engine.css +4 -4
- package/src/styles-areas/media-gallery.css +7 -6
- package/src/styles-areas/nav.css +3 -3
- package/src/styles-areas/palette.css +1 -1
- package/src/styles-areas/rich-text.css +2 -2
- package/src/styles-areas/sharing.css +4 -4
- package/src/styles-areas/test-report.css +2 -2
- package/src/styles-utilities.css +24 -3
- package/src/stylesAreas.spec.ts +17 -0
package/src/react/icons.tsx
CHANGED
|
@@ -269,7 +269,7 @@ export interface DynamicIconProps {
|
|
|
269
269
|
// above, which resolve to `lucide-react`. A handful of hosts (collections, desk)
|
|
270
270
|
// deliberately do not carry `lucide-react` at all: it reaches their bundle only
|
|
271
271
|
// through cursedbelt itself, and each sits against its own narrow asset byte
|
|
272
|
-
// budget. Each used to hand-draw its own copy of these
|
|
272
|
+
// budget. Each used to hand-draw its own copy of these; same reasoning as
|
|
273
273
|
// `VideoPlayer`'s `StepGlyph` in this package for why a `<path>` or two is
|
|
274
274
|
// cheaper here than importing an icon set.
|
|
275
275
|
export type HandDrawnIconProps = { size?: number; className?: string };
|
|
@@ -321,6 +321,140 @@ export const IconTable = handDrawnIcon(
|
|
|
321
321
|
</>,
|
|
322
322
|
);
|
|
323
323
|
|
|
324
|
+
/** Add / new — a plus. */
|
|
325
|
+
export const IconAdd = handDrawnIcon(
|
|
326
|
+
<>
|
|
327
|
+
<path d="M12 5v14" />
|
|
328
|
+
<path d="M5 12h14" />
|
|
329
|
+
</>,
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
/** More options — three dots in a row, the `⋯` trigger of an overflow menu. */
|
|
333
|
+
export const IconMore = handDrawnIcon(
|
|
334
|
+
<>
|
|
335
|
+
<circle cx="5" cy="12" r="1" />
|
|
336
|
+
<circle cx="12" cy="12" r="1" />
|
|
337
|
+
<circle cx="19" cy="12" r="1" />
|
|
338
|
+
</>,
|
|
339
|
+
);
|
|
340
|
+
|
|
341
|
+
/** Enter full screen — four corners pointing out. */
|
|
342
|
+
export const IconFullscreen = handDrawnIcon(
|
|
343
|
+
<>
|
|
344
|
+
<path d="M8 3H5a2 2 0 0 0-2 2v3" />
|
|
345
|
+
<path d="M16 3h3a2 2 0 0 1 2 2v3" />
|
|
346
|
+
<path d="M8 21H5a2 2 0 0 1-2-2v-3" />
|
|
347
|
+
<path d="M16 21h3a2 2 0 0 0 2-2v-3" />
|
|
348
|
+
</>,
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
/** Leave full screen — four corners pointing in. */
|
|
352
|
+
export const IconFullscreenExit = handDrawnIcon(
|
|
353
|
+
<>
|
|
354
|
+
<path d="M3 8h3a2 2 0 0 0 2-2V3" />
|
|
355
|
+
<path d="M21 8h-3a2 2 0 0 1-2-2V3" />
|
|
356
|
+
<path d="M3 16h3a2 2 0 0 1 2 2v3" />
|
|
357
|
+
<path d="M21 16h-3a2 2 0 0 0-2 2v3" />
|
|
358
|
+
</>,
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
/** Refresh — an open arc with its arrowhead. */
|
|
362
|
+
export const IconRefresh = handDrawnIcon(
|
|
363
|
+
<>
|
|
364
|
+
<path d="M21 12a9 9 0 1 1-2.6-6.4" />
|
|
365
|
+
<path d="M21 3v6h-6" />
|
|
366
|
+
</>,
|
|
367
|
+
);
|
|
368
|
+
|
|
369
|
+
/** Everything / all items — a two-by-two grid of tiles. */
|
|
370
|
+
export const IconGrid = handDrawnIcon(
|
|
371
|
+
<>
|
|
372
|
+
<rect height="7" rx="1" width="7" x="3" y="3" />
|
|
373
|
+
<rect height="7" rx="1" width="7" x="14" y="3" />
|
|
374
|
+
<rect height="7" rx="1" width="7" x="14" y="14" />
|
|
375
|
+
<rect height="7" rx="1" width="7" x="3" y="14" />
|
|
376
|
+
</>,
|
|
377
|
+
);
|
|
378
|
+
|
|
379
|
+
/** The recycle bin / delete — a lidded bin. */
|
|
380
|
+
export const IconTrash = handDrawnIcon(
|
|
381
|
+
<>
|
|
382
|
+
<path d="M3 6h18" />
|
|
383
|
+
<path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" />
|
|
384
|
+
<path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" />
|
|
385
|
+
</>,
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
/** Copies / duplicates — one sheet over another. */
|
|
389
|
+
export const IconCopies = handDrawnIcon(
|
|
390
|
+
<>
|
|
391
|
+
<rect height="14" rx="2" width="14" x="8" y="8" />
|
|
392
|
+
<path d="M4 16a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2" />
|
|
393
|
+
</>,
|
|
394
|
+
);
|
|
395
|
+
|
|
396
|
+
/** Set aside / parked — an archive box. */
|
|
397
|
+
export const IconArchive = handDrawnIcon(
|
|
398
|
+
<>
|
|
399
|
+
<rect height="5" rx="1" width="20" x="2" y="3" />
|
|
400
|
+
<path d="M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8" />
|
|
401
|
+
<path d="M10 12h4" />
|
|
402
|
+
</>,
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
/** Cut / trim — open scissors. */
|
|
406
|
+
export const IconScissors = handDrawnIcon(
|
|
407
|
+
<>
|
|
408
|
+
<circle cx="6" cy="6" r="3" />
|
|
409
|
+
<circle cx="6" cy="18" r="3" />
|
|
410
|
+
<path d="M20 4 8.12 15.88" />
|
|
411
|
+
<path d="M14.47 14.48 20 20" />
|
|
412
|
+
<path d="M8.12 8.12 12 12" />
|
|
413
|
+
</>,
|
|
414
|
+
);
|
|
415
|
+
|
|
416
|
+
/** Zoom in — a magnifier with a plus. */
|
|
417
|
+
export const IconZoomIn = handDrawnIcon(
|
|
418
|
+
<>
|
|
419
|
+
<circle cx="11" cy="11" r="7" />
|
|
420
|
+
<path d="m20 20-3.5-3.5" />
|
|
421
|
+
<path d="M11 8v6" />
|
|
422
|
+
<path d="M8 11h6" />
|
|
423
|
+
</>,
|
|
424
|
+
);
|
|
425
|
+
|
|
426
|
+
/** Zoom out — a magnifier with a minus. */
|
|
427
|
+
export const IconZoomOut = handDrawnIcon(
|
|
428
|
+
<>
|
|
429
|
+
<circle cx="11" cy="11" r="7" />
|
|
430
|
+
<path d="m20 20-3.5-3.5" />
|
|
431
|
+
<path d="M8 11h6" />
|
|
432
|
+
</>,
|
|
433
|
+
);
|
|
434
|
+
|
|
435
|
+
/** Fit to screen — four corners closing on the content. */
|
|
436
|
+
export const IconFit = handDrawnIcon(
|
|
437
|
+
<>
|
|
438
|
+
<path d="M3 8V5a2 2 0 0 1 2-2h3" />
|
|
439
|
+
<path d="M16 3h3a2 2 0 0 1 2 2v3" />
|
|
440
|
+
<path d="M21 16v3a2 2 0 0 1-2 2h-3" />
|
|
441
|
+
<path d="M8 21H5a2 2 0 0 1-2-2v-3" />
|
|
442
|
+
<rect height="6" rx="1" width="8" x="8" y="9" />
|
|
443
|
+
</>,
|
|
444
|
+
);
|
|
445
|
+
|
|
446
|
+
/** Center on the selection — a crosshair. */
|
|
447
|
+
export const IconCenter = handDrawnIcon(
|
|
448
|
+
<>
|
|
449
|
+
<circle cx="12" cy="12" r="7" />
|
|
450
|
+
<circle cx="12" cy="12" r="1.5" />
|
|
451
|
+
<path d="M12 2v3" />
|
|
452
|
+
<path d="M12 19v3" />
|
|
453
|
+
<path d="M2 12h3" />
|
|
454
|
+
<path d="M19 12h3" />
|
|
455
|
+
</>,
|
|
456
|
+
);
|
|
457
|
+
|
|
324
458
|
export function DynamicIcon({ token, iconMap, className }: DynamicIconProps) {
|
|
325
459
|
if (!token) return null;
|
|
326
460
|
const Icon = iconMap ? iconMap.get(token) : defaultIconMap[token];
|
package/src/react/index.ts
CHANGED
|
@@ -828,9 +828,19 @@ export {
|
|
|
828
828
|
type DynamicIconProps,
|
|
829
829
|
type HandDrawnIconProps,
|
|
830
830
|
type IconComponent,
|
|
831
|
+
IconAdd,
|
|
832
|
+
IconArchive,
|
|
833
|
+
IconCopies,
|
|
834
|
+
IconFullscreen,
|
|
835
|
+
IconFullscreenExit,
|
|
836
|
+
IconGrid,
|
|
837
|
+
IconMore,
|
|
838
|
+
IconRefresh,
|
|
839
|
+
IconScissors,
|
|
831
840
|
IconSearch,
|
|
832
841
|
IconSidebar,
|
|
833
842
|
IconTable,
|
|
843
|
+
IconTrash,
|
|
834
844
|
type IconMapRegistry,
|
|
835
845
|
IconRegistry,
|
|
836
846
|
type IconToken,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run `task` when the browser is idle (a timeout where `requestIdleCallback` is missing).
|
|
3
|
+
* Returns the cancel, so an effect can return it. The belt's lazy parts warm their chunk
|
|
4
|
+
* with it: off the first paint, normally there before anyone asks for them.
|
|
5
|
+
*/
|
|
6
|
+
export function whenIdle(task: () => void): () => void {
|
|
7
|
+
if (typeof window.requestIdleCallback === 'function') {
|
|
8
|
+
const handle = window.requestIdleCallback(task, { timeout: 4000 });
|
|
9
|
+
return () => window.cancelIdleCallback(handle);
|
|
10
|
+
}
|
|
11
|
+
const handle = window.setTimeout(task, 1500);
|
|
12
|
+
return () => window.clearTimeout(handle);
|
|
13
|
+
}
|
|
@@ -188,8 +188,14 @@ export interface DenseGalleryShellProps<O extends string = string> {
|
|
|
188
188
|
*
|
|
189
189
|
* With `'none'`, pass `viewMode`/`query`/`order` as CONTROLLED values from wherever the
|
|
190
190
|
* controls went — otherwise the gallery keeps state nothing on screen can reach.
|
|
191
|
+
*
|
|
192
|
+
* `'toolbar'` is the library-browser blueprint's ONE-LINE toolbar
|
|
193
|
+
* (`docs/design/blueprints/library-browser.md`, FRM-14): the filter chips, the selection
|
|
194
|
+
* control and `headerExtra` (view, preview, the app's sort) on a single row under the app's
|
|
195
|
+
* own `PageHeader`. No title, search box or order pills — the page header names the view,
|
|
196
|
+
* and the app owns search and sort — so pass `order`/`query` controlled, as for `'none'`.
|
|
191
197
|
*/
|
|
192
|
-
chrome?: 'header' | 'none';
|
|
198
|
+
chrome?: 'header' | 'none' | 'toolbar';
|
|
193
199
|
/** Full-width strip under the header — tag / kind filter chips. */
|
|
194
200
|
filterStrip?: ReactNode;
|
|
195
201
|
/**
|
|
@@ -265,7 +271,13 @@ export function DenseGalleryShell<O extends string = string>({
|
|
|
265
271
|
}: DenseGalleryShellProps<O>) {
|
|
266
272
|
return (
|
|
267
273
|
<div className='cbgd-root' ref={rootRef}>
|
|
268
|
-
{chrome === '
|
|
274
|
+
{chrome === 'toolbar' ? (
|
|
275
|
+
<div className='cbgd-toolbar' role='toolbar' aria-label='Filter, select and view'>
|
|
276
|
+
{filterStrip}
|
|
277
|
+
{bulkBar}
|
|
278
|
+
<span className='cbgd-toolbar-end'>{headerExtra}</span>
|
|
279
|
+
</div>
|
|
280
|
+
) : chrome === 'none' ? null : (
|
|
269
281
|
<header className='cbgd-header'>
|
|
270
282
|
<span className='cbgd-title'>{title}</span>
|
|
271
283
|
{order ? <OrderPills order={order} /> : null}
|
|
@@ -287,8 +299,12 @@ export function DenseGalleryShell<O extends string = string>({
|
|
|
287
299
|
</header>
|
|
288
300
|
)}
|
|
289
301
|
|
|
290
|
-
{
|
|
291
|
-
|
|
302
|
+
{chrome === 'toolbar' ? null : (
|
|
303
|
+
<>
|
|
304
|
+
{filterStrip}
|
|
305
|
+
{bulkBar}
|
|
306
|
+
</>
|
|
307
|
+
)}
|
|
292
308
|
|
|
293
309
|
{body ?? (
|
|
294
310
|
<VirtualMediaGrid
|
|
@@ -226,6 +226,97 @@
|
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
+
/* ── The one-line toolbar (`chrome='toolbar'`) ─────────────────────────────────
|
|
230
|
+
The library-browser blueprint's toolbar (FRM-14): chips, the selection control and the
|
|
231
|
+
view controls share ONE row under the app's PageHeader, at one locked control height
|
|
232
|
+
(FND-4) — the strips that are full rows of their own elsewhere lose their padding and
|
|
233
|
+
rule here and become segments of it. Wraps on a phone rather than scrolling sideways. */
|
|
234
|
+
.cbgd-toolbar {
|
|
235
|
+
display: flex;
|
|
236
|
+
align-items: center;
|
|
237
|
+
flex-wrap: wrap;
|
|
238
|
+
gap: 8px 16px;
|
|
239
|
+
padding: 8px 16px;
|
|
240
|
+
border-bottom: 1px solid var(--border);
|
|
241
|
+
flex-shrink: 0;
|
|
242
|
+
min-height: 48px;
|
|
243
|
+
}
|
|
244
|
+
.cbgd-toolbar > .cbgd-filterstrip,
|
|
245
|
+
.cbgd-toolbar > .cbmg-bulkbar {
|
|
246
|
+
padding: 0;
|
|
247
|
+
border-bottom: 0;
|
|
248
|
+
min-height: 0;
|
|
249
|
+
}
|
|
250
|
+
/* Above a phone the row has room, so nothing clips a chip's focus ring; on a phone the chips
|
|
251
|
+
keep the strip's own sideways scroll. */
|
|
252
|
+
@media (min-width: 721px) {
|
|
253
|
+
.cbgd-toolbar > .cbgd-filterstrip,
|
|
254
|
+
.cbgd-toolbar > .cbmg-bulkbar {
|
|
255
|
+
overflow: visible;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
.cbgd-toolbar > .cbmg-bulkbar .cbmg-bulkbar-spacer {
|
|
259
|
+
display: none;
|
|
260
|
+
}
|
|
261
|
+
.cbgd-toolbar-end {
|
|
262
|
+
display: inline-flex;
|
|
263
|
+
align-items: center;
|
|
264
|
+
gap: 8px;
|
|
265
|
+
margin-left: auto;
|
|
266
|
+
}
|
|
267
|
+
.cbgd-toolbar .cbgd-chip,
|
|
268
|
+
.cbgd-toolbar .cbgd-order-btn {
|
|
269
|
+
min-height: var(--control-h-sm, 32px);
|
|
270
|
+
display: inline-flex;
|
|
271
|
+
align-items: center;
|
|
272
|
+
justify-content: center;
|
|
273
|
+
}
|
|
274
|
+
.cbgd-toolbar .cbgd-order-btn.is-icon {
|
|
275
|
+
min-width: var(--control-h-sm, 32px);
|
|
276
|
+
}
|
|
277
|
+
.cbgd-toolbar .cbgd-order {
|
|
278
|
+
flex-wrap: nowrap;
|
|
279
|
+
}
|
|
280
|
+
/* A phone: the chips take the first line (scrolling sideways inside it, never the page — the
|
|
281
|
+
strip's own overflow above), and Select and the view controls share the second — ONE second
|
|
282
|
+
line, not two (forge task 2473: at 390px "Select all" in words pushed the app's view controls
|
|
283
|
+
onto a third row, ~60px of a phone's height spent on a wrap). So the end cluster never
|
|
284
|
+
breaks, the gap tightens, and "Select all" keeps its words only as the box's accessible name;
|
|
285
|
+
"N selected" still shows, because once something is picked the count is the readout. */
|
|
286
|
+
@media (max-width: 720px) {
|
|
287
|
+
.cbgd-toolbar {
|
|
288
|
+
padding: 8px 12px;
|
|
289
|
+
column-gap: 8px;
|
|
290
|
+
}
|
|
291
|
+
.cbgd-toolbar > .cbgd-filterstrip {
|
|
292
|
+
flex: 1 1 100%;
|
|
293
|
+
}
|
|
294
|
+
.cbgd-toolbar-end {
|
|
295
|
+
flex-wrap: nowrap;
|
|
296
|
+
flex-shrink: 0;
|
|
297
|
+
}
|
|
298
|
+
.cbgd-toolbar .cbmg-bulkbar-all-idle {
|
|
299
|
+
position: absolute;
|
|
300
|
+
width: 1px;
|
|
301
|
+
height: 1px;
|
|
302
|
+
overflow: hidden;
|
|
303
|
+
clip: rect(0 0 0 0);
|
|
304
|
+
clip-path: inset(50%);
|
|
305
|
+
white-space: nowrap;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/* A finger keeps the 44px floor the strips have on their own (LAY-10). */
|
|
309
|
+
@media (pointer: coarse) {
|
|
310
|
+
.cbgd-toolbar .cbgd-chip,
|
|
311
|
+
.cbgd-toolbar .cbgd-order-btn {
|
|
312
|
+
min-height: 44px;
|
|
313
|
+
}
|
|
314
|
+
.cbgd-toolbar .cbgd-chip,
|
|
315
|
+
.cbgd-toolbar .cbgd-order-btn.is-icon {
|
|
316
|
+
min-width: 44px;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
229
320
|
/* ── Browse grid ────────────────────────────────────────────────────────────── */
|
|
230
321
|
.cbgd-grid {
|
|
231
322
|
padding: 8px;
|
|
@@ -1343,6 +1343,32 @@ describe('chrome="none"', () => {
|
|
|
1343
1343
|
});
|
|
1344
1344
|
});
|
|
1345
1345
|
|
|
1346
|
+
/**
|
|
1347
|
+
* The library-browser blueprint's one-line toolbar (FRM-14): the chips, the selection control
|
|
1348
|
+
* and the view controls on ONE row under the app's own PageHeader — no title, search or
|
|
1349
|
+
* order pills, because the page header and the app own those.
|
|
1350
|
+
*/
|
|
1351
|
+
describe('chrome="toolbar"', () => {
|
|
1352
|
+
test('puts the chips, the select-all control and the view pills on one row', () => {
|
|
1353
|
+
const { container } = render(<MediaGallery items={ITEMS} chrome='toolbar' selectable title='Everything' />);
|
|
1354
|
+
const toolbar = container.querySelector('.cbgd-toolbar');
|
|
1355
|
+
expect(toolbar).not.toBeNull();
|
|
1356
|
+
expect(toolbar?.querySelector('.cbmg-bulkbar')).not.toBeNull();
|
|
1357
|
+
expect(toolbar?.querySelector('[aria-label="How files are shown"]')).not.toBeNull();
|
|
1358
|
+
expect(container.querySelectorAll('.cbmg-bulkbar')).toHaveLength(1);
|
|
1359
|
+
});
|
|
1360
|
+
|
|
1361
|
+
test('and draws no header row, title, search box or order pills', () => {
|
|
1362
|
+
const { container } = render(
|
|
1363
|
+
<MediaGallery items={ITEMS} chrome='toolbar' title='Everything' onQueryChange={() => undefined} />,
|
|
1364
|
+
);
|
|
1365
|
+
expect(container.querySelector('.cbgd-header')).toBeNull();
|
|
1366
|
+
expect(container.querySelector('.cbgd-title')).toBeNull();
|
|
1367
|
+
expect(container.querySelector('.cbgd-search')).toBeNull();
|
|
1368
|
+
expect(container.querySelector('[aria-label="Sort files"]')).toBeNull();
|
|
1369
|
+
});
|
|
1370
|
+
});
|
|
1371
|
+
|
|
1346
1372
|
describe('a consumer that owns the view mode', () => {
|
|
1347
1373
|
test('renders the table when told to, with no pills on screen to have pressed', () => {
|
|
1348
1374
|
const { container } = render(
|
|
@@ -1574,9 +1574,12 @@ export interface MediaGalleryProps {
|
|
|
1574
1574
|
* See {@link DenseGalleryShellProps.chrome}. `'none'` is for an app that has moved this
|
|
1575
1575
|
* row's controls somewhere else — collections put them in a vertical activity bar — and
|
|
1576
1576
|
* it should be passed together with the controlled {@link viewMode} and {@link query}
|
|
1577
|
-
* below, or the gallery keeps state that nothing on screen can reach.
|
|
1577
|
+
* below, or the gallery keeps state that nothing on screen can reach. `'toolbar'` puts the
|
|
1578
|
+
* kind chips, the selection control, the grid/table pills and `headerExtra` on ONE row with
|
|
1579
|
+
* no title, search or order pills — the library-browser blueprint, under the app's own
|
|
1580
|
+
* `PageHeader` (see {@link DenseGalleryShellProps.chrome}).
|
|
1578
1581
|
*/
|
|
1579
|
-
chrome?: 'header' | 'none';
|
|
1582
|
+
chrome?: 'header' | 'none' | 'toolbar';
|
|
1580
1583
|
/**
|
|
1581
1584
|
* Preview every video tile at once, CONTROLLED by the app.
|
|
1582
1585
|
*
|
|
@@ -3547,7 +3550,11 @@ function BulkBar({
|
|
|
3547
3550
|
onClick={onToggleAll}
|
|
3548
3551
|
disabled={total === 0}
|
|
3549
3552
|
/>
|
|
3550
|
-
|
|
3553
|
+
{/* `is-idle` lets the one-line toolbar keep "Select all" as the box's NAME but not its
|
|
3554
|
+
width on a phone (`denseGallery.css`); "N selected" always shows. */}
|
|
3555
|
+
<span className={count > 0 ? undefined : 'cbmg-bulkbar-all-idle'}>
|
|
3556
|
+
{count > 0 ? `${count} selected` : 'Select all'}
|
|
3557
|
+
</span>
|
|
3551
3558
|
</label>
|
|
3552
3559
|
{count > 0 ? (
|
|
3553
3560
|
<>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 10 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -26,4 +26,4 @@
|
|
|
26
26
|
*/
|
|
27
27
|
@source inline("caret-transparent focus-within:border-field-ring focus-within:ring-2");
|
|
28
28
|
@source inline("focus-within:ring-field-ring/30 h-12 has-[[aria-invalid=true]]:border-field-error max-w-sm");
|
|
29
|
-
@source inline("min-h-dvh self-
|
|
29
|
+
@source inline("min-h-dvh self-stretch sm:w-11");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 79 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -34,8 +34,7 @@
|
|
|
34
34
|
@source inline("dark:text-purple-200 dark:text-rose-200 dark:text-sky-200 dark:text-slate-200 dark:text-teal-200");
|
|
35
35
|
@source inline("dark:text-violet-200 focus:opacity-100 g grid-cols-[repeat(7,minmax(0,1fr))]");
|
|
36
36
|
@source inline("group-focus-within:opacity-100 h-3.5 hover:bg-muted/30 hover:bg-muted/40 hover:border-border/80");
|
|
37
|
-
@source inline("
|
|
38
|
-
@source inline("
|
|
39
|
-
@source inline("
|
|
40
|
-
@source inline("text-
|
|
41
|
-
@source inline("text-violet-800 w-3.5");
|
|
37
|
+
@source inline("last:border-r-0 line-through min-h-28 min-h-40 outline-1 outline-dashed outline-tone-amber-ink");
|
|
38
|
+
@source inline("p-1.5 sm:flex-row sm:gap-1 sm:items-center sm:min-h-0 sm:min-h-24 sm:px-1.5 sm:text-xs");
|
|
39
|
+
@source inline("text-amber-900 text-blue-800 text-emerald-800 text-green-800 text-purple-800 text-rose-800");
|
|
40
|
+
@source inline("text-sky-800 text-slate-800 text-teal-800 text-tone-amber-ink text-violet-800 w-3.5");
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* cursedbelt — the `canvas-hud` area's utility candidates. GENERATED BUILD ARTIFACT. Never hand-edit.
|
|
3
|
+
*
|
|
4
|
+
* the pan-and-zoom canvas HUD — zoom keys, minimap, find pill, node menu.
|
|
5
|
+
*
|
|
6
|
+
* Every Tailwind utility the modules in this area's import closure use, MINUS the
|
|
7
|
+
* ones `styles-areas/core.css` already ships. 🔴 Import ALL of these, in
|
|
8
|
+
* this order — this file alone is incomplete:
|
|
9
|
+
*
|
|
10
|
+
* @import "tailwindcss";
|
|
11
|
+
* @import "cursedbelt/styles-static.css";
|
|
12
|
+
* @import "cursedbelt/styles-areas/core.css";
|
|
13
|
+
* @import "cursedbelt/styles-areas/canvas-hud.css";
|
|
14
|
+
* @import "cursedbelt/theme.css";
|
|
15
|
+
*
|
|
16
|
+
* These are CANDIDATES (`@source inline`), not CSS: the app's own Tailwind pass generates
|
|
17
|
+
* them, sorted together with the app's utilities, so an area can never put a base utility
|
|
18
|
+
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
|
+
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
|
+
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
+
* 22 candidate(s).
|
|
22
|
+
*
|
|
23
|
+
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
|
+
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
25
|
+
* import closures rather than a hand-written list, is scripts/styleAreas.ts.
|
|
26
|
+
*/
|
|
27
|
+
@source inline("[&::-webkit-search-cancel-button]:hidden aria-pressed:bg-muted aria-pressed:text-foreground");
|
|
28
|
+
@source inline("bg-background/40 bg-background/70 bottom-3 bottom-4 focus-visible:border-transparent");
|
|
29
|
+
@source inline("focus-visible:ring-0 left-3 min-w-10 ml-2 opacity-100 pb-1.5 pl-0 pl-1 place-items-center pr-1");
|
|
30
|
+
@source inline("pt-1 right-4 w-40 w-64");
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
16
16
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
17
17
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
18
|
-
*
|
|
18
|
+
* 820 candidate(s).
|
|
19
19
|
*
|
|
20
20
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
21
21
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -116,9 +116,9 @@
|
|
|
116
116
|
@source inline("hover:text-destructive-foreground hover:text-foreground hover:text-foreground! hover:underline i");
|
|
117
117
|
@source inline("in inline inline-block inline-flex inline-grid inset inset-0 inset-x-0 inset-y-0 invisible is");
|
|
118
118
|
@source inline("iso isolate it item items items-baseline items-center items-end items-start just justify-between");
|
|
119
|
-
@source inline("justify-center justify-end l leading leading-none leading-relaxed leading-snug
|
|
120
|
-
@source inline("left left-1/2 left-2 lg lg:px-8 line line-clamp-2 lower lowercase m m-0 max max-h
|
|
121
|
-
@source inline("max-h-[calc(var(--radix-popper-available-height,100dvh)-1rem)]");
|
|
119
|
+
@source inline("justify-center justify-end justify-start l leading leading-none leading-relaxed leading-snug");
|
|
120
|
+
@source inline("leading-tight left left-1/2 left-2 lg lg:px-8 line line-clamp-2 lower lowercase m m-0 max max-h");
|
|
121
|
+
@source inline("max-h-[80vh] max-h-[calc(var(--radix-popper-available-height,100dvh)-1rem)]");
|
|
122
122
|
@source inline("max-h-[var(--guide-popover-max-h)] max-h-[var(--radix-select-content-available-height)]");
|
|
123
123
|
@source inline("max-sm:border-b-0 max-sm:border-x-0 max-sm:bottom-0");
|
|
124
124
|
@source inline("max-sm:data-[state=closed]:slide-out-to-bottom max-sm:data-[state=open]:slide-in-from-bottom");
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
@source inline("py-[var(--panel-pad)] py-px r re relative res resize right right-0 right-2 ring ring-2");
|
|
145
145
|
@source inline("ring-background ro rotate-180 round rounded rounded-[calc(var(--radius-md)-0.25rem)]");
|
|
146
146
|
@source inline("rounded-field rounded-full rounded-l-full rounded-lg rounded-md rounded-none rounded-r-full");
|
|
147
|
-
@source inline("rounded-sm rounded-xl ru run running s select select-all select-none shadow");
|
|
147
|
+
@source inline("rounded-sm rounded-xl ru run running s select select-all select-none self-start shadow");
|
|
148
148
|
@source inline("shadow-[var(--shadow-overlay)] shadow-[var(--shadow-popover)] shadow-none shadow-overlay");
|
|
149
149
|
@source inline("shadow-raised shadow-sm shrink shrink-0 size size-0 size-1.5 size-10 size-12 size-14 size-2.5");
|
|
150
150
|
@source inline("size-20 size-3 size-3.5 size-4 size-5 size-6 size-8 sm sm:-translate-x-1/2 sm:-translate-y-1/2");
|
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 25 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
25
25
|
* import closures rather than a hand-written list, is scripts/styleAreas.ts.
|
|
26
26
|
*/
|
|
27
|
-
@source inline("[&>*]:min-w-0 bg-[var(--
|
|
28
|
-
@source inline("bg-
|
|
29
|
-
@source inline("hover:
|
|
30
|
-
@source inline("
|
|
31
|
-
@source inline("text-[var(--
|
|
27
|
+
@source inline("[&>*]:min-w-0 bg-[var(--card)] bg-[var(--muted)]/10 bg-[var(--muted)]/20 bg-[var(--muted)]/30");
|
|
28
|
+
@source inline("bg-accent/15 collapse hover:bg-[var(--muted)]/15 hover:decoration-border");
|
|
29
|
+
@source inline("hover:underline-offset-4 max-h-72 max-w max-w-48 max-w-80 min-w-8 mx-0.5 p-1.5");
|
|
30
|
+
@source inline("place-items-center px-0.5 ring-1 ring-[var(--accent)] self-stretch text-[var(--danger)]");
|
|
31
|
+
@source inline("text-[var(--muted-foreground)] w-36");
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 24 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
25
25
|
* import closures rather than a hand-written list, is scripts/styleAreas.ts.
|
|
26
26
|
*/
|
|
27
27
|
@source inline("border-dashed collapse focus:border-accent focus:ring-1 focus:ring-ring gap-x-4 gap-y-3");
|
|
28
|
-
@source inline("grid-cols-1 grid-cols-12 hover:bg-accent/5 hover:border-border-strong
|
|
29
|
-
@source inline("lg:
|
|
30
|
-
@source inline("sm:border
|
|
28
|
+
@source inline("grid-cols-1 grid-cols-12 hover:bg-accent/5 hover:border-border-strong lg:flex-row lg:inset-8");
|
|
29
|
+
@source inline("lg:items-start lg:w-72 pt-1 ring-1 ring-accent ring-accent/40 self-stretch sm:border");
|
|
30
|
+
@source inline("sm:border-border sm:inset-4 text-muted-foreground/60");
|
|
@@ -18,17 +18,18 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 59 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
25
25
|
* import closures rather than a hand-written list, is scripts/styleAreas.ts.
|
|
26
26
|
*/
|
|
27
27
|
@source inline("[&_svg]:size-3 appearance appearance-none aspect-video backdrop-blur-xs bg-black/55 bg-black/80");
|
|
28
|
-
@source inline("bg-black/85 bg-black/95 bg-white/10 border-none bottom-1
|
|
29
|
-
@source inline("focus-
|
|
30
|
-
@source inline("hover:bg-border hover:bg-white/20 hover:border-accent-solid
|
|
31
|
-
@source inline("min-h-20 min-h-dvh min-w-
|
|
28
|
+
@source inline("bg-black/85 bg-black/95 bg-white/10 border-none bottom-1 col collapse ease-in-out f");
|
|
29
|
+
@source inline("focus-visible:ring-offset-black focus-within:border-field-ring focus-within:ring-2");
|
|
30
|
+
@source inline("focus-within:ring-field-ring/30 hover:bg-border hover:bg-white/20 hover:border-accent-solid");
|
|
31
|
+
@source inline("hover:text-white inset-4 left-1 max-h-[40vh] min-h-20 min-h-dvh min-w-12 min-w-16 min-w-20");
|
|
32
|
+
@source inline("min-w-24 mx-1 p-1.5 pl-2 place-items-center pr-1 resize-none right-1 right-4 size-9");
|
|
32
33
|
@source inline("text-tone-amber-ink text-tone-cyan-ink text-tone-emerald-ink text-tone-orange-ink");
|
|
33
34
|
@source inline("text-tone-purple-ink text-tone-rose-ink text-tone-sky-ink text-tone-slate-ink text-white/70");
|
|
34
|
-
@source inline("top-1 top-4 translate translate-x-px");
|
|
35
|
+
@source inline("top-1 top-4 translate translate-x-px w-40 w-48 zoom zoom-in");
|
package/src/styles-areas/nav.css
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 140 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
@source inline("group-hover/tile:opacity-100 group/navitem group/tile h-12 h-[var(--header-h)]");
|
|
44
44
|
@source inline("h-[var(--header-h-dense)] h-[var(--header-h-roomy)] h-dvh hover:border-foreground/20");
|
|
45
45
|
@source inline("hover:decoration-border hover:scale-110 hover:underline-offset-4 inset-x-2 inset-x-3 inset-y-1");
|
|
46
|
-
@source inline("inset-y-1.5 items-stretch justify-around
|
|
47
|
-
@source inline("lg:
|
|
46
|
+
@source inline("inset-y-1.5 items-stretch justify-around lead leading-4 left-0 left-3 lg:flex lg:flex-col");
|
|
47
|
+
@source inline("lg:hidden lg:shrink-0 max-h-72 max-h-[inherit] max-h-[var(--palette-max-h)]");
|
|
48
48
|
@source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-md:-right-0.5");
|
|
49
49
|
@source inline("max-md:-top-0.5 max-md:absolute max-md:hidden max-sm:flex-none max-sm:justify-center max-sm:px-0");
|
|
50
50
|
@source inline("max-sm:w-10 max-w max-w-48 max-w-64 max-w-80 max-w-sm md:flex md:flex-col md:gap-4 md:hidden");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* cursedbelt — the `palette` area's utility candidates. GENERATED BUILD ARTIFACT. Never hand-edit.
|
|
3
3
|
*
|
|
4
|
-
* the
|
|
4
|
+
* the ⌘K command palette and its hotkey/source hooks.
|
|
5
5
|
*
|
|
6
6
|
* Every Tailwind utility the modules in this area's import closure use, MINUS the
|
|
7
7
|
* ones `styles-areas/core.css` already ships. 🔴 Import ALL of these, in
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 7 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
25
25
|
* import closures rather than a hand-written list, is scripts/styleAreas.ts.
|
|
26
26
|
*/
|
|
27
27
|
@source inline("focus-within:ring-2 focus-within:ring-offset-0 focus-within:ring-ring h-5 italic min-h-32");
|
|
28
|
-
@source inline("
|
|
28
|
+
@source inline("top-full");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 29 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
@source inline("bg-accent/15 border-[var(--border)] border-l border-r data-[state=closed]:slide-out-to-bottom");
|
|
28
28
|
@source inline("data-[state=closed]:slide-out-to-left data-[state=closed]:slide-out-to-right");
|
|
29
29
|
@source inline("data-[state=open]:slide-in-from-bottom data-[state=open]:slide-in-from-left");
|
|
30
|
-
@source inline("data-[state=open]:slide-in-from-right disabled:opacity-100 hover:opacity-90
|
|
31
|
-
@source inline("
|
|
32
|
-
@source inline("
|
|
30
|
+
@source inline("data-[state=open]:slide-in-from-right disabled:opacity-100 hover:opacity-90 left-0 left-3");
|
|
31
|
+
@source inline("max-h-56 max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-w-sm");
|
|
32
|
+
@source inline("min-w-48 ml-2 mt-4 pl-9 right-3 rounded-l-xl rounded-r-xl rounded-t-xl space-y-4");
|
|
33
33
|
@source inline("text-[var(--muted-foreground)]");
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* after an app's responsive variant (task 2124). An app that imports every area gets exactly
|
|
19
19
|
* what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
|
|
20
20
|
* src/stylesAreas.spec.ts, which is also what fails when this file is stale.
|
|
21
|
-
*
|
|
21
|
+
* 24 candidate(s).
|
|
22
22
|
*
|
|
23
23
|
* Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
|
|
24
24
|
* `bun run build` runs. The map of what is in which area, and why the areas are
|
|
@@ -29,4 +29,4 @@
|
|
|
29
29
|
@source inline("data-[state=open]:slide-in-from-left data-[state=open]:slide-in-from-right h-80");
|
|
30
30
|
@source inline("hover:bg-muted/60 hover:no-underline last:border-0 left-0 max-h-72 max-h-96");
|
|
31
31
|
@source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-w-sm");
|
|
32
|
-
@source inline("no-underline rounded-l-xl rounded-r-xl rounded-t-xl
|
|
32
|
+
@source inline("no-underline rounded-l-xl rounded-r-xl rounded-t-xl w-2");
|