@weasel-js/labkit 1.5.2 → 1.6.1

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 (217) hide show
  1. package/README.md +3 -7
  2. package/dist/_dts/{CanvasStackContext-CMMo180l.d.ts → CanvasStackContext-Wo6OwIVM.d.ts} +1 -1
  3. package/dist/_dts/FloatingPanel-7j0IcXwz.d.ts +30 -0
  4. package/dist/_dts/LayerList.d-BoELAMsM.d.ts +83 -0
  5. package/dist/_dts/{PrefsForm.d-DPy9I8It.d.ts → PrefsRow.d-DFpPIeIC.d.ts} +16 -1
  6. package/dist/_dts/PropertyField.d-D0ndfIIt.d.ts +404 -0
  7. package/dist/_dts/{Select.d-ZTiwzYyT.d.ts → Select.d-Cr8-zoup.d.ts} +105 -15
  8. package/dist/_dts/{usePanZoom-SSTZe410.d.ts → Stage-DWBBi8IU.d.ts} +80 -35
  9. package/dist/_dts/{index-DlKolEIZ.d.ts → index-CKyX0ME_.d.ts} +12 -13
  10. package/dist/_dts/{frac-B4hFJMiN.d.ts → types-B7yBTTF9.d.ts} +709 -651
  11. package/dist/_dts/{types-Db-3NNk1.d.ts → types-DTuViBvc.d.ts} +21 -2
  12. package/dist/_dts/{useTrialState-pnAE-UBD.d.ts → useTrialState-CMaV6UD4.d.ts} +2 -3
  13. package/dist/canvas/index.d.ts +41 -8
  14. package/dist/canvas/index.js +5 -3
  15. package/dist/chrome/index.d.ts +6 -6
  16. package/dist/chrome/index.js +9 -7
  17. package/dist/chunk-24W5VEJW.js +18 -0
  18. package/dist/chunk-24W5VEJW.js.map +1 -0
  19. package/dist/chunk-2RVCB2PT.js +3 -0
  20. package/dist/chunk-2RVCB2PT.js.map +1 -0
  21. package/dist/chunk-3RY6WL5T.js +38 -0
  22. package/dist/chunk-3RY6WL5T.js.map +1 -0
  23. package/dist/{chunk-CKUKF72R.js → chunk-4TT3PNPR.js} +68 -55
  24. package/dist/chunk-4TT3PNPR.js.map +1 -0
  25. package/dist/{chunk-KJCUERQF.js → chunk-6FLXL3I7.js} +9 -164
  26. package/dist/chunk-6FLXL3I7.js.map +1 -0
  27. package/dist/chunk-ASOK76ZH.js +431 -0
  28. package/dist/chunk-ASOK76ZH.js.map +1 -0
  29. package/dist/chunk-AWQG7FCC.js +19 -0
  30. package/dist/chunk-AWQG7FCC.js.map +1 -0
  31. package/dist/chunk-CGHF6RZV.js +300 -0
  32. package/dist/chunk-CGHF6RZV.js.map +1 -0
  33. package/dist/chunk-DWMSB4CA.js +228 -0
  34. package/dist/chunk-DWMSB4CA.js.map +1 -0
  35. package/dist/chunk-GHGO52SO.js +92 -0
  36. package/dist/chunk-GHGO52SO.js.map +1 -0
  37. package/dist/{chunk-LRI3MBGR.js → chunk-HKV7LRHY.js} +4 -4
  38. package/dist/{chunk-LRI3MBGR.js.map → chunk-HKV7LRHY.js.map} +1 -1
  39. package/dist/{chunk-EMXAIRUJ.js → chunk-IRTGUQ5O.js} +5 -4
  40. package/dist/chunk-IRTGUQ5O.js.map +1 -0
  41. package/dist/{chunk-H6ZAOWNE.js → chunk-JVBYV6TL.js} +3 -3
  42. package/dist/{chunk-H6ZAOWNE.js.map → chunk-JVBYV6TL.js.map} +1 -1
  43. package/dist/chunk-KHK5FGER.js +145 -0
  44. package/dist/chunk-KHK5FGER.js.map +1 -0
  45. package/dist/chunk-NEXR37YJ.js +144 -0
  46. package/dist/chunk-NEXR37YJ.js.map +1 -0
  47. package/dist/{chunk-A2ACAGW6.js → chunk-O6FFFOHS.js} +32 -7
  48. package/dist/chunk-O6FFFOHS.js.map +1 -0
  49. package/dist/chunk-QGMOA2YE.js +731 -0
  50. package/dist/chunk-QGMOA2YE.js.map +1 -0
  51. package/dist/{chunk-ERFMC6WU.js → chunk-S4NCI32V.js} +19 -10
  52. package/dist/chunk-S4NCI32V.js.map +1 -0
  53. package/dist/{chunk-753Y6HE6.js → chunk-SLAQPUI4.js} +4 -4
  54. package/dist/chunk-SLAQPUI4.js.map +1 -0
  55. package/dist/{chunk-REOBGYMC.js → chunk-TJ77A4A3.js} +3 -5
  56. package/dist/chunk-TJ77A4A3.js.map +1 -0
  57. package/dist/chunk-TYN6MLXX.js +13864 -0
  58. package/dist/chunk-TYN6MLXX.js.map +1 -0
  59. package/dist/{chunk-RS3HRQWU.js → chunk-WPLAANH4.js} +4 -3
  60. package/dist/chunk-WPLAANH4.js.map +1 -0
  61. package/dist/config/index.d.ts +51 -7
  62. package/dist/config/index.js +4 -5
  63. package/dist/controls/index.d.ts +92 -5
  64. package/dist/controls/index.js +5 -4
  65. package/dist/dragdrop/index.d.ts +9 -6
  66. package/dist/dragdrop/index.js +3 -2
  67. package/dist/index.d.ts +108 -154
  68. package/dist/index.js +456 -600
  69. package/dist/index.js.map +1 -1
  70. package/dist/layers/index.d.ts +5 -35
  71. package/dist/layers/index.js +3 -3
  72. package/dist/loupe/index.d.ts +21 -17
  73. package/dist/loupe/index.js +5 -3
  74. package/dist/overview/index.d.ts +56 -0
  75. package/dist/overview/index.js +288 -0
  76. package/dist/overview/index.js.map +1 -0
  77. package/dist/passthrough/weasel-ui.d.ts +434 -231
  78. package/dist/passthrough/weasel-ui.js +2 -1
  79. package/dist/primitives/index.d.ts +19 -54
  80. package/dist/primitives/index.js +6 -4
  81. package/dist/state/index.d.ts +8 -7
  82. package/dist/state/index.js +4 -5
  83. package/dist/state/index.js.map +1 -1
  84. package/dist/styles.css +360 -174
  85. package/dist/undo/index.d.ts +5 -4
  86. package/package.json +13 -13
  87. package/src/annotations/frac.test.ts +7 -0
  88. package/src/annotations/index.ts +1 -0
  89. package/src/annotations/paint.test.ts +21 -0
  90. package/src/annotations/paint.ts +12 -0
  91. package/src/annotations/store.test.ts +57 -0
  92. package/src/annotations/store.ts +25 -6
  93. package/src/annotations/toolMap.test.ts +37 -2
  94. package/src/annotations/toolMap.ts +13 -0
  95. package/src/annotations/types.ts +30 -2
  96. package/src/canvas/AGENTS.md +8 -10
  97. package/src/canvas/CameraInput.test.tsx +136 -0
  98. package/src/canvas/CameraInput.tsx +311 -0
  99. package/src/canvas/CanvasStack.tsx +42 -58
  100. package/src/canvas/LinkedCursor.less +16 -0
  101. package/src/canvas/LinkedCursor.tsx +54 -0
  102. package/src/canvas/Stage.test.tsx +18 -0
  103. package/src/canvas/Stage.tsx +42 -37
  104. package/src/canvas/cameraView.test.ts +60 -0
  105. package/src/canvas/cameraView.ts +61 -0
  106. package/src/canvas/index.ts +11 -2
  107. package/src/chrome/regions/SidebarRegion.less +197 -0
  108. package/src/chrome/regions/SidebarRegion.test.tsx +27 -0
  109. package/src/chrome/regions/SidebarRegion.tsx +7 -2
  110. package/src/chrome/types.ts +5 -2
  111. package/src/config/autoConfig.ts +2 -2
  112. package/src/config/builder.ts +21 -2
  113. package/src/config/entry.test.ts +10 -0
  114. package/src/config/fromConfigField.ts +1 -0
  115. package/src/config/index.ts +5 -0
  116. package/src/config/resolve.ts +11 -1
  117. package/src/config/rules.ts +2 -0
  118. package/src/config/sectionTree.test.ts +152 -0
  119. package/src/config/sectionTree.ts +134 -0
  120. package/src/config/types.ts +21 -0
  121. package/src/controls/ControlPanel.less +4 -0
  122. package/src/controls/ControlPanel.stories.tsx +55 -2
  123. package/src/controls/ControlPanel.test.tsx +40 -3
  124. package/src/controls/ControlPanel.tsx +134 -336
  125. package/src/controls/inDialog.test.tsx +100 -0
  126. package/src/controls/inDialog.tsx +38 -0
  127. package/src/controls/index.ts +1 -0
  128. package/src/index.test.ts +1 -1
  129. package/src/index.ts +18 -29
  130. package/src/instrument/SineWave.smoke.test.tsx +2 -0
  131. package/src/instrument/types.ts +15 -3
  132. package/src/lab/Lab.nebula.test.tsx +40 -0
  133. package/src/lab/Lab.test.tsx +3 -1
  134. package/src/lab/Lab.tsx +42 -19
  135. package/src/lab/LabBoundary.test.tsx +66 -0
  136. package/src/lab/LabBoundary.tsx +56 -0
  137. package/src/lab/LabHeader.tsx +4 -23
  138. package/src/lab/LabRoot.tsx +2 -3
  139. package/src/lab/LabShell.less +0 -1
  140. package/src/lab/LabShell.stories.tsx +15 -0
  141. package/src/lab/LabShell.test.tsx +18 -0
  142. package/src/lab/LabShell.tsx +14 -1
  143. package/src/lab/LabSwitcher.less +1 -1
  144. package/src/lab/LabSwitcher.test.tsx +41 -0
  145. package/src/lab/LabSwitcher.tsx +30 -8
  146. package/src/lab/index.ts +1 -0
  147. package/src/layers/AGENTS.md +18 -74
  148. package/src/layers/index.ts +4 -2
  149. package/src/loupe/AGENTS.md +7 -6
  150. package/src/loupe/LoupeGestures.tsx +14 -9
  151. package/src/loupe/TrialLoupe.tsx +5 -5
  152. package/src/loupe/index.ts +1 -0
  153. package/src/loupe/loupeActions.ts +6 -2
  154. package/src/overview/AGENTS.md +38 -0
  155. package/src/overview/OverviewMarks.test.tsx +100 -0
  156. package/src/overview/OverviewMarks.tsx +93 -0
  157. package/src/overview/TrialOverview.less +53 -0
  158. package/src/overview/TrialOverview.stories.tsx +50 -0
  159. package/src/overview/TrialOverview.test.tsx +116 -0
  160. package/src/overview/TrialOverview.tsx +374 -0
  161. package/src/overview/index.ts +2 -0
  162. package/src/passthrough/weasel-ui.ts +32 -10
  163. package/src/primitives/index.ts +0 -2
  164. package/src/specimen/Specimen.tsx +59 -56
  165. package/src/state/labRecords.test.ts +4 -1
  166. package/src/state/store.test.ts +4 -4
  167. package/src/state/types.ts +2 -1
  168. package/src/state/useTrialState.test.tsx +1 -1
  169. package/src/styles.less +6 -2
  170. package/src/theme/Interstellar.stories.tsx +8 -13
  171. package/src/theme/base.less +3 -20
  172. package/src/theme/interstellar.test.ts +6 -3
  173. package/src/theme/interstellar.theme.json +0 -56
  174. package/src/theme/interstellar.ts +2 -2
  175. package/src/tools/labTool.ts +6 -2
  176. package/src/trial/Trial.annotations.test.tsx +16 -0
  177. package/src/trial/Trial.canvas.test.tsx +1 -1
  178. package/src/trial/Trial.loupe.test.tsx +73 -1
  179. package/src/trial/Trial.stories.tsx +2 -0
  180. package/src/trial/Trial.tsx +47 -9
  181. package/src/trial/trialOps.test.ts +4 -4
  182. package/dist/_dts/index-8LiKe3A-.d.ts +0 -410
  183. package/dist/chunk-2AYGEN57.js +0 -32
  184. package/dist/chunk-2AYGEN57.js.map +0 -1
  185. package/dist/chunk-6BUQ77ZV.js +0 -18
  186. package/dist/chunk-6BUQ77ZV.js.map +0 -1
  187. package/dist/chunk-753Y6HE6.js.map +0 -1
  188. package/dist/chunk-A2ACAGW6.js.map +0 -1
  189. package/dist/chunk-CKUKF72R.js.map +0 -1
  190. package/dist/chunk-D35PFTS7.js +0 -170
  191. package/dist/chunk-D35PFTS7.js.map +0 -1
  192. package/dist/chunk-EMXAIRUJ.js.map +0 -1
  193. package/dist/chunk-ERFMC6WU.js.map +0 -1
  194. package/dist/chunk-FKLT3ITC.js +0 -590
  195. package/dist/chunk-FKLT3ITC.js.map +0 -1
  196. package/dist/chunk-KJCUERQF.js.map +0 -1
  197. package/dist/chunk-LASCBWW7.js +0 -13456
  198. package/dist/chunk-LASCBWW7.js.map +0 -1
  199. package/dist/chunk-REOBGYMC.js.map +0 -1
  200. package/dist/chunk-RS3HRQWU.js.map +0 -1
  201. package/dist/chunk-TT5C5S6R.js +0 -368
  202. package/dist/chunk-TT5C5S6R.js.map +0 -1
  203. package/dist/ui/layers/index.d.ts +0 -66
  204. package/dist/ui/layers/index.js +0 -3
  205. package/dist/ui/layers/index.js.map +0 -1
  206. package/src/canvas/usePanZoom.test.ts +0 -244
  207. package/src/canvas/usePanZoom.ts +0 -147
  208. package/src/lab/useSystemMode.ts +0 -30
  209. package/src/layers/LayerList.less +0 -93
  210. package/src/layers/LayerList.stories.tsx +0 -66
  211. package/src/layers/LayerList.test.tsx +0 -232
  212. package/src/layers/LayerList.tsx +0 -268
  213. package/src/primitives/Sidebar.less +0 -112
  214. package/src/primitives/Sidebar.stories.tsx +0 -38
  215. package/src/primitives/Sidebar.test.tsx +0 -74
  216. package/src/primitives/Sidebar.tsx +0 -35
  217. package/src/ui/layers/index.ts +0 -5
package/dist/index.d.ts CHANGED
@@ -1,46 +1,47 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { I as IconProps } from './_dts/Select.d-ZTiwzYyT.js';
3
- export { B as Button, a as ButtonProps, b as ButtonSize, c as ButtonVariant, d as Icon, e as Input, f as InputProps, S as Select, g as SelectProps, T as ToggleBar, h as ToggleBarItem, i as ToggleBarProps, j as ToggleBarSize, k as ToggleBarVariant } from './_dts/Select.d-ZTiwzYyT.js';
4
- export { LayerStack, LayerStackItem, LayerStackProps } from './ui/layers/index.js';
5
1
  import * as react from 'react';
6
2
  import { ReactNode } from 'react';
7
- import { P as PropertyMetricProps, a as PropertyListPack } from './_dts/index-8LiKe3A-.js';
8
- export { C as CheckboxRow, b as CheckboxRowProps, c as ColorRow, d as ColorRowProps, e as ControlPanel, N as NumberRow, f as NumberRowProps, g as PropertyList, h as PropertyListProps, i as PropertyOption, j as PropertyPanel, k as PropertyPanelProps, l as PropertyRow, m as PropertyRowLayout, n as PropertyRowProps, o as PropertyRowVariant, p as PropertySpan, q as PropertySpanProps, S as SelectRow, r as SelectRowProps, s as SliderRow, t as SliderRowProps, T as TextRow, u as TextRowProps, v as ToggleRow, w as ToggleRowProps } from './_dts/index-8LiKe3A-.js';
9
- import { DrawCommand, SceneNode, View, Path, FillStyle, ScreenLength, StrokeAlign, StyledRun, TextStyle, TextVerticalAlign, Stroke, BuiltinToolId } from '@weasel-js/core';
10
- import { t as WorldRect, A as AnnotationData, v as AnnotationMeaning, w as MarkScene, x as CaptureSource, y as CaptureOptions, z as CaptureResult, B as AnnotationTarget, E as AnnotationsApi, F as AnnotationsCapability, G as TrialInfo, H as TrialTool, J as AnnotationKind, k as ViewTransform, K as Instrument, q as InstrumentList, o as LabMode, N as LabDensity, O as TrialContribution, c as StorageAdapter, T as TrialRecord } from './_dts/frac-B4hFJMiN.js';
11
- export { Q as Annotation, R as AnnotationInit, X as AnnotationPatch, Y as AnnotationQuery, Z as AnnotationStatus, _ as AnnotationStoreOptions, $ as AnnotationTargetInfo, a0 as Auto, a1 as CanvasCapability, a2 as CanvasLayer, a3 as CaptureDeps, a4 as ContributionBase, C as CreateLabStoreOptions, D as DEFAULT_FRAME, n as DragDropCapability, m as DragFeedback, a5 as FracPoint, a6 as FracRect, a7 as HitResult, a8 as IconComponent, a9 as LOUPE_DEFAULTS, L as LabDocument, d as LabStoreState, aa as LayerCapability, ab as LayerDescriptor, ac as LoupeCapability, ad as LoupeDeclaration, ae as LoupeRenderArgs, P as PaletteItem, l as Point, af as RegionContribution, ag as RenderContext, ah as ResolvedLoupe, e as SavedSnapshot, ai as SerializedAnnotations, S as SerializedTrial, aj as SidebarSection, ak as SidebarSlotContext, al as StageCapability, am as StatusReadout, f as StorageChange, an as SystemEvent, ao as ToolCapability, ap as ToolItem, aq as ToolSlotContext, ar as ToolbarItem, as as TrialChromeContext, at as TrialRegion, g as TrialStateHandle, au as UndoCapability, U as UndoStack, h as UndockedPanel, i as UndockedPanels, av as ViewportControl, V as ViewportSize, W as WorldFrame, a as WorldSpec, aw as annotationsFromJSON, b as applyCamera, ax as auto, ay as createAnnotationScene, az as createAnnotationStore, j as dockPanel, aA as fracContains, aB as fracEncloses, aC as fracToWorld, aD as isAuto, p as panelKey, r as resolveFrame, aE as resolveLoupe, aF as roundFrac, u as undockPanel, aG as worldToFrac } from './_dts/frac-B4hFJMiN.js';
12
- export { C as CanvasStack, a as CanvasStackProps, P as PanZoomHandlers, S as Stage, b as StageProps, U as UsePanZoomOptions, Z as ZoomAtOptions, c as centerOn, f as fitStage, s as screenToWorld, u as usePanZoom, w as worldToScreen, z as zoomAt } from './_dts/usePanZoom-SSTZe410.js';
13
- export { C as CanvasLayerDescriptor, a as CanvasStackContext, b as CanvasStackContextValue, c as CanvasStackSurface } from './_dts/CanvasStackContext-CMMo180l.js';
14
- import { L as LabContribution } from './_dts/index-DlKolEIZ.js';
15
- export { A as AddTrialOptions, a as LabAsideRegion, b as LabChromeContext, c as LabContext, d as LabContextValue, e as LabFooterRegion, f as LabHeaderRegion, g as LabRegion, h as LabRegionProps, i as LabSidebarRegion, P as PaletteRegion, j as PaletteRegionProps, S as SidebarRegion, k as SidebarRegionProps, l as StatusRegion, m as StatusRegionProps, T as TitleBarPlacement, n as TitleBarRegion, o as TitleBarRegionProps, p as ToolbarRegion, q as ToolbarRegionProps, V as ViewportRegion, r as ViewportRegionProps, s as addTrial, t as builtinContributions, u as cloneTrial, v as closeTrial, w as contributionsIn, x as labContributions, y as mergeContributions, z as reorderTrials, B as resetTrial, C as suppressContributions, D as toolContributions, E as useLabChromeContext, F as useLabContext } from './_dts/index-DlKolEIZ.js';
16
- export { BaseNode, BooleanNode, ColorNode, CustomNode, EnumNode, GroupNode, NumberNode, StringNode, ValueNode, applyRules, autoPathsOf, builtinRules, f, fillConfigDefaults, fromConfigFields, hasConfigPath, isConfigBranch, isLeafVisible, resolveAutoConfig, resolveConfigSchema, schemaNodeAtPath, titleCase, useConfigSchema, useResolvedConfig, valueAtPath, withValueAtPath } from './config/index.js';
17
- import { b as ConfigSchema, a as ConfigField, c as ConfigRule, d as ControlRenderer } from './_dts/types-Db-3NNk1.js';
18
- export { A as Annotations, B as BranchAnnotations, e as BranchOptions, f as CheckboxField, g as ColorField, h as ConfigBranch, i as ConfigEntry, j as ConfigFieldBase, k as ConfigFieldType, l as ConfigNode, m as ConfigOf, n as ConfigOption, C as ConfigPath, o as ConfigRuleContext, p as ConfigShape, E as EntryValue, I as InferConfig, L as LeafPatch, N as NodeOptions, q as NodeValue, r as NumberField, R as ResolvedConfig, S as SectionSpec, s as SelectField, t as SelectOption, u as SliderField, T as TextField, V as ValueAtPath } from './_dts/types-Db-3NNk1.js';
3
+ import { I as IconProps } from './_dts/Select.d-Cr8-zoup.js';
4
+ export { B as Button, a as ButtonProps, b as ButtonSize, c as ButtonVariant, d as Icon, e as Input, f as InputProps, S as Select, g as SelectProps, T as ToggleBar, h as ToggleBarItem, i as ToggleBarProps, j as ToggleBarSize, k as ToggleBarVariant } from './_dts/Select.d-Cr8-zoup.js';
5
+ export { L as LayerList, a as LayerListItem, b as LayerListProps, c as LayerMove, m as moveLayers } from './_dts/LayerList.d-BoELAMsM.js';
6
+ import { a as PropertyListPack } from './_dts/PropertyField.d-D0ndfIIt.js';
7
+ import { PropertyMetricProps } from './passthrough/weasel-ui.js';
8
+ export { b as PropertyControl, c as PropertyControlProps, d as PropertyField, e as PropertyFieldProps, f as PropertyList, g as PropertyListProps, h as PropertyOption, i as PropertyPanel, j as PropertyPanelProps, k as PropertyRow, l as PropertyRowLayout, m as PropertyRowProps, n as PropertyRowVariant, o as PropertySpan, p as PropertySpanProps } from './_dts/PropertyField.d-D0ndfIIt.js';
9
+ import { StanceProps } from './passthrough/weasel-ui.js';
10
+ import { SceneNode, View, DrawCommand, Path, FillStyle, ScreenLength, StrokeAlign, StyledRun, TextStyle, TextVerticalAlign, Stroke, BuiltinToolId } from '@weasel-js/core';
11
+ import { A as AnnotationMeaning, w as AnnotationData, x as WorldRect, y as MarkStyle, z as MarkScene, B as CaptureSource, E as CaptureOptions, F as CaptureResult, G as PaintableMark, H as AnnotationTarget, J as AnnotationsApi, K as AnnotationsCapability, N as TrialInfo, O as TrialTool, Q as AnnotationKind, b as ViewTransform, R as Instrument, t as InstrumentList, s as LabMode, X as LabDensity, Y as TrialContribution, c as StorageAdapter, T as TrialRecord } from './_dts/types-B7yBTTF9.js';
12
+ export { Z as Annotation, _ as AnnotationInit, $ as AnnotationPatch, a0 as AnnotationQuery, a1 as AnnotationStatus, a2 as AnnotationStoreOptions, a3 as AnnotationTargetInfo, a4 as AnnotationToolId, a5 as Auto, a6 as CanvasCapability, a7 as CanvasLayer, a8 as CaptureDeps, a9 as ContributionBase, C as CreateLabStoreOptions, D as DEFAULT_FRAME, q as DragDropCapability, o as DragFeedback, aa as FracPoint, ab as FracRect, ac as HitResult, ad as IconComponent, ae as LOUPE_DEFAULTS, d as LabDocument, e as LabStoreState, L as LayerCapability, a as LayerDescriptor, af as LoupeCapability, ag as LoupeDeclaration, ah as LoupeMode, ai as LoupePoint, aj as LoupeRenderArgs, n as PaletteItem, P as Point, ak as RegionContribution, al as RenderContext, am as ResolvedLoupe, f as SavedSnapshot, an as SerializedAnnotations, S as SerializedTrial, ao as SidebarSection, ap as SidebarSlotContext, aq as StageCapability, ar as StatusReadout, g as StorageChange, as as SystemEvent, at as ToolCapability, au as ToolItem, av as ToolSlotContext, aw as ToolbarItem, ax as TrialChromeContext, ay as TrialRegion, h as TrialStateHandle, az as UndoCapability, U as UndoStack, i as UndockedPanel, j as UndockedPanels, aA as ViewportControl, V as ViewportSize, W as WorldFrame, l as WorldSpec, aB as annotationsFromJSON, m as applyCamera, aC as auto, aD as createAnnotationScene, aE as createAnnotationStore, k as dockPanel, aF as fracContains, aG as fracEncloses, aH as fracToWorld, aI as isAuto, aJ as markCommands, p as panelKey, r as resolveFrame, aK as resolveLoupe, aL as roundFrac, u as undockPanel, aM as worldToFrac } from './_dts/types-B7yBTTF9.js';
13
+ export { C as CameraContext, a as CameraContextValue, b as CameraInput, d as CameraScope, g as CanvasStack, h as CanvasStackProps, i as Stage, j as StageProps, Z as ZoomAtOptions, k as centerOn, l as fitStage, s as screenToWorld, w as worldToScreen, z as zoomAt } from './_dts/Stage-DWBBi8IU.js';
14
+ export { C as CanvasLayerDescriptor, a as CanvasStackContext, b as CanvasStackContextValue, c as CanvasStackSurface } from './_dts/CanvasStackContext-Wo6OwIVM.js';
15
+ import { L as LabContribution } from './_dts/index-CKyX0ME_.js';
16
+ export { A as AddTrialOptions, a as LabAsideRegion, b as LabChromeContext, c as LabContext, d as LabContextValue, e as LabFooterRegion, f as LabHeaderRegion, g as LabRegion, h as LabRegionProps, i as LabSidebarRegion, P as PaletteRegion, j as PaletteRegionProps, S as SidebarRegion, k as SidebarRegionProps, l as StatusRegion, m as StatusRegionProps, T as TitleBarPlacement, n as TitleBarRegion, o as TitleBarRegionProps, p as ToolbarRegion, q as ToolbarRegionProps, V as ViewportRegion, r as ViewportRegionProps, s as addTrial, t as builtinContributions, u as cloneTrial, v as closeTrial, w as contributionsIn, x as labContributions, y as mergeContributions, z as reorderTrials, B as resetTrial, C as suppressContributions, D as toolContributions, E as useLabChromeContext, F as useLabContext } from './_dts/index-CKyX0ME_.js';
17
+ export { BaseNode, BooleanNode, ColorNode, CustomNode, EnumNode, GroupNode, ListNode, NumberNode, SectionTree, StringNode, ValueNode, applyRules, autoPathsOf, builtinRules, f, fillConfigDefaults, fromConfigFields, hasConfigPath, isConfigBranch, isLeafVisible, resolveAutoConfig, resolveConfigSchema, schemaNodeAtPath, sectionTree, titleCase, useConfigSchema, useResolvedConfig, valueAtPath, withValueAtPath } from './config/index.js';
18
+ import { b as ConfigSchema, a as ConfigField, c as ConfigRule, d as ControlRenderer } from './_dts/types-DTuViBvc.js';
19
+ export { A as Annotations, B as BranchAnnotations, e as BranchOptions, f as CheckboxField, g as ColorField, h as ConfigBranch, i as ConfigEntry, j as ConfigFieldBase, k as ConfigFieldType, l as ConfigNode, m as ConfigOf, n as ConfigOption, C as ConfigPath, o as ConfigRuleContext, p as ConfigShape, D as DialogSpec, E as EntryValue, I as InDialogOptions, q as InferConfig, L as LeafPatch, N as NodeOptions, r as NodeValue, s as NumberField, R as ResolvedConfig, S as SectionOption, t as SectionSpec, u as SelectField, v as SelectOption, w as SliderField, T as TextField, V as ValueAtPath } from './_dts/types-DTuViBvc.js';
20
+ export { ControlPanel, inDialog, summarizeValue } from './controls/index.js';
19
21
  import { J as JobHandle } from './_dts/types-DJ79Tg5J.js';
20
22
  export { a as JobCapability, b as JobEvent, c as JobFailure, d as JobStatus } from './_dts/types-DJ79Tg5J.js';
21
23
  export { UseJobOptions, useJob } from './job/index.js';
22
- export { LayerList, LayerListProps, LayerTreeNode } from './layers/index.js';
24
+ import { Theme, ColorList } from '@weasel-js/theme';
23
25
  export { CanvasLoupe, CanvasLoupeProps, DomLoupe, DomLoupeProps, LOUPE_MAGNIFY_ID, LOUPE_PEEK_ID, LensCamera, LoupeBubble, LoupeBubbleProps, LoupeGestures, LoupeGesturesProps, LoupeInputApi, LoupeState, SourceRect, TrialLoupe, TrialLoupeProps, UseLoupeOptions, createLoupeActions, drawCanvasLens, lensCamera, lensSourceRect, sampleStack, useLoupe } from './loupe/index.js';
26
+ export { a as FloatingPanel, F as FloatingPanelProps } from './_dts/FloatingPanel-7j0IcXwz.js';
24
27
  import { SplitProps } from './primitives/index.js';
25
- export { FloatingPanel, FloatingPanelProps, FpsMeter, JobProgress, JobProgressProps, Legend, LegendEntry, LegendMark, LegendProps, ScaleIndicator, ScaleIndicatorProps, Sidebar, SidebarProps, Split, StatusBar, StatusBarProps, StatusBarSectionProps, Toolbar, ToolbarButtonProps, ToolbarGroupProps, ToolbarProps, ZoomControl, ZoomControlProps } from './primitives/index.js';
26
- export { C as CURRENT_DOCUMENT_VERSION, I as IndexedDbAdapterOptions, b as LabStoreContext, c as LabStoreProvider, O as OpenLabStoreOptions, d as OpenedLabStore, P as PersistedStateOptions, e as Persistence, f as PersistenceProps, R as RecordCache, g as RecordChange, T as TrialIdContext, h as TrialIdProvider, i as createIndexedDbAdapter, k as createMemoryAdapter, l as indexedDbAdapter, m as labDocumentKey, n as localStorageAdapter, o as noneAdapter, p as openLabStore, q as quarantineKey, s as sessionStorageAdapter, u as urlHashAdapter, r as useLabStore, t as usePersistedState, v as useTrialId, w as useTrialState } from './_dts/useTrialState-pnAE-UBD.js';
28
+ export { FpsMeter, JobProgress, JobProgressProps, Legend, LegendEntry, LegendMark, LegendProps, ScaleIndicator, ScaleIndicatorProps, Split, StatusBar, StatusBarProps, StatusBarSectionProps, Toolbar, ToolbarButtonProps, ToolbarGroupProps, ToolbarProps, ZoomControl, ZoomControlProps } from './primitives/index.js';
29
+ export { C as CURRENT_DOCUMENT_VERSION, I as IndexedDbAdapterOptions, b as LabStoreContext, c as LabStoreProvider, O as OpenLabStoreOptions, d as OpenedLabStore, P as PersistedStateOptions, e as Persistence, f as PersistenceProps, R as RecordCache, g as RecordChange, T as TrialIdContext, h as TrialIdProvider, i as createIndexedDbAdapter, k as createMemoryAdapter, l as indexedDbAdapter, m as labDocumentKey, n as localStorageAdapter, o as noneAdapter, p as openLabStore, q as quarantineKey, s as sessionStorageAdapter, u as urlHashAdapter, r as useLabStore, t as usePersistedState, v as useTrialId, w as useTrialState } from './_dts/useTrialState-CMaV6UD4.js';
27
30
  export { Box, Rect, SurfaceCanvasContext, SurfaceCanvases, SurfaceClear, SurfaceContext, SurfaceFrame, SurfaceHandle, SurfaceLayer, TilePainter, UseTiledSurfaceOptions, composeRects, rectsEqual, toDeviceRect, useSurface, useSurfaceCanvas, useSurfaceOptional, useSurfaceTile, useTileId, useTiledSurface } from './surface/index.js';
28
- import { Theme } from '@weasel-js/theme';
29
31
  export { EventBus, EventListener, clearUndo, createEventBus, emptyStack, pushSnapshot, redo, undo } from './undo/index.js';
30
32
  import 'react-aria-components';
31
- import './_dts/PrefsForm.d-DPy9I8It.js';
32
33
  import 'windease';
33
34
  import 'zustand/vanilla';
34
35
 
35
- declare const ResetIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
36
- declare const CloseIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
37
- declare const PlayIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
38
- declare const PauseIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
39
- declare const StopIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
40
- declare const StepBackIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
41
- declare const StepForwardIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
42
- declare const CollapseIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
43
- declare const ExpandIcon: (p: IconProps) => react_jsx_runtime.JSX.Element;
36
+ declare const ResetIcon: (p: IconProps) => react.JSX.Element;
37
+ declare const CloseIcon: (p: IconProps) => react.JSX.Element;
38
+ declare const PlayIcon: (p: IconProps) => react.JSX.Element;
39
+ declare const PauseIcon: (p: IconProps) => react.JSX.Element;
40
+ declare const StopIcon: (p: IconProps) => react.JSX.Element;
41
+ declare const StepBackIcon: (p: IconProps) => react.JSX.Element;
42
+ declare const StepForwardIcon: (p: IconProps) => react.JSX.Element;
43
+ declare const CollapseIcon: (p: IconProps) => react.JSX.Element;
44
+ declare const ExpandIcon: (p: IconProps) => react.JSX.Element;
44
45
 
45
46
  /** An annotation drawn over a curve plot: a shaded band across a range of x,
46
47
  * or a vertical line at one x. */
@@ -77,79 +78,16 @@ interface CurveFieldProps {
77
78
  * `CurveEditor`; consumers wanting the raw editor (2D paths,
78
79
  * custom anchors) should import that instead.
79
80
  */
80
- declare function CurveField({ values, min, max, step, width, height, defaults, onChange, marks, }: CurveFieldProps): react_jsx_runtime.JSX.Element;
81
-
82
- /** Props for `<Subpanel>`. */
83
- interface SubpanelProps extends PropertyMetricProps {
84
- title: ReactNode;
85
- children: ReactNode;
86
- className?: string;
87
- }
88
- /** A typographic divider inside a property list: a small title flanked by a
89
- * rule. Purely a heading — use `<PropertyGroup>` for a bordered section. */
90
- declare function Subpanel({ title, children, className, density, align }: SubpanelProps): react_jsx_runtime.JSX.Element;
91
- /** Props for `<EffectCard>`. */
92
- interface EffectCardProps {
93
- /** Card title rendered in the title bar (e.g. effect kind label or a select). */
94
- title: ReactNode;
95
- /** Optional badge/chip displayed before the remove button (e.g. primary value summary). */
96
- primary?: ReactNode;
97
- /** Optional accent color in any CSS color form. Sets --wzl-effect-card-accent on the card. */
98
- accent?: string;
99
- /** Optional ordinal badge that doubles as the drag handle (used by tail cards in SB). */
100
- index?: number;
101
- expanded?: boolean;
102
- onToggleExpanded?: () => void;
103
- onRemove?: () => void;
104
- /**
105
- * Drag-handle wiring. When provided, an inline handle (⋮⋮ icon or `index`)
106
- * activates HTML5 drag on press. Consumer owns the drag/drop coordination —
107
- * see EffectCardList for the batteries-included wrapper.
108
- */
109
- draggable?: boolean;
110
- onPressHandle?: () => void;
111
- onReleaseHandle?: () => void;
112
- onDragStart?: (e: React.DragEvent<HTMLDivElement>) => void;
113
- onDragEnd?: (e: React.DragEvent<HTMLDivElement>) => void;
114
- onDragOver?: (e: React.DragEvent<HTMLDivElement>) => void;
115
- onDragLeave?: (e: React.DragEvent<HTMLDivElement>) => void;
116
- onDrop?: (e: React.DragEvent<HTMLDivElement>) => void;
117
- dragging?: boolean;
118
- children?: ReactNode;
119
- className?: string;
120
- }
121
- /** An accented, collapsible card for one item in a list of like things —
122
- * effects, layers, tails. The accent color rebinds the theme accent token
123
- * within the card, so its controls pick it up too. */
124
- declare function EffectCard({ title, primary, accent, index, expanded, onToggleExpanded, onRemove, draggable, onPressHandle, onReleaseHandle, onDragStart, onDragEnd, onDragOver, onDragLeave, onDrop, dragging, children, className, }: EffectCardProps): react_jsx_runtime.JSX.Element;
125
- /** The minimum an item must carry to appear in an `<EffectCardList>`. */
126
- interface EffectCardListItem {
127
- id: string | number;
128
- }
129
- /** Props for `<EffectCardList>`. */
130
- interface EffectCardListProps<T extends EffectCardListItem> {
131
- items: ReadonlyArray<T>;
132
- renderItem: (item: T, helpers: {
133
- isExpanded: boolean;
134
- isDragging: boolean;
135
- toggleExpanded: () => void;
136
- cardProps: Pick<EffectCardProps, 'expanded' | 'dragging' | 'draggable' | 'onToggleExpanded' | 'onPressHandle' | 'onReleaseHandle' | 'onDragStart' | 'onDragEnd' | 'onDragOver' | 'onDragLeave' | 'onDrop'>;
137
- }) => ReactNode;
138
- onReorder: (sourceId: T['id'], targetId: T['id'], position: 'before' | 'after') => void;
139
- /** Optional rendered when the list is empty. */
140
- empty?: ReactNode;
141
- /** IDs to render expanded on first mount. Defaults to all collapsed. */
142
- defaultExpandedIds?: ReadonlyArray<T['id']>;
143
- }
144
- /** A drag-reorderable list of `<EffectCard>`s. Owns the expanded and dragging
145
- * state and hands it back to `renderItem`, so the caller only supplies each
146
- * card's contents. */
147
- declare function EffectCardList<T extends EffectCardListItem>({ items, renderItem, onReorder, empty, defaultExpandedIds, }: EffectCardListProps<T>): react_jsx_runtime.JSX.Element;
81
+ declare function CurveField({ values, min, max, step, width, height, defaults, onChange, marks, }: CurveFieldProps): react.JSX.Element;
148
82
 
149
83
  /** Props for `<PropertyGroup>`. */
150
- interface PropertyGroupProps extends PropertyMetricProps {
84
+ interface PropertyGroupProps extends PropertyMetricProps, StanceProps {
151
85
  /** Title rendered between two rules at the top of the group. */
152
86
  title: ReactNode;
87
+ /** Before the title: a drag handle, an ordinal. Clicks here do not fold the group. */
88
+ leading?: ReactNode;
89
+ /** After the title: a summary of the group's value, a remove button. Clicks here do not fold the group. */
90
+ actions?: ReactNode;
153
91
  /** Help text for the whole group, drawn under the title and above the
154
92
  * rows. `<PropertyRow description>` covers the per-row case. */
155
93
  description?: ReactNode;
@@ -184,9 +122,24 @@ interface PropertyGroupProps extends PropertyMetricProps {
184
122
  * inside a fill effect's controls).
185
123
  *
186
124
  * A collapsible group keeps its rows mounted and hides them, so a control's
187
- * local state survives being folded away.
125
+ * local state survives being folded away. `stance` and `tone` work as on
126
+ * `<PropertyPanel>`; a tone also draws the group's leading edge in it, which
127
+ * is how a list of like groups — effects, tails — tells its members apart.
128
+ * `leading` and `actions` put a handle and controls in the title row, and the
129
+ * groups of a `<PropertyList>` reorder with `useReorderDragList`.
188
130
  */
189
- declare function PropertyGroup({ title, description, hidden, collapsible, defaultCollapsed, collapsed, onCollapsedChange, children, className, span, pack, density, align, }: PropertyGroupProps): react_jsx_runtime.JSX.Element | null;
131
+ declare function PropertyGroup({ title, leading, actions, description, hidden, collapsible, defaultCollapsed, collapsed, onCollapsedChange, children, className, span, pack, density, align, stance, tone, }: PropertyGroupProps): react.JSX.Element | null;
132
+
133
+ /** Props for `<Subpanel>`. */
134
+ interface SubpanelProps extends PropertyMetricProps, StanceProps {
135
+ title: ReactNode;
136
+ children: ReactNode;
137
+ className?: string;
138
+ }
139
+ /** A typographic divider inside a property list: a small title flanked by a
140
+ * rule. Purely a heading — use `<PropertyGroup>` for a bordered section. A
141
+ * stance or tone colors the title and rule. */
142
+ declare function Subpanel({ title, children, className, density, align, stance, tone }: SubpanelProps): react.JSX.Element;
190
143
 
191
144
  /** A design token as `TokenPanel` edits it. */
192
145
  interface TokenEntry {
@@ -264,7 +217,7 @@ interface TokenPanelProps {
264
217
  * for a font weight, a curve beside a `cubic-bezier()`, a swatch beside a color,
265
218
  * and text for everything else.
266
219
  */
267
- declare function TokenPanel({ tokens, onChange, collapsed, onCollapsedChange, scales, onScaleChange, categorize, familySize, density, className, }: TokenPanelProps): react_jsx_runtime.JSX.Element;
220
+ declare function TokenPanel({ tokens, onChange, collapsed, onCollapsedChange, scales, onScaleChange, categorize, familySize, density, className, }: TokenPanelProps): react.JSX.Element;
268
221
 
269
222
  /** Props for {@link Jog}. */
270
223
  interface JogProps {
@@ -291,34 +244,7 @@ interface JogProps {
291
244
  *
292
245
  * Named for the jog of jog/shuttle — moving one frame at a time, as against running at speed.
293
246
  */
294
- declare function Jog(props: JogProps): react_jsx_runtime.JSX.Element;
295
-
296
- /** The subset of a mark's scene node this needs: where it is, and what it is. */
297
- interface PaintableMark {
298
- pose: WorldRect;
299
- data: AnnotationData;
300
- }
301
- /** How a mark is drawn, as opposed to where. Resolved by the overlay from the
302
- * instrument's vocabulary and the mark's own staleness. */
303
- interface MarkStyle {
304
- /** The status's color, or the default. */
305
- color?: string;
306
- /** A mark whose stored position no longer describes the picture. Drawn
307
- * dashed rather than hidden: it still describes *something*, and dropping
308
- * it would lose it. */
309
- stale?: boolean;
310
- }
311
- /**
312
- * What one mark draws, in its target's world.
313
- *
314
- * Pure: a node and the target's content box in, draw commands out. Geometry
315
- * that a bounding box cannot describe — a line's ends, a stroke's path — comes
316
- * from `data.points`, which is in fractions like the bounds.
317
- */
318
- declare function markCommands(m: PaintableMark, content: {
319
- w: number;
320
- h: number;
321
- }, style?: MarkStyle): DrawCommand[];
247
+ declare function Jog(props: JogProps): react.JSX.Element;
322
248
 
323
249
  /** What resolving a mark's appearance needs beyond the mark itself. */
324
250
  interface MarkDrawOptions {
@@ -395,7 +321,7 @@ declare function captureTarget(args: CaptureArgs, opts?: CaptureOptions): Promis
395
321
  * Reads the store through the hook the way `<MarkList>` does — the chrome
396
322
  * context carries no instrument state and is not the route to it.
397
323
  */
398
- declare function ExportMenu(): react_jsx_runtime.JSX.Element | null;
324
+ declare function ExportMenu(): react.JSX.Element | null;
399
325
 
400
326
  /** Props for `<MarkList>`. */
401
327
  interface MarkListProps {
@@ -410,7 +336,7 @@ interface MarkListProps {
410
336
  *
411
337
  * Reads the store through the hook, which re-renders on every mutation — so a
412
338
  * mark drawn on a pane appears here without anything wiring the two. */
413
- declare function MarkList({ meaning, config }: MarkListProps): react_jsx_runtime.JSX.Element;
339
+ declare function MarkList({ meaning, config }: MarkListProps): react.JSX.Element;
414
340
 
415
341
  /**
416
342
  * Whether a stored mark still describes the picture the current config
@@ -732,7 +658,7 @@ interface AnnotationTargetsProps {
732
658
  activeToolId: string | null;
733
659
  }
734
660
  /** One overlay per region the instrument said accepts marks. */
735
- declare function AnnotationTargets({ capability, state, config, trial, annotations, activeToolId, }: AnnotationTargetsProps): react_jsx_runtime.JSX.Element;
661
+ declare function AnnotationTargets({ capability, state, config, trial, annotations, activeToolId, }: AnnotationTargetsProps): react.JSX.Element;
736
662
 
737
663
  /** Which weasel tool an annotation tool drives, and what kind of mark that
738
664
  * makes. `select` makes none. */
@@ -815,7 +741,8 @@ declare function validateConfigSchema(fields: ConfigField[]): ValidationResult;
815
741
 
816
742
  /** One page in a project's set of labs. */
817
743
  interface LabPage {
818
- /** The page's own URL, and how the switcher knows which page is open. */
744
+ /** The page's own URL, and how the switcher knows which page is open. A
745
+ * hash route (`#/dev/tools`) names a page on the current document. */
819
746
  href: string;
820
747
  label: string;
821
748
  }
@@ -834,7 +761,11 @@ interface LabSwitcherProps {
834
761
  * Matched on the end of the path so a query string, a trailing slash or a
835
762
  * leftover `.html` cannot lose it: a project whose dev server maps `/stats`
836
763
  * to `stats.html` serves both spellings, and a bookmark from before the URLs
837
- * lost their extension still resolves to the same page. */
764
+ * lost their extension still resolves to the same page.
765
+ *
766
+ * A page whose `href` carries a hash is a route on a single document and wins
767
+ * when the path's hash is that route or one under it. A page without one
768
+ * ignores the hash, so an in-page anchor does not lose it. */
838
769
  declare function currentPage(path: string, pages: readonly LabPage[]): number;
839
770
  /** A project's lab title, doubling as the way to reach its other labs.
840
771
  *
@@ -846,7 +777,7 @@ declare function currentPage(path: string, pages: readonly LabPage[]): number;
846
777
  *
847
778
  * Pages accumulate -- a project grows a wall, a dashboard, an ingest page, a
848
779
  * bench -- and a tab strip is the layout that stops working first. */
849
- declare function LabSwitcher({ title, pages, path, className }: LabSwitcherProps): react_jsx_runtime.JSX.Element;
780
+ declare function LabSwitcher({ title, pages, path, className }: LabSwitcherProps): react.JSX.Element;
850
781
 
851
782
  interface LabBaseProps {
852
783
  /** May change while mounted. An instrument that is a different object from
@@ -859,15 +790,20 @@ interface LabBaseProps {
859
790
  * window is the whole app, rather than a panel beside one, reads better at
860
791
  * `'roomy'`. The trials' own contents are unaffected. */
861
792
  density?: LabDensity;
793
+ /** The theme the lab's chrome resolves against, applied at `mode` and
794
+ * `density`. Default `interstellarTheme`; extend it rather than replace it to
795
+ * keep the lab's look while changing a few tokens. */
796
+ theme?: Theme;
862
797
  /** Rendered while a stored lab loads. Default: the lab's empty shell. */
863
798
  fallback?: ReactNode;
864
799
  /**
865
- * Optional list of CSS colors used to compose the interstellar theme's
866
- * cosmic backdrop. Each color becomes one radial-gradient blob on the
867
- * dark void base. Order maps to a fixed spread of positions; extras wrap
868
- * around. Ignored unless the resolved mode is dark.
800
+ * Colors composing the interstellar theme's cosmic backdrop. Each becomes
801
+ * one radial-gradient blob on the dark void base, in a fixed spread of
802
+ * positions; extras wrap around. A theme ramp resolves against the lab's
803
+ * theme; a function list gives as many blobs as there are positions.
804
+ * Ignored unless the resolved mode is dark.
869
805
  */
870
- nebula?: readonly string[];
806
+ nebula?: ColorList;
871
807
  title?: string;
872
808
  /** The project's other labs. Given two or more, the title becomes the way to
873
809
  * reach them — the same switcher `<LabShell>` renders, so a lab reached from
@@ -914,7 +850,22 @@ type LabProps = LabBaseProps & ({
914
850
  });
915
851
  /** The lab runtime: opens the store, provides it, and renders one trial
916
852
  * per record in a grid. Each trial runs one of `instruments`. */
917
- declare function Lab(props: LabProps): string | number | bigint | boolean | react_jsx_runtime.JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null;
853
+ declare function Lab(props: LabProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react.JSX.Element | null;
854
+
855
+ /** Props for `<LabBoundary>`. */
856
+ interface LabBoundaryProps {
857
+ children: ReactNode;
858
+ }
859
+ /**
860
+ * Renders its children as though no lab, trial or theme were above them: every context a `<Lab>` or a
861
+ * `<Trial>` publishes reads as absent below it, so a labkit piece mounted inside a trial behaves the way it
862
+ * does on a bare page. A `<LabRoot>` under it applies its own theme instead of deferring to the lab's, and a
863
+ * `usePersistedState` under it keeps local state instead of writing into the enclosing lab's records.
864
+ *
865
+ * For a host that shows arbitrary content inside a trial, such as a component workshop; a lab's own chrome
866
+ * never needs it.
867
+ */
868
+ declare function LabBoundary({ children }: LabBoundaryProps): react.JSX.Element;
918
869
 
919
870
  /** Props for `<LabPalette>`. */
920
871
  interface LabPaletteProps {
@@ -926,7 +877,7 @@ interface LabPaletteProps {
926
877
  /** The lab's tool rail. Writes the lab's tool slot, which every trial whose
927
878
  * instrument declares no tools of its own resolves to. Renders nothing when
928
879
  * the lab contributes no tool rail. */
929
- declare function LabPalette({ tools, contributions }: LabPaletteProps): react_jsx_runtime.JSX.Element;
880
+ declare function LabPalette({ tools, contributions }: LabPaletteProps): react.JSX.Element;
930
881
 
931
882
  /** Props for `<LabRoot>`. */
932
883
  interface LabRootProps {
@@ -946,7 +897,7 @@ interface LabRootProps {
946
897
  * or those components inherit whatever the host page happens to define.
947
898
  * Pair it with `import '@weasel-js/labkit/styles.css'`, which is what defines
948
899
  * the rules this element scopes. */
949
- declare function LabRoot({ children, mode, className }: LabRootProps): react_jsx_runtime.JSX.Element;
900
+ declare function LabRoot({ children, mode, className }: LabRootProps): react.JSX.Element;
950
901
 
951
902
  /** Props for `<LabShell>`. */
952
903
  interface LabShellProps {
@@ -964,11 +915,14 @@ interface LabShellProps {
964
915
  /** The path the switcher reads to mark the open page. Defaults to the
965
916
  * current location. */
966
917
  path?: string;
918
+ /** Set as `document.title` while the shell is mounted, and the previous
919
+ * title restored after. Omitted, the document's title is left alone. */
920
+ documentTitle?: string;
967
921
  }
968
922
  /** Page frame for a lab: a titled header, a body, and an optional footer,
969
923
  * themed for the resolved color mode. Presentational only — use `<Lab>` when
970
924
  * the trial runtime is wanted too. */
971
- declare function LabShell({ title, children, header, footer, mode, pages, path, }: LabShellProps): react_jsx_runtime.JSX.Element;
925
+ declare function LabShell({ title, children, header, footer, mode, pages, path, documentTitle, }: LabShellProps): react.JSX.Element;
972
926
 
973
927
  /** A tile's persisted extent, keyed by the id its caller gave it. Grid resizes
974
928
  * write `span`; `size` is here because a strategy swap would write that. */
@@ -1030,7 +984,7 @@ interface PanelDescriptor {
1030
984
  title: string;
1031
985
  as: 'tile' | 'floating';
1032
986
  }
1033
- declare function Workspace({ children, ids, panels, resizable, reorderable, onReorder, layout, onLayoutChange, gap, padding, viewport, }: WorkspaceProps): react_jsx_runtime.JSX.Element;
987
+ declare function Workspace({ children, ids, panels, resizable, reorderable, onReorder, layout, onLayoutChange, gap, padding, viewport, }: WorkspaceProps): react.JSX.Element;
1034
988
 
1035
989
  /** The specimen's sections, in page order. */
1036
990
  declare const SPECIMEN_SECTIONS: readonly ["Buttons & toggles", "Fields & pickers", "Panels & property rows", "Overlays & feedback", "Lists & data", "Tool chrome", "Editors & plots", "Lab chrome"];
@@ -1042,7 +996,7 @@ declare const SPECIMEN_SECTIONS: readonly ["Buttons & toggles", "Fields & picker
1042
996
  */
1043
997
  declare function Specimen({ className }: {
1044
998
  className?: string;
1045
- }): react_jsx_runtime.JSX.Element;
999
+ }): react.JSX.Element;
1046
1000
 
1047
1001
  /** The 2D view labkit has always shipped, and what a trial gets when it names no
1048
1002
  * other. Re-exported under its own name so a consumer can say which it means. */
@@ -1053,8 +1007,8 @@ declare const DEFAULT_VIEW: ViewTransform2D;
1053
1007
  declare function as2DView(view: unknown): ViewTransform2D | null;
1054
1008
 
1055
1009
  /**
1056
- * labkit's theme: a cosmic dark and a warm parchment light, extending the
1057
- * built-in weasel theme. A pins-only theme definition: nothing in it is
1010
+ * labkit's theme: a cosmic dark over the built-in weasel theme, whose light
1011
+ * mode it keeps as is. A pins-only theme definition: nothing in it is
1058
1012
  * derived, so it loads without the engine.
1059
1013
  */
1060
1014
  declare const interstellarTheme: Theme;
@@ -1070,7 +1024,7 @@ interface TrialProps {
1070
1024
  }
1071
1025
  /** Renders one trial from the lab store: looks up its record and
1072
1026
  * instrument, and mounts the instrument inside the trial chrome. */
1073
- declare function Trial({ id, chrome, suppress }: TrialProps): react_jsx_runtime.JSX.Element;
1027
+ declare function Trial({ id, chrome, suppress }: TrialProps): react.JSX.Element;
1074
1028
 
1075
1029
  /** Props for `<TrialBody>`. */
1076
1030
  interface TrialBodyProps extends Omit<SplitProps, 'sidebar' | 'children' | 'className' | 'sidebarClassName' | 'label'> {
@@ -1083,7 +1037,7 @@ interface TrialBodyProps extends Omit<SplitProps, 'sidebar' | 'children' | 'clas
1083
1037
  contentClassName?: string;
1084
1038
  }
1085
1039
  /** A trial's sidebar and content as a `Split`, wearing the trial's classes. */
1086
- declare function TrialBody({ sidebar, children, contentClassName, ...rest }: TrialBodyProps): react_jsx_runtime.JSX.Element;
1040
+ declare function TrialBody({ sidebar, children, contentClassName, ...rest }: TrialBodyProps): react.JSX.Element;
1087
1041
 
1088
1042
  /** The trial's loupe as its chrome sees it: a switch and its position. */
1089
1043
  interface LoupeBindings {
@@ -1124,7 +1078,7 @@ interface TrialChromeProps {
1124
1078
  /** The frame around a running instrument. Builds one chrome context, assembles
1125
1079
  * the contributions the instrument, the runtime and the lab declare, and hands
1126
1080
  * each region its slice. */
1127
- declare function TrialChrome({ trialId, record, instrument, isLastTrial, undoBindings, job, loupe, trialChrome, chrome, suppress, activeToolId, setActiveTool, children, }: TrialChromeProps): react_jsx_runtime.JSX.Element;
1081
+ declare function TrialChrome({ trialId, record, instrument, isLastTrial, undoBindings, job, loupe, trialChrome, chrome, suppress, activeToolId, setActiveTool, children, }: TrialChromeProps): react.JSX.Element;
1128
1082
 
1129
- export { ANNOTATION_TOOLS, ANNOTATION_WEASEL_TOOLS, AnnotationData, AnnotationKind, AnnotationMeaning, AnnotationOverlay, AnnotationTarget, AnnotationTargets, AnnotationsApi, AnnotationsCapability, AnnotationsContext, CaptureOptions, CaptureResult, CaptureSource, CloseIcon, CollapseIcon, ConfigField, ConfigRule, ConfigSchema, ControlRenderer, CurveField, DEFAULT_VIEW, EffectCard, EffectCardList, ExpandIcon, ExportMenu, IconProps, Instrument, InstrumentList, JobHandle, Jog, Lab, LabContribution, LabDensity, LabMode, LabPalette, LabRoot, LabShell, LabSwitcher, MarkList, MarkScene, PauseIcon, PlayIcon, PropertyGroup, PropertyListPack, ResetIcon, SPECIMEN_SECTIONS, Specimen, SplitProps, StepBackIcon, StepForwardIcon, StopIcon, StorageAdapter, Subpanel, TokenPanel, Trial, TrialBody, TrialChrome, TrialContribution, TrialInfo, TrialRecord, TrialTool, ViewTransform, Workspace, WorldRect, annotationToolInfo, as2DView, capturePlan, captureTarget, composeCaptureSvg, createMarkDrawOne, currentPage, defineInstrument, fitView, fromWeaselView, inferTokenType, interstellarTheme, isStale, markCommands, markSvgNodes, refitScale, resolveMarkStyle, seenFrom, toWeaselView, useAnnotations, useAnnotationsOptional, validateConfigSchema };
1130
- export type { AnnotationOverlayProps, AnnotationTargetsProps, AnnotationToolInfo, CaptureArgs, CapturePlan, ComposeSvgArgs, ContentSize, CurveFieldProps, CurveMark, EffectCardListItem, EffectCardListProps, EffectCardProps, InstrumentSpec, JogProps, LabPage, LabPaletteProps, LabProps, LabRootProps, LabShellProps, LabSwitcherProps, MarkDrawOptions, MarkListProps, MarkStyle, PaintableMark, PaneSize, PanelDescriptor, PropertyGroupProps, SubpanelProps, TokenCategory, TokenEntry, TokenPanelProps, TokenScale, TokenScaleRule, TrialBodyProps, TrialChromeProps, TrialLayout, TrialProps, UndoBindings, ValidationResult, ViewTransform2D, WorkspaceProps };
1083
+ export { ANNOTATION_TOOLS, ANNOTATION_WEASEL_TOOLS, AnnotationData, AnnotationKind, AnnotationMeaning, AnnotationOverlay, AnnotationTarget, AnnotationTargets, AnnotationsApi, AnnotationsCapability, AnnotationsContext, CaptureOptions, CaptureResult, CaptureSource, CloseIcon, CollapseIcon, ConfigField, ConfigRule, ConfigSchema, ControlRenderer, CurveField, DEFAULT_VIEW, ExpandIcon, ExportMenu, IconProps, Instrument, InstrumentList, JobHandle, Jog, Lab, LabBoundary, LabContribution, LabDensity, LabMode, LabPalette, LabRoot, LabShell, LabSwitcher, MarkList, MarkScene, MarkStyle, PaintableMark, PauseIcon, PlayIcon, PropertyGroup, PropertyListPack, ResetIcon, SPECIMEN_SECTIONS, Specimen, SplitProps, StepBackIcon, StepForwardIcon, StopIcon, StorageAdapter, Subpanel, TokenPanel, Trial, TrialBody, TrialChrome, TrialContribution, TrialInfo, TrialRecord, TrialTool, ViewTransform, Workspace, WorldRect, annotationToolInfo, as2DView, capturePlan, captureTarget, composeCaptureSvg, createMarkDrawOne, currentPage, defineInstrument, fitView, fromWeaselView, inferTokenType, interstellarTheme, isStale, markSvgNodes, refitScale, resolveMarkStyle, seenFrom, toWeaselView, useAnnotations, useAnnotationsOptional, validateConfigSchema };
1084
+ export type { AnnotationOverlayProps, AnnotationTargetsProps, AnnotationToolInfo, CaptureArgs, CapturePlan, ComposeSvgArgs, ContentSize, CurveFieldProps, CurveMark, InstrumentSpec, JogProps, LabBoundaryProps, LabPage, LabPaletteProps, LabProps, LabRootProps, LabShellProps, LabSwitcherProps, MarkDrawOptions, MarkListProps, PaneSize, PanelDescriptor, PropertyGroupProps, SubpanelProps, TokenCategory, TokenEntry, TokenPanelProps, TokenScale, TokenScaleRule, TrialBodyProps, TrialChromeProps, TrialLayout, TrialProps, UndoBindings, ValidationResult, ViewTransform2D, WorkspaceProps };