cursedbelt 1.0.0 → 2.5.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 (537) hide show
  1. package/dist/client/index.js +1 -1
  2. package/dist/core/category/index.d.ts.map +1 -1
  3. package/dist/core/category/index.js +2 -1
  4. package/dist/core/category/index.js.map +1 -1
  5. package/dist/core/category/types.js +1 -1
  6. package/dist/core/category/types.js.map +1 -1
  7. package/dist/core/file-tree/fileTreeModel.d.ts +49 -0
  8. package/dist/core/file-tree/fileTreeModel.d.ts.map +1 -1
  9. package/dist/core/file-tree/fileTreeModel.js +84 -0
  10. package/dist/core/file-tree/fileTreeModel.js.map +1 -1
  11. package/dist/core/layout/index.js +1 -1
  12. package/dist/core/layout/index.js.map +1 -1
  13. package/dist/core/media/index.js +1 -1
  14. package/dist/core/media/index.js.map +1 -1
  15. package/dist/core/media/types.js +1 -1
  16. package/dist/core/media/types.js.map +1 -1
  17. package/dist/core/media/uploadLimits.js +1 -1
  18. package/dist/core/media/uploadLimits.js.map +1 -1
  19. package/dist/core/sharing/model.d.ts +1 -1
  20. package/dist/ctgr/index.js +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/react/activity-bar/ActivityBar.d.ts +17 -0
  24. package/dist/react/activity-bar/ActivityBar.d.ts.map +1 -1
  25. package/dist/react/activity-bar/ActivityBar.js.map +1 -1
  26. package/dist/react/analytics/index.d.ts +1 -1
  27. package/dist/react/analytics/index.js +1 -1
  28. package/dist/react/chat/MessageComposer.d.ts.map +1 -1
  29. package/dist/react/chat/MessageComposer.js +5 -4
  30. package/dist/react/chat/MessageComposer.js.map +1 -1
  31. package/dist/react/components/Button.d.ts.map +1 -1
  32. package/dist/react/components/Button.js +3 -2
  33. package/dist/react/components/Button.js.map +1 -1
  34. package/dist/react/components/Checkbox.d.ts +19 -3
  35. package/dist/react/components/Checkbox.d.ts.map +1 -1
  36. package/dist/react/components/Checkbox.js +29 -12
  37. package/dist/react/components/Checkbox.js.map +1 -1
  38. package/dist/react/components/CodeArea.d.ts.map +1 -1
  39. package/dist/react/components/CodeArea.js +2 -1
  40. package/dist/react/components/CodeArea.js.map +1 -1
  41. package/dist/react/components/Collapsible.d.ts.map +1 -1
  42. package/dist/react/components/Collapsible.js +2 -1
  43. package/dist/react/components/Collapsible.js.map +1 -1
  44. package/dist/react/components/ComboboxField.d.ts.map +1 -1
  45. package/dist/react/components/ComboboxField.js +3 -2
  46. package/dist/react/components/ComboboxField.js.map +1 -1
  47. package/dist/react/components/CopyButton.d.ts.map +1 -1
  48. package/dist/react/components/CopyButton.js +2 -1
  49. package/dist/react/components/CopyButton.js.map +1 -1
  50. package/dist/react/components/DataTable/ColumnChecklist.d.ts.map +1 -1
  51. package/dist/react/components/DataTable/ColumnChecklist.js +2 -1
  52. package/dist/react/components/DataTable/ColumnChecklist.js.map +1 -1
  53. package/dist/react/components/DataTable/Pagination.d.ts.map +1 -1
  54. package/dist/react/components/DataTable/Pagination.js +2 -1
  55. package/dist/react/components/DataTable/Pagination.js.map +1 -1
  56. package/dist/react/components/DataTable/SortHeader.d.ts.map +1 -1
  57. package/dist/react/components/DataTable/SortHeader.js +2 -1
  58. package/dist/react/components/DataTable/SortHeader.js.map +1 -1
  59. package/dist/react/components/DataTable/TableFilterBuilder.d.ts +61 -0
  60. package/dist/react/components/DataTable/TableFilterBuilder.d.ts.map +1 -0
  61. package/dist/react/components/DataTable/{FilterBuilder.js → TableFilterBuilder.js} +26 -3
  62. package/dist/react/components/DataTable/TableFilterBuilder.js.map +1 -0
  63. package/dist/react/components/DataTable/Toolbar.d.ts +1 -1
  64. package/dist/react/components/DataTable/Toolbar.js +3 -3
  65. package/dist/react/components/DataTable/Toolbar.js.map +1 -1
  66. package/dist/react/components/DataTable/cells/LinkCell.d.ts.map +1 -1
  67. package/dist/react/components/DataTable/cells/LinkCell.js +2 -1
  68. package/dist/react/components/DataTable/cells/LinkCell.js.map +1 -1
  69. package/dist/react/components/DataTable/index.d.ts +1 -1
  70. package/dist/react/components/DataTable/index.d.ts.map +1 -1
  71. package/dist/react/components/DataTable/index.js +4 -1
  72. package/dist/react/components/DataTable/index.js.map +1 -1
  73. package/dist/react/components/DragHandle.d.ts.map +1 -1
  74. package/dist/react/components/DragHandle.js +2 -1
  75. package/dist/react/components/DragHandle.js.map +1 -1
  76. package/dist/react/components/EmojiField.d.ts.map +1 -1
  77. package/dist/react/components/EmojiField.js +2 -1
  78. package/dist/react/components/EmojiField.js.map +1 -1
  79. package/dist/react/components/EventTimeline.d.ts +3 -2
  80. package/dist/react/components/EventTimeline.d.ts.map +1 -1
  81. package/dist/react/components/EventTimeline.js +3 -2
  82. package/dist/react/components/EventTimeline.js.map +1 -1
  83. package/dist/react/components/IconButton.d.ts +1 -1
  84. package/dist/react/components/IconButton.js +1 -1
  85. package/dist/react/components/InfoHint.d.ts.map +1 -1
  86. package/dist/react/components/InfoHint.js +5 -4
  87. package/dist/react/components/InfoHint.js.map +1 -1
  88. package/dist/react/components/InheritBadge.js +1 -1
  89. package/dist/react/components/InheritBadge.js.map +1 -1
  90. package/dist/react/components/InlineEditableText.d.ts.map +1 -1
  91. package/dist/react/components/InlineEditableText.js +2 -1
  92. package/dist/react/components/InlineEditableText.js.map +1 -1
  93. package/dist/react/components/MeterList.d.ts.map +1 -1
  94. package/dist/react/components/MeterList.js +2 -1
  95. package/dist/react/components/MeterList.js.map +1 -1
  96. package/dist/react/components/PathText.d.ts +2 -2
  97. package/dist/react/components/PathText.d.ts.map +1 -1
  98. package/dist/react/components/PathText.js +2 -1
  99. package/dist/react/components/PathText.js.map +1 -1
  100. package/dist/react/components/RatingField.d.ts.map +1 -1
  101. package/dist/react/components/RatingField.js +2 -1
  102. package/dist/react/components/RatingField.js.map +1 -1
  103. package/dist/react/components/SecretInput.js +3 -2
  104. package/dist/react/components/SecretInput.js.map +1 -1
  105. package/dist/react/components/SegmentedControl.d.ts.map +1 -1
  106. package/dist/react/components/SegmentedControl.js +2 -1
  107. package/dist/react/components/SegmentedControl.js.map +1 -1
  108. package/dist/react/components/StarRating.d.ts.map +1 -1
  109. package/dist/react/components/StarRating.js +9 -5
  110. package/dist/react/components/StarRating.js.map +1 -1
  111. package/dist/react/components/StatStrip.d.ts.map +1 -1
  112. package/dist/react/components/StatStrip.js +2 -1
  113. package/dist/react/components/StatStrip.js.map +1 -1
  114. package/dist/react/components/StatTile.d.ts.map +1 -1
  115. package/dist/react/components/StatTile.js +3 -2
  116. package/dist/react/components/StatTile.js.map +1 -1
  117. package/dist/react/components/Tabs.d.ts.map +1 -1
  118. package/dist/react/components/Tabs.js +2 -1
  119. package/dist/react/components/Tabs.js.map +1 -1
  120. package/dist/react/components/TruncatedText.d.ts +2 -1
  121. package/dist/react/components/TruncatedText.d.ts.map +1 -1
  122. package/dist/react/components/TruncatedText.js +2 -1
  123. package/dist/react/components/TruncatedText.js.map +1 -1
  124. package/dist/react/components/calendar/MonthGrid.d.ts.map +1 -1
  125. package/dist/react/components/calendar/MonthGrid.js +2 -1
  126. package/dist/react/components/calendar/MonthGrid.js.map +1 -1
  127. package/dist/react/components/calendar/WeekView.d.ts.map +1 -1
  128. package/dist/react/components/calendar/WeekView.js +2 -1
  129. package/dist/react/components/calendar/WeekView.js.map +1 -1
  130. package/dist/react/components/revealOnHover.d.ts.map +1 -1
  131. package/dist/react/components/revealOnHover.js +2 -1
  132. package/dist/react/components/revealOnHover.js.map +1 -1
  133. package/dist/react/file-tree/FileTree.d.ts +50 -1
  134. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  135. package/dist/react/file-tree/FileTree.js +234 -6
  136. package/dist/react/file-tree/FileTree.js.map +1 -1
  137. package/dist/react/file-tree/fileTree.css +52 -0
  138. package/dist/react/filter-rail/FilterRail.d.ts.map +1 -1
  139. package/dist/react/filter-rail/FilterRail.js +5 -4
  140. package/dist/react/filter-rail/FilterRail.js.map +1 -1
  141. package/dist/react/folder-tree/FolderTreeRail.d.ts.map +1 -1
  142. package/dist/react/folder-tree/FolderTreeRail.js +2 -1
  143. package/dist/react/folder-tree/FolderTreeRail.js.map +1 -1
  144. package/dist/react/index.d.ts +5 -1
  145. package/dist/react/index.d.ts.map +1 -1
  146. package/dist/react/index.js +5 -1
  147. package/dist/react/index.js.map +1 -1
  148. package/dist/react/layoutEngine/index.js +1 -1
  149. package/dist/react/layoutEngine/index.js.map +1 -1
  150. package/dist/react/lib/field.d.ts.map +1 -1
  151. package/dist/react/lib/field.js +3 -2
  152. package/dist/react/lib/field.js.map +1 -1
  153. package/dist/react/lib/floatingStyles.d.ts.map +1 -1
  154. package/dist/react/lib/floatingStyles.js +2 -1
  155. package/dist/react/lib/floatingStyles.js.map +1 -1
  156. package/dist/react/lib/tapTarget.d.ts +96 -0
  157. package/dist/react/lib/tapTarget.d.ts.map +1 -0
  158. package/dist/react/lib/tapTarget.js +96 -0
  159. package/dist/react/lib/tapTarget.js.map +1 -0
  160. package/dist/react/media/VideoTrimmer.d.ts +1 -1
  161. package/dist/react/media/VideoTrimmer.js +1 -1
  162. package/dist/react/media/denseGallery.css +3 -3
  163. package/dist/react/media/ffmpegWasm.js +2 -2
  164. package/dist/react/media/ffmpegWasm.js.map +1 -1
  165. package/dist/react/media/videoPlayer.css +42 -0
  166. package/dist/react/namespace/NamespaceTargetCapsule.d.ts +2 -2
  167. package/dist/react/namespace/NamespaceTargetCapsule.d.ts.map +1 -1
  168. package/dist/react/nav/BreadcrumbTrail.d.ts.map +1 -1
  169. package/dist/react/nav/BreadcrumbTrail.js +4 -3
  170. package/dist/react/nav/BreadcrumbTrail.js.map +1 -1
  171. package/dist/react/nav/HubTileGrid.d.ts.map +1 -1
  172. package/dist/react/nav/HubTileGrid.js +2 -1
  173. package/dist/react/nav/HubTileGrid.js.map +1 -1
  174. package/dist/react/nav/SideNav.d.ts.map +1 -1
  175. package/dist/react/nav/SideNav.js +4 -3
  176. package/dist/react/nav/SideNav.js.map +1 -1
  177. package/dist/react/nav/SideNavCustomize.d.ts.map +1 -1
  178. package/dist/react/nav/SideNavCustomize.js +2 -1
  179. package/dist/react/nav/SideNavCustomize.js.map +1 -1
  180. package/dist/react/palette/CommandPalette.d.ts.map +1 -1
  181. package/dist/react/palette/CommandPalette.js +3 -2
  182. package/dist/react/palette/CommandPalette.js.map +1 -1
  183. package/dist/server/drivers/pooledControlStores.pg.test.js +1 -0
  184. package/dist/server/drivers/pooledControlStores.pg.test.js.map +1 -1
  185. package/dist/server/drivers/pooledIdentityStore.pg.test.js +1 -0
  186. package/dist/server/drivers/pooledIdentityStore.pg.test.js.map +1 -1
  187. package/dist/server/drivers/retentionPolicy.pg.test.js +1 -0
  188. package/dist/server/drivers/retentionPolicy.pg.test.js.map +1 -1
  189. package/dist/server/guard/argon2Binding.d.ts +1 -1
  190. package/dist/server/guard/argon2Binding.js +1 -1
  191. package/dist/server/incidents/store.d.ts +3 -3
  192. package/dist/server/index.js +1 -1
  193. package/dist/server/index.js.map +1 -1
  194. package/dist/server/master-lock/masterLock.d.ts +1 -1
  195. package/dist/server/media-bun/index.js +1 -1
  196. package/dist/server/media-bun/index.js.map +1 -1
  197. package/dist/server/paths/appDataHome.d.ts +20 -0
  198. package/dist/server/paths/appDataHome.d.ts.map +1 -0
  199. package/dist/server/paths/appDataHome.js +69 -0
  200. package/dist/server/paths/appDataHome.js.map +1 -0
  201. package/dist/server/retention/archive.d.ts +3 -4
  202. package/dist/server/retention/archive.d.ts.map +1 -1
  203. package/dist/server/retention/archive.js +20 -15
  204. package/dist/server/retention/archive.js.map +1 -1
  205. package/dist/server/retention/index.d.ts +1 -1
  206. package/dist/server/retention/index.js +1 -1
  207. package/dist/server/retention/policy.d.ts +2 -2
  208. package/dist/server/retention/policy.d.ts.map +1 -1
  209. package/dist/server/retention/policy.js +1 -1
  210. package/dist/server/retention/store.d.ts.map +1 -1
  211. package/dist/server/retention/store.js +27 -20
  212. package/dist/server/retention/store.js.map +1 -1
  213. package/dist/server/runtime/localHost.d.ts +10 -5
  214. package/dist/server/runtime/localHost.d.ts.map +1 -1
  215. package/dist/server/runtime/localHost.js +12 -8
  216. package/dist/server/runtime/localHost.js.map +1 -1
  217. package/dist/server/runtime/meterRollup.pg.test.js +1 -0
  218. package/dist/server/runtime/meterRollup.pg.test.js.map +1 -1
  219. package/dist/server/runtime/recipe.d.ts +4 -4
  220. package/dist/server/runtime/retentionJob.pg.test.js +1 -0
  221. package/dist/server/runtime/retentionJob.pg.test.js.map +1 -1
  222. package/dist/server/search/pgSearchProvider.pg.test.js +1 -0
  223. package/dist/server/search/pgSearchProvider.pg.test.js.map +1 -1
  224. package/dist/shared/errors.d.ts +1 -1
  225. package/dist/shared/errors.js +1 -1
  226. package/dist/styles-static.css +413 -0
  227. package/dist/styles-utilities.css +5074 -0
  228. package/dist/styles.css +49 -0
  229. package/package.json +30 -168
  230. package/scripts/generateStaticStyles.ts +122 -0
  231. package/scripts/generateUtilityStyles.ts +215 -0
  232. package/scripts/publicSurface.ts +455 -0
  233. package/scripts/testTmpRoot.ts +34 -5
  234. package/src/client/index.ts +1 -1
  235. package/src/core/category/index.ts +2 -1
  236. package/src/core/category/types.ts +1 -1
  237. package/src/core/file-tree/fileTreeModel.spec.ts +134 -0
  238. package/src/core/file-tree/fileTreeModel.ts +104 -0
  239. package/src/core/layout/index.ts +1 -1
  240. package/src/core/media/index.ts +1 -1
  241. package/src/core/media/types.ts +1 -1
  242. package/src/core/media/uploadLimits.ts +1 -1
  243. package/src/core/sharing/model.ts +1 -1
  244. package/src/ctgr/index.ts +1 -1
  245. package/src/declaredDepsAreImported.spec.ts +87 -0
  246. package/src/demoFixture.spec.ts +133 -0
  247. package/src/index.ts +1 -1
  248. package/src/lockfileIsTracked.spec.ts +50 -0
  249. package/src/namedSubpathsResolve.spec.ts +119 -0
  250. package/src/publicSurface.spec.ts +72 -0
  251. package/src/react/activity-bar/ActivityBar.tsx +17 -0
  252. package/src/react/analytics/index.ts +1 -1
  253. package/src/react/chat/MessageComposer.tsx +5 -4
  254. package/src/react/components/Button.tsx +3 -2
  255. package/src/react/components/Checkbox.spec.tsx +51 -0
  256. package/src/react/components/Checkbox.tsx +68 -26
  257. package/src/react/components/CodeArea.tsx +2 -1
  258. package/src/react/components/CodeChip.spec.tsx +2 -2
  259. package/src/react/components/Collapsible.tsx +2 -1
  260. package/src/react/components/ComboboxField.tsx +3 -2
  261. package/src/react/components/CopyButton.tsx +2 -1
  262. package/src/react/components/CopyableText.spec.tsx +1 -1
  263. package/src/react/components/DataTable/ColumnChecklist.tsx +2 -1
  264. package/src/react/components/DataTable/Pagination.tsx +2 -1
  265. package/src/react/components/DataTable/SortHeader.tsx +2 -1
  266. package/src/react/components/DataTable/{FilterBuilder.tsx → TableFilterBuilder.tsx} +33 -5
  267. package/src/react/components/DataTable/Toolbar.tsx +3 -3
  268. package/src/react/components/DataTable/cells/LinkCell.tsx +2 -1
  269. package/src/react/components/DataTable/index.ts +8 -1
  270. package/src/react/components/DragHandle.tsx +2 -1
  271. package/src/react/components/EmojiField.tsx +2 -1
  272. package/src/react/components/EventTimeline.tsx +3 -2
  273. package/src/react/components/FileLocation.spec.tsx +1 -1
  274. package/src/react/components/IconButton.tsx +1 -1
  275. package/src/react/components/InfoHint.tsx +5 -4
  276. package/src/react/components/InheritBadge.tsx +1 -1
  277. package/src/react/components/InlineEditableText.tsx +2 -1
  278. package/src/react/components/MeterList.tsx +2 -1
  279. package/src/react/components/PathText.tsx +4 -3
  280. package/src/react/components/RatingField.tsx +2 -1
  281. package/src/react/components/SecretInput.tsx +3 -3
  282. package/src/react/components/SegmentedControl.tsx +2 -2
  283. package/src/react/components/StarRating.spec.tsx +2 -2
  284. package/src/react/components/StarRating.tsx +9 -5
  285. package/src/react/components/StatStrip.tsx +2 -1
  286. package/src/react/components/StatTile.tsx +3 -3
  287. package/src/react/components/Tabs.spec.tsx +3 -2
  288. package/src/react/components/Tabs.tsx +2 -1
  289. package/src/react/components/TruncatedText.tsx +2 -1
  290. package/src/react/components/calendar/MonthGrid.spec.tsx +2 -1
  291. package/src/react/components/calendar/MonthGrid.tsx +2 -1
  292. package/src/react/components/calendar/WeekView.tsx +2 -1
  293. package/src/react/components/revealOnHover.ts +3 -2
  294. package/src/react/file-tree/FileTree.spec.tsx +248 -0
  295. package/src/react/file-tree/FileTree.tsx +304 -4
  296. package/src/react/file-tree/fileTree.css +52 -0
  297. package/src/react/file-tree/fileTreeGeometry.fixture.json +151 -0
  298. package/src/react/file-tree/fileTreeGeometry.spec.ts +33 -52
  299. package/src/react/filter-rail/FilterRail.spec.tsx +2 -1
  300. package/src/react/filter-rail/FilterRail.tsx +5 -4
  301. package/src/react/folder-tree/FolderTreeRail.tsx +2 -1
  302. package/src/react/index.ts +13 -3
  303. package/src/react/layoutEngine/index.ts +1 -1
  304. package/src/react/layoutEngine/types.ts +1 -1
  305. package/src/react/lib/field.ts +4 -2
  306. package/src/react/lib/floatingStyles.spec.ts +2 -1
  307. package/src/react/lib/floatingStyles.ts +3 -1
  308. package/src/react/lib/tapTarget.ts +100 -0
  309. package/src/react/media/MaskPainter.tsx +2 -2
  310. package/src/react/media/VideoTrimmer.tsx +1 -1
  311. package/src/react/media/denseGallery.css +3 -3
  312. package/src/react/media/ffmpegWasm.ts +2 -2
  313. package/src/react/media/videoPlayer.css +42 -0
  314. package/src/react/namespace/NamespaceTargetCapsule.tsx +2 -2
  315. package/src/react/nav/BreadcrumbTrail.tsx +4 -3
  316. package/src/react/nav/HubTileGrid.tsx +2 -1
  317. package/src/react/nav/SideNav.tsx +4 -3
  318. package/src/react/nav/SideNavCustomize.tsx +2 -1
  319. package/src/react/palette/CommandPalette.tsx +3 -2
  320. package/src/server/ctgr.ts +1 -1
  321. package/src/server/drivers/pooledControlStores.pg.test.ts +1 -0
  322. package/src/server/drivers/pooledIdentityStore.pg.test.ts +1 -0
  323. package/src/server/drivers/retentionPolicy.pg.test.ts +1 -0
  324. package/src/server/guard/argon2Binding.ts +1 -1
  325. package/src/server/incidents/store.ts +3 -3
  326. package/src/server/index.ts +1 -1
  327. package/src/server/master-lock/masterLock.spec.ts +18 -2
  328. package/src/server/master-lock/masterLock.ts +1 -1
  329. package/src/server/media-bun/image.spec.ts +1 -0
  330. package/src/server/media-bun/index.ts +1 -1
  331. package/src/server/media-bun/video.spec.ts +1 -0
  332. package/src/server/paths/appDataHome.spec.ts +87 -0
  333. package/src/server/paths/appDataHome.ts +84 -0
  334. package/src/server/retention/archive.spec.ts +26 -4
  335. package/src/server/retention/archive.ts +20 -15
  336. package/src/server/retention/index.ts +1 -1
  337. package/src/server/retention/policy.ts +2 -2
  338. package/src/server/retention/store.spec.ts +38 -10
  339. package/src/server/retention/store.ts +26 -19
  340. package/src/server/runtime/localHost.spec.ts +22 -3
  341. package/src/server/runtime/localHost.ts +12 -9
  342. package/src/server/runtime/meterRollup.pg.test.ts +1 -0
  343. package/src/server/runtime/recipe.ts +4 -4
  344. package/src/server/runtime/retentionJob.pg.test.ts +1 -0
  345. package/src/server/search/pgSearchProvider.pg.test.ts +1 -0
  346. package/src/server/storage/binaryServerProcessing.integration.spec.ts +6 -2
  347. package/src/server/storage/chunked.integration.spec.ts +5 -2
  348. package/src/server/storage/fileUploadClient-chunked.integration.spec.ts +5 -2
  349. package/src/server/storage/files/adapter.photo.display.spec.ts +1 -0
  350. package/src/server/storage/imageThumbnail.spec.ts +1 -0
  351. package/src/server/storage/transcode.integration.spec.ts +5 -2
  352. package/src/server/storage/videoProcessor.posterOnly.spec.ts +1 -0
  353. package/src/shared/errors.ts +1 -1
  354. package/src/skippedTestsAreAnswered.spec.ts +215 -0
  355. package/src/styles-static.css +413 -0
  356. package/src/styles-utilities.css +5074 -0
  357. package/src/styles.css +49 -0
  358. package/src/stylesStaticMatches.spec.ts +134 -0
  359. package/src/stylesUtilitiesMatches.spec.ts +314 -0
  360. package/src/tapTargetStylesheet.spec.ts +150 -0
  361. package/src/testTmpRoot.spec.ts +102 -0
  362. package/dist/core/duplicates/index.d.ts +0 -116
  363. package/dist/core/duplicates/index.d.ts.map +0 -1
  364. package/dist/core/duplicates/index.js +0 -178
  365. package/dist/core/duplicates/index.js.map +0 -1
  366. package/dist/core/namespace/helpers.d.ts +0 -14
  367. package/dist/core/namespace/helpers.d.ts.map +0 -1
  368. package/dist/core/namespace/helpers.js +0 -29
  369. package/dist/core/namespace/helpers.js.map +0 -1
  370. package/dist/core/namespace/index.d.ts +0 -4
  371. package/dist/core/namespace/index.d.ts.map +0 -1
  372. package/dist/core/namespace/index.js +0 -6
  373. package/dist/core/namespace/index.js.map +0 -1
  374. package/dist/core/namespace/memoryStore.d.ts +0 -19
  375. package/dist/core/namespace/memoryStore.d.ts.map +0 -1
  376. package/dist/core/namespace/memoryStore.js +0 -70
  377. package/dist/core/namespace/memoryStore.js.map +0 -1
  378. package/dist/core/namespace/types.d.ts +0 -44
  379. package/dist/core/namespace/types.d.ts.map +0 -1
  380. package/dist/core/namespace/types.js +0 -8
  381. package/dist/core/namespace/types.js.map +0 -1
  382. package/dist/game/core/DisposeRegistry.d.ts +0 -42
  383. package/dist/game/core/DisposeRegistry.d.ts.map +0 -1
  384. package/dist/game/core/DisposeRegistry.js +0 -67
  385. package/dist/game/core/DisposeRegistry.js.map +0 -1
  386. package/dist/game/core/drawBudget.d.ts +0 -26
  387. package/dist/game/core/drawBudget.d.ts.map +0 -1
  388. package/dist/game/core/drawBudget.js +0 -55
  389. package/dist/game/core/drawBudget.js.map +0 -1
  390. package/dist/game/core/fixedTimestep.d.ts +0 -38
  391. package/dist/game/core/fixedTimestep.d.ts.map +0 -1
  392. package/dist/game/core/fixedTimestep.js +0 -47
  393. package/dist/game/core/fixedTimestep.js.map +0 -1
  394. package/dist/game/core/index.d.ts +0 -9
  395. package/dist/game/core/index.d.ts.map +0 -1
  396. package/dist/game/core/index.js +0 -8
  397. package/dist/game/core/index.js.map +0 -1
  398. package/dist/game/core/inputCollector.d.ts +0 -82
  399. package/dist/game/core/inputCollector.d.ts.map +0 -1
  400. package/dist/game/core/inputCollector.js +0 -176
  401. package/dist/game/core/inputCollector.js.map +0 -1
  402. package/dist/game/core/resizeCanvas.d.ts +0 -19
  403. package/dist/game/core/resizeCanvas.d.ts.map +0 -1
  404. package/dist/game/core/resizeCanvas.js +0 -29
  405. package/dist/game/core/resizeCanvas.js.map +0 -1
  406. package/dist/game/react/index.d.ts +0 -3
  407. package/dist/game/react/index.d.ts.map +0 -1
  408. package/dist/game/react/index.js +0 -5
  409. package/dist/game/react/index.js.map +0 -1
  410. package/dist/game/react/useGameEngine.d.ts +0 -64
  411. package/dist/game/react/useGameEngine.d.ts.map +0 -1
  412. package/dist/game/react/useGameEngine.js +0 -78
  413. package/dist/game/react/useGameEngine.js.map +0 -1
  414. package/dist/react/canvas/CanvasNavHUD.d.ts +0 -64
  415. package/dist/react/canvas/CanvasNavHUD.d.ts.map +0 -1
  416. package/dist/react/canvas/CanvasNavHUD.js +0 -58
  417. package/dist/react/canvas/CanvasNavHUD.js.map +0 -1
  418. package/dist/react/canvas/fitLabel.d.ts +0 -53
  419. package/dist/react/canvas/fitLabel.d.ts.map +0 -1
  420. package/dist/react/canvas/fitLabel.js +0 -104
  421. package/dist/react/canvas/fitLabel.js.map +0 -1
  422. package/dist/react/canvas/index.d.ts +0 -4
  423. package/dist/react/canvas/index.d.ts.map +0 -1
  424. package/dist/react/canvas/index.js +0 -4
  425. package/dist/react/canvas/index.js.map +0 -1
  426. package/dist/react/canvas/lod.d.ts +0 -40
  427. package/dist/react/canvas/lod.d.ts.map +0 -1
  428. package/dist/react/canvas/lod.js +0 -37
  429. package/dist/react/canvas/lod.js.map +0 -1
  430. package/dist/react/components/DataTable/FilterBuilder.d.ts +0 -38
  431. package/dist/react/components/DataTable/FilterBuilder.d.ts.map +0 -1
  432. package/dist/react/components/DataTable/FilterBuilder.js.map +0 -1
  433. package/dist/react/seo/HeadProvider.d.ts +0 -14
  434. package/dist/react/seo/HeadProvider.d.ts.map +0 -1
  435. package/dist/react/seo/HeadProvider.js +0 -44
  436. package/dist/react/seo/HeadProvider.js.map +0 -1
  437. package/dist/react/seo/applyHeadToDocument.d.ts +0 -3
  438. package/dist/react/seo/applyHeadToDocument.d.ts.map +0 -1
  439. package/dist/react/seo/applyHeadToDocument.js +0 -66
  440. package/dist/react/seo/applyHeadToDocument.js.map +0 -1
  441. package/dist/react/seo/index.d.ts +0 -3
  442. package/dist/react/seo/index.d.ts.map +0 -1
  443. package/dist/react/seo/index.js +0 -7
  444. package/dist/react/seo/index.js.map +0 -1
  445. package/dist/react/timeline/ClipView.d.ts +0 -29
  446. package/dist/react/timeline/ClipView.d.ts.map +0 -1
  447. package/dist/react/timeline/ClipView.js +0 -53
  448. package/dist/react/timeline/ClipView.js.map +0 -1
  449. package/dist/react/timeline/Playhead.d.ts +0 -16
  450. package/dist/react/timeline/Playhead.d.ts.map +0 -1
  451. package/dist/react/timeline/Playhead.js +0 -26
  452. package/dist/react/timeline/Playhead.js.map +0 -1
  453. package/dist/react/timeline/TimeRuler.d.ts +0 -21
  454. package/dist/react/timeline/TimeRuler.d.ts.map +0 -1
  455. package/dist/react/timeline/TimeRuler.js +0 -31
  456. package/dist/react/timeline/TimeRuler.js.map +0 -1
  457. package/dist/react/timeline/TimelineSurface.d.ts +0 -29
  458. package/dist/react/timeline/TimelineSurface.d.ts.map +0 -1
  459. package/dist/react/timeline/TimelineSurface.js +0 -56
  460. package/dist/react/timeline/TimelineSurface.js.map +0 -1
  461. package/dist/react/timeline/TrackLane.d.ts +0 -31
  462. package/dist/react/timeline/TrackLane.d.ts.map +0 -1
  463. package/dist/react/timeline/TrackLane.js +0 -32
  464. package/dist/react/timeline/TrackLane.js.map +0 -1
  465. package/dist/react/timeline/index.d.ts +0 -6
  466. package/dist/react/timeline/index.d.ts.map +0 -1
  467. package/dist/react/timeline/index.js +0 -12
  468. package/dist/react/timeline/index.js.map +0 -1
  469. package/dist/server/private-media/index.d.ts +0 -7
  470. package/dist/server/private-media/index.d.ts.map +0 -1
  471. package/dist/server/private-media/index.js +0 -13
  472. package/dist/server/private-media/index.js.map +0 -1
  473. package/dist/server/seo/index.d.ts +0 -3
  474. package/dist/server/seo/index.d.ts.map +0 -1
  475. package/dist/server/seo/index.js +0 -6
  476. package/dist/server/seo/index.js.map +0 -1
  477. package/dist/server/seo/mountSeoRoutes.d.ts +0 -9
  478. package/dist/server/seo/mountSeoRoutes.d.ts.map +0 -1
  479. package/dist/server/seo/mountSeoRoutes.js +0 -19
  480. package/dist/server/seo/mountSeoRoutes.js.map +0 -1
  481. package/dist/server/seo/serveHeadInjectedIndex.d.ts +0 -9
  482. package/dist/server/seo/serveHeadInjectedIndex.d.ts.map +0 -1
  483. package/dist/server/seo/serveHeadInjectedIndex.js +0 -20
  484. package/dist/server/seo/serveHeadInjectedIndex.js.map +0 -1
  485. package/dist/upload.d.ts +0 -148
  486. package/dist/upload.d.ts.map +0 -1
  487. package/dist/upload.js +0 -159
  488. package/dist/upload.js.map +0 -1
  489. package/dist/verify/runtime/index.d.ts +0 -16
  490. package/dist/verify/runtime/index.d.ts.map +0 -1
  491. package/dist/verify/runtime/index.js +0 -16
  492. package/dist/verify/runtime/index.js.map +0 -1
  493. package/scripts/demoCheck.ts +0 -42
  494. package/src/core/duplicates/index.spec.ts +0 -116
  495. package/src/core/duplicates/index.ts +0 -203
  496. package/src/core/namespace/helpers.ts +0 -31
  497. package/src/core/namespace/index.ts +0 -12
  498. package/src/core/namespace/memoryStore.ts +0 -77
  499. package/src/core/namespace/namespace.spec.ts +0 -117
  500. package/src/core/namespace/types.ts +0 -53
  501. package/src/game/core/DisposeRegistry.spec.ts +0 -53
  502. package/src/game/core/DisposeRegistry.ts +0 -70
  503. package/src/game/core/drawBudget.spec.ts +0 -51
  504. package/src/game/core/drawBudget.ts +0 -75
  505. package/src/game/core/fixedTimestep.spec.ts +0 -91
  506. package/src/game/core/fixedTimestep.ts +0 -79
  507. package/src/game/core/index.ts +0 -16
  508. package/src/game/core/inputCollector.spec.ts +0 -29
  509. package/src/game/core/inputCollector.ts +0 -245
  510. package/src/game/core/resizeCanvas.ts +0 -31
  511. package/src/game/react/index.ts +0 -10
  512. package/src/game/react/useGameEngine.ts +0 -125
  513. package/src/react/canvas/CanvasNavHUD.spec.tsx +0 -62
  514. package/src/react/canvas/CanvasNavHUD.tsx +0 -210
  515. package/src/react/canvas/fitLabel.spec.ts +0 -82
  516. package/src/react/canvas/fitLabel.ts +0 -150
  517. package/src/react/canvas/index.ts +0 -15
  518. package/src/react/canvas/lod.ts +0 -53
  519. package/src/react/seo/HeadProvider.tsx +0 -67
  520. package/src/react/seo/applyHeadToDocument.ts +0 -73
  521. package/src/react/seo/index.ts +0 -12
  522. package/src/react/seo/seo.spec.tsx +0 -101
  523. package/src/react/timeline/ClipView.tsx +0 -146
  524. package/src/react/timeline/Playhead.tsx +0 -63
  525. package/src/react/timeline/TimeRuler.tsx +0 -85
  526. package/src/react/timeline/TimelineSurface.tsx +0 -157
  527. package/src/react/timeline/TrackLane.tsx +0 -87
  528. package/src/react/timeline/index.ts +0 -12
  529. package/src/react/timeline/timeline.spec.tsx +0 -175
  530. package/src/server/private-media/index.ts +0 -45
  531. package/src/server/seo/index.ts +0 -8
  532. package/src/server/seo/mountSeoRoutes.ts +0 -37
  533. package/src/server/seo/seo.spec.ts +0 -128
  534. package/src/server/seo/serveHeadInjectedIndex.ts +0 -36
  535. package/src/upload.spec.ts +0 -300
  536. package/src/upload.ts +0 -288
  537. package/src/verify/runtime/index.ts +0 -64
@@ -1,38 +0,0 @@
1
- import { type FilterQuery } from './filterQuery';
2
- export interface FilterBuilderColumn {
3
- key: string;
4
- label: string;
5
- }
6
- export interface FilterBuilderProps {
7
- columns: FilterBuilderColumn[];
8
- value: FilterQuery;
9
- onChange: (next: FilterQuery) => void;
10
- className?: string;
11
- }
12
- /**
13
- * The filter builder — `(A and B) or (C and D)`, and the UX is the hard half.
14
- *
15
- * The owner's closing clause is the acceptance test, not a nicety: *"easy enough
16
- * that I don't give up on trying it."* So every decision here is made against
17
- * "can somebody who did not write this finish a two-group filter":
18
- *
19
- * - **No Apply button and no draft state.** Every keystroke narrows the table
20
- * behind the popover, so you can see whether you are getting closer. A builder
21
- * whose result only appears after a commit makes you guess, and guessing wrong
22
- * twice is where people give up. `isActiveCondition` is what makes this
23
- * survivable — a half-typed condition is not yet a constraint, so the table
24
- * does not empty out the instant you add a row.
25
- * - **The grammar is VISIBLE, not implied.** Groups are boxes, the word `OR`
26
- * sits between them on its own rule, and `and` is printed before every
27
- * condition after the first. Nobody has to know a precedence rule.
28
- * - **Exactly two levels.** There is no "add nested group", because the moment
29
- * nesting exists the reader has to hold a tree in their head. Two levels
30
- * express his own worked example and everything shaped like it.
31
- * - **Every row is removable, and so is the whole thing.** `Clear all` is
32
- * always reachable; a filter you cannot get out of is worse than none.
33
- *
34
- * The trigger carries the live count so the toolbar says how many constraints
35
- * are on without opening anything (DESIGN.md §2 — one line, state legible on it).
36
- */
37
- export declare function FilterBuilder({ columns, value, onChange, className }: FilterBuilderProps): import("react").JSX.Element | null;
38
- //# sourceMappingURL=FilterBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterBuilder.d.ts","sourceRoot":"","sources":["../../../../src/react/components/DataTable/FilterBuilder.tsx"],"names":[],"mappings":"AAOA,OAAO,EAOL,KAAK,WAAW,EAIjB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,kBAAkB,sCA6LxF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilterBuilder.js","sourceRoot":"","sources":["../../../../src/react/components/DataTable/FilterBuilder.tsx"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { HeadModel } from 'cwip/seo';
2
- import { type ReactNode } from 'react';
3
- export interface HeadProviderConfig {
4
- default?: HeadModel;
5
- siteUrl?: string;
6
- titleTemplate?: string;
7
- }
8
- export interface HeadProviderProps extends HeadProviderConfig {
9
- children?: ReactNode;
10
- }
11
- export declare const useHeadConfig: () => HeadProviderConfig;
12
- export declare const HeadProvider: ({ children, ...config }: HeadProviderProps) => import("react").JSX.Element;
13
- export declare const useHead: (model: HeadModel) => void;
14
- //# sourceMappingURL=HeadProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HeadProvider.d.ts","sourceRoot":"","sources":["../../../src/react/seo/HeadProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAiB,KAAK,SAAS,EAAkC,MAAM,OAAO,CAAC;AAGtF,MAAM,WAAW,kBAAkB;IAGjC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAOD,eAAO,MAAM,aAAa,QAAO,kBAA6C,CAAC;AAE/E,eAAO,MAAM,YAAY,GAAI,yBAAyB,iBAAiB,gCAUtE,CAAC;AAsBF,eAAO,MAAM,OAAO,GAAI,OAAO,SAAS,KAAG,IAS1C,CAAC"}
@@ -1,44 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useEffect, useMemo } from 'react';
3
- import { applyHeadToDocument } from './applyHeadToDocument';
4
- const HeadContext = createContext({});
5
- // Provides the site-wide SEO defaults (base head + siteUrl + title template) that
6
- // every `useHead` call merges under its own model. Mount once near the app root.
7
- // Read the site-wide SEO config supplied by the nearest `HeadProvider` (siteUrl,
8
- // title template, base head). Returns `{}` when no provider is mounted, so a
9
- // consumer can fall back (e.g. to `window.location.origin`) without crashing.
10
- export const useHeadConfig = () => useContext(HeadContext);
11
- export const HeadProvider = ({ children, ...config }) => {
12
- const value = useMemo(() => ({
13
- default: config.default,
14
- siteUrl: config.siteUrl,
15
- titleTemplate: config.titleTemplate,
16
- }), [config.default, config.siteUrl, config.titleTemplate]);
17
- return _jsx(HeadContext.Provider, { value: value, children: children });
18
- };
19
- const mergeHead = (base, model, titleTemplate) => ({
20
- titleTemplate,
21
- ...base,
22
- ...model,
23
- });
24
- // Reconciles `document.head` for the CURRENT route. Merges the provider's default
25
- // head with `model` (model wins field-by-field), then applies it imperatively on
26
- // mount/update. SSR-safe — a no-op when `document` is unavailable.
27
- //
28
- // Multi-caller semantics (last-writer-wins): if more than one component calls
29
- // `useHead` while mounted at once, the effect that (re)runs LAST wins — its model
30
- // fully replaces the previously-applied managed tags, because `applyHeadToDocument`
31
- // removes any managed tag not present in the new render. Design routes so exactly
32
- // one component per active route calls `useHead`; a nested component that also
33
- // calls it will overwrite the route's head on every one of its own re-renders.
34
- export const useHead = (model) => {
35
- const config = useContext(HeadContext);
36
- const merged = mergeHead(config.default, model, config.titleTemplate);
37
- const serialized = JSON.stringify(merged);
38
- useEffect(() => {
39
- if (typeof document === 'undefined')
40
- return;
41
- applyHeadToDocument(JSON.parse(serialized));
42
- }, [serialized]);
43
- };
44
- //# sourceMappingURL=HeadProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HeadProvider.js","sourceRoot":"","sources":["../../../src/react/seo/HeadProvider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAU5D,MAAM,WAAW,GAAG,aAAa,CAAqB,EAAE,CAAC,CAAC;AAM1D,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,6EAA6E;AAC7E,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAAG,GAAuB,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAqB,EAAE,EAAE;IACzE,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC,EACF,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CACvD,CAAC;IACF,OAAO,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAwB,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAChB,IAA2B,EAC3B,KAAgB,EAChB,aAAsB,EACX,EAAE,CAAC,CAAC;IACf,aAAa;IACb,GAAG,IAAI;IACP,GAAG,KAAK;CACT,CAAC,CAAC;AAEH,kFAAkF;AAClF,iFAAiF;AACjF,mEAAmE;AACnE,EAAE;AACF,8EAA8E;AAC9E,kFAAkF;AAClF,oFAAoF;AACpF,kFAAkF;AAClF,+EAA+E;AAC/E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAQ,EAAE;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAC5C,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAc,CAAC,CAAC;IAC3D,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { type HeadModel } from 'cwip/seo';
2
- export declare const applyHeadToDocument: (model: HeadModel, doc?: Document) => void;
3
- //# sourceMappingURL=applyHeadToDocument.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"applyHeadToDocument.d.ts","sourceRoot":"","sources":["../../../src/react/seo/applyHeadToDocument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA8B,MAAM,UAAU,CAAC;AAatE,eAAO,MAAM,mBAAmB,GAAI,OAAO,SAAS,EAAE,MAAK,QAAmB,KAAG,IAiChF,CAAC"}
@@ -1,66 +0,0 @@
1
- import { renderHead, SEO_TAG_MARKER } from 'cwip/seo';
2
- // Applies a HeadModel to a live document: sets `document.title` and upserts the
3
- // managed <meta>/<link>/<script type="application/ld+json"> tags into <head>. Every
4
- // tag it creates or updates carries SEO_TAG_MARKER so a later call can find and
5
- // replace its own tags without ever touching app-authored markup, and so it can
6
- // remove a managed tag that is no longer present in the new model. Idempotent:
7
- // calling twice with the same model produces the same DOM, never duplicates.
8
- //
9
- // Built directly on cwip's `renderHead` output (a string of tags) so the client
10
- // reconciler and every other delivery mechanism (prerender/edge/server) stay in
11
- // sync on exactly what a HeadModel renders to — this module only does the DOM
12
- // diffing, not the serialization.
13
- export const applyHeadToDocument = (model, doc = document) => {
14
- const html = renderHead(model, { marker: true });
15
- const template = doc.createElement('template');
16
- template.innerHTML = html;
17
- const nextNodes = Array.from(template.content.childNodes).filter((node) => node.nodeType === 1);
18
- const title = nextNodes.find((node) => node.tagName === 'TITLE');
19
- doc.title = title?.textContent ?? doc.title;
20
- const previouslyManaged = Array.from(doc.head.querySelectorAll(`[${SEO_TAG_MARKER}]`));
21
- const stillPresent = new Set();
22
- for (const node of nextNodes) {
23
- if (node.tagName === 'TITLE')
24
- continue; // handled via doc.title above
25
- const match = previouslyManaged.find((existing) => !stillPresent.has(existing) && isSameTag(existing, node));
26
- if (match) {
27
- copyAttributes(match, node);
28
- match.textContent = node.textContent;
29
- stillPresent.add(match);
30
- }
31
- else {
32
- const clone = node.cloneNode(true);
33
- doc.head.appendChild(clone);
34
- stillPresent.add(clone);
35
- }
36
- }
37
- for (const existing of previouslyManaged) {
38
- if (!stillPresent.has(existing))
39
- existing.remove();
40
- }
41
- };
42
- // Two tags are "the same" managed tag if they share a tag name and identifying key
43
- // (meta name/property, link rel+href, or — for scripts/title — just the tag name,
44
- // since a HeadModel carries at most one <title> and callers rarely emit more than
45
- // one ld+json script; multiple ld+json blocks are matched positionally by falling
46
- // through to a fresh append once earlier ones are claimed).
47
- const isSameTag = (a, b) => {
48
- if (a.tagName !== b.tagName)
49
- return false;
50
- if (a.tagName === 'META') {
51
- return (identity(a, 'name') === identity(b, 'name') &&
52
- identity(a, 'property') === identity(b, 'property'));
53
- }
54
- if (a.tagName === 'LINK') {
55
- return identity(a, 'rel') === identity(b, 'rel') && identity(a, 'href') === identity(b, 'href');
56
- }
57
- return true; // SCRIPT (ld+json) — matched positionally among managed scripts
58
- };
59
- const identity = (el, attr) => el.getAttribute(attr) ?? '';
60
- const copyAttributes = (target, source) => {
61
- for (const attr of Array.from(target.attributes))
62
- target.removeAttribute(attr.name);
63
- for (const attr of Array.from(source.attributes))
64
- target.setAttribute(attr.name, attr.value);
65
- };
66
- //# sourceMappingURL=applyHeadToDocument.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"applyHeadToDocument.js","sourceRoot":"","sources":["../../../src/react/seo/applyHeadToDocument.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export { applyHeadToDocument } from './applyHeadToDocument';
2
- export { HeadProvider, type HeadProviderConfig, type HeadProviderProps, useHead, useHeadConfig, } from './HeadProvider';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/seo/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,OAAO,EACP,aAAa,GACd,MAAM,gBAAgB,CAAC"}
@@ -1,7 +0,0 @@
1
- // cursedbelt/react/seo — a tiny, react-helmet-style head manager keyed to cwip's
2
- // `HeadModel`. `HeadProvider` supplies site-wide defaults; a route calls `useHead`
3
- // once to own `document.head` for as long as it's mounted. Dedicated subpath so an
4
- // app that never touches SEO pays nothing for it.
5
- export { applyHeadToDocument } from './applyHeadToDocument';
6
- export { HeadProvider, useHead, useHeadConfig, } from './HeadProvider';
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/seo/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,mFAAmF;AACnF,mFAAmF;AACnF,kDAAkD;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,YAAY,EAGZ,OAAO,EACP,aAAa,GACd,MAAM,gBAAgB,CAAC"}
@@ -1,29 +0,0 @@
1
- import { type TimelineClip } from 'cwip/timeline';
2
- import type { ReactNode } from 'react';
3
- export type TrimEdge = 'start' | 'end';
4
- export interface ClipViewProps {
5
- clip: TimelineClip;
6
- zoomScale: number;
7
- selected: boolean;
8
- onSelect: () => void;
9
- /** Live preview during a body drag (raw target start, seconds). */
10
- onMovePreview: (toStartSeconds: number, event: PointerEvent) => void;
11
- onMoveCommit: (toStartSeconds: number, cancelled: boolean) => void;
12
- /** Live preview during an edge drag (raw signed delta, seconds). */
13
- onTrimPreview: (edge: TrimEdge, deltaSeconds: number, event: PointerEvent) => void;
14
- onTrimCommit: (edge: TrimEdge, deltaSeconds: number, cancelled: boolean) => void;
15
- /** Fallback color token when the clip carries none (a theme token name,
16
- * resolved as `var(--<token>)` — e.g. "chart-1"). */
17
- defaultColorToken?: string;
18
- /** Extra content under the label (waveform strip, filmstrip). */
19
- children?: ReactNode;
20
- }
21
- /**
22
- * One clip block: body drag repositions, edge handles trim, click selects.
23
- * PRESENTATIONAL — it translates pixels to seconds and reports intent; all
24
- * clamping/rippling/snapping is the owner's job (cwip/timeline ops), so the
25
- * block never disagrees with the engine. Colors ride theme tokens via
26
- * `color-mix`, never raw values.
27
- */
28
- export declare function ClipView({ clip, zoomScale, selected, onSelect, onMovePreview, onMoveCommit, onTrimPreview, onTrimCommit, defaultColorToken, children, }: ClipViewProps): import("react").JSX.Element;
29
- //# sourceMappingURL=ClipView.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClipView.d.ts","sourceRoot":"","sources":["../../../src/react/timeline/ClipView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAExF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,mEAAmE;IACnE,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACrE,YAAY,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,oEAAoE;IACpE,aAAa,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACnF,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACjF;yDACqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,iBAA6B,EAC7B,QAAQ,GACT,EAAE,aAAa,+BAmGf"}
@@ -1,53 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { clipLeftPx, clipWidthPx, pxToSeconds } from 'cwip/timeline';
3
- import { Zap } from 'lucide-react';
4
- import { useRef } from 'react';
5
- import { formatTimecode } from '../../core/media';
6
- import { usePointerDrag } from '../hooks/usePointerDrag';
7
- import { cn } from '../lib/cn';
8
- /**
9
- * One clip block: body drag repositions, edge handles trim, click selects.
10
- * PRESENTATIONAL — it translates pixels to seconds and reports intent; all
11
- * clamping/rippling/snapping is the owner's job (cwip/timeline ops), so the
12
- * block never disagrees with the engine. Colors ride theme tokens via
13
- * `color-mix`, never raw values.
14
- */
15
- export function ClipView({ clip, zoomScale, selected, onSelect, onMovePreview, onMoveCommit, onTrimPreview, onTrimCommit, defaultColorToken = 'chart-1', children, }) {
16
- const token = clip.colorToken ?? defaultColorToken;
17
- const originStart = useRef(0);
18
- const bodyDrag = usePointerDrag({
19
- onStart: () => {
20
- originStart.current = clip.timelineStart;
21
- onSelect();
22
- },
23
- onMove: ({ dx, event }) => onMovePreview(Math.max(0, originStart.current + pxToSeconds(dx, zoomScale)), event),
24
- onEnd: ({ dx, cancelled }) => onMoveCommit(Math.max(0, originStart.current + pxToSeconds(dx, zoomScale)), cancelled),
25
- });
26
- // Both edge handles share one drag recipe, differing only by which edge they trim.
27
- // `usePointerDrag` is a hook, so it's called directly at the top level (never inside a
28
- // helper/closure — Rules of Hooks); `edgeDragOptions` builds the config, not the hook.
29
- const edgeDragOptions = (edge) => ({
30
- onStart: () => onSelect(),
31
- onMove: ({ dx, event }) => onTrimPreview(edge, pxToSeconds(dx, zoomScale), event),
32
- onEnd: ({ dx, cancelled }) => onTrimCommit(edge, pxToSeconds(dx, zoomScale), cancelled),
33
- });
34
- const startDrag = usePointerDrag(edgeDragOptions('start'));
35
- const endDrag = usePointerDrag(edgeDragOptions('end'));
36
- return (_jsxs("button", {
37
- // guardrails-ignore no-raw-action-button: a draggable/trimmable timeline-canvas
38
- // primitive (positioned, pointer-drag-driven, custom color-mix styling via
39
- // `style`) — not a generic action trigger, so it can't route through the
40
- // Button/Tooltip abstraction without breaking the drag/trim contract.
41
- type: 'button', ...bodyDrag.handleProps, onClick: (e) => {
42
- e.stopPropagation(); // the lane behind also listens (deselect/seek)
43
- onSelect();
44
- }, "aria-label": `Clip ${clip.name}`, "aria-pressed": selected, className: cn('group absolute inset-y-1 z-10 flex flex-col overflow-hidden rounded-md border p-0 text-left', 'cursor-grab appearance-none active:cursor-grabbing', selected && 'ring-2 ring-accent-solid ring-offset-1 ring-offset-background'), style: {
45
- ...bodyDrag.handleProps.style,
46
- left: clipLeftPx(clip, zoomScale),
47
- // 2px breathing room so butted clips stay visually distinct at high zoom
48
- width: Math.max(8, clipWidthPx(clip, zoomScale) - 2),
49
- borderColor: `var(--${token})`,
50
- background: `color-mix(in srgb, var(--${token}) 30%, var(--background))`,
51
- }, children: [children && _jsx("div", { className: 'pointer-events-none absolute inset-0', children: children }), _jsxs("div", { className: 'pointer-events-none relative z-1 flex items-center gap-1 px-1.5 pt-0.5', children: [_jsx("span", { className: 'truncate rounded bg-background/70 px-1 text-caption font-medium text-foreground', children: clip.name }), clip.speed !== 1 && (_jsxs("span", { className: 'inline-flex shrink-0 items-center gap-0.5 rounded bg-background/80 px-1 text-caption text-foreground', children: [_jsx(Zap, { "aria-hidden": true, className: 'size-2.5' }), clip.speed, "x"] }))] }), _jsxs("div", { className: 'pointer-events-none relative z-1 mt-auto w-fit rounded-tr bg-background/60 px-1.5 text-caption text-muted-foreground', children: [formatTimecode(clip.trackIn), "\u2013", formatTimecode(clip.trackOut)] }), _jsx("div", { ...startDrag.handleProps, className: cn('absolute inset-y-0 -left-1 z-20 flex w-4 cursor-ew-resize items-stretch justify-start', 'opacity-0 transition-opacity group-hover:opacity-100', selected && 'opacity-100'), style: startDrag.handleProps.style, "aria-hidden": true, children: _jsx("div", { className: 'ml-1 w-1.5 rounded-sm bg-foreground/40' }) }), _jsx("div", { ...endDrag.handleProps, className: cn('absolute inset-y-0 -right-1 z-20 flex w-4 cursor-ew-resize items-stretch justify-end', 'opacity-0 transition-opacity group-hover:opacity-100', selected && 'opacity-100'), style: endDrag.handleProps.style, "aria-hidden": true, children: _jsx("div", { className: 'mr-1 w-1.5 rounded-sm bg-foreground/40' }) })] }));
52
- }
53
- //# sourceMappingURL=ClipView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClipView.js","sourceRoot":"","sources":["../../../src/react/timeline/ClipView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAqB,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAA8B,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAsB/B;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,iBAAiB,GAAG,SAAS,EAC7B,QAAQ,GACM;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE;YACZ,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CACxB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;QACrF,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAC3B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;KACzF,CAAC,CAAC;IAEH,mFAAmF;IACnF,uFAAuF;IACvF,uFAAuF;IACvF,MAAM,eAAe,GAAG,CAAC,IAAc,EAAyB,EAAE,CAAC,CAAC;QAClE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;QACzB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC;QACjF,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC;KACxF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvD,OAAO,CACL;QACE,gFAAgF;QAChF,2EAA2E;QAC3E,yEAAyE;QACzE,sEAAsE;QACtE,IAAI,EAAC,QAAQ,KACT,QAAQ,CAAC,WAAW,EACxB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,+CAA+C;YACpE,QAAQ,EAAE,CAAC;QACb,CAAC,gBACW,QAAQ,IAAI,CAAC,IAAI,EAAE,kBACjB,QAAQ,EACtB,SAAS,EAAE,EAAE,CACX,6FAA6F,EAC7F,oDAAoD,EACpD,QAAQ,IAAI,+DAA+D,CAC5E,EACD,KAAK,EAAE;YACL,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK;YAC7B,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;YACjC,yEAAyE;YACzE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;YACpD,WAAW,EAAE,SAAS,KAAK,GAAG;YAC9B,UAAU,EAAE,4BAA4B,KAAK,2BAA2B;SACzE,aAIA,QAAQ,IAAI,cAAK,SAAS,EAAC,sCAAsC,YAAE,QAAQ,GAAO,EACnF,eAAK,SAAS,EAAC,wEAAwE,aACrF,eAAM,SAAS,EAAC,iFAAiF,YAC9F,IAAI,CAAC,IAAI,GACL,EACN,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CACnB,gBAAM,SAAS,EAAC,sGAAsG,aACpH,KAAC,GAAG,yBAAa,SAAS,EAAC,UAAU,GAAG,EACvC,IAAI,CAAC,KAAK,SACN,CACR,IACG,EACN,eAAK,SAAS,EAAC,sHAAsH,aAClI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,YAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IACzD,EAGN,iBACM,SAAS,CAAC,WAAW,EACzB,SAAS,EAAE,EAAE,CACX,uFAAuF,EACvF,sDAAsD,EACtD,QAAQ,IAAI,aAAa,CAC1B,EACD,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,iCAGlC,cAAK,SAAS,EAAC,wCAAwC,GAAG,GACtD,EACN,iBACM,OAAO,CAAC,WAAW,EACvB,SAAS,EAAE,EAAE,CACX,sFAAsF,EACtF,sDAAsD,EACtD,QAAQ,IAAI,aAAa,CAC1B,EACD,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,iCAGhC,cAAK,SAAS,EAAC,wCAAwC,GAAG,GACtD,IACC,CACV,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- export interface PlayheadProps {
2
- timeSeconds: number;
3
- zoomScale: number;
4
- /** Drag the head to scrub; omit for a display-only playhead. */
5
- onScrub?: (seconds: number) => void;
6
- onScrubStart?: () => void;
7
- onScrubEnd?: () => void;
8
- }
9
- /**
10
- * The vertical playhead overlay (line + grab knob). Positioned absolutely in a
11
- * `relative` container spanning the timeline's full scroll width. The knob is
12
- * the drag target; the line itself stays click-through so clips underneath
13
- * remain selectable.
14
- */
15
- export declare function Playhead({ timeSeconds, zoomScale, onScrub, onScrubStart, onScrubEnd, }: PlayheadProps): import("react").JSX.Element;
16
- //# sourceMappingURL=Playhead.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Playhead.d.ts","sourceRoot":"","sources":["../../../src/react/timeline/Playhead.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EACvB,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,GACX,EAAE,aAAa,+BAqCf"}
@@ -1,26 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { pxToSeconds, secondsToPx } from 'cwip/timeline';
3
- import { useRef } from 'react';
4
- import { usePointerDrag } from '../hooks/usePointerDrag';
5
- /**
6
- * The vertical playhead overlay (line + grab knob). Positioned absolutely in a
7
- * `relative` container spanning the timeline's full scroll width. The knob is
8
- * the drag target; the line itself stays click-through so clips underneath
9
- * remain selectable.
10
- */
11
- export function Playhead({ timeSeconds, zoomScale, onScrub, onScrubStart, onScrubEnd, }) {
12
- const originSeconds = useRef(0);
13
- const drag = usePointerDrag({
14
- onStart: () => {
15
- originSeconds.current = timeSeconds;
16
- onScrubStart?.();
17
- },
18
- onMove: ({ dx }) => {
19
- onScrub?.(Math.max(0, originSeconds.current + pxToSeconds(dx, zoomScale)));
20
- },
21
- onEnd: () => onScrubEnd?.(),
22
- disabled: !onScrub,
23
- });
24
- return (_jsxs("div", { className: 'pointer-events-none absolute inset-y-0 z-20', style: { left: secondsToPx(timeSeconds, zoomScale) }, children: [_jsx("div", { className: 'absolute inset-y-0 w-px bg-destructive' }), onScrub && (_jsx("div", { ...drag.handleProps, role: 'slider', "aria-label": 'Playhead', "aria-valuemin": 0, "aria-valuemax": Number.MAX_SAFE_INTEGER, "aria-valuenow": Math.round(timeSeconds), tabIndex: 0, className: 'pointer-events-auto absolute -top-1 -left-[11px] flex h-6 w-[23px] cursor-ew-resize items-start justify-center', style: drag.handleProps.style, children: _jsx("div", { className: 'h-3 w-3 rounded-full border border-background bg-destructive shadow' }) }))] }));
25
- }
26
- //# sourceMappingURL=Playhead.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Playhead.js","sourceRoot":"","sources":["../../../src/react/timeline/Playhead.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAWzD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,GACI;IACd,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,cAAc,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE;YACZ,aAAa,CAAC,OAAO,GAAG,WAAW,CAAC;YACpC,YAAY,EAAE,EAAE,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YACjB,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE;QAC3B,QAAQ,EAAE,CAAC,OAAO;KACnB,CAAC,CAAC;IAEH,OAAO,CACL,eACE,SAAS,EAAC,6CAA6C,EACvD,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,aAEpD,cAAK,SAAS,EAAC,wCAAwC,GAAG,EACzD,OAAO,IAAI,CACV,iBACM,IAAI,CAAC,WAAW,EACpB,IAAI,EAAC,QAAQ,gBACF,UAAU,mBACN,CAAC,mBACD,MAAM,CAAC,gBAAgB,mBACvB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EACtC,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,gHAAgH,EAC1H,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,YAE7B,cAAK,SAAS,EAAC,qEAAqE,GAAG,GACnF,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -1,21 +0,0 @@
1
- export interface TimeRulerProps {
2
- /** Ruler length (seconds) — usually total duration + some tail slack. */
3
- durationSeconds: number;
4
- zoomScale: number;
5
- /** Click/drag anywhere on the ruler seeks (a scrub). */
6
- onScrub: (seconds: number) => void;
7
- /** Fires on pointer-down / pointer-up of a ruler scrub so the owner can
8
- * suppress live playback while the gesture owns the playhead (parity with the
9
- * draggable playhead knob). */
10
- onScrubStart?: () => void;
11
- onScrubEnd?: () => void;
12
- /** Current playhead time — announced as the slider value. */
13
- currentTimeSeconds?: number;
14
- className?: string;
15
- }
16
- /**
17
- * The clickable time ruler. Tick density self-adjusts with zoom (labels never
18
- * crowd below ~60px apart); pointer down + drag scrubs continuously.
19
- */
20
- export declare function TimeRuler({ durationSeconds, zoomScale, onScrub, onScrubStart, onScrubEnd, currentTimeSeconds, className, }: TimeRulerProps): import("react").JSX.Element;
21
- //# sourceMappingURL=TimeRuler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimeRuler.d.ts","sourceRoot":"","sources":["../../../src/react/timeline/TimeRuler.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;mCAE+B;IAC/B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,eAAe,EACf,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,kBAAsB,EACtB,SAAS,GACV,EAAE,cAAc,+BAkDhB"}
@@ -1,31 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { pxToSeconds, rulerTicks, secondsToPx } from 'cwip/timeline';
3
- import { useRef } from 'react';
4
- import { formatTimecode } from '../../core/media';
5
- import { usePointerDrag } from '../hooks/usePointerDrag';
6
- import { cn } from '../lib/cn';
7
- /**
8
- * The clickable time ruler. Tick density self-adjusts with zoom (labels never
9
- * crowd below ~60px apart); pointer down + drag scrubs continuously.
10
- */
11
- export function TimeRuler({ durationSeconds, zoomScale, onScrub, onScrubStart, onScrubEnd, currentTimeSeconds = 0, className, }) {
12
- const ref = useRef(null);
13
- const seekAtClientX = (clientX) => {
14
- const rect = ref.current?.getBoundingClientRect();
15
- if (!rect)
16
- return;
17
- const seconds = pxToSeconds(clientX - rect.left, zoomScale);
18
- onScrub(Math.min(durationSeconds, Math.max(0, seconds)));
19
- };
20
- const drag = usePointerDrag({
21
- onStart: (e) => {
22
- onScrubStart?.();
23
- seekAtClientX(e.clientX);
24
- },
25
- onMove: ({ event }) => seekAtClientX(event.clientX),
26
- onEnd: () => onScrubEnd?.(),
27
- });
28
- const ticks = rulerTicks(durationSeconds, zoomScale);
29
- return (_jsx("div", { ref: ref, ...drag.handleProps, className: cn('relative h-7 min-h-7 cursor-ew-resize select-none border-b border-border bg-muted/40', className), style: { ...drag.handleProps.style, width: secondsToPx(durationSeconds, zoomScale) }, role: 'slider', "aria-label": 'Timeline position', "aria-valuemin": 0, "aria-valuemax": Math.round(durationSeconds), "aria-valuenow": Math.min(Math.round(durationSeconds), Math.round(currentTimeSeconds)), tabIndex: 0, children: ticks.map((t) => (_jsx("div", { className: 'absolute top-0 h-full border-l border-border/70', style: { left: secondsToPx(t, zoomScale) }, children: _jsx("span", { className: 'pl-1 text-caption leading-7 text-muted-foreground', children: formatTimecode(t) }) }, t))) }));
30
- }
31
- //# sourceMappingURL=TimeRuler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimeRuler.js","sourceRoot":"","sources":["../../../src/react/timeline/TimeRuler.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAkB/B;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,eAAe,EACf,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,kBAAkB,GAAG,CAAC,EACtB,SAAS,GACM;IACf,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEzC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,cAAc,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,YAAY,EAAE,EAAE,CAAC;YACjB,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;QACnD,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE;KAC5B,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAErD,OAAO,CACL,cACE,GAAG,EAAE,GAAG,KACJ,IAAI,CAAC,WAAW,EACpB,SAAS,EAAE,EAAE,CACX,sFAAsF,EACtF,SAAS,CACV,EACD,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,EACpF,IAAI,EAAC,QAAQ,gBACF,mBAAmB,mBACf,CAAC,mBACD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,mBAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,EACpF,QAAQ,EAAE,CAAC,YAEV,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,cAEE,SAAS,EAAC,iDAAiD,EAC3D,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,YAE1C,eAAM,SAAS,EAAC,mDAAmD,YAChE,cAAc,CAAC,CAAC,CAAC,GACb,IANF,CAAC,CAOF,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -1,29 +0,0 @@
1
- import { type TimelineTrack } from 'cwip/timeline';
2
- import { type ReactNode } from 'react';
3
- export interface TimelineSurfaceProps {
4
- tracks: TimelineTrack[];
5
- zoomScale: number;
6
- currentTime: number;
7
- onScrub: (seconds: number) => void;
8
- onScrubStart?: () => void;
9
- onScrubEnd?: () => void;
10
- /** Zoom changes arrive pre-clamped; scroll is re-anchored on the playhead. */
11
- onZoomChange?: (zoomScale: number) => void;
12
- /** Renders each track's lane (TrackLane + ClipViews) — the owner wires ops. */
13
- renderTrack: (track: TimelineTrack, durationSeconds: number) => ReactNode;
14
- /** Extra tail beyond the last clip so there's room to drop/extend (default 10s). */
15
- tailSeconds?: number;
16
- /** Auto-scroll so the playhead stays in view as `currentTime` advances (e.g. during
17
- * playback) — once it nears the viewport edge, the view pages forward to keep it
18
- * visible, rather than scrolling every frame. */
19
- followPlayhead?: boolean;
20
- className?: string;
21
- }
22
- /**
23
- * The composed timeline scroller: ruler + track lanes + playhead in one
24
- * horizontally-scrolling keyboard-inset-safe surface (ScrollArea — no raw
25
- * overflow), with zoom controls that keep the playhead visually anchored.
26
- * Fully controlled; owns NO timeline state.
27
- */
28
- export declare function TimelineSurface({ tracks, zoomScale, currentTime, onScrub, onScrubStart, onScrubEnd, onZoomChange, renderTrack, tailSeconds, followPlayhead, className, }: TimelineSurfaceProps): import("react").JSX.Element;
29
- //# sourceMappingURL=TimelineSurface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimelineSurface.d.ts","sourceRoot":"","sources":["../../../src/react/timeline/TimelineSurface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAInB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,OAAO,CAAC;AAS1D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+EAA+E;IAC/E,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,KAAK,SAAS,CAAC;IAC1E,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;qDAEiD;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAgB,EAChB,cAAsB,EACtB,SAAS,GACV,EAAE,oBAAoB,+BAoGtB"}
@@ -1,56 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { clampZoom, secondsToPx, totalDuration, ZOOM_RANGE, zoomAnchoredScrollLeft, } from 'cwip/timeline';
3
- import { Minus, Plus } from 'lucide-react';
4
- import { useEffect, useRef } from 'react';
5
- import { IconButton } from '../components/IconButton';
6
- import { ScrollArea } from '../components/ScrollArea';
7
- import { Slider } from '../components/Slider';
8
- import { Tooltip } from '../components/Tooltip';
9
- import { cn } from '../lib/cn';
10
- import { Playhead } from './Playhead';
11
- import { TimeRuler } from './TimeRuler';
12
- /**
13
- * The composed timeline scroller: ruler + track lanes + playhead in one
14
- * horizontally-scrolling keyboard-inset-safe surface (ScrollArea — no raw
15
- * overflow), with zoom controls that keep the playhead visually anchored.
16
- * Fully controlled; owns NO timeline state.
17
- */
18
- export function TimelineSurface({ tracks, zoomScale, currentTime, onScrub, onScrubStart, onScrubEnd, onZoomChange, renderTrack, tailSeconds = 10, followPlayhead = false, className, }) {
19
- const scrollRef = useRef(null);
20
- const durationSeconds = totalDuration(tracks) + tailSeconds;
21
- useEffect(() => {
22
- if (!followPlayhead)
23
- return;
24
- const el = scrollRef.current;
25
- if (!el)
26
- return;
27
- const playheadPx = secondsToPx(currentTime, zoomScale);
28
- const viewportX = playheadPx - el.scrollLeft;
29
- // Only page the view forward/back once the playhead nears an edge — scrolling every
30
- // frame during playback would fight the user's ability to glance elsewhere.
31
- const margin = el.clientWidth * 0.1;
32
- if (viewportX < margin || viewportX > el.clientWidth - margin) {
33
- el.scrollLeft = Math.max(0, playheadPx - el.clientWidth * 0.2);
34
- }
35
- }, [followPlayhead, currentTime, zoomScale]);
36
- const changeZoom = (next) => {
37
- if (!onZoomChange)
38
- return;
39
- const clamped = clampZoom(next);
40
- const el = scrollRef.current;
41
- if (el) {
42
- const anchorViewportPx = secondsToPx(currentTime, zoomScale) - el.scrollLeft;
43
- // after the re-render at the new zoom, restore the playhead's viewport x
44
- requestAnimationFrame(() => {
45
- el.scrollLeft = zoomAnchoredScrollLeft(currentTime, anchorViewportPx, clamped);
46
- });
47
- }
48
- onZoomChange(clamped);
49
- };
50
- return (_jsxs("div", { className: cn('flex flex-col', className), children: [onZoomChange && (_jsxs("div", { className: 'flex items-center justify-end gap-2 border-b border-border px-2 py-1', children: [_jsx(Tooltip, { content: 'Zoom out', children: _jsx(IconButton, { label: 'Zoom out', onClick: () => changeZoom(zoomScale / 1.4), disabled: zoomScale <= ZOOM_RANGE.min, children: _jsx(Minus, { "aria-hidden": true, className: 'size-4' }) }) }), _jsx(Slider, { value: zoomScale, min: ZOOM_RANGE.min, max: ZOOM_RANGE.max,
51
- // A coarse step of 1 would swallow the whole low end (0.05–1) in a single
52
- // increment, making the zoomed-out-enough-to-fit-a-long-clip range
53
- // unreachable by dragging — 0.5 keeps that end usable too.
54
- step: 0.5, "aria-label": 'Timeline zoom', className: 'w-24', onChange: changeZoom }), _jsxs("span", { className: 'w-14 text-center text-caption tabular-nums text-muted-foreground', children: [Math.round(zoomScale), " px/s"] }), _jsx(Tooltip, { content: 'Zoom in', children: _jsx(IconButton, { label: 'Zoom in', onClick: () => changeZoom(zoomScale * 1.4), disabled: zoomScale >= ZOOM_RANGE.max, children: _jsx(Plus, { "aria-hidden": true, className: 'size-4' }) }) })] })), _jsx(ScrollArea, { axis: 'x', space: 'none', scrollRef: scrollRef, className: 'grow', children: _jsxs("div", { className: 'relative w-max min-w-full', children: [_jsx("div", { className: 'ml-28', children: _jsx(TimeRuler, { durationSeconds: durationSeconds, zoomScale: zoomScale, currentTimeSeconds: currentTime, onScrub: onScrub, onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }) }), tracks.map((track) => renderTrack(track, durationSeconds)), _jsx("div", { className: 'pointer-events-none absolute inset-y-0 left-28 right-0', children: _jsx("div", { className: 'relative h-full', children: _jsx(Playhead, { timeSeconds: currentTime, zoomScale: zoomScale, onScrub: onScrub, onScrubStart: onScrubStart, onScrubEnd: onScrubEnd }) }) })] }) })] }));
55
- }
56
- //# sourceMappingURL=TimelineSurface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimelineSurface.js","sourceRoot":"","sources":["../../../src/react/timeline/TimelineSurface.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,SAAS,EACT,WAAW,EAEX,aAAa,EACb,UAAU,EACV,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAkB,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAsBxC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,GAAG,EAAE,EAChB,cAAc,GAAG,KAAK,EACtB,SAAS,GACY;IACrB,MAAM,SAAS,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;QAC7C,oFAAoF;QACpF,4EAA4E;QAC5E,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC;QACpC,IAAI,SAAS,GAAG,MAAM,IAAI,SAAS,GAAG,EAAE,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC;YAC9D,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7C,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;QAClC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;YAC7E,yEAAyE;YACzE,qBAAqB,CAAC,GAAG,EAAE;gBACzB,EAAE,CAAC,UAAU,GAAG,sBAAsB,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;QACL,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,aAC3C,YAAY,IAAI,CACf,eAAK,SAAS,EAAC,sEAAsE,aACnF,KAAC,OAAO,IAAC,OAAO,EAAC,UAAU,YACzB,KAAC,UAAU,IACT,KAAK,EAAC,UAAU,EAChB,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,EAC1C,QAAQ,EAAE,SAAS,IAAI,UAAU,CAAC,GAAG,YAErC,KAAC,KAAK,yBAAa,SAAS,EAAC,QAAQ,GAAG,GAC7B,GACL,EACV,KAAC,MAAM,IACL,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,UAAU,CAAC,GAAG,EACnB,GAAG,EAAE,UAAU,CAAC,GAAG;wBACnB,0EAA0E;wBAC1E,mEAAmE;wBACnE,2DAA2D;wBAC3D,IAAI,EAAE,GAAG,gBACE,eAAe,EAC1B,SAAS,EAAC,MAAM,EAChB,QAAQ,EAAE,UAAU,GACpB,EACF,gBAAM,SAAS,EAAC,kEAAkE,aAC/E,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,aACjB,EACP,KAAC,OAAO,IAAC,OAAO,EAAC,SAAS,YACxB,KAAC,UAAU,IACT,KAAK,EAAC,SAAS,EACf,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,EAC1C,QAAQ,EAAE,SAAS,IAAI,UAAU,CAAC,GAAG,YAErC,KAAC,IAAI,yBAAa,SAAS,EAAC,QAAQ,GAAG,GAC5B,GACL,IACN,CACP,EACD,KAAC,UAAU,IAAC,IAAI,EAAC,GAAG,EAAC,KAAK,EAAC,MAAM,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,YACtE,eAAK,SAAS,EAAC,2BAA2B,aAExC,cAAK,SAAS,EAAC,OAAO,YACpB,KAAC,SAAS,IACR,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,WAAW,EAC/B,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,GACE,EACL,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,EAC3D,cAAK,SAAS,EAAC,wDAAwD,YACrE,cAAK,SAAS,EAAC,iBAAiB,YAC9B,KAAC,QAAQ,IACP,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACtB,GACE,GACF,IACF,GACK,IACT,CACP,CAAC;AACJ,CAAC"}
@@ -1,31 +0,0 @@
1
- import { type TimelineTrack } from 'cwip/timeline';
2
- import type { ReactNode } from 'react';
3
- export declare const TRACK_LANE_HEIGHT_PX = 108;
4
- export interface TrackLaneProps {
5
- track: TimelineTrack;
6
- zoomScale: number;
7
- /** Lane runway width (seconds) — the surface passes one shared duration. */
8
- durationSeconds: number;
9
- /** Rendered `ClipView`s (the owner maps clips so it controls the wiring). */
10
- children: ReactNode;
11
- /** Lane height in px (default {@link TRACK_LANE_HEIGHT_PX}). Owners can shrink
12
- * a rarely-used lane (e.g. an empty audio track) and grow it once it holds a
13
- * clip, so unused lanes don't waste vertical space. */
14
- laneHeightPx?: number;
15
- /** Click on empty runway — typically seek + deselect. */
16
- onRunwayClick?: (seconds: number) => void;
17
- /** A `dataTransfer` drop on the runway (asset from a library/palette). */
18
- onDropData?: (payload: {
19
- atSeconds: number;
20
- dataTransfer: DataTransfer;
21
- }) => void;
22
- className?: string;
23
- }
24
- /**
25
- * One track row: a sticky header (name + kind icon) and the clip runway. The
26
- * runway is the `relative` positioning context `ClipView`s place themselves
27
- * in, and the drop target for library assets (drop position is reported in
28
- * SECONDS, scroll offset already accounted for via the runway's own rect).
29
- */
30
- export declare function TrackLane({ track, zoomScale, durationSeconds, children, laneHeightPx, onRunwayClick, onDropData, className, }: TrackLaneProps): import("react").JSX.Element;
31
- //# sourceMappingURL=TrackLane.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TrackLane.d.ts","sourceRoot":"","sources":["../../../src/react/timeline/TrackLane.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlD,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,EAAE,SAAS,CAAC;IACpB;;2DAEuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0EAA0E;IAC1E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,YAAY,CAAA;KAAE,KAAK,IAAI,CAAC;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,EACR,YAAmC,EACnC,aAAa,EACb,UAAU,EACV,SAAS,GACV,EAAE,cAAc,+BA6ChB"}