cursedbelt 5.55.2 → 5.58.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 (174) hide show
  1. package/dist/react/charts/tokens.js +4 -4
  2. package/dist/react/code-editor/CodeEditor.d.ts.map +1 -1
  3. package/dist/react/code-editor/CodeEditor.js +2 -1
  4. package/dist/react/code-editor/CodeEditor.js.map +1 -1
  5. package/dist/react/code-editor/lineAbove.d.ts +17 -0
  6. package/dist/react/code-editor/lineAbove.d.ts.map +1 -0
  7. package/dist/react/code-editor/lineAbove.js +34 -0
  8. package/dist/react/code-editor/lineAbove.js.map +1 -0
  9. package/dist/react/companion-link/CompanionLinkStatus.d.ts.map +1 -1
  10. package/dist/react/companion-link/CompanionLinkStatus.js +2 -1
  11. package/dist/react/companion-link/CompanionLinkStatus.js.map +1 -1
  12. package/dist/react/components/Accordion.d.ts.map +1 -1
  13. package/dist/react/components/Accordion.js +2 -2
  14. package/dist/react/components/Accordion.js.map +1 -1
  15. package/dist/react/components/Badge.d.ts +20 -1
  16. package/dist/react/components/Badge.d.ts.map +1 -1
  17. package/dist/react/components/Badge.js +30 -3
  18. package/dist/react/components/Badge.js.map +1 -1
  19. package/dist/react/components/Button.d.ts.map +1 -1
  20. package/dist/react/components/Button.js +8 -2
  21. package/dist/react/components/Button.js.map +1 -1
  22. package/dist/react/components/Collapsible.d.ts.map +1 -1
  23. package/dist/react/components/Collapsible.js +2 -2
  24. package/dist/react/components/Collapsible.js.map +1 -1
  25. package/dist/react/components/DisclosureButton.d.ts +2 -2
  26. package/dist/react/components/DisclosureButton.d.ts.map +1 -1
  27. package/dist/react/components/DisclosureButton.js +9 -6
  28. package/dist/react/components/DisclosureButton.js.map +1 -1
  29. package/dist/react/components/EditorPage.d.ts +78 -0
  30. package/dist/react/components/EditorPage.d.ts.map +1 -0
  31. package/dist/react/components/EditorPage.js +133 -0
  32. package/dist/react/components/EditorPage.js.map +1 -0
  33. package/dist/react/components/IconPicker.d.ts +70 -0
  34. package/dist/react/components/IconPicker.d.ts.map +1 -0
  35. package/dist/react/components/IconPicker.js +175 -0
  36. package/dist/react/components/IconPicker.js.map +1 -0
  37. package/dist/react/components/PropertyList.d.ts +45 -0
  38. package/dist/react/components/PropertyList.d.ts.map +1 -0
  39. package/dist/react/components/PropertyList.js +12 -0
  40. package/dist/react/components/PropertyList.js.map +1 -0
  41. package/dist/react/components/Wizard/ReviewStep.d.ts +1 -1
  42. package/dist/react/components/Wizard/ReviewStep.d.ts.map +1 -1
  43. package/dist/react/components/Wizard/ReviewStep.js +3 -3
  44. package/dist/react/components/Wizard/ReviewStep.js.map +1 -1
  45. package/dist/react/components/editorPage.css +421 -0
  46. package/dist/react/components/formKit.d.ts +3 -1
  47. package/dist/react/components/formKit.d.ts.map +1 -1
  48. package/dist/react/components/formKit.js +3 -1
  49. package/dist/react/components/formKit.js.map +1 -1
  50. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  51. package/dist/react/file-tree/FileTree.js +7 -0
  52. package/dist/react/file-tree/FileTree.js.map +1 -1
  53. package/dist/react/file-tree/fileTree.css +14 -0
  54. package/dist/react/filter-rail/FilterRail.js +1 -1
  55. package/dist/react/filter-rail/FilterRail.js.map +1 -1
  56. package/dist/react/filter-rail/RailSection.js +2 -2
  57. package/dist/react/filter-rail/RailSection.js.map +1 -1
  58. package/dist/react/filter-rail/headerContextMenu.d.ts.map +1 -1
  59. package/dist/react/filter-rail/headerContextMenu.js +20 -1
  60. package/dist/react/filter-rail/headerContextMenu.js.map +1 -1
  61. package/dist/react/hooks/longPressContextMenu.d.ts +35 -0
  62. package/dist/react/hooks/longPressContextMenu.d.ts.map +1 -0
  63. package/dist/react/hooks/longPressContextMenu.js +136 -0
  64. package/dist/react/hooks/longPressContextMenu.js.map +1 -0
  65. package/dist/react/hooks/useLongPressContextMenu.d.ts +4 -0
  66. package/dist/react/hooks/useLongPressContextMenu.d.ts.map +1 -0
  67. package/dist/react/hooks/useLongPressContextMenu.js +12 -0
  68. package/dist/react/hooks/useLongPressContextMenu.js.map +1 -0
  69. package/dist/react/index.d.ts +4 -1
  70. package/dist/react/index.d.ts.map +1 -1
  71. package/dist/react/index.js +3 -0
  72. package/dist/react/index.js.map +1 -1
  73. package/dist/react/line-keys/index.d.ts +2 -0
  74. package/dist/react/line-keys/index.d.ts.map +1 -0
  75. package/dist/react/line-keys/index.js +2 -0
  76. package/dist/react/line-keys/index.js.map +1 -0
  77. package/dist/react/line-keys/lineKeys.d.ts +62 -0
  78. package/dist/react/line-keys/lineKeys.d.ts.map +1 -0
  79. package/dist/react/line-keys/lineKeys.js +159 -0
  80. package/dist/react/line-keys/lineKeys.js.map +1 -0
  81. package/dist/react/master-detail/DetailPane.d.ts +3 -0
  82. package/dist/react/master-detail/DetailPane.d.ts.map +1 -1
  83. package/dist/react/master-detail/DetailPane.js +5 -2
  84. package/dist/react/master-detail/DetailPane.js.map +1 -1
  85. package/dist/react/nav/SideNav.js +1 -1
  86. package/dist/react/nav/SideNav.js.map +1 -1
  87. package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
  88. package/dist/styles-areas/analytics.css +14 -14
  89. package/dist/styles-areas/charts.css +3 -3
  90. package/dist/styles-areas/companion-link.css +2 -2
  91. package/dist/styles-areas/core.css +50 -45
  92. package/dist/styles-areas/data-table.css +15 -16
  93. package/dist/styles-areas/disk-usage.css +4 -4
  94. package/dist/styles-areas/fields.css +11 -11
  95. package/dist/styles-areas/folder-tree.css +3 -3
  96. package/dist/styles-areas/layout-engine.css +2 -2
  97. package/dist/styles-areas/master-detail.css +4 -5
  98. package/dist/styles-areas/media-gallery.css +9 -9
  99. package/dist/styles-areas/media.css +3 -3
  100. package/dist/styles-areas/nav.css +5 -5
  101. package/dist/styles-areas/notifications.css +3 -3
  102. package/dist/styles-areas/problem-detail.css +3 -3
  103. package/dist/styles-areas/sharing.css +2 -3
  104. package/dist/styles-areas/stats.css +3 -3
  105. package/dist/styles-areas/wizard.css +7 -8
  106. package/dist/styles-areas/workbench.css +4 -4
  107. package/dist/styles-utilities.css +49 -10
  108. package/dist/theme.css +38 -22
  109. package/package.json +14 -2
  110. package/scripts/guardrails-baseline.json +2 -1
  111. package/scripts/guardrailsEnforce.spec.ts +32 -0
  112. package/scripts/guardrailsEnforce.ts +67 -1
  113. package/scripts/styleAreas.ts +3 -0
  114. package/src/react/charts/tokens.ts +4 -4
  115. package/src/react/code-editor/CodeEditor.tsx +2 -1
  116. package/src/react/code-editor/lineAbove.spec.ts +36 -0
  117. package/src/react/code-editor/lineAbove.ts +35 -0
  118. package/src/react/companion-link/CompanionLinkStatus.tsx +10 -12
  119. package/src/react/components/Accordion.tsx +5 -4
  120. package/src/react/components/Badge.capsule.spec.ts +1 -1
  121. package/src/react/components/Badge.spec.tsx +22 -1
  122. package/src/react/components/Badge.tsx +66 -11
  123. package/src/react/components/Button.spec.tsx +5 -4
  124. package/src/react/components/Button.tsx +8 -2
  125. package/src/react/components/Collapsible.tsx +5 -4
  126. package/src/react/components/DisclosureButton.spec.tsx +47 -0
  127. package/src/react/components/DisclosureButton.tsx +11 -7
  128. package/src/react/components/EditorPage.spec.tsx +106 -0
  129. package/src/react/components/EditorPage.tsx +281 -0
  130. package/src/react/components/IconPicker.spec.tsx +84 -0
  131. package/src/react/components/IconPicker.tsx +289 -0
  132. package/src/react/components/PropertyList.spec.tsx +110 -0
  133. package/src/react/components/PropertyList.tsx +92 -0
  134. package/src/react/components/Wizard/ReviewStep.tsx +7 -7
  135. package/src/react/components/editorPage.css +421 -0
  136. package/src/react/components/formKit.ts +10 -1
  137. package/src/react/components/formKitStylesheets.spec.ts +47 -0
  138. package/src/react/file-tree/FileTree.spec.tsx +19 -0
  139. package/src/react/file-tree/FileTree.tsx +8 -0
  140. package/src/react/file-tree/fileTree.css +14 -0
  141. package/src/react/filter-rail/FilterRail.tsx +1 -1
  142. package/src/react/filter-rail/RailSection.tsx +2 -2
  143. package/src/react/filter-rail/headerContextMenu.spec.tsx +52 -0
  144. package/src/react/filter-rail/headerContextMenu.ts +19 -1
  145. package/src/react/hooks/longPressContextMenu.spec.ts +102 -0
  146. package/src/react/hooks/longPressContextMenu.ts +135 -0
  147. package/src/react/hooks/useLongPressContextMenu.ts +15 -0
  148. package/src/react/index.ts +11 -1
  149. package/src/react/line-keys/index.ts +1 -0
  150. package/src/react/line-keys/lineKeys.spec.tsx +176 -0
  151. package/src/react/line-keys/lineKeys.ts +176 -0
  152. package/src/react/master-detail/DetailPane.tsx +14 -18
  153. package/src/react/nav/SideNav.tsx +1 -1
  154. package/src/styles-areas/analytics.css +14 -14
  155. package/src/styles-areas/charts.css +3 -3
  156. package/src/styles-areas/companion-link.css +2 -2
  157. package/src/styles-areas/core.css +50 -45
  158. package/src/styles-areas/data-table.css +15 -16
  159. package/src/styles-areas/disk-usage.css +4 -4
  160. package/src/styles-areas/fields.css +11 -11
  161. package/src/styles-areas/folder-tree.css +3 -3
  162. package/src/styles-areas/layout-engine.css +2 -2
  163. package/src/styles-areas/master-detail.css +4 -5
  164. package/src/styles-areas/media-gallery.css +9 -9
  165. package/src/styles-areas/media.css +3 -3
  166. package/src/styles-areas/nav.css +5 -5
  167. package/src/styles-areas/notifications.css +3 -3
  168. package/src/styles-areas/problem-detail.css +3 -3
  169. package/src/styles-areas/sharing.css +2 -3
  170. package/src/styles-areas/stats.css +3 -3
  171. package/src/styles-areas/wizard.css +7 -8
  172. package/src/styles-areas/workbench.css +4 -4
  173. package/src/styles-utilities.css +49 -10
  174. package/src/theme.css +38 -22
@@ -0,0 +1,421 @@
1
+ /*
2
+ * The creation page's own look — `EditorPage`, `QuietForm` and `IconPicker`. Prefix `cbfk-`, and
3
+ * the same layering rules as `formKit.css`, which says why.
4
+ *
5
+ * 🔴 Its own file, imported only by `EditorPage.tsx` and `IconPicker.tsx`. It lived at the end of
6
+ * `formKit.css` for one unpublished version, and every component that imports that file
7
+ * (`KeyBadge`, `ExpandableRow`, …) carried it: station's DuplicatesView and music's TubeView
8
+ * — one KeyBadge each — grew 1.84 → 2.90 kB gzip of a page neither draws (forge task 2832,
9
+ * measured by tools/consumer-preflight.ts). `src/react/components/formKitStylesheets.spec.ts`
10
+ * keeps the split.
11
+ */
12
+
13
+ /*
14
+ * ── EditorPage ─────────────────────────────────────────────────────────────
15
+ *
16
+ * A creation page: header, then form | divider | preview. Layered like the rest of this file.
17
+ */
18
+ @layer base {
19
+ .cbfk-page {
20
+ position: relative;
21
+ container-type: inline-size;
22
+ box-sizing: border-box;
23
+ display: flex;
24
+ flex-direction: column;
25
+ min-width: 0;
26
+ min-height: 0;
27
+ background-color: var(--background);
28
+ color: var(--foreground);
29
+ outline: none;
30
+ }
31
+
32
+ .cbfk-page[data-presentation="overlay"] {
33
+ position: fixed;
34
+ inset: 0;
35
+ z-index: var(--z-overlay, 1000);
36
+ }
37
+
38
+ .cbfk-page[data-presentation="inline"] {
39
+ height: 100%;
40
+ }
41
+
42
+ .cbfk-page-head {
43
+ display: flex;
44
+ flex: none;
45
+ align-items: center;
46
+ gap: 0.5rem;
47
+ min-height: 3rem;
48
+ padding: 0.5rem max(0.75rem, env(safe-area-inset-right)) 0.5rem max(0.75rem, env(safe-area-inset-left));
49
+ padding-top: max(0.5rem, env(safe-area-inset-top));
50
+ border-bottom: 1px solid var(--border);
51
+ }
52
+
53
+ .cbfk-page-back {
54
+ display: inline-flex;
55
+ flex: none;
56
+ align-items: center;
57
+ gap: 0.375rem;
58
+ min-height: 2.25rem;
59
+ margin: 0;
60
+ padding: 0 0.5rem;
61
+ border: 0;
62
+ border-radius: var(--radius-sm, 0.375rem);
63
+ background: transparent;
64
+ color: var(--muted-foreground);
65
+ font: inherit;
66
+ font-size: 0.875rem;
67
+ cursor: pointer;
68
+ }
69
+
70
+ .cbfk-page-back:hover {
71
+ background-color: var(--muted);
72
+ color: var(--foreground);
73
+ }
74
+
75
+ .cbfk-page-back:focus-visible,
76
+ .cbfk-page-mode:focus-visible,
77
+ .cbfk-page-divider:focus-visible {
78
+ outline: 2px solid var(--ring);
79
+ outline-offset: -2px;
80
+ }
81
+
82
+ .cbfk-page-back svg {
83
+ width: 1rem;
84
+ height: 1rem;
85
+ }
86
+
87
+ .cbfk-page-sep {
88
+ flex: none;
89
+ color: var(--muted-foreground);
90
+ opacity: 0.6;
91
+ }
92
+
93
+ .cbfk-page-title {
94
+ flex: 1 1 auto;
95
+ min-width: 0;
96
+ margin: 0;
97
+ overflow: hidden;
98
+ font-size: 0.9375rem;
99
+ font-weight: 500;
100
+ white-space: nowrap;
101
+ text-overflow: ellipsis;
102
+ }
103
+
104
+ .cbfk-page-actions {
105
+ display: inline-flex;
106
+ flex: none;
107
+ align-items: center;
108
+ gap: 0.5rem;
109
+ }
110
+
111
+ /* The Edit / Preview switch is a phone's; wide, both sides are simply there. */
112
+ .cbfk-page-modes {
113
+ display: none;
114
+ }
115
+
116
+ .cbfk-page-split {
117
+ display: flex;
118
+ flex: 1 1 auto;
119
+ min-height: 0;
120
+ }
121
+
122
+ .cbfk-page-form,
123
+ .cbfk-page-preview {
124
+ box-sizing: border-box;
125
+ min-width: 0;
126
+ min-height: 0;
127
+ /* guardrails-ignore no-raw-overflow: task 2827 — each side scrolls on its own in a Tailwind-free host, where ScrollArea cannot draw; the keyboard inset below is ScrollArea's. */
128
+ overflow: auto;
129
+ overscroll-behavior: contain;
130
+ /* ScrollArea's keyboard clearance (a no-op 0px on desktop): a focused field is never
131
+ parked under a phone's keyboard, and the last one can be scrolled above it. */
132
+ scroll-padding-bottom: calc(var(--keyboard-inset, 0px) + 1rem);
133
+ padding-bottom: var(--keyboard-inset, 0px);
134
+ }
135
+
136
+ .cbfk-page-form {
137
+ flex: 0 0 var(--cbfk-page-split, 50%);
138
+ }
139
+
140
+ .cbfk-page-form-inner {
141
+ display: flex;
142
+ flex-direction: column;
143
+ gap: 1.25rem;
144
+ box-sizing: border-box;
145
+ max-width: 46rem;
146
+ margin: 0 auto;
147
+ padding: 2rem 2rem 4rem;
148
+ }
149
+
150
+ .cbfk-page-preview {
151
+ flex: 1 1 0;
152
+ padding: 1.25rem 2rem 4rem;
153
+ background-color: var(--surface-sunken, var(--muted));
154
+ }
155
+
156
+ .cbfk-page-preview-head {
157
+ display: flex;
158
+ align-items: center;
159
+ gap: 0.75rem;
160
+ min-height: 2rem;
161
+ margin: 0 0 1rem;
162
+ }
163
+
164
+ .cbfk-page-preview-label {
165
+ flex: 1 1 auto;
166
+ margin: 0;
167
+ color: var(--muted-foreground);
168
+ font-size: 0.75rem;
169
+ font-weight: 500;
170
+ }
171
+
172
+ .cbfk-page-preview-tools {
173
+ display: inline-flex;
174
+ flex-wrap: wrap;
175
+ align-items: center;
176
+ gap: 0.75rem;
177
+ }
178
+
179
+ .cbfk-page-preview-body {
180
+ max-width: 40rem;
181
+ margin: 0 auto;
182
+ }
183
+
184
+ /* A 1px line with an 11px grab area either side of it; the line lights while dragged. */
185
+ .cbfk-page-divider {
186
+ position: relative;
187
+ flex: none;
188
+ width: 1px;
189
+ background-color: var(--border);
190
+ cursor: col-resize;
191
+ touch-action: none;
192
+ }
193
+
194
+ .cbfk-page-divider::before {
195
+ position: absolute;
196
+ inset: 0 -0.375rem;
197
+ content: "";
198
+ }
199
+
200
+ .cbfk-page-divider:hover,
201
+ .cbfk-page[data-dragging="true"] .cbfk-page-divider {
202
+ background-color: var(--ring, var(--accent));
203
+ }
204
+
205
+ .cbfk-page[data-dragging="true"] {
206
+ cursor: col-resize;
207
+ user-select: none;
208
+ }
209
+
210
+ /* Narrow: one side at a time, chosen in the header. */
211
+ @container (max-width: 48rem) {
212
+ /* The switch takes the title's place: Back, Edit | Preview, the actions. A title cut to
213
+ one letter says nothing, and the page's own heading is still its accessible name. */
214
+ .cbfk-page-crumb,
215
+ .cbfk-page-sep {
216
+ display: none;
217
+ }
218
+
219
+ .cbfk-page-title {
220
+ position: absolute;
221
+ width: 1px;
222
+ height: 1px;
223
+ overflow: hidden;
224
+ clip: rect(0 0 0 0);
225
+ white-space: nowrap;
226
+ }
227
+
228
+ .cbfk-page-modes {
229
+ display: inline-flex;
230
+ flex: none;
231
+ margin-right: auto;
232
+ padding: 0.125rem;
233
+ border-radius: var(--radius-sm, 0.375rem);
234
+ background-color: var(--muted);
235
+ }
236
+
237
+ .cbfk-page-mode {
238
+ min-height: 2rem;
239
+ margin: 0;
240
+ padding: 0 0.75rem;
241
+ border: 0;
242
+ border-radius: calc(var(--radius-sm, 0.375rem) - 2px);
243
+ background: transparent;
244
+ color: var(--muted-foreground);
245
+ font: inherit;
246
+ font-size: 0.8125rem;
247
+ cursor: pointer;
248
+ }
249
+
250
+ .cbfk-page-mode[aria-selected="true"] {
251
+ background-color: var(--background);
252
+ color: var(--foreground);
253
+ }
254
+
255
+ .cbfk-page-divider {
256
+ display: none;
257
+ }
258
+
259
+ .cbfk-page-form {
260
+ flex: 1 1 auto;
261
+ }
262
+
263
+ .cbfk-page[data-mode="edit"] .cbfk-page-preview,
264
+ .cbfk-page[data-mode="preview"] .cbfk-page-form {
265
+ display: none;
266
+ }
267
+
268
+ .cbfk-page-form-inner {
269
+ padding: 1.25rem 1rem 4rem;
270
+ }
271
+
272
+ .cbfk-page-preview {
273
+ padding: 1rem 1rem 4rem;
274
+ }
275
+ }
276
+ }
277
+
278
+ /* ── IconPicker ─────────────────────────────────────────────────────────── */
279
+ @layer base {
280
+ .cbfk-icons {
281
+ display: flex;
282
+ flex-direction: column;
283
+ gap: 0.625rem;
284
+ min-width: 0;
285
+ }
286
+
287
+ .cbfk-icons-sets {
288
+ display: flex;
289
+ flex-wrap: wrap;
290
+ gap: 0.25rem;
291
+ min-inline-size: 0;
292
+ margin: 0;
293
+ border: 0;
294
+ padding: 0;
295
+ }
296
+
297
+ .cbfk-icons-set {
298
+ min-height: 1.75rem;
299
+ margin: 0;
300
+ padding: 0 0.625rem;
301
+ border: 0;
302
+ border-radius: 999px;
303
+ background: transparent;
304
+ color: var(--muted-foreground);
305
+ font: inherit;
306
+ font-size: 0.75rem;
307
+ cursor: pointer;
308
+ }
309
+
310
+ .cbfk-icons-set:hover {
311
+ color: var(--foreground);
312
+ }
313
+
314
+ .cbfk-icons-set[aria-pressed="true"] {
315
+ background-color: var(--muted);
316
+ color: var(--foreground);
317
+ }
318
+
319
+ .cbfk-icons-grid {
320
+ display: grid;
321
+ grid-template-columns: repeat(auto-fill, minmax(2.5rem, 1fr));
322
+ gap: 0.25rem;
323
+ }
324
+
325
+ .cbfk-icons-cell {
326
+ display: inline-flex;
327
+ align-items: center;
328
+ justify-content: center;
329
+ aspect-ratio: 1;
330
+ margin: 0;
331
+ padding: 0;
332
+ border: 1px solid transparent;
333
+ border-radius: var(--radius-sm, 0.375rem);
334
+ background: transparent;
335
+ cursor: pointer;
336
+ }
337
+
338
+ .cbfk-icons-cell:hover {
339
+ background-color: var(--muted);
340
+ }
341
+
342
+ .cbfk-icons-cell:focus-visible {
343
+ outline: 2px solid var(--ring);
344
+ outline-offset: -2px;
345
+ }
346
+
347
+ .cbfk-icons-cell[aria-checked="true"] {
348
+ border-color: var(--ring, var(--accent));
349
+ background-color: var(--muted);
350
+ }
351
+
352
+ .cbfk-icons-note {
353
+ margin: 0;
354
+ color: var(--muted-foreground);
355
+ font-size: 0.75rem;
356
+ }
357
+ }
358
+
359
+ /*
360
+ * ── QuietForm (and EditorPage's form) ──────────────────────────────────────
361
+ *
362
+ * 🔴 UNLAYERED, unlike everything above, and on purpose: a quiet form must win over the border
363
+ * and fill an `Input`'s own utilities draw — in `@layer utilities` in a Tailwind app, and as
364
+ * `.cs-root .border` (two classes) in desk's compiled copy. Only an unlayered rule out-ranks a
365
+ * layered one, and `:is()` takes its most specific argument (`input:not(…)`, a class and an
366
+ * element), so `.cbfk-quiet :is(…)` out-ranks two classes as well. It is safe because it is
367
+ * opt-in — it reaches only what sits inside `.cbfk-quiet`.
368
+ */
369
+ .cbfk-quiet
370
+ :is(
371
+ input:not([type="checkbox"], [type="radio"], [type="file"], [type="range"], [type="color"]),
372
+ textarea,
373
+ select
374
+ ) {
375
+ border-color: transparent;
376
+ background-color: transparent;
377
+ box-shadow: none;
378
+ transition:
379
+ border-color 120ms ease,
380
+ background-color 120ms ease;
381
+ }
382
+
383
+ .cbfk-quiet
384
+ :is(
385
+ input:not([type="checkbox"], [type="radio"], [type="file"], [type="range"], [type="color"]),
386
+ textarea,
387
+ select
388
+ ):is(:hover, :focus-visible, :focus) {
389
+ border-color: var(--border);
390
+ background-color: var(--background);
391
+ }
392
+
393
+ .cbfk-quiet [data-cb-field-label][data-cb-field-label] {
394
+ color: var(--muted-foreground);
395
+ font-size: 0.8125rem;
396
+ font-weight: 450;
397
+ }
398
+
399
+ /* A page title in a quiet form: an input marked `data-cb-quiet-title` reads as the heading. */
400
+ .cbfk-quiet input[data-cb-quiet-title][data-cb-quiet-title] {
401
+ height: auto;
402
+ min-height: 2.75rem;
403
+ padding-inline: 0.25rem;
404
+ font-size: 1.5rem;
405
+ font-weight: 600;
406
+ letter-spacing: -0.01em;
407
+ }
408
+
409
+ /* The preview's tools are a row of small switches, not full-width settings rows. Unlayered for
410
+ the reason above: a `Switch` label is `w-full justify-between` in its own utilities. */
411
+ .cbfk-page-preview-tools > label[data-cb-tap-target] {
412
+ width: auto;
413
+ min-height: 2rem;
414
+ padding-block: 0;
415
+ gap: 0.5rem;
416
+ }
417
+
418
+ .cbfk-page-preview-tools > label[data-cb-tap-target] > span:first-child {
419
+ color: var(--muted-foreground);
420
+ font-size: 0.8125rem;
421
+ }
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * `cursedbelt/react/form-kit` — the builder-form pieces that draw from their own plain
3
3
  * stylesheet (`formKit.css`), so an app with no Tailwind and no `./react` barrel (desk) can
4
- * mount them. A Tailwind app gets the same five from `cursedbelt/react`.
4
+ * mount them. A Tailwind app gets the same pieces from `cursedbelt/react`.
5
5
  */
6
+ export { EditorPage, type EditorPageProps, QuietForm, type QuietFormProps } from './EditorPage.js';
6
7
  export { ExpandableRow, type ExpandableRowProps } from './ExpandableRow.js';
8
+ export { ICON_SETS, IconPicker, type IconPickerProps, type IconSet, iconDataUrl, type PickedIcon, } from './IconPicker.js';
7
9
  export { FormPreviewLayout, type FormPreviewLayoutProps } from './FormPreviewLayout.js';
8
10
  export { KeyBadge, type KeyBadgeProps } from './KeyBadge.js';
9
11
  export { RevealAction, type RevealActionProps } from './RevealAction.js';
@@ -1 +1 @@
1
- {"version":3,"file":"formKit.d.ts","sourceRoot":"","sources":["../../../src/react/components/formKit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,UAAU,EACf,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"formKit.d.ts","sourceRoot":"","sources":["../../../src/react/components/formKit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,SAAS,EACT,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,WAAW,EACX,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,UAAU,EACf,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * `cursedbelt/react/form-kit` — the builder-form pieces that draw from their own plain
3
3
  * stylesheet (`formKit.css`), so an app with no Tailwind and no `./react` barrel (desk) can
4
- * mount them. A Tailwind app gets the same five from `cursedbelt/react`.
4
+ * mount them. A Tailwind app gets the same pieces from `cursedbelt/react`.
5
5
  */
6
+ export { EditorPage, QuietForm } from './EditorPage.js';
6
7
  export { ExpandableRow } from './ExpandableRow.js';
8
+ export { ICON_SETS, IconPicker, iconDataUrl, } from './IconPicker.js';
7
9
  export { FormPreviewLayout } from './FormPreviewLayout.js';
8
10
  export { KeyBadge } from './KeyBadge.js';
9
11
  export { RevealAction } from './RevealAction.js';
@@ -1 +1 @@
1
- {"version":3,"file":"formKit.js","sourceRoot":"","sources":["../../../src/react/components/formKit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,gGAAgG;AAChG,8DAA8D;AAC9D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EAEjB,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"formKit.js","sourceRoot":"","sources":["../../../src/react/components/formKit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAwB,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,SAAS,EACT,UAAU,EAGV,WAAW,GAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,gGAAgG;AAChG,8DAA8D;AAC9D,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EAEjB,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileTree.d.ts","sourceRoot":"","sources":["../../../src/react/file-tree/FileTree.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileTree.d.ts","sourceRoot":"","sources":["../../../src/react/file-tree/FileTree.tsx"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { draggedIdsOf, nodesByIds, planWrap, refuseCopy, refuseWrap, resolveMult
8
8
  import { useInView } from '../media/previewGate.js';
9
9
  import { lazyPart } from '../components/DataTable/lazyPart.js';
10
10
  import { applyFolderView, tagFilterActive } from './folderView.js';
11
+ import { useLongPressContextMenu } from '../hooks/useLongPressContextMenu.js';
11
12
  import { FolderViewStrip, folderTargets, folderViewMenuItems, RowTagDots, withFolderItems, } from './FolderViewMenus.js';
12
13
  import './fileTree.css';
13
14
  import { cn, RAW_BUTTON } from '../lib/cn.js';
@@ -942,6 +943,12 @@ export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelection
942
943
  }, [wantsBlankMenu, openViewMenu]);
943
944
  /** Fetch the panels once the page is idle, if this tree has any menu to open. */
944
945
  const hasMenus = wantsBlankMenu || Boolean(rowMenu);
946
+ /*
947
+ * A finger held on a row or on the blank space opens the same menu a right-click does —
948
+ * iOS has no right-click and never fires `contextmenu` for a hold (owner, 2026-10-04). The
949
+ * grip is excluded: a finger held there is about to drag. See `longPressContextMenu.ts`.
950
+ */
951
+ useLongPressContextMenu(scrollRef, hasMenus || Boolean(onRowMenu), '[data-cbft-grip]');
945
952
  useEffect(() => {
946
953
  if (!hasMenus)
947
954
  return;