@weasel-js/labkit 1.6.1 → 1.7.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 (162) hide show
  1. package/dist/_dts/{CanvasStackContext-Wo6OwIVM.d.ts → CanvasStackContext-D2jnIwfk.d.ts} +1 -1
  2. package/dist/_dts/{LayerList.d-BoELAMsM.d.ts → LayerList.d-DiuEArKq.d.ts} +2 -2
  3. package/dist/_dts/PrefsRow.d-TOZ7BgD9.d.ts +79 -0
  4. package/dist/_dts/PropertyPanel.d-D-1paCbE.d.ts +141 -0
  5. package/dist/_dts/{Select.d-Cr8-zoup.d.ts → Select.d-Bensr_MT.d.ts} +11 -1
  6. package/dist/_dts/{Stage-DWBBi8IU.d.ts → Stage-CCWfQQWM.d.ts} +58 -18
  7. package/dist/_dts/index-B2Yj5aA0.d.ts +274 -0
  8. package/dist/_dts/{index-CKyX0ME_.d.ts → index-CsYqUHD3.d.ts} +2 -2
  9. package/dist/_dts/{types-DTuViBvc.d.ts → types-CRPSGFAp.d.ts} +13 -4
  10. package/dist/_dts/{types-B7yBTTF9.d.ts → types-CSm9jgol.d.ts} +2 -2
  11. package/dist/_dts/{useTrialState-CMaV6UD4.d.ts → useTrialState-CTZPgeZ7.d.ts} +1 -1
  12. package/dist/canvas/index.d.ts +6 -6
  13. package/dist/canvas/index.js +2 -2
  14. package/dist/chrome/index.d.ts +5 -5
  15. package/dist/chrome/index.js +8 -8
  16. package/dist/{chunk-QGMOA2YE.js → chunk-275JRRVD.js} +67 -70
  17. package/dist/chunk-275JRRVD.js.map +1 -0
  18. package/dist/{chunk-KHK5FGER.js → chunk-4LJSC7MB.js} +8 -10
  19. package/dist/chunk-4LJSC7MB.js.map +1 -0
  20. package/dist/{chunk-SLAQPUI4.js → chunk-7BO7HNGF.js} +5 -5
  21. package/dist/{chunk-SLAQPUI4.js.map → chunk-7BO7HNGF.js.map} +1 -1
  22. package/dist/chunk-CZZPXUOU.js +3 -0
  23. package/dist/{chunk-SBXNQW4G.js.map → chunk-CZZPXUOU.js.map} +1 -1
  24. package/dist/{chunk-6FLXL3I7.js → chunk-FMK7UQ6V.js} +19 -4
  25. package/dist/chunk-FMK7UQ6V.js.map +1 -0
  26. package/dist/{chunk-O6FFFOHS.js → chunk-FZ7YFQN7.js} +16 -8
  27. package/dist/chunk-FZ7YFQN7.js.map +1 -0
  28. package/dist/{chunk-GHGO52SO.js → chunk-GOZLNM4L.js} +5 -5
  29. package/dist/{chunk-GHGO52SO.js.map → chunk-GOZLNM4L.js.map} +1 -1
  30. package/dist/{chunk-4TT3PNPR.js → chunk-I5DUQ5HM.js} +33 -36
  31. package/dist/chunk-I5DUQ5HM.js.map +1 -0
  32. package/dist/{chunk-NEXR37YJ.js → chunk-J7OWWTCW.js} +4 -5
  33. package/dist/chunk-J7OWWTCW.js.map +1 -0
  34. package/dist/{chunk-IRTGUQ5O.js → chunk-KMJ7RWD3.js} +16 -6
  35. package/dist/chunk-KMJ7RWD3.js.map +1 -0
  36. package/dist/{chunk-S4NCI32V.js → chunk-M7HP3FTK.js} +4 -4
  37. package/dist/{chunk-S4NCI32V.js.map → chunk-M7HP3FTK.js.map} +1 -1
  38. package/dist/chunk-MIM5R4ZT.js +14972 -0
  39. package/dist/chunk-MIM5R4ZT.js.map +1 -0
  40. package/dist/{chunk-ASOK76ZH.js → chunk-T5IBSPAM.js} +59 -26
  41. package/dist/chunk-T5IBSPAM.js.map +1 -0
  42. package/dist/{chunk-DWMSB4CA.js → chunk-UNAZSLWE.js} +82 -16
  43. package/dist/chunk-UNAZSLWE.js.map +1 -0
  44. package/dist/{chunk-TJ77A4A3.js → chunk-Y23G2VZL.js} +5 -9
  45. package/dist/chunk-Y23G2VZL.js.map +1 -0
  46. package/dist/{chunk-HKV7LRHY.js → chunk-YT75VYRD.js} +4 -4
  47. package/dist/{chunk-HKV7LRHY.js.map → chunk-YT75VYRD.js.map} +1 -1
  48. package/dist/{chunk-CGHF6RZV.js → chunk-ZIFPHIWZ.js} +9 -7
  49. package/dist/chunk-ZIFPHIWZ.js.map +1 -0
  50. package/dist/config/index.d.ts +16 -9
  51. package/dist/config/index.js +4 -4
  52. package/dist/controls/index.d.ts +2 -2
  53. package/dist/controls/index.js +5 -5
  54. package/dist/dragdrop/index.d.ts +3 -3
  55. package/dist/index.d.ts +263 -24
  56. package/dist/index.js +376 -237
  57. package/dist/index.js.map +1 -1
  58. package/dist/layers/index.d.ts +4 -4
  59. package/dist/layers/index.js +2 -2
  60. package/dist/loupe/index.d.ts +4 -4
  61. package/dist/loupe/index.js +2 -2
  62. package/dist/overview/index.d.ts +2 -2
  63. package/dist/overview/index.js +9 -8
  64. package/dist/overview/index.js.map +1 -1
  65. package/dist/passthrough/weasel-ui.d.ts +208 -38
  66. package/dist/passthrough/weasel-ui.js +3 -3
  67. package/dist/primitives/index.d.ts +3 -178
  68. package/dist/primitives/index.js +6 -6
  69. package/dist/state/index.d.ts +5 -5
  70. package/dist/state/index.js +4 -4
  71. package/dist/styles.css +91 -83
  72. package/dist/undo/index.d.ts +3 -3
  73. package/package.json +13 -12
  74. package/src/annotations/AnnotationOverlay.tsx +2 -2
  75. package/src/annotations/Annotations.less +0 -10
  76. package/src/annotations/MarkList.tsx +4 -8
  77. package/src/annotations/paint.test.ts +3 -14
  78. package/src/annotations/paint.ts +3 -19
  79. package/src/annotations/svgNodes.test.ts +6 -9
  80. package/src/annotations/svgNodes.ts +3 -3
  81. package/src/canvas/AGENTS.md +1 -0
  82. package/src/canvas/CameraInput.tsx +44 -33
  83. package/src/canvas/CanvasStack.tsx +6 -1
  84. package/src/canvas/LinkedCursor.less +1 -1
  85. package/src/canvas/Stage.test.tsx +33 -4
  86. package/src/canvas/Stage.tsx +6 -1
  87. package/src/canvas/cameraRegistry.test.ts +55 -0
  88. package/src/canvas/cameraRegistry.ts +86 -0
  89. package/src/canvas/cameraZoom.test.ts +46 -0
  90. package/src/canvas/cameraZoom.ts +24 -0
  91. package/src/canvas/index.ts +14 -2
  92. package/src/canvas/sharedScope.test.tsx +94 -0
  93. package/src/chrome/ChromeRegions.stories.tsx +1 -0
  94. package/src/chrome/regions/PaletteRegion.less +0 -7
  95. package/src/chrome/regions/SidebarRegion.less +12 -2
  96. package/src/config/builder.test.ts +2 -1
  97. package/src/config/builder.ts +12 -5
  98. package/src/config/fromConfigField.test.ts +14 -0
  99. package/src/config/fromConfigField.ts +18 -4
  100. package/src/config/path.ts +2 -5
  101. package/src/config/resolve.ts +4 -0
  102. package/src/config/types.ts +13 -9
  103. package/src/controls/ControlPanel.less +1 -1
  104. package/src/controls/ControlPanel.stories.tsx +3 -2
  105. package/src/controls/ControlPanel.test.tsx +64 -11
  106. package/src/controls/ControlPanel.tsx +52 -2
  107. package/src/index.ts +15 -1
  108. package/src/lab/Lab.tsx +83 -72
  109. package/src/lab/{LabFit.stories.less → LabFit.browser.test.less} +1 -1
  110. package/src/lab/{LabFit.stories.tsx → LabFit.browser.test.tsx} +41 -63
  111. package/src/lab/LabFullChrome.stories.tsx +1 -0
  112. package/src/lab/LabHeader.test.tsx +24 -14
  113. package/src/lab/LabHeader.tsx +11 -12
  114. package/src/lab/LabShell.less +8 -17
  115. package/src/lab/LabSwitcher.less +6 -6
  116. package/src/lab/LabZoom.test.tsx +223 -0
  117. package/src/lab/LabZoom.tsx +170 -0
  118. package/src/lab/index.ts +1 -0
  119. package/src/loupe/LoupeGestures.tsx +1 -1
  120. package/src/overview/TrialOverview.tsx +7 -5
  121. package/src/passthrough/weasel-ui.test.ts +2 -0
  122. package/src/passthrough/weasel-ui.ts +16 -4
  123. package/src/primitives/FloatingPanel.test.tsx +11 -0
  124. package/src/primitives/FloatingPanel.tsx +2 -5
  125. package/src/primitives/JobProgress.less +1 -1
  126. package/src/primitives/Legend.stories.tsx +1 -0
  127. package/src/primitives/Readout.browser.test.tsx +137 -0
  128. package/src/primitives/Readout.less +12 -0
  129. package/src/primitives/Readout.stories.tsx +58 -0
  130. package/src/primitives/Readout.test.tsx +93 -0
  131. package/src/primitives/Readout.tsx +56 -0
  132. package/src/primitives/index.ts +2 -0
  133. package/src/specimen/Specimen.stories.tsx +1 -0
  134. package/src/specimen/Specimen.tsx +2 -2
  135. package/src/state/Persistence.browser.test.tsx +47 -0
  136. package/src/state/store.test.ts +5 -1
  137. package/src/state/usePersistedState.test.tsx +1 -1
  138. package/src/styles.less +1 -0
  139. package/src/theme/Interstellar.stories.tsx +3 -1
  140. package/src/theme/base.less +21 -47
  141. package/src/theme/interstellar.test.ts +1 -1
  142. package/src/theme/interstellar.theme.json +10 -3
  143. package/src/trial/Trial.less +0 -13
  144. package/src/trial/Trial.tsx +12 -6
  145. package/src/trial/TrialChrome.tsx +21 -3
  146. package/dist/_dts/PrefsRow.d-DFpPIeIC.d.ts +0 -39
  147. package/dist/_dts/PropertyField.d-D0ndfIIt.d.ts +0 -404
  148. package/dist/chunk-4TT3PNPR.js.map +0 -1
  149. package/dist/chunk-6FLXL3I7.js.map +0 -1
  150. package/dist/chunk-ASOK76ZH.js.map +0 -1
  151. package/dist/chunk-CGHF6RZV.js.map +0 -1
  152. package/dist/chunk-DWMSB4CA.js.map +0 -1
  153. package/dist/chunk-IRTGUQ5O.js.map +0 -1
  154. package/dist/chunk-KHK5FGER.js.map +0 -1
  155. package/dist/chunk-NEXR37YJ.js.map +0 -1
  156. package/dist/chunk-O6FFFOHS.js.map +0 -1
  157. package/dist/chunk-QGMOA2YE.js.map +0 -1
  158. package/dist/chunk-SBXNQW4G.js +0 -3
  159. package/dist/chunk-TJ77A4A3.js.map +0 -1
  160. package/dist/chunk-TYN6MLXX.js +0 -13864
  161. package/dist/chunk-TYN6MLXX.js.map +0 -1
  162. package/src/state/Persistence.stories.tsx +0 -75
package/dist/index.d.ts CHANGED
@@ -1,22 +1,25 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
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';
3
+ import { I as IconProps } from './_dts/Select.d-Bensr_MT.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-Bensr_MT.js';
5
+ import { S as SplitProps } from './_dts/index-B2Yj5aA0.js';
6
+ export { D as DetailList, a as DetailListLayout, b as DetailListProps, c as DetailListValues, d as DetailRow, e as DetailRowProps, f as DetailRowStatus, F as FpsMeter, J as JobProgress, g as JobProgressProps, L as Legend, h as LegendEntry, i as LegendMark, j as LegendProps, R as Readout, k as ReadoutProps, l as ReadoutRow, m as ScaleIndicator, n as ScaleIndicatorProps, o as Split, p as StatusBar, q as StatusBarProps, r as StatusBarSectionProps, T as Toolbar, s as ToolbarButtonProps, t as ToolbarGroupProps, u as ToolbarProps, Z as ZoomControl, v as ZoomControlProps } from './_dts/index-B2Yj5aA0.js';
7
+ export { L as LayerList, a as LayerListItem, b as LayerListProps, c as LayerMove, m as moveLayers } from './_dts/LayerList.d-DiuEArKq.js';
8
+ import { FillStyle, PaintKind, SceneNode, View, DrawCommand, Path, ScreenLength, StrokeAlign, MarkerRef, StyledRun, TextStyle, TextVerticalAlign, Stroke, BuiltinToolId } from '@weasel-js/core';
9
+ import { U as UnitTable, D as Display } from './_dts/PrefsRow.d-TOZ7BgD9.js';
9
10
  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';
11
+ import { a as PropertyRowLayout, b as PropertyListPack } from './_dts/PropertyPanel.d-D-1paCbE.js';
12
+ import { PropertyMetricProps } from './passthrough/weasel-ui.js';
13
+ export { c as PropertyList, d as PropertyListProps, e as PropertyPanel, f as PropertyPanelProps, g as PropertyRow, h as PropertyRowProps, i as PropertyRowVariant, j as PropertySpan, k as PropertySpanProps } from './_dts/PropertyPanel.d-D-1paCbE.js';
14
+ 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-CSm9jgol.js';
15
+ 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-CSm9jgol.js';
16
+ export { C as CameraContext, a as CameraContextValue, b as CameraInput, d as CameraPublishContext, e as CameraRegistry, f as CameraRegistryContext, g as CameraScope, h as CameraView, j as CanvasStack, k as CanvasStackProps, l as Stage, m as StageProps, Z as ZoomAtOptions, n as ZoomRange, o as centerOn, p as createCameraRegistry, q as fitStage, s as screenToWorld, r as usePublishCamera, w as worldToScreen, z as zoomAt } from './_dts/Stage-CCWfQQWM.js';
17
+ export { C as CanvasLayerDescriptor, a as CanvasStackContext, b as CanvasStackContextValue, c as CanvasStackSurface } from './_dts/CanvasStackContext-D2jnIwfk.js';
18
+ import { L as LabContribution } from './_dts/index-CsYqUHD3.js';
19
+ 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-CsYqUHD3.js';
17
20
  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';
21
+ import { b as ConfigSchema, a as ConfigField, c as ConfigRule, d as ControlRenderer } from './_dts/types-CRPSGFAp.js';
22
+ 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-CRPSGFAp.js';
20
23
  export { ControlPanel, inDialog, summarizeValue } from './controls/index.js';
21
24
  import { J as JobHandle } from './_dts/types-DJ79Tg5J.js';
22
25
  export { a as JobCapability, b as JobEvent, c as JobFailure, d as JobStatus } from './_dts/types-DJ79Tg5J.js';
@@ -24,9 +27,7 @@ export { UseJobOptions, useJob } from './job/index.js';
24
27
  import { Theme, ColorList } from '@weasel-js/theme';
25
28
  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
29
  export { a as FloatingPanel, F as FloatingPanelProps } from './_dts/FloatingPanel-7j0IcXwz.js';
27
- import { SplitProps } from './primitives/index.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';
30
+ 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-CTZPgeZ7.js';
30
31
  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';
31
32
  export { EventBus, EventListener, clearUndo, createEventBus, emptyStack, pushSnapshot, redo, undo } from './undo/index.js';
32
33
  import 'react-aria-components';
@@ -43,6 +44,229 @@ declare const StepForwardIcon: (p: IconProps) => react.JSX.Element;
43
44
  declare const CollapseIcon: (p: IconProps) => react.JSX.Element;
44
45
  declare const ExpandIcon: (p: IconProps) => react.JSX.Element;
45
46
 
47
+ /** One choice of an enum field. */
48
+ interface PropertyOption<T extends string> {
49
+ value: T;
50
+ /** The option's name. A string also names its segment for a screen reader. */
51
+ label: ReactNode;
52
+ /** What a segment shows in place of `label` when the full one would not fit
53
+ * — a glyph or a letter. `label` stays the accessible name. */
54
+ glyph?: ReactNode;
55
+ /** Shown but not choosable: a value the control reports and cannot author. */
56
+ disabled?: boolean;
57
+ }
58
+ /** Props every kind of field shares. */
59
+ interface FieldBase {
60
+ /** The control's accessible name. A `<PropertyField>` takes it from a string
61
+ * `label` when this is omitted. */
62
+ name?: string;
63
+ /** The sources the field reads disagree — a multi-selection whose nodes
64
+ * differ. The control shows no value, in whatever form it has for that. */
65
+ mixed?: boolean;
66
+ /**
67
+ * The sources agree on holding nothing: whatever is in effect comes from a
68
+ * fallback further down. The control shows no chosen value rather than
69
+ * inventing one, since the next edit would write the invention back.
70
+ */
71
+ unset?: boolean;
72
+ /** Class on the control element itself. */
73
+ className?: string;
74
+ /** Id for the control element, for a `<label htmlFor>` outside it. */
75
+ id?: string;
76
+ }
77
+ /** A boolean field. */
78
+ interface PropertyBooleanFieldProps extends FieldBase {
79
+ kind: 'boolean';
80
+ /** `checkbox` (default), `switch`, or `toggle` — a one-segment pressable bar. */
81
+ control?: 'checkbox' | 'switch' | 'toggle';
82
+ /** Absent reads as off. */
83
+ value: boolean | undefined;
84
+ onChange: (next: boolean) => void;
85
+ /** A `toggle`'s segment content. Defaults to the first letter of `name`. */
86
+ glyph?: ReactNode;
87
+ }
88
+ /** A number field. */
89
+ interface PropertyNumberFieldProps extends FieldBase {
90
+ kind: 'number';
91
+ /** `input` (default) for a typed number; `slider` for a track with an
92
+ * editable readout, where the range matters more than the exact value. */
93
+ control?: 'input' | 'slider';
94
+ /** Absent reads as an empty field. */
95
+ value: number | null | undefined;
96
+ /**
97
+ * The committed value. Given `onInput` as well, it fires once a drag ends,
98
+ * or on blur, Enter or a step in a typed field; on its own it fires on every
99
+ * move, keystroke and step. A caller wanting settled values only passes a
100
+ * no-op `onInput`.
101
+ */
102
+ onChange: (next: number) => void;
103
+ /** The live value, fired continuously. Pass it alongside `onChange` when the
104
+ * write is expensive — cheap state here, the costly work there. */
105
+ onInput?: (next: number) => void;
106
+ /** A slider's track runs 0..100 where these are omitted. */
107
+ min?: number;
108
+ max?: number;
109
+ step?: number;
110
+ /**
111
+ * Suffix after the value. A string becomes a dim word unit (`px`); pass JSX
112
+ * like `<sup>°</sup>` for a symbol. Display only — the value stays a number.
113
+ */
114
+ unit?: ReactNode;
115
+ /** Units a person may type into a typed field, each mapped to the factor
116
+ * that turns it into the unit shown: `{ mm: 0.1, cm: 1 }`. */
117
+ accepts?: Readonly<UnitTable>;
118
+ /** How the value shows, is spoken, and reads back when typed —
119
+ * `compact()` reads `2.00M`. A slider readout defaults to the value at
120
+ * `step`'s precision. */
121
+ display?: Display;
122
+ /** A slider readout's text, for what no display expresses — a derived
123
+ * value, a word at one end. Wins over `display`, and is spoken as shown. */
124
+ format?: (value: number) => ReactNode;
125
+ placeholder?: string;
126
+ /** A typed field's up and down buttons. Default `false`: a dense panel
127
+ * drives its numbers by typing, the arrow keys and the wheel. */
128
+ steppers?: boolean;
129
+ }
130
+ /** A text field. */
131
+ interface PropertyStringFieldProps extends FieldBase {
132
+ kind: 'string';
133
+ control?: 'input' | 'textarea';
134
+ /** Absent reads as an empty field. */
135
+ value: string | null | undefined;
136
+ /**
137
+ * The committed text. On its own it fires on every keystroke. Given
138
+ * `onInput` as well, the field drafts: `onInput` gets each keystroke and
139
+ * this fires once, on blur or Enter, and only if the text changed.
140
+ */
141
+ onChange: (next: string) => void;
142
+ onInput?: (next: string) => void;
143
+ placeholder?: string;
144
+ maxLength?: number;
145
+ }
146
+ /** A choice among fixed options. */
147
+ interface PropertyEnumFieldProps<T extends string = string> extends FieldBase {
148
+ kind: 'enum';
149
+ /**
150
+ * `select` (default) is a dropdown. `radio` and `toggle` show every option
151
+ * at once — a radio group lists them, and a toggle is a row of segments.
152
+ */
153
+ control?: 'select' | 'radio' | 'toggle';
154
+ /** Absent, or not one of `options`, chooses nothing. */
155
+ value: T | undefined;
156
+ options: ReadonlyArray<PropertyOption<T>>;
157
+ onChange: (next: T) => void;
158
+ /**
159
+ * Given, choosing nothing is a value of its own: a `toggle` lets the chosen
160
+ * segment be clicked off, and calls this. Absent, a toggle always holds one.
161
+ */
162
+ onClear?: () => void;
163
+ /** Shown while no option is chosen. Defaults to "Choose option…". */
164
+ placeholder?: string;
165
+ }
166
+ /** A single color. */
167
+ interface PropertyColorFieldProps extends FieldBase {
168
+ kind: 'color';
169
+ /** `#rrggbb`, or `#rrggbbaa` when `alpha` is `true`. */
170
+ value: string | undefined;
171
+ /**
172
+ * The committed color. Given `onInput` as well, it fires once per gesture —
173
+ * the picker closing, or the opacity track let go; on its own it fires on
174
+ * every move. A caller wanting settled values only passes a no-op `onInput`.
175
+ */
176
+ onChange: (next: string) => void;
177
+ onInput?: (next: string) => void;
178
+ /**
179
+ * Offer an opacity track. `true` keeps the alpha in `value` as `#rrggbbaa`;
180
+ * a number is the 0..1 alpha held apart from it, reported through
181
+ * `onAlphaChange` / `onAlphaInput`.
182
+ */
183
+ alpha?: boolean | number;
184
+ onAlphaChange?: (next: number) => void;
185
+ onAlphaInput?: (next: number) => void;
186
+ /** Draw the opacity track inert, for a consumer that drops alpha. */
187
+ alphaDisabled?: boolean;
188
+ }
189
+ /** A whole paint: a solid, a gradient, a pattern, or none. */
190
+ interface PropertyPaintFieldProps extends FieldBase {
191
+ kind: 'paint';
192
+ /** `swatch` (default) opens the editor in a popover, for a narrow slot;
193
+ * `inline` draws the kind bar and its editor in place. */
194
+ control?: 'swatch' | 'inline';
195
+ /** `null` is an explicit "no paint"; `undefined` is nothing to show. */
196
+ value: FillStyle | null | undefined;
197
+ onChange: (next: FillStyle | null) => void;
198
+ onInput?: (next: FillStyle | null) => void;
199
+ /** Offer "None". Default `true`. */
200
+ allowNone?: boolean;
201
+ /** Restrict the kinds offered. Default: every registered kind. */
202
+ kinds?: readonly PaintKind[];
203
+ }
204
+ /** A font family, picked from the live font registry. */
205
+ interface PropertyFontFamilyFieldProps extends FieldBase {
206
+ kind: 'font-family';
207
+ value: string | undefined;
208
+ onChange: (next: string) => void;
209
+ /** The weight and slant the family is drawn at, so the picker names the
210
+ * variant that will actually paint. */
211
+ weight?: number;
212
+ fontStyle?: 'normal' | 'italic';
213
+ }
214
+ /**
215
+ * One field for {@link PropertyControl} and {@link PropertyField}, keyed by
216
+ * `kind`.
217
+ */
218
+ type PropertyControlProps<T extends string = string> = PropertyBooleanFieldProps | PropertyNumberFieldProps | PropertyStringFieldProps | PropertyEnumFieldProps<T> | PropertyColorFieldProps | PropertyPaintFieldProps | PropertyFontFamilyFieldProps;
219
+ /** Row props {@link PropertyField} adds to the field it draws. */
220
+ interface PropertyFieldRowProps extends PropertyMetricProps {
221
+ label: ReactNode;
222
+ /**
223
+ * Text beside the label. On a slider it replaces the editable readout —
224
+ * use it when the row is not showing a number a caller could type back,
225
+ * such as an auto row's `auto`.
226
+ */
227
+ readout?: ReactNode;
228
+ description?: string;
229
+ layout?: PropertyRowLayout;
230
+ /** Take the full width of the enclosing grid — see `<PropertyRow span>`. */
231
+ span?: boolean;
232
+ /** The row is auto — see `<PropertyRow auto>`. */
233
+ auto?: boolean;
234
+ /** Toggles `auto` from the row's label — see `<PropertyRow onAutoChange>`. */
235
+ onAutoChange?: (next: boolean) => void;
236
+ /** Class on the row. `controlClassName` reaches the control. */
237
+ rowClassName?: string;
238
+ controlClassName?: string;
239
+ }
240
+ /** Props for {@link PropertyField}: one field, and the row around it. */
241
+ type PropertyFieldProps<T extends string = string> = PropertyFieldRowProps & DistributiveOmit<PropertyControlProps<T>, 'className' | 'id'>;
242
+ type DistributiveOmit<U, K extends PropertyKey> = U extends unknown ? Omit<U, K> : never;
243
+ /**
244
+ * A labeled settings row for one field, its control chosen by `kind` (and
245
+ * `control`): `<PropertyField kind="number" control="slider" label="Blur" …>`.
246
+ *
247
+ * The row is a {@link PropertyRow}; the control is the one
248
+ * {@link PropertyControl} draws for the same props. Every schema-driven
249
+ * settings surface in the kit — `ControlPanel`, `PrefsForm`, `SelectionPanel`
250
+ * — draws its built-in kinds through that one mapping, so a kind's control
251
+ * is decided once.
252
+ *
253
+ * Callbacks follow the field's shape: a discrete control (a box, a choice)
254
+ * reports each pick; a continuous or typed one reports every change through
255
+ * `onChange` alone, or splits them into live `onInput` and settled
256
+ * `onChange` when given both. `mixed` and `unset` show a field whose sources
257
+ * disagree, or agree on holding nothing.
258
+ */
259
+ declare function PropertyField<T extends string = string>(props: PropertyFieldProps<T>): react.JSX.Element;
260
+ /**
261
+ * The control for one field, with no row around it — for a cell that shares
262
+ * a row with others, or a surface that draws its own row. Keyed by `kind`
263
+ * (and `control`), the same mapping {@link PropertyField} draws.
264
+ *
265
+ * A slider brings its readout beside the track. Several elements come back
266
+ * as siblings rather than wrapped, so the surrounding row lays them out.
267
+ */
268
+ declare function PropertyControl<T extends string = string>(typed: PropertyControlProps<T>): react.JSX.Element;
269
+
46
270
  /** An annotation drawn over a curve plot: a shaded band across a range of x,
47
271
  * or a vertical line at one x. */
48
272
  type CurveMark = {
@@ -454,10 +678,12 @@ interface SvgStroke {
454
678
  * writes the stroke centered and says so through `onWarn`; the parser
455
679
  * never sets it. */
456
680
  align?: StrokeAlign;
457
- /** `marker-start` / `marker-mid` / `marker-end`, as the bare `url(#id)` key. */
458
- markerStart?: string;
459
- markerMid?: string;
460
- markerEnd?: string;
681
+ /** `marker-start` / `marker-mid` / `marker-end` as the kit's `MarkerRef`: the
682
+ * bare `url(#id)` key, or a key with the `size` the serializer writes into a
683
+ * def of its own. */
684
+ markerStart?: MarkerRef;
685
+ markerMid?: MarkerRef;
686
+ markerEnd?: MarkerRef;
461
687
  }
462
688
  /**
463
689
  * Leaf node: a path geometry plus fill/stroke. All other v1 shapes
@@ -826,6 +1052,9 @@ interface LabBaseProps {
826
1052
  /** Offer the header's add-trial control. Default `true`; a lab that opens
827
1053
  * trials some other way passes `false`. */
828
1054
  addTrial?: boolean;
1055
+ /** Offer the header's zoom controls, which act on the focused trial's camera
1056
+ * and answer Mod+=, Mod+- and Mod+0. Default `true`. */
1057
+ zoom?: boolean;
829
1058
  /** Tools offered lab-wide. A trial whose instrument declares none of its own
830
1059
  * reflects and writes this slot. */
831
1060
  tools?: readonly TrialTool[];
@@ -924,6 +1153,16 @@ interface LabShellProps {
924
1153
  * the trial runtime is wanted too. */
925
1154
  declare function LabShell({ title, children, header, footer, mode, pages, path, documentTitle, }: LabShellProps): react.JSX.Element;
926
1155
 
1156
+ /**
1157
+ * Zoom out, the zoom as a percentage, and zoom in, for whichever trial has the
1158
+ * focus. The percentage resets to actual size. They route through core's
1159
+ * `viewport.zoom` action, on a dispatcher of their own that listens for its
1160
+ * keys — Mod+=, Mod+- and Mod+0 — so the buttons and the keys are one path.
1161
+ * Over a trial with no camera the group stays, disabled, so the header does not
1162
+ * reflow as the focus moves.
1163
+ */
1164
+ declare function LabZoom(): react.JSX.Element;
1165
+
927
1166
  /** A tile's persisted extent, keyed by the id its caller gave it. Grid resizes
928
1167
  * write `span`; `size` is here because a strategy swap would write that. */
929
1168
  type TrialLayout = Record<string, {
@@ -1080,5 +1319,5 @@ interface TrialChromeProps {
1080
1319
  * each region its slice. */
1081
1320
  declare function TrialChrome({ trialId, record, instrument, isLastTrial, undoBindings, job, loupe, trialChrome, chrome, suppress, activeToolId, setActiveTool, children, }: TrialChromeProps): react.JSX.Element;
1082
1321
 
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 };
1322
+ 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, LabZoom, MarkList, MarkScene, MarkStyle, PaintableMark, PauseIcon, PlayIcon, PropertyControl, PropertyField, PropertyGroup, PropertyListPack, PropertyRowLayout, 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 };
1323
+ export type { AnnotationOverlayProps, AnnotationTargetsProps, AnnotationToolInfo, CaptureArgs, CapturePlan, ComposeSvgArgs, ContentSize, CurveFieldProps, CurveMark, InstrumentSpec, JogProps, LabBoundaryProps, LabPage, LabPaletteProps, LabProps, LabRootProps, LabShellProps, LabSwitcherProps, MarkDrawOptions, MarkListProps, PaneSize, PanelDescriptor, PropertyControlProps, PropertyFieldProps, PropertyGroupProps, PropertyOption, SubpanelProps, TokenCategory, TokenEntry, TokenPanelProps, TokenScale, TokenScaleRule, TrialBodyProps, TrialChromeProps, TrialLayout, TrialProps, UndoBindings, ValidationResult, ViewTransform2D, WorkspaceProps };