@nextop-os/ui-system 0.0.19 → 0.0.21

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/AGENTS.md CHANGED
@@ -86,6 +86,46 @@ Rules:
86
86
  - use the single `nextop-ui-system` skill for component reuse, extraction,
87
87
  base/business classification, metadata, and storyboard work
88
88
 
89
+ ## React Component Splitting Rules
90
+
91
+ - default to one component per directory; keep the component file, tests,
92
+ stories, local styles, and tightly coupled implementation-detail helpers
93
+ colocated inside that directory
94
+ - default to one React component per file; allow multiple small stateless
95
+ helpers in one file only when they are tightly coupled implementation detail
96
+ of the exported component
97
+ - split presentational components away from host wiring; components promoted
98
+ into ui-system must receive data, labels, status, and callbacks through props
99
+ rather than owning side effects or app workflow
100
+ - if a component does not need internal state or refs, prefer a plain function
101
+ component; introduce heavier component structure only when state, refs, or
102
+ lifecycle-like coordination is actually required
103
+ - when behavior is reusable but host-owned, extract it into caller-owned hooks,
104
+ adapters, or controller code instead of embedding that logic in the ui-system
105
+ component body
106
+ - do not use mixin-style reuse or implicit component coupling; prefer explicit
107
+ composition through child components, slots, helper modules, or narrow
108
+ wrappers
109
+ - keep component APIs semantic and stable; do not repurpose DOM prop names such
110
+ as `style` or `className` to carry business meaning when a clearer prop like
111
+ `variant`, `tone`, `status`, or `layout` is intended
112
+ - use spread props sparingly on public components; pass explicit props whenever
113
+ possible so the boundary stays readable and host-agnostic
114
+ - list and collection components must render with stable identity from caller
115
+ data; do not rely on array index keys in promoted UI-system surfaces
116
+ - when a component grows multiple visual regions or branches, first try to
117
+ split subparts into local render helpers or child components before adding
118
+ more mode booleans to one large component
119
+ - avoid boolean-prop sprawl for mutually exclusive modes; prefer a finite
120
+ variant, discriminated union, explicit slot, or separate subcomponent when
121
+ states represent distinct rendering modes
122
+ - keep user-visible copy caller-owned by default; if text changes by host,
123
+ locale, or workflow, expose it through props, labels, or children instead of
124
+ hardcoding it inside the shared component
125
+ - use the filename as the component name and keep exported component names in
126
+ PascalCase so file boundaries stay obvious during promotion, review, and
127
+ migration
128
+
89
129
  ## Validation
90
130
 
91
131
  - Run `pnpm typecheck`
@@ -22,6 +22,12 @@ Treat these as hard requirements, not cleanup suggestions:
22
22
  - compose existing UI-system `base` primitives such as `Card`, `Button`,
23
23
  `Tooltip`, `Dialog`, and related vocabulary before creating custom panel,
24
24
  button, field, or overlay treatments
25
+ - use icon components from `@nextop-os/ui-system/icons` for promoted
26
+ components and storyboard examples. Do not inline SVG/data URI assets, import
27
+ app-local icon files, or pull third-party icon packages directly from promoted
28
+ UI. If the source UI depends on an icon that is not in the UI system, promote
29
+ the source-derived icon into `packages/ui/system/src/icons` with metadata
30
+ first, then consume the UI-system icon export.
25
31
  - make storyboard examples render the real component surface and states; do not
26
32
  rely on surrounding docs chrome to hide component-level visual drift or to
27
33
  fake the final panel/surface language
@@ -89,11 +95,42 @@ alone. The promotion flow must also add or update a real renderable example in
89
95
  `apps/ui-storyboard` so the component is visible in navigation and can be
90
96
  visually reviewed in shared docs immediately after promotion.
91
97
 
92
- For business component promotion, derive the promoted component directly from
93
- the state matrix, proposed props boundary, and candidate source UI, then add
94
- storyboard coverage for the accepted states in the same promotion pass. Treat
95
- that evidence and boundary decision as the implementation blueprint for
96
- `packages/ui/system`, and use review only to verify the finished implementation.
98
+ For business component promotion, use a copy-first workflow: move the existing
99
+ business component structure as intact as possible, preserve the real DOM,
100
+ visual hierarchy, state branches, and interaction layout, then progressively
101
+ remove host dependencies and standardize the public API. Do not begin by
102
+ inventing a cleaner abstraction or new visual treatment. The state matrix,
103
+ props boundary, and candidate source UI define what to copy, what to keep
104
+ caller-owned, and what to standardize after parity exists.
105
+
106
+ Treat business component promotion as an iterative migration-review loop, not a
107
+ single extraction pass:
108
+
109
+ 1. migrate the source UI copy-first
110
+ 2. recreate source-backed states in storyboard
111
+ 3. run independent review against the original source and screenshot
112
+ 4. migrate again to close review findings
113
+ 5. repeat review until source/design parity is acceptable
114
+
115
+ Only after that loop should the API be generalized further. Do not report the
116
+ component as complete after the first migration if review still shows material
117
+ DOM, visual, token, state, icon, or storyboard coverage drift.
118
+
119
+ The promoted UI must follow the original design exactly unless the user
120
+ explicitly approves a visual change. Do not add new decoration, controls,
121
+ icons, layout chrome, copy, motion, states, spacing, or visual hierarchy that
122
+ does not exist in the source UI or provided screenshot. If UI-system token or
123
+ primitive replacement is needed, it must preserve the observed design and
124
+ interaction path rather than becoming a redesign.
125
+
126
+ Copy-first also applies to dependent presentational subcomponents and
127
+ third-party-library wrappers used by the candidate UI. Do not copy only the top
128
+ level JSX and recreate nested behavior from memory. Trace the dependency tree:
129
+ pure display helpers should move with the component; reusable wrappers around
130
+ Radix, floating UI, resizable panels, virtualization, or similar libraries
131
+ should be promoted or reused as `base` primitives first; host-coupled children
132
+ must be split into caller-owned data, labels, callbacks, or slots before the
133
+ business component is considered promoted.
97
134
 
98
135
  ## Design Foundation Verification
99
136
 
@@ -21,6 +21,9 @@ conflicting evidence or an unclear business meaning.
21
21
  Scan:
22
22
 
23
23
  - source component and nearby helpers
24
+ - dependent presentational subcomponents imported by the source component
25
+ - third-party-library wrappers used by the candidate UI, such as Radix,
26
+ floating UI, resizable panels, drag/drop, virtualization, or editor shells
24
27
  - call sites and conditional rendering branches
25
28
  - props, types, tests, mocks, fixtures, and sample data
26
29
  - relevant i18n keys and resolved labels
@@ -86,19 +89,82 @@ explicit variants, or keep the UI local.
86
89
 
87
90
  ## Implementation Blueprint
88
91
 
92
+ Use a copy-first promotion workflow. The first implementation should be a
93
+ props-driven copy of the source business UI, not a new abstraction designed from
94
+ memory. Preserve the source DOM hierarchy, visual structure, spacing, state
95
+ branches, slots, and interaction affordances until parity is visible in
96
+ storyboard. Only after parity exists should the API be tightened and generalized.
97
+
98
+ Run promotion as a loop: migrate, review, migrate, review. The first migration
99
+ must make source-backed parity visible; review then measures drift against the
100
+ original code and screenshot; the next migration closes those findings without
101
+ redesigning. Continue until no material DOM, visual, token, state, icon, or
102
+ storyboard coverage drift remains. Do not treat the first extracted abstraction
103
+ as done if review still reports medium or high difference.
104
+
105
+ The promoted UI must follow the original design. Do not introduce new visual
106
+ ideas while promoting: no extra decoration, layout chrome, icons, controls,
107
+ copy, motion, spacing, state branches, or hierarchy that cannot be traced to the
108
+ source UI or the user's screenshot. Token replacement and primitive composition
109
+ are allowed only when they preserve the observed design and interaction path.
110
+
111
+ Icons are part of that source-derived visual contract and must still enter the
112
+ shared package through the UI-system icon layer. When the source UI uses an
113
+ icon, first reuse an existing `@nextop-os/ui-system/icons` export. If no
114
+ matching icon exists, promote the source-derived SVG or mark into
115
+ `packages/ui/system/src/icons`, add metadata, and consume that exported icon
116
+ from the business component or storyboard. Do not leave inline SVG/data URI
117
+ icons, app-local asset imports, or direct third-party icon imports in promoted
118
+ components or storyboard examples.
119
+
120
+ Copy and classify dependent subcomponents during the same migration. If a
121
+ nested helper is pure display, move it with the business component and convert
122
+ host data to props. If it wraps a third-party UI behavior that is reusable
123
+ outside the business domain, promote or reuse it as a `base` primitive first and
124
+ compose it from the business component. If it owns host state, i18n lookup,
125
+ daemon calls, router/filesystem access, persistence, or workflow orchestration,
126
+ leave that behavior in the caller and replace the nested region with data,
127
+ labels, callbacks, or slots. Do not rewrite a new nested component from memory
128
+ while the original source behavior still exists to copy.
129
+
89
130
  Implement the promoted component directly from three inputs:
90
131
 
91
132
  - the code-evidence state matrix
92
133
  - the proposed public props and callback boundary
93
134
  - the existing candidate source UI or visual surface being extracted
94
135
 
95
- The promoted component should be a props-driven version of the candidate source
96
- with host-owned behavior removed. Preserve the real visual structure, component
97
- composition, class names, spacing, icons, and state-specific branches unless
98
- they depend on host-owned behavior. Replace host-owned behavior with public
99
- props, callbacks, caller-owned slots, or explicit variants. Add storyboard
100
- examples for every accepted public state in the same change so the review can
101
- inspect the finished implementation instead of a preflight draft.
136
+ The promoted component should start as a props-driven version of the candidate
137
+ source with host-owned behavior removed. Preserve the real visual structure,
138
+ component composition, class names, spacing, icons, and state-specific branches
139
+ unless they depend on host-owned behavior. Replace host-owned behavior with
140
+ public props, callbacks, caller-owned slots, or explicit variants. Add
141
+ storyboard examples for every accepted public state in the same change so the
142
+ review can inspect the finished implementation instead of a preflight draft.
143
+ Do not add states, controls, copy, icons, animation, or visual wrappers that the
144
+ source component did not have unless the user explicitly asks for that design
145
+ change.
146
+
147
+ Generalize in this order:
148
+
149
+ 1. Copy the existing component structure and nearby presentational helpers.
150
+ 2. Trace dependent subcomponents and third-party wrappers; move pure display
151
+ helpers with the component, promote reusable third-party wrappers to `base`
152
+ primitives, and mark host-coupled children as caller-owned slots or data.
153
+ 3. Replace host imports, data derivation, i18n lookup, store reads, side effects,
154
+ and daemon/router/filesystem calls with props, labels, callbacks, or slots.
155
+ 4. Recreate the original visual states in storyboard before simplifying the API.
156
+ 5. Run independent review against the source UI and close material drift before
157
+ simplifying the API.
158
+ 6. Standardize the API names and types around data, labels, actions, variants,
159
+ and slots while preserving visual and behavioral parity.
160
+ 7. Replace app-local styling with UI-system tokens and base primitives only when
161
+ the replacement does not change the observed UI or interaction path.
162
+ 8. Reject or remove any invented UI added during promotion unless it is backed
163
+ by source evidence or an explicit user-approved visual change.
164
+
165
+ Do not skip directly to a polished abstraction. If the first promoted version
166
+ cannot be compared against the source screenshot or source state, the promotion
167
+ is incomplete.
102
168
 
103
169
  If the draft still needs app state, navigation, fetching, persistence, i18n key
104
170
  lookup, or host adapters to render, stop and revise the component boundary
@@ -161,14 +227,22 @@ Expected chain:
161
227
  named slot or composed child over a broad render prop.
162
228
  - Host-owned behavior: i18n lookup, daemon calls, install queue,
163
229
  confirmation dialogs, persistence, routing, and state derivation.
164
- 4. **Implement the promoted component**
165
- - Adapt the current candidate source into the final
166
- `packages/ui/system/src/components/<component-file>.tsx` component.
230
+ 4. **Implement the promoted component with copy-first parity**
231
+ - Copy the current candidate source into the final
232
+ `packages/ui/system/src/components/<component-dir>/index.tsx` component.
233
+ - Copy dependent presentational helpers and classify any third-party
234
+ wrappers before changing behavior. Reuse or promote base primitives for
235
+ reusable library wrappers instead of rebuilding them in the business file.
236
+ - Route icons through `@nextop-os/ui-system/icons`: reuse existing exports or
237
+ promote source-derived icons into the package icon layer with metadata
238
+ before using them in the component or storyboard.
167
239
  - Keep the real table layout, status cells, action affordances, icon
168
- placement, empty state, and disabled/error branches.
169
- - Replace host behavior with props and local callback stubs: i18n-resolved
170
- labels, queue state, confirmation dialog decisions, daemon calls, and
171
- install orchestration stay outside the component.
240
+ placement, empty state, nested display helpers, and disabled/error branches.
241
+ - Replace host behavior with props, labels, callbacks, and caller-owned
242
+ slots: i18n lookup, queue state, confirmation dialog decisions, daemon
243
+ calls, and install orchestration stay outside the component.
244
+ - Only after storyboard parity is visible, simplify the copied API toward
245
+ durable `items`, `labels`, `actions`, explicit variants, and slots.
172
246
  - Make only package integration edits: final exported prop types, imports,
173
247
  class cleanup, and package-local helpers.
174
248
  - Export it from stable barrels.
@@ -196,18 +270,22 @@ Expected chain:
196
270
 
197
271
  ## Implementation
198
272
 
199
- 1. Implement the business component by composing `base` primitives.
200
- 2. Keep all host-owned behavior in the caller.
201
- 3. Preserve the API composition decision. Do not add new mode booleans or
273
+ 1. Copy the existing business component structure into `packages/ui/system`
274
+ before abstracting it.
275
+ 2. Keep all host-owned behavior in the caller by replacing it with props,
276
+ labels, callbacks, or caller-owned slots.
277
+ 3. Preserve the source visual and interaction shape until storyboard parity is
278
+ visible.
279
+ 4. Standardize the API incrementally. Do not add new mode booleans or
202
280
  host-owned state while moving the candidate UI into the shared package.
203
- 4. Add stable exports and metadata with `layer: "business"`.
204
- 5. Add storyboard examples for normal, empty, disabled, loading, and error-like
281
+ 5. Add stable exports and metadata with `layer: "business"`.
282
+ 6. Add storyboard examples for normal, empty, disabled, loading, and error-like
205
283
  states when those states exist in the public contract.
206
- 6. Migrate callers by replacing only the visual surface.
207
- 7. Run the promotion review gate from
284
+ 7. Migrate callers by replacing only the visual surface.
285
+ 8. Run the promotion review gate from
208
286
  `ui-system.md` against the promoted component
209
287
  and migrated consumer.
210
- 8. Start the design-foundation review subagent and resolve any reported drift.
288
+ 9. Start the design-foundation review subagent and resolve any reported drift.
211
289
 
212
290
  ## Validation
213
291
 
@@ -9,12 +9,12 @@ import {
9
9
  FailedFilledIcon,
10
10
  LoadingIcon,
11
11
  SuccessFilledIcon
12
- } from "./chunk-GE5YVRTV.js";
12
+ } from "./chunk-TYJPBTBR.js";
13
13
  import {
14
14
  cn
15
15
  } from "./chunk-DGPY4WP3.js";
16
16
 
17
- // src/components/badge.tsx
17
+ // src/components/badge/badge.tsx
18
18
  import { cva } from "class-variance-authority";
19
19
  import { Slot } from "radix-ui";
20
20
  import { jsx } from "react/jsx-runtime";
@@ -54,7 +54,7 @@ function Badge({
54
54
  );
55
55
  }
56
56
 
57
- // src/components/button.tsx
57
+ // src/components/button/button.tsx
58
58
  import { cva as cva2 } from "class-variance-authority";
59
59
  import { Slot as Slot2 } from "radix-ui";
60
60
  import { jsx as jsx2 } from "react/jsx-runtime";
@@ -116,7 +116,7 @@ function Button({
116
116
  );
117
117
  }
118
118
 
119
- // src/components/card.tsx
119
+ // src/components/card/card.tsx
120
120
  import { jsx as jsx3 } from "react/jsx-runtime";
121
121
  function Card({
122
122
  className,
@@ -209,7 +209,7 @@ function CardFooter({ className, ...props }) {
209
209
  );
210
210
  }
211
211
 
212
- // src/components/checkbox.tsx
212
+ // src/components/checkbox/checkbox.tsx
213
213
  import { Checkbox as CheckboxPrimitive } from "radix-ui";
214
214
  import { jsx as jsx4 } from "react/jsx-runtime";
215
215
  function Checkbox({
@@ -237,7 +237,7 @@ function Checkbox({
237
237
  );
238
238
  }
239
239
 
240
- // src/components/dialog.tsx
240
+ // src/components/dialog/dialog.tsx
241
241
  import * as React from "react";
242
242
  import { Dialog as DialogPrimitive } from "radix-ui";
243
243
  import { Fragment, jsx as jsx5, jsxs } from "react/jsx-runtime";
@@ -435,7 +435,7 @@ function DialogDescription({
435
435
  );
436
436
  }
437
437
 
438
- // src/components/confirmation-dialog.tsx
438
+ // src/components/confirmation-dialog/confirmation-dialog.tsx
439
439
  import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
440
440
  function confirmToneClassName(tone) {
441
441
  if (tone === "destructive") {
@@ -525,7 +525,7 @@ function ConfirmationDialog({
525
525
  ) });
526
526
  }
527
527
 
528
- // src/components/date-picker.tsx
528
+ // src/components/date-picker/date-picker.tsx
529
529
  import * as React2 from "react";
530
530
  import { createPortal } from "react-dom";
531
531
  import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -881,10 +881,10 @@ var DatePicker = React2.forwardRef(
881
881
  );
882
882
  DatePicker.displayName = "DatePicker";
883
883
 
884
- // src/components/dropdown-menu.tsx
884
+ // src/components/dropdown-menu/dropdown-menu.tsx
885
885
  import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
886
886
 
887
- // src/components/menu-surface.tsx
887
+ // src/components/menu-surface/menu-surface.tsx
888
888
  import * as React3 from "react";
889
889
  import { Slot as Slot3 } from "radix-ui";
890
890
  import { jsx as jsx8 } from "react/jsx-runtime";
@@ -914,7 +914,7 @@ var MenuSurface = React3.forwardRef(
914
914
  );
915
915
  MenuSurface.displayName = "MenuSurface";
916
916
 
917
- // src/components/dropdown-menu.tsx
917
+ // src/components/dropdown-menu/dropdown-menu.tsx
918
918
  import { jsx as jsx9, jsxs as jsxs4 } from "react/jsx-runtime";
919
919
  function DropdownMenu({
920
920
  ...props
@@ -1180,7 +1180,7 @@ function DropdownMenuSubContent({
1180
1180
  );
1181
1181
  }
1182
1182
 
1183
- // src/components/input.tsx
1183
+ // src/components/input/input.tsx
1184
1184
  import { jsx as jsx10 } from "react/jsx-runtime";
1185
1185
  function Input({ className, size = "default", type, ...props }) {
1186
1186
  return /* @__PURE__ */ jsx10(
@@ -1199,7 +1199,7 @@ function Input({ className, size = "default", type, ...props }) {
1199
1199
  );
1200
1200
  }
1201
1201
 
1202
- // src/components/popover.tsx
1202
+ // src/components/popover/popover.tsx
1203
1203
  import { Popover as PopoverPrimitive } from "radix-ui";
1204
1204
  import { jsx as jsx11 } from "react/jsx-runtime";
1205
1205
  function Popover({
@@ -1249,7 +1249,7 @@ function PopoverAnchor({
1249
1249
  return /* @__PURE__ */ jsx11(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
1250
1250
  }
1251
1251
 
1252
- // src/components/resizable.tsx
1252
+ // src/components/resizable/resizable.tsx
1253
1253
  import * as ResizablePrimitive from "react-resizable-panels";
1254
1254
  import { jsx as jsx12 } from "react/jsx-runtime";
1255
1255
  function ResizablePanelGroup({
@@ -1293,7 +1293,7 @@ function ResizableHandle({
1293
1293
  );
1294
1294
  }
1295
1295
 
1296
- // src/components/scroll-area.tsx
1296
+ // src/components/scroll-area/scroll-area.tsx
1297
1297
  import { ScrollArea as ScrollAreaPrimitive } from "radix-ui";
1298
1298
  import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
1299
1299
  function ScrollArea({
@@ -1349,7 +1349,7 @@ function ScrollBar({
1349
1349
  );
1350
1350
  }
1351
1351
 
1352
- // src/components/select.tsx
1352
+ // src/components/select/select.tsx
1353
1353
  import { Select as SelectPrimitive } from "radix-ui";
1354
1354
  import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
1355
1355
  function Select({
@@ -1607,7 +1607,7 @@ function SelectScrollDownButton({
1607
1607
  );
1608
1608
  }
1609
1609
 
1610
- // src/components/separator.tsx
1610
+ // src/components/separator/separator.tsx
1611
1611
  import { Separator as SeparatorPrimitive } from "radix-ui";
1612
1612
  import { jsx as jsx15 } from "react/jsx-runtime";
1613
1613
  function Separator2({
@@ -1631,7 +1631,7 @@ function Separator2({
1631
1631
  );
1632
1632
  }
1633
1633
 
1634
- // src/components/spinner.tsx
1634
+ // src/components/spinner/spinner.tsx
1635
1635
  import { jsx as jsx16 } from "react/jsx-runtime";
1636
1636
  function Spinner({
1637
1637
  className,
@@ -1659,7 +1659,7 @@ function Spinner({
1659
1659
  );
1660
1660
  }
1661
1661
 
1662
- // src/components/status-dot.tsx
1662
+ // src/components/status-dot/status-dot.tsx
1663
1663
  import { cva as cva3 } from "class-variance-authority";
1664
1664
  import { jsx as jsx17 } from "react/jsx-runtime";
1665
1665
  var statusDotVariants = cva3("inline-flex shrink-0 rounded-full", {
@@ -1711,7 +1711,7 @@ function StatusDot({
1711
1711
  );
1712
1712
  }
1713
1713
 
1714
- // src/components/switch.tsx
1714
+ // src/components/switch/switch.tsx
1715
1715
  import { Switch as SwitchPrimitive } from "radix-ui";
1716
1716
  import { jsx as jsx18 } from "react/jsx-runtime";
1717
1717
  function Switch({
@@ -1740,7 +1740,7 @@ function Switch({
1740
1740
  );
1741
1741
  }
1742
1742
 
1743
- // src/components/textarea.tsx
1743
+ // src/components/textarea/textarea.tsx
1744
1744
  import { jsx as jsx19 } from "react/jsx-runtime";
1745
1745
  function Textarea({ className, ...props }) {
1746
1746
  return /* @__PURE__ */ jsx19(
@@ -1756,7 +1756,7 @@ function Textarea({ className, ...props }) {
1756
1756
  );
1757
1757
  }
1758
1758
 
1759
- // src/components/toast.tsx
1759
+ // src/components/toast/toast.tsx
1760
1760
  import * as React4 from "react";
1761
1761
  import { Toast as ToastPrimitive } from "radix-ui";
1762
1762
  import { cva as cva4 } from "class-variance-authority";
@@ -1922,7 +1922,7 @@ function ToastViewport({
1922
1922
  );
1923
1923
  }
1924
1924
 
1925
- // src/components/tooltip.tsx
1925
+ // src/components/tooltip/tooltip.tsx
1926
1926
  import { Tooltip as TooltipPrimitive } from "radix-ui";
1927
1927
  import { jsx as jsx21 } from "react/jsx-runtime";
1928
1928
  function TooltipProvider({
@@ -1975,7 +1975,7 @@ function TooltipContent({
1975
1975
  ) });
1976
1976
  }
1977
1977
 
1978
- // src/components/underline-tabs.tsx
1978
+ // src/components/underline-tabs/underline-tabs.tsx
1979
1979
  import { useEffect as useEffect3, useLayoutEffect as useLayoutEffect2, useRef as useRef2, useState as useState3 } from "react";
1980
1980
  import { jsx as jsx22, jsxs as jsxs8 } from "react/jsx-runtime";
1981
1981
  function UnderlineTabs({
@@ -2174,7 +2174,7 @@ function UnderlineTabs({
2174
2174
  );
2175
2175
  }
2176
2176
 
2177
- // src/components/viewport-menu-surface.tsx
2177
+ // src/components/viewport-menu-surface/viewport-menu-surface.tsx
2178
2178
  import * as React5 from "react";
2179
2179
  import { createPortal as createPortal2 } from "react-dom";
2180
2180
  import { jsx as jsx23 } from "react/jsx-runtime";
@@ -2550,4 +2550,4 @@ export {
2550
2550
  UnderlineTabs,
2551
2551
  ViewportMenuSurface
2552
2552
  };
2553
- //# sourceMappingURL=chunk-LVHEV755.js.map
2553
+ //# sourceMappingURL=chunk-AJCTWBHN.js.map