cursedbelt 3.0.2 → 4.0.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 (250) hide show
  1. package/dist/react/components/ListToolbar.d.ts +94 -0
  2. package/dist/react/components/ListToolbar.d.ts.map +1 -0
  3. package/dist/react/components/ListToolbar.js +66 -0
  4. package/dist/react/components/ListToolbar.js.map +1 -0
  5. package/dist/react/file-tree/FileTree.d.ts +282 -3
  6. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  7. package/dist/react/file-tree/FileTree.js +799 -131
  8. package/dist/react/file-tree/FileTree.js.map +1 -1
  9. package/dist/react/file-tree/fileTree.css +151 -0
  10. package/dist/react/file-tree/fileTreeSelection.d.ts +187 -0
  11. package/dist/react/file-tree/fileTreeSelection.d.ts.map +1 -0
  12. package/dist/react/file-tree/fileTreeSelection.js +264 -0
  13. package/dist/react/file-tree/fileTreeSelection.js.map +1 -0
  14. package/dist/react/file-tree/index.d.ts +1 -0
  15. package/dist/react/file-tree/index.d.ts.map +1 -1
  16. package/dist/react/file-tree/index.js +8 -0
  17. package/dist/react/file-tree/index.js.map +1 -1
  18. package/dist/react/index.d.ts +1 -0
  19. package/dist/react/index.d.ts.map +1 -1
  20. package/dist/react/index.js +1 -0
  21. package/dist/react/index.js.map +1 -1
  22. package/dist/react/lib/form.d.ts +3 -0
  23. package/dist/react/lib/form.d.ts.map +1 -1
  24. package/dist/react/lib/form.js +43 -5
  25. package/dist/react/lib/form.js.map +1 -1
  26. package/dist/react/media/DenseGalleryShell.d.ts +19 -3
  27. package/dist/react/media/DenseGalleryShell.d.ts.map +1 -1
  28. package/dist/react/media/DenseGalleryShell.js +55 -15
  29. package/dist/react/media/DenseGalleryShell.js.map +1 -1
  30. package/dist/react/media/FocusViewer.d.ts.map +1 -1
  31. package/dist/react/media/FocusViewer.js +14 -14
  32. package/dist/react/media/FocusViewer.js.map +1 -1
  33. package/dist/react/media/FrameGrabber.d.ts +23 -0
  34. package/dist/react/media/FrameGrabber.d.ts.map +1 -1
  35. package/dist/react/media/FrameGrabber.js +67 -1
  36. package/dist/react/media/FrameGrabber.js.map +1 -1
  37. package/dist/react/media/MediaResize.d.ts +51 -19
  38. package/dist/react/media/MediaResize.d.ts.map +1 -1
  39. package/dist/react/media/MediaResize.js +20 -13
  40. package/dist/react/media/MediaResize.js.map +1 -1
  41. package/dist/react/media/VideoChapterEditor.d.ts +67 -0
  42. package/dist/react/media/VideoChapterEditor.d.ts.map +1 -0
  43. package/dist/react/media/VideoChapterEditor.js +148 -0
  44. package/dist/react/media/VideoChapterEditor.js.map +1 -0
  45. package/dist/react/media/VideoPlayer.d.ts +46 -4
  46. package/dist/react/media/VideoPlayer.d.ts.map +1 -1
  47. package/dist/react/media/VideoPlayer.js +124 -11
  48. package/dist/react/media/VideoPlayer.js.map +1 -1
  49. package/dist/react/media/VideoTurner.d.ts +15 -2
  50. package/dist/react/media/VideoTurner.d.ts.map +1 -1
  51. package/dist/react/media/VideoTurner.js +29 -2
  52. package/dist/react/media/VideoTurner.js.map +1 -1
  53. package/dist/react/media/denseGallery.css +104 -46
  54. package/dist/react/media/hlsSource.d.ts +57 -0
  55. package/dist/react/media/hlsSource.d.ts.map +1 -1
  56. package/dist/react/media/hlsSource.js +177 -1
  57. package/dist/react/media/hlsSource.js.map +1 -1
  58. package/dist/react/media/index.d.ts +2 -0
  59. package/dist/react/media/index.d.ts.map +1 -1
  60. package/dist/react/media/index.js +6 -0
  61. package/dist/react/media/index.js.map +1 -1
  62. package/dist/react/media/mediaResize.css +127 -54
  63. package/dist/react/media/pictureEditor.css +52 -6
  64. package/dist/react/media/videoChapterEditor.css +203 -0
  65. package/dist/react/media/videoChapters.d.ts +117 -0
  66. package/dist/react/media/videoChapters.d.ts.map +1 -0
  67. package/dist/react/media/videoChapters.js +95 -0
  68. package/dist/react/media/videoChapters.js.map +1 -0
  69. package/dist/react/media-gallery/GalleryTable.d.ts +52 -1
  70. package/dist/react/media-gallery/GalleryTable.d.ts.map +1 -1
  71. package/dist/react/media-gallery/GalleryTable.js +40 -9
  72. package/dist/react/media-gallery/GalleryTable.js.map +1 -1
  73. package/dist/react/media-gallery/MediaGallery.d.ts +107 -4
  74. package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
  75. package/dist/react/media-gallery/MediaGallery.js +484 -104
  76. package/dist/react/media-gallery/MediaGallery.js.map +1 -1
  77. package/dist/react/media-gallery/MediaMetaEditor.d.ts +48 -0
  78. package/dist/react/media-gallery/MediaMetaEditor.d.ts.map +1 -0
  79. package/dist/react/media-gallery/MediaMetaEditor.js +66 -0
  80. package/dist/react/media-gallery/MediaMetaEditor.js.map +1 -0
  81. package/dist/react/media-gallery/index.d.ts +2 -0
  82. package/dist/react/media-gallery/index.d.ts.map +1 -1
  83. package/dist/react/media-gallery/index.js +5 -0
  84. package/dist/react/media-gallery/index.js.map +1 -1
  85. package/dist/react/media-gallery/mediaGallery.css +180 -4
  86. package/dist/react/media-gallery/mediaMeta.d.ts +62 -0
  87. package/dist/react/media-gallery/mediaMeta.d.ts.map +1 -0
  88. package/dist/react/media-gallery/mediaMeta.js +56 -0
  89. package/dist/react/media-gallery/mediaMeta.js.map +1 -0
  90. package/dist/react/media-gallery/playbackPreferences.d.ts +77 -0
  91. package/dist/react/media-gallery/playbackPreferences.d.ts.map +1 -1
  92. package/dist/react/media-gallery/playbackPreferences.js +42 -0
  93. package/dist/react/media-gallery/playbackPreferences.js.map +1 -1
  94. package/dist/react/media-gallery/types.d.ts +34 -0
  95. package/dist/react/media-gallery/types.d.ts.map +1 -1
  96. package/dist/scripts/guardrailsEnforce.d.ts +29 -0
  97. package/dist/scripts/guardrailsEnforce.d.ts.map +1 -0
  98. package/dist/styles-areas/activity-bar.css +30 -0
  99. package/dist/styles-areas/analytics.css +672 -0
  100. package/dist/styles-areas/auth.css +154 -0
  101. package/dist/styles-areas/calendar.css +416 -0
  102. package/dist/styles-areas/chart-table.css +41 -0
  103. package/dist/styles-areas/charts.css +89 -0
  104. package/dist/styles-areas/chat.css +364 -0
  105. package/dist/styles-areas/clipboard.css +26 -0
  106. package/dist/styles-areas/code-editor.css +130 -0
  107. package/dist/styles-areas/companion-link.css +70 -0
  108. package/dist/styles-areas/core.css +2503 -0
  109. package/dist/styles-areas/dashboard-grid.css +84 -0
  110. package/dist/styles-areas/data-table.css +657 -0
  111. package/dist/styles-areas/deep-link.css +26 -0
  112. package/dist/styles-areas/diff-viewer.css +30 -0
  113. package/dist/styles-areas/disk-usage.css +262 -0
  114. package/dist/styles-areas/emoji.css +154 -0
  115. package/dist/styles-areas/fields.css +582 -0
  116. package/dist/styles-areas/file-tree.css +33 -0
  117. package/dist/styles-areas/filter-rail.css +235 -0
  118. package/dist/styles-areas/folder-tree.css +219 -0
  119. package/dist/styles-areas/keep-awake.css +26 -0
  120. package/dist/styles-areas/layout-engine.css +239 -0
  121. package/dist/styles-areas/markdown.css +87 -0
  122. package/dist/styles-areas/master-detail.css +239 -0
  123. package/dist/styles-areas/master-lock.css +26 -0
  124. package/dist/styles-areas/media-gallery.css +351 -0
  125. package/dist/styles-areas/media.css +658 -0
  126. package/dist/styles-areas/nav.css +488 -0
  127. package/dist/styles-areas/notifications.css +245 -0
  128. package/dist/styles-areas/overlays.css +133 -0
  129. package/dist/styles-areas/palette.css +140 -0
  130. package/dist/styles-areas/pdf-viewer.css +47 -0
  131. package/dist/styles-areas/problem-detail.css +97 -0
  132. package/dist/styles-areas/rich-text.css +167 -0
  133. package/dist/styles-areas/sharing.css +153 -0
  134. package/dist/styles-areas/spreadsheet.css +37 -0
  135. package/dist/styles-areas/stats.css +281 -0
  136. package/dist/styles-areas/test-report.css +133 -0
  137. package/dist/styles-areas/virtual.css +30 -0
  138. package/dist/styles-areas/wizard.css +381 -0
  139. package/dist/styles-areas/workbench.css +543 -0
  140. package/dist/styles-areas/workbook-viewer.css +44 -0
  141. package/dist/styles-static.css +34 -23
  142. package/dist/styles.css +34 -23
  143. package/package.json +111 -31
  144. package/scripts/checkDistExports.ts +67 -0
  145. package/scripts/cssRules.ts +125 -0
  146. package/scripts/fixtureAppCss.ts +344 -0
  147. package/scripts/generateAreaStyles.ts +253 -0
  148. package/scripts/guardrailsEnforce.spec.ts +62 -0
  149. package/scripts/guardrailsEnforce.ts +67 -3
  150. package/scripts/styleAreas.ts +585 -0
  151. package/scripts/verify.ts +5 -0
  152. package/src/barrelsReachNoOptionalPeer.spec.ts +117 -9
  153. package/src/docsMatchTheSplit.spec.ts +98 -0
  154. package/src/fixtureAppCss.spec.ts +177 -0
  155. package/src/namedSubpathsResolve.spec.ts +35 -0
  156. package/src/publishShape.spec.ts +67 -0
  157. package/src/react/components/ListToolbar.spec.tsx +172 -0
  158. package/src/react/components/ListToolbar.tsx +151 -0
  159. package/src/react/file-tree/FileTree.spec.tsx +1009 -0
  160. package/src/react/file-tree/FileTree.tsx +1459 -309
  161. package/src/react/file-tree/fileTree.css +151 -0
  162. package/src/react/file-tree/fileTreeSelection.spec.ts +327 -0
  163. package/src/react/file-tree/fileTreeSelection.ts +321 -0
  164. package/src/react/file-tree/index.ts +21 -0
  165. package/src/react/index.ts +1 -0
  166. package/src/react/lib/form.ts +51 -8
  167. package/src/react/media/DenseGalleryShell.tsx +108 -36
  168. package/src/react/media/FocusViewer.tsx +15 -8
  169. package/src/react/media/FrameGrabber.spec.tsx +175 -0
  170. package/src/react/media/FrameGrabber.tsx +67 -0
  171. package/src/react/media/MediaResize.spec.tsx +84 -14
  172. package/src/react/media/MediaResize.tsx +51 -19
  173. package/src/react/media/VideoChapterEditor.tsx +428 -0
  174. package/src/react/media/VideoPlayer.spec.tsx +111 -1
  175. package/src/react/media/VideoPlayer.tsx +158 -11
  176. package/src/react/media/VideoTurner.spec.tsx +67 -0
  177. package/src/react/media/VideoTurner.tsx +70 -15
  178. package/src/react/media/denseGallery.css +104 -46
  179. package/src/react/media/hlsSource.recovery.spec.ts +213 -0
  180. package/src/react/media/hlsSource.spec.ts +8 -0
  181. package/src/react/media/hlsSource.ts +189 -1
  182. package/src/react/media/index.ts +14 -0
  183. package/src/react/media/mediaResize.css +127 -54
  184. package/src/react/media/pictureEditor.css +52 -6
  185. package/src/react/media/videoChapterEditor.css +203 -0
  186. package/src/react/media/videoChapters.spec.ts +176 -0
  187. package/src/react/media/videoChapters.ts +181 -0
  188. package/src/react/media-gallery/GalleryTable.tsx +93 -3
  189. package/src/react/media-gallery/MediaGallery.spec.tsx +1156 -10
  190. package/src/react/media-gallery/MediaGallery.tsx +813 -95
  191. package/src/react/media-gallery/MediaMetaEditor.tsx +237 -0
  192. package/src/react/media-gallery/galleryTable.spec.ts +41 -1
  193. package/src/react/media-gallery/index.ts +7 -0
  194. package/src/react/media-gallery/mediaGallery.css +180 -4
  195. package/src/react/media-gallery/mediaMeta.spec.ts +95 -0
  196. package/src/react/media-gallery/mediaMeta.ts +101 -0
  197. package/src/react/media-gallery/playbackPreferences.spec.ts +172 -0
  198. package/src/react/media-gallery/playbackPreferences.ts +100 -0
  199. package/src/react/media-gallery/types.ts +34 -0
  200. package/src/shippedFilesAreTracked.spec.ts +69 -0
  201. package/src/styles-areas/activity-bar.css +30 -0
  202. package/src/styles-areas/analytics.css +672 -0
  203. package/src/styles-areas/auth.css +154 -0
  204. package/src/styles-areas/calendar.css +416 -0
  205. package/src/styles-areas/chart-table.css +41 -0
  206. package/src/styles-areas/charts.css +89 -0
  207. package/src/styles-areas/chat.css +364 -0
  208. package/src/styles-areas/clipboard.css +26 -0
  209. package/src/styles-areas/code-editor.css +130 -0
  210. package/src/styles-areas/companion-link.css +70 -0
  211. package/src/styles-areas/core.css +2503 -0
  212. package/src/styles-areas/dashboard-grid.css +84 -0
  213. package/src/styles-areas/data-table.css +657 -0
  214. package/src/styles-areas/deep-link.css +26 -0
  215. package/src/styles-areas/diff-viewer.css +30 -0
  216. package/src/styles-areas/disk-usage.css +262 -0
  217. package/src/styles-areas/emoji.css +154 -0
  218. package/src/styles-areas/fields.css +582 -0
  219. package/src/styles-areas/file-tree.css +33 -0
  220. package/src/styles-areas/filter-rail.css +235 -0
  221. package/src/styles-areas/folder-tree.css +219 -0
  222. package/src/styles-areas/keep-awake.css +26 -0
  223. package/src/styles-areas/layout-engine.css +239 -0
  224. package/src/styles-areas/markdown.css +87 -0
  225. package/src/styles-areas/master-detail.css +239 -0
  226. package/src/styles-areas/master-lock.css +26 -0
  227. package/src/styles-areas/media-gallery.css +351 -0
  228. package/src/styles-areas/media.css +658 -0
  229. package/src/styles-areas/nav.css +488 -0
  230. package/src/styles-areas/notifications.css +245 -0
  231. package/src/styles-areas/overlays.css +133 -0
  232. package/src/styles-areas/palette.css +140 -0
  233. package/src/styles-areas/pdf-viewer.css +47 -0
  234. package/src/styles-areas/problem-detail.css +97 -0
  235. package/src/styles-areas/rich-text.css +167 -0
  236. package/src/styles-areas/sharing.css +153 -0
  237. package/src/styles-areas/spreadsheet.css +37 -0
  238. package/src/styles-areas/stats.css +281 -0
  239. package/src/styles-areas/test-report.css +133 -0
  240. package/src/styles-areas/virtual.css +30 -0
  241. package/src/styles-areas/wizard.css +381 -0
  242. package/src/styles-areas/workbench.css +543 -0
  243. package/src/styles-areas/workbook-viewer.css +44 -0
  244. package/src/styles-static.css +34 -23
  245. package/src/styles.css +34 -23
  246. package/src/stylesAreas.spec.ts +247 -0
  247. package/src/stylesUtilitiesMatches.spec.ts +6 -77
  248. package/src/testFilesRunInParallel.spec.ts +79 -0
  249. package/src/typecheckCachesAreSeparate.spec.ts +128 -0
  250. package/src/verifyGraph.spec.ts +6 -0
@@ -0,0 +1,543 @@
1
+ /*
2
+ * cursedbelt — the `workbench` area. GENERATED BUILD ARTIFACT. Never hand-edit.
3
+ *
4
+ * the resizable/split/panelled work surfaces and the drag-and-drop affordances.
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/workbench.css";
14
+ * @import "cursedbelt/theme.css";
15
+ *
16
+ * An app that imports every area gets exactly what `cursedbelt/styles-utilities.css`
17
+ * emits — proved rule by rule in src/stylesAreas.spec.ts, which is also what fails
18
+ * when this file is stale. 770 candidate(s) scanned.
19
+ *
20
+ * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
21
+ * `bun run build` runs. The map of what is in which area, and why the areas are
22
+ * import closures rather than a hand-written list, is scripts/styleAreas.ts.
23
+ */
24
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
25
+ @layer properties;
26
+ @layer theme, base, components, utilities;
27
+ @layer theme {
28
+ :root, :host {
29
+ --spacing: 0.25rem;
30
+ --text-xl: 1.25rem;
31
+ --text-xl--line-height: calc(1.75 / 1.25);
32
+ --default-transition-duration: 150ms;
33
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
34
+ }
35
+ }
36
+ @layer utilities {
37
+ .right-4 {
38
+ right: calc(var(--spacing) * 4);
39
+ }
40
+ .bottom-6 {
41
+ bottom: calc(var(--spacing) * 6);
42
+ }
43
+ .left-0 {
44
+ left: 0px;
45
+ }
46
+ .-my-0\.5 {
47
+ margin-block: calc(var(--spacing) * -0.5);
48
+ }
49
+ .h-3\.5 {
50
+ height: calc(var(--spacing) * 3.5);
51
+ }
52
+ .h-40 {
53
+ height: calc(var(--spacing) * 40);
54
+ }
55
+ .h-\[420px\] {
56
+ height: 420px;
57
+ }
58
+ .max-h-\[40dvh\] {
59
+ max-height: 40dvh;
60
+ }
61
+ .max-h-\[65dvh\] {
62
+ max-height: 65dvh;
63
+ }
64
+ .max-h-\[85dvh\] {
65
+ max-height: 85dvh;
66
+ }
67
+ .max-h-full {
68
+ max-height: 100%;
69
+ }
70
+ .min-h-20 {
71
+ min-height: calc(var(--spacing) * 20);
72
+ }
73
+ .min-h-\[2\.25rem\] {
74
+ min-height: 2.25rem;
75
+ }
76
+ .min-h-\[44px\] {
77
+ min-height: 44px;
78
+ }
79
+ .min-h-dvh {
80
+ min-height: 100dvh;
81
+ }
82
+ .min-h-full {
83
+ min-height: 100%;
84
+ }
85
+ .w-1\/2 {
86
+ width: calc(1 / 2 * 100%);
87
+ }
88
+ .w-2\/3 {
89
+ width: calc(2 / 3 * 100%);
90
+ }
91
+ .w-3\.5 {
92
+ width: calc(var(--spacing) * 3.5);
93
+ }
94
+ .w-\[352px\] {
95
+ width: 352px;
96
+ }
97
+ .min-w-40 {
98
+ min-width: calc(var(--spacing) * 40);
99
+ }
100
+ .min-w-\[5rem\] {
101
+ min-width: 5rem;
102
+ }
103
+ .shrink-\[2\] {
104
+ flex-shrink: 2;
105
+ }
106
+ .translate-y-0 {
107
+ --tw-translate-y: 0px;
108
+ translate: var(--tw-translate-x) var(--tw-translate-y);
109
+ }
110
+ .translate-y-2 {
111
+ --tw-translate-y: calc(var(--spacing) * 2);
112
+ translate: var(--tw-translate-x) var(--tw-translate-y);
113
+ }
114
+ .scale-\[1\.01\] {
115
+ scale: 1.01;
116
+ }
117
+ .rotate-90 {
118
+ rotate: 90deg;
119
+ }
120
+ .cursor-not-allowed {
121
+ cursor: not-allowed;
122
+ }
123
+ .resize-none {
124
+ resize: none;
125
+ }
126
+ .\[scrollbar-width\:none\] {
127
+ scrollbar-width: none;
128
+ }
129
+ .flex-row {
130
+ flex-direction: row;
131
+ }
132
+ .self-center {
133
+ align-self: center;
134
+ }
135
+ .self-stretch {
136
+ align-self: stretch;
137
+ }
138
+ .rounded-\[2\.5rem\] {
139
+ border-radius: 2.5rem;
140
+ }
141
+ .rounded-t-xl {
142
+ border-top-left-radius: 1.5rem;
143
+ border-top-right-radius: 1.5rem;
144
+ }
145
+ .rounded-l-xl {
146
+ border-top-left-radius: 1.5rem;
147
+ border-bottom-left-radius: 1.5rem;
148
+ }
149
+ .rounded-r-xl {
150
+ border-top-right-radius: 1.5rem;
151
+ border-bottom-right-radius: 1.5rem;
152
+ }
153
+ .border-0 {
154
+ border-style: var(--tw-border-style);
155
+ border-width: 0px;
156
+ }
157
+ .border-2 {
158
+ border-style: var(--tw-border-style);
159
+ border-width: 2px;
160
+ }
161
+ .border-8 {
162
+ border-style: var(--tw-border-style);
163
+ border-width: 8px;
164
+ }
165
+ .border-r {
166
+ border-right-style: var(--tw-border-style);
167
+ border-right-width: 1px;
168
+ }
169
+ .border-l {
170
+ border-left-style: var(--tw-border-style);
171
+ border-left-width: 1px;
172
+ }
173
+ .border-dashed {
174
+ --tw-border-style: dashed;
175
+ border-style: dashed;
176
+ }
177
+ .border-solid {
178
+ --tw-border-style: solid;
179
+ border-style: solid;
180
+ }
181
+ .border-accent {
182
+ border-color: var(--accent);
183
+ }
184
+ .border-accent-solid {
185
+ border-color: var(--accent-solid);
186
+ }
187
+ .border-accent\/70 {
188
+ border-color: var(--accent);
189
+ @supports (color: color-mix(in lab, red, red)) {
190
+ border-color: color-mix(in oklab, var(--accent) 70%, transparent);
191
+ }
192
+ }
193
+ .border-border-strong\/60 {
194
+ border-color: var(--border-strong);
195
+ @supports (color: color-mix(in lab, red, red)) {
196
+ border-color: color-mix(in oklab, var(--border-strong) 60%, transparent);
197
+ }
198
+ }
199
+ .bg-accent\/8 {
200
+ background-color: var(--accent);
201
+ @supports (color: color-mix(in lab, red, red)) {
202
+ background-color: color-mix(in oklab, var(--accent) 8%, transparent);
203
+ }
204
+ }
205
+ .bg-accent\/15 {
206
+ background-color: var(--accent);
207
+ @supports (color: color-mix(in lab, red, red)) {
208
+ background-color: color-mix(in oklab, var(--accent) 15%, transparent);
209
+ }
210
+ }
211
+ .bg-accent\/40 {
212
+ background-color: var(--accent);
213
+ @supports (color: color-mix(in lab, red, red)) {
214
+ background-color: color-mix(in oklab, var(--accent) 40%, transparent);
215
+ }
216
+ }
217
+ .bg-border-strong {
218
+ background-color: var(--border-strong);
219
+ }
220
+ .bg-card-overlay\/85 {
221
+ background-color: var(--card-overlay);
222
+ @supports (color: color-mix(in lab, red, red)) {
223
+ background-color: color-mix(in oklab, var(--card-overlay) 85%, transparent);
224
+ }
225
+ }
226
+ .bg-muted\/40 {
227
+ background-color: var(--muted);
228
+ @supports (color: color-mix(in lab, red, red)) {
229
+ background-color: color-mix(in oklab, var(--muted) 40%, transparent);
230
+ }
231
+ }
232
+ .bg-muted\/60 {
233
+ background-color: var(--muted);
234
+ @supports (color: color-mix(in lab, red, red)) {
235
+ background-color: color-mix(in oklab, var(--muted) 60%, transparent);
236
+ }
237
+ }
238
+ .bg-success\/8 {
239
+ background-color: var(--success);
240
+ @supports (color: color-mix(in lab, red, red)) {
241
+ background-color: color-mix(in oklab, var(--success) 8%, transparent);
242
+ }
243
+ }
244
+ .pb-0\.5 {
245
+ padding-bottom: calc(var(--spacing) * 0.5);
246
+ }
247
+ .pb-\[max\(env\(safe-area-inset-bottom\,0px\)\,0\.5rem\)\] {
248
+ padding-bottom: max(env(safe-area-inset-bottom,0px), 0.5rem);
249
+ }
250
+ .pl-1 {
251
+ padding-left: var(--spacing);
252
+ }
253
+ .pl-3 {
254
+ padding-left: calc(var(--spacing) * 3);
255
+ }
256
+ .text-xl {
257
+ font-size: var(--text-xl);
258
+ line-height: var(--tw-leading, var(--text-xl--line-height));
259
+ }
260
+ .break-words {
261
+ overflow-wrap: break-word;
262
+ }
263
+ .text-muted-foreground\/60 {
264
+ color: var(--muted-foreground);
265
+ @supports (color: color-mix(in lab, red, red)) {
266
+ color: color-mix(in oklab, var(--muted-foreground) 60%, transparent);
267
+ }
268
+ }
269
+ .text-tone-amber-ink {
270
+ color: var(--tone-amber-ink);
271
+ }
272
+ .text-tone-cyan-ink {
273
+ color: var(--tone-cyan-ink);
274
+ }
275
+ .text-tone-emerald-ink {
276
+ color: var(--tone-emerald-ink);
277
+ }
278
+ .text-tone-orange-ink {
279
+ color: var(--tone-orange-ink);
280
+ }
281
+ .text-tone-purple-ink {
282
+ color: var(--tone-purple-ink);
283
+ }
284
+ .text-tone-rose-ink {
285
+ color: var(--tone-rose-ink);
286
+ }
287
+ .text-tone-sky-ink {
288
+ color: var(--tone-sky-ink);
289
+ }
290
+ .text-tone-slate-ink {
291
+ color: var(--tone-slate-ink);
292
+ }
293
+ .italic {
294
+ font-style: italic;
295
+ }
296
+ .opacity-100 {
297
+ opacity: 100%;
298
+ }
299
+ .ring-1 {
300
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
301
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
302
+ }
303
+ .ring-4 {
304
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
305
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
306
+ }
307
+ .ring-accent\/20 {
308
+ --tw-ring-color: var(--accent);
309
+ @supports (color: color-mix(in lab, red, red)) {
310
+ --tw-ring-color: color-mix(in oklab, var(--accent) 20%, transparent);
311
+ }
312
+ }
313
+ .ring-accent\/30 {
314
+ --tw-ring-color: var(--accent);
315
+ @supports (color: color-mix(in lab, red, red)) {
316
+ --tw-ring-color: color-mix(in oklab, var(--accent) 30%, transparent);
317
+ }
318
+ }
319
+ .ring-accent\/40 {
320
+ --tw-ring-color: var(--accent);
321
+ @supports (color: color-mix(in lab, red, red)) {
322
+ --tw-ring-color: color-mix(in oklab, var(--accent) 40%, transparent);
323
+ }
324
+ }
325
+ .ring-border {
326
+ --tw-ring-color: var(--border);
327
+ }
328
+ .ring-ring {
329
+ --tw-ring-color: var(--ring);
330
+ }
331
+ .transition-\[opacity\,transform\] {
332
+ transition-property: opacity,transform;
333
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
334
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
335
+ }
336
+ .duration-150 {
337
+ --tw-duration: 150ms;
338
+ transition-duration: 150ms;
339
+ }
340
+ .ring-inset {
341
+ --tw-ring-inset: inset;
342
+ }
343
+ .peer-focus\:rounded-lg:is(:where(.peer):focus ~ *) {
344
+ border-radius: 1rem;
345
+ }
346
+ .peer-focus\:ring-2:is(:where(.peer):focus ~ *) {
347
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
348
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
349
+ }
350
+ .peer-focus\:ring-field-ring\/40:is(:where(.peer):focus ~ *) {
351
+ --tw-ring-color: var(--field-ring);
352
+ @supports (color: color-mix(in lab, red, red)) {
353
+ --tw-ring-color: color-mix(in oklab, var(--field-ring) 40%, transparent);
354
+ }
355
+ }
356
+ .peer-focus\:outline-none:is(:where(.peer):focus ~ *) {
357
+ --tw-outline-style: none;
358
+ outline-style: none;
359
+ }
360
+ @media (hover: hover) {
361
+ .hover\:border-border-strong:hover {
362
+ border-color: var(--border-strong);
363
+ }
364
+ .hover\:border-field-ring:hover {
365
+ border-color: var(--field-ring);
366
+ }
367
+ .hover\:bg-card-overlay:hover {
368
+ background-color: var(--card-overlay);
369
+ }
370
+ .hover\:bg-muted-foreground\/10:hover {
371
+ background-color: var(--muted-foreground);
372
+ }
373
+ @supports (color: color-mix(in lab, red, red)) {
374
+ .hover\:bg-muted-foreground\/10:hover {
375
+ background-color: color-mix(in oklab, var(--muted-foreground) 10%, transparent);
376
+ }
377
+ }
378
+ .hover\:bg-muted\/80:hover {
379
+ background-color: var(--muted);
380
+ }
381
+ @supports (color: color-mix(in lab, red, red)) {
382
+ .hover\:bg-muted\/80:hover {
383
+ background-color: color-mix(in oklab, var(--muted) 80%, transparent);
384
+ }
385
+ }
386
+ .hover\:shadow-popover:hover {
387
+ --tw-shadow: var(--shadow-popover);
388
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
389
+ }
390
+ }
391
+ .data-\[state\=closed\]\:slide-out-to-bottom[data-state="closed"] {
392
+ --tw-exit-translate-y: 100%;
393
+ }
394
+ .data-\[state\=closed\]\:slide-out-to-left[data-state="closed"] {
395
+ --tw-exit-translate-x: -100%;
396
+ }
397
+ .data-\[state\=closed\]\:slide-out-to-right[data-state="closed"] {
398
+ --tw-exit-translate-x: 100%;
399
+ }
400
+ .data-\[state\=open\]\:slide-in-from-bottom[data-state="open"] {
401
+ --tw-enter-translate-y: 100%;
402
+ }
403
+ .data-\[state\=open\]\:slide-in-from-left[data-state="open"] {
404
+ --tw-enter-translate-x: -100%;
405
+ }
406
+ .data-\[state\=open\]\:slide-in-from-right[data-state="open"] {
407
+ --tw-enter-translate-x: 100%;
408
+ }
409
+ @media (width >= 40rem) {
410
+ .sm\:w-56 {
411
+ width: calc(var(--spacing) * 56);
412
+ }
413
+ }
414
+ @media (pointer: coarse) {
415
+ .pointer-coarse\:h-12 {
416
+ height: calc(var(--spacing) * 12);
417
+ }
418
+ .pointer-coarse\:w-12 {
419
+ width: calc(var(--spacing) * 12);
420
+ }
421
+ }
422
+ .\[\&_svg\]\:size-3\.5 svg {
423
+ width: calc(var(--spacing) * 3.5);
424
+ height: calc(var(--spacing) * 3.5);
425
+ }
426
+ .\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar {
427
+ display: none;
428
+ }
429
+ }
430
+ @property --tw-translate-x {
431
+ syntax: "*";
432
+ inherits: false;
433
+ initial-value: 0;
434
+ }
435
+ @property --tw-translate-y {
436
+ syntax: "*";
437
+ inherits: false;
438
+ initial-value: 0;
439
+ }
440
+ @property --tw-translate-z {
441
+ syntax: "*";
442
+ inherits: false;
443
+ initial-value: 0;
444
+ }
445
+ @property --tw-border-style {
446
+ syntax: "*";
447
+ inherits: false;
448
+ initial-value: solid;
449
+ }
450
+ @property --tw-shadow {
451
+ syntax: "*";
452
+ inherits: false;
453
+ initial-value: 0 0 #0000;
454
+ }
455
+ @property --tw-shadow-color {
456
+ syntax: "*";
457
+ inherits: false;
458
+ }
459
+ @property --tw-shadow-alpha {
460
+ syntax: "<percentage>";
461
+ inherits: false;
462
+ initial-value: 100%;
463
+ }
464
+ @property --tw-inset-shadow {
465
+ syntax: "*";
466
+ inherits: false;
467
+ initial-value: 0 0 #0000;
468
+ }
469
+ @property --tw-inset-shadow-color {
470
+ syntax: "*";
471
+ inherits: false;
472
+ }
473
+ @property --tw-inset-shadow-alpha {
474
+ syntax: "<percentage>";
475
+ inherits: false;
476
+ initial-value: 100%;
477
+ }
478
+ @property --tw-ring-color {
479
+ syntax: "*";
480
+ inherits: false;
481
+ }
482
+ @property --tw-ring-shadow {
483
+ syntax: "*";
484
+ inherits: false;
485
+ initial-value: 0 0 #0000;
486
+ }
487
+ @property --tw-inset-ring-color {
488
+ syntax: "*";
489
+ inherits: false;
490
+ }
491
+ @property --tw-inset-ring-shadow {
492
+ syntax: "*";
493
+ inherits: false;
494
+ initial-value: 0 0 #0000;
495
+ }
496
+ @property --tw-ring-inset {
497
+ syntax: "*";
498
+ inherits: false;
499
+ }
500
+ @property --tw-ring-offset-width {
501
+ syntax: "<length>";
502
+ inherits: false;
503
+ initial-value: 0px;
504
+ }
505
+ @property --tw-ring-offset-color {
506
+ syntax: "*";
507
+ inherits: false;
508
+ initial-value: #fff;
509
+ }
510
+ @property --tw-ring-offset-shadow {
511
+ syntax: "*";
512
+ inherits: false;
513
+ initial-value: 0 0 #0000;
514
+ }
515
+ @property --tw-duration {
516
+ syntax: "*";
517
+ inherits: false;
518
+ }
519
+ @layer properties {
520
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
521
+ *, ::before, ::after, ::backdrop {
522
+ --tw-translate-x: 0;
523
+ --tw-translate-y: 0;
524
+ --tw-translate-z: 0;
525
+ --tw-border-style: solid;
526
+ --tw-shadow: 0 0 #0000;
527
+ --tw-shadow-color: initial;
528
+ --tw-shadow-alpha: 100%;
529
+ --tw-inset-shadow: 0 0 #0000;
530
+ --tw-inset-shadow-color: initial;
531
+ --tw-inset-shadow-alpha: 100%;
532
+ --tw-ring-color: initial;
533
+ --tw-ring-shadow: 0 0 #0000;
534
+ --tw-inset-ring-color: initial;
535
+ --tw-inset-ring-shadow: 0 0 #0000;
536
+ --tw-ring-inset: initial;
537
+ --tw-ring-offset-width: 0px;
538
+ --tw-ring-offset-color: #fff;
539
+ --tw-ring-offset-shadow: 0 0 #0000;
540
+ --tw-duration: initial;
541
+ }
542
+ }
543
+ }
@@ -0,0 +1,44 @@
1
+ /*
2
+ * cursedbelt — the `workbook-viewer` area. GENERATED BUILD ARTIFACT. Never hand-edit.
3
+ *
4
+ * the lazy XLSX viewer (an optional peer already).
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/workbook-viewer.css";
14
+ * @import "cursedbelt/theme.css";
15
+ *
16
+ * An app that imports every area gets exactly what `cursedbelt/styles-utilities.css`
17
+ * emits — proved rule by rule in src/stylesAreas.spec.ts, which is also what fails
18
+ * when this file is stale. 247 candidate(s) scanned.
19
+ *
20
+ * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
21
+ * `bun run build` runs. The map of what is in which area, and why the areas are
22
+ * import closures rather than a hand-written list, is scripts/styleAreas.ts.
23
+ */
24
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
25
+ @layer theme, base, components, utilities;
26
+ @layer theme {
27
+ :root, :host {
28
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', Arial,
29
+ sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
30
+ --spacing: 0.25rem;
31
+ --text-sm: 0.875rem;
32
+ }
33
+ }
34
+ @layer utilities {
35
+ .collapse {
36
+ visibility: collapse;
37
+ }
38
+ .w-48 {
39
+ width: calc(var(--spacing) * 48);
40
+ }
41
+ .min-w-16 {
42
+ min-width: calc(var(--spacing) * 16);
43
+ }
44
+ }
@@ -6,29 +6,32 @@
6
6
  * This `@source` makes Tailwind v4 scan cursedbelt's source files so the utility
7
7
  * classes used by its components are generated in the app's stylesheet.
8
8
  *
9
- * ── Two ways in, and which one an app wants ──────────────────────────────────
9
+ * ── Three ways in, and which one an app wants ────────────────────────────────
10
10
  * `@source "."` is the expensive half: it points Tailwind's JIT at cursedbelt's
11
11
  * ENTIRE source tree, so the app emits the union of the whole design system
12
12
  * whether it renders three components or eighty, and its own build walks 827
13
13
  * files it does not own. Everything else in this file is CSS the components
14
14
  * genuinely need and no app can do without.
15
15
  *
16
- * A CSS `@import` takes the whole file, so the split is two more subpaths:
16
+ * A CSS `@import` takes the whole file, so the split is more subpaths:
17
17
  *
18
- * cursedbelt/styles.css this file — the real CSS + the `@source` scan
19
- * cursedbelt/styles-static.css the same file MINUS the `@source` line
20
- * cursedbelt/styles-utilities.css the utilities that `@source` line would have
21
- * produced, precompiled at cursedbelt's build
18
+ * cursedbelt/styles.css this file — the real CSS + the `@source` scan
19
+ * cursedbelt/styles-static.css the same file MINUS the `@source` line
20
+ * cursedbelt/styles-utilities.css the utilities that `@source` line would have
21
+ * produced, precompiled at cursedbelt's build
22
+ * cursedbelt/styles-areas/<area>.css the same utilities, split by component family
22
23
  *
23
- * The second two are a PAIR and neither is usable alone — `styles-static.css` on
24
- * its own gets the tooltip pointer-events fix, the Progress keyframes, the
25
- * lightbox bridge, the ambient/glass layer and `tw-animate-css`, and emits none
26
- * of cursedbelt's utility classes, i.e. an unstyled app:
24
+ * `styles-static.css` is never usable alone — on its own it gets the tooltip
25
+ * pointer-events fix, the Progress keyframes, the lightbox bridge, the
26
+ * ambient/glass layer and `tw-animate-css`, and emits none of cursedbelt's
27
+ * utility classes, i.e. an unstyled app. It pairs with EITHER of the other two:
27
28
  *
28
- * @import "tailwindcss";
29
- * @import "cursedbelt/styles-static.css";
30
- * @import "cursedbelt/styles-utilities.css";
31
- * @import "cursedbelt/theme.css";
29
+ * @import "tailwindcss"; @import "tailwindcss";
30
+ * @import "cursedbelt/styles-static.css"; @import "cursedbelt/styles-static.css";
31
+ * @import "cursedbelt/styles-utilities.css"; @import "cursedbelt/styles-areas/core.css";
32
+ * @import "cursedbelt/theme.css"; @import "cursedbelt/styles-areas/data-table.css";
33
+ * @import "cursedbelt/theme.css";
34
+ * the whole design system what this app renders
32
35
  *
33
36
  * 🔴 Do NOT hand-list cursedbelt's component files to get the utilities back.
34
37
  * Tailwind v4 resolves every `@source` to a DIRECTORY and scans it recursively —
@@ -38,22 +41,30 @@
38
41
  * into this package's source tree is also a `file:` dependency wearing a
39
42
  * stylesheet's clothes, and it buys nothing: it is the thing the previous
40
43
  * generation's 29-line-per-app arrangement is remembered for, and those 29 lines
41
- * were never file-level scoping either.
44
+ * were never file-level scoping either. Three apps hand-maintained such a list
45
+ * and one of them ran to 173 lines; all three were deleted, because every one of
46
+ * them was a directory list wearing a costume.
42
47
  *
43
- * The pair is not SMALLER than this file — measured, both routes emit the same
44
- * rules within 54 bytes. What it buys is a build that scans nothing of another
45
- * package's source tree, and a `styles-static.css` that finally has a correct
46
- * use. The measurements, and what would actually shrink a consumer, are in the
47
- * header of `scripts/generateUtilityStyles.ts`.
48
+ * `styles-utilities.css` is not SMALLER than this file — measured, both routes
49
+ * emit the same rules within 54 bytes; the union is the union however it is
50
+ * assembled. What it buys is a build that scans nothing of another package's
51
+ * source tree. 🔴 What makes a consumer smaller is the AREAS, and only the
52
+ * package could build them: Tailwind cannot aim a `@source` at anything finer
53
+ * than a directory, but `@tailwindcss/oxide` can be handed a FILE LIST, which is
54
+ * what `scripts/generateAreaStyles.ts` does. Measured on the fixture consumer
55
+ * `demo/fixtures/lean-app`, the area route emits 30% less CSS than the union, and
56
+ * `src/fixtureAppCss.spec.ts` is the ratchet that stops it climbing back. The
57
+ * area map, and a sentence on what each area is for, is `scripts/styleAreas.ts`.
48
58
  *
49
59
  * 🔴 This header is in BOTH of the first two files, because one is generated from
50
60
  * the other and a test holds them byte-identical apart from the `@source` line.
51
61
  * Always edit `src/styles.css`; never `src/styles-static.css`, which
52
62
  * `scripts/generateStaticStyles.ts` rewrites on every `bun run build` and
53
63
  * `src/stylesStaticMatches.spec.ts` fails on when it is stale. Editing this file
54
- * invalidates `src/styles-utilities.css` too — it is compiled against the static
55
- * variant, `scripts/generateUtilityStyles.ts` rewrites it in the same build step,
56
- * and `src/stylesUtilitiesMatches.spec.ts` is what fails when it is stale.
64
+ * invalidates `src/styles-utilities.css` and every `src/styles-areas/*.css` too —
65
+ * all of them are compiled against the static variant, `bun run styles` rewrites
66
+ * them in the same build step, and `src/stylesUtilitiesMatches.spec.ts` /
67
+ * `src/stylesAreas.spec.ts` are what fail when they are stale.
57
68
  */
58
69
 
59
70
  /* Animation utilities (animate-in/out, fade/zoom/slide-in-from-*) consumed by the