@weasel-js/labkit 1.7.0 → 1.7.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.
- package/README.md +3 -3
- package/dist/_dts/{CanvasStackContext-D2jnIwfk.d.ts → CanvasStackContext-Cjy6I-Iv.d.ts} +4 -1
- package/dist/_dts/{Stage-CCWfQQWM.d.ts → Stage-D6t7o0pF.d.ts} +3 -2
- package/dist/_dts/{index-CsYqUHD3.d.ts → index-BTmaRy6a.d.ts} +10 -6
- package/dist/_dts/{types-CSm9jgol.d.ts → index-DCMA4Fy1.d.ts} +59 -113
- package/dist/_dts/{types-CRPSGFAp.d.ts → types-BUBSIZuV.d.ts} +8 -7
- package/dist/_dts/{useTrialState-CTZPgeZ7.d.ts → useTrialState-Bh8bzFgE.d.ts} +1 -1
- package/dist/canvas/index.d.ts +8 -6
- package/dist/canvas/index.js +6 -6
- package/dist/chrome/index.d.ts +7 -5
- package/dist/chrome/index.js +10 -9
- package/dist/chunk-2ES4W47N.js +8 -0
- package/dist/chunk-2ES4W47N.js.map +1 -0
- package/dist/{chunk-WPLAANH4.js → chunk-2N7UBSS2.js} +12 -12
- package/dist/chunk-2N7UBSS2.js.map +1 -0
- package/dist/chunk-4KSC7NXL.js +15491 -0
- package/dist/chunk-4KSC7NXL.js.map +1 -0
- package/dist/{chunk-7BO7HNGF.js → chunk-CEGFXTBD.js} +8 -61
- package/dist/chunk-CEGFXTBD.js.map +1 -0
- package/dist/{chunk-275JRRVD.js → chunk-E23Q6A3Y.js} +232 -37
- package/dist/chunk-E23Q6A3Y.js.map +1 -0
- package/dist/{chunk-GOZLNM4L.js → chunk-E6NARGU7.js} +5 -5
- package/dist/{chunk-GOZLNM4L.js.map → chunk-E6NARGU7.js.map} +1 -1
- package/dist/{chunk-IJJUK4FU.js → chunk-EESJUSYR.js} +5 -6
- package/dist/chunk-EESJUSYR.js.map +1 -0
- package/dist/{chunk-HXXTULDN.js → chunk-EFXRM6XQ.js} +8 -11
- package/dist/chunk-EFXRM6XQ.js.map +1 -0
- package/dist/chunk-F4ACIK7Z.js +210 -0
- package/dist/chunk-F4ACIK7Z.js.map +1 -0
- package/dist/{chunk-FMK7UQ6V.js → chunk-FB4MIZOO.js} +61 -44
- package/dist/chunk-FB4MIZOO.js.map +1 -0
- package/dist/{chunk-AWQG7FCC.js → chunk-FG3EXZDV.js} +3 -3
- package/dist/{chunk-AWQG7FCC.js.map → chunk-FG3EXZDV.js.map} +1 -1
- package/dist/{chunk-I5DUQ5HM.js → chunk-GAHELLJT.js} +75 -72
- package/dist/chunk-GAHELLJT.js.map +1 -0
- package/dist/{chunk-YT75VYRD.js → chunk-IBVRMHW5.js} +5 -5
- package/dist/{chunk-YT75VYRD.js.map → chunk-IBVRMHW5.js.map} +1 -1
- package/dist/{chunk-T5IBSPAM.js → chunk-JFOJESJF.js} +33 -23
- package/dist/chunk-JFOJESJF.js.map +1 -0
- package/dist/{chunk-RWNDDKOH.js → chunk-PMLZP7RT.js} +18 -15
- package/dist/chunk-PMLZP7RT.js.map +1 -0
- package/dist/{chunk-Y23G2VZL.js → chunk-READTDQX.js} +2 -2
- package/dist/chunk-READTDQX.js.map +1 -0
- package/dist/{chunk-JVBYV6TL.js → chunk-ROGJWDQA.js} +3 -3
- package/dist/{chunk-JVBYV6TL.js.map → chunk-ROGJWDQA.js.map} +1 -1
- package/dist/{chunk-ZIFPHIWZ.js → chunk-T6DLGEJB.js} +12 -14
- package/dist/chunk-T6DLGEJB.js.map +1 -0
- package/dist/{chunk-24W5VEJW.js → chunk-ULYYNWGP.js} +2 -2
- package/dist/{chunk-24W5VEJW.js.map → chunk-ULYYNWGP.js.map} +1 -1
- package/dist/{chunk-UNAZSLWE.js → chunk-VYVGVBGY.js} +17 -20
- package/dist/chunk-VYVGVBGY.js.map +1 -0
- package/dist/{chunk-KMJ7RWD3.js → chunk-WLMDTI2Q.js} +3 -3
- package/dist/{chunk-KMJ7RWD3.js.map → chunk-WLMDTI2Q.js.map} +1 -1
- package/dist/{chunk-J7OWWTCW.js → chunk-XE5HJOPL.js} +5 -6
- package/dist/chunk-XE5HJOPL.js.map +1 -0
- package/dist/chunk-XVUKDSYV.js +38 -0
- package/dist/chunk-XVUKDSYV.js.map +1 -0
- package/dist/{chunk-FZ7YFQN7.js → chunk-YCFKW5RX.js} +3 -3
- package/dist/chunk-YCFKW5RX.js.map +1 -0
- package/dist/{chunk-CQLQPQ4P.js → chunk-ZQIHJXP4.js} +2 -2
- package/dist/chunk-ZQIHJXP4.js.map +1 -0
- package/dist/config/index.d.ts +18 -10
- package/dist/config/index.js +4 -4
- package/dist/controls/index.d.ts +4 -7
- package/dist/controls/index.js +6 -5
- package/dist/dragdrop/index.d.ts +23 -3
- package/dist/dragdrop/index.js +4 -3
- package/dist/fonts/oswald-tabular-digits.woff2 +0 -0
- package/dist/index.d.ts +60 -714
- package/dist/index.js +357 -334
- package/dist/index.js.map +1 -1
- package/dist/job/index.d.ts +8 -0
- package/dist/job/index.js +1 -1
- package/dist/layers/index.d.ts +6 -5
- package/dist/layers/index.js +3 -2
- package/dist/loupe/index.d.ts +100 -30
- package/dist/loupe/index.js +585 -6
- package/dist/loupe/index.js.map +1 -1
- package/dist/overview/index.d.ts +4 -2
- package/dist/overview/index.js +15 -14
- package/dist/overview/index.js.map +1 -1
- package/dist/passthrough/weasel-canvas.d.ts +2 -0
- package/dist/passthrough/weasel-ui.d.ts +2 -2871
- package/dist/passthrough/weasel-ui.js +3 -2
- package/dist/primitives/index.d.ts +213 -3
- package/dist/primitives/index.js +8 -7
- package/dist/state/index.d.ts +7 -5
- package/dist/state/index.js +6 -6
- package/dist/styles.css +60 -44
- package/dist/surface/index.d.ts +10 -2
- package/dist/surface/index.js +1 -1
- package/dist/undo/index.d.ts +5 -3
- package/package.json +11 -11
- package/src/annotations/AnnotationOverlay.abandon.test.tsx +143 -0
- package/src/annotations/AnnotationOverlay.tsx +50 -31
- package/src/annotations/Annotations.overlay.test.tsx +31 -0
- package/src/annotations/capture.browser.test.ts +41 -0
- package/src/annotations/capture.ts +14 -7
- package/src/annotations/drawOne.ts +2 -2
- package/src/annotations/frac.test.ts +44 -1
- package/src/annotations/frac.ts +46 -18
- package/src/annotations/index.ts +1 -0
- package/src/annotations/paint.test.ts +74 -33
- package/src/annotations/paint.ts +70 -32
- package/src/annotations/store.test.ts +212 -2
- package/src/annotations/store.ts +130 -27
- package/src/annotations/svgNodes.test.ts +22 -10
- package/src/annotations/svgNodes.ts +3 -3
- package/src/annotations/types.ts +29 -10
- package/src/canvas/CameraInput.test.tsx +30 -0
- package/src/canvas/CameraInput.tsx +16 -15
- package/src/canvas/CanvasStack.tsx +5 -5
- package/src/canvas/CanvasStackContext.ts +4 -1
- package/src/canvas/Stage.tsx +3 -3
- package/src/canvas/cameraRegistry.ts +1 -0
- package/src/canvas/worldSpec.ts +3 -1
- package/src/chrome/builtins.test.ts +7 -6
- package/src/chrome/builtins.tsx +5 -1
- package/src/chrome/index.ts +1 -1
- package/src/chrome/merge.test.ts +5 -0
- package/src/chrome/merge.ts +4 -2
- package/src/chrome/regions/PaletteRegion.test.tsx +2 -3
- package/src/chrome/regions/PaletteRegion.tsx +3 -4
- package/src/chrome/regions/ViewportRegion.browser.test.less +6 -0
- package/src/chrome/regions/ViewportRegion.browser.test.tsx +38 -0
- package/src/chrome/regions/ViewportRegion.less +6 -0
- package/src/chrome/regions/ViewportRegion.tsx +10 -4
- package/src/chrome/types.ts +4 -2
- package/src/config/auto.ts +1 -0
- package/src/config/builder.ts +6 -0
- package/src/config/types.ts +2 -1
- package/src/controls/ControlPanel.test.tsx +37 -3
- package/src/controls/ControlPanel.tsx +12 -3
- package/src/dragdrop/DragDropRuntime.tsx +22 -13
- package/src/dragdrop/DragGhost.tsx +3 -0
- package/src/dragdrop/Palette.tsx +2 -0
- package/src/index.test.ts +5 -0
- package/src/index.ts +1 -1
- package/src/instrument/types.ts +0 -6
- package/src/job/useJob.ts +14 -9
- package/src/lab/Lab.tsx +5 -1
- package/src/lab/LabShell.less +1 -0
- package/src/lab/LabSwitcher.browser.test.tsx +27 -0
- package/src/lab/LabSwitcher.less +2 -0
- package/src/lab/LabZoom.tsx +4 -4
- package/src/lab/Workspace.tsx +48 -52
- package/src/loupe/AGENTS.md +28 -15
- package/src/loupe/CanvasLoupe.tsx +2 -3
- package/src/loupe/DomLoupe.tsx +1 -7
- package/src/loupe/Loupe.less +16 -0
- package/src/loupe/TrialLoupe.tsx +120 -57
- package/src/loupe/index.ts +1 -6
- package/src/loupe/types.test.ts +3 -3
- package/src/loupe/types.ts +24 -27
- package/src/loupe/useLoupe.test.tsx +29 -4
- package/src/loupe/useLoupe.ts +20 -17
- package/src/overview/OverviewMarks.tsx +12 -4
- package/src/overview/TrialOverview.tsx +3 -3
- package/src/passthrough/weasel-ui.test.ts +1 -1
- package/src/passthrough/weasel-ui.ts +1 -1
- package/src/primitives/FloatingPanel.tsx +7 -3
- package/src/primitives/JobProgress.less +1 -0
- package/src/primitives/Readout.test.tsx +2 -2
- package/src/primitives/Split.tsx +69 -41
- package/src/primitives/Toolbar.tsx +3 -3
- package/src/primitives/ZoomControl.less +1 -2
- package/src/specimen/Specimen.tsx +0 -1
- package/src/state/undock.ts +3 -0
- package/src/state/useOpenOnce.ts +20 -16
- package/src/state/view.ts +1 -0
- package/src/surface/index.ts +1 -1
- package/src/surface/useTiledSurface.test.tsx +14 -0
- package/src/surface/useTiledSurface.ts +11 -3
- package/src/trial/Trial.annotations.test.tsx +73 -0
- package/src/trial/Trial.less +0 -16
- package/src/trial/Trial.loupe.test.tsx +28 -11
- package/src/trial/Trial.tsx +74 -62
- package/src/trial/TrialChrome.tsx +6 -3
- package/src/trial/index.ts +2 -0
- package/src/trial/loupeSwitch.ts +15 -0
- package/dist/_dts/LayerList.d-DiuEArKq.d.ts +0 -83
- package/dist/_dts/PrefsRow.d-TOZ7BgD9.d.ts +0 -79
- package/dist/_dts/PropertyPanel.d-D-1paCbE.d.ts +0 -141
- package/dist/_dts/Select.d-Bensr_MT.d.ts +0 -579
- package/dist/_dts/index-B2Yj5aA0.d.ts +0 -274
- package/dist/chunk-275JRRVD.js.map +0 -1
- package/dist/chunk-4LJSC7MB.js +0 -143
- package/dist/chunk-4LJSC7MB.js.map +0 -1
- package/dist/chunk-7BO7HNGF.js.map +0 -1
- package/dist/chunk-CQLQPQ4P.js.map +0 -1
- package/dist/chunk-FMK7UQ6V.js.map +0 -1
- package/dist/chunk-FZ7YFQN7.js.map +0 -1
- package/dist/chunk-HXXTULDN.js.map +0 -1
- package/dist/chunk-I5DUQ5HM.js.map +0 -1
- package/dist/chunk-IJJUK4FU.js.map +0 -1
- package/dist/chunk-J7OWWTCW.js.map +0 -1
- package/dist/chunk-M7HP3FTK.js +0 -549
- package/dist/chunk-M7HP3FTK.js.map +0 -1
- package/dist/chunk-MIM5R4ZT.js +0 -14972
- package/dist/chunk-MIM5R4ZT.js.map +0 -1
- package/dist/chunk-RWNDDKOH.js.map +0 -1
- package/dist/chunk-T5IBSPAM.js.map +0 -1
- package/dist/chunk-UNAZSLWE.js.map +0 -1
- package/dist/chunk-WPLAANH4.js.map +0 -1
- package/dist/chunk-Y23G2VZL.js.map +0 -1
- package/dist/chunk-ZIFPHIWZ.js.map +0 -1
- package/src/primitives/useRovingTabIndex.test.ts +0 -48
- package/src/primitives/useRovingTabIndex.ts +0 -88
package/dist/index.d.ts
CHANGED
|
@@ -1,475 +1,33 @@
|
|
|
1
|
+
export { Button, ButtonProps, ButtonSize, ButtonVariant, CloseIcon, CollapseIcon, CurveField, CurveFieldProps, CurveMark, DetailList, DetailListLayout, DetailListProps, DetailListValues, DetailRow, DetailRowProps, DetailRowStatus, ExpandIcon, Icon, IconProps, Input, InputProps, Jog, JogProps, LayerList, LayerListItem, LayerListProps, LayerMove, PauseIcon, PlayIcon, PropertyControl, PropertyControlProps, PropertyField, PropertyFieldProps, PropertyGroup, PropertyGroupProps, PropertyList, PropertyListPack, PropertyListProps, PropertyOption, PropertyPanel, PropertyPanelProps, PropertyRow, PropertyRowLayout, PropertyRowProps, PropertyRowVariant, PropertySpan, PropertySpanProps, ResetIcon, Select, SelectProps, StepBackIcon, StepForwardIcon, StopIcon, Subpanel, SubpanelProps, ToggleBar, ToggleBarItem, ToggleBarProps, ToggleBarSize, ToggleBarVariant, TokenCategory, TokenEntry, TokenPanel, TokenPanelProps, TokenScale, TokenScaleRule, inferTokenType, moveLayers, refitScale } from '@weasel-js/ui';
|
|
2
|
+
import { SceneNode, View, DrawCommand, BuiltinToolId } from '@weasel-js/core';
|
|
3
|
+
import { A as AnnotationMeaning, t as AnnotationData, v as WorldRect, w as MarkStyle, x as MarkScene, y as CaptureSource, z as CaptureOptions, B as CaptureResult, E as PaintableMark, F as AnnotationTarget, G as AnnotationsApi, H as AnnotationsCapability, J as TrialInfo, K as TrialTool, N as AnnotationKind, a as ViewTransform, O as Instrument, q as InstrumentList, o as LabMode, Q as LabDensity, R as TrialContribution, c as StorageAdapter, T as TrialRecord } from './_dts/index-DCMA4Fy1.js';
|
|
4
|
+
export { X as Annotation, Y as AnnotationInit, Z as AnnotationPatch, _ as AnnotationQuery, $ as AnnotationSelectionMode, a0 as AnnotationStatus, a1 as AnnotationStoreOptions, a2 as AnnotationTargetInfo, a3 as AnnotationToolId, a4 as Auto, a5 as CanvasCapability, a6 as CanvasLayer, a7 as CaptureDeps, a8 as ContributionBase, C as CreateLabStoreOptions, D as DEFAULT_FRAME, n as DragDropCapability, m as DragFeedback, a9 as FracPoint, aa as FracRect, ab as HitResult, ac as IconComponent, L as LabDocument, d as LabStoreState, ad as LayerCapability, ae as LayerDescriptor, l as PaletteItem, P as Point, af as RegionContribution, ag as RenderContext, e as SavedSnapshot, ah as SerializedAnnotations, S as SerializedTrial, ai as SidebarSection, aj as SidebarSlotContext, ak as StageCapability, al as StatusReadout, f as StorageChange, am as SystemEvent, an as ToolCapability, ao as ToolItem, ap as ToolSlotContext, aq as ToolbarItem, ar as TrialChromeContext, as as TrialRegion, g as TrialStateHandle, at as UndoCapability, U as UndoStack, h as UndockedPanel, i as UndockedPanels, au as ViewportControl, V as ViewportSize, W as WorldFrame, b as WorldSpec, av as annotationsFromJSON, k as applyCamera, aw as auto, ax as createAnnotationScene, ay as createAnnotationStore, j as dockPanel, az as fracContains, aA as fracEncloses, aB as fracToWorld, aC as isAuto, aD as markCommands, p as panelKey, r as resolveFrame, aE as roundFrac, u as undockPanel, aF as worldToFrac } from './_dts/index-DCMA4Fy1.js';
|
|
1
5
|
import * as react from 'react';
|
|
2
6
|
import { ReactNode } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export {
|
|
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';
|
|
10
|
-
import { StanceProps } from './passthrough/weasel-ui.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';
|
|
7
|
+
import { SvgNode } from '@weasel-js/svg';
|
|
8
|
+
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-D6t7o0pF.js';
|
|
9
|
+
export { C as CanvasLayerDescriptor, a as CanvasStackContext, b as CanvasStackContextValue, c as CanvasStackSurface } from './_dts/CanvasStackContext-Cjy6I-Iv.js';
|
|
10
|
+
import { L as LabContribution } from './_dts/index-BTmaRy6a.js';
|
|
11
|
+
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 TRANSIENT_BUILTINS, n as TitleBarPlacement, o as TitleBarRegion, p as TitleBarRegionProps, q as ToolbarRegion, r as ToolbarRegionProps, V as ViewportRegion, s as ViewportRegionProps, t as addTrial, u as builtinContributions, v as cloneTrial, w as closeTrial, x as contributionsIn, y as labContributions, z as mergeContributions, B as reorderTrials, C as resetTrial, D as suppressContributions, E as toolContributions, F as useLabChromeContext, G as useLabContext } from './_dts/index-BTmaRy6a.js';
|
|
20
12
|
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';
|
|
21
|
-
import {
|
|
22
|
-
export { A as Annotations, B as BranchAnnotations,
|
|
13
|
+
import { C as ConfigSchema, a as ConfigField, b as ConfigRule, c as ControlRenderer } from './_dts/types-BUBSIZuV.js';
|
|
14
|
+
export { A as Annotations, B as BranchAnnotations, d as BranchOptions, e as CheckboxField, f as ColorField, g as ConfigBranch, h as ConfigEntry, i as ConfigFieldBase, j as ConfigFieldType, k as ConfigNode, l as ConfigOf, m as ConfigOption, n 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-BUBSIZuV.js';
|
|
23
15
|
export { ControlPanel, inDialog, summarizeValue } from './controls/index.js';
|
|
24
16
|
import { J as JobHandle } from './_dts/types-DJ79Tg5J.js';
|
|
25
17
|
export { a as JobCapability, b as JobEvent, c as JobFailure, d as JobStatus } from './_dts/types-DJ79Tg5J.js';
|
|
26
18
|
export { UseJobOptions, useJob } from './job/index.js';
|
|
27
19
|
import { Theme, ColorList } from '@weasel-js/theme';
|
|
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';
|
|
29
20
|
export { a as FloatingPanel, F as FloatingPanelProps } from './_dts/FloatingPanel-7j0IcXwz.js';
|
|
30
|
-
|
|
31
|
-
export {
|
|
21
|
+
import { SplitProps } from './primitives/index.js';
|
|
22
|
+
export { FpsMeter, JobProgress, JobProgressProps, Legend, LegendEntry, LegendMark, LegendProps, Readout, ReadoutProps, ReadoutRow, ScaleIndicator, ScaleIndicatorProps, Split, StatusBar, StatusBarProps, StatusBarSectionProps, Toolbar, ToolbarButtonProps, ToolbarGroupProps, ToolbarProps, ZoomControl, ZoomControlProps } from './primitives/index.js';
|
|
23
|
+
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-Bh8bzFgE.js';
|
|
24
|
+
export { Box, Rect, SurfaceCanvasContext, SurfaceCanvases, SurfaceClear, SurfaceContext, SurfaceFrame, SurfaceHandle, SurfaceLayer, TilePainter, UseTiledSurfaceOptions, composeRects, toDeviceRect, useSurface, useSurfaceCanvas, useSurfaceOptional, useSurfaceTile, useTileId, useTiledSurface } from './surface/index.js';
|
|
32
25
|
export { EventBus, EventListener, clearUndo, createEventBus, emptyStack, pushSnapshot, redo, undo } from './undo/index.js';
|
|
33
|
-
import '
|
|
26
|
+
import '@weasel-js/geom';
|
|
27
|
+
import '@weasel-js/quantity';
|
|
34
28
|
import 'windease';
|
|
35
29
|
import 'zustand/vanilla';
|
|
36
30
|
|
|
37
|
-
declare const ResetIcon: (p: IconProps) => react.JSX.Element;
|
|
38
|
-
declare const CloseIcon: (p: IconProps) => react.JSX.Element;
|
|
39
|
-
declare const PlayIcon: (p: IconProps) => react.JSX.Element;
|
|
40
|
-
declare const PauseIcon: (p: IconProps) => react.JSX.Element;
|
|
41
|
-
declare const StopIcon: (p: IconProps) => react.JSX.Element;
|
|
42
|
-
declare const StepBackIcon: (p: IconProps) => react.JSX.Element;
|
|
43
|
-
declare const StepForwardIcon: (p: IconProps) => react.JSX.Element;
|
|
44
|
-
declare const CollapseIcon: (p: IconProps) => react.JSX.Element;
|
|
45
|
-
declare const ExpandIcon: (p: IconProps) => react.JSX.Element;
|
|
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
|
-
|
|
270
|
-
/** An annotation drawn over a curve plot: a shaded band across a range of x,
|
|
271
|
-
* or a vertical line at one x. */
|
|
272
|
-
type CurveMark = {
|
|
273
|
-
kind: 'band';
|
|
274
|
-
x: [number, number];
|
|
275
|
-
color?: string;
|
|
276
|
-
} | {
|
|
277
|
-
kind: 'line';
|
|
278
|
-
x: number;
|
|
279
|
-
color?: string;
|
|
280
|
-
};
|
|
281
|
-
/** Props for `<CurveField>`. */
|
|
282
|
-
interface CurveFieldProps {
|
|
283
|
-
/** Flat [x0, y0, x1, y1, …] — matches how curve-as-array configs
|
|
284
|
-
* serialize in JSON snapshots. */
|
|
285
|
-
values: number[];
|
|
286
|
-
min: number;
|
|
287
|
-
max: number;
|
|
288
|
-
step: number;
|
|
289
|
-
/** Plot width in CSS px. Caller sizes (typically uses a ResizeObserver). */
|
|
290
|
-
width: number;
|
|
291
|
-
/** Plot height in CSS px. Default 110. */
|
|
292
|
-
height?: number;
|
|
293
|
-
/** Flat default curve. When provided, a Reset button restores it. */
|
|
294
|
-
defaults?: readonly number[];
|
|
295
|
-
onChange: (next: number[]) => void;
|
|
296
|
-
/** Optional vertical marks overlaid on the plot (e.g. landmarks). */
|
|
297
|
-
marks?: readonly CurveMark[];
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* A function-domain (y = f(x), x ∈ [0,1]) curve editor with per-stop
|
|
301
|
-
* numeric readouts and flip buttons. Wraps weasel-ui's
|
|
302
|
-
* `CurveEditor`; consumers wanting the raw editor (2D paths,
|
|
303
|
-
* custom anchors) should import that instead.
|
|
304
|
-
*/
|
|
305
|
-
declare function CurveField({ values, min, max, step, width, height, defaults, onChange, marks, }: CurveFieldProps): react.JSX.Element;
|
|
306
|
-
|
|
307
|
-
/** Props for `<PropertyGroup>`. */
|
|
308
|
-
interface PropertyGroupProps extends PropertyMetricProps, StanceProps {
|
|
309
|
-
/** Title rendered between two rules at the top of the group. */
|
|
310
|
-
title: ReactNode;
|
|
311
|
-
/** Before the title: a drag handle, an ordinal. Clicks here do not fold the group. */
|
|
312
|
-
leading?: ReactNode;
|
|
313
|
-
/** After the title: a summary of the group's value, a remove button. Clicks here do not fold the group. */
|
|
314
|
-
actions?: ReactNode;
|
|
315
|
-
/** Help text for the whole group, drawn under the title and above the
|
|
316
|
-
* rows. `<PropertyRow description>` covers the per-row case. */
|
|
317
|
-
description?: ReactNode;
|
|
318
|
-
/** When true the group renders nothing — useful for conditional sections. */
|
|
319
|
-
hidden?: boolean;
|
|
320
|
-
/**
|
|
321
|
-
* Give the title a twisty that folds the rows away. Implied by any of the
|
|
322
|
-
* three props below, so it is only needed for a group that starts open and
|
|
323
|
-
* keeps its own state.
|
|
324
|
-
*/
|
|
325
|
-
collapsible?: boolean;
|
|
326
|
-
/** Start folded. Read once; the group owns the state from then on. */
|
|
327
|
-
defaultCollapsed?: boolean;
|
|
328
|
-
/**
|
|
329
|
-
* Folded or not, as the consumer holds it. Given, the group keeps no state
|
|
330
|
-
* of its own and every toggle arrives at `onCollapsedChange` instead — which
|
|
331
|
-
* is what a panel that remembers its sections past a reload needs.
|
|
332
|
-
*/
|
|
333
|
-
collapsed?: boolean;
|
|
334
|
-
onCollapsedChange?: (next: boolean) => void;
|
|
335
|
-
children: ReactNode;
|
|
336
|
-
className?: string;
|
|
337
|
-
/** Take the whole width of a packed grid, like `<PropertyRow span>`: a group
|
|
338
|
-
* lays its own rows out, so half a column leaves them overlapping. */
|
|
339
|
-
span?: boolean;
|
|
340
|
-
/** How rows pack into the 2-column grid — see `<PropertyList pack>`. */
|
|
341
|
-
pack?: PropertyListPack;
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Visually-bordered group inside a PropertyList. Use to scope a set of
|
|
345
|
-
* related rows under a heading (e.g. "Aqua", "Bevel", "Dome" sections
|
|
346
|
-
* inside a fill effect's controls).
|
|
347
|
-
*
|
|
348
|
-
* A collapsible group keeps its rows mounted and hides them, so a control's
|
|
349
|
-
* local state survives being folded away. `stance` and `tone` work as on
|
|
350
|
-
* `<PropertyPanel>`; a tone also draws the group's leading edge in it, which
|
|
351
|
-
* is how a list of like groups — effects, tails — tells its members apart.
|
|
352
|
-
* `leading` and `actions` put a handle and controls in the title row, and the
|
|
353
|
-
* groups of a `<PropertyList>` reorder with `useReorderDragList`.
|
|
354
|
-
*/
|
|
355
|
-
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;
|
|
356
|
-
|
|
357
|
-
/** Props for `<Subpanel>`. */
|
|
358
|
-
interface SubpanelProps extends PropertyMetricProps, StanceProps {
|
|
359
|
-
title: ReactNode;
|
|
360
|
-
children: ReactNode;
|
|
361
|
-
className?: string;
|
|
362
|
-
}
|
|
363
|
-
/** A typographic divider inside a property list: a small title flanked by a
|
|
364
|
-
* rule. Purely a heading — use `<PropertyGroup>` for a bordered section. A
|
|
365
|
-
* stance or tone colors the title and rule. */
|
|
366
|
-
declare function Subpanel({ title, children, className, density, align, stance, tone }: SubpanelProps): react.JSX.Element;
|
|
367
|
-
|
|
368
|
-
/** A design token as `TokenPanel` edits it. */
|
|
369
|
-
interface TokenEntry {
|
|
370
|
-
/** The custom property, e.g. `--wzl-gray-50`. */
|
|
371
|
-
name: string;
|
|
372
|
-
/** A DTCG type name. A type the panel has no control for edits as text. */
|
|
373
|
-
type: string;
|
|
374
|
-
/** Tokens sharing a group sit together; a color group large enough draws as one row of swatches. */
|
|
375
|
-
group: string;
|
|
376
|
-
value: string;
|
|
377
|
-
/** Whether `value` overrides the token's own, which offers Reset. */
|
|
378
|
-
overridden?: boolean;
|
|
379
|
-
description?: string;
|
|
380
|
-
}
|
|
381
|
-
/** How a scale's steps follow from its base: one multiplier per step, a constant ratio, or a constant step. */
|
|
382
|
-
type TokenScaleRule = {
|
|
383
|
-
kind: 'factors';
|
|
384
|
-
factors: readonly number[];
|
|
385
|
-
} | {
|
|
386
|
-
kind: 'ratio';
|
|
387
|
-
ratio: number;
|
|
388
|
-
} | {
|
|
389
|
-
kind: 'step';
|
|
390
|
-
step: number;
|
|
391
|
-
};
|
|
392
|
-
/** A group whose steps are generated from a base, so the panel edits the base and the rule rather than each step. */
|
|
393
|
-
interface TokenScale {
|
|
394
|
-
/** The generated tokens, smallest first. Anything else in the group draws as an ordinary step. */
|
|
395
|
-
tokens: readonly string[];
|
|
396
|
-
base: number;
|
|
397
|
-
rule: TokenScaleRule;
|
|
398
|
-
}
|
|
399
|
-
/**
|
|
400
|
-
* The same scale under another rule, fitted to the amounts its steps have now.
|
|
401
|
-
* A ratio or step counts from the first step, so switching to one moves the
|
|
402
|
-
* base there.
|
|
403
|
-
*/
|
|
404
|
-
declare function refitScale(scale: TokenScale, kind: TokenScaleRule['kind'], amounts: readonly number[]): TokenScale;
|
|
405
|
-
type TokenCategory = 'color' | 'type' | 'size' | 'motion' | 'depth' | 'other';
|
|
406
|
-
/** A DTCG type read off the shape of a value, for a token that arrives without one. `'string'` when nothing fits. */
|
|
407
|
-
declare function inferTokenType(value: string): string;
|
|
408
|
-
|
|
409
|
-
type OnChange = (name: string, value: string | null) => void;
|
|
410
|
-
/** Props for `<TokenPanel>`. */
|
|
411
|
-
interface TokenPanelProps {
|
|
412
|
-
tokens: readonly TokenEntry[];
|
|
413
|
-
/** A token's new value, or null to drop its override. Keep it stable: rows re-render only when it or their token changes. */
|
|
414
|
-
onChange: OnChange;
|
|
415
|
-
/** Sections held closed, by category. Omit to let the panel keep that state itself. */
|
|
416
|
-
collapsed?: Readonly<Partial<Record<TokenCategory, boolean>>>;
|
|
417
|
-
onCollapsedChange?: (category: TokenCategory, collapsed: boolean) => void;
|
|
418
|
-
/** Groups generated from a base, by group name. Such a group edits its base and rule above its steps. */
|
|
419
|
-
scales?: Readonly<Record<string, TokenScale>>;
|
|
420
|
-
/** A scale's new base or rule. The panel does not regenerate the steps; the consumer does, through `onChange`. */
|
|
421
|
-
onScaleChange?: (group: string, scale: TokenScale) => void;
|
|
422
|
-
/** Files a token under a section. Defaults to `tokenCategory`. */
|
|
423
|
-
categorize?: (token: TokenEntry) => TokenCategory;
|
|
424
|
-
/** The fewest colors, or sizes, sharing a group that draw as one row of swatches or one grid of steps. Default 3. */
|
|
425
|
-
familySize?: number;
|
|
426
|
-
/**
|
|
427
|
-
* Row layout. `tight` puts a token on one line — name, control, Reset — with the
|
|
428
|
-
* names on a fixed rail so the values read down the panel as a column, and caps
|
|
429
|
-
* the field rather than letting it span the panel. Default `normal` stacks the
|
|
430
|
-
* control under its name.
|
|
431
|
-
*/
|
|
432
|
-
density?: 'tight' | 'normal';
|
|
433
|
-
className?: string;
|
|
434
|
-
}
|
|
435
|
-
/**
|
|
436
|
-
* Edits a set of design tokens by type: collapsible sections by category, a
|
|
437
|
-
* color group drawn as one row of swatches sized to fit, a group of sizes drawn
|
|
438
|
-
* as one grid of numbers labeled by step — with its base and rule above it when
|
|
439
|
-
* `scales` says how it is generated — and a control for each
|
|
440
|
-
* type — a number with its unit for dimensions and durations, the nine weights
|
|
441
|
-
* for a font weight, a curve beside a `cubic-bezier()`, a swatch beside a color,
|
|
442
|
-
* and text for everything else.
|
|
443
|
-
*/
|
|
444
|
-
declare function TokenPanel({ tokens, onChange, collapsed, onCollapsedChange, scales, onScaleChange, categorize, familySize, density, className, }: TokenPanelProps): react.JSX.Element;
|
|
445
|
-
|
|
446
|
-
/** Props for {@link Jog}. */
|
|
447
|
-
interface JogProps {
|
|
448
|
-
/** Which step is showing, 0-based. */
|
|
449
|
-
index: number;
|
|
450
|
-
/** How many steps there are. */
|
|
451
|
-
count: number;
|
|
452
|
-
playing: boolean;
|
|
453
|
-
onPlay: (playing: boolean) => void;
|
|
454
|
-
/** Move one step, back or forward. */
|
|
455
|
-
onStep: (by: -1 | 1) => void;
|
|
456
|
-
/** Jump to a step. Left out, no scrubber is drawn. */
|
|
457
|
-
onScrub?: (index: number) => void;
|
|
458
|
-
/** What one step is called, for the spoken labels. Defaults to `Step`. */
|
|
459
|
-
unit?: string;
|
|
460
|
-
/** Drawn after the readout — a beat's caption, a snapshot's date. */
|
|
461
|
-
caption?: ReactNode;
|
|
462
|
-
className?: string;
|
|
463
|
-
}
|
|
464
|
-
/**
|
|
465
|
-
* Transport for something counted rather than timed: beat 3 of 24, not 4.20s of 12.00s.
|
|
466
|
-
* `<Transport>` is the continuous-time one, and wants a playhead in milliseconds, a rate and
|
|
467
|
-
* a loop, none of which a list of steps has.
|
|
468
|
-
*
|
|
469
|
-
* Named for the jog of jog/shuttle — moving one frame at a time, as against running at speed.
|
|
470
|
-
*/
|
|
471
|
-
declare function Jog(props: JogProps): react.JSX.Element;
|
|
472
|
-
|
|
473
31
|
/** What resolving a mark's appearance needs beyond the mark itself. */
|
|
474
32
|
interface MarkDrawOptions {
|
|
475
33
|
/** The target's content box — the world a mark's geometry is in. */
|
|
@@ -509,6 +67,8 @@ type CapturePlan = 'svg-document' | 'raster-stack';
|
|
|
509
67
|
* base.
|
|
510
68
|
*/
|
|
511
69
|
declare function capturePlan(base: CaptureSource | undefined, format: 'png' | 'svg'): CapturePlan;
|
|
70
|
+
/** Inputs to `composeCaptureSvg`. `scale` is output pixels per content-box
|
|
71
|
+
* unit; `onWarn` receives non-fatal export warnings. */
|
|
512
72
|
interface ComposeSvgArgs {
|
|
513
73
|
base?: CaptureSource;
|
|
514
74
|
scene: MarkScene;
|
|
@@ -522,7 +82,10 @@ interface ComposeSvgArgs {
|
|
|
522
82
|
* The outer `viewBox` is the content box, so marks — which are already in it —
|
|
523
83
|
* need no transform, and `width`/`height` carry the export scale. Both halves
|
|
524
84
|
* nest as child `<svg>` elements, which each establish their own viewport and
|
|
525
|
-
* so keep their own `viewBox`
|
|
85
|
+
* so keep their own `viewBox` math out of this function.
|
|
86
|
+
*
|
|
87
|
+
* Synchronous with no `warmSvg`: marks export nothing that loads on demand,
|
|
88
|
+
* which `svgNodes.test.ts` pins.
|
|
526
89
|
*/
|
|
527
90
|
declare function composeCaptureSvg(args: ComposeSvgArgs): string;
|
|
528
91
|
/** What a capture needs about the target it is exporting. */
|
|
@@ -581,250 +144,6 @@ declare function seenFrom(config: unknown, keys: readonly string[]): Record<stri
|
|
|
581
144
|
*/
|
|
582
145
|
declare function isStale(seen: Readonly<Record<string, unknown>> | undefined, config: unknown, keys: readonly string[]): boolean;
|
|
583
146
|
|
|
584
|
-
type Mat3 = readonly [number, number, number, number, number, number];
|
|
585
|
-
|
|
586
|
-
/**
|
|
587
|
-
* Public types for `@weasel-js/svg`. The package exposes a flat,
|
|
588
|
-
* discriminated-union node model (`SvgNode`) that mirrors the SVG element
|
|
589
|
-
* tree but uses weasel-native leaf data (`Path`, `FillStyle`) for geometry and
|
|
590
|
-
* paint.
|
|
591
|
-
*
|
|
592
|
-
* Parsing collapses every `transform="..."` onto its descendants' geometry,
|
|
593
|
-
* so the `SvgNode` tree returned from `parseSvg` never has a non-identity
|
|
594
|
-
* group transform. Consumers may still construct groups with explicit
|
|
595
|
-
* transforms before serializing, in which case the serializer emits a
|
|
596
|
-
* single `matrix(a b c d e f)` on the `<g>`.
|
|
597
|
-
*/
|
|
598
|
-
|
|
599
|
-
/**
|
|
600
|
-
* Opaque pass-through bag for namespaced XML content.
|
|
601
|
-
*
|
|
602
|
-
* weasel-svg does not interpret the contents — it only ensures that any
|
|
603
|
-
* attributes or child elements in a *declared* XML namespace round-trip
|
|
604
|
-
* losslessly through parse → serialize. Consumers (e.g. an app-specific
|
|
605
|
-
* bridge layer) hang their domain semantics off this structure.
|
|
606
|
-
*
|
|
607
|
-
* Keyed by namespace prefix (the prefix is a write-time choice; the URI
|
|
608
|
-
* is the canonical identifier and is supplied via `ParseOptions.namespaces`
|
|
609
|
-
* / `SerializeOptions.namespaces`).
|
|
610
|
-
*/
|
|
611
|
-
interface NamespaceMeta {
|
|
612
|
-
[prefix: string]: {
|
|
613
|
-
/** Local-name → string-value map for attributes in this namespace. */
|
|
614
|
-
attrs?: Record<string, string>;
|
|
615
|
-
/**
|
|
616
|
-
* Child elements in this namespace, keyed by local name. Each entry
|
|
617
|
-
* is an array because a namespace can host multiple sibling elements
|
|
618
|
-
* with the same tag (e.g. `<wd:layer/><wd:layer/>`).
|
|
619
|
-
*/
|
|
620
|
-
elements?: Record<string, NamespacedElement[]>;
|
|
621
|
-
};
|
|
622
|
-
}
|
|
623
|
-
/** Opaque structured representation of a namespaced element. */
|
|
624
|
-
interface NamespacedElement {
|
|
625
|
-
/** Attribute local-name → string-value. */
|
|
626
|
-
attrs: Record<string, string>;
|
|
627
|
-
/** Text content, when the element contains only text (no child elements). */
|
|
628
|
-
text?: string;
|
|
629
|
-
/** Nested namespaced children, keyed by local name (recursive). */
|
|
630
|
-
children?: Record<string, NamespacedElement[]>;
|
|
631
|
-
}
|
|
632
|
-
/**
|
|
633
|
-
* 2x3 affine matrix in SVG's `matrix(a b c d e f)` order, mapping
|
|
634
|
-
* `[x', y'] = [a*x + c*y + e, b*x + d*y + f]`.
|
|
635
|
-
*
|
|
636
|
-
* The same order the kernel's affine tier uses, so this is that type under
|
|
637
|
-
* the name the SVG spec gives it — not a parallel one. An `SvgGroupNode`'s
|
|
638
|
-
* transform and a geom `Mat3` are interchangeable without a conversion.
|
|
639
|
-
*/
|
|
640
|
-
type Matrix = Mat3;
|
|
641
|
-
/**
|
|
642
|
-
* FillStyle description in the SVG sense — either explicit `none`, a solid
|
|
643
|
-
* color, or a reference to a weasel-native gradient `FillStyle`. Solid colors
|
|
644
|
-
* are normalized to `#rrggbb` strings; opacity is carried separately so
|
|
645
|
-
* `fill-opacity` and `stroke-opacity` round-trip cleanly.
|
|
646
|
-
*/
|
|
647
|
-
type SvgPaint = {
|
|
648
|
-
kind: 'none';
|
|
649
|
-
} | {
|
|
650
|
-
kind: 'solid';
|
|
651
|
-
color: string;
|
|
652
|
-
opacity?: number;
|
|
653
|
-
} | {
|
|
654
|
-
kind: 'gradient';
|
|
655
|
-
paint: FillStyle;
|
|
656
|
-
};
|
|
657
|
-
/** Stroke description: a paint plus structural line parameters. */
|
|
658
|
-
interface SvgStroke {
|
|
659
|
-
paint: SvgPaint;
|
|
660
|
-
/** World units, or `{ px }` for a width that holds its rendered thickness
|
|
661
|
-
* however the document is scaled — SVG's `vector-effect="non-scaling-stroke"`.
|
|
662
|
-
* Literally the kit's own unit, not a second spelling of it. */
|
|
663
|
-
width: ScreenLength;
|
|
664
|
-
opacity?: number;
|
|
665
|
-
/** `stroke-linecap`. Default per SVG spec is `'butt'`. */
|
|
666
|
-
cap?: 'butt' | 'round' | 'square';
|
|
667
|
-
/** `stroke-linejoin`. Default per SVG spec is `'miter'`. SVG's `arcs` / `miter-clip` map to `'miter'` with a warning. */
|
|
668
|
-
join?: 'miter' | 'round' | 'bevel';
|
|
669
|
-
/** `stroke-dasharray` as a flat number array. Odd-length inputs are doubled per SVG spec. */
|
|
670
|
-
dash?: number[];
|
|
671
|
-
/**
|
|
672
|
-
* `stroke-miterlimit`. SVG's default is 4. Weasel's renderer defaults to
|
|
673
|
-
* 10 (Canvas2D) when unset, so parsed strokes without an explicit
|
|
674
|
-
* attribute may render with longer miters than the source SVG intended.
|
|
675
|
-
*/
|
|
676
|
-
miterLimit?: number;
|
|
677
|
-
/** The kit stroke's `align`. SVG has no stroke alignment, so the serializer
|
|
678
|
-
* writes the stroke centered and says so through `onWarn`; the parser
|
|
679
|
-
* never sets it. */
|
|
680
|
-
align?: StrokeAlign;
|
|
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;
|
|
687
|
-
}
|
|
688
|
-
/**
|
|
689
|
-
* Leaf node: a path geometry plus fill/stroke. All other v1 shapes
|
|
690
|
-
* (`<rect>`, `<ellipse>`, etc.) are lowered to this representation on
|
|
691
|
-
* parse — `<rect>` uses weasel's `RectPath` fast-path subtype when
|
|
692
|
-
* possible, everything else becomes a `PolygonPath`.
|
|
693
|
-
*/
|
|
694
|
-
interface SvgPathNode {
|
|
695
|
-
kind: 'path';
|
|
696
|
-
path: Path;
|
|
697
|
-
fill: SvgPaint;
|
|
698
|
-
stroke?: SvgStroke;
|
|
699
|
-
/** Element-level opacity (`opacity="..."`), 0..1. */
|
|
700
|
-
opacity?: number;
|
|
701
|
-
/** Element-level rotation in **radians**, pivoting around the AABB
|
|
702
|
-
* center of the underlying `path` geometry. Emitted as SVG
|
|
703
|
-
* `transform="rotate(angleDegrees cx cy)"`. */
|
|
704
|
-
rotation?: number;
|
|
705
|
-
/** Opaque per-element bag for declared namespaces. See `NamespaceMeta`. */
|
|
706
|
-
meta?: NamespaceMeta;
|
|
707
|
-
}
|
|
708
|
-
/**
|
|
709
|
-
* Group node: an SVG `<g>`. On parse, `transform` is always omitted (any
|
|
710
|
-
* `transform` attribute is collapsed onto descendants' geometry). On
|
|
711
|
-
* serialize, a non-identity `transform` is emitted as
|
|
712
|
-
* `matrix(a b c d e f)`.
|
|
713
|
-
*/
|
|
714
|
-
interface SvgGroupNode {
|
|
715
|
-
kind: 'group';
|
|
716
|
-
children: SvgNode[];
|
|
717
|
-
transform?: Matrix;
|
|
718
|
-
/** Clips the group's contents. Serializes to a `<clipPath>` def plus
|
|
719
|
-
* `clip-path="url(#id)"`, and lives in the same space as `children` —
|
|
720
|
-
* SVG applies the group's own `transform` to the clip as well.
|
|
721
|
-
* A `<clipPath>` of more than one shape parses back as no clip: SVG
|
|
722
|
-
* unions them and a `Path` holds one outline. */
|
|
723
|
-
clip?: Path;
|
|
724
|
-
opacity?: number;
|
|
725
|
-
/** Opaque per-element bag for declared namespaces. See `NamespaceMeta`. */
|
|
726
|
-
meta?: NamespaceMeta;
|
|
727
|
-
}
|
|
728
|
-
/**
|
|
729
|
-
* Text leaf node. Mirrors the kit's `TextPose` shape — a bounding box plus
|
|
730
|
-
* text content, optional rich-text `runs` (per-range styling), and an
|
|
731
|
-
* optional `TextStyle` for the node-wide defaults.
|
|
732
|
-
*
|
|
733
|
-
* Note on SVG text geometry: native `<text>` flows from a baseline; it
|
|
734
|
-
* doesn't have width/height attributes. The serializer emits
|
|
735
|
-
* `dominant-baseline="text-before-edge"` so `y` is the top of the text
|
|
736
|
-
* box, plus `data-weasel-width` / `data-weasel-height` so weasel's
|
|
737
|
-
* explicit box dimensions round-trip losslessly. External SVG text
|
|
738
|
-
* (lacking the data-* attrs) imports with the width the kit's text layout
|
|
739
|
-
* measures — an em-based estimate when no registered font can — and
|
|
740
|
-
* `height = fontSize * lineHeight * (lineCount || 1)`.
|
|
741
|
-
*
|
|
742
|
-
* `x` here is always the box's left edge. In the SVG it is the
|
|
743
|
-
* `text-anchor` point, and the parser and serializer convert between them.
|
|
744
|
-
*/
|
|
745
|
-
interface SvgTextNode {
|
|
746
|
-
kind: 'text';
|
|
747
|
-
x: number;
|
|
748
|
-
y: number;
|
|
749
|
-
width: number;
|
|
750
|
-
height: number;
|
|
751
|
-
/** Plain text. When `runs` is set, `runsToPlainText(runs)` must equal `text`. */
|
|
752
|
-
text: string;
|
|
753
|
-
/** Optional per-range styling — same shape as `TextPose.runs`. */
|
|
754
|
-
runs?: StyledRun[];
|
|
755
|
-
/** Node-wide typography. Defaults applied at render time via `resolveTextStyle`. */
|
|
756
|
-
style?: TextStyle;
|
|
757
|
-
/** Where the laid-out text sits inside the box — `kit:text`'s
|
|
758
|
-
* `data.verticalAlign`. SVG text has no box to align in, so this rides in
|
|
759
|
-
* `data-weasel-vertical-align` and other readers draw the text top-aligned. */
|
|
760
|
-
verticalAlign?: TextVerticalAlign;
|
|
761
|
-
/**
|
|
762
|
-
* Node-wide glyph paint, the `FillStyle` / `Stroke` a kit text node holds
|
|
763
|
-
* in `data.fill` / `data.stroke`. Not `SvgPaint`, which is the path
|
|
764
|
-
* nodes' shape — a text paint reaches the renderer through the runs, and
|
|
765
|
-
* `StyledRun.fill` / `.stroke` override these per range.
|
|
766
|
-
*
|
|
767
|
-
* `null` is SVG's `fill="none"`: outline-only text, painted by its stroke
|
|
768
|
-
* alone. Absent takes the default black.
|
|
769
|
-
*/
|
|
770
|
-
fill?: FillStyle | null;
|
|
771
|
-
stroke?: Stroke;
|
|
772
|
-
/** Element-level opacity (`opacity="..."`), 0..1. */
|
|
773
|
-
opacity?: number;
|
|
774
|
-
/** Element-level rotation in **radians**, pivoting around the unrotated
|
|
775
|
-
* AABB center `(x + width/2, y + height/2)`. Emitted as SVG
|
|
776
|
-
* `transform="rotate(angleDegrees cx cy)"`. */
|
|
777
|
-
rotation?: number;
|
|
778
|
-
/** Opaque per-element bag for declared namespaces. See `NamespaceMeta`. */
|
|
779
|
-
meta?: NamespaceMeta;
|
|
780
|
-
}
|
|
781
|
-
/**
|
|
782
|
-
* Raster-image leaf — an SVG `<image>`. `href` is the element's `href` (or
|
|
783
|
-
* legacy `xlink:href`) verbatim: an external URL or a `data:` URI. The
|
|
784
|
-
* package neither fetches nor decodes it, so an external URL round-trips as
|
|
785
|
-
* a reference and only resolves when something downstream loads it.
|
|
786
|
-
*
|
|
787
|
-
* SVG's `preserveAspectRatio` is not modeled; the box is taken literally.
|
|
788
|
-
*
|
|
789
|
-
* With a `source` rect or a flip, the element is written as a `<g
|
|
790
|
-
* data-weasel-image>` holding a nested `<svg>` viewport at the box, whose
|
|
791
|
-
* `viewBox` is the source window over a unit-square `<image>` — plain SVG 1.1,
|
|
792
|
-
* which any reader crops and mirrors the same way, and which `parseSvg` reads
|
|
793
|
-
* back as one image node.
|
|
794
|
-
*/
|
|
795
|
-
interface SvgImageNode {
|
|
796
|
-
kind: 'image';
|
|
797
|
-
href: string;
|
|
798
|
-
x: number;
|
|
799
|
-
y: number;
|
|
800
|
-
width: number;
|
|
801
|
-
height: number;
|
|
802
|
-
/** The part of the bitmap drawn into the box, as fractions of the bitmap's
|
|
803
|
-
* width and height from its top-left. Omitted draws the whole bitmap.
|
|
804
|
-
* Fractions rather than bitmap pixels because this package never decodes
|
|
805
|
-
* the image, so it cannot know its size. */
|
|
806
|
-
source?: {
|
|
807
|
-
x: number;
|
|
808
|
-
y: number;
|
|
809
|
-
width: number;
|
|
810
|
-
height: number;
|
|
811
|
-
};
|
|
812
|
-
/** Mirror the drawn region within the box, as `ImageDrawCommand` does. The
|
|
813
|
-
* box does not move. */
|
|
814
|
-
flipX?: boolean;
|
|
815
|
-
flipY?: boolean;
|
|
816
|
-
/** Element-level opacity (`opacity="..."`), 0..1. */
|
|
817
|
-
opacity?: number;
|
|
818
|
-
/** Element-level rotation in **radians**, pivoting around the unrotated
|
|
819
|
-
* AABB center `(x + width/2, y + height/2)`. Emitted as SVG
|
|
820
|
-
* `transform="rotate(angleDegrees cx cy)"`. */
|
|
821
|
-
rotation?: number;
|
|
822
|
-
/** Opaque per-element bag for declared namespaces. See `NamespaceMeta`. */
|
|
823
|
-
meta?: NamespaceMeta;
|
|
824
|
-
}
|
|
825
|
-
/** Discriminated-union node — the leaf of the public tree. */
|
|
826
|
-
type SvgNode = SvgPathNode | SvgGroupNode | SvgTextNode | SvgImageNode;
|
|
827
|
-
|
|
828
147
|
/**
|
|
829
148
|
* One mark as SVG nodes, converted from the very commands the pane paints.
|
|
830
149
|
*
|
|
@@ -832,10 +151,7 @@ type SvgNode = SvgPathNode | SvgGroupNode | SvgTextNode | SvgImageNode;
|
|
|
832
151
|
* and this is a translation of it. `serializeSvg` turns the result into a
|
|
833
152
|
* document.
|
|
834
153
|
*/
|
|
835
|
-
declare function markSvgNodes(m: PaintableMark,
|
|
836
|
-
w: number;
|
|
837
|
-
h: number;
|
|
838
|
-
}, style?: MarkStyle): SvgNode[];
|
|
154
|
+
declare function markSvgNodes(m: PaintableMark, style?: MarkStyle, scale?: View['scale']): SvgNode[];
|
|
839
155
|
|
|
840
156
|
/** Props for `<AnnotationOverlay>`. */
|
|
841
157
|
interface AnnotationOverlayProps {
|
|
@@ -1079,7 +395,7 @@ type LabProps = LabBaseProps & ({
|
|
|
1079
395
|
});
|
|
1080
396
|
/** The lab runtime: opens the store, provides it, and renders one trial
|
|
1081
397
|
* per record in a grid. Each trial runs one of `instruments`. */
|
|
1082
|
-
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> |
|
|
398
|
+
declare function Lab(props: LabProps): string | number | bigint | boolean | react.JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | null;
|
|
1083
399
|
|
|
1084
400
|
/** Props for `<LabBoundary>`. */
|
|
1085
401
|
interface LabBoundaryProps {
|
|
@@ -1175,6 +491,7 @@ type TrialLayout = Record<string, {
|
|
|
1175
491
|
rows?: number;
|
|
1176
492
|
};
|
|
1177
493
|
}>;
|
|
494
|
+
/** Props for `Workspace`. */
|
|
1178
495
|
interface WorkspaceProps {
|
|
1179
496
|
children: ReactNode;
|
|
1180
497
|
/**
|
|
@@ -1203,7 +520,7 @@ interface WorkspaceProps {
|
|
|
1203
520
|
padding?: number;
|
|
1204
521
|
/** Undocked sidebar panels to render alongside the trials. A `'tile'` panel
|
|
1205
522
|
* joins the grid as a peer of the trials; a `'floating'` one goes into the
|
|
1206
|
-
* floating zone above it. The body is
|
|
523
|
+
* floating zone above it. The body is portaled in by the trial that owns
|
|
1207
524
|
* it, so all this renders is the frame and the host. */
|
|
1208
525
|
panels?: readonly PanelDescriptor[];
|
|
1209
526
|
/**
|
|
@@ -1223,6 +540,20 @@ interface PanelDescriptor {
|
|
|
1223
540
|
title: string;
|
|
1224
541
|
as: 'tile' | 'floating';
|
|
1225
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Auto-balanced tiling of trials, `ceil(sqrt(n))` columns wide.
|
|
545
|
+
*
|
|
546
|
+
* Tiles are absolutely positioned at the rects `gridStrategy` computes, not
|
|
547
|
+
* laid out by CSS — `windease/styles.css` (folded into
|
|
548
|
+
* `@weasel-js/labkit/styles.css`) carries the rules that positioning depends on.
|
|
549
|
+
*
|
|
550
|
+
* `panels` are undocked sidebar sections. A `'tile'` panel is registered as a
|
|
551
|
+
* peer of the trials under `PANEL_KIND`, so the grid places and resizes it like
|
|
552
|
+
* one; a `'floating'` panel goes in the overlay above. Either way this renders
|
|
553
|
+
* only the frame and an empty host: the section's content is portaled in by
|
|
554
|
+
* the trial that owns it, which is what keeps a torn-out section inside its
|
|
555
|
+
* trial's React tree instead of rebuilding it as a sibling.
|
|
556
|
+
*/
|
|
1226
557
|
declare function Workspace({ children, ids, panels, resizable, reorderable, onReorder, layout, onLayoutChange, gap, padding, viewport, }: WorkspaceProps): react.JSX.Element;
|
|
1227
558
|
|
|
1228
559
|
/** The specimen's sections, in page order. */
|
|
@@ -1240,6 +571,7 @@ declare function Specimen({ className }: {
|
|
|
1240
571
|
/** The 2D view labkit has always shipped, and what a trial gets when it names no
|
|
1241
572
|
* other. Re-exported under its own name so a consumer can say which it means. */
|
|
1242
573
|
type ViewTransform2D = ViewTransform;
|
|
574
|
+
/** Zoom 1, no pan. */
|
|
1243
575
|
declare const DEFAULT_VIEW: ViewTransform2D;
|
|
1244
576
|
/** A trial's view is opaque to labkit, so anything that needs the 2D shape — the
|
|
1245
577
|
* zoom chrome, `CanvasStack` — asks for it and handles not getting it. */
|
|
@@ -1252,6 +584,19 @@ declare function as2DView(view: unknown): ViewTransform2D | null;
|
|
|
1252
584
|
*/
|
|
1253
585
|
declare const interstellarTheme: Theme;
|
|
1254
586
|
|
|
587
|
+
/**
|
|
588
|
+
* A trial's loupe switch, as a lens mounted inside the trial finds it. The
|
|
589
|
+
* trial offers its toolbar toggle while at least one lens has called `mount`,
|
|
590
|
+
* and every lens reads `on` as whether it is turned on.
|
|
591
|
+
*/
|
|
592
|
+
interface LoupeSwitch {
|
|
593
|
+
on: boolean;
|
|
594
|
+
/** Reports a lens mounted; the returned function reports it gone. */
|
|
595
|
+
mount: () => () => void;
|
|
596
|
+
}
|
|
597
|
+
/** The loupe switch of the trial around the caller, or `null` outside one. */
|
|
598
|
+
declare const LoupeSwitchContext: react.Context<LoupeSwitch | null>;
|
|
599
|
+
|
|
1255
600
|
/** Props for `<Trial>`. */
|
|
1256
601
|
interface TrialProps {
|
|
1257
602
|
id: string;
|
|
@@ -1283,6 +628,7 @@ interface LoupeBindings {
|
|
|
1283
628
|
on: boolean;
|
|
1284
629
|
toggle: () => void;
|
|
1285
630
|
}
|
|
631
|
+
/** The trial's undo history as its chrome sees it. */
|
|
1286
632
|
interface UndoBindings {
|
|
1287
633
|
canUndo: boolean;
|
|
1288
634
|
canRedo: boolean;
|
|
@@ -1298,8 +644,8 @@ interface TrialChromeProps {
|
|
|
1298
644
|
undoBindings?: UndoBindings;
|
|
1299
645
|
/** Supplied when the instrument declares a `job`. */
|
|
1300
646
|
job?: JobHandle;
|
|
1301
|
-
/** Supplied
|
|
1302
|
-
*
|
|
647
|
+
/** Supplied while a lens is mounted in the trial. The lens itself is the
|
|
648
|
+
* instrument's to mount; the chrome only offers the switch. */
|
|
1303
649
|
loupe?: LoupeBindings;
|
|
1304
650
|
/** Contributions the trial runtime itself adds — the drag palette and the
|
|
1305
651
|
* layer list, which depend on runtime state the instrument cannot reach. */
|
|
@@ -1319,5 +665,5 @@ interface TrialChromeProps {
|
|
|
1319
665
|
* each region its slice. */
|
|
1320
666
|
declare function TrialChrome({ trialId, record, instrument, isLastTrial, undoBindings, job, loupe, trialChrome, chrome, suppress, activeToolId, setActiveTool, children, }: TrialChromeProps): react.JSX.Element;
|
|
1321
667
|
|
|
1322
|
-
export { ANNOTATION_TOOLS, ANNOTATION_WEASEL_TOOLS, AnnotationData, AnnotationKind, AnnotationMeaning, AnnotationOverlay, AnnotationTarget, AnnotationTargets, AnnotationsApi, AnnotationsCapability, AnnotationsContext, CaptureOptions, CaptureResult, CaptureSource,
|
|
1323
|
-
export type { AnnotationOverlayProps, AnnotationTargetsProps, AnnotationToolInfo, CaptureArgs, CapturePlan, ComposeSvgArgs, ContentSize,
|
|
668
|
+
export { ANNOTATION_TOOLS, ANNOTATION_WEASEL_TOOLS, AnnotationData, AnnotationKind, AnnotationMeaning, AnnotationOverlay, AnnotationTarget, AnnotationTargets, AnnotationsApi, AnnotationsCapability, AnnotationsContext, CaptureOptions, CaptureResult, CaptureSource, ConfigField, ConfigRule, ConfigSchema, ControlRenderer, DEFAULT_VIEW, ExportMenu, Instrument, InstrumentList, JobHandle, Lab, LabBoundary, LabContribution, LabDensity, LabMode, LabPalette, LabRoot, LabShell, LabSwitcher, LabZoom, LoupeSwitchContext, MarkList, MarkScene, MarkStyle, PaintableMark, SPECIMEN_SECTIONS, Specimen, SplitProps, StorageAdapter, Trial, TrialBody, TrialChrome, TrialContribution, TrialInfo, TrialRecord, TrialTool, ViewTransform, Workspace, WorldRect, annotationToolInfo, as2DView, capturePlan, captureTarget, composeCaptureSvg, createMarkDrawOne, currentPage, defineInstrument, fitView, fromWeaselView, interstellarTheme, isStale, markSvgNodes, resolveMarkStyle, seenFrom, toWeaselView, useAnnotations, useAnnotationsOptional, validateConfigSchema };
|
|
669
|
+
export type { AnnotationOverlayProps, AnnotationTargetsProps, AnnotationToolInfo, CaptureArgs, CapturePlan, ComposeSvgArgs, ContentSize, InstrumentSpec, LabBoundaryProps, LabPage, LabPaletteProps, LabProps, LabRootProps, LabShellProps, LabSwitcherProps, LoupeSwitch, MarkDrawOptions, MarkListProps, PaneSize, PanelDescriptor, TrialBodyProps, TrialChromeProps, TrialLayout, TrialProps, UndoBindings, ValidationResult, ViewTransform2D, WorkspaceProps };
|