sldeditor 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +117 -0
  3. package/THIRD_PARTY_NOTICES.md +31 -0
  4. package/dist/OneLineEditor.d.ts +24 -0
  5. package/dist/OneLineEditor.d.ts.map +1 -0
  6. package/dist/canvas/AnnotationLayer.d.ts +18 -0
  7. package/dist/canvas/AnnotationLayer.d.ts.map +1 -0
  8. package/dist/canvas/BusHandles.d.ts +10 -0
  9. package/dist/canvas/BusHandles.d.ts.map +1 -0
  10. package/dist/canvas/BusLayer.d.ts +8 -0
  11. package/dist/canvas/BusLayer.d.ts.map +1 -0
  12. package/dist/canvas/BusbarPreview.d.ts +7 -0
  13. package/dist/canvas/BusbarPreview.d.ts.map +1 -0
  14. package/dist/canvas/CanvasSvg.d.ts +11 -0
  15. package/dist/canvas/CanvasSvg.d.ts.map +1 -0
  16. package/dist/canvas/ElementHoverLabel.d.ts +9 -0
  17. package/dist/canvas/ElementHoverLabel.d.ts.map +1 -0
  18. package/dist/canvas/ElementLayer.d.ts +17 -0
  19. package/dist/canvas/ElementLayer.d.ts.map +1 -0
  20. package/dist/canvas/FreeAnnotationLayer.d.ts +18 -0
  21. package/dist/canvas/FreeAnnotationLayer.d.ts.map +1 -0
  22. package/dist/canvas/MarqueeOverlay.d.ts +6 -0
  23. package/dist/canvas/MarqueeOverlay.d.ts.map +1 -0
  24. package/dist/canvas/PlaceGhost.d.ts +16 -0
  25. package/dist/canvas/PlaceGhost.d.ts.map +1 -0
  26. package/dist/canvas/SelectionOverlay.d.ts +7 -0
  27. package/dist/canvas/SelectionOverlay.d.ts.map +1 -0
  28. package/dist/canvas/TerminalLayer.d.ts +13 -0
  29. package/dist/canvas/TerminalLayer.d.ts.map +1 -0
  30. package/dist/canvas/WireLayer.d.ts +11 -0
  31. package/dist/canvas/WireLayer.d.ts.map +1 -0
  32. package/dist/canvas/WirePreview.d.ts +8 -0
  33. package/dist/canvas/WirePreview.d.ts.map +1 -0
  34. package/dist/canvas/drop-on-bus.d.ts +45 -0
  35. package/dist/canvas/drop-on-bus.d.ts.map +1 -0
  36. package/dist/canvas/fit-to-content.d.ts +22 -0
  37. package/dist/canvas/fit-to-content.d.ts.map +1 -0
  38. package/dist/canvas/grid.d.ts +14 -0
  39. package/dist/canvas/grid.d.ts.map +1 -0
  40. package/dist/canvas/hit-test.d.ts +14 -0
  41. package/dist/canvas/hit-test.d.ts.map +1 -0
  42. package/dist/canvas/hover-bus.d.ts +7 -0
  43. package/dist/canvas/hover-bus.d.ts.map +1 -0
  44. package/dist/canvas/index.d.ts +11 -0
  45. package/dist/canvas/index.d.ts.map +1 -0
  46. package/dist/canvas/marquee-bus.d.ts +17 -0
  47. package/dist/canvas/marquee-bus.d.ts.map +1 -0
  48. package/dist/canvas/resolve-wire-target.d.ts +4 -0
  49. package/dist/canvas/resolve-wire-target.d.ts.map +1 -0
  50. package/dist/canvas/synthetic-pointer-cancel.d.ts +12 -0
  51. package/dist/canvas/synthetic-pointer-cancel.d.ts.map +1 -0
  52. package/dist/canvas/tools/BusbarTool.d.ts +3 -0
  53. package/dist/canvas/tools/BusbarTool.d.ts.map +1 -0
  54. package/dist/canvas/tools/PanTool.d.ts +3 -0
  55. package/dist/canvas/tools/PanTool.d.ts.map +1 -0
  56. package/dist/canvas/tools/PlaceTool.d.ts +3 -0
  57. package/dist/canvas/tools/PlaceTool.d.ts.map +1 -0
  58. package/dist/canvas/tools/SelectTool.d.ts +3 -0
  59. package/dist/canvas/tools/SelectTool.d.ts.map +1 -0
  60. package/dist/canvas/tools/TextTool.d.ts +3 -0
  61. package/dist/canvas/tools/TextTool.d.ts.map +1 -0
  62. package/dist/canvas/tools/WireTool.d.ts +3 -0
  63. package/dist/canvas/tools/WireTool.d.ts.map +1 -0
  64. package/dist/canvas/tools/index.d.ts +4 -0
  65. package/dist/canvas/tools/index.d.ts.map +1 -0
  66. package/dist/canvas/tools/types.d.ts +25 -0
  67. package/dist/canvas/tools/types.d.ts.map +1 -0
  68. package/dist/canvas/touch.d.ts +20 -0
  69. package/dist/canvas/touch.d.ts.map +1 -0
  70. package/dist/canvas/transform-attr.d.ts +3 -0
  71. package/dist/canvas/transform-attr.d.ts.map +1 -0
  72. package/dist/canvas/useHoverHighlight.d.ts +3 -0
  73. package/dist/canvas/useHoverHighlight.d.ts.map +1 -0
  74. package/dist/canvas/useKeyboardShortcuts.d.ts +15 -0
  75. package/dist/canvas/useKeyboardShortcuts.d.ts.map +1 -0
  76. package/dist/canvas/useTools.d.ts +4 -0
  77. package/dist/canvas/useTools.d.ts.map +1 -0
  78. package/dist/canvas/useViewport.d.ts +18 -0
  79. package/dist/canvas/useViewport.d.ts.map +1 -0
  80. package/dist/canvas/viewport-bus.d.ts +4 -0
  81. package/dist/canvas/viewport-bus.d.ts.map +1 -0
  82. package/dist/canvas/wire-target-bus.d.ts +14 -0
  83. package/dist/canvas/wire-target-bus.d.ts.map +1 -0
  84. package/dist/canvas/zoom-bus.d.ts +11 -0
  85. package/dist/canvas/zoom-bus.d.ts.map +1 -0
  86. package/dist/compiler/auto-layout.d.ts +18 -0
  87. package/dist/compiler/auto-layout.d.ts.map +1 -0
  88. package/dist/compiler/auto-route.d.ts +10 -0
  89. package/dist/compiler/auto-route.d.ts.map +1 -0
  90. package/dist/compiler/compile.d.ts +4 -0
  91. package/dist/compiler/compile.d.ts.map +1 -0
  92. package/dist/compiler/index.d.ts +6 -0
  93. package/dist/compiler/index.d.ts.map +1 -0
  94. package/dist/compiler/internal-model.d.ts +73 -0
  95. package/dist/compiler/internal-model.d.ts.map +1 -0
  96. package/dist/compiler/library-index.d.ts +4 -0
  97. package/dist/compiler/library-index.d.ts.map +1 -0
  98. package/dist/compiler/transforms.d.ts +7 -0
  99. package/dist/compiler/transforms.d.ts.map +1 -0
  100. package/dist/compiler/union-find.d.ts +14 -0
  101. package/dist/compiler/union-find.d.ts.map +1 -0
  102. package/dist/components/ContextMenu.d.ts +26 -0
  103. package/dist/components/ContextMenu.d.ts.map +1 -0
  104. package/dist/components/ContextualToolbar.d.ts +12 -0
  105. package/dist/components/ContextualToolbar.d.ts.map +1 -0
  106. package/dist/components/EditorShell.d.ts +2 -0
  107. package/dist/components/EditorShell.d.ts.map +1 -0
  108. package/dist/components/ExportMenu.d.ts +8 -0
  109. package/dist/components/ExportMenu.d.ts.map +1 -0
  110. package/dist/components/FileMenu.d.ts +11 -0
  111. package/dist/components/FileMenu.d.ts.map +1 -0
  112. package/dist/components/FloatingToolbar.d.ts +2 -0
  113. package/dist/components/FloatingToolbar.d.ts.map +1 -0
  114. package/dist/components/LeftPanel.d.ts +2 -0
  115. package/dist/components/LeftPanel.d.ts.map +1 -0
  116. package/dist/components/LibraryPopover.d.ts +8 -0
  117. package/dist/components/LibraryPopover.d.ts.map +1 -0
  118. package/dist/components/OnboardingCard.d.ts +13 -0
  119. package/dist/components/OnboardingCard.d.ts.map +1 -0
  120. package/dist/components/PropertyPanel.d.ts +8 -0
  121. package/dist/components/PropertyPanel.d.ts.map +1 -0
  122. package/dist/components/RightPanel.d.ts +2 -0
  123. package/dist/components/RightPanel.d.ts.map +1 -0
  124. package/dist/components/ViewToolbar.d.ts +19 -0
  125. package/dist/components/ViewToolbar.d.ts.map +1 -0
  126. package/dist/components/ui/button.d.ts +12 -0
  127. package/dist/components/ui/button.d.ts.map +1 -0
  128. package/dist/components/ui/tooltip.d.ts +18 -0
  129. package/dist/components/ui/tooltip.d.ts.map +1 -0
  130. package/dist/components/ui/upward-popover.d.ts +8 -0
  131. package/dist/components/ui/upward-popover.d.ts.map +1 -0
  132. package/dist/element-library/index.d.ts +14 -0
  133. package/dist/element-library/index.d.ts.map +1 -0
  134. package/dist/hooks/editor-tier.d.ts +32 -0
  135. package/dist/hooks/editor-tier.d.ts.map +1 -0
  136. package/dist/hooks/use-editor-tier.d.ts +6 -0
  137. package/dist/hooks/use-editor-tier.d.ts.map +1 -0
  138. package/dist/hooks/use-onboarding.d.ts +15 -0
  139. package/dist/hooks/use-onboarding.d.ts.map +1 -0
  140. package/dist/hooks/use-panels.d.ts +16 -0
  141. package/dist/hooks/use-panels.d.ts.map +1 -0
  142. package/dist/hooks/use-theme.d.ts +24 -0
  143. package/dist/hooks/use-theme.d.ts.map +1 -0
  144. package/dist/i18n/index.d.ts +14 -0
  145. package/dist/i18n/index.d.ts.map +1 -0
  146. package/dist/i18n/library.d.ts +14 -0
  147. package/dist/i18n/library.d.ts.map +1 -0
  148. package/dist/i18n/messages.d.ts +348 -0
  149. package/dist/i18n/messages.d.ts.map +1 -0
  150. package/dist/index.d.ts +20 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/lib/export-dxf.d.ts +16 -0
  153. package/dist/lib/export-dxf.d.ts.map +1 -0
  154. package/dist/lib/export-image.d.ts +13 -0
  155. package/dist/lib/export-image.d.ts.map +1 -0
  156. package/dist/lib/file-io.d.ts +26 -0
  157. package/dist/lib/file-io.d.ts.map +1 -0
  158. package/dist/lib/utils.d.ts +3 -0
  159. package/dist/lib/utils.d.ts.map +1 -0
  160. package/dist/model/index.d.ts +3 -0
  161. package/dist/model/index.d.ts.map +1 -0
  162. package/dist/model/library.d.ts +115 -0
  163. package/dist/model/library.d.ts.map +1 -0
  164. package/dist/model/types.d.ts +78 -0
  165. package/dist/model/types.d.ts.map +1 -0
  166. package/dist/sldeditor.cjs +193 -0
  167. package/dist/sldeditor.cjs.map +1 -0
  168. package/dist/sldeditor.js +11601 -0
  169. package/dist/sldeditor.js.map +1 -0
  170. package/dist/store/id-allocator.d.ts +11 -0
  171. package/dist/store/id-allocator.d.ts.map +1 -0
  172. package/dist/store/index.d.ts +3 -0
  173. package/dist/store/index.d.ts.map +1 -0
  174. package/dist/store/store.d.ts +104 -0
  175. package/dist/store/store.d.ts.map +1 -0
  176. package/dist/style.css +1 -0
  177. package/package.json +107 -0
@@ -0,0 +1,11 @@
1
+ import { DiagramFile, ElementId, WireEnd, WireId } from '../model';
2
+ export declare function newElementId(diagram: DiagramFile, kind: string): ElementId;
3
+ export declare function newBusId(diagram: DiagramFile): ElementId;
4
+ export declare function newAnnotationId(diagram: DiagramFile): string;
5
+ /**
6
+ * Content-hashed wire id. Two wires with the same pair of endpoints collide
7
+ * intentionally — duplicate `addWire` is a no-op, and migration / save
8
+ * round-trips produce stable diffs.
9
+ */
10
+ export declare function wireIdFromEnds(a: WireEnd, b: WireEnd): WireId;
11
+ //# sourceMappingURL=id-allocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-allocator.d.ts","sourceRoot":"","sources":["../../src/store/id-allocator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AA2CxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAM1E;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAKxD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAK5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAS7D"}
@@ -0,0 +1,3 @@
1
+ export { useEditorStore, type EditorState, type ToolId } from './store';
2
+ export { newAnnotationId, newBusId, newElementId, wireIdFromEnds, } from './id-allocator';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EACL,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { InternalModel } from '../compiler';
2
+ import { FileSession } from '../lib/file-io';
3
+ import { AnnotationId, Bus, BusId, BusLayout, DiagramFile, Element, ElementId, NodeId, Placement, TextAnnotation, Wire, WireEnd, WireId } from '../model';
4
+ /**
5
+ * Self-contained snapshot of a copied selection. Placements are pre-resolved
6
+ * (auto-layout positions baked in) so paste survives later edits to the
7
+ * source diagram. Wires only include those whose endpoints are all within
8
+ * the selection.
9
+ */
10
+ export interface ClipboardData {
11
+ elements: Element[];
12
+ buses: Bus[];
13
+ placements: Record<ElementId, Placement>;
14
+ busLayouts: Record<BusId, BusLayout>;
15
+ wires: Wire[];
16
+ }
17
+ export type ToolId = 'select' | 'pan' | 'wire' | 'place' | 'busbar' | 'text';
18
+ export interface EditorState {
19
+ diagram: DiagramFile;
20
+ internal: InternalModel;
21
+ fileSession: FileSession | null;
22
+ activeTool: ToolId;
23
+ placeKind: string | null;
24
+ lastPlaceKind: string | null;
25
+ wireFromTerminal: WireEnd | null;
26
+ placeFromTerminal: WireEnd | null;
27
+ busbarDrawStart: [number, number] | null;
28
+ cursorSvg: [number, number] | null;
29
+ /** Selected devices and/or buses (shared id namespace). */
30
+ selection: ElementId[];
31
+ /** Selected single wire (mutually exclusive with selection/selectedNode). */
32
+ selectedWire: WireId | null;
33
+ /** Selected ConnectivityNode — used for "select the whole electrical
34
+ * node" operations. Mutually exclusive with the others. */
35
+ selectedNode: NodeId | null;
36
+ selectedAnnotation: AnnotationId | null;
37
+ editingAnnotation: AnnotationId | null;
38
+ editingElement: ElementId | null;
39
+ past: DiagramFile[];
40
+ future: DiagramFile[];
41
+ clipboard: ClipboardData | null;
42
+ clipboardPasteIndex: number;
43
+ setDiagram: (diagram: DiagramFile) => void;
44
+ setFileSession: (session: FileSession | null) => void;
45
+ loadDiagramFromFile: (diagram: DiagramFile, session: FileSession) => void;
46
+ dispatch: (mutator: (d: DiagramFile) => DiagramFile, label?: string) => void;
47
+ undo: () => void;
48
+ redo: () => void;
49
+ setActiveTool: (tool: ToolId, opts?: {
50
+ placeKind?: string | null;
51
+ }) => void;
52
+ setPlaceKind: (kind: string | null) => void;
53
+ setWireFromTerminal: (ref: WireEnd | null) => void;
54
+ setPlaceFromTerminal: (ref: WireEnd | null) => void;
55
+ setBusbarDrawStart: (pt: [number, number] | null) => void;
56
+ setCursorSvg: (pt: [number, number] | null) => void;
57
+ setSelection: (ids: ElementId[]) => void;
58
+ toggleInSelection: (id: ElementId) => void;
59
+ clearSelection: () => void;
60
+ setSelectedWire: (id: WireId | null) => void;
61
+ setSelectedNode: (nodeId: NodeId | null) => void;
62
+ setSelectedAnnotation: (id: AnnotationId | null) => void;
63
+ setEditingAnnotation: (id: AnnotationId | null) => void;
64
+ setEditingElement: (id: ElementId | null) => void;
65
+ copySelection: () => void;
66
+ cutSelection: () => void;
67
+ pasteClipboard: () => void;
68
+ autoArrangeAll: () => void;
69
+ autoArrangeSelection: () => void;
70
+ fillUnplacedAll: () => void;
71
+ fillUnplacedSelection: () => void;
72
+ moveElements: (deltas: Map<ElementId, [number, number]>) => void;
73
+ deleteSelection: () => void;
74
+ /** Drop a single wire by id. */
75
+ deleteSelectedWire: () => void;
76
+ /** Drop every wire touching the currently selected ConnectivityNode. */
77
+ deleteSelectedNode: () => void;
78
+ rotateSelection: (deltaDegrees: 90 | -90 | 180) => void;
79
+ mirrorSelection: () => void;
80
+ addElement: (kind: string, at: [number, number], extra?: Partial<Element>) => ElementId;
81
+ addBus: (at: [number, number], span: number, rot?: 0 | 90 | 180 | 270) => BusId;
82
+ /** Append a wire between two endpoints (idempotent — duplicate is a no-op). */
83
+ addWire: (a: WireEnd, b: WireEnd) => void;
84
+ updateElement: (id: ElementId, patch: Partial<Element>) => void;
85
+ updatePlacement: (id: ElementId, patch: Partial<Placement>) => void;
86
+ updateBus: (id: BusId, patch: Partial<BusLayout>) => void;
87
+ addAnnotation: (at: [number, number], text?: string) => AnnotationId;
88
+ updateAnnotation: (id: AnnotationId, patch: Partial<TextAnnotation>) => void;
89
+ deleteAnnotation: (id: AnnotationId) => void;
90
+ }
91
+ export declare const useEditorStore: import('zustand').UseBoundStore<Omit<import('zustand').StoreApi<EditorState>, "setState" | "persist"> & {
92
+ setState(partial: EditorState | Partial<EditorState> | ((state: EditorState) => EditorState | Partial<EditorState>), replace?: false | undefined): unknown;
93
+ setState(state: EditorState | ((state: EditorState) => EditorState), replace: true): unknown;
94
+ persist: {
95
+ setOptions: (options: Partial<import('zustand/middleware').PersistOptions<EditorState, unknown, unknown>>) => void;
96
+ clearStorage: () => void;
97
+ rehydrate: () => Promise<void> | void;
98
+ hasHydrated: () => boolean;
99
+ onHydrate: (fn: (state: EditorState) => void) => () => void;
100
+ onFinishHydration: (fn: (state: EditorState) => void) => () => void;
101
+ getOptions: () => Partial<import('zustand/middleware').PersistOptions<EditorState, unknown, unknown>>;
102
+ };
103
+ }>;
104
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){.ole-root *,.ole-root :before,.ole-root :after,.ole-root ::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{.ole-root{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--leading-tight:1.25;--leading-snug:1.375;--radius-2xl:1rem;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{.ole-root *,.ole-root :after,.ole-root :before,.ole-root ::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}.ole-root ::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}.ole-root html,.ole-root{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}.ole-root hr{height:0;color:inherit;border-top-width:1px}.ole-root abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.ole-root h1,.ole-root h2,.ole-root h3,.ole-root h4,.ole-root h5,.ole-root h6{font-size:inherit;font-weight:inherit}.ole-root a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.ole-root b,.ole-root strong{font-weight:bolder}.ole-root code,.ole-root kbd,.ole-root samp,.ole-root pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}.ole-root small{font-size:80%}.ole-root sub,.ole-root sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}.ole-root sub{bottom:-.25em}.ole-root sup{top:-.5em}.ole-root table{text-indent:0;border-color:inherit;border-collapse:collapse}.ole-root :-moz-focusring{outline:auto}.ole-root progress{vertical-align:baseline}.ole-root summary{display:list-item}.ole-root ol,.ole-root ul,.ole-root menu{list-style:none}.ole-root img,.ole-root svg,.ole-root video,.ole-root canvas,.ole-root audio,.ole-root iframe,.ole-root embed,.ole-root object{vertical-align:middle;display:block}.ole-root img,.ole-root video{max-width:100%;height:auto}.ole-root button,.ole-root input,.ole-root select,.ole-root optgroup,.ole-root textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}.ole-root ::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}.ole-root :where(select:is([multiple],[size])) optgroup{font-weight:bolder}.ole-root :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}.ole-root ::file-selector-button{margin-inline-end:4px}.ole-root ::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){.ole-root ::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){.ole-root ::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}.ole-root textarea{resize:vertical}.ole-root ::-webkit-search-decoration{-webkit-appearance:none}.ole-root ::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}.ole-root ::-webkit-datetime-edit{display:inline-flex}.ole-root ::-webkit-datetime-edit-fields-wrapper{padding:0}.ole-root ::-webkit-datetime-edit{padding-block:0}.ole-root ::-webkit-datetime-edit-year-field{padding-block:0}.ole-root ::-webkit-datetime-edit-month-field{padding-block:0}.ole-root ::-webkit-datetime-edit-day-field{padding-block:0}.ole-root ::-webkit-datetime-edit-hour-field{padding-block:0}.ole-root ::-webkit-datetime-edit-minute-field{padding-block:0}.ole-root ::-webkit-datetime-edit-second-field{padding-block:0}.ole-root ::-webkit-datetime-edit-millisecond-field{padding-block:0}.ole-root ::-webkit-datetime-edit-meridiem-field{padding-block:0}.ole-root ::-webkit-calendar-picker-indicator{line-height:1}.ole-root :-moz-ui-invalid{box-shadow:none}.ole-root button,.ole-root input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}.ole-root ::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}.ole-root ::-webkit-inner-spin-button{height:auto}.ole-root ::-webkit-outer-spin-button{height:auto}.ole-root [hidden]:where(:not([hidden=until-found])){display:none!important}.ole-root{--ole-top-inset:env(safe-area-inset-top,0px);--ole-right-inset:env(safe-area-inset-right,0px);--ole-bottom-inset:env(safe-area-inset-bottom,0px);--ole-left-inset:env(safe-area-inset-left,0px);--background:#f5f5f5;--foreground:#171717;--card:#fff;--card-foreground:#171717;--popover:#fff;--popover-foreground:#171717;--primary:#0891b2;--primary-foreground:#fff;--secondary:#e5e5e5;--secondary-foreground:#171717;--muted:#e5e5e5;--muted-foreground:#737373;--accent:#e5e7eb;--accent-foreground:#171717;--destructive:#ef4444;--destructive-foreground:#fff;--border:#d4d4d4;--input:#e5e5e5;--ring:#0891b2;--radius:.5rem;--canvas-bg:#e8ecf1;--canvas-grid:#d4d4d4;--canvas-grid-strong:#b8b8b8;--selection:#0891b2}.dark .ole-root,.ole-root.dark{--background:#1a1a1a;--foreground:#f0f0f0;--card:#2c2c2c;--card-foreground:#f0f0f0;--popover:#2c2c2c;--popover-foreground:#f0f0f0;--primary:#0891b2;--primary-foreground:#fff;--secondary:#383838;--secondary-foreground:#f0f0f0;--muted:#333;--muted-foreground:#8a8a8a;--accent:#3a3a3a;--accent-foreground:#f0f0f0;--destructive:#ef4444;--destructive-foreground:#fff;--border:#3d3d3d;--input:#383838;--ring:#0891b2;--canvas-bg:#1a1a1a;--canvas-grid:#2f2f2f;--canvas-grid-strong:#525252;--selection:#0891b2}}@layer components;@layer utilities{.ole-root .pointer-events-auto{pointer-events:auto}.ole-root .pointer-events-none{pointer-events:none}.ole-root .collapse{visibility:collapse}.ole-root .invisible{visibility:hidden}.ole-root .visible{visibility:visible}.ole-root .absolute{position:absolute}.ole-root .fixed{position:fixed}.ole-root .relative{position:relative}.ole-root .static{position:static}.ole-root .inset-0{inset:calc(var(--spacing) * 0)}.ole-root .start{inset-inline-start:var(--spacing)}.ole-root .end{inset-inline-end:var(--spacing)}.ole-root .-top-1\.5{top:calc(var(--spacing) * -1.5)}.ole-root .top-0{top:calc(var(--spacing) * 0)}.ole-root .top-1\/2{top:50%}.ole-root .top-full{top:100%}.ole-root .-right-1\.5{right:calc(var(--spacing) * -1.5)}.ole-root .right-0{right:calc(var(--spacing) * 0)}.ole-root .right-1{right:calc(var(--spacing) * 1)}.ole-root .right-2{right:calc(var(--spacing) * 2)}.ole-root .bottom-full{bottom:100%}.ole-root .left-0{left:calc(var(--spacing) * 0)}.ole-root .left-1\/2{left:50%}.ole-root .left-2{left:calc(var(--spacing) * 2)}.ole-root .left-3{left:calc(var(--spacing) * 3)}.ole-root .z-10{z-index:10}.ole-root .z-20{z-index:20}.ole-root .z-30{z-index:30}.ole-root .z-50{z-index:50}.ole-root .z-\[100\]{z-index:100}.ole-root .m-0{margin:calc(var(--spacing) * 0)}.ole-root .mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.ole-root .mx-1{margin-inline:calc(var(--spacing) * 1)}.ole-root .my-1{margin-block:calc(var(--spacing) * 1)}.ole-root .mt-0\.5{margin-top:calc(var(--spacing) * .5)}.ole-root .mt-1{margin-top:calc(var(--spacing) * 1)}.ole-root .mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.ole-root .mt-3{margin-top:calc(var(--spacing) * 3)}.ole-root .mt-4{margin-top:calc(var(--spacing) * 4)}.ole-root .mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.ole-root .mb-2{margin-bottom:calc(var(--spacing) * 2)}.ole-root .ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ole-root .block{display:block}.ole-root .contents{display:contents}.ole-root .flex{display:flex}.ole-root .grid{display:grid}.ole-root .hidden{display:none}.ole-root .inline{display:inline}.ole-root .inline-block{display:inline-block}.ole-root .inline-flex{display:inline-flex}.ole-root .table{display:table}.ole-root .size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.ole-root .size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.ole-root .size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.ole-root .size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.ole-root .size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.ole-root .size-full{width:100%;height:100%}.ole-root .h-4{height:calc(var(--spacing) * 4)}.ole-root .h-5{height:calc(var(--spacing) * 5)}.ole-root .h-6{height:calc(var(--spacing) * 6)}.ole-root .h-7{height:calc(var(--spacing) * 7)}.ole-root .h-8{height:calc(var(--spacing) * 8)}.ole-root .h-9{height:calc(var(--spacing) * 9)}.ole-root .h-10{height:calc(var(--spacing) * 10)}.ole-root .h-12{height:calc(var(--spacing) * 12)}.ole-root .h-full{height:100%}.ole-root .h-px{height:1px}.ole-root .h-screen{height:100vh}.ole-root .w-6{width:calc(var(--spacing) * 6)}.ole-root .w-9{width:calc(var(--spacing) * 9)}.ole-root .w-12{width:calc(var(--spacing) * 12)}.ole-root .w-16{width:calc(var(--spacing) * 16)}.ole-root .w-48{width:calc(var(--spacing) * 48)}.ole-root .w-52{width:calc(var(--spacing) * 52)}.ole-root .w-56{width:calc(var(--spacing) * 56)}.ole-root .w-64{width:calc(var(--spacing) * 64)}.ole-root .w-72{width:calc(var(--spacing) * 72)}.ole-root .w-\[min\(420px\,calc\(100vw-2rem\)\)\]{width:min(420px,100vw - 2rem)}.ole-root .w-full{width:100%}.ole-root .w-px{width:1px}.ole-root .w-screen{width:100vw}.ole-root .max-w-\[280px\]{max-width:280px}.ole-root .max-w-full{max-width:100%}.ole-root .min-w-0{min-width:calc(var(--spacing) * 0)}.ole-root .min-w-12{min-width:calc(var(--spacing) * 12)}.ole-root .min-w-40{min-width:calc(var(--spacing) * 40)}.ole-root .min-w-44{min-width:calc(var(--spacing) * 44)}.ole-root .min-w-52{min-width:calc(var(--spacing) * 52)}.ole-root .min-w-\[200px\]{min-width:200px}.ole-root .flex-1{flex:1}.ole-root .shrink-0{flex-shrink:0}.ole-root .grow{flex-grow:1}.ole-root .-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ole-root .-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.ole-root .transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.ole-root .cursor-grab{cursor:grab}.ole-root .cursor-pointer{cursor:pointer}.ole-root .resize{resize:both}.ole-root .resize-none{resize:none}.ole-root .flex-col{flex-direction:column}.ole-root .flex-row{flex-direction:row}.ole-root .items-center{align-items:center}.ole-root .items-start{align-items:flex-start}.ole-root .justify-between{justify-content:space-between}.ole-root .justify-center{justify-content:center}.ole-root .gap-0\.5{gap:calc(var(--spacing) * .5)}.ole-root .gap-1\.5{gap:calc(var(--spacing) * 1.5)}.ole-root .gap-2{gap:calc(var(--spacing) * 2)}.ole-root .gap-2\.5{gap:calc(var(--spacing) * 2.5)}.ole-root .gap-3{gap:calc(var(--spacing) * 3)}.ole-root :where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}.ole-root :where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}.ole-root :where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}.ole-root :where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}.ole-root .self-start{align-self:flex-start}.ole-root .truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ole-root .overflow-hidden{overflow:hidden}.ole-root .overflow-y-auto{overflow-y:auto}.ole-root .rounded{border-radius:.25rem}.ole-root .rounded-2xl{border-radius:var(--radius-2xl)}.ole-root .rounded-full{border-radius:3.40282e38px}.ole-root .rounded-md{border-radius:calc(var(--radius) - 2px)}.ole-root .rounded-sm{border-radius:calc(var(--radius) - 4px)}.ole-root .border{border-style:var(--tw-border-style);border-width:1px}.ole-root .border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ole-root .border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ole-root .border-\[var\(--selection\)\]{border-color:var(--selection)}.ole-root .border-border,.ole-root .border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.ole-root .border-border\/40{border-color:color-mix(in oklab,var(--border) 40%,transparent)}}.ole-root .border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.ole-root .border-border\/60{border-color:color-mix(in oklab,var(--border) 60%,transparent)}}.ole-root .border-input{border-color:var(--input)}.ole-root .bg-\[color-mix\(in_oklch\,var\(--selection\)_18\%\,transparent\)\]{background-color:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .bg-\[color-mix\(in_oklch\,var\(--selection\)_18\%\,transparent\)\]{background-color:color-mix(in oklch,var(--selection) 18%,transparent)}}.ole-root .bg-\[var\(--selection\)\]\/15{background-color:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .bg-\[var\(--selection\)\]\/15{background-color:color-mix(in oklab,var(--selection) 15%,transparent)}}.ole-root .bg-accent{background-color:var(--accent)}.ole-root .bg-background,.ole-root .bg-background\/50{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.ole-root .bg-background\/50{background-color:color-mix(in oklab,var(--background) 50%,transparent)}}.ole-root .bg-border{background-color:var(--border)}.ole-root .bg-destructive{background-color:var(--destructive)}.ole-root .bg-foreground\/10{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .bg-foreground\/10{background-color:color-mix(in oklab,var(--foreground) 10%,transparent)}}.ole-root .bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.ole-root .bg-muted\/50{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.ole-root .bg-primary{background-color:var(--primary)}.ole-root .bg-primary-foreground\/20{background-color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .bg-primary-foreground\/20{background-color:color-mix(in oklab,var(--primary-foreground) 20%,transparent)}}.ole-root .bg-secondary{background-color:var(--secondary)}.ole-root .p-0\.5{padding:calc(var(--spacing) * .5)}.ole-root .p-1{padding:calc(var(--spacing) * 1)}.ole-root .p-1\.5{padding:calc(var(--spacing) * 1.5)}.ole-root .p-2{padding:calc(var(--spacing) * 2)}.ole-root .p-5{padding:calc(var(--spacing) * 5)}.ole-root .px-1{padding-inline:calc(var(--spacing) * 1)}.ole-root .px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.ole-root .px-2{padding-inline:calc(var(--spacing) * 2)}.ole-root .px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.ole-root .px-3{padding-inline:calc(var(--spacing) * 3)}.ole-root .px-4{padding-inline:calc(var(--spacing) * 4)}.ole-root .px-8{padding-inline:calc(var(--spacing) * 8)}.ole-root .py-0\.5{padding-block:calc(var(--spacing) * .5)}.ole-root .py-1{padding-block:calc(var(--spacing) * 1)}.ole-root .py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.ole-root .py-2{padding-block:calc(var(--spacing) * 2)}.ole-root .py-3{padding-block:calc(var(--spacing) * 3)}.ole-root .py-5{padding-block:calc(var(--spacing) * 5)}.ole-root .py-6{padding-block:calc(var(--spacing) * 6)}.ole-root .pt-1{padding-top:calc(var(--spacing) * 1)}.ole-root .pt-2{padding-top:calc(var(--spacing) * 2)}.ole-root .pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.ole-root .pr-7{padding-right:calc(var(--spacing) * 7)}.ole-root .pr-8{padding-right:calc(var(--spacing) * 8)}.ole-root .pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.ole-root .pb-2{padding-bottom:calc(var(--spacing) * 2)}.ole-root .pl-7{padding-left:calc(var(--spacing) * 7)}.ole-root .text-center{text-align:center}.ole-root .text-left{text-align:left}.ole-root .font-mono{font-family:var(--font-mono)}.ole-root .text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.ole-root .text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.ole-root .text-\[8px\]{font-size:8px}.ole-root .text-\[10px\]{font-size:10px}.ole-root .text-\[11px\]{font-size:11px}.ole-root .text-\[12px\]{font-size:12px}.ole-root .leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.ole-root .leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.ole-root .leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.ole-root .font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.ole-root .font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.ole-root .tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.ole-root .whitespace-nowrap{white-space:nowrap}.ole-root .text-\[var\(--selection\)\]{color:var(--selection)}.ole-root .text-destructive{color:var(--destructive)}.ole-root .text-destructive-foreground{color:var(--destructive-foreground)}.ole-root .text-foreground,.ole-root .text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .text-foreground\/80{color:color-mix(in oklab,var(--foreground) 80%,transparent)}}.ole-root .text-foreground\/90{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .text-foreground\/90{color:color-mix(in oklab,var(--foreground) 90%,transparent)}}.ole-root .text-muted-foreground,.ole-root .text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground) 60%,transparent)}}.ole-root .text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground) 70%,transparent)}}.ole-root .text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .text-muted-foreground\/80{color:color-mix(in oklab,var(--muted-foreground) 80%,transparent)}}.ole-root .text-primary{color:var(--primary)}.ole-root .text-primary-foreground,.ole-root .text-primary-foreground\/85{color:var(--primary-foreground)}@supports (color:color-mix(in lab,red,red)){.ole-root .text-primary-foreground\/85{color:color-mix(in oklab,var(--primary-foreground) 85%,transparent)}}.ole-root .text-secondary-foreground{color:var(--secondary-foreground)}.ole-root .uppercase{text-transform:uppercase}.ole-root .italic{font-style:italic}.ole-root .tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ole-root .underline-offset-4{text-underline-offset:4px}.ole-root .antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ole-root .opacity-40{opacity:.4}.ole-root .opacity-60{opacity:.6}.ole-root .shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ole-root .shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ole-root .shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ole-root .ring,.ole-root .ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ole-root .ring-\[var\(--selection\)\]\/30{--tw-ring-color:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ring-\[var\(--selection\)\]\/30{--tw-ring-color:color-mix(in oklab, var(--selection) 30%, transparent)}}.ole-root .ring-\[var\(--selection\)\]\/60{--tw-ring-color:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ring-\[var\(--selection\)\]\/60{--tw-ring-color:color-mix(in oklab, var(--selection) 60%, transparent)}}.ole-root .outline{outline-style:var(--tw-outline-style);outline-width:1px}.ole-root .blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ole-root .backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ole-root .backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ole-root .transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ole-root .transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ole-root .transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ole-root .ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.ole-root .select-all{-webkit-user-select:all;user-select:all}.ole-root .select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.ole-root .group-hover\:text-accent-foreground:is(:where(.group):hover *){color:var(--accent-foreground)}}.ole-root .placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.ole-root .last\:mb-0:last-child{margin-bottom:calc(var(--spacing) * 0)}@media(hover:hover){.ole-root .hover\:bg-accent:hover{background-color:var(--accent)}.ole-root .hover\:bg-destructive\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.ole-root .hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.ole-root .hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.ole-root .hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.ole-root .hover\:bg-muted\/40:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.ole-root .hover\:bg-muted\/40:hover{background-color:color-mix(in oklab,var(--muted) 40%,transparent)}}.ole-root .hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.ole-root .hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.ole-root .hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.ole-root .hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.ole-root .hover\:bg-transparent:hover{background-color:#0000}.ole-root .hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.ole-root .hover\:text-destructive:hover{color:var(--destructive)}.ole-root .hover\:underline:hover{text-decoration-line:underline}}.ole-root .focus\:border-border:focus{border-color:var(--border)}.ole-root .focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ole-root .focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.ole-root .focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.ole-root .focus-visible\:bg-accent:focus-visible{background-color:var(--accent)}.ole-root .focus-visible\:text-accent-foreground:focus-visible{color:var(--accent-foreground)}.ole-root .focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ole-root .focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--ring)}.ole-root .focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.ole-root .active\:cursor-grabbing:active{cursor:grabbing}.ole-root .disabled\:pointer-events-none:disabled{pointer-events:none}.ole-root .disabled\:opacity-50:disabled{opacity:.5}.ole-root .data-\[selected\=true\]\:bg-\[color-mix\(in_oklch\,var\(--selection\)_18\%\,transparent\)\][data-selected=true]{background-color:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .data-\[selected\=true\]\:bg-\[color-mix\(in_oklch\,var\(--selection\)_18\%\,transparent\)\][data-selected=true]{background-color:color-mix(in oklch,var(--selection) 18%,transparent)}}.ole-root .\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.ole-root .\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.ole-root .\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.ole-root .\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.ole-root .\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.ole-root details:not([open])>summary>.\[details\:not\(\[open\]\)\>summary\>\&\]\:-rotate-90{rotate:-90deg}}.ole-root{overscroll-behavior:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.ole-root .ole-canvas-root{--canvas-scale:1;-webkit-user-select:none;user-select:none}.ole-root .ole-glass{background-color:var(--card)}@supports (color:color-mix(in lab,red,red)){.ole-root .ole-glass{background-color:color-mix(in oklch,var(--card) 80%,transparent)}}.ole-root .ole-glass{-webkit-backdrop-filter:blur(12px);-webkit-user-select:none;user-select:none}.ole-root .ole-glass input,.ole-root .ole-glass textarea,.ole-root .ole-glass [contenteditable=true]{-webkit-user-select:text;user-select:text}.ole-root .ole-symbol,.ole-root .ole-element{color:var(--foreground)}.ole-root .ole-symbol [stroke=black],.ole-root .ole-symbol [stroke="#000"],.ole-root .ole-symbol [stroke="#000000"],.ole-root .ole-element [stroke=black],.ole-root .ole-element [stroke="#000"],.ole-root .ole-element [stroke="#000000"]{stroke:currentColor}.ole-root .ole-symbol [fill=black],.ole-root .ole-symbol [fill="#000"],.ole-root .ole-symbol [fill="#000000"],.ole-root .ole-element [fill=black],.ole-root .ole-element [fill="#000"],.ole-root .ole-element [fill="#000000"]{fill:currentColor}.ole-root .ole-canvas-svg{background-color:var(--canvas-bg);touch-action:none}.ole-root .ole-canvas-root.hide-grid .ole-canvas-svg>rect{display:none}.ole-root .ole-terminal{fill:var(--canvas-bg);stroke:var(--selection);stroke-width:1.5px;vector-effect:non-scaling-stroke;pointer-events:none;transition:r 80ms ease-out;display:none}.ole-root .ole-terminal[data-connected=true]{fill:var(--selection)}.ole-root .ole-terminal[data-active=true]{stroke:var(--selection);stroke-width:4px;fill:var(--selection)}.ole-root .ole-canvas-root.tool-wire .ole-terminal{pointer-events:auto;display:inline}.ole-root .ole-canvas-root.tool-wire .ole-terminal:hover{r:5;stroke:var(--selection);cursor:crosshair}.ole-root .ole-canvas-root.tool-place .ole-terminal{pointer-events:auto;display:inline}.ole-root .ole-canvas-root.tool-place .ole-terminal:hover{r:5;stroke:var(--selection);cursor:copy}.ole-root .ole-terminal[data-on-selected=true]{pointer-events:auto;display:inline}.ole-root .ole-terminal[data-on-selected=true]:hover{r:5;stroke:var(--selection);cursor:crosshair}.ole-root .ole-annotation-text{fill:var(--foreground);paint-order:stroke;stroke:var(--canvas-bg);stroke-width:2px;stroke-linejoin:round;-webkit-user-select:none;user-select:none;pointer-events:none;font-family:ui-sans-serif,system-ui,sans-serif;font-size:7px}.ole-root .ole-free-annotation-text{fill:var(--foreground);paint-order:stroke;stroke:var(--canvas-bg);stroke-width:2px;stroke-linejoin:round;-webkit-user-select:none;user-select:none;pointer-events:none;font-family:ui-sans-serif,system-ui,sans-serif}.ole-root .ole-free-annotation-hit{pointer-events:auto;cursor:move}.ole-root .ole-free-annotation-halo{fill:none;stroke:var(--selection);stroke-width:1.2px;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;pointer-events:none}.ole-root .ole-terminal.ole-hover-terminal-on{display:inline}.ole-root .ole-element.ole-hover-element-host [stroke=black],.ole-root .ole-element.ole-hover-element-host [stroke="#000"],.ole-root .ole-element.ole-hover-element-host [stroke="#000000"]{stroke:var(--selection)}.ole-root .ole-element.ole-hover-element-host [fill=black],.ole-root .ole-element.ole-hover-element-host [fill="#000"],.ole-root .ole-element.ole-hover-element-host [fill="#000000"]{fill:var(--selection)}.ole-root .ole-wire.ole-hover-node-on,.ole-root .ole-terminal.ole-hover-node-on{stroke:var(--selection)}.ole-root .ole-terminal.ole-hover-node-on[data-connected=true]{fill:var(--selection)}.ole-root .ole-selection-rect{stroke:var(--selection);stroke-width:1.5px;stroke-dasharray:4 3;vector-effect:non-scaling-stroke;pointer-events:none}.ole-root .ole-wire-preview-line{stroke:var(--selection);stroke-width:1.5px;stroke-dasharray:4 3;fill:none;vector-effect:non-scaling-stroke}.ole-root .ole-wire-preview-anchor{fill:var(--selection);stroke:none}.ole-root .ole-wire-preview-target-ring{fill:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ole-wire-preview-target-ring{fill:color-mix(in oklch,var(--selection) 25%,transparent)}}.ole-root .ole-wire-preview-target-ring{stroke:var(--selection);stroke-width:1.5px;vector-effect:non-scaling-stroke}.ole-root .ole-wire-preview-target-dot{fill:var(--selection);stroke:var(--canvas-bg);stroke-width:1px;vector-effect:non-scaling-stroke}.ole-root .ole-busbar-preview-line{stroke:var(--selection);stroke-width:3px;stroke-linecap:round;stroke-dasharray:6 4;fill:none;vector-effect:non-scaling-stroke}.ole-root .ole-busbar-preview-anchor{fill:var(--selection);stroke:none}.ole-root .ole-bus-handle{fill:var(--canvas-bg);stroke:var(--selection);stroke-width:1.5px;vector-effect:non-scaling-stroke;cursor:ew-resize;pointer-events:auto}.ole-root .ole-bus-handle:hover,.ole-root .ole-marquee{fill:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ole-marquee{fill:color-mix(in oklch,var(--selection) 8%,transparent)}}.ole-root .ole-marquee{stroke:var(--selection);stroke-width:1px;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;pointer-events:none}.ole-root .ole-bus-layer,.ole-root .ole-wire-layer{color:var(--foreground)}.ole-root .ole-wire{pointer-events:none;stroke-linecap:round;stroke-linejoin:round}.ole-root .ole-wire[data-selected=true]{stroke:var(--selection);stroke-width:3.5px}.ole-root .ole-wire-hit{stroke:#0000;stroke-width:12px;fill:none;pointer-events:stroke;cursor:pointer}.ole-root .ole-wire-hit:hover+.ole-wire{stroke:var(--selection)}@media(hover:none),(pointer:coarse){.ole-root .ole-glass button.h-9.w-9,.ole-root .ole-glass [role=menuitem].h-9.w-9{width:2.5rem;height:2.5rem}.ole-root .ole-terminal{pointer-events:auto;display:inline}.ole-root .ole-element:hover .ole-element-hit{fill:#0000}.ole-root .ole-wire-hit:hover+.ole-wire{stroke:inherit}.ole-root .ole-element.ole-hover-element-host [stroke=black],.ole-root .ole-element.ole-hover-element-host [stroke="#000"],.ole-root .ole-element.ole-hover-element-host [stroke="#000000"],.ole-root .ole-element.ole-hover-element-host [fill=black],.ole-root .ole-element.ole-hover-element-host [fill="#000"],.ole-root .ole-element.ole-hover-element-host [fill="#000000"]{stroke:inherit;fill:inherit}.ole-root .ole-canvas-root.tool-wire .ole-terminal,.ole-root .ole-canvas-root.tool-place .ole-terminal,.ole-root .ole-terminal[data-on-selected=true]{r:5}}.ole-root .ole-element-hit{fill:#0000;stroke:none;cursor:inherit}.ole-root .ole-canvas-root.tool-wire .ole-element-hit{pointer-events:none}.ole-root .ole-element:hover .ole-element-hit{fill:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ole-element:hover .ole-element-hit{fill:color-mix(in oklch,var(--selection) 8%,transparent)}}.ole-root .ole-element[data-selected=true] .ole-element-hit{fill:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ole-element[data-selected=true] .ole-element-hit{fill:color-mix(in oklch,var(--selection) 12%,transparent)}}.ole-root .ole-element[data-node-related=true] .ole-element-hit{fill:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ole-element[data-node-related=true] .ole-element-hit{fill:color-mix(in oklch,var(--selection) 14%,transparent)}}.ole-root .ole-element[data-node-related=true] [stroke=black],.ole-root .ole-element[data-node-related=true] [stroke="#000"],.ole-root .ole-element[data-node-related=true] [stroke="#000000"]{stroke:var(--selection)}@supports (color:color-mix(in lab,red,red)){.ole-root .ole-element[data-node-related=true] [stroke=black],.ole-root .ole-element[data-node-related=true] [stroke="#000"],.ole-root .ole-element[data-node-related=true] [stroke="#000000"]{stroke:color-mix(in oklch,var(--selection) 55%,var(--foreground))}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
package/package.json ADDED
@@ -0,0 +1,107 @@
1
+ {
2
+ "name": "sldeditor",
3
+ "version": "0.0.1",
4
+ "description": "Lightweight in-browser React editor for electrical single-line diagrams (SLD).",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "NovaShang",
8
+ "homepage": "https://github.com/NovaShang/sldeditor#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/NovaShang/sldeditor.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/NovaShang/sldeditor/issues"
15
+ },
16
+ "keywords": [
17
+ "react",
18
+ "electrical",
19
+ "single-line-diagram",
20
+ "sld",
21
+ "schematic",
22
+ "diagram",
23
+ "editor",
24
+ "electrical-engineering",
25
+ "one-line-diagram",
26
+ "power-system"
27
+ ],
28
+ "main": "./dist/sldeditor.cjs",
29
+ "module": "./dist/sldeditor.js",
30
+ "types": "./dist/index.d.ts",
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "import": "./dist/sldeditor.js",
35
+ "require": "./dist/sldeditor.cjs"
36
+ },
37
+ "./style.css": "./dist/style.css"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md",
42
+ "LICENSE",
43
+ "THIRD_PARTY_NOTICES.md"
44
+ ],
45
+ "sideEffects": [
46
+ "**/*.css"
47
+ ],
48
+ "engines": {
49
+ "node": ">=18"
50
+ },
51
+ "publishConfig": {
52
+ "access": "public",
53
+ "registry": "https://registry.npmjs.org"
54
+ },
55
+ "scripts": {
56
+ "dev": "vite",
57
+ "build": "vite build",
58
+ "build:lib": "tsc -p tsconfig.lib.json --emitDeclarationOnly && vite build --config vite.lib.config.ts",
59
+ "preview": "vite preview",
60
+ "typecheck": "tsc -p tsconfig.app.json --noEmit && tsc -p tsconfig.lib.json --noEmit",
61
+ "lint": "eslint .",
62
+ "format": "prettier --write \"src/**/*.{ts,tsx,css,md}\"",
63
+ "test": "vitest run",
64
+ "test:watch": "vitest",
65
+ "changeset": "changeset",
66
+ "version": "changeset version",
67
+ "release": "npm run build:lib && changeset publish",
68
+ "prepublishOnly": "npm run build:lib"
69
+ },
70
+ "dependencies": {
71
+ "@radix-ui/react-slot": "^1.1.1",
72
+ "class-variance-authority": "^0.7.1",
73
+ "clsx": "^2.1.1",
74
+ "lucide-react": "^0.469.0",
75
+ "tailwind-merge": "^2.6.0",
76
+ "zustand": "^5.0.2"
77
+ },
78
+ "peerDependencies": {
79
+ "react": ">=18.0.0",
80
+ "react-dom": ">=18.0.0"
81
+ },
82
+ "devDependencies": {
83
+ "@changesets/changelog-github": "^0.7.0",
84
+ "@changesets/cli": "^2.31.0",
85
+ "@eslint/js": "^9.17.0",
86
+ "@tailwindcss/vite": "^4.0.0",
87
+ "@types/node": "^22.10.5",
88
+ "@types/react": "^19.0.2",
89
+ "@types/react-dom": "^19.0.2",
90
+ "@vitejs/plugin-react": "^4.3.4",
91
+ "eslint": "^9.17.0",
92
+ "eslint-plugin-react-hooks": "^5.1.0",
93
+ "eslint-plugin-react-refresh": "^0.4.16",
94
+ "globals": "^15.14.0",
95
+ "postcss": "^8.5.14",
96
+ "postcss-prefix-selector": "^2.1.1",
97
+ "prettier": "^3.4.2",
98
+ "react": "^19.0.0",
99
+ "react-dom": "^19.0.0",
100
+ "tailwindcss": "^4.0.0",
101
+ "typescript": "~5.7.2",
102
+ "typescript-eslint": "^8.19.0",
103
+ "vite": "^6.0.7",
104
+ "vite-plugin-dts": "^4.4.0",
105
+ "vitest": "^2.1.8"
106
+ }
107
+ }