cursedbelt 5.91.0 → 5.92.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 (87) hide show
  1. package/dist/react/activity-bar/activityBar.css +5 -0
  2. package/dist/react/components/Autocomplete.d.ts +11 -2
  3. package/dist/react/components/Autocomplete.d.ts.map +1 -1
  4. package/dist/react/components/Autocomplete.js +7 -6
  5. package/dist/react/components/Autocomplete.js.map +1 -1
  6. package/dist/react/components/FileDropZone.d.ts.map +1 -1
  7. package/dist/react/components/FileDropZone.js +12 -76
  8. package/dist/react/components/FileDropZone.js.map +1 -1
  9. package/dist/react/components/TagsInput.d.ts +46 -4
  10. package/dist/react/components/TagsInput.d.ts.map +1 -1
  11. package/dist/react/components/TagsInput.js +92 -39
  12. package/dist/react/components/TagsInput.js.map +1 -1
  13. package/dist/react/components/TagsInputSuggesting.d.ts +8 -0
  14. package/dist/react/components/TagsInputSuggesting.d.ts.map +1 -0
  15. package/dist/react/components/TagsInputSuggesting.js +48 -0
  16. package/dist/react/components/TagsInputSuggesting.js.map +1 -0
  17. package/dist/react/components/dropTransfer.d.ts +53 -0
  18. package/dist/react/components/dropTransfer.d.ts.map +1 -0
  19. package/dist/react/components/dropTransfer.js +116 -0
  20. package/dist/react/components/dropTransfer.js.map +1 -0
  21. package/dist/react/components/suggestionList.d.ts +13 -0
  22. package/dist/react/components/suggestionList.d.ts.map +1 -0
  23. package/dist/react/components/suggestionList.js +19 -0
  24. package/dist/react/components/suggestionList.js.map +1 -0
  25. package/dist/react/index.d.ts +1 -0
  26. package/dist/react/index.d.ts.map +1 -1
  27. package/dist/react/index.js +1 -0
  28. package/dist/react/index.js.map +1 -1
  29. package/dist/react/media-gallery/MediaMetaEditor.d.ts +4 -4
  30. package/dist/react/optimistic/optimistic.d.ts +11 -2
  31. package/dist/react/optimistic/optimistic.d.ts.map +1 -1
  32. package/dist/react/optimistic/optimistic.js +4 -2
  33. package/dist/react/optimistic/optimistic.js.map +1 -1
  34. package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
  35. package/dist/styles-areas/analytics.css +14 -19
  36. package/dist/styles-areas/auth.css +3 -4
  37. package/dist/styles-areas/canvas-hud.css +3 -3
  38. package/dist/styles-areas/chat.css +10 -11
  39. package/dist/styles-areas/code-editor.css +2 -2
  40. package/dist/styles-areas/core.css +60 -54
  41. package/dist/styles-areas/data-table.css +13 -17
  42. package/dist/styles-areas/disk-usage.css +6 -7
  43. package/dist/styles-areas/emoji.css +2 -3
  44. package/dist/styles-areas/fields.css +15 -20
  45. package/dist/styles-areas/master-detail.css +3 -4
  46. package/dist/styles-areas/master-lock.css +1 -2
  47. package/dist/styles-areas/media-gallery.css +8 -10
  48. package/dist/styles-areas/rich-text.css +3 -3
  49. package/dist/styles-areas/stats.css +13 -17
  50. package/dist/styles-areas/wizard.css +6 -11
  51. package/package.json +7 -1
  52. package/scripts/guardrails-baseline.json +1 -1
  53. package/scripts/guardrailsEnforce.spec.ts +13 -0
  54. package/scripts/guardrailsEnforce.ts +5 -3
  55. package/scripts/styleAreas.ts +3 -0
  56. package/src/react/activity-bar/activityBar.css +5 -0
  57. package/src/react/components/Autocomplete.spec.tsx +55 -1
  58. package/src/react/components/Autocomplete.tsx +18 -43
  59. package/src/react/components/FileDropZone.tsx +12 -83
  60. package/src/react/components/TagsInput.spec.tsx +129 -14
  61. package/src/react/components/TagsInput.tsx +153 -85
  62. package/src/react/components/TagsInputSuggesting.tsx +94 -0
  63. package/src/react/components/dropTransfer.spec.ts +76 -0
  64. package/src/react/components/dropTransfer.ts +133 -0
  65. package/src/react/components/suggestionList.tsx +66 -0
  66. package/src/react/disk-usage/DiskUsage.spec.tsx +3 -0
  67. package/src/react/index.ts +1 -0
  68. package/src/react/lib/floatingStyles.spec.ts +2 -1
  69. package/src/react/media-gallery/MediaMetaEditor.tsx +4 -4
  70. package/src/react/optimistic/optimistic.spec.tsx +41 -0
  71. package/src/react/optimistic/optimistic.ts +13 -4
  72. package/src/styles-areas/analytics.css +14 -19
  73. package/src/styles-areas/auth.css +3 -4
  74. package/src/styles-areas/canvas-hud.css +3 -3
  75. package/src/styles-areas/chat.css +10 -11
  76. package/src/styles-areas/code-editor.css +2 -2
  77. package/src/styles-areas/core.css +60 -54
  78. package/src/styles-areas/data-table.css +13 -17
  79. package/src/styles-areas/disk-usage.css +6 -7
  80. package/src/styles-areas/emoji.css +2 -3
  81. package/src/styles-areas/fields.css +15 -20
  82. package/src/styles-areas/master-detail.css +3 -4
  83. package/src/styles-areas/master-lock.css +1 -2
  84. package/src/styles-areas/media-gallery.css +8 -10
  85. package/src/styles-areas/rich-text.css +3 -3
  86. package/src/styles-areas/stats.css +13 -17
  87. package/src/styles-areas/wizard.css +6 -11
@@ -420,6 +420,7 @@ export {
420
420
  type PickedIcon,
421
421
  } from './components/IconPicker.js';
422
422
  export { FileDropZone, type FileDropZoneProps } from './components/FileDropZone.js';
423
+ export { filesFromDataTransfer } from './components/dropTransfer.js';
423
424
  export {
424
425
  FileLocation,
425
426
  type FileLocationProps,
@@ -29,7 +29,8 @@ describe('the floating layer — DESIGN.md §5 containment', () => {
29
29
  'components/HoverCard.tsx',
30
30
  'components/SelectFieldImpl.tsx',
31
31
  'components/ComboboxField.tsx',
32
- 'components/Autocomplete.tsx',
32
+ // AutocompleteField's and TagsInput's list (forge task 3602 moved it out of Autocomplete.tsx).
33
+ 'components/suggestionList.tsx',
33
34
  'components/TooltipImpl.tsx',
34
35
  ];
35
36
  for (const rel of files) {
@@ -40,10 +40,10 @@ import type { MediaGalleryItem } from './types.js';
40
40
  * correct use is the one nobody wants.
41
41
  *
42
42
  * ── Why the vocabulary is offered rather than typed ───────────────────────────────────
43
- * `suggestions` is every tag already in the gallery, handed to `TagsInput`'s native
44
- * `<datalist>`. Re-typing `holiday` is how `Holiday` and `holidays` get minted beside it, and
45
- * three spellings of one tag is three filter chips that each find a third of the album. The
46
- * model matches case-insensitively for the same reason; this is the half that stops it
43
+ * `suggestions` is every tag already in the gallery, handed to `TagsInput`, which draws them in
44
+ * the kit's own list as you type (never a `<datalist>` — forge task 3602). Re-typing `holiday`
45
+ * is how `Holiday` and `holidays` get minted beside it, and three spellings of one tag is three
46
+ * filter chips that each find a third of the album. The model matches case-insensitively for the same reason; this is the half that stops it
47
47
  * happening at the keyboard rather than cleaning up afterwards.
48
48
  */
49
49
  export interface MediaMetaEditorProps {
@@ -150,6 +150,47 @@ describe('optimistic', () => {
150
150
  expect(order).toEqual(['X sent', 'X done', 'Y sent']);
151
151
  });
152
152
 
153
+ test('onSuccess says whether a later change under the same key is still pending', async () => {
154
+ const gate = deferred<void>();
155
+ const seen: [string, boolean][] = [];
156
+ const one = optimistic({
157
+ label: 'move',
158
+ key: 'image-a',
159
+ request: async () => {
160
+ await gate.promise;
161
+ return 'first';
162
+ },
163
+ onSuccess: (answer, { superseded }) => seen.push([answer, superseded]),
164
+ });
165
+ const other = optimistic({
166
+ label: 'move',
167
+ key: 'image-b',
168
+ request: async () => 'elsewhere',
169
+ onSuccess: (answer, { superseded }) => seen.push([answer, superseded]),
170
+ });
171
+ const two = optimistic({
172
+ label: 'move',
173
+ key: 'image-a',
174
+ request: async () => 'second',
175
+ onSuccess: (answer, { superseded }) => seen.push([answer, superseded]),
176
+ });
177
+ const unkeyed = optimistic({
178
+ label: 'save',
179
+ request: async () => 'no key',
180
+ onSuccess: (answer, { superseded }) => seen.push([answer, superseded]),
181
+ });
182
+ await Promise.all([other, unkeyed]);
183
+ gate.resolve();
184
+ await Promise.all([one, two]);
185
+ // Another key's pending change never supersedes; the last change under a key is never superseded.
186
+ expect(seen).toEqual([
187
+ ['no key', false],
188
+ ['elsewhere', false],
189
+ ['first', true],
190
+ ['second', false],
191
+ ]);
192
+ });
193
+
153
194
  test('the page asks before closing while a change is unsent, and stops asking after', async () => {
154
195
  const server = deferred<void>();
155
196
  const done = optimistic({ label: 'save', request: () => server.promise, toast: false });
@@ -95,8 +95,15 @@ export interface OptimisticOptions<R> {
95
95
  * record. No key: the request goes at once.
96
96
  */
97
97
  key?: string;
98
- /** After the server said yes — reconcile a temporary id, refresh a summary. Not reverted. */
99
- onSuccess?: (result: R) => void;
98
+ /**
99
+ * After the server said yes — reconcile a temporary id, refresh a summary. Not reverted.
100
+ *
101
+ * `superseded` is true when a later change under the same {@link key} is still pending. An
102
+ * answer that is the whole record (a pin list, an image's saved geometry) was computed before
103
+ * that change reached the server, so writing it into state would draw the later edit undone
104
+ * until its own answer lands — skip the write while it is true; the last answer has the say.
105
+ */
106
+ onSuccess?: (result: R, context: { superseded: boolean }) => void;
100
107
  /** After the rollback, beside the toast. */
101
108
  onError?: (error: unknown) => void;
102
109
  /** `false` silences the failure toast (the caller shows the failure itself). Default on. */
@@ -242,13 +249,15 @@ export function optimistic<R>(options: OptimisticOptions<R>): Promise<Optimistic
242
249
  const applied = (targets as (OptimisticTarget<unknown> | OptimisticStep)[]).map((t) =>
243
250
  isStep(t) ? applyStep(t) : applyTarget(t),
244
251
  );
245
- const done = track({ id: nextId++, label, key, startedAt: Date.now() });
252
+ const id = nextId++;
253
+ const done = track({ id, label, key, startedAt: Date.now() });
246
254
 
247
255
  return enqueue(key, request).then(
248
256
  (value): OptimisticOutcome<R> => {
249
257
  done();
250
258
  for (const a of applied) a.settled();
251
- onSuccess?.(value);
259
+ const superseded = key !== undefined && pending.some((p) => p.key === key && p.id > id);
260
+ onSuccess?.(value, { superseded });
252
261
  return { ok: true, value };
253
262
  },
254
263
  async (error: unknown): Promise<OptimisticOutcome<R>> => {
@@ -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
- * 159 candidate(s).
21
+ * 142 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
@@ -31,22 +31,17 @@
31
31
  @source inline("@max-4xl:invisible @max-4xl:min-w-0! @max-4xl:p-0! @max-4xl:text-[length:0] @max-4xl:w-0!");
32
32
  @source inline("@max-6xl:[&>*]:hidden @max-6xl:border-0 @max-6xl:invisible @max-6xl:min-w-0! @max-6xl:p-0!");
33
33
  @source inline("@max-6xl:text-[length:0] @max-6xl:w-0! @max-xl:contents @xl:basis-auto @xl:block @xl:hidden");
34
- @source inline("[&>*]:hidden [&>*]:max-w-none [&>svg]:size-3.5 [&_svg]:size-3 active:cursor-grabbing basis");
35
- @source inline("basis-full bg-[var(--cb-frozen-bg)] bg-accent/15 bg-card/95 bg-gradient-to-t bg-muted/30");
36
- @source inline("bg-muted/50 border-accent-solid border-accent/60 border-b-0! border-field-error border-solid");
37
- @source inline("border-t-2 col collapse cursor-grab data-[ending-style]:opacity-0 data-[ending-style]:scale-95");
38
- @source inline("data-[highlighted]:bg-accent/10 data-[highlighted]:text-accent-strong");
39
- @source inline("data-[starting-style]:opacity-0 data-[starting-style]:scale-95 disabled:opacity-40 duration-100");
40
- @source inline("fade-in focus-visible:ring-field-ring/40 focus-within:border-field-ring focus-within:ring-2");
41
- @source inline("focus-within:ring-field-ring/30 from-card gap-x-6 h-0 h-105");
42
- @source inline("has-[[aria-invalid=true]]:border-field-error hover:bg-background hover:bg-muted/40");
43
- @source inline("hover:border-field-ring hover:text-warning italic justify-self-end last:border-0 left-11");
44
- @source inline("left-2.5 list-none max-h-64 max-h-88 max-sm:flex-1 max-sm:flex-wrap max-sm:min-w-0");
34
+ @source inline("[&>*]:hidden [&>*]:max-w-none [&>svg]:size-3.5 active:cursor-grabbing basis basis-full");
35
+ @source inline("bg-[var(--cb-frozen-bg)] bg-accent/15 bg-card/95 bg-gradient-to-t bg-muted/30 bg-muted/50");
36
+ @source inline("border-accent-solid border-accent/60 border-b-0! border-field-error border-solid border-t-2 col");
37
+ @source inline("collapse cursor-grab disabled:opacity-40 fade-in focus-visible:ring-field-ring/40 from-card");
38
+ @source inline("gap-x-6 h-0 h-105 has-[[aria-invalid=true]]:border-field-error hover:bg-background");
39
+ @source inline("hover:bg-muted/40 hover:border-field-ring hover:text-warning italic justify-self-end");
40
+ @source inline("last:border-0 left-11 left-2.5 list-none max-h-88 max-sm:flex-1 max-sm:flex-wrap max-sm:min-w-0");
45
41
  @source inline("max-sm:min-w-24 max-sm:min-w-32 max-sm:ml-13.5 max-sm:w-auto max-w-32 max-w-36 max-w-45 max-w-48");
46
- @source inline("max-w-60 min-h-20 min-h-dvh min-w-0! min-w-20 min-w-24 min-w-4 min-w-52");
47
- @source inline("min-w-[var(--anchor-width)] min-w-max mr-2 mt-1.5 mt-3 mt-4 not-italic ordinal p-0! pb-1.5");
48
- @source inline("pl-1.5 pl-2 pr-0.5 pr-1 pr-10 pr-16 pr-3 pr-9 pt-1 py-0! resize-none resize-y right-3");
49
- @source inline("ring-field-error/30 self self-stretch shadow-[1px_0_0_0_var(--color-border)] shrink-[2] size-7");
50
- @source inline("slide-in-from-top-1 table-fixed text-[length:0] text-accent-solid-foreground");
51
- @source inline("text-field-placeholder text-success text-xl to-transparent top-3 transition-[transform,opacity]");
52
- @source inline("w-0 w-0! w-11 w-12 w-20 w-32 w-36 w-40 w-88");
42
+ @source inline("max-w-60 min-h-20 min-h-dvh min-w-0! min-w-20 min-w-4 min-w-52 min-w-max mr-2 mt-1.5 mt-3 mt-4");
43
+ @source inline("not-italic ordinal p-0! pb-1.5 pl-1.5 pr-0.5 pr-10 pr-16 pr-3 pr-9 pt-1 py-0! resize-none");
44
+ @source inline("resize-y right-3 ring-field-error/30 self self-stretch shadow-[1px_0_0_0_var(--color-border)]");
45
+ @source inline("shrink-[2] size-7 slide-in-from-top-1 table-fixed text-[length:0] text-accent-solid-foreground");
46
+ @source inline("text-field-placeholder text-success text-xl to-transparent top-3 w-0 w-0! w-11 w-12 w-20 w-32");
47
+ @source inline("w-36 w-40 w-88");
@@ -18,12 +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
- * 9 candidate(s).
21
+ * 6 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("caret-transparent focus-within:border-field-ring focus-within:ring-2");
28
- @source inline("focus-within:ring-field-ring/30 h-12 has-[[aria-invalid=true]]:border-field-error min-h-dvh");
29
- @source inline("self-stretch sm:w-11");
27
+ @source inline("caret-transparent h-12 has-[[aria-invalid=true]]:border-field-error min-h-dvh self-stretch");
28
+ @source inline("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
- * 42 candidate(s).
21
+ * 41 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,5 +29,5 @@
29
29
  @source inline("[scrollbar-width:none] aria-pressed:bg-muted aria-pressed:text-foreground basis-0 basis-full");
30
30
  @source inline("bg-background/40 bg-background/70 bottom-3 bottom-4 focus-visible:border-transparent");
31
31
  @source inline("focus-visible:ring-0 left-3 max-w-48 min-w-10 min-w-26 min-w-40 ml-2 opacity-100 order-1 order-2");
32
- @source inline("order-3 overflow-visible pb-1.5 pl-0 pl-1 place-items-center pr-1 pt-1 px-0.5 right-3 right-4");
33
- @source inline("w-40 w-64 z-[5000]");
32
+ @source inline("order-3 overflow-visible pb-1.5 pl-0 pl-1 place-items-center pt-1 px-0.5 right-3 right-4 w-40");
33
+ @source inline("w-64 z-[5000]");
@@ -18,19 +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
- * 67 candidate(s).
21
+ * 66 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("-bottom-0.5 -mx-0.5 -outline-offset-2 -right-0.5 -space-x-2 [&_svg]:size-3 animate-bounce");
28
- @source inline("bg-background/30 bg-black/10 bg-gradient-to-t border-border/40 bottom-3 col collapse");
29
- @source inline("dark:bg-white/10 first:mt-0 flex-row flex-row-reverse flex-shrink focus-visible:outline-2");
30
- @source inline("focus-visible:outline-offset-2 focus-visible:outline-ring from-surface h-105 h-3.5");
31
- @source inline("hover:bg-background/50 hover:border-field-ring hover:opacity-80 italic list-decimal list-disc");
32
- @source inline("max-w-4/5 min-h-20 min-w-16 ml-0.5 ml-1.5 mr-9 outline-2 outline-accent outline-dashed pl-5");
33
- @source inline("pointer-coarse:mr-12 pt-0.5 px-0.5 px-3.5 resize-none right-1 rounded-2xl rounded-bl-md");
34
- @source inline("rounded-bl-sm rounded-br-md rounded-br-sm size-7 text-[length:var(--text-code-block)]");
35
- @source inline("text-[length:var(--text-code-inline)] text-xl to-transparent top-1 underline-offset-2 w-1.5 w-3");
36
- @source inline("w-3.5 w-40 w-48 w-56 w-88 z-[9]");
27
+ @source inline("-bottom-0.5 -mx-0.5 -outline-offset-2 -right-0.5 -space-x-2 animate-bounce bg-background/30");
28
+ @source inline("bg-black/10 bg-gradient-to-t border-border/40 bottom-3 col collapse dark:bg-white/10 first:mt-0");
29
+ @source inline("flex-row flex-row-reverse flex-shrink focus-visible:outline-2 focus-visible:outline-offset-2");
30
+ @source inline("focus-visible:outline-ring from-surface h-105 h-3.5 hover:bg-background/50");
31
+ @source inline("hover:border-field-ring hover:opacity-80 italic list-decimal list-disc max-w-4/5 min-h-20");
32
+ @source inline("min-w-16 ml-0.5 ml-1.5 mr-9 outline-2 outline-accent outline-dashed pl-5 pointer-coarse:mr-12");
33
+ @source inline("pt-0.5 px-0.5 px-3.5 resize-none right-1 rounded-2xl rounded-bl-md rounded-bl-sm rounded-br-md");
34
+ @source inline("rounded-br-sm size-7 text-[length:var(--text-code-block)] text-[length:var(--text-code-inline)]");
35
+ @source inline("text-xl to-transparent top-1 underline-offset-2 w-1.5 w-3 w-3.5 w-40 w-48 w-56 w-88 z-[9]");
@@ -18,10 +18,10 @@
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
- * 6 candidate(s).
21
+ * 5 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("focus-within:ring-2 focus-within:ring-offset-0 focus-within:ring-ring italic li line-through");
27
+ @source inline("focus-within:ring-offset-0 focus-within:ring-ring italic li line-through");
@@ -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
- * 928 candidate(s).
18
+ * 945 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
@@ -37,7 +37,7 @@
37
37
  @source inline("[&_.alert-icon]:text-muted-foreground [&_.alert-icon]:text-success [&_.alert-icon]:text-warning");
38
38
  @source inline("[&_[data-icon]]:text-accent [&_[data-icon]]:text-destructive [&_[data-icon]]:text-success");
39
39
  @source inline("[&_[data-icon]]:text-warning [&_sup]:leading-none [&_svg]:shrink-0 [&_svg]:size-12");
40
- @source inline("[&_svg]:size-4 [&_svg]:size-5 [&_svg]:size-6 [--cbfk-sticky-top:-1rem]");
40
+ @source inline("[&_svg]:size-3 [&_svg]:size-4 [&_svg]:size-5 [&_svg]:size-6 [--cbfk-sticky-top:-1rem]");
41
41
  @source inline("[-webkit-touch-callout:none] [@media(orientation:landscape)_and_(max-height:500px)]:py-1.5");
42
42
  @source inline("[@media(orientation:landscape)_and_(max-height:500px)]:text-h3 [overflow-wrap:anywhere] a");
43
43
  @source inline("absolute act active active:bg-accent active:scale-100 active:scale-[var(--press-scale)]");
@@ -71,7 +71,9 @@
71
71
  @source inline("content contents cursor cursor-col-resize cursor-default cursor-ew-resize cursor-not-allowed");
72
72
  @source inline("cursor-pointer cursor-row-resize d dark dark:bg-card-overlay dark:bg-card-raised");
73
73
  @source inline("dark:bg-gray-800 data data-[disabled]:hover:bg-border data-[disabled]:opacity-50");
74
- @source inline("data-[disabled]:pointer-events-none data-[interactive=true]:duration-[var(--duration-base)]");
74
+ @source inline("data-[disabled]:pointer-events-none data-[ending-style]:opacity-0 data-[ending-style]:scale-95");
75
+ @source inline("data-[highlighted]:bg-accent/10 data-[highlighted]:text-accent-strong");
76
+ @source inline("data-[interactive=true]:duration-[var(--duration-base)]");
75
77
  @source inline("data-[interactive=true]:ease-[var(--ease-out)] data-[interactive=true]:hover:-translate-y-0.5");
76
78
  @source inline("data-[interactive=true]:hover:border-border-strong data-[interactive=true]:transition-all");
77
79
  @source inline("data-[interactive=true]:transition-colors data-[placeholder]:text-muted-foreground");
@@ -79,44 +81,47 @@
79
81
  @source inline("data-[side=left]:slide-in-from-right-1 data-[side=left]:slide-in-from-right-2");
80
82
  @source inline("data-[side=right]:slide-in-from-left-1 data-[side=right]:slide-in-from-left-2");
81
83
  @source inline("data-[side=top]:slide-in-from-bottom-1 data-[side=top]:slide-in-from-bottom-2");
82
- @source inline("data-[state=active]:bg-background data-[state=active]:border-accent");
83
- @source inline("data-[state=active]:font-semibold data-[state=active]:shadow-raised");
84
- @source inline("data-[state=active]:text-accent data-[state=active]:text-foreground");
85
- @source inline("data-[state=checked]:bg-accent-solid data-[state=checked]:bg-accent/10");
86
- @source inline("data-[state=checked]:border-accent data-[state=checked]:border-accent-solid");
87
- @source inline("data-[state=checked]:font-medium data-[state=checked]:ring-1 data-[state=checked]:ring-2");
88
- @source inline("data-[state=checked]:ring-accent data-[state=checked]:text-white");
89
- @source inline("data-[state=checked]:translate-x-4 data-[state=closed]:animate-collapsible-up");
90
- @source inline("data-[state=closed]:animate-out data-[state=closed]:fade-out-0");
91
- @source inline("data-[state=closed]:pointer-events-none! data-[state=closed]:slide-out-to-bottom");
92
- @source inline("data-[state=closed]:slide-out-to-left data-[state=closed]:slide-out-to-right");
93
- @source inline("data-[state=closed]:zoom-out-[0.985] data-[state=delayed-open]:animate-in");
94
- @source inline("data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-[0.985]");
95
- @source inline("data-[state=indeterminate]:bg-accent-solid data-[state=indeterminate]:border-accent-solid");
96
- @source inline("data-[state=indeterminate]:text-white data-[state=open]:animate-collapsible-down");
97
- @source inline("data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-bottom");
84
+ @source inline("data-[starting-style]:opacity-0 data-[starting-style]:scale-95 data-[state=active]:bg-background");
85
+ @source inline("data-[state=active]:border-accent data-[state=active]:font-semibold");
86
+ @source inline("data-[state=active]:shadow-raised data-[state=active]:text-accent");
87
+ @source inline("data-[state=active]:text-foreground data-[state=checked]:bg-accent-solid");
88
+ @source inline("data-[state=checked]:bg-accent/10 data-[state=checked]:border-accent");
89
+ @source inline("data-[state=checked]:border-accent-solid data-[state=checked]:font-medium");
90
+ @source inline("data-[state=checked]:ring-1 data-[state=checked]:ring-2 data-[state=checked]:ring-accent");
91
+ @source inline("data-[state=checked]:text-white data-[state=checked]:translate-x-4");
92
+ @source inline("data-[state=closed]:animate-collapsible-up data-[state=closed]:animate-out");
93
+ @source inline("data-[state=closed]:fade-out-0 data-[state=closed]:pointer-events-none!");
94
+ @source inline("data-[state=closed]:slide-out-to-bottom data-[state=closed]:slide-out-to-left");
95
+ @source inline("data-[state=closed]:slide-out-to-right data-[state=closed]:zoom-out-[0.985]");
96
+ @source inline("data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0");
97
+ @source inline("data-[state=delayed-open]:zoom-in-[0.985] data-[state=indeterminate]:bg-accent-solid");
98
+ @source inline("data-[state=indeterminate]:border-accent-solid data-[state=indeterminate]:text-white");
99
+ @source inline("data-[state=open]:animate-collapsible-down data-[state=open]:animate-in");
100
+ @source inline("data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-bottom");
98
101
  @source inline("data-[state=open]:slide-in-from-bottom-2 data-[state=open]:slide-in-from-left");
99
102
  @source inline("data-[state=open]:slide-in-from-right data-[state=open]:zoom-in-[0.985]");
100
103
  @source inline("data-[state=unchecked]:bg-muted data-[state=unchecked]:translate-x-0 disable disabled");
101
104
  @source inline("disabled:active:scale-100 disabled:bg-muted disabled:border-transparent");
102
105
  @source inline("disabled:cursor-not-allowed disabled:hover:bg-transparent disabled:hover:border-border");
103
106
  @source inline("disabled:hover:text-muted-foreground disabled:opacity-50 disabled:pointer-events-none");
104
- @source inline("disabled:text-muted-foreground div divide-border divide-y duration duration-200 duration-300");
105
- @source inline("duration-[var(--duration-base)] duration-[var(--duration-fast)] duration-[var(--duration-slow)]");
106
- @source inline("duration-[var(--duration-slow)]! e ease ease-[var(--ease-out)] ease-[var(--ease-out)]! empty");
107
- @source inline("empty:hidden fade fade-out file file:bg-transparent file:border-0 file:font-medium file:mr-3");
108
- @source inline("file:text-foreground file:text-sm fill fill-[var(--color-popover)] fill-border fill-current");
109
- @source inline("filter fix fixed flex flex-1 flex-col flex-none flex-wrap focus focus-visible");
110
- @source inline("focus-visible:bg-destructive-solid focus-visible:bg-destructive/10 focus-visible:bg-muted");
111
- @source inline("focus-visible:border-field-ring focus-visible:opacity-100 focus-visible:outline-none");
112
- @source inline("focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-accent-solid");
113
- @source inline("focus-visible:ring-destructive focus-visible:ring-field-ring/30 focus-visible:ring-offset-1");
114
- @source inline("focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-ring");
115
- @source inline("focus-visible:ring-success focus-visible:text-destructive-foreground focus:bg-accent/10");
116
- @source inline("focus:bg-destructive/10 focus:outline-none focus:ring-2 focus:ring-accent focus:text-accent");
117
- @source inline("focus:text-destructive font font-[inherit] font-bold font-medium font-mono font-normal font-sans");
118
- @source inline("font-semibold gap gap-0 gap-0.5 gap-1 gap-1.5 gap-12 gap-16 gap-2 gap-3 gap-4 gap-6 gap-8 gap-px");
119
- @source inline("gap-x-0 gap-x-3 gap-x-4 gap-y-0 gap-y-1 gap-y-2 gap-y-4 gap-y-[var(--col-gap)] grid grid-cols-2");
107
+ @source inline("disabled:text-muted-foreground div divide-border divide-y duration duration-100 duration-200");
108
+ @source inline("duration-300 duration-[var(--duration-base)] duration-[var(--duration-fast)]");
109
+ @source inline("duration-[var(--duration-slow)] duration-[var(--duration-slow)]! e ease ease-[var(--ease-out)]");
110
+ @source inline("ease-[var(--ease-out)]! empty empty:hidden fade fade-out file file:bg-transparent file:border-0");
111
+ @source inline("file:font-medium file:mr-3 file:text-foreground file:text-sm fill fill-[var(--color-popover)]");
112
+ @source inline("fill-border fill-current filter fix fixed flex flex-1 flex-col flex-none flex-wrap focus");
113
+ @source inline("focus-visible focus-visible:bg-destructive-solid focus-visible:bg-destructive/10");
114
+ @source inline("focus-visible:bg-muted focus-visible:border-field-ring focus-visible:opacity-100");
115
+ @source inline("focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent");
116
+ @source inline("focus-visible:ring-accent-solid focus-visible:ring-destructive focus-visible:ring-field-ring/30");
117
+ @source inline("focus-visible:ring-offset-1 focus-visible:ring-offset-2 focus-visible:ring-offset-background");
118
+ @source inline("focus-visible:ring-ring focus-visible:ring-success focus-visible:text-destructive-foreground");
119
+ @source inline("focus-within:border-field-ring focus-within:ring-2 focus-within:ring-field-ring/30");
120
+ @source inline("focus:bg-accent/10 focus:bg-destructive/10 focus:outline-none focus:ring-2 focus:ring-accent");
121
+ @source inline("focus:text-accent focus:text-destructive font font-[inherit] font-bold font-medium font-mono");
122
+ @source inline("font-normal font-sans font-semibold gap gap-0 gap-0.5 gap-1 gap-1.5 gap-12 gap-16 gap-2 gap-3");
123
+ @source inline("gap-4 gap-6 gap-8 gap-px gap-x-0 gap-x-3 gap-x-4 gap-y-0 gap-y-1 gap-y-2 gap-y-4");
124
+ @source inline("gap-y-[var(--col-gap)] grid grid-cols-2");
120
125
  @source inline("grid-cols-[minmax(0,var(--property-label-w))_minmax(0,1fr)]");
121
126
  @source inline("grid-cols-[repeat(auto-fit,minmax(min(var(--cb-grid-min),100%),1fr))] grid-flow-col group");
122
127
  @source inline("group-active/sep:opacity-100 group-data-[density=compact]/properties:items-start");
@@ -138,7 +143,7 @@
138
143
  @source inline("items-end items-start just justify-between justify-center justify-end justify-start l last");
139
144
  @source inline("last:border-b-0 lead leading leading-4 leading-5 leading-none leading-relaxed leading-snug");
140
145
  @source inline("leading-tight left left-0 left-1/2 left-2 lg lg:px-8 line line-clamp-2 low lower lowercase m m-0");
141
- @source inline("max max-h max-h-[80vh] max-h-[calc(var(--radix-popper-available-height,100dvh)-1rem)]");
146
+ @source inline("max max-h max-h-64 max-h-[80vh] max-h-[calc(var(--radix-popper-available-height,100dvh)-1rem)]");
142
147
  @source inline("max-h-[var(--guide-popover-max-h)] max-h-[var(--radix-select-content-available-height)]");
143
148
  @source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-sm:border-b-0");
144
149
  @source inline("max-sm:border-x-0 max-sm:bottom-0 max-sm:data-[state=closed]:slide-out-to-bottom");
@@ -151,21 +156,22 @@
151
156
  @source inline("max-w-lg max-w-md max-w-sm max-w-xl max-w-xs mb-0.5 mb-1 mb-3 md md:divide-border md:divide-x");
152
157
  @source inline("md:flex-none md:flex-row md:grid-cols-4 md:inline md:w-1/3 md:w-2/5 min min-h-0 min-h-11");
153
158
  @source inline("min-h-14 min-h-[1lh] min-h-[var(--control-h-lg)] min-h-[var(--control-h-md)]");
154
- @source inline("min-h-[var(--control-h-sm)] min-h-row min-w-0 min-w-11 min-w-32");
155
- @source inline("min-w-[var(--radix-select-trigger-width)] ml-1 ml-auto motion motion-reduce:active:scale-100");
156
- @source inline("motion-reduce:animate-none motion-reduce:duration-0 motion-reduce:transition-none mt-0.5 mt-1");
157
- @source inline("mt-2 mx-auto my my-1 object object-cover opacity opacity-0 opacity-30 opacity-40 opacity-50");
158
- @source inline("opacity-60 opacity-70 out outline outline-none over overflow overflow-auto overflow-hidden");
159
- @source inline("overflow-x-auto overflow-x-clip overflow-x-hidden overflow-y-auto overscroll-contain p p-0 p-0.5");
160
- @source inline("p-1 p-1.5 p-2 p-3 p-4 p-6 p-[7px] p-[var(--panel-pad)] pause paused pb-0 pb-1 pb-2 pb-3 pb-4");
161
- @source inline("pb-[max(env(safe-area-inset-bottom,0px),0.75rem)] pb-[var(--empty-lift)] pl-4 pl-8 place");
159
+ @source inline("min-h-[var(--control-h-sm)] min-h-row min-w-0 min-w-11 min-w-24 min-w-32");
160
+ @source inline("min-w-[var(--anchor-width)] min-w-[var(--radix-select-trigger-width)] ml-1 ml-auto motion");
161
+ @source inline("motion-reduce:active:scale-100 motion-reduce:animate-none motion-reduce:duration-0");
162
+ @source inline("motion-reduce:transition-none mt-0.5 mt-1 mt-2 mx-auto my my-1 object object-cover opacity");
163
+ @source inline("opacity-0 opacity-30 opacity-40 opacity-50 opacity-60 opacity-70 out outline outline-none over");
164
+ @source inline("overflow overflow-auto overflow-hidden overflow-x-auto overflow-x-clip overflow-x-hidden");
165
+ @source inline("overflow-y-auto overscroll-contain p p-0 p-0.5 p-1 p-1.5 p-2 p-3 p-4 p-6 p-[7px]");
166
+ @source inline("p-[var(--panel-pad)] pause paused pb-0 pb-1 pb-2 pb-3 pb-4");
167
+ @source inline("pb-[max(env(safe-area-inset-bottom,0px),0.75rem)] pb-[var(--empty-lift)] pl-2 pl-4 pl-8 place");
162
168
  @source inline("placeholder placeholder:text-field-placeholder point pointer pointer-coarse pointer-coarse:-m-2");
163
169
  @source inline("pointer-coarse:data-[state=checked]:translate-x-8 pointer-coarse:h-11 pointer-coarse:min-h-11");
164
170
  @source inline("pointer-coarse:min-w-11 pointer-coarse:opacity-100 pointer-coarse:size-5 pointer-coarse:size-9");
165
171
  @source inline("pointer-coarse:w-11 pointer-coarse:w-18 pointer-events pointer-events-auto pointer-events-none");
166
- @source inline("pr-8 pt-2 pt-3 px px-0 px-1 px-1.5 px-2 px-2.5 px-3 px-4 px-5 px-6 px-row-x py-0 py-0.5 py-1");
167
- @source inline("py-1.5 py-12 py-2 py-2.5 py-3 py-4 py-6 py-[var(--panel-pad)] py-px py-row-y r re relative res");
168
- @source inline("resize right right-0 right-2 ring ring-2 ring-background ro rotate-90 round rounded");
172
+ @source inline("pr-1 pr-8 pt-2 pt-3 px px-0 px-1 px-1.5 px-2 px-2.5 px-3 px-4 px-5 px-6 px-row-x py-0 py-0.5");
173
+ @source inline("py-1 py-1.5 py-12 py-2 py-2.5 py-3 py-4 py-6 py-[var(--panel-pad)] py-px py-row-y r re relative");
174
+ @source inline("res resize right right-0 right-2 ring ring-2 ring-background ro rotate-90 round rounded");
169
175
  @source inline("rounded-[calc(var(--radius-md)-0.25rem)] rounded-field rounded-full rounded-l-full rounded-l-xl");
170
176
  @source inline("rounded-lg rounded-md rounded-none rounded-r-full rounded-r-xl rounded-sm rounded-t-xl");
171
177
  @source inline("rounded-xl ru run running s select select-all select-none self-start shadow");
@@ -192,13 +198,13 @@
192
198
  @source inline("top-0 top-1/2 top-2 touch touch-manipulation touch-none track tracking tracking-tight");
193
199
  @source inline("tracking-wide tracking-wider transform transition");
194
200
  @source inline("transition-[color,background-color,border-color,box-shadow,scale] transition-[stroke-dashoffset]");
195
- @source inline("transition-[transform,width] transition-[width] transition-all transition-colors");
196
- @source inline("transition-opacity transition-transform translate-x-1/2 translate-y-1/2 truncate under underline");
197
- @source inline("underline-offset-4 up uppercase v visible w w-0.5 w-1 w-1/2 w-1/3 w-10 w-16 w-2.5 w-2/3 w-24");
198
- @source inline("w-3/4 w-4 w-6 w-7 w-8 w-9 w-[calc(100vw-2rem)] w-[var(--control-h-lg)] w-[var(--control-h-md)]");
199
- @source inline("w-[var(--control-h-sm)] w-[var(--indicator-w)] w-auto w-full w-px white whitespace");
200
- @source inline("whitespace-normal whitespace-nowrap whitespace-pre-wrap wrap wrap-anywhere wrap-break-word z");
201
- @source inline("z-10 z-20 z-30 z-40 z-50 z-[var(--z-popover)]");
201
+ @source inline("transition-[transform,opacity] transition-[transform,width] transition-[width] transition-all");
202
+ @source inline("transition-colors transition-opacity transition-transform translate-x-1/2 translate-y-1/2");
203
+ @source inline("truncate under underline underline-offset-4 up uppercase v visible w w-0.5 w-1 w-1/2 w-1/3 w-10");
204
+ @source inline("w-16 w-2.5 w-2/3 w-24 w-3/4 w-4 w-6 w-7 w-8 w-9 w-[calc(100vw-2rem)] w-[var(--control-h-lg)]");
205
+ @source inline("w-[var(--control-h-md)] w-[var(--control-h-sm)] w-[var(--indicator-w)] w-auto w-full w-px white");
206
+ @source inline("whitespace whitespace-normal whitespace-nowrap whitespace-pre-wrap wrap wrap-anywhere");
207
+ @source inline("wrap-break-word z z-10 z-20 z-30 z-40 z-50 z-[var(--z-popover)]");
202
208
 
203
209
  /*
204
210
  * Theme variables cursedbelt's components read BY NAME (`var(--color-card)` in a style prop).
@@ -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
- * 154 candidate(s).
21
+ * 137 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
@@ -31,21 +31,17 @@
31
31
  @source inline("@max-4xl:invisible @max-4xl:min-w-0! @max-4xl:p-0! @max-4xl:text-[length:0] @max-4xl:w-0!");
32
32
  @source inline("@max-6xl:[&>*]:hidden @max-6xl:border-0 @max-6xl:invisible @max-6xl:min-w-0! @max-6xl:p-0!");
33
33
  @source inline("@max-6xl:text-[length:0] @max-6xl:w-0! @max-xl:contents @xl:basis-auto @xl:block @xl:hidden");
34
- @source inline("[&>*]:hidden [&>*]:max-w-none [&>svg]:size-3.5 [&_svg]:size-3 active:cursor-grabbing basis-full");
34
+ @source inline("[&>*]:hidden [&>*]:max-w-none [&>svg]:size-3.5 active:cursor-grabbing basis-full");
35
35
  @source inline("bg-[var(--cb-frozen-bg)] bg-accent/15 bg-card/95 bg-gradient-to-t bg-muted/30 bg-muted/50");
36
36
  @source inline("border-accent-solid border-accent/60 border-b-0! border-field-error border-solid border-t-2 col");
37
- @source inline("collapse cursor-grab data-[ending-style]:opacity-0 data-[ending-style]:scale-95");
38
- @source inline("data-[highlighted]:bg-accent/10 data-[highlighted]:text-accent-strong");
39
- @source inline("data-[starting-style]:opacity-0 data-[starting-style]:scale-95 disabled:opacity-40 duration-100");
40
- @source inline("fade-in focus-visible:ring-field-ring/40 focus-within:border-field-ring focus-within:ring-2");
41
- @source inline("focus-within:ring-field-ring/30 from-card gap-x-6 h-0 h-105");
42
- @source inline("has-[[aria-invalid=true]]:border-field-error hover:bg-background hover:bg-muted/40");
43
- @source inline("hover:border-field-ring hover:text-warning justify-self-end last:border-0 left-11 left-2.5");
44
- @source inline("list-none max-h-64 max-h-88 max-sm:flex-1 max-sm:flex-wrap max-sm:min-w-0 max-sm:min-w-24");
45
- @source inline("max-sm:min-w-32 max-sm:ml-13.5 max-sm:w-auto max-w-32 max-w-36 max-w-45 max-w-48 max-w-60");
46
- @source inline("min-h-20 min-h-dvh min-w-0! min-w-24 min-w-4 min-w-52 min-w-[var(--anchor-width)] min-w-max mr-2");
47
- @source inline("mt-1.5 mt-3 mt-4 not-italic ordinal p-0! pb-1.5 pl-1.5 pl-2 pr-0.5 pr-1 pr-10 pr-16 pr-3 pr-9");
48
- @source inline("pt-1 py-0! resize-none resize-y right-3 ring-field-error/30 self self-stretch");
49
- @source inline("shadow-[1px_0_0_0_var(--color-border)] size-7 slide-in-from-top-1 table-fixed text-[length:0]");
50
- @source inline("text-accent-solid-foreground text-field-placeholder text-success text-xl to-transparent top-3");
51
- @source inline("transition-[transform,opacity] w-0! w-11 w-12 w-20 w-32 w-36 w-40 w-88");
37
+ @source inline("collapse cursor-grab disabled:opacity-40 fade-in focus-visible:ring-field-ring/40 from-card");
38
+ @source inline("gap-x-6 h-0 h-105 has-[[aria-invalid=true]]:border-field-error hover:bg-background");
39
+ @source inline("hover:bg-muted/40 hover:border-field-ring hover:text-warning justify-self-end last:border-0");
40
+ @source inline("left-11 left-2.5 list-none max-h-88 max-sm:flex-1 max-sm:flex-wrap max-sm:min-w-0");
41
+ @source inline("max-sm:min-w-24 max-sm:min-w-32 max-sm:ml-13.5 max-sm:w-auto max-w-32 max-w-36 max-w-45 max-w-48");
42
+ @source inline("max-w-60 min-h-20 min-h-dvh min-w-0! min-w-4 min-w-52 min-w-max mr-2 mt-1.5 mt-3 mt-4 not-italic");
43
+ @source inline("ordinal p-0! pb-1.5 pl-1.5 pr-0.5 pr-10 pr-16 pr-3 pr-9 pt-1 py-0! resize-none resize-y right-3");
44
+ @source inline("ring-field-error/30 self self-stretch shadow-[1px_0_0_0_var(--color-border)] size-7");
45
+ @source inline("slide-in-from-top-1 table-fixed text-[length:0] text-accent-solid-foreground");
46
+ @source inline("text-field-placeholder text-success text-xl to-transparent top-3 w-0! w-11 w-12 w-20 w-32 w-36");
47
+ @source inline("w-40 w-88");
@@ -18,15 +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
- * 33 candidate(s).
21
+ * 26 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("[&_svg]:size-3 bg-accent/60 collapse cursor-help duration-150 first:pt-1");
28
- @source inline("focus-within:border-field-ring focus-within:ring-2 focus-within:ring-field-ring/30");
29
- @source inline("group-focus-visible/tile:opacity-100 group-hover/du-row:opacity-100 group-hover/tile:opacity-100");
30
- @source inline("group/du-row group/tile hover:bg-muted-foreground/10 italic max-w-56 max-w-96 mb-2 min-h-8");
31
- @source inline("min-w-24 min-w-56 mr-0.5 opacity-100 pl-2 pr-1 ring-inset ring-ring self-stretch text-3xl");
32
- @source inline("text-[length:var(--text-glyph)] text-muted-foreground/60 text-success");
27
+ @source inline("bg-accent/60 collapse cursor-help duration-150 first:pt-1 group-focus-visible/tile:opacity-100");
28
+ @source inline("group-hover/du-row:opacity-100 group-hover/tile:opacity-100 group/du-row group/tile");
29
+ @source inline("hover:bg-muted-foreground/10 italic max-w-56 max-w-96 mb-2 min-h-8 min-w-56 mr-0.5 opacity-100");
30
+ @source inline("ring-inset ring-ring self-stretch text-3xl text-[length:var(--text-glyph)]");
31
+ @source inline("text-muted-foreground/60 text-success");
@@ -18,11 +18,10 @@
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
- * 9 candidate(s).
21
+ * 8 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("h-105 hover:border-field-ring max-h-64 min-w-48 shadow-popover size-7 text-field-placeholder");
28
- @source inline("text-xl w-88");
27
+ @source inline("h-105 hover:border-field-ring min-w-48 shadow-popover size-7 text-field-placeholder text-xl w-88");
@@ -18,32 +18,27 @@
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
- * 104 candidate(s).
21
+ * 87 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("-mx-1 [&::-webkit-scrollbar]:hidden [&_svg]:size-3");
28
- @source inline("[background:var(--cb-swatch-fill,var(--muted))] [scrollbar-width:none] appearance-none");
29
- @source inline("aria-checked:ring-2 aria-checked:ring-foreground aria-checked:ring-offset-1 bg-accent/15");
30
- @source inline("bg-surface-sunken/80 bg-warning/10 border-border/40 border-field-error caret-transparent");
31
- @source inline("cursor-text data-[ending-style]:opacity-0 data-[ending-style]:scale-95");
32
- @source inline("data-[highlighted]:bg-accent/10 data-[highlighted]:text-accent-strong");
33
- @source inline("data-[starting-style]:opacity-0 data-[starting-style]:scale-95");
34
- @source inline("data-[state=checked]:ring-foreground data-[state=checked]:ring-offset-1 disabled:hover:scale-100");
35
- @source inline("disabled:opacity-40 duration-100 focus-visible:border-border-strong focus-visible:ring-0");
36
- @source inline("focus-visible:ring-field-ring/40 focus-within:border-field-ring focus-within:ring-2");
37
- @source inline("focus-within:ring-field-ring/30 focus-within:ring-offset-1 focus-within:ring-ring");
38
- @source inline("group-focus-within:opacity-100 h-105 h-12 h-3.5 has-[[aria-invalid=true]]:border-field-error");
39
- @source inline("hover:bg-muted/50 hover:border-field-ring hover:scale-110 hover:text-warning italic left-2.5 li");
40
- @source inline("list-none max-h-64 md:flex-col md:gap-0.5 md:justify-start md:overflow-visible md:text-left");
41
- @source inline("md:w-full min-h-20 min-w-24 min-w-64 min-w-[var(--anchor-width)] min-w-full min-w-max");
42
- @source inline("mix-blend-difference mr-2 pl-1.5 pl-2 pl-2.5 pointer-coarse:before:-left-1");
27
+ @source inline("-mx-1 [&::-webkit-scrollbar]:hidden [background:var(--cb-swatch-fill,var(--muted))]");
28
+ @source inline("[scrollbar-width:none] appearance-none aria-checked:ring-2 aria-checked:ring-foreground");
29
+ @source inline("aria-checked:ring-offset-1 bg-accent/15 bg-surface-sunken/80 bg-warning/10 border-border/40");
30
+ @source inline("border-field-error caret-transparent cursor-text data-[state=checked]:ring-foreground");
31
+ @source inline("data-[state=checked]:ring-offset-1 disabled:hover:scale-100 disabled:opacity-40");
32
+ @source inline("focus-visible:border-border-strong focus-visible:ring-0 focus-visible:ring-field-ring/40");
33
+ @source inline("focus-within:ring-offset-1 focus-within:ring-ring group-focus-within:opacity-100 h-105 h-12");
34
+ @source inline("h-3.5 has-[[aria-invalid=true]]:border-field-error hover:bg-muted/50 hover:border-field-ring");
35
+ @source inline("hover:scale-110 hover:text-warning italic left-2.5 li list-none md:flex-col md:gap-0.5");
36
+ @source inline("md:justify-start md:overflow-visible md:text-left md:w-full min-h-20 min-w-64 min-w-full");
37
+ @source inline("min-w-max mix-blend-difference mr-2 pl-1.5 pl-2.5 pointer-coarse:before:-left-1");
43
38
  @source inline("pointer-coarse:before:-right-1 pointer-coarse:before:absolute");
44
39
  @source inline("pointer-coarse:before:bottom-[calc(var(--hit-slop-y)*-1)]");
45
- @source inline("pointer-coarse:before:top-[calc(var(--hit-slop-y)*-1)] pointer-coarse:items-center pr-1 pr-16");
46
- @source inline("pr-2 pr-3 pr-9 pt-1 resize-none resize-y right-1.5 right-3 ring-accent/30 ring-field-error/30");
40
+ @source inline("pointer-coarse:before:top-[calc(var(--hit-slop-y)*-1)] pointer-coarse:items-center pr-16 pr-2");
41
+ @source inline("pr-3 pr-9 pt-1 resize-none resize-y right-1.5 right-3 ring-accent/30 ring-field-error/30");
47
42
  @source inline("self-stretch size-7 size-9 size-full sm:w-11 sm:w-56 text-field-placeholder text-success text-xl");
48
- @source inline("top-1.5 transition-[transform,opacity] w-20 w-32 w-36 w-40 w-88 w-fit w-max whitespace-pre");
43
+ @source inline("top-1.5 w-20 w-32 w-36 w-40 w-88 w-fit w-max whitespace-pre");
49
44
  @source inline('pointer-coarse:before:content-[""]');