@health-samurai/react-components 0.0.0-alpha.18 → 0.0.0-alpha.20
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/LICENSE +21 -0
- package/dist/bundle.css +51 -33
- package/dist/src/components/code-editor/fhir-autocomplete.d.ts +70 -0
- package/dist/src/components/code-editor/fhir-autocomplete.d.ts.map +1 -0
- package/dist/src/components/code-editor/fhir-autocomplete.js +1849 -0
- package/dist/src/components/code-editor/fhir-autocomplete.js.map +1 -0
- package/dist/src/components/code-editor/fhir-autocomplete.test.js +1099 -0
- package/dist/src/components/code-editor/fhir-autocomplete.test.js.map +1 -0
- package/dist/src/components/code-editor/http/index.d.ts +9 -1
- package/dist/src/components/code-editor/http/index.d.ts.map +1 -1
- package/dist/src/components/code-editor/http/index.js +423 -3
- package/dist/src/components/code-editor/http/index.js.map +1 -1
- package/dist/src/components/code-editor/index.d.ts +13 -4
- package/dist/src/components/code-editor/index.d.ts.map +1 -1
- package/dist/src/components/code-editor/index.js +505 -96
- package/dist/src/components/code-editor/index.js.map +1 -1
- package/dist/src/components/code-editor/json-ast.d.ts +46 -0
- package/dist/src/components/code-editor/json-ast.d.ts.map +1 -0
- package/dist/src/components/code-editor/json-ast.js +465 -0
- package/dist/src/components/code-editor/json-ast.js.map +1 -0
- package/dist/src/components/code-editor/json-ast.test.js +206 -0
- package/dist/src/components/code-editor/json-ast.test.js.map +1 -0
- package/dist/src/components/code-editor/sql-completion.d.ts +22 -0
- package/dist/src/components/code-editor/sql-completion.d.ts.map +1 -0
- package/dist/src/components/code-editor/sql-completion.js +895 -0
- package/dist/src/components/code-editor/sql-completion.js.map +1 -0
- package/dist/src/components/date-picker-input.d.ts +10 -0
- package/dist/src/components/date-picker-input.d.ts.map +1 -0
- package/dist/src/components/date-picker-input.js +90 -0
- package/dist/src/components/date-picker-input.js.map +1 -0
- package/dist/src/components/date-picker-input.stories.js +76 -0
- package/dist/src/components/date-picker-input.stories.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/shadcn/components/ui/alert-dialog.d.ts +1 -1
- package/dist/src/shadcn/components/ui/calendar.d.ts +1 -1
- package/dist/src/shadcn/components/ui/carousel.d.ts +1 -1
- package/dist/src/shadcn/components/ui/chart.d.ts +3 -3
- package/dist/src/shadcn/components/ui/chart.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/chart.js +1 -1
- package/dist/src/shadcn/components/ui/chart.js.map +1 -1
- package/dist/src/shadcn/components/ui/command.d.ts +1 -1
- package/dist/src/shadcn/components/ui/pagination.d.ts +1 -1
- package/dist/src/shadcn/components/ui/resizable.stories.js +2 -2
- package/dist/src/shadcn/components/ui/resizable.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/sidebar.d.ts +4 -4
- package/dist/src/shadcn/components/ui/tabs.d.ts +3 -1
- package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.js +129 -2
- package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
- package/dist/src/shadcn/components/ui/tabs.stories.js +1 -1
- package/dist/src/shadcn/components/ui/tabs.stories.js.map +1 -1
- package/dist/src/shadcn/components/ui/toggle-group.d.ts +1 -1
- package/dist/src/typography.css +1 -1
- package/package.json +24 -19
- package/src/components/code-editor/fhir-autocomplete.test.ts +993 -0
- package/src/components/code-editor/fhir-autocomplete.ts +2321 -0
- package/src/components/code-editor/http/index.ts +339 -2
- package/src/components/code-editor/index.tsx +593 -102
- package/src/components/code-editor/json-ast.test.ts +230 -0
- package/src/components/code-editor/json-ast.ts +590 -0
- package/src/components/code-editor/sql-completion.ts +1105 -0
- package/src/components/date-picker-input.stories.tsx +79 -0
- package/src/components/date-picker-input.tsx +104 -0
- package/src/index.tsx +1 -0
- package/src/shadcn/components/ui/chart.tsx +6 -3
- package/src/shadcn/components/ui/resizable.stories.tsx +2 -2
- package/src/shadcn/components/ui/tabs.stories.tsx +1 -1
- package/src/shadcn/components/ui/tabs.tsx +160 -2
- package/src/typography.css +1 -1
- package/dist/src/components/code-editor/http/grammar/http.test.d.ts +0 -2
- package/dist/src/components/code-editor/http/grammar/http.test.d.ts.map +0 -1
|
@@ -6,7 +6,7 @@ const meta = {
|
|
|
6
6
|
export default meta;
|
|
7
7
|
export const Demo = {
|
|
8
8
|
render: ()=>/*#__PURE__*/ _jsxs(ResizablePanelGroup, {
|
|
9
|
-
|
|
9
|
+
orientation: "horizontal",
|
|
10
10
|
className: "max-w-md rounded-lg border md:min-w-[450px]",
|
|
11
11
|
children: [
|
|
12
12
|
/*#__PURE__*/ _jsx(ResizablePanel, {
|
|
@@ -23,7 +23,7 @@ export const Demo = {
|
|
|
23
23
|
/*#__PURE__*/ _jsx(ResizablePanel, {
|
|
24
24
|
defaultSize: 50,
|
|
25
25
|
children: /*#__PURE__*/ _jsxs(ResizablePanelGroup, {
|
|
26
|
-
|
|
26
|
+
orientation: "vertical",
|
|
27
27
|
children: [
|
|
28
28
|
/*#__PURE__*/ _jsx(ResizablePanel, {
|
|
29
29
|
defaultSize: 25,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/shadcn/components/ui/resizable.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport {\n\tResizableHandle,\n\tResizablePanel,\n\tResizablePanelGroup,\n} from \"#shadcn/components/ui/resizable\";\n\nconst meta = {\n\ttitle: \"Component/Resizable\",\n} satisfies Meta;\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Demo = {\n\trender: () => (\n\t\t<ResizablePanelGroup\n\t\t\
|
|
1
|
+
{"version":3,"sources":["../../../../../src/shadcn/components/ui/resizable.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport {\n\tResizableHandle,\n\tResizablePanel,\n\tResizablePanelGroup,\n} from \"#shadcn/components/ui/resizable\";\n\nconst meta = {\n\ttitle: \"Component/Resizable\",\n} satisfies Meta;\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Demo = {\n\trender: () => (\n\t\t<ResizablePanelGroup\n\t\t\torientation=\"horizontal\"\n\t\t\tclassName=\"max-w-md rounded-lg border md:min-w-[450px]\"\n\t\t>\n\t\t\t<ResizablePanel defaultSize={50}>\n\t\t\t\t<div className=\"flex h-[200px] items-center justify-center p-6\">\n\t\t\t\t\t<span className=\"font-semibold\">One</span>\n\t\t\t\t</div>\n\t\t\t</ResizablePanel>\n\t\t\t<ResizableHandle />\n\t\t\t<ResizablePanel defaultSize={50}>\n\t\t\t\t<ResizablePanelGroup orientation=\"vertical\">\n\t\t\t\t\t<ResizablePanel defaultSize={25}>\n\t\t\t\t\t\t<div className=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span className=\"font-semibold\">Two</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ResizablePanel>\n\t\t\t\t\t<ResizableHandle />\n\t\t\t\t\t<ResizablePanel defaultSize={75}>\n\t\t\t\t\t\t<div className=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span className=\"font-semibold\">Three</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ResizablePanel>\n\t\t\t\t</ResizablePanelGroup>\n\t\t\t</ResizablePanel>\n\t\t</ResizablePanelGroup>\n\t),\n} satisfies Story;\n"],"names":["ResizableHandle","ResizablePanel","ResizablePanelGroup","meta","title","Demo","render","orientation","className","defaultSize","div","span"],"mappings":";AACA,SACCA,eAAe,EACfC,cAAc,EACdC,mBAAmB,QACb,iBAAkC;AAEzC,MAAMC,OAAO;IACZC,OAAO;AACR;AACA,eAAeD,KAAK;AAIpB,OAAO,MAAME,OAAO;IACnBC,QAAQ,kBACP,MAACJ;YACAK,aAAY;YACZC,WAAU;;8BAEV,KAACP;oBAAeQ,aAAa;8BAC5B,cAAA,KAACC;wBAAIF,WAAU;kCACd,cAAA,KAACG;4BAAKH,WAAU;sCAAgB;;;;8BAGlC,KAACR;8BACD,KAACC;oBAAeQ,aAAa;8BAC5B,cAAA,MAACP;wBAAoBK,aAAY;;0CAChC,KAACN;gCAAeQ,aAAa;0CAC5B,cAAA,KAACC;oCAAIF,WAAU;8CACd,cAAA,KAACG;wCAAKH,WAAU;kDAAgB;;;;0CAGlC,KAACR;0CACD,KAACC;gCAAeQ,aAAa;0CAC5B,cAAA,KAACC;oCAAIF,WAAU;8CACd,cAAA,KAACG;wCAAKH,WAAU;kDAAgB;;;;;;;;;AAOvC,EAAkB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type VariantProps } from "class-variance-authority";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { Button } from "
|
|
4
|
-
import { Input } from "
|
|
5
|
-
import { Separator } from "
|
|
6
|
-
import { TooltipContent } from "
|
|
3
|
+
import { Button } from "../../components/ui/button";
|
|
4
|
+
import { Input } from "../../components/ui/input";
|
|
5
|
+
import { Separator } from "../../components/ui/separator";
|
|
6
|
+
import { TooltipContent } from "../../components/ui/tooltip";
|
|
7
7
|
type SidebarContextProps = {
|
|
8
8
|
state: "expanded" | "collapsed";
|
|
9
9
|
open: boolean;
|
|
@@ -22,7 +22,9 @@ type TabsListProps = {
|
|
|
22
22
|
onTabChange?: (mutationRecords: MutationRecord[]) => void;
|
|
23
23
|
} & React.ComponentProps<typeof TabsPrimitive.List>;
|
|
24
24
|
declare function TabsList({ className, onLeftEdge, onRightEdge, onResize, onFlow, onTabChange, ...props }: TabsListProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
-
declare function TabsBrowserList({ className, children, ...props }: React.ComponentProps<typeof TabsPrimitive.List>
|
|
25
|
+
declare function TabsBrowserList({ className, children, onReorder, ...props }: React.ComponentProps<typeof TabsPrimitive.List> & {
|
|
26
|
+
onReorder?: (fromIndex: number, toIndex: number) => void;
|
|
27
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
26
28
|
export declare function TabsListDropdown({ tabs, handleTabSelect, handleCloseTab, }: {
|
|
27
29
|
tabs: {
|
|
28
30
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../../../src/shadcn/components/ui/tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQlE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AA2ElC,QAAA,MAAM,YAAY;;8EA4DhB,CAAC;AAOH,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CACtC,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,GAC9C,YAAY,CAAC,OAAO,YAAY,CAAC,EAClC,OAAO,GAAG,cAAc,GAAG,eAAe,CAC1C,GAAG;IACH,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,iBAAS,IAAI,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACxC,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACR,EAAE,SAAS,CAAC,CAAC,CAAC,2CAYd;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,2CAavE;AAiDD,KAAK,kBAAkB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC7C,KAAK,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzC,KAAK,aAAa,GAAG;IACpB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CAC1D,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;AAEpD,iBAAS,QAAQ,CAAC,EACjB,SAAS,EACT,UAAU,EACV,WAAW,EACX,QAAQ,EACR,MAAM,EACN,WAAW,EACX,GAAG,KAAK,EACR,EAAE,aAAa,2CA6If;
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../../../src/shadcn/components/ui/tabs.tsx"],"names":[],"mappings":"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"}
|
|
@@ -248,11 +248,138 @@ function TabScrollRightButton({ disabled, onClick }) {
|
|
|
248
248
|
children: /*#__PURE__*/ _jsx(ChevronRight, {})
|
|
249
249
|
});
|
|
250
250
|
}
|
|
251
|
-
|
|
251
|
+
const DRAG_THRESHOLD = 5;
|
|
252
|
+
function useTabReorder(onReorder) {
|
|
253
|
+
const [drag, setDrag] = React.useState(null);
|
|
254
|
+
const dragRef = React.useRef(null);
|
|
255
|
+
const pendingRef = React.useRef(false);
|
|
256
|
+
const itemsRef = React.useRef([]);
|
|
257
|
+
const handlePointerDown = React.useCallback((e, index)=>{
|
|
258
|
+
if (!onReorder || e.button !== 0) return;
|
|
259
|
+
const items = itemsRef.current;
|
|
260
|
+
const widths = items.map((el)=>el?.offsetWidth ?? 0);
|
|
261
|
+
const lefts = [];
|
|
262
|
+
let acc = 0;
|
|
263
|
+
for (const w of widths){
|
|
264
|
+
lefts.push(acc);
|
|
265
|
+
acc += w;
|
|
266
|
+
}
|
|
267
|
+
dragRef.current = {
|
|
268
|
+
index,
|
|
269
|
+
startX: e.clientX,
|
|
270
|
+
offsetX: 0,
|
|
271
|
+
currentIndex: index,
|
|
272
|
+
widths,
|
|
273
|
+
lefts
|
|
274
|
+
};
|
|
275
|
+
pendingRef.current = true;
|
|
276
|
+
e.target.setPointerCapture(e.pointerId);
|
|
277
|
+
}, [
|
|
278
|
+
onReorder
|
|
279
|
+
]);
|
|
280
|
+
const handlePointerMove = React.useCallback((e)=>{
|
|
281
|
+
const d = dragRef.current;
|
|
282
|
+
if (!d) return;
|
|
283
|
+
const dx = e.clientX - d.startX;
|
|
284
|
+
if (pendingRef.current) {
|
|
285
|
+
if (Math.abs(dx) < DRAG_THRESHOLD) return;
|
|
286
|
+
pendingRef.current = false;
|
|
287
|
+
}
|
|
288
|
+
const draggedLeft = d.lefts[d.index] ?? 0;
|
|
289
|
+
const draggedWidth = d.widths[d.index] ?? 0;
|
|
290
|
+
const draggedRightEdge = draggedLeft + draggedWidth + dx;
|
|
291
|
+
const draggedLeftEdge = draggedLeft + dx;
|
|
292
|
+
let newIndex = d.index;
|
|
293
|
+
const TRIGGER_RATIO = 0.3;
|
|
294
|
+
for(let i = 0; i < d.lefts.length; i++){
|
|
295
|
+
if (i === d.index) continue;
|
|
296
|
+
const left = d.lefts[i] ?? 0;
|
|
297
|
+
const width = d.widths[i] ?? 0;
|
|
298
|
+
if (i > d.index) {
|
|
299
|
+
// Dragging right: trigger when right edge enters 30% of target
|
|
300
|
+
if (draggedRightEdge > left + width * TRIGGER_RATIO) newIndex = i;
|
|
301
|
+
} else {
|
|
302
|
+
// Dragging left: trigger when left edge enters 30% from right
|
|
303
|
+
if (draggedLeftEdge < left + width * (1 - TRIGGER_RATIO)) newIndex = Math.min(newIndex, i);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
const next = {
|
|
307
|
+
...d,
|
|
308
|
+
offsetX: dx,
|
|
309
|
+
currentIndex: newIndex
|
|
310
|
+
};
|
|
311
|
+
dragRef.current = next;
|
|
312
|
+
setDrag(next);
|
|
313
|
+
}, []);
|
|
314
|
+
const handlePointerUp = React.useCallback(()=>{
|
|
315
|
+
const d = dragRef.current;
|
|
316
|
+
if (d && !pendingRef.current && d.index !== d.currentIndex) {
|
|
317
|
+
onReorder?.(d.index, d.currentIndex);
|
|
318
|
+
}
|
|
319
|
+
dragRef.current = null;
|
|
320
|
+
pendingRef.current = false;
|
|
321
|
+
setDrag(null);
|
|
322
|
+
}, [
|
|
323
|
+
onReorder
|
|
324
|
+
]);
|
|
325
|
+
const getTransform = React.useCallback((index)=>{
|
|
326
|
+
if (!drag || pendingRef.current) return {};
|
|
327
|
+
if (index === drag.index) {
|
|
328
|
+
return {
|
|
329
|
+
transform: `translateX(${drag.offsetX}px)`,
|
|
330
|
+
zIndex: 10,
|
|
331
|
+
position: "relative",
|
|
332
|
+
background: "var(--color-bg-primary)",
|
|
333
|
+
borderLeft: "1px solid var(--color-border-default)"
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
const from = drag.index;
|
|
337
|
+
const to = drag.currentIndex;
|
|
338
|
+
const draggedWidth = drag.widths[from] ?? 0;
|
|
339
|
+
if (from < to && index > from && index <= to) {
|
|
340
|
+
return {
|
|
341
|
+
transform: `translateX(${-draggedWidth}px)`,
|
|
342
|
+
transition: "transform 200ms ease"
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
if (from > to && index >= to && index < from) {
|
|
346
|
+
return {
|
|
347
|
+
transform: `translateX(${draggedWidth}px)`,
|
|
348
|
+
transition: "transform 200ms ease"
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
return {
|
|
352
|
+
transition: "transform 200ms ease"
|
|
353
|
+
};
|
|
354
|
+
}, [
|
|
355
|
+
drag
|
|
356
|
+
]);
|
|
357
|
+
return {
|
|
358
|
+
drag,
|
|
359
|
+
itemsRef,
|
|
360
|
+
handlePointerDown,
|
|
361
|
+
handlePointerMove,
|
|
362
|
+
handlePointerUp,
|
|
363
|
+
getTransform
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
function TabsBrowserList({ className, children, onReorder, ...props }) {
|
|
252
367
|
const tabsListRef = React.useRef(null);
|
|
253
368
|
const [showScrollButtons, setShowScrollButtons] = React.useState(false);
|
|
254
369
|
const [canScrollLeft, setCanScrollLeft] = React.useState(false);
|
|
255
370
|
const [canScrollRight, setCanScrollRight] = React.useState(false);
|
|
371
|
+
const { drag, itemsRef, handlePointerDown, handlePointerMove, handlePointerUp, getTransform } = useTabReorder(onReorder);
|
|
372
|
+
const wrappedChildren = onReorder && React.Children.count(children) > 1 ? React.Children.map(children, (child, index)=>/*#__PURE__*/ _jsx("div", {
|
|
373
|
+
ref: (el)=>{
|
|
374
|
+
itemsRef.current[index] = el;
|
|
375
|
+
},
|
|
376
|
+
style: getTransform(index),
|
|
377
|
+
onPointerDown: (e)=>handlePointerDown(e, index),
|
|
378
|
+
onPointerMove: handlePointerMove,
|
|
379
|
+
onPointerUp: handlePointerUp,
|
|
380
|
+
className: cn(drag?.index === index && "cursor-grabbing"),
|
|
381
|
+
children: child
|
|
382
|
+
})) : children;
|
|
256
383
|
return /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
257
384
|
children: [
|
|
258
385
|
showScrollButtons && /*#__PURE__*/ _jsx(TabScrollLeftButton, {
|
|
@@ -294,7 +421,7 @@ function TabsBrowserList({ className, children, ...props }) {
|
|
|
294
421
|
onWheel: (event)=>horizontalScroll(event),
|
|
295
422
|
...props,
|
|
296
423
|
ref: tabsListRef,
|
|
297
|
-
children:
|
|
424
|
+
children: wrappedChildren
|
|
298
425
|
}),
|
|
299
426
|
showScrollButtons && /*#__PURE__*/ _jsx(TabScrollRightButton, {
|
|
300
427
|
disabled: !canScrollRight,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/shadcn/components/ui/tabs.tsx"],"sourcesContent":["\"use client\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n\tChevronDownIcon,\n\tChevronLeft,\n\tChevronRight,\n\tPlus,\n\tX,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"#shadcn/lib/utils\";\nimport { Button } from \"./button\";\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n} from \"./command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\n// Base tabs styles\nconst baseTabsStyles = cn(\"flex\", \"flex-col\", \"h-full\");\n\n// Tabs add button container styles\nconst tabsAddButtonContainerStyles = cn(\n\t\"grow\",\n\t\"h-full\",\n\t\"bg-bg-secondary\",\n\t\"border-l\",\n\t\"border-b\",\n);\n\n// Tabs list styles\nconst tabsListStyles = cn(\n\t\"inline-flex\",\n\t\"w-fit\",\n\t\"items-center\",\n\t\"no-scrollbar\",\n);\n\n// Base tabs trigger styles\nconst baseTabsTriggerStyles = cn(\n\t// Layout & Sizing\n\t\"box-border\",\n\t\"flex-1\",\n\t\"h-10\",\n\t\"inline-flex\",\n\t\"items-center\",\n\t\"justify-center\",\n\t\"px-3\",\n\t\"whitespace-nowrap\",\n\t// Spacing & Padding\n\t\"pb-2\",\n\t\"pt-2.5\",\n\t// Typography\n\t\"typo-body\",\n\t// Colors & States\n\t\"cursor-pointer\",\n\t\"text-text-tertiary\",\n\t\"hover:bg-bg-secondary/60\",\n\t\"hover:text-text-tertiary_hover\",\n\t\"data-[state=active]:text-text-primary\",\n\t\"data-[state=active]:border-b-border-brand\",\n\t\"disabled:opacity-50\",\n\t\"disabled:pointer-events-none\",\n\t// Borders\n\t\"border-b-2\",\n\t\"border-b-transparent\",\n\t// Focus & Accessibility\n\t\"focus-visible:ring-2\",\n\t\"focus-visible:ring-utility-blue/70\",\n\t\"focus-visible:outline-1\",\n\t// Transitions\n\t\"transition-[color,box-shadow]\",\n\t// Icons\n\t\"[&_svg]:pointer-events-none\",\n\t\"[&_svg]:shrink-0\",\n\t\"[&_svg:not([class*='size-'])]:size-4\",\n\t// Groups\n\t\"group/tabs-trigger\",\n);\n\n// Tabs content styles\nconst tabsContentStyles = cn(\"grow\", \"outline-none\", \"overflow-auto\");\n\nconst tabsVariants = cva(\"\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\tbrowser: cn(\n\t\t\t\t// Tabs\n\t\t\t\t\"flex-row\",\n\t\t\t\t\"items-center\",\n\t\t\t\t\"h-10\",\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:overflow-x-auto\",\n\t\t\t\t\"**:data-[slot=tabs-list]:divide-x\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:max-w-80\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:w-60\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:min-w-40\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-1\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-border-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:pt-[9px]\", // TODO: Try to implement this without using pt-[9px].\n\t\t\t),\n\t\t\tsecondary: cn(\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:h-10\",\n\t\t\t\t\"**:data-[slot=tabs-list]:bg-bg-tertiary\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:h-10\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:px-3\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pb-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pt-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:hover:text-text-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-b-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-b-border-dark\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary\",\n\t\t\t),\n\t\t\ttertiary: cn(\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:bg-bg-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-list]:border-b\",\n\t\t\t\t\"**:data-[slot=tabs-list]:border-b-border-separator\",\n\t\t\t\t\"**:data-[slot=tabs-list]:gap-2\",\n\t\t\t\t\"**:data-[slot=tabs-list]:px-4\",\n\t\t\t\t\"**:data-[slot=tabs-list]:py-2\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:h-7\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:px-3\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:rounded\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border-b-0\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pb-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pt-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border-transparent\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:hover:text-text-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:bg-bg-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-border-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary\",\n\t\t\t),\n\t\t},\n\t},\n});\n\n// Context for variant\nconst TabsVariantContext = React.createContext<\n\tVariantProps<typeof tabsVariants>[\"variant\"] | undefined\n>(undefined);\n\ntype TabsProps<T extends string> = Omit<\n\tReact.ComponentProps<typeof TabsPrimitive.Root> &\n\t\tVariantProps<typeof tabsVariants>,\n\t\"value\" | \"defaultValue\" | \"onValueChange\"\n> & {\n\tvalue?: T;\n\tdefaultValue?: T;\n\tonValueChange?: (value: T) => void;\n};\n\nfunction Tabs<T extends string = string>({\n\tclassName,\n\tvariant,\n\t...props\n}: TabsProps<T>) {\n\tconst tabProps = {\n\t\t\"data-slot\": \"tabs\",\n\t\tclassName: cn(baseTabsStyles, tabsVariants({ variant }), className),\n\t\t...props,\n\t\tonValueChange: (value: string) => props.onValueChange?.(value as T),\n\t};\n\treturn (\n\t\t<TabsVariantContext.Provider value={variant}>\n\t\t\t<TabsPrimitive.Root {...tabProps} />\n\t\t</TabsVariantContext.Provider>\n\t);\n}\n\nexport function TabsAddButton(props: React.ComponentProps<typeof Button>) {\n\treturn (\n\t\t<div className={tabsAddButtonContainerStyles}>\n\t\t\t<Button\n\t\t\t\tdata-slot=\"tabs-add-button\"\n\t\t\t\tvariant=\"link\"\n\t\t\t\tclassName=\"h-full\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Plus />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n\nfunction horizontalScroll(event: React.WheelEvent) {\n\tconst mode = event.deltaMode;\n\tlet deltaPx = 0;\n\n\tif (mode === 0) {\n\t\tdeltaPx = event.deltaY;\n\t} else if (mode === 1) {\n\t\tdeltaPx = event.deltaY * 160;\n\t} else if (mode === 2) {\n\t\tdeltaPx = event.currentTarget.clientWidth;\n\t}\n\n\tconst newScrollLeft = event.currentTarget.scrollLeft + deltaPx;\n\n\tevent.currentTarget.scrollTo({\n\t\tleft: newScrollLeft,\n\t\tbehavior: \"smooth\",\n\t});\n}\n\nfunction performHorizontalScroll(\n\ttabsListRef: React.RefObject<HTMLDivElement | null>,\n\tdirection: \"left\" | \"right\",\n) {\n\tif (!tabsListRef.current) return;\n\tconst scrollAmount = 160;\n\tlet newScrollLeft = tabsListRef.current.scrollLeft;\n\n\tif (direction === \"left\") {\n\t\tnewScrollLeft -= scrollAmount;\n\t\tnewScrollLeft -= newScrollLeft % scrollAmount;\n\t} else {\n\t\tnewScrollLeft += scrollAmount;\n\n\t\tconst rightCoord = newScrollLeft + tabsListRef.current.clientWidth;\n\n\t\tif (rightCoord % scrollAmount !== 0) {\n\t\t\tnewScrollLeft += scrollAmount - (rightCoord % scrollAmount);\n\t\t}\n\t}\n\n\ttabsListRef.current.scrollTo({\n\t\tleft: newScrollLeft,\n\t\tbehavior: \"smooth\",\n\t});\n}\n\ntype EdgeScrollPosition = \"touch\" | \"depart\";\ntype FlowType = \"overflow\" | \"underflow\";\n\ntype TabsListProps = {\n\tonLeftEdge?: (position: EdgeScrollPosition) => void;\n\tonRightEdge?: (position: EdgeScrollPosition) => void;\n\tonFlow?: (flow: FlowType) => void;\n\tonResize?: (entries: ResizeObserverEntry[]) => void;\n\tonTabChange?: (mutationRecords: MutationRecord[]) => void;\n} & React.ComponentProps<typeof TabsPrimitive.List>;\n\nfunction TabsList({\n\tclassName,\n\tonLeftEdge,\n\tonRightEdge,\n\tonResize,\n\tonFlow,\n\tonTabChange,\n\t...props\n}: TabsListProps) {\n\tconst tabListRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst onLeftEdgeRef = React.useRef(onLeftEdge);\n\tReact.useEffect(() => {\n\t\tonLeftEdgeRef.current = onLeftEdge;\n\t}, [onLeftEdge]);\n\n\tconst onResizeRef = React.useRef(onResize);\n\tReact.useEffect(() => {\n\t\tonResizeRef.current = onResize;\n\t}, [onResize]);\n\n\tconst onRightEdgeRef = React.useRef(onRightEdge);\n\tReact.useEffect(() => {\n\t\tonRightEdgeRef.current = onRightEdge;\n\t}, [onRightEdge]);\n\n\tconst onFlowRef = React.useRef(onFlow);\n\tReact.useEffect(() => {\n\t\tonFlowRef.current = onFlow;\n\t}, [onFlow]);\n\n\tconst onTabChangeRef = React.useRef(onTabChange);\n\tReact.useEffect(() => {\n\t\tonTabChangeRef.current = onTabChange;\n\t}, [onTabChange]);\n\n\tReact.useEffect(() => {\n\t\tif (tabListRef.current === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst tabList = tabListRef.current;\n\n\t\tlet last: {\n\t\t\tscrollLeft: number;\n\t\t\tscrollWidth: number;\n\t\t\tclientWidth: number;\n\t\t} | null = null;\n\n\t\tconst handleScroll = () => {\n\t\t\tif (onLeftEdgeRef.current) {\n\t\t\t\tconst newState: EdgeScrollPosition =\n\t\t\t\t\ttabList.scrollLeft < 1 ? \"touch\" : \"depart\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonLeftEdgeRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState: EdgeScrollPosition =\n\t\t\t\t\t\tlast.scrollLeft < 1 ? \"touch\" : \"depart\";\n\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonLeftEdgeRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onRightEdgeRef.current) {\n\t\t\t\tconst newState: EdgeScrollPosition =\n\t\t\t\t\ttabList.scrollWidth - tabList.clientWidth - tabList.scrollLeft < 1\n\t\t\t\t\t\t? \"touch\"\n\t\t\t\t\t\t: \"depart\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonRightEdgeRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState: EdgeScrollPosition =\n\t\t\t\t\t\tlast.scrollWidth - last.clientWidth - last.scrollLeft < 1\n\t\t\t\t\t\t\t? \"touch\"\n\t\t\t\t\t\t\t: \"depart\";\n\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonRightEdgeRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onFlowRef.current) {\n\t\t\t\tconst newState: FlowType =\n\t\t\t\t\ttabList.scrollWidth > tabList.clientWidth ? \"overflow\" : \"underflow\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonFlowRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState =\n\t\t\t\t\t\tlast.scrollWidth > last.clientWidth ? \"overflow\" : \"underflow\";\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonFlowRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlast = {\n\t\t\t\tscrollLeft: tabList.scrollLeft,\n\t\t\t\tscrollWidth: tabList.scrollWidth,\n\t\t\t\tclientWidth: tabList.clientWidth,\n\t\t\t};\n\t\t};\n\n\t\tconst scrollCallback = (_ev: unknown) => handleScroll();\n\t\tconst resizeObserver = new ResizeObserver((entries) => {\n\t\t\thandleScroll();\n\t\t\tif (onResizeRef.current) {\n\t\t\t\tonResizeRef.current(entries);\n\t\t\t}\n\t\t});\n\t\tconst mutationObserver = new MutationObserver((mutationRecords) => {\n\t\t\thandleScroll();\n\t\t\tif (onTabChangeRef.current) {\n\t\t\t\tonTabChangeRef.current(mutationRecords);\n\t\t\t}\n\t\t});\n\n\t\ttabList.addEventListener(\"scroll\", scrollCallback, { passive: true });\n\t\tresizeObserver.observe(tabList);\n\t\tmutationObserver.observe(tabList, { childList: true });\n\n\t\treturn () => {\n\t\t\ttabList.removeEventListener(\"scroll\", scrollCallback);\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<TabsPrimitive.List\n\t\t\tdata-slot=\"tabs-list\"\n\t\t\tclassName={cn(\"inline-flex w-fit items-center\", className)}\n\t\t\t{...props}\n\t\t\tref={(element) => {\n\t\t\t\ttabListRef.current = element;\n\t\t\t\tif (props.ref !== undefined && props.ref !== null) {\n\t\t\t\t\tif (typeof props.ref === \"function\") {\n\t\t\t\t\t\tprops.ref(element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprops.ref.current = element;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ntype TabScrollButtonProps = {\n\tdisabled: boolean;\n\tonClick: () => void;\n};\n\nfunction TabScrollLeftButton({\n\tdisabled,\n\tonClick,\n}: TabScrollButtonProps): React.ReactElement {\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"link\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName=\"h-full border-r border-b bg-bg-secondary rounded-none\"\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t<ChevronLeft />\n\t\t</Button>\n\t);\n}\n\nfunction TabScrollRightButton({\n\tdisabled,\n\tonClick,\n}: TabScrollButtonProps): React.ReactElement {\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"link\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName=\"h-full border-l border-b bg-bg-secondary rounded-none\"\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t<ChevronRight />\n\t\t</Button>\n\t);\n}\n\nfunction TabsBrowserList({\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n\tconst tabsListRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst [showScrollButtons, setShowScrollButtons] = React.useState(false);\n\tconst [canScrollLeft, setCanScrollLeft] = React.useState(false);\n\tconst [canScrollRight, setCanScrollRight] = React.useState(false);\n\n\treturn (\n\t\t<React.Fragment>\n\t\t\t{showScrollButtons && (\n\t\t\t\t<TabScrollLeftButton\n\t\t\t\t\tdisabled={!canScrollLeft}\n\t\t\t\t\tonClick={() => performHorizontalScroll(tabsListRef, \"left\")}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<TabsList\n\t\t\t\tonLeftEdge={(edgeState) => {\n\t\t\t\t\tif (edgeState === \"touch\") {\n\t\t\t\t\t\tsetCanScrollLeft(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetCanScrollLeft(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonRightEdge={(edgeState) => {\n\t\t\t\t\tif (edgeState === \"touch\") {\n\t\t\t\t\t\tsetCanScrollRight(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetCanScrollRight(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonFlow={(flow) => {\n\t\t\t\t\tif (flow === \"overflow\") {\n\t\t\t\t\t\tsetShowScrollButtons(true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetShowScrollButtons(false);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonResize={() => {\n\t\t\t\t\ttabsListRef.current\n\t\t\t\t\t\t?.querySelector<HTMLButtonElement>('button[data-state=\"active\"]')\n\t\t\t\t\t\t?.scrollIntoView();\n\t\t\t\t}}\n\t\t\t\tonTabChange={(entries) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tentries.filter((entry) => entry.addedNodes.length !== 0).length !==\n\t\t\t\t\t\t0\n\t\t\t\t\t) {\n\t\t\t\t\t\ttabsListRef.current\n\t\t\t\t\t\t\t?.querySelector<HTMLButtonElement>('button[data-state=\"active\"]')\n\t\t\t\t\t\t\t?.scrollIntoView();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tdata-slot=\"tabs-list\"\n\t\t\t\tclassName={cn(tabsListStyles, className)}\n\t\t\t\tonWheel={(event) => horizontalScroll(event)}\n\t\t\t\t{...props}\n\t\t\t\tref={tabsListRef}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</TabsList>\n\n\t\t\t{showScrollButtons && (\n\t\t\t\t<TabScrollRightButton\n\t\t\t\t\tdisabled={!canScrollRight}\n\t\t\t\t\tonClick={() => performHorizontalScroll(tabsListRef, \"right\")}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</React.Fragment>\n\t);\n}\n\nexport function TabsListDropdown({\n\ttabs,\n\thandleTabSelect,\n\thandleCloseTab,\n}: {\n\ttabs: { id: string; content: React.ReactNode }[];\n\thandleTabSelect?: (tabId: string) => void;\n\thandleCloseTab?: (tabId: string) => void;\n}) {\n\tconst [isMenuOpen, setIsMenuOpen] = React.useState(false);\n\treturn (\n\t\t<Popover open={isMenuOpen} onOpenChange={setIsMenuOpen}>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button variant=\"link\" className=\"bg-bg-secondary h-full border-b pr-6\">\n\t\t\t\t\t<ChevronDownIcon className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent className=\"w-80 p-0 mr-3\" align=\"end\">\n\t\t\t\t<Command>\n\t\t\t\t\t<CommandInput placeholder=\"Search tabs...\" />\n\t\t\t\t\t<CommandList>\n\t\t\t\t\t\t<CommandEmpty>Not tabs found.</CommandEmpty>\n\t\t\t\t\t\t{tabs.map((tab) => (\n\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\thandleTabSelect?.(tab.id);\n\t\t\t\t\t\t\t\t\tsetIsMenuOpen(false);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"group flex items-center justify-between\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tab.content}\n\t\t\t\t\t\t\t\t{tabs.length > 1 && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"opacity-0 group-hover:opacity-100 transition-opacity p-1 ml-2\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\thandleCloseTab?.(tab.id);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</CommandList>\n\t\t\t\t</Command>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n\nfunction TabsTrigger({\n\tclassName,\n\tonClose,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger> & {\n\tonClose?: (value: string) => void;\n}) {\n\tconst variant = React.useContext(TabsVariantContext);\n\tconst isSecondary = variant === \"secondary\";\n\tconst isTertiary = variant === \"tertiary\";\n\n\treturn (\n\t\t<TabsPrimitive.Trigger\n\t\t\tdata-slot=\"tabs-trigger\"\n\t\t\tclassName={cn(\n\t\t\t\tbaseTabsTriggerStyles,\n\t\t\t\tonClose ? \"justify-between\" : \"justify-start\",\n\t\t\t\tisSecondary && [\"body14\", \"data-[state=active]:body14bold\"],\n\t\t\t\tisTertiary && [\"typo-body\", \"data-[state=active]:typo-label\"],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{props.children}\n\n\t\t\t{onClose && (\n\t\t\t\t<Button\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tonClose(props.value);\n\t\t\t\t\t}}\n\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tclassName=\"p-0 ml-2 opacity-0 group-hover/tabs-trigger:opacity-100 transition-opacity\"\n\t\t\t\t\tasChild\n\t\t\t\t>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<X />\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</TabsPrimitive.Trigger>\n\t);\n}\n\nfunction TabsContent({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n\treturn (\n\t\t<TabsPrimitive.Content\n\t\t\tdata-slot=\"tabs-content\"\n\t\t\tclassName={cn(tabsContentStyles, className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, TabsBrowserList };\n"],"names":["TabsPrimitive","cva","ChevronDownIcon","ChevronLeft","ChevronRight","Plus","X","React","cn","Button","Command","CommandEmpty","CommandInput","CommandItem","CommandList","Popover","PopoverContent","PopoverTrigger","baseTabsStyles","tabsAddButtonContainerStyles","tabsListStyles","baseTabsTriggerStyles","tabsContentStyles","tabsVariants","variants","variant","browser","secondary","tertiary","TabsVariantContext","createContext","undefined","Tabs","className","props","tabProps","onValueChange","value","Provider","Root","TabsAddButton","div","data-slot","horizontalScroll","event","mode","deltaMode","deltaPx","deltaY","currentTarget","clientWidth","newScrollLeft","scrollLeft","scrollTo","left","behavior","performHorizontalScroll","tabsListRef","direction","current","scrollAmount","rightCoord","TabsList","onLeftEdge","onRightEdge","onResize","onFlow","onTabChange","tabListRef","useRef","onLeftEdgeRef","useEffect","onResizeRef","onRightEdgeRef","onFlowRef","onTabChangeRef","tabList","last","handleScroll","newState","lastState","scrollWidth","scrollCallback","_ev","resizeObserver","ResizeObserver","entries","mutationObserver","MutationObserver","mutationRecords","addEventListener","passive","observe","childList","removeEventListener","disconnect","List","ref","element","TabScrollLeftButton","disabled","onClick","size","TabScrollRightButton","TabsBrowserList","children","showScrollButtons","setShowScrollButtons","useState","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","Fragment","edgeState","flow","querySelector","scrollIntoView","filter","entry","addedNodes","length","onWheel","TabsListDropdown","tabs","handleTabSelect","handleCloseTab","isMenuOpen","setIsMenuOpen","open","onOpenChange","asChild","align","placeholder","map","tab","onSelect","id","content","e","stopPropagation","TabsTrigger","onClose","useContext","isSecondary","isTertiary","Trigger","span","TabsContent","Content"],"mappings":"AAAA;;AACA,YAAYA,mBAAmB,uBAAuB;AACtD,SAASC,GAAG,QAA2B,2BAA2B;AAClE,SACCC,eAAe,EACfC,WAAW,EACXC,YAAY,EACZC,IAAI,EACJC,CAAC,QACK,eAAe;AACtB,YAAYC,WAAW,QAAQ;AAC/B,SAASC,EAAE,QAAQ,qBAAoB;AACvC,SAASC,MAAM,QAAQ,cAAW;AAClC,SACCC,OAAO,EACPC,YAAY,EACZC,YAAY,EACZC,WAAW,EACXC,WAAW,QACL,eAAY;AACnB,SAASC,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAQ,eAAY;AAEpE,mBAAmB;AACnB,MAAMC,iBAAiBV,GAAG,QAAQ,YAAY;AAE9C,mCAAmC;AACnC,MAAMW,+BAA+BX,GACpC,QACA,UACA,mBACA,YACA;AAGD,mBAAmB;AACnB,MAAMY,iBAAiBZ,GACtB,eACA,SACA,gBACA;AAGD,2BAA2B;AAC3B,MAAMa,wBAAwBb,GAC7B,kBAAkB;AAClB,cACA,UACA,QACA,eACA,gBACA,kBACA,QACA,qBACA,oBAAoB;AACpB,QACA,UACA,aAAa;AACb,aACA,kBAAkB;AAClB,kBACA,sBACA,4BACA,kCACA,yCACA,6CACA,uBACA,gCACA,UAAU;AACV,cACA,wBACA,wBAAwB;AACxB,wBACA,sCACA,2BACA,cAAc;AACd,iCACA,QAAQ;AACR,+BACA,oBACA,wCACA,SAAS;AACT;AAGD,sBAAsB;AACtB,MAAMc,oBAAoBd,GAAG,QAAQ,gBAAgB;AAErD,MAAMe,eAAetB,IAAI,IAAI;IAC5BuB,UAAU;QACTC,SAAS;YACRC,SAASlB,GACR,OAAO;YACP,YACA,gBACA,QACA,WAAW;YACX,4CACA,qCACA,cAAc;YACd,wCACA,oCACA,wCACA,yEACA,gEACA,+EACA;YAEDmB,WAAWnB,GACV,WAAW;YACX,iCACA,2CACA,cAAc;YACd,oCACA,oCACA,oCACA,oCACA,mDACA,uDACA,8DACA,wEACA;YAEDoB,UAAUpB,GACT,WAAW;YACX,4CACA,qCACA,sDACA,kCACA,iCACA,iCACA,cAAc;YACd,mCACA,oCACA,uCACA,0CA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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/shadcn/components/ui/tabs.tsx"],"sourcesContent":["\"use client\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n\tChevronDownIcon,\n\tChevronLeft,\n\tChevronRight,\n\tPlus,\n\tX,\n} from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"#shadcn/lib/utils\";\nimport { Button } from \"./button\";\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n} from \"./command\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\n// Base tabs styles\nconst baseTabsStyles = cn(\"flex\", \"flex-col\", \"h-full\");\n\n// Tabs add button container styles\nconst tabsAddButtonContainerStyles = cn(\n\t\"grow\",\n\t\"h-full\",\n\t\"bg-bg-secondary\",\n\t\"border-l\",\n\t\"border-b\",\n);\n\n// Tabs list styles\nconst tabsListStyles = cn(\n\t\"inline-flex\",\n\t\"w-fit\",\n\t\"items-center\",\n\t\"no-scrollbar\",\n);\n\n// Base tabs trigger styles\nconst baseTabsTriggerStyles = cn(\n\t// Layout & Sizing\n\t\"box-border\",\n\t\"flex-1\",\n\t\"h-10\",\n\t\"inline-flex\",\n\t\"items-center\",\n\t\"justify-center\",\n\t\"px-3\",\n\t\"whitespace-nowrap\",\n\t// Spacing & Padding\n\t\"pb-2\",\n\t\"pt-2.5\",\n\t// Typography\n\t\"typo-body\",\n\t// Colors & States\n\t\"cursor-pointer\",\n\t\"text-text-tertiary\",\n\t\"hover:bg-bg-secondary/60\",\n\t\"hover:text-text-tertiary_hover\",\n\t\"data-[state=active]:text-text-primary\",\n\t\"data-[state=active]:border-b-border-brand\",\n\t\"disabled:opacity-50\",\n\t\"disabled:pointer-events-none\",\n\t// Borders\n\t\"border-b-2\",\n\t\"border-b-transparent\",\n\t// Focus & Accessibility\n\t\"focus-visible:ring-2\",\n\t\"focus-visible:ring-utility-blue/70\",\n\t\"focus-visible:outline-1\",\n\t// Transitions\n\t\"transition-[color,box-shadow]\",\n\t// Icons\n\t\"[&_svg]:pointer-events-none\",\n\t\"[&_svg]:shrink-0\",\n\t\"[&_svg:not([class*='size-'])]:size-4\",\n\t// Groups\n\t\"group/tabs-trigger\",\n);\n\n// Tabs content styles\nconst tabsContentStyles = cn(\"grow\", \"outline-none\", \"overflow-auto\");\n\nconst tabsVariants = cva(\"\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\tbrowser: cn(\n\t\t\t\t// Tabs\n\t\t\t\t\"flex-row\",\n\t\t\t\t\"items-center\",\n\t\t\t\t\"h-10\",\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:overflow-x-auto\",\n\t\t\t\t\"**:data-[slot=tabs-list]:divide-x\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:max-w-80\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:w-60\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:min-w-40\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-1\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:border-b-border-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=inactive]:pt-[9px]\", // TODO: Try to implement this without using pt-[9px].\n\t\t\t),\n\t\t\tsecondary: cn(\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:h-10\",\n\t\t\t\t\"**:data-[slot=tabs-list]:bg-bg-tertiary\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:h-10\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:px-3\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pb-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pt-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:hover:text-text-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-b-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-b-border-dark\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary\",\n\t\t\t),\n\t\t\ttertiary: cn(\n\t\t\t\t// TabsList\n\t\t\t\t\"**:data-[slot=tabs-list]:bg-bg-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-list]:border-b\",\n\t\t\t\t\"**:data-[slot=tabs-list]:border-b-border-separator\",\n\t\t\t\t\"**:data-[slot=tabs-list]:gap-2\",\n\t\t\t\t\"**:data-[slot=tabs-list]:px-4\",\n\t\t\t\t\"**:data-[slot=tabs-list]:py-2\",\n\t\t\t\t// TabsTrigger\n\t\t\t\t\"**:data-[slot=tabs-trigger]:h-7\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:px-3\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:rounded\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border-b-0\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pb-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:pt-2\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:border-transparent\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:text-text-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:hover:text-text-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:bg-bg-primary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:border-border-secondary\",\n\t\t\t\t\"**:data-[slot=tabs-trigger]:data-[state=active]:text-text-primary\",\n\t\t\t),\n\t\t},\n\t},\n});\n\n// Context for variant\nconst TabsVariantContext = React.createContext<\n\tVariantProps<typeof tabsVariants>[\"variant\"] | undefined\n>(undefined);\n\ntype TabsProps<T extends string> = Omit<\n\tReact.ComponentProps<typeof TabsPrimitive.Root> &\n\t\tVariantProps<typeof tabsVariants>,\n\t\"value\" | \"defaultValue\" | \"onValueChange\"\n> & {\n\tvalue?: T;\n\tdefaultValue?: T;\n\tonValueChange?: (value: T) => void;\n};\n\nfunction Tabs<T extends string = string>({\n\tclassName,\n\tvariant,\n\t...props\n}: TabsProps<T>) {\n\tconst tabProps = {\n\t\t\"data-slot\": \"tabs\",\n\t\tclassName: cn(baseTabsStyles, tabsVariants({ variant }), className),\n\t\t...props,\n\t\tonValueChange: (value: string) => props.onValueChange?.(value as T),\n\t};\n\treturn (\n\t\t<TabsVariantContext.Provider value={variant}>\n\t\t\t<TabsPrimitive.Root {...tabProps} />\n\t\t</TabsVariantContext.Provider>\n\t);\n}\n\nexport function TabsAddButton(props: React.ComponentProps<typeof Button>) {\n\treturn (\n\t\t<div className={tabsAddButtonContainerStyles}>\n\t\t\t<Button\n\t\t\t\tdata-slot=\"tabs-add-button\"\n\t\t\t\tvariant=\"link\"\n\t\t\t\tclassName=\"h-full\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Plus />\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n\nfunction horizontalScroll(event: React.WheelEvent) {\n\tconst mode = event.deltaMode;\n\tlet deltaPx = 0;\n\n\tif (mode === 0) {\n\t\tdeltaPx = event.deltaY;\n\t} else if (mode === 1) {\n\t\tdeltaPx = event.deltaY * 160;\n\t} else if (mode === 2) {\n\t\tdeltaPx = event.currentTarget.clientWidth;\n\t}\n\n\tconst newScrollLeft = event.currentTarget.scrollLeft + deltaPx;\n\n\tevent.currentTarget.scrollTo({\n\t\tleft: newScrollLeft,\n\t\tbehavior: \"smooth\",\n\t});\n}\n\nfunction performHorizontalScroll(\n\ttabsListRef: React.RefObject<HTMLDivElement | null>,\n\tdirection: \"left\" | \"right\",\n) {\n\tif (!tabsListRef.current) return;\n\tconst scrollAmount = 160;\n\tlet newScrollLeft = tabsListRef.current.scrollLeft;\n\n\tif (direction === \"left\") {\n\t\tnewScrollLeft -= scrollAmount;\n\t\tnewScrollLeft -= newScrollLeft % scrollAmount;\n\t} else {\n\t\tnewScrollLeft += scrollAmount;\n\n\t\tconst rightCoord = newScrollLeft + tabsListRef.current.clientWidth;\n\n\t\tif (rightCoord % scrollAmount !== 0) {\n\t\t\tnewScrollLeft += scrollAmount - (rightCoord % scrollAmount);\n\t\t}\n\t}\n\n\ttabsListRef.current.scrollTo({\n\t\tleft: newScrollLeft,\n\t\tbehavior: \"smooth\",\n\t});\n}\n\ntype EdgeScrollPosition = \"touch\" | \"depart\";\ntype FlowType = \"overflow\" | \"underflow\";\n\ntype TabsListProps = {\n\tonLeftEdge?: (position: EdgeScrollPosition) => void;\n\tonRightEdge?: (position: EdgeScrollPosition) => void;\n\tonFlow?: (flow: FlowType) => void;\n\tonResize?: (entries: ResizeObserverEntry[]) => void;\n\tonTabChange?: (mutationRecords: MutationRecord[]) => void;\n} & React.ComponentProps<typeof TabsPrimitive.List>;\n\nfunction TabsList({\n\tclassName,\n\tonLeftEdge,\n\tonRightEdge,\n\tonResize,\n\tonFlow,\n\tonTabChange,\n\t...props\n}: TabsListProps) {\n\tconst tabListRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst onLeftEdgeRef = React.useRef(onLeftEdge);\n\tReact.useEffect(() => {\n\t\tonLeftEdgeRef.current = onLeftEdge;\n\t}, [onLeftEdge]);\n\n\tconst onResizeRef = React.useRef(onResize);\n\tReact.useEffect(() => {\n\t\tonResizeRef.current = onResize;\n\t}, [onResize]);\n\n\tconst onRightEdgeRef = React.useRef(onRightEdge);\n\tReact.useEffect(() => {\n\t\tonRightEdgeRef.current = onRightEdge;\n\t}, [onRightEdge]);\n\n\tconst onFlowRef = React.useRef(onFlow);\n\tReact.useEffect(() => {\n\t\tonFlowRef.current = onFlow;\n\t}, [onFlow]);\n\n\tconst onTabChangeRef = React.useRef(onTabChange);\n\tReact.useEffect(() => {\n\t\tonTabChangeRef.current = onTabChange;\n\t}, [onTabChange]);\n\n\tReact.useEffect(() => {\n\t\tif (tabListRef.current === null) {\n\t\t\treturn;\n\t\t}\n\t\tconst tabList = tabListRef.current;\n\n\t\tlet last: {\n\t\t\tscrollLeft: number;\n\t\t\tscrollWidth: number;\n\t\t\tclientWidth: number;\n\t\t} | null = null;\n\n\t\tconst handleScroll = () => {\n\t\t\tif (onLeftEdgeRef.current) {\n\t\t\t\tconst newState: EdgeScrollPosition =\n\t\t\t\t\ttabList.scrollLeft < 1 ? \"touch\" : \"depart\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonLeftEdgeRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState: EdgeScrollPosition =\n\t\t\t\t\t\tlast.scrollLeft < 1 ? \"touch\" : \"depart\";\n\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonLeftEdgeRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onRightEdgeRef.current) {\n\t\t\t\tconst newState: EdgeScrollPosition =\n\t\t\t\t\ttabList.scrollWidth - tabList.clientWidth - tabList.scrollLeft < 1\n\t\t\t\t\t\t? \"touch\"\n\t\t\t\t\t\t: \"depart\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonRightEdgeRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState: EdgeScrollPosition =\n\t\t\t\t\t\tlast.scrollWidth - last.clientWidth - last.scrollLeft < 1\n\t\t\t\t\t\t\t? \"touch\"\n\t\t\t\t\t\t\t: \"depart\";\n\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonRightEdgeRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (onFlowRef.current) {\n\t\t\t\tconst newState: FlowType =\n\t\t\t\t\ttabList.scrollWidth > tabList.clientWidth ? \"overflow\" : \"underflow\";\n\n\t\t\t\tif (last === null) {\n\t\t\t\t\tonFlowRef.current(newState);\n\t\t\t\t} else {\n\t\t\t\t\tconst lastState =\n\t\t\t\t\t\tlast.scrollWidth > last.clientWidth ? \"overflow\" : \"underflow\";\n\t\t\t\t\tif (lastState !== newState) {\n\t\t\t\t\t\tonFlowRef.current(newState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlast = {\n\t\t\t\tscrollLeft: tabList.scrollLeft,\n\t\t\t\tscrollWidth: tabList.scrollWidth,\n\t\t\t\tclientWidth: tabList.clientWidth,\n\t\t\t};\n\t\t};\n\n\t\tconst scrollCallback = (_ev: unknown) => handleScroll();\n\t\tconst resizeObserver = new ResizeObserver((entries) => {\n\t\t\thandleScroll();\n\t\t\tif (onResizeRef.current) {\n\t\t\t\tonResizeRef.current(entries);\n\t\t\t}\n\t\t});\n\t\tconst mutationObserver = new MutationObserver((mutationRecords) => {\n\t\t\thandleScroll();\n\t\t\tif (onTabChangeRef.current) {\n\t\t\t\tonTabChangeRef.current(mutationRecords);\n\t\t\t}\n\t\t});\n\n\t\ttabList.addEventListener(\"scroll\", scrollCallback, { passive: true });\n\t\tresizeObserver.observe(tabList);\n\t\tmutationObserver.observe(tabList, { childList: true });\n\n\t\treturn () => {\n\t\t\ttabList.removeEventListener(\"scroll\", scrollCallback);\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<TabsPrimitive.List\n\t\t\tdata-slot=\"tabs-list\"\n\t\t\tclassName={cn(\"inline-flex w-fit items-center\", className)}\n\t\t\t{...props}\n\t\t\tref={(element) => {\n\t\t\t\ttabListRef.current = element;\n\t\t\t\tif (props.ref !== undefined && props.ref !== null) {\n\t\t\t\t\tif (typeof props.ref === \"function\") {\n\t\t\t\t\t\tprops.ref(element);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprops.ref.current = element;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ntype TabScrollButtonProps = {\n\tdisabled: boolean;\n\tonClick: () => void;\n};\n\nfunction TabScrollLeftButton({\n\tdisabled,\n\tonClick,\n}: TabScrollButtonProps): React.ReactElement {\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"link\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName=\"h-full border-r border-b bg-bg-secondary rounded-none\"\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t<ChevronLeft />\n\t\t</Button>\n\t);\n}\n\nfunction TabScrollRightButton({\n\tdisabled,\n\tonClick,\n}: TabScrollButtonProps): React.ReactElement {\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"link\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={disabled}\n\t\t\tclassName=\"h-full border-l border-b bg-bg-secondary rounded-none\"\n\t\t\tonClick={onClick}\n\t\t>\n\t\t\t<ChevronRight />\n\t\t</Button>\n\t);\n}\n\ntype DragState = {\n\tindex: number;\n\tstartX: number;\n\toffsetX: number;\n\tcurrentIndex: number;\n\twidths: number[];\n\tlefts: number[];\n};\n\nconst DRAG_THRESHOLD = 5;\n\nfunction useTabReorder(\n\tonReorder: ((fromIndex: number, toIndex: number) => void) | undefined,\n) {\n\tconst [drag, setDrag] = React.useState<DragState | null>(null);\n\tconst dragRef = React.useRef<DragState | null>(null);\n\tconst pendingRef = React.useRef(false);\n\tconst itemsRef = React.useRef<(HTMLDivElement | null)[]>([]);\n\n\tconst handlePointerDown = React.useCallback(\n\t\t(e: React.PointerEvent, index: number) => {\n\t\t\tif (!onReorder || e.button !== 0) return;\n\t\t\tconst items = itemsRef.current;\n\t\t\tconst widths = items.map((el) => el?.offsetWidth ?? 0);\n\t\t\tconst lefts: number[] = [];\n\t\t\tlet acc = 0;\n\t\t\tfor (const w of widths) {\n\t\t\t\tlefts.push(acc);\n\t\t\t\tacc += w;\n\t\t\t}\n\t\t\tdragRef.current = {\n\t\t\t\tindex,\n\t\t\t\tstartX: e.clientX,\n\t\t\t\toffsetX: 0,\n\t\t\t\tcurrentIndex: index,\n\t\t\t\twidths,\n\t\t\t\tlefts,\n\t\t\t};\n\t\t\tpendingRef.current = true;\n\t\t\t(e.target as HTMLElement).setPointerCapture(e.pointerId);\n\t\t},\n\t\t[onReorder],\n\t);\n\n\tconst handlePointerMove = React.useCallback((e: React.PointerEvent) => {\n\t\tconst d = dragRef.current;\n\t\tif (!d) return;\n\t\tconst dx = e.clientX - d.startX;\n\t\tif (pendingRef.current) {\n\t\t\tif (Math.abs(dx) < DRAG_THRESHOLD) return;\n\t\t\tpendingRef.current = false;\n\t\t}\n\t\tconst draggedLeft = d.lefts[d.index] ?? 0;\n\t\tconst draggedWidth = d.widths[d.index] ?? 0;\n\t\tconst draggedRightEdge = draggedLeft + draggedWidth + dx;\n\t\tconst draggedLeftEdge = draggedLeft + dx;\n\t\tlet newIndex = d.index;\n\t\tconst TRIGGER_RATIO = 0.3;\n\t\tfor (let i = 0; i < d.lefts.length; i++) {\n\t\t\tif (i === d.index) continue;\n\t\t\tconst left = d.lefts[i] ?? 0;\n\t\t\tconst width = d.widths[i] ?? 0;\n\t\t\tif (i > d.index) {\n\t\t\t\t// Dragging right: trigger when right edge enters 30% of target\n\t\t\t\tif (draggedRightEdge > left + width * TRIGGER_RATIO) newIndex = i;\n\t\t\t} else {\n\t\t\t\t// Dragging left: trigger when left edge enters 30% from right\n\t\t\t\tif (draggedLeftEdge < left + width * (1 - TRIGGER_RATIO))\n\t\t\t\t\tnewIndex = Math.min(newIndex, i);\n\t\t\t}\n\t\t}\n\t\tconst next: DragState = { ...d, offsetX: dx, currentIndex: newIndex };\n\t\tdragRef.current = next;\n\t\tsetDrag(next);\n\t}, []);\n\n\tconst handlePointerUp = React.useCallback(() => {\n\t\tconst d = dragRef.current;\n\t\tif (d && !pendingRef.current && d.index !== d.currentIndex) {\n\t\t\tonReorder?.(d.index, d.currentIndex);\n\t\t}\n\t\tdragRef.current = null;\n\t\tpendingRef.current = false;\n\t\tsetDrag(null);\n\t}, [onReorder]);\n\n\tconst getTransform = React.useCallback(\n\t\t(index: number): React.CSSProperties => {\n\t\t\tif (!drag || pendingRef.current) return {};\n\t\t\tif (index === drag.index) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX(${drag.offsetX}px)`,\n\t\t\t\t\tzIndex: 10,\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\tbackground: \"var(--color-bg-primary)\",\n\t\t\t\t\tborderLeft: \"1px solid var(--color-border-default)\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst from = drag.index;\n\t\t\tconst to = drag.currentIndex;\n\t\t\tconst draggedWidth = drag.widths[from] ?? 0;\n\t\t\tif (from < to && index > from && index <= to) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX(${-draggedWidth}px)`,\n\t\t\t\t\ttransition: \"transform 200ms ease\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (from > to && index >= to && index < from) {\n\t\t\t\treturn {\n\t\t\t\t\ttransform: `translateX(${draggedWidth}px)`,\n\t\t\t\t\ttransition: \"transform 200ms ease\",\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { transition: \"transform 200ms ease\" };\n\t\t},\n\t\t[drag],\n\t);\n\n\treturn {\n\t\tdrag,\n\t\titemsRef,\n\t\thandlePointerDown,\n\t\thandlePointerMove,\n\t\thandlePointerUp,\n\t\tgetTransform,\n\t};\n}\n\nfunction TabsBrowserList({\n\tclassName,\n\tchildren,\n\tonReorder,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n\tonReorder?: (fromIndex: number, toIndex: number) => void;\n}) {\n\tconst tabsListRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst [showScrollButtons, setShowScrollButtons] = React.useState(false);\n\tconst [canScrollLeft, setCanScrollLeft] = React.useState(false);\n\tconst [canScrollRight, setCanScrollRight] = React.useState(false);\n\n\tconst {\n\t\tdrag,\n\t\titemsRef,\n\t\thandlePointerDown,\n\t\thandlePointerMove,\n\t\thandlePointerUp,\n\t\tgetTransform,\n\t} = useTabReorder(onReorder);\n\n\tconst wrappedChildren =\n\t\tonReorder && React.Children.count(children) > 1\n\t\t\t? React.Children.map(children, (child, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\titemsRef.current[index] = el;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tstyle={getTransform(index)}\n\t\t\t\t\t\tonPointerDown={(e) => handlePointerDown(e, index)}\n\t\t\t\t\t\tonPointerMove={handlePointerMove}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tclassName={cn(drag?.index === index && \"cursor-grabbing\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{child}\n\t\t\t\t\t</div>\n\t\t\t\t))\n\t\t\t: children;\n\n\treturn (\n\t\t<React.Fragment>\n\t\t\t{showScrollButtons && (\n\t\t\t\t<TabScrollLeftButton\n\t\t\t\t\tdisabled={!canScrollLeft}\n\t\t\t\t\tonClick={() => performHorizontalScroll(tabsListRef, \"left\")}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<TabsList\n\t\t\t\tonLeftEdge={(edgeState) => {\n\t\t\t\t\tif (edgeState === \"touch\") {\n\t\t\t\t\t\tsetCanScrollLeft(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetCanScrollLeft(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonRightEdge={(edgeState) => {\n\t\t\t\t\tif (edgeState === \"touch\") {\n\t\t\t\t\t\tsetCanScrollRight(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetCanScrollRight(true);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonFlow={(flow) => {\n\t\t\t\t\tif (flow === \"overflow\") {\n\t\t\t\t\t\tsetShowScrollButtons(true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetShowScrollButtons(false);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonResize={() => {\n\t\t\t\t\ttabsListRef.current\n\t\t\t\t\t\t?.querySelector<HTMLButtonElement>('button[data-state=\"active\"]')\n\t\t\t\t\t\t?.scrollIntoView();\n\t\t\t\t}}\n\t\t\t\tonTabChange={(entries) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tentries.filter((entry) => entry.addedNodes.length !== 0).length !==\n\t\t\t\t\t\t0\n\t\t\t\t\t) {\n\t\t\t\t\t\ttabsListRef.current\n\t\t\t\t\t\t\t?.querySelector<HTMLButtonElement>('button[data-state=\"active\"]')\n\t\t\t\t\t\t\t?.scrollIntoView();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tdata-slot=\"tabs-list\"\n\t\t\t\tclassName={cn(tabsListStyles, className)}\n\t\t\t\tonWheel={(event) => horizontalScroll(event)}\n\t\t\t\t{...props}\n\t\t\t\tref={tabsListRef}\n\t\t\t>\n\t\t\t\t{wrappedChildren}\n\t\t\t</TabsList>\n\n\t\t\t{showScrollButtons && (\n\t\t\t\t<TabScrollRightButton\n\t\t\t\t\tdisabled={!canScrollRight}\n\t\t\t\t\tonClick={() => performHorizontalScroll(tabsListRef, \"right\")}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</React.Fragment>\n\t);\n}\n\nexport function TabsListDropdown({\n\ttabs,\n\thandleTabSelect,\n\thandleCloseTab,\n}: {\n\ttabs: { id: string; content: React.ReactNode }[];\n\thandleTabSelect?: (tabId: string) => void;\n\thandleCloseTab?: (tabId: string) => void;\n}) {\n\tconst [isMenuOpen, setIsMenuOpen] = React.useState(false);\n\treturn (\n\t\t<Popover open={isMenuOpen} onOpenChange={setIsMenuOpen}>\n\t\t\t<PopoverTrigger asChild>\n\t\t\t\t<Button variant=\"link\" className=\"bg-bg-secondary h-full border-b pr-6\">\n\t\t\t\t\t<ChevronDownIcon className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent className=\"w-80 p-0 mr-3\" align=\"end\">\n\t\t\t\t<Command>\n\t\t\t\t\t<CommandInput placeholder=\"Search tabs...\" />\n\t\t\t\t\t<CommandList>\n\t\t\t\t\t\t<CommandEmpty>Not tabs found.</CommandEmpty>\n\t\t\t\t\t\t{tabs.map((tab) => (\n\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\tkey={tab.id}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\thandleTabSelect?.(tab.id);\n\t\t\t\t\t\t\t\t\tsetIsMenuOpen(false);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"group flex items-center justify-between\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{tab.content}\n\t\t\t\t\t\t\t\t{tabs.length > 1 && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"opacity-0 group-hover:opacity-100 transition-opacity p-1 ml-2\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\thandleCloseTab?.(tab.id);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X className=\"size-3\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</CommandList>\n\t\t\t\t</Command>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n\nfunction TabsTrigger({\n\tclassName,\n\tonClose,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger> & {\n\tonClose?: (value: string) => void;\n}) {\n\tconst variant = React.useContext(TabsVariantContext);\n\tconst isSecondary = variant === \"secondary\";\n\tconst isTertiary = variant === \"tertiary\";\n\n\treturn (\n\t\t<TabsPrimitive.Trigger\n\t\t\tdata-slot=\"tabs-trigger\"\n\t\t\tclassName={cn(\n\t\t\t\tbaseTabsTriggerStyles,\n\t\t\t\tonClose ? \"justify-between\" : \"justify-start\",\n\t\t\t\tisSecondary && [\"body14\", \"data-[state=active]:body14bold\"],\n\t\t\t\tisTertiary && [\"typo-body\", \"data-[state=active]:typo-label\"],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{props.children}\n\n\t\t\t{onClose && (\n\t\t\t\t<Button\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tonClose(props.value);\n\t\t\t\t\t}}\n\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tclassName=\"p-0 ml-2 opacity-0 group-hover/tabs-trigger:opacity-100 transition-opacity\"\n\t\t\t\t\tasChild\n\t\t\t\t>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<X />\n\t\t\t\t\t</span>\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</TabsPrimitive.Trigger>\n\t);\n}\n\nfunction TabsContent({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n\treturn (\n\t\t<TabsPrimitive.Content\n\t\t\tdata-slot=\"tabs-content\"\n\t\t\tclassName={cn(tabsContentStyles, className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, TabsBrowserList };\n"],"names":["TabsPrimitive","cva","ChevronDownIcon","ChevronLeft","ChevronRight","Plus","X","React","cn","Button","Command","CommandEmpty","CommandInput","CommandItem","CommandList","Popover","PopoverContent","PopoverTrigger","baseTabsStyles","tabsAddButtonContainerStyles","tabsListStyles","baseTabsTriggerStyles","tabsContentStyles","tabsVariants","variants","variant","browser","secondary","tertiary","TabsVariantContext","createContext","undefined","Tabs","className","props","tabProps","onValueChange","value","Provider","Root","TabsAddButton","div","data-slot","horizontalScroll","event","mode","deltaMode","deltaPx","deltaY","currentTarget","clientWidth","newScrollLeft","scrollLeft","scrollTo","left","behavior","performHorizontalScroll","tabsListRef","direction","current","scrollAmount","rightCoord","TabsList","onLeftEdge","onRightEdge","onResize","onFlow","onTabChange","tabListRef","useRef","onLeftEdgeRef","useEffect","onResizeRef","onRightEdgeRef","onFlowRef","onTabChangeRef","tabList","last","handleScroll","newState","lastState","scrollWidth","scrollCallback","_ev","resizeObserver","ResizeObserver","entries","mutationObserver","MutationObserver","mutationRecords","addEventListener","passive","observe","childList","removeEventListener","disconnect","List","ref","element","TabScrollLeftButton","disabled","onClick","size","TabScrollRightButton","DRAG_THRESHOLD","useTabReorder","onReorder","drag","setDrag","useState","dragRef","pendingRef","itemsRef","handlePointerDown","useCallback","e","index","button","items","widths","map","el","offsetWidth","lefts","acc","w","push","startX","clientX","offsetX","currentIndex","target","setPointerCapture","pointerId","handlePointerMove","d","dx","Math","abs","draggedLeft","draggedWidth","draggedRightEdge","draggedLeftEdge","newIndex","TRIGGER_RATIO","i","length","width","min","next","handlePointerUp","getTransform","transform","zIndex","position","background","borderLeft","from","to","transition","TabsBrowserList","children","showScrollButtons","setShowScrollButtons","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","wrappedChildren","Children","count","child","style","onPointerDown","onPointerMove","onPointerUp","Fragment","edgeState","flow","querySelector","scrollIntoView","filter","entry","addedNodes","onWheel","TabsListDropdown","tabs","handleTabSelect","handleCloseTab","isMenuOpen","setIsMenuOpen","open","onOpenChange","asChild","align","placeholder","tab","onSelect","id","content","stopPropagation","TabsTrigger","onClose","useContext","isSecondary","isTertiary","Trigger","span","TabsContent","Content"],"mappings":"AAAA;;AACA,YAAYA,mBAAmB,uBAAuB;AACtD,SAASC,GAAG,QAA2B,2BAA2B;AAClE,SACCC,eAAe,EACfC,WAAW,EACXC,YAAY,EACZC,IAAI,EACJC,CAAC,QACK,eAAe;AACtB,YAAYC,WAAW,QAAQ;AAC/B,SAASC,EAAE,QAAQ,qBAAoB;AACvC,SAASC,MAAM,QAAQ,cAAW;AAClC,SACCC,OAAO,EACPC,YAAY,EACZC,YAAY,EACZC,WAAW,EACXC,WAAW,QACL,eAAY;AACnB,SAASC,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAQ,eAAY;AAEpE,mBAAmB;AACnB,MAAMC,iBAAiBV,GAAG,QAAQ,YAAY;AAE9C,mCAAmC;AACnC,MAAMW,+BAA+BX,GACpC,QACA,UACA,mBACA,YACA;AAGD,mBAAmB;AACnB,MAAMY,iBAAiBZ,GACtB,eACA,SACA,gBACA;AAGD,2BAA2B;AAC3B,MAAMa,wBAAwBb,GAC7B,kBAAkB;AAClB,cACA,UACA,QACA,eACA,gBACA,kBACA,QACA,qBACA,oBAAoB;AACpB,QACA,UACA,aAAa;AACb,aACA,kBAAkB;AAClB,kBACA,sBACA,4BACA,kCACA,yCACA,6CACA,uBACA,gCACA,UAAU;AACV,cACA,wBACA,wBAAwB;AACxB,wBACA,sCACA,2BACA,cAAc;AACd,iCACA,QAAQ;AACR,+BACA,oBACA,wCACA,SAAS;AACT;AAGD,sBAAsB;AACtB,MAAMc,oBAAoBd,GAAG,QAAQ,gBAAgB;AAErD,MAAMe,eAAetB,IAAI,IAAI;IAC5BuB,UAAU;QACTC,SAAS;YACRC,SAASlB,GACR,OAAO;YACP,YACA,gBACA,QACA,WAAW;YACX,4CACA,qCACA,cAAc;YACd,wCACA,oCACA,wCACA,yEACA,gEACA,+EACA;YAEDmB,WAAWnB,GACV,WAAW;YACX,iCACA,2CACA,cAAc;YACd,oCACA,oCACA,oCACA,oCACA,mDACA,uDACA,8DACA,wEACA;YAEDoB,UAAUpB,GACT,WAAW;YACX,4CACA,qCACA,sDACA,kCACA,iCACA,iCACA,cAAc;YACd,mCACA,oCACA,uCACA,0CA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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Controls, Primary, Title } from "@storybook/addon-docs/blocks";
|
|
3
|
-
import { action } from "storybook/
|
|
3
|
+
import { action } from "storybook/actions";
|
|
4
4
|
import { Tabs, TabsAddButton, TabsContent, TabsList, TabsListDropdown, TabsTrigger } from "./tabs.js";
|
|
5
5
|
function TabsWrapper({ variant = "default" }) {
|
|
6
6
|
if (variant === "browser") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/shadcn/components/ui/tabs.stories.tsx"],"sourcesContent":["import { Controls, Primary, Title } from \"@storybook/addon-docs/blocks\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { action } from \"storybook/internal/actions\";\nimport {\n\tTabs,\n\tTabsAddButton,\n\tTabsContent,\n\tTabsList,\n\tTabsListDropdown,\n\tTabsTrigger,\n} from \"#shadcn/components/ui/tabs\";\n\ninterface TabsWrapperProps {\n\tvariant?: \"default\" | \"browser\" | \"secondary\" | \"tertiary\";\n}\n\nfunction TabsWrapper({ variant = \"default\" }: TabsWrapperProps) {\n\tif (variant === \"browser\") {\n\t\treturn (\n\t\t\t<Tabs defaultValue=\"first\" variant=\"browser\">\n\t\t\t\t<TabsList>\n\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\tvalue=\"first\"\n\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<span className=\"text-utility-green\">GET</span>\n\t\t\t\t\t\t\t<span>/fhir/Patient</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\tvalue=\"second\"\n\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t<span>/fhir</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t</TabsList>\n\t\t\t\t<TabsAddButton onClick={() => action(\"onAdd\")()} />\n\t\t\t\t<TabsContent value=\"first\">\n\t\t\t\t\t<div className=\"p-4\">GET /fhir/Patient content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"second\">\n\t\t\t\t\t<div className=\"p-4\">POST /fhir content</div>\n\t\t\t\t</TabsContent>\n\t\t\t</Tabs>\n\t\t);\n\t}\n\n\tif (variant === \"secondary\") {\n\t\treturn (\n\t\t\t<Tabs defaultValue=\"tab1\" variant=\"secondary\">\n\t\t\t\t<TabsList>\n\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t</TabsList>\n\t\t\t\t<TabsContent value=\"tab1\">\n\t\t\t\t\t<div className=\"p-4\">Tab 1 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab2\">\n\t\t\t\t\t<div className=\"p-4\">Tab 2 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab3\">\n\t\t\t\t\t<div className=\"p-4\">Tab 3 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t</Tabs>\n\t\t);\n\t}\n\n\tif (variant === \"tertiary\") {\n\t\treturn (\n\t\t\t<Tabs defaultValue=\"tab1\" variant=\"tertiary\">\n\t\t\t\t<TabsList>\n\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t</TabsList>\n\t\t\t\t<TabsContent value=\"tab1\">\n\t\t\t\t\t<div className=\"p-4\">Tab 1 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab2\">\n\t\t\t\t\t<div className=\"p-4\">Tab 2 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab3\">\n\t\t\t\t\t<div className=\"p-4\">Tab 3 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t</Tabs>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Tabs defaultValue=\"tab1\">\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value=\"tab1\">\n\t\t\t\t<div className=\"p-4\">Tab 1 content</div>\n\t\t\t</TabsContent>\n\t\t\t<TabsContent value=\"tab2\">\n\t\t\t\t<div className=\"p-4\">Tab 2 content</div>\n\t\t\t</TabsContent>\n\t\t\t<TabsContent value=\"tab3\">\n\t\t\t\t<div className=\"p-4\">Tab 3 content</div>\n\t\t\t</TabsContent>\n\t\t</Tabs>\n\t);\n}\n\nconst meta = {\n\ttitle: \"Component/Tabs\",\n\tcomponent: TabsWrapper,\n\tparameters: {\n\t\tdocs: {\n\t\t\tpage: () => (\n\t\t\t\t<>\n\t\t\t\t\t<Title />\n\t\t\t\t\t<Primary />\n\t\t\t\t\t<Controls />\n\t\t\t\t</>\n\t\t\t),\n\t\t},\n\t},\n\targTypes: {\n\t\tvariant: {\n\t\t\tcontrol: \"select\",\n\t\t\toptions: [\"default\", \"browser\", \"secondary\", \"tertiary\"],\n\t\t},\n\t},\n\targs: {\n\t\tvariant: \"default\",\n\t},\n} satisfies Meta<typeof TabsWrapper>;\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Default = {\n\ttags: [\"!dev\"],\n\trender: ({ variant = \"default\" }) => <TabsWrapper variant={variant} />,\n} satisfies Story;\n\nexport const Demo = {\n\ttags: [\"!autodocs\"],\n\trender: () => (\n\t\t<div className=\"space-y-8\">\n\t\t\t{/* Default variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Default</h3>\n\t\t\t\t<Tabs defaultValue=\"tab1\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\n\t\t\t{/* Secondary variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Secondary</h3>\n\t\t\t\t<Tabs defaultValue=\"tab1\" variant=\"secondary\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\n\t\t\t{/* Tertiary variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Tertiary</h3>\n\t\t\t\t<Tabs defaultValue=\"tab1\" variant=\"tertiary\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\n\t\t\t{/* Browser variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Browser</h3>\n\t\t\t\t<Tabs defaultValue=\"first\" variant=\"browser\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tvalue=\"first\"\n\t\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-utility-green\">GET</span>\n\t\t\t\t\t\t\t\t<span>/fhir/Patient</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tvalue=\"second\"\n\t\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t<span>/fhir</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tvalue=\"third\"\n\t\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t<span>/$graphql</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t\t<TabsAddButton onClick={() => action(\"onAdd\")()} />\n\t\t\t\t\t<TabsListDropdown\n\t\t\t\t\t\ttabs={[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: \"first\",\n\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-utility-green\">GET</span>\n\t\t\t\t\t\t\t\t\t\t<span>/fhir/Patient</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: \"second\",\n\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t\t\t<span>/fhir</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: \"third\",\n\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t\t\t<span>/$graphql</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\t\t</div>\n\t),\n} satisfies Story;\n"],"names":["Controls","Primary","Title","action","Tabs","TabsAddButton","TabsContent","TabsList","TabsListDropdown","TabsTrigger","TabsWrapper","variant","defaultValue","value","onClick","onClose","v","span","className","div","meta","title","component","parameters","docs","page","argTypes","control","options","args","Default","tags","render","Demo","h3","tabs","id","content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/shadcn/components/ui/tabs.stories.tsx"],"sourcesContent":["import { Controls, Primary, Title } from \"@storybook/addon-docs/blocks\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { action } from \"storybook/actions\";\nimport {\n\tTabs,\n\tTabsAddButton,\n\tTabsContent,\n\tTabsList,\n\tTabsListDropdown,\n\tTabsTrigger,\n} from \"#shadcn/components/ui/tabs\";\n\ninterface TabsWrapperProps {\n\tvariant?: \"default\" | \"browser\" | \"secondary\" | \"tertiary\";\n}\n\nfunction TabsWrapper({ variant = \"default\" }: TabsWrapperProps) {\n\tif (variant === \"browser\") {\n\t\treturn (\n\t\t\t<Tabs defaultValue=\"first\" variant=\"browser\">\n\t\t\t\t<TabsList>\n\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\tvalue=\"first\"\n\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<span className=\"text-utility-green\">GET</span>\n\t\t\t\t\t\t\t<span>/fhir/Patient</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\tvalue=\"second\"\n\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t<span>/fhir</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</TabsTrigger>\n\t\t\t\t</TabsList>\n\t\t\t\t<TabsAddButton onClick={() => action(\"onAdd\")()} />\n\t\t\t\t<TabsContent value=\"first\">\n\t\t\t\t\t<div className=\"p-4\">GET /fhir/Patient content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"second\">\n\t\t\t\t\t<div className=\"p-4\">POST /fhir content</div>\n\t\t\t\t</TabsContent>\n\t\t\t</Tabs>\n\t\t);\n\t}\n\n\tif (variant === \"secondary\") {\n\t\treturn (\n\t\t\t<Tabs defaultValue=\"tab1\" variant=\"secondary\">\n\t\t\t\t<TabsList>\n\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t</TabsList>\n\t\t\t\t<TabsContent value=\"tab1\">\n\t\t\t\t\t<div className=\"p-4\">Tab 1 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab2\">\n\t\t\t\t\t<div className=\"p-4\">Tab 2 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab3\">\n\t\t\t\t\t<div className=\"p-4\">Tab 3 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t</Tabs>\n\t\t);\n\t}\n\n\tif (variant === \"tertiary\") {\n\t\treturn (\n\t\t\t<Tabs defaultValue=\"tab1\" variant=\"tertiary\">\n\t\t\t\t<TabsList>\n\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t</TabsList>\n\t\t\t\t<TabsContent value=\"tab1\">\n\t\t\t\t\t<div className=\"p-4\">Tab 1 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab2\">\n\t\t\t\t\t<div className=\"p-4\">Tab 2 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t\t<TabsContent value=\"tab3\">\n\t\t\t\t\t<div className=\"p-4\">Tab 3 content</div>\n\t\t\t\t</TabsContent>\n\t\t\t</Tabs>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Tabs defaultValue=\"tab1\">\n\t\t\t<TabsList>\n\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t</TabsList>\n\t\t\t<TabsContent value=\"tab1\">\n\t\t\t\t<div className=\"p-4\">Tab 1 content</div>\n\t\t\t</TabsContent>\n\t\t\t<TabsContent value=\"tab2\">\n\t\t\t\t<div className=\"p-4\">Tab 2 content</div>\n\t\t\t</TabsContent>\n\t\t\t<TabsContent value=\"tab3\">\n\t\t\t\t<div className=\"p-4\">Tab 3 content</div>\n\t\t\t</TabsContent>\n\t\t</Tabs>\n\t);\n}\n\nconst meta = {\n\ttitle: \"Component/Tabs\",\n\tcomponent: TabsWrapper,\n\tparameters: {\n\t\tdocs: {\n\t\t\tpage: () => (\n\t\t\t\t<>\n\t\t\t\t\t<Title />\n\t\t\t\t\t<Primary />\n\t\t\t\t\t<Controls />\n\t\t\t\t</>\n\t\t\t),\n\t\t},\n\t},\n\targTypes: {\n\t\tvariant: {\n\t\t\tcontrol: \"select\",\n\t\t\toptions: [\"default\", \"browser\", \"secondary\", \"tertiary\"],\n\t\t},\n\t},\n\targs: {\n\t\tvariant: \"default\",\n\t},\n} satisfies Meta<typeof TabsWrapper>;\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Default = {\n\ttags: [\"!dev\"],\n\trender: ({ variant = \"default\" }) => <TabsWrapper variant={variant} />,\n} satisfies Story;\n\nexport const Demo = {\n\ttags: [\"!autodocs\"],\n\trender: () => (\n\t\t<div className=\"space-y-8\">\n\t\t\t{/* Default variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Default</h3>\n\t\t\t\t<Tabs defaultValue=\"tab1\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\n\t\t\t{/* Secondary variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Secondary</h3>\n\t\t\t\t<Tabs defaultValue=\"tab1\" variant=\"secondary\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\n\t\t\t{/* Tertiary variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Tertiary</h3>\n\t\t\t\t<Tabs defaultValue=\"tab1\" variant=\"tertiary\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\n\t\t\t{/* Browser variant */}\n\t\t\t<div>\n\t\t\t\t<h3 className=\"typo-label mb-4\">Browser</h3>\n\t\t\t\t<Tabs defaultValue=\"first\" variant=\"browser\">\n\t\t\t\t\t<TabsList>\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tvalue=\"first\"\n\t\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-utility-green\">GET</span>\n\t\t\t\t\t\t\t\t<span>/fhir/Patient</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tvalue=\"second\"\n\t\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t<span>/fhir</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t\t<TabsTrigger\n\t\t\t\t\t\t\tvalue=\"third\"\n\t\t\t\t\t\t\tonClick={() => action(\"onClick\")()}\n\t\t\t\t\t\t\tonClose={(v) => action(\"onClose\")(v)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t<span>/$graphql</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</TabsTrigger>\n\t\t\t\t\t</TabsList>\n\t\t\t\t\t<TabsAddButton onClick={() => action(\"onAdd\")()} />\n\t\t\t\t\t<TabsListDropdown\n\t\t\t\t\t\ttabs={[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: \"first\",\n\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-utility-green\">GET</span>\n\t\t\t\t\t\t\t\t\t\t<span>/fhir/Patient</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: \"second\",\n\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t\t\t<span>/fhir</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: \"third\",\n\t\t\t\t\t\t\t\tcontent: (\n\t\t\t\t\t\t\t\t\t<span className=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-utility-yellow\">POST</span>\n\t\t\t\t\t\t\t\t\t\t<span>/$graphql</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]}\n\t\t\t\t\t/>\n\t\t\t\t</Tabs>\n\t\t\t</div>\n\t\t</div>\n\t),\n} satisfies Story;\n"],"names":["Controls","Primary","Title","action","Tabs","TabsAddButton","TabsContent","TabsList","TabsListDropdown","TabsTrigger","TabsWrapper","variant","defaultValue","value","onClick","onClose","v","span","className","div","meta","title","component","parameters","docs","page","argTypes","control","options","args","Default","tags","render","Demo","h3","tabs","id","content"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
2
2
|
import type { VariantProps } from "class-variance-authority";
|
|
3
3
|
import * as React from "react";
|
|
4
|
-
import { toggleVariants } from "
|
|
4
|
+
import { toggleVariants } from "../../components/ui/toggle";
|
|
5
5
|
declare function ToggleGroup({ className, variant, children, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
declare function ToggleGroupItem({ className, children, variant, ...props }: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>): import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
export { ToggleGroup, ToggleGroupItem };
|
package/dist/src/typography.css
CHANGED
|
@@ -46,7 +46,7 @@ body {
|
|
|
46
46
|
font-size: var(--font-size-xs);
|
|
47
47
|
font-family: var(--font-family-sans);
|
|
48
48
|
font-weight: var(--font-weight-normal);
|
|
49
|
-
line-height: var(--font-leading-
|
|
49
|
+
line-height: var(--font-leading-4);
|
|
50
50
|
}
|
|
51
51
|
.typo-label-xs {
|
|
52
52
|
font-size: var(--font-size-xs);
|
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@health-samurai/react-components",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
3
|
+
"version": "0.0.0-alpha.20",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
7
7
|
"src"
|
|
8
8
|
],
|
|
9
9
|
"exports": {
|
|
10
|
-
".":
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/src/index.d.ts",
|
|
12
|
+
"default": "./dist/src/index.js"
|
|
13
|
+
},
|
|
11
14
|
"./bundle.css": "./dist/bundle.css",
|
|
12
15
|
"./css": "./dist/src/index.css",
|
|
13
16
|
"./deps.css": "./dist/src/deps.css",
|
|
@@ -18,15 +21,15 @@
|
|
|
18
21
|
},
|
|
19
22
|
"dependencies": {
|
|
20
23
|
"@codemirror/autocomplete": "^6.20.1",
|
|
21
|
-
"@codemirror/commands": "^6.10.
|
|
24
|
+
"@codemirror/commands": "^6.10.3",
|
|
22
25
|
"@codemirror/lang-json": "^6.0.2",
|
|
23
26
|
"@codemirror/lang-sql": "^6.10.0",
|
|
24
27
|
"@codemirror/lang-yaml": "^6.1.2",
|
|
25
28
|
"@codemirror/language": "^6.12.2",
|
|
26
29
|
"@codemirror/lint": "^6.9.5",
|
|
27
30
|
"@codemirror/search": "^6.6.0",
|
|
28
|
-
"@codemirror/state": "^6.
|
|
29
|
-
"@codemirror/view": "^6.
|
|
31
|
+
"@codemirror/state": "^6.6.0",
|
|
32
|
+
"@codemirror/view": "^6.40.0",
|
|
30
33
|
"@headless-tree/core": "^1.6.3",
|
|
31
34
|
"@headless-tree/react": "^1.6.3",
|
|
32
35
|
"@hookform/resolvers": "^5.2.2",
|
|
@@ -59,6 +62,7 @@
|
|
|
59
62
|
"@radix-ui/react-toggle": "^1.1.10",
|
|
60
63
|
"@radix-ui/react-toggle-group": "^1.1.11",
|
|
61
64
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
65
|
+
"@replit/codemirror-vim": "^6.3.0",
|
|
62
66
|
"@tanstack/react-table": "^8.21.3",
|
|
63
67
|
"class-variance-authority": "^0.7.1",
|
|
64
68
|
"clsx": "^2.1.1",
|
|
@@ -66,7 +70,7 @@
|
|
|
66
70
|
"date-fns": "^4.1.0",
|
|
67
71
|
"embla-carousel-react": "^8.6.0",
|
|
68
72
|
"input-otp": "^1.4.2",
|
|
69
|
-
"lucide-react": "^0.
|
|
73
|
+
"lucide-react": "^0.577.0",
|
|
70
74
|
"next-themes": "^0.4.6",
|
|
71
75
|
"radix-ui": "^1.4.3",
|
|
72
76
|
"react": "^19.2.4",
|
|
@@ -74,7 +78,7 @@
|
|
|
74
78
|
"react-dom": "^19.2.4",
|
|
75
79
|
"react-hook-form": "^7.71.2",
|
|
76
80
|
"react-resizable-panels": "^3.0.6",
|
|
77
|
-
"recharts": "
|
|
81
|
+
"recharts": "3.8.0",
|
|
78
82
|
"sonner": "^2.0.7",
|
|
79
83
|
"tailwind-merge": "^3.5.0",
|
|
80
84
|
"vaul": "^1.1.2",
|
|
@@ -82,26 +86,27 @@
|
|
|
82
86
|
},
|
|
83
87
|
"devDependencies": {
|
|
84
88
|
"@lezer/generator": "^1.8.0",
|
|
85
|
-
"@storybook/addon-docs": "^
|
|
86
|
-
"@storybook/react-vite": "^
|
|
87
|
-
"@swc/cli": "^0.
|
|
89
|
+
"@storybook/addon-docs": "^10.2.17",
|
|
90
|
+
"@storybook/react-vite": "^10.2.17",
|
|
91
|
+
"@swc/cli": "^0.8.0",
|
|
88
92
|
"@swc/core": "^1.15.18",
|
|
89
93
|
"@tailwindcss/cli": "^4.2.1",
|
|
90
94
|
"@tailwindcss/vite": "^4.2.1",
|
|
91
|
-
"@types/node": "^
|
|
95
|
+
"@types/node": "^25.4.0",
|
|
92
96
|
"@types/react": "^19.2.14",
|
|
93
97
|
"@types/react-dom": "^19.2.3",
|
|
94
|
-
"@vitejs/plugin-react-swc": "^
|
|
95
|
-
"chokidar": "^
|
|
96
|
-
"storybook": "^
|
|
98
|
+
"@vitejs/plugin-react-swc": "^4.2.3",
|
|
99
|
+
"chokidar": "^5.0.0",
|
|
100
|
+
"storybook": "^10.2.17",
|
|
97
101
|
"tailwindcss": "^4.2.1",
|
|
102
|
+
"tsc-alias": "^1.8.16",
|
|
98
103
|
"tsx": "^4.21.0",
|
|
99
104
|
"tw-animate-css": "^1.4.0",
|
|
100
|
-
"typescript": "~5.
|
|
105
|
+
"typescript": "~5.9.3",
|
|
101
106
|
"vite": "^7.3.1",
|
|
102
|
-
"vitest": "^
|
|
103
|
-
"@health-samurai/aidbox-client": "0.0.0-alpha.
|
|
104
|
-
"@health-samurai/aidbox-fhirpath-lsp": "0.0.0-alpha.
|
|
107
|
+
"vitest": "^4.0.18",
|
|
108
|
+
"@health-samurai/aidbox-client": "0.0.0-alpha.5",
|
|
109
|
+
"@health-samurai/aidbox-fhirpath-lsp": "0.0.0-alpha.7"
|
|
105
110
|
},
|
|
106
111
|
"publishConfig": {
|
|
107
112
|
"access": "public"
|
|
@@ -113,7 +118,7 @@
|
|
|
113
118
|
"directory": "packages/react-components"
|
|
114
119
|
},
|
|
115
120
|
"scripts": {
|
|
116
|
-
"build": "rm -rf dist && mkdir -p dist && swc src -d dist -D && tsc -b --force && tailwindcss --cwd ./src -i ./full.css -o ../dist/bundle.css && echo success",
|
|
121
|
+
"build": "rm -rf dist && mkdir -p dist && swc src -d dist -D && tsc -b --force && tsc-alias -p tsconfig.app.json && tailwindcss --cwd ./src -i ./full.css -o ../dist/bundle.css && echo success",
|
|
117
122
|
"build:watch": "tsx scripts/watch.node.ts",
|
|
118
123
|
"build-storybook": "storybook build",
|
|
119
124
|
"format": "biome format",
|