@evinvest/uikit 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +266 -72
- package/dist/{chunk-3IPB4QQJ.js → chunk-35SPIU4U.js} +10 -6
- package/dist/chunk-35SPIU4U.js.map +1 -0
- package/dist/components/account-list.js +128 -0
- package/dist/components/account-list.js.map +1 -0
- package/dist/components/account-menu-profile.js +114 -0
- package/dist/components/account-menu-profile.js.map +1 -0
- package/dist/components/account-menu.js +50 -23
- package/dist/components/account-menu.js.map +1 -1
- package/dist/components/account-settings-dialog.js +84 -0
- package/dist/components/account-settings-dialog.js.map +1 -0
- package/dist/components/alert-dialog.js +3 -2
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/animated-number-columns.js +105 -0
- package/dist/components/animated-number-columns.js.map +1 -0
- package/dist/components/animated-number.js +157 -0
- package/dist/components/animated-number.js.map +1 -0
- package/dist/components/app-shell.js +9 -0
- package/dist/components/app-shell.js.map +1 -1
- package/dist/components/aside.js +140 -0
- package/dist/components/aside.js.map +1 -0
- package/dist/components/badge.js +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/button.js +3 -11
- package/dist/components/button.js.map +1 -1
- package/dist/components/chat-composer.js +141 -0
- package/dist/components/chat-composer.js.map +1 -0
- package/dist/components/chat-message.js +195 -0
- package/dist/components/chat-message.js.map +1 -0
- package/dist/components/chat-panel.js +137 -0
- package/dist/components/chat-panel.js.map +1 -0
- package/dist/components/chat-stream-text.js +69 -0
- package/dist/components/chat-stream-text.js.map +1 -0
- package/dist/components/chat-typing.js +26 -0
- package/dist/components/chat-typing.js.map +1 -0
- package/dist/components/command-palette.js +119 -0
- package/dist/components/command-palette.js.map +1 -0
- package/dist/components/command.js +3 -1
- package/dist/components/command.js.map +1 -1
- package/dist/components/confirm-dialog.js +123 -0
- package/dist/components/confirm-dialog.js.map +1 -0
- package/dist/components/context-menu.js +53 -5
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/dialog.js +3 -2
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/drawer.js +3 -1
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/dropdown-menu.js +64 -5
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/form-row.js +51 -0
- package/dist/components/form-row.js.map +1 -0
- package/dist/components/header-controls.js +149 -0
- package/dist/components/header-controls.js.map +1 -0
- package/dist/components/icon-button.js +35 -0
- package/dist/components/icon-button.js.map +1 -0
- package/dist/components/key-value.js +68 -0
- package/dist/components/key-value.js.map +1 -0
- package/dist/components/menubar.js +39 -5
- package/dist/components/menubar.js.map +1 -1
- package/dist/components/native-select.js +3 -4
- package/dist/components/native-select.js.map +1 -1
- package/dist/components/nav-collapse.js +142 -0
- package/dist/components/nav-collapse.js.map +1 -0
- package/dist/components/nav-model.js.map +1 -1
- package/dist/components/navigation-menu.js +4 -5
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/page-frame.js +2 -5
- package/dist/components/page-frame.js.map +1 -1
- package/dist/components/popover-form.js +60 -0
- package/dist/components/popover-form.js.map +1 -0
- package/dist/components/resource-error.js +1 -1
- package/dist/components/resource-error.js.map +1 -1
- package/dist/components/section-nav.js +73 -20
- package/dist/components/section-nav.js.map +1 -1
- package/dist/components/select.js +16 -6
- package/dist/components/select.js.map +1 -1
- package/dist/components/settings.js +94 -0
- package/dist/components/settings.js.map +1 -0
- package/dist/components/sheet.js +3 -2
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/shell-nav.js +80 -38
- package/dist/components/shell-nav.js.map +1 -1
- package/dist/components/smart-header.js +53 -0
- package/dist/components/smart-header.js.map +1 -0
- package/dist/components/status-item.js +42 -0
- package/dist/components/status-item.js.map +1 -0
- package/dist/components/system-banner.js +22 -12
- package/dist/components/system-banner.js.map +1 -1
- package/dist/components/top-bar.js +4 -3
- package/dist/components/top-bar.js.map +1 -1
- package/dist/components/ui-icons.js +77 -0
- package/dist/components/ui-icons.js.map +1 -0
- package/dist/components/use-count-tween.js +42 -0
- package/dist/components/use-count-tween.js.map +1 -0
- package/dist/components/workspace-tab.js +140 -0
- package/dist/components/workspace-tab.js.map +1 -0
- package/dist/generated/accent.js +2 -2
- package/dist/generated/accent.js.map +1 -1
- package/dist/generated/account-list.js +35 -0
- package/dist/generated/account-list.js.map +1 -0
- package/dist/generated/account-settings-dialog.js +27 -0
- package/dist/generated/account-settings-dialog.js.map +1 -0
- package/dist/generated/alert-dialog.js +1 -1
- package/dist/generated/alert-dialog.js.map +1 -1
- package/dist/generated/alert.js +2 -2
- package/dist/generated/alert.js.map +1 -1
- package/dist/generated/aside.js +36 -0
- package/dist/generated/aside.js.map +1 -0
- package/dist/generated/badge.js +7 -6
- package/dist/generated/badge.js.map +1 -1
- package/dist/generated/band.js +1 -1
- package/dist/generated/band.js.map +1 -1
- package/dist/generated/breadcrumb.js +2 -2
- package/dist/generated/breadcrumb.js.map +1 -1
- package/dist/generated/button-group.js +2 -2
- package/dist/generated/button-group.js.map +1 -1
- package/dist/generated/button.js +4 -4
- package/dist/generated/button.js.map +1 -1
- package/dist/generated/card.js +6 -6
- package/dist/generated/card.js.map +1 -1
- package/dist/generated/chat-composer.js +21 -0
- package/dist/generated/chat-composer.js.map +1 -0
- package/dist/generated/chat-message.js +86 -0
- package/dist/generated/chat-message.js.map +1 -0
- package/dist/generated/chat-typing.js +9 -0
- package/dist/generated/chat-typing.js.map +1 -0
- package/dist/generated/command-palette.js +17 -0
- package/dist/generated/command-palette.js.map +1 -0
- package/dist/generated/command.js +2 -2
- package/dist/generated/command.js.map +1 -1
- package/dist/generated/confirm-dialog.js +28 -0
- package/dist/generated/confirm-dialog.js.map +1 -0
- package/dist/generated/context-menu.js +1 -1
- package/dist/generated/context-menu.js.map +1 -1
- package/dist/generated/date-time-picker.js +1 -1
- package/dist/generated/date-time-picker.js.map +1 -1
- package/dist/generated/dialog.js +1 -1
- package/dist/generated/dialog.js.map +1 -1
- package/dist/generated/drawer.js +1 -1
- package/dist/generated/drawer.js.map +1 -1
- package/dist/generated/dropdown-menu.js +1 -1
- package/dist/generated/dropdown-menu.js.map +1 -1
- package/dist/generated/form-row.js +17 -0
- package/dist/generated/form-row.js.map +1 -0
- package/dist/generated/header-controls.js +56 -0
- package/dist/generated/header-controls.js.map +1 -0
- package/dist/generated/icon-button.js +13 -0
- package/dist/generated/icon-button.js.map +1 -0
- package/dist/generated/key-value.js +15 -0
- package/dist/generated/key-value.js.map +1 -0
- package/dist/generated/menubar.js +1 -1
- package/dist/generated/menubar.js.map +1 -1
- package/dist/generated/navigation-menu.js +1 -1
- package/dist/generated/navigation-menu.js.map +1 -1
- package/dist/generated/popover-form.js +13 -0
- package/dist/generated/popover-form.js.map +1 -0
- package/dist/generated/section-label.js +10 -0
- package/dist/generated/section-label.js.map +1 -0
- package/dist/generated/select.js +15 -3
- package/dist/generated/select.js.map +1 -1
- package/dist/generated/settings.js +36 -0
- package/dist/generated/settings.js.map +1 -0
- package/dist/generated/sheet.js +1 -1
- package/dist/generated/sheet.js.map +1 -1
- package/dist/generated/slider.js +1 -1
- package/dist/generated/slider.js.map +1 -1
- package/dist/generated/smart-header.js +11 -0
- package/dist/generated/smart-header.js.map +1 -0
- package/dist/generated/sonner.js +4 -4
- package/dist/generated/sonner.js.map +1 -1
- package/dist/generated/status-item.js +17 -0
- package/dist/generated/status-item.js.map +1 -0
- package/dist/generated/system-banner.js +33 -0
- package/dist/generated/system-banner.js.map +1 -0
- package/dist/generated/top-bar.js +9 -0
- package/dist/generated/top-bar.js.map +1 -0
- package/dist/generated/workspace-tab.js +17 -0
- package/dist/generated/workspace-tab.js.map +1 -0
- package/dist/index.d.ts +852 -156
- package/dist/index.js +21 -1
- package/dist/lib/cn.js +8 -1
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/number-parts.js +90 -0
- package/dist/lib/number-parts.js.map +1 -0
- package/dist/palette-cli.js +1 -1
- package/dist/palette.d.ts +6 -4
- package/dist/palette.js +3 -1
- package/dist/primitives/dismissable-layer.js +76 -4
- package/dist/primitives/dismissable-layer.js.map +1 -1
- package/dist/primitives/focus-scope.js +20 -5
- package/dist/primitives/focus-scope.js.map +1 -1
- package/dist/primitives/use-floating.js +16 -1
- package/dist/primitives/use-floating.js.map +1 -1
- package/dist/primitives/use-reduced-motion.js +20 -0
- package/dist/primitives/use-reduced-motion.js.map +1 -0
- package/package.json +1 -1
- package/styles/ev.css +281 -49
- package/styles/theme.css +335 -39
- package/styles/tokens.css +643 -103
- package/dist/chunk-3IPB4QQJ.js.map +0 -1
- package/dist/components/terminal.js +0 -206
- package/dist/components/terminal.js.map +0 -1
- package/dist/generated/terminal.js +0 -70
- package/dist/generated/terminal.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/smart-header.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SMART_HEADER_BAR,\n SMART_HEADER_BASE,\n SMART_HEADER_CONTEXT,\n SMART_HEADER_TOOLBAR,\n} from \"../generated/smart-header\";\nimport { TopBar } from \"./top-bar\";\n\nexport type SmartHeaderState = \"default\" | \"collapsed\" | \"banner\" | \"search\";\n\nexport interface SmartHeaderProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n /**\n * `default` — bar, toolbar and context line; `collapsed` — the toolbar folds\n * into the bar as `collapsed`; `banner` — a banner row above one bar;\n * `search` — one bar with the `palette` under it.\n */\n state?: SmartHeaderState;\n /** Brand, workspace tabs: the left side of the bar. */\n start?: React.ReactNode;\n /** The right side of the bar: icon actions, balance, bell, account menu. */\n end?: React.ReactNode;\n /** The folded toolbar, between `start` and `end`; shown in `collapsed` only. */\n collapsed?: React.ReactNode;\n /** A `SystemBanner`; shown in `banner` only. */\n banner?: React.ReactNode;\n /** The second row, 44 high; shown in `default` only. */\n toolbar?: React.ReactNode;\n /** The slim line on the page fill under the toolbar; shown in `default` only. */\n context?: React.ReactNode;\n /** A `CommandPalette` or any panel that drops from the bar; shown in `search` only. */\n palette?: React.ReactNode;\n}\n\n/**\n * A page header that adapts to scroll and alerts. The bar is the same in every\n * state, so switching never moves the brand or the account: only the rows\n * around it come and go. Layout only; the caller owns the state and its trigger\n * (a scroll observer, a feed status, the search button).\n */\nexport function SmartHeader({\n state = \"default\",\n start,\n end,\n collapsed,\n banner,\n toolbar,\n context,\n palette,\n className,\n ...props\n}: SmartHeaderProps) {\n return (\n <div\n data-slot=\"smart-header\"\n data-state={state}\n className={cn(SMART_HEADER_BASE, className)}\n {...props}\n >\n {state === \"banner\" && banner}\n <TopBar\n className={SMART_HEADER_BAR}\n start={\n <>\n {start}\n {state === \"collapsed\" && collapsed}\n </>\n }\n end={end}\n />\n {state === \"default\" && toolbar != null && (\n <div data-slot=\"smart-header-toolbar\" className={SMART_HEADER_TOOLBAR}>\n {toolbar}\n </div>\n )}\n {state === \"default\" && context != null && (\n <div data-slot=\"smart-header-context\" className={SMART_HEADER_CONTEXT}>\n {context}\n </div>\n )}\n {state === \"search\" && palette != null && <div data-slot=\"smart-header-palette\">{palette}</div>}\n </div>\n );\n}\n"],"mappings":"AA6DM,SAGI,UAHJ,KAGI,YAHJ;AA7DN,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AAiChB,SAAS,YAAY;AAAA,EAC1B,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW,GAAG,mBAAmB,SAAS;AAAA,MACzC,GAAG;AAAA,MAEH;AAAA,kBAAU,YAAY;AAAA,QACvB;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YACX,OACE,iCACG;AAAA;AAAA,cACA,UAAU,eAAe;AAAA,eAC5B;AAAA,YAEF;AAAA;AAAA,QACF;AAAA,QACC,UAAU,aAAa,WAAW,QACjC,oBAAC,SAAI,aAAU,wBAAuB,WAAW,sBAC9C,mBACH;AAAA,QAED,UAAU,aAAa,WAAW,QACjC,oBAAC,SAAI,aAAU,wBAAuB,WAAW,sBAC9C,mBACH;AAAA,QAED,UAAU,YAAY,WAAW,QAAQ,oBAAC,SAAI,aAAU,wBAAwB,mBAAQ;AAAA;AAAA;AAAA,EAC3F;AAEJ;","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../lib/cn.js";
|
|
4
|
+
import {
|
|
5
|
+
STATUS_DOT_BASE,
|
|
6
|
+
STATUS_ITEM_BASE,
|
|
7
|
+
STATUS_ITEM_VALUE,
|
|
8
|
+
statusDotClasses
|
|
9
|
+
} from "../generated/status-item.js";
|
|
10
|
+
function StatusDot({ tone = "neutral", className, ...props }) {
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
"span",
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "status-dot",
|
|
15
|
+
"data-tone": tone,
|
|
16
|
+
"aria-hidden": true,
|
|
17
|
+
className: cn(STATUS_DOT_BASE, statusDotClasses[tone], className),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
function StatusItem({ tone = "neutral", value, className, children, ...props }) {
|
|
23
|
+
return /* @__PURE__ */ jsxs(
|
|
24
|
+
"span",
|
|
25
|
+
{
|
|
26
|
+
"data-slot": "status-item",
|
|
27
|
+
"data-tone": tone,
|
|
28
|
+
className: cn(STATUS_ITEM_BASE, className),
|
|
29
|
+
...props,
|
|
30
|
+
children: [
|
|
31
|
+
/* @__PURE__ */ jsx(StatusDot, { tone }),
|
|
32
|
+
/* @__PURE__ */ jsx("span", { children }),
|
|
33
|
+
value != null && /* @__PURE__ */ jsx("span", { className: STATUS_ITEM_VALUE, children: value })
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
StatusDot,
|
|
40
|
+
StatusItem
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=status-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/status-item.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n STATUS_DOT_BASE,\n STATUS_ITEM_BASE,\n STATUS_ITEM_VALUE,\n statusDotClasses,\n type StatusTone,\n} from \"../generated/status-item\";\n\nexport type { StatusTone };\n\nexport interface StatusDotProps extends React.ComponentProps<\"span\"> {\n tone?: StatusTone;\n}\n\n/** The 6 px dot alone; decorative, so the text next to it must carry the meaning. */\nexport function StatusDot({ tone = \"neutral\", className, ...props }: StatusDotProps) {\n return (\n <span\n data-slot=\"status-dot\"\n data-tone={tone}\n aria-hidden\n className={cn(STATUS_DOT_BASE, statusDotClasses[tone], className)}\n {...props}\n />\n );\n}\n\nexport interface StatusItemProps extends React.ComponentProps<\"span\"> {\n tone?: StatusTone;\n /** A figure after the label, e.g. a latency. */\n value?: React.ReactNode;\n}\n\n/** A dot and a short label: connection, sync, environment. */\nexport function StatusItem({ tone = \"neutral\", value, className, children, ...props }: StatusItemProps) {\n return (\n <span\n data-slot=\"status-item\"\n data-tone={tone}\n className={cn(STATUS_ITEM_BASE, className)}\n {...props}\n >\n <StatusDot tone={tone} />\n <span>{children}</span>\n {value != null && <span className={STATUS_ITEM_VALUE}>{value}</span>}\n </span>\n );\n}\n"],"mappings":"AAmBI,cAmBA,YAnBA;AAnBJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AASA,SAAS,UAAU,EAAE,OAAO,WAAW,WAAW,GAAG,MAAM,GAAmB;AACnF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,eAAW;AAAA,MACX,WAAW,GAAG,iBAAiB,iBAAiB,IAAI,GAAG,SAAS;AAAA,MAC/D,GAAG;AAAA;AAAA,EACN;AAEJ;AASO,SAAS,WAAW,EAAE,OAAO,WAAW,OAAO,WAAW,UAAU,GAAG,MAAM,GAAoB;AACtG,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW,GAAG,kBAAkB,SAAS;AAAA,MACxC,GAAG;AAAA,MAEJ;AAAA,4BAAC,aAAU,MAAY;AAAA,QACvB,oBAAC,UAAM,UAAS;AAAA,QACf,SAAS,QAAQ,oBAAC,UAAK,WAAW,mBAAoB,iBAAM;AAAA;AAAA;AAAA,EAC/D;AAEJ;","names":[]}
|
|
@@ -2,45 +2,55 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { cn } from "../lib/cn.js";
|
|
5
|
+
import {
|
|
6
|
+
SYSTEM_BANNER_ACTION,
|
|
7
|
+
SYSTEM_BANNER_BASE,
|
|
8
|
+
SYSTEM_BANNER_BODY_AFTER_TITLE,
|
|
9
|
+
SYSTEM_BANNER_DISMISS,
|
|
10
|
+
SYSTEM_BANNER_GLYPH,
|
|
11
|
+
SYSTEM_BANNER_ICON,
|
|
12
|
+
SYSTEM_BANNER_MESSAGE,
|
|
13
|
+
SYSTEM_BANNER_TITLE,
|
|
14
|
+
systemBannerIconToneClasses,
|
|
15
|
+
systemBannerToneClasses
|
|
16
|
+
} from "../generated/system-banner.js";
|
|
5
17
|
import { CloseIcon, InfoIcon, TriangleAlertIcon } from "./shell-icons.js";
|
|
6
|
-
const TONE = {
|
|
7
|
-
warn: "border-accent-warn/40 bg-accent-warn/10 text-accent-warn",
|
|
8
|
-
info: "border-border bg-card text-ink"
|
|
9
|
-
};
|
|
10
18
|
function SystemBanner({
|
|
11
19
|
tone = "info",
|
|
12
20
|
title,
|
|
13
21
|
icon,
|
|
14
22
|
onDismiss,
|
|
23
|
+
action,
|
|
15
24
|
labels = {},
|
|
16
25
|
className,
|
|
17
26
|
children,
|
|
18
27
|
...props
|
|
19
28
|
}) {
|
|
20
|
-
const glyph = icon !== void 0 ? icon : tone === "warn" ? /* @__PURE__ */ jsx(TriangleAlertIcon, { className:
|
|
29
|
+
const glyph = icon !== void 0 ? icon : tone === "warn" ? /* @__PURE__ */ jsx(TriangleAlertIcon, { className: SYSTEM_BANNER_GLYPH }) : /* @__PURE__ */ jsx(InfoIcon, { className: SYSTEM_BANNER_GLYPH });
|
|
21
30
|
return /* @__PURE__ */ jsxs(
|
|
22
31
|
"div",
|
|
23
32
|
{
|
|
24
33
|
"data-slot": "system-banner",
|
|
25
34
|
"data-tone": tone,
|
|
26
35
|
role: "status",
|
|
27
|
-
className: cn(
|
|
36
|
+
className: cn(SYSTEM_BANNER_BASE, systemBannerToneClasses[tone], className),
|
|
28
37
|
...props,
|
|
29
38
|
children: [
|
|
30
|
-
glyph !== null && /* @__PURE__ */ jsx("span", { className:
|
|
31
|
-
/* @__PURE__ */ jsxs("div", { className:
|
|
32
|
-
title !== void 0 && /* @__PURE__ */ jsx("span", { className:
|
|
39
|
+
glyph !== null && /* @__PURE__ */ jsx("span", { className: cn(SYSTEM_BANNER_ICON, systemBannerIconToneClasses[tone]), children: glyph }),
|
|
40
|
+
/* @__PURE__ */ jsxs("div", { className: SYSTEM_BANNER_MESSAGE, children: [
|
|
41
|
+
title !== void 0 && /* @__PURE__ */ jsx("span", { className: SYSTEM_BANNER_TITLE, children: title }),
|
|
33
42
|
title !== void 0 && children !== void 0 && " \u2014 ",
|
|
34
|
-
children !== void 0 && /* @__PURE__ */ jsx("span", { className: cn(title !== void 0 &&
|
|
43
|
+
children !== void 0 && /* @__PURE__ */ jsx("span", { className: cn(title !== void 0 && SYSTEM_BANNER_BODY_AFTER_TITLE), children })
|
|
35
44
|
] }),
|
|
45
|
+
action !== void 0 && /* @__PURE__ */ jsx("span", { className: SYSTEM_BANNER_ACTION, children: action }),
|
|
36
46
|
onDismiss && /* @__PURE__ */ jsx(
|
|
37
47
|
"button",
|
|
38
48
|
{
|
|
39
49
|
type: "button",
|
|
40
50
|
"aria-label": labels.dismiss ?? "Dismiss",
|
|
41
51
|
onClick: onDismiss,
|
|
42
|
-
className:
|
|
43
|
-
children: /* @__PURE__ */ jsx(CloseIcon, { className:
|
|
52
|
+
className: SYSTEM_BANNER_DISMISS,
|
|
53
|
+
children: /* @__PURE__ */ jsx(CloseIcon, { className: SYSTEM_BANNER_GLYPH })
|
|
44
54
|
}
|
|
45
55
|
)
|
|
46
56
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/system-banner.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CloseIcon, InfoIcon, TriangleAlertIcon } from \"./shell-icons\";\n\nexport type SystemBannerTone
|
|
1
|
+
{"version":3,"sources":["../../src/components/system-banner.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SYSTEM_BANNER_ACTION,\n SYSTEM_BANNER_BASE,\n SYSTEM_BANNER_BODY_AFTER_TITLE,\n SYSTEM_BANNER_DISMISS,\n SYSTEM_BANNER_GLYPH,\n SYSTEM_BANNER_ICON,\n SYSTEM_BANNER_MESSAGE,\n SYSTEM_BANNER_TITLE,\n systemBannerIconToneClasses,\n systemBannerToneClasses,\n type SystemBannerTone,\n} from \"../generated/system-banner\";\nimport { CloseIcon, InfoIcon, TriangleAlertIcon } from \"./shell-icons\";\n\nexport type { SystemBannerTone };\n\nexport interface SystemBannerLabels {\n /** The close button. Default `\"Dismiss\"`. */\n dismiss?: string;\n}\n\nexport interface SystemBannerProps extends Omit<React.ComponentProps<\"div\">, \"title\"> {\n /** `warn` — a platform state (maintenance, read-only); `info` — an announcement. */\n tone?: SystemBannerTone;\n /** Bold lead before the message. */\n title?: React.ReactNode;\n /** Replaces the tone's glyph; `null` drops it. */\n icon?: React.ReactNode;\n /** Shows a close button; remembering the dismissal is the caller's. */\n onDismiss?: () => void;\n /** A link or button after the message. */\n action?: React.ReactNode;\n labels?: SystemBannerLabels;\n}\n\n/**\n * A slim full-width strip above the page — presentation only: where its state\n * comes from, and whether a dismissal sticks, are the caller's. Put it in\n * `AppShell`'s `banner` slot; several stack with a gap.\n */\nexport function SystemBanner({\n tone = \"info\",\n title,\n icon,\n onDismiss,\n action,\n labels = {},\n className,\n children,\n ...props\n}: SystemBannerProps) {\n const glyph =\n icon !== undefined ? icon : tone === \"warn\" ? <TriangleAlertIcon className={SYSTEM_BANNER_GLYPH} /> : <InfoIcon className={SYSTEM_BANNER_GLYPH} />;\n return (\n <div\n data-slot=\"system-banner\"\n data-tone={tone}\n role=\"status\"\n className={cn(SYSTEM_BANNER_BASE, systemBannerToneClasses[tone], className)}\n {...props}\n >\n {glyph !== null && <span className={cn(SYSTEM_BANNER_ICON, systemBannerIconToneClasses[tone])}>{glyph}</span>}\n <div className={SYSTEM_BANNER_MESSAGE}>\n {title !== undefined && <span className={SYSTEM_BANNER_TITLE}>{title}</span>}\n {title !== undefined && children !== undefined && \" — \"}\n {children !== undefined && <span className={cn(title !== undefined && SYSTEM_BANNER_BODY_AFTER_TITLE)}>{children}</span>}\n </div>\n {action !== undefined && <span className={SYSTEM_BANNER_ACTION}>{action}</span>}\n {onDismiss && (\n <button\n type=\"button\"\n aria-label={labels.dismiss ?? \"Dismiss\"}\n onClick={onDismiss}\n className={SYSTEM_BANNER_DISMISS}\n >\n <CloseIcon className={SYSTEM_BANNER_GLYPH} />\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";AAyDkD,cAU5C,YAV4C;AAvDlD,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,WAAW,UAAU,yBAAyB;AA4BhD,SAAS,aAAa;AAAA,EAC3B,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,QAAM,QACJ,SAAS,SAAY,OAAO,SAAS,SAAS,oBAAC,qBAAkB,WAAW,qBAAqB,IAAK,oBAAC,YAAS,WAAW,qBAAqB;AAClJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW,GAAG,oBAAoB,wBAAwB,IAAI,GAAG,SAAS;AAAA,MACzE,GAAG;AAAA,MAEH;AAAA,kBAAU,QAAQ,oBAAC,UAAK,WAAW,GAAG,oBAAoB,4BAA4B,IAAI,CAAC,GAAI,iBAAM;AAAA,QACtG,qBAAC,SAAI,WAAW,uBACb;AAAA,oBAAU,UAAa,oBAAC,UAAK,WAAW,qBAAsB,iBAAM;AAAA,UACpE,UAAU,UAAa,aAAa,UAAa;AAAA,UACjD,aAAa,UAAa,oBAAC,UAAK,WAAW,GAAG,UAAU,UAAa,8BAA8B,GAAI,UAAS;AAAA,WACnH;AAAA,QACC,WAAW,UAAa,oBAAC,UAAK,WAAW,sBAAuB,kBAAO;AAAA,QACvE,aACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAY,OAAO,WAAW;AAAA,YAC9B,SAAS;AAAA,YACT,WAAW;AAAA,YAEX,8BAAC,aAAU,WAAW,qBAAqB;AAAA;AAAA,QAC7C;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { cn } from "../lib/cn.js";
|
|
4
|
+
import { TOP_BAR_BASE, TOP_BAR_END, TOP_BAR_START } from "../generated/top-bar.js";
|
|
4
5
|
function TopBar({ start, end, className, ...props }) {
|
|
5
6
|
return /* @__PURE__ */ jsxs(
|
|
6
7
|
"header",
|
|
7
8
|
{
|
|
8
9
|
"data-slot": "top-bar",
|
|
9
|
-
className: cn(
|
|
10
|
+
className: cn(TOP_BAR_BASE, className),
|
|
10
11
|
...props,
|
|
11
12
|
children: [
|
|
12
|
-
/* @__PURE__ */ jsx("div", { "data-slot": "top-bar-start", className:
|
|
13
|
-
/* @__PURE__ */ jsx("div", { "data-slot": "top-bar-end", className:
|
|
13
|
+
/* @__PURE__ */ jsx("div", { "data-slot": "top-bar-start", className: TOP_BAR_START, children: start }),
|
|
14
|
+
/* @__PURE__ */ jsx("div", { "data-slot": "top-bar-end", className: TOP_BAR_END, children: end })
|
|
14
15
|
]
|
|
15
16
|
}
|
|
16
17
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/top-bar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport interface TopBarProps extends React.ComponentProps<\"header\"> {\n /** The app switcher, or the service's name. */\n start?: React.ReactNode;\n /** Service stats, then an `AccountMenu` last. */\n end?: React.ReactNode;\n}\n\n/**\n * The wide screen's utility bar over the content column: who and where, never\n * product nav (that is the rail's). Layout only — `AppShell.topBar` pins it.\n */\nexport function TopBar({ start, end, className, ...props }: TopBarProps) {\n return (\n <header\n data-slot=\"top-bar\"\n className={cn(
|
|
1
|
+
{"version":3,"sources":["../../src/components/top-bar.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { TOP_BAR_BASE, TOP_BAR_END, TOP_BAR_START } from \"../generated/top-bar\";\n\nexport interface TopBarProps extends React.ComponentProps<\"header\"> {\n /** The app switcher, or the service's name. */\n start?: React.ReactNode;\n /** Service stats, then an `AccountMenu` last. */\n end?: React.ReactNode;\n}\n\n/**\n * The wide screen's utility bar over the content column: who and where, never\n * product nav (that is the rail's). Layout only — `AppShell.topBar` pins it.\n */\nexport function TopBar({ start, end, className, ...props }: TopBarProps) {\n return (\n <header\n data-slot=\"top-bar\"\n className={cn(TOP_BAR_BASE, className)}\n {...props}\n >\n <div data-slot=\"top-bar-start\" className={TOP_BAR_START}>\n {start}\n </div>\n <div data-slot=\"top-bar-end\" className={TOP_BAR_END}>\n {end}\n </div>\n </header>\n );\n}\n"],"mappings":"AAiBI,SAKE,KALF;AAjBJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,cAAc,aAAa,qBAAqB;AAalD,SAAS,OAAO,EAAE,OAAO,KAAK,WAAW,GAAG,MAAM,GAAgB;AACvE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,cAAc,SAAS;AAAA,MACpC,GAAG;AAAA,MAEJ;AAAA,4BAAC,SAAI,aAAU,iBAAgB,WAAW,eACvC,iBACH;AAAA,QACA,oBAAC,SAAI,aAAU,eAAc,WAAW,aACrC,eACH;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
const GLYPHS = {
|
|
4
|
+
check: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" }),
|
|
5
|
+
copy: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6
|
+
/* @__PURE__ */ jsx("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2" }),
|
|
7
|
+
/* @__PURE__ */ jsx("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })
|
|
8
|
+
] }),
|
|
9
|
+
"chevron-down": /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" }),
|
|
10
|
+
"chevron-right": /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" }),
|
|
11
|
+
x: /* @__PURE__ */ jsx("path", { d: "M18 6 6 18M6 6l12 12" }),
|
|
12
|
+
search: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13
|
+
/* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
|
|
14
|
+
/* @__PURE__ */ jsx("path", { d: "m21 21-4.3-4.3" })
|
|
15
|
+
] }),
|
|
16
|
+
bell: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
17
|
+
/* @__PURE__ */ jsx("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" }),
|
|
18
|
+
/* @__PURE__ */ jsx("path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0" })
|
|
19
|
+
] }),
|
|
20
|
+
"arrow-up": /* @__PURE__ */ jsx("path", { d: "m5 12 7-7 7 7M12 19V5" }),
|
|
21
|
+
"arrow-down": /* @__PURE__ */ jsx("path", { d: "M12 5v14m7-7-7 7-7-7" }),
|
|
22
|
+
stop: /* @__PURE__ */ jsx("rect", { width: "12", height: "12", x: "6", y: "6", rx: "2" }),
|
|
23
|
+
paperclip: /* @__PURE__ */ jsx("path", { d: "m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48" }),
|
|
24
|
+
file: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
25
|
+
/* @__PURE__ */ jsx("path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" }),
|
|
26
|
+
/* @__PURE__ */ jsx("path", { d: "M14 2v4a2 2 0 0 0 2 2h4" })
|
|
27
|
+
] }),
|
|
28
|
+
image: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
29
|
+
/* @__PURE__ */ jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
|
|
30
|
+
/* @__PURE__ */ jsx("circle", { cx: "9", cy: "9", r: "2" }),
|
|
31
|
+
/* @__PURE__ */ jsx("path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" })
|
|
32
|
+
] }),
|
|
33
|
+
layers: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
34
|
+
/* @__PURE__ */ jsx("path", { d: "m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z" }),
|
|
35
|
+
/* @__PURE__ */ jsx("path", { d: "m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65M22 12.65l-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65" })
|
|
36
|
+
] }),
|
|
37
|
+
plus: /* @__PURE__ */ jsx("path", { d: "M5 12h14M12 5v14" }),
|
|
38
|
+
user: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
39
|
+
/* @__PURE__ */ jsx("path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }),
|
|
40
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "7", r: "4" })
|
|
41
|
+
] }),
|
|
42
|
+
"log-out": /* @__PURE__ */ jsx("path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4m7 14 5-5-5-5m5 5H9" }),
|
|
43
|
+
globe: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
44
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
45
|
+
/* @__PURE__ */ jsx("path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20M2 12h20" })
|
|
46
|
+
] }),
|
|
47
|
+
moon: /* @__PURE__ */ jsx("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" }),
|
|
48
|
+
"panel-right": /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
49
|
+
/* @__PURE__ */ jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
|
|
50
|
+
/* @__PURE__ */ jsx("path", { d: "M15 3v18" })
|
|
51
|
+
] }),
|
|
52
|
+
alert: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
53
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
54
|
+
/* @__PURE__ */ jsx("path", { d: "M12 8v4M12 16h.01" })
|
|
55
|
+
] }),
|
|
56
|
+
sparkles: /* @__PURE__ */ jsx("path", { d: "M9.9 4.4 11 8l3.6 1.1L11 10.2 9.9 13.8 8.8 10.2 5.2 9.1 8.8 8ZM18 14l.7 2.3L21 17l-2.3.7L18 20l-.7-2.3L15 17l2.3-.7Z" })
|
|
57
|
+
};
|
|
58
|
+
function UiIcon({ name, className }) {
|
|
59
|
+
return /* @__PURE__ */ jsx(
|
|
60
|
+
"svg",
|
|
61
|
+
{
|
|
62
|
+
className: className ?? "size-4",
|
|
63
|
+
viewBox: "0 0 24 24",
|
|
64
|
+
fill: "none",
|
|
65
|
+
stroke: "currentColor",
|
|
66
|
+
strokeWidth: 1.75,
|
|
67
|
+
strokeLinecap: "round",
|
|
68
|
+
strokeLinejoin: "round",
|
|
69
|
+
"aria-hidden": true,
|
|
70
|
+
children: GLYPHS[name]
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
export {
|
|
75
|
+
UiIcon
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=ui-icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/ui-icons.tsx"],"sourcesContent":["import * as React from \"react\";\n\n// lucide glyphs the u2 composed parts need, inlined to keep the kit icon-dep free.\n// Internal: consumers bring their own icons through slots.\nconst GLYPHS = {\n check: <path d=\"M20 6 9 17l-5-5\" />,\n copy: (\n <>\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </>\n ),\n \"chevron-down\": <path d=\"m6 9 6 6 6-6\" />,\n \"chevron-right\": <path d=\"m9 18 6-6-6-6\" />,\n x: <path d=\"M18 6 6 18M6 6l12 12\" />,\n search: (\n <>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </>\n ),\n bell: (\n <>\n <path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\n <path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />\n </>\n ),\n \"arrow-up\": <path d=\"m5 12 7-7 7 7M12 19V5\" />,\n \"arrow-down\": <path d=\"M12 5v14m7-7-7 7-7-7\" />,\n stop: <rect width=\"12\" height=\"12\" x=\"6\" y=\"6\" rx=\"2\" />,\n paperclip: (\n <path d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n ),\n file: (\n <>\n <path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n <path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n </>\n ),\n image: (\n <>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </>\n ),\n layers: (\n <>\n <path d=\"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z\" />\n <path d=\"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65M22 12.65l-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65\" />\n </>\n ),\n plus: <path d=\"M5 12h14M12 5v14\" />,\n user: (\n <>\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </>\n ),\n \"log-out\": <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4m7 14 5-5-5-5m5 5H9\" />,\n globe: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20M2 12h20\" />\n </>\n ),\n moon: <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />,\n \"panel-right\": (\n <>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M15 3v18\" />\n </>\n ),\n alert: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4M12 16h.01\" />\n </>\n ),\n sparkles: (\n <path d=\"M9.9 4.4 11 8l3.6 1.1L11 10.2 9.9 13.8 8.8 10.2 5.2 9.1 8.8 8ZM18 14l.7 2.3L21 17l-2.3.7L18 20l-.7-2.3L15 17l2.3-.7Z\" />\n ),\n} satisfies Record<string, React.ReactNode>;\n\nexport type UiIconName = keyof typeof GLYPHS;\n\nexport function UiIcon({ name, className }: { name: UiIconName; className?: string | undefined }) {\n return (\n <svg\n className={className ?? \"size-4\"}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n {GLYPHS[name]}\n </svg>\n );\n}\n"],"mappings":"AAKS,SAEL,UAFK,KAEL,YAFK;AALT,YAAY,WAAW;AAIvB,MAAM,SAAS;AAAA,EACb,OAAO,oBAAC,UAAK,GAAE,mBAAkB;AAAA,EACjC,MACE,iCACE;AAAA,wBAAC,UAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI;AAAA,IAChD,oBAAC,UAAK,GAAE,2DAA0D;AAAA,KACpE;AAAA,EAEF,gBAAgB,oBAAC,UAAK,GAAE,gBAAe;AAAA,EACvC,iBAAiB,oBAAC,UAAK,GAAE,iBAAgB;AAAA,EACzC,GAAG,oBAAC,UAAK,GAAE,wBAAuB;AAAA,EAClC,QACE,iCACE;AAAA,wBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI;AAAA,IAC9B,oBAAC,UAAK,GAAE,kBAAiB;AAAA,KAC3B;AAAA,EAEF,MACE,iCACE;AAAA,wBAAC,UAAK,GAAE,6CAA4C;AAAA,IACpD,oBAAC,UAAK,GAAE,kCAAiC;AAAA,KAC3C;AAAA,EAEF,YAAY,oBAAC,UAAK,GAAE,yBAAwB;AAAA,EAC5C,cAAc,oBAAC,UAAK,GAAE,wBAAuB;AAAA,EAC7C,MAAM,oBAAC,UAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI;AAAA,EACtD,WACE,oBAAC,UAAK,GAAE,mHAAkH;AAAA,EAE5H,MACE,iCACE;AAAA,wBAAC,UAAK,GAAE,8DAA6D;AAAA,IACrE,oBAAC,UAAK,GAAE,2BAA0B;AAAA,KACpC;AAAA,EAEF,OACE,iCACE;AAAA,wBAAC,UAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI;AAAA,IAChD,oBAAC,YAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI;AAAA,IAC5B,oBAAC,UAAK,GAAE,6CAA4C;AAAA,KACtD;AAAA,EAEF,QACE,iCACE;AAAA,wBAAC,UAAK,GAAE,gHAA+G;AAAA,IACvH,oBAAC,UAAK,GAAE,6FAA4F;AAAA,KACtG;AAAA,EAEF,MAAM,oBAAC,UAAK,GAAE,oBAAmB;AAAA,EACjC,MACE,iCACE;AAAA,wBAAC,UAAK,GAAE,6CAA4C;AAAA,IACpD,oBAAC,YAAO,IAAG,MAAK,IAAG,KAAI,GAAE,KAAI;AAAA,KAC/B;AAAA,EAEF,WAAW,oBAAC,UAAK,GAAE,8DAA6D;AAAA,EAChF,OACE,iCACE;AAAA,wBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK;AAAA,IAC/B,oBAAC,UAAK,GAAE,2DAA0D;AAAA,KACpE;AAAA,EAEF,MAAM,oBAAC,UAAK,GAAE,sCAAqC;AAAA,EACnD,eACE,iCACE;AAAA,wBAAC,UAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,KAAI;AAAA,IAChD,oBAAC,UAAK,GAAE,YAAW;AAAA,KACrB;AAAA,EAEF,OACE,iCACE;AAAA,wBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK;AAAA,IAC/B,oBAAC,UAAK,GAAE,qBAAoB;AAAA,KAC9B;AAAA,EAEF,UACE,oBAAC,UAAK,GAAE,wHAAuH;AAEnI;AAIO,SAAS,OAAO,EAAE,MAAM,UAAU,GAAyD;AAChG,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,aAAa;AAAA,MACxB,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAa;AAAA,MACb,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAW;AAAA,MAEV,iBAAO,IAAI;AAAA;AAAA,EACd;AAEJ;","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { useReducedMotion } from "../primitives/use-reduced-motion.js";
|
|
4
|
+
const easeOutCubic = (p) => 1 - (1 - p) ** 3;
|
|
5
|
+
function useCountTween(value, options = {}) {
|
|
6
|
+
const { duration = 800, easing = easeOutCubic, from = 0, animateOnMount = false } = options;
|
|
7
|
+
const reduced = useReducedMotion();
|
|
8
|
+
const [shown, setShown] = React.useState(value);
|
|
9
|
+
const onScreen = React.useRef(value);
|
|
10
|
+
const mounted = React.useRef(false);
|
|
11
|
+
const easingRef = React.useRef(easing);
|
|
12
|
+
easingRef.current = easing;
|
|
13
|
+
React.useLayoutEffect(() => {
|
|
14
|
+
const first = !mounted.current;
|
|
15
|
+
mounted.current = true;
|
|
16
|
+
const start = first ? animateOnMount ? from : value : onScreen.current;
|
|
17
|
+
const paint = (v) => {
|
|
18
|
+
onScreen.current = v;
|
|
19
|
+
setShown(v);
|
|
20
|
+
};
|
|
21
|
+
if (reduced || duration <= 0 || start === value || !Number.isFinite(start) || !Number.isFinite(value)) {
|
|
22
|
+
paint(value);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
paint(start);
|
|
26
|
+
let frame = 0;
|
|
27
|
+
let t0 = null;
|
|
28
|
+
const tick = (now) => {
|
|
29
|
+
t0 ??= now;
|
|
30
|
+
const p = Math.min(1, (now - t0) / duration);
|
|
31
|
+
paint(p >= 1 ? value : start + (value - start) * easingRef.current(p));
|
|
32
|
+
if (p < 1) frame = requestAnimationFrame(tick);
|
|
33
|
+
};
|
|
34
|
+
frame = requestAnimationFrame(tick);
|
|
35
|
+
return () => cancelAnimationFrame(frame);
|
|
36
|
+
}, [value, duration, reduced, animateOnMount, from]);
|
|
37
|
+
return reduced ? value : shown;
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
useCountTween
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=use-count-tween.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/use-count-tween.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useReducedMotion } from \"../primitives/use-reduced-motion\";\n\nexport interface CountTweenOptions {\n /** Milliseconds from the old value to the new one. Default `800`. */\n duration?: number;\n /** Maps progress 0..1 to eased progress 0..1. Default ease-out cubic. */\n easing?: (progress: number) => number;\n /** Count up from here on the first render. Default `0`; only read with `animateOnMount`. */\n from?: number;\n /** Tween on the first render too. Off by default so the server markup is the final value. */\n animateOnMount?: boolean;\n}\n\nconst easeOutCubic = (p: number): number => 1 - (1 - p) ** 3;\n\n/**\n * The number a count-up is showing right now, for custom renderers (charts,\n * labels). It returns `value` itself on the first render and whenever nothing\n * is in flight, so a server render prints the final figure. A new `value`\n * mid-flight restarts from what is on screen. Reduced motion returns `value`\n * with no frames at all.\n */\nexport function useCountTween(value: number, options: CountTweenOptions = {}): number {\n const { duration = 800, easing = easeOutCubic, from = 0, animateOnMount = false } = options;\n const reduced = useReducedMotion();\n const [shown, setShown] = React.useState(value);\n // The frame loop reads the on-screen value without being a dependency of itself.\n const onScreen = React.useRef(value);\n const mounted = React.useRef(false);\n const easingRef = React.useRef(easing);\n easingRef.current = easing;\n\n React.useLayoutEffect(() => {\n const first = !mounted.current;\n mounted.current = true;\n const start = first ? (animateOnMount ? from : value) : onScreen.current;\n const paint = (v: number) => {\n onScreen.current = v;\n setShown(v);\n };\n if (reduced || duration <= 0 || start === value || !Number.isFinite(start) || !Number.isFinite(value)) {\n paint(value);\n return;\n }\n paint(start);\n let frame = 0;\n let t0: number | null = null;\n const tick = (now: number) => {\n t0 ??= now;\n const p = Math.min(1, (now - t0) / duration);\n paint(p >= 1 ? value : start + (value - start) * easingRef.current(p));\n if (p < 1) frame = requestAnimationFrame(tick);\n };\n frame = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(frame);\n }, [value, duration, reduced, animateOnMount, from]);\n\n return reduced ? value : shown;\n}\n"],"mappings":";AAEA,YAAY,WAAW;AACvB,SAAS,wBAAwB;AAajC,MAAM,eAAe,CAAC,MAAsB,KAAK,IAAI,MAAM;AASpD,SAAS,cAAc,OAAe,UAA6B,CAAC,GAAW;AACpF,QAAM,EAAE,WAAW,KAAK,SAAS,cAAc,OAAO,GAAG,iBAAiB,MAAM,IAAI;AACpF,QAAM,UAAU,iBAAiB;AACjC,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,KAAK;AAE9C,QAAM,WAAW,MAAM,OAAO,KAAK;AACnC,QAAM,UAAU,MAAM,OAAO,KAAK;AAClC,QAAM,YAAY,MAAM,OAAO,MAAM;AACrC,YAAU,UAAU;AAEpB,QAAM,gBAAgB,MAAM;AAC1B,UAAM,QAAQ,CAAC,QAAQ;AACvB,YAAQ,UAAU;AAClB,UAAM,QAAQ,QAAS,iBAAiB,OAAO,QAAS,SAAS;AACjE,UAAM,QAAQ,CAAC,MAAc;AAC3B,eAAS,UAAU;AACnB,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,WAAW,YAAY,KAAK,UAAU,SAAS,CAAC,OAAO,SAAS,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK,GAAG;AACrG,YAAM,KAAK;AACX;AAAA,IACF;AACA,UAAM,KAAK;AACX,QAAI,QAAQ;AACZ,QAAI,KAAoB;AACxB,UAAM,OAAO,CAAC,QAAgB;AAC5B,aAAO;AACP,YAAM,IAAI,KAAK,IAAI,IAAI,MAAM,MAAM,QAAQ;AAC3C,YAAM,KAAK,IAAI,QAAQ,SAAS,QAAQ,SAAS,UAAU,QAAQ,CAAC,CAAC;AACrE,UAAI,IAAI,EAAG,SAAQ,sBAAsB,IAAI;AAAA,IAC/C;AACA,YAAQ,sBAAsB,IAAI;AAClC,WAAO,MAAM,qBAAqB,KAAK;AAAA,EACzC,GAAG,CAAC,OAAO,UAAU,SAAS,gBAAgB,IAAI,CAAC;AAEnD,SAAO,UAAU,QAAQ;AAC3B;","names":[]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../lib/cn.js";
|
|
5
|
+
import { useControllableState } from "../primitives/use-controllable-state.js";
|
|
6
|
+
import {
|
|
7
|
+
WORKSPACE_TAB_BASE,
|
|
8
|
+
WORKSPACE_TAB_CLOSE,
|
|
9
|
+
WORKSPACE_TAB_LABEL,
|
|
10
|
+
WORKSPACE_TAB_SELECTED,
|
|
11
|
+
WORKSPACE_TAB_SPACER,
|
|
12
|
+
WORKSPACE_TAB_TRIGGER,
|
|
13
|
+
WORKSPACE_TABS_BASE
|
|
14
|
+
} from "../generated/workspace-tab.js";
|
|
15
|
+
import { UiIcon } from "./ui-icons.js";
|
|
16
|
+
const WorkspaceTabsContext = React.createContext(null);
|
|
17
|
+
function useWorkspaceTabs() {
|
|
18
|
+
const ctx = React.useContext(WorkspaceTabsContext);
|
|
19
|
+
if (!ctx) throw new Error("WorkspaceTab must be used within <WorkspaceTabs>");
|
|
20
|
+
return ctx;
|
|
21
|
+
}
|
|
22
|
+
function WorkspaceTabs({
|
|
23
|
+
value,
|
|
24
|
+
defaultValue = "",
|
|
25
|
+
onValueChange,
|
|
26
|
+
className,
|
|
27
|
+
onKeyDown,
|
|
28
|
+
...props
|
|
29
|
+
}) {
|
|
30
|
+
const [active, setValue] = useControllableState({
|
|
31
|
+
...value !== void 0 ? { value } : {},
|
|
32
|
+
defaultValue,
|
|
33
|
+
...onValueChange ? { onChange: onValueChange } : {}
|
|
34
|
+
});
|
|
35
|
+
const [values, setValues] = React.useState([]);
|
|
36
|
+
const register = React.useCallback((v) => {
|
|
37
|
+
setValues((prev) => [...prev, v]);
|
|
38
|
+
return () => setValues((prev) => prev.filter((x) => x !== v));
|
|
39
|
+
}, []);
|
|
40
|
+
const move = (e) => {
|
|
41
|
+
const tabs = Array.from(e.currentTarget.querySelectorAll('[role="tab"]'));
|
|
42
|
+
const at = tabs.indexOf(document.activeElement);
|
|
43
|
+
if (at < 0) return;
|
|
44
|
+
const target = e.key === "ArrowRight" ? (at + 1) % tabs.length : e.key === "ArrowLeft" ? (at - 1 + tabs.length) % tabs.length : e.key === "Home" ? 0 : e.key === "End" ? tabs.length - 1 : -1;
|
|
45
|
+
if (target < 0) return;
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
tabs[target]?.focus();
|
|
48
|
+
};
|
|
49
|
+
return /* @__PURE__ */ jsx(WorkspaceTabsContext.Provider, { value: { value: active, setValue, values, register }, children: /* @__PURE__ */ jsx(
|
|
50
|
+
"div",
|
|
51
|
+
{
|
|
52
|
+
role: "tablist",
|
|
53
|
+
"aria-orientation": "horizontal",
|
|
54
|
+
"data-slot": "workspace-tabs",
|
|
55
|
+
className: cn(WORKSPACE_TABS_BASE, className),
|
|
56
|
+
onKeyDown: (e) => {
|
|
57
|
+
onKeyDown?.(e);
|
|
58
|
+
if (!e.defaultPrevented) move(e);
|
|
59
|
+
},
|
|
60
|
+
...props
|
|
61
|
+
}
|
|
62
|
+
) });
|
|
63
|
+
}
|
|
64
|
+
function WorkspaceTab({
|
|
65
|
+
value,
|
|
66
|
+
icon,
|
|
67
|
+
onClose,
|
|
68
|
+
closeLabel = "Close tab",
|
|
69
|
+
className,
|
|
70
|
+
children,
|
|
71
|
+
onClick,
|
|
72
|
+
onKeyDown,
|
|
73
|
+
...props
|
|
74
|
+
}) {
|
|
75
|
+
const { value: active, setValue, values, register } = useWorkspaceTabs();
|
|
76
|
+
React.useEffect(() => register(value), [register, value]);
|
|
77
|
+
const selected = active === value;
|
|
78
|
+
const stop = selected || !values.includes(active) && values[0] === value;
|
|
79
|
+
return /* @__PURE__ */ jsxs(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
"data-slot": "workspace-tab",
|
|
83
|
+
"data-state": selected ? "active" : "inactive",
|
|
84
|
+
className: cn(
|
|
85
|
+
WORKSPACE_TAB_BASE,
|
|
86
|
+
selected && WORKSPACE_TAB_SELECTED,
|
|
87
|
+
className
|
|
88
|
+
),
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ jsxs(
|
|
91
|
+
"button",
|
|
92
|
+
{
|
|
93
|
+
type: "button",
|
|
94
|
+
role: "tab",
|
|
95
|
+
"aria-selected": selected,
|
|
96
|
+
tabIndex: stop ? 0 : -1,
|
|
97
|
+
className: WORKSPACE_TAB_TRIGGER,
|
|
98
|
+
onClick: (e) => {
|
|
99
|
+
onClick?.(e);
|
|
100
|
+
setValue(value);
|
|
101
|
+
},
|
|
102
|
+
onKeyDown: (e) => {
|
|
103
|
+
onKeyDown?.(e);
|
|
104
|
+
if (onClose && (e.key === "Delete" || e.key === "Backspace")) {
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
const tabs = Array.from(
|
|
107
|
+
e.currentTarget.closest('[role="tablist"]')?.querySelectorAll('[role="tab"]') ?? []
|
|
108
|
+
);
|
|
109
|
+
const at = tabs.indexOf(e.currentTarget);
|
|
110
|
+
(tabs[at + 1] ?? tabs[at - 1])?.focus();
|
|
111
|
+
onClose();
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
...props,
|
|
115
|
+
children: [
|
|
116
|
+
icon ?? /* @__PURE__ */ jsx(UiIcon, { name: "layers" }),
|
|
117
|
+
/* @__PURE__ */ jsx("span", { className: WORKSPACE_TAB_LABEL, children })
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
),
|
|
121
|
+
onClose ? /* @__PURE__ */ jsx(
|
|
122
|
+
"button",
|
|
123
|
+
{
|
|
124
|
+
type: "button",
|
|
125
|
+
"aria-label": closeLabel,
|
|
126
|
+
tabIndex: -1,
|
|
127
|
+
onClick: onClose,
|
|
128
|
+
className: WORKSPACE_TAB_CLOSE,
|
|
129
|
+
children: /* @__PURE__ */ jsx(UiIcon, { name: "x" })
|
|
130
|
+
}
|
|
131
|
+
) : /* @__PURE__ */ jsx("span", { className: WORKSPACE_TAB_SPACER, "aria-hidden": true })
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
export {
|
|
137
|
+
WorkspaceTab,
|
|
138
|
+
WorkspaceTabs
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=workspace-tab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/workspace-tab.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n WORKSPACE_TAB_BASE,\n WORKSPACE_TAB_CLOSE,\n WORKSPACE_TAB_LABEL,\n WORKSPACE_TAB_SELECTED,\n WORKSPACE_TAB_SPACER,\n WORKSPACE_TAB_TRIGGER,\n WORKSPACE_TABS_BASE,\n} from \"../generated/workspace-tab\";\nimport { UiIcon } from \"./ui-icons\";\n\ninterface WorkspaceTabsContextValue {\n value: string;\n setValue: (next: string) => void;\n /** Values of the mounted tabs, in mount order. */\n values: readonly string[];\n register: (value: string) => () => void;\n}\n\nconst WorkspaceTabsContext = React.createContext<WorkspaceTabsContextValue | null>(null);\n\nfunction useWorkspaceTabs(): WorkspaceTabsContextValue {\n const ctx = React.useContext(WorkspaceTabsContext);\n if (!ctx) throw new Error(\"WorkspaceTab must be used within <WorkspaceTabs>\");\n return ctx;\n}\n\nexport interface WorkspaceTabsProps extends Omit<React.ComponentProps<\"div\">, \"onChange\" | \"defaultValue\"> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\n/**\n * A row of open workspaces. Arrow keys move focus (Home/End jump); selecting is\n * Enter, Space or a click, so moving through the row never swaps the screen.\n */\nexport function WorkspaceTabs({\n value,\n defaultValue = \"\",\n onValueChange,\n className,\n onKeyDown,\n ...props\n}: WorkspaceTabsProps) {\n const [active, setValue] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n const [values, setValues] = React.useState<readonly string[]>([]);\n const register = React.useCallback((v: string) => {\n setValues((prev) => [...prev, v]);\n return () => setValues((prev) => prev.filter((x) => x !== v));\n }, []);\n // Tabs come and go as workspaces open and close, so the order is read from the DOM at key time.\n const move = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const tabs = Array.from(e.currentTarget.querySelectorAll<HTMLElement>('[role=\"tab\"]'));\n const at = tabs.indexOf(document.activeElement as HTMLElement);\n if (at < 0) return;\n const target =\n e.key === \"ArrowRight\" ? (at + 1) % tabs.length\n : e.key === \"ArrowLeft\" ? (at - 1 + tabs.length) % tabs.length\n : e.key === \"Home\" ? 0\n : e.key === \"End\" ? tabs.length - 1\n : -1;\n if (target < 0) return;\n e.preventDefault();\n tabs[target]?.focus();\n };\n return (\n <WorkspaceTabsContext.Provider value={{ value: active, setValue, values, register }}>\n <div\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n data-slot=\"workspace-tabs\"\n className={cn(WORKSPACE_TABS_BASE, className)}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (!e.defaultPrevented) move(e);\n }}\n {...props}\n />\n </WorkspaceTabsContext.Provider>\n );\n}\n\nexport interface WorkspaceTabProps extends Omit<React.ComponentProps<\"button\">, \"value\"> {\n value: string;\n /** Leading glyph; the layers glyph by default. */\n icon?: React.ReactNode;\n /** Adds a close button; Delete and Backspace on the tab close it too. */\n onClose?: () => void;\n /** Names the close button, e.g. \"Close Trading\". */\n closeLabel?: string;\n}\n\nexport function WorkspaceTab({\n value,\n icon,\n onClose,\n closeLabel = \"Close tab\",\n className,\n children,\n onClick,\n onKeyDown,\n ...props\n}: WorkspaceTabProps) {\n const { value: active, setValue, values, register } = useWorkspaceTabs();\n React.useEffect(() => register(value), [register, value]);\n const selected = active === value;\n // With no selected tab (nothing chosen yet, or the active one was just closed) the first tab\n // takes the tab stop, or the row could not be entered from the keyboard.\n const stop = selected || (!values.includes(active) && values[0] === value);\n return (\n <div\n data-slot=\"workspace-tab\"\n data-state={selected ? \"active\" : \"inactive\"}\n className={cn(\n WORKSPACE_TAB_BASE,\n selected && WORKSPACE_TAB_SELECTED,\n className,\n )}\n >\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n tabIndex={stop ? 0 : -1}\n className={WORKSPACE_TAB_TRIGGER}\n onClick={(e) => {\n onClick?.(e);\n setValue(value);\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (onClose && (e.key === \"Delete\" || e.key === \"Backspace\")) {\n e.preventDefault();\n // Hand focus to a neighbour first: the closed tab's button unmounts and focus would fall to <body>.\n const tabs = Array.from(\n e.currentTarget.closest('[role=\"tablist\"]')?.querySelectorAll<HTMLElement>('[role=\"tab\"]') ?? [],\n );\n const at = tabs.indexOf(e.currentTarget);\n (tabs[at + 1] ?? tabs[at - 1])?.focus();\n onClose();\n }\n }}\n {...props}\n >\n {icon ?? <UiIcon name=\"layers\" />}\n <span className={WORKSPACE_TAB_LABEL}>{children}</span>\n </button>\n {onClose ? (\n <button\n type=\"button\"\n aria-label={closeLabel}\n tabIndex={-1}\n onClick={onClose}\n className={WORKSPACE_TAB_CLOSE}\n >\n <UiIcon name=\"x\" />\n </button>\n ) : (\n <span className={WORKSPACE_TAB_SPACER} aria-hidden />\n )}\n </div>\n );\n}\n"],"mappings":";AA6EM,cAoDA,YApDA;AA3EN,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AAUvB,MAAM,uBAAuB,MAAM,cAAgD,IAAI;AAEvF,SAAS,mBAA8C;AACrD,QAAM,MAAM,MAAM,WAAW,oBAAoB;AACjD,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,kDAAkD;AAC5E,SAAO;AACT;AAYO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAuB;AACrB,QAAM,CAAC,QAAQ,QAAQ,IAAI,qBAA6B;AAAA,IACtD,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACvC;AAAA,IACA,GAAI,gBAAgB,EAAE,UAAU,cAAc,IAAI,CAAC;AAAA,EACrD,CAAC;AACD,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAA4B,CAAC,CAAC;AAChE,QAAM,WAAW,MAAM,YAAY,CAAC,MAAc;AAChD,cAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC;AAChC,WAAO,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC;AAAA,EAC9D,GAAG,CAAC,CAAC;AAEL,QAAM,OAAO,CAAC,MAA2C;AACvD,UAAM,OAAO,MAAM,KAAK,EAAE,cAAc,iBAA8B,cAAc,CAAC;AACrF,UAAM,KAAK,KAAK,QAAQ,SAAS,aAA4B;AAC7D,QAAI,KAAK,EAAG;AACZ,UAAM,SACJ,EAAE,QAAQ,gBAAgB,KAAK,KAAK,KAAK,SACvC,EAAE,QAAQ,eAAe,KAAK,IAAI,KAAK,UAAU,KAAK,SACtD,EAAE,QAAQ,SAAS,IACnB,EAAE,QAAQ,QAAQ,KAAK,SAAS,IAChC;AACJ,QAAI,SAAS,EAAG;AAChB,MAAE,eAAe;AACjB,SAAK,MAAM,GAAG,MAAM;AAAA,EACtB;AACA,SACE,oBAAC,qBAAqB,UAArB,EAA8B,OAAO,EAAE,OAAO,QAAQ,UAAU,QAAQ,SAAS,GAChF;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,oBAAiB;AAAA,MACjB,aAAU;AAAA,MACV,WAAW,GAAG,qBAAqB,SAAS;AAAA,MAC5C,WAAW,CAAC,MAAM;AAChB,oBAAY,CAAC;AACb,YAAI,CAAC,EAAE,iBAAkB,MAAK,CAAC;AAAA,MACjC;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ;AAYO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,QAAM,EAAE,OAAO,QAAQ,UAAU,QAAQ,SAAS,IAAI,iBAAiB;AACvE,QAAM,UAAU,MAAM,SAAS,KAAK,GAAG,CAAC,UAAU,KAAK,CAAC;AACxD,QAAM,WAAW,WAAW;AAG5B,QAAM,OAAO,YAAa,CAAC,OAAO,SAAS,MAAM,KAAK,OAAO,CAAC,MAAM;AACpE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY,WAAW,WAAW;AAAA,MAClC,WAAW;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,iBAAe;AAAA,YACf,UAAU,OAAO,IAAI;AAAA,YACrB,WAAW;AAAA,YACX,SAAS,CAAC,MAAM;AACd,wBAAU,CAAC;AACX,uBAAS,KAAK;AAAA,YAChB;AAAA,YACA,WAAW,CAAC,MAAM;AAChB,0BAAY,CAAC;AACb,kBAAI,YAAY,EAAE,QAAQ,YAAY,EAAE,QAAQ,cAAc;AAC5D,kBAAE,eAAe;AAEjB,sBAAM,OAAO,MAAM;AAAA,kBACjB,EAAE,cAAc,QAAQ,kBAAkB,GAAG,iBAA8B,cAAc,KAAK,CAAC;AAAA,gBACjG;AACA,sBAAM,KAAK,KAAK,QAAQ,EAAE,aAAa;AACvC,iBAAC,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,MAAM;AACtC,wBAAQ;AAAA,cACV;AAAA,YACF;AAAA,YACC,GAAG;AAAA,YAEH;AAAA,sBAAQ,oBAAC,UAAO,MAAK,UAAS;AAAA,cAC/B,oBAAC,UAAK,WAAW,qBAAsB,UAAS;AAAA;AAAA;AAAA,QAClD;AAAA,QACC,UACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAY;AAAA,YACZ,UAAU;AAAA,YACV,SAAS;AAAA,YACT,WAAW;AAAA,YAEX,8BAAC,UAAO,MAAK,KAAI;AAAA;AAAA,QACnB,IAEA,oBAAC,UAAK,WAAW,sBAAsB,eAAW,MAAC;AAAA;AAAA;AAAA,EAEvD;AAEJ;","names":[]}
|
package/dist/generated/accent.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const accentTextClasses = {
|
|
2
2
|
"trace": "text-accent-trace",
|
|
3
3
|
"debug": "text-accent-debug",
|
|
4
|
-
"info": "text-accent-info",
|
|
4
|
+
"info": "text-accent-info-ink",
|
|
5
5
|
"warn": "text-accent-warn",
|
|
6
6
|
"error": "text-accent-error"
|
|
7
7
|
};
|
|
@@ -15,7 +15,7 @@ const accentFillClasses = {
|
|
|
15
15
|
const accentOutlineClasses = {
|
|
16
16
|
"trace": "border border-accent-trace/40 text-accent-trace hover:bg-accent-trace/10",
|
|
17
17
|
"debug": "border border-accent-debug/40 text-accent-debug hover:bg-accent-debug/10",
|
|
18
|
-
"info": "border border-accent-info/40 text-accent-info hover:bg-accent-info/10",
|
|
18
|
+
"info": "border border-accent-info/40 text-accent-info-ink hover:bg-accent-info/10",
|
|
19
19
|
"warn": "border border-accent-warn/40 text-accent-warn hover:bg-accent-warn/10",
|
|
20
20
|
"error": "border border-accent-error/40 text-accent-error hover:bg-accent-error/10"
|
|
21
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/generated/accent.ts"],"sourcesContent":["// AUTO-GENERATED by `nix run .#gen` — do not edit.\n\nexport const accentTextClasses = {\n \"trace\": \"text-accent-trace\",\n \"debug\": \"text-accent-debug\",\n \"info\": \"text-accent-info\",\n \"warn\": \"text-accent-warn\",\n \"error\": \"text-accent-error\",\n} as const;\nexport type Accent = keyof typeof accentTextClasses;\n\nexport const accentFillClasses = {\n \"trace\": \"bg-accent-trace text-on-accent-trace hover:bg-accent-trace/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"debug\": \"bg-accent-debug text-on-accent-debug hover:bg-accent-debug/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"info\": \"bg-accent-info text-on-accent-info hover:bg-accent-info/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"warn\": \"bg-accent-warn text-on-accent-warn hover:bg-accent-warn/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"error\": \"bg-accent-error text-on-accent-error hover:bg-accent-error/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n} as const;\nexport type AccentFill = keyof typeof accentFillClasses;\n\nexport const accentOutlineClasses = {\n \"trace\": \"border border-accent-trace/40 text-accent-trace hover:bg-accent-trace/10\",\n \"debug\": \"border border-accent-debug/40 text-accent-debug hover:bg-accent-debug/10\",\n \"info\": \"border border-accent-info/40 text-accent-info hover:bg-accent-info/10\",\n \"warn\": \"border border-accent-warn/40 text-accent-warn hover:bg-accent-warn/10\",\n \"error\": \"border border-accent-error/40 text-accent-error hover:bg-accent-error/10\",\n} as const;\nexport type AccentOutline = keyof typeof accentOutlineClasses;\n"],"mappings":"AAEO,MAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;AAGO,MAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;AAGO,MAAM,uBAAuB;AAAA,EAClC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/generated/accent.ts"],"sourcesContent":["// AUTO-GENERATED by `nix run .#gen` — do not edit.\n\nexport const accentTextClasses = {\n \"trace\": \"text-accent-trace\",\n \"debug\": \"text-accent-debug\",\n \"info\": \"text-accent-info-ink\",\n \"warn\": \"text-accent-warn\",\n \"error\": \"text-accent-error\",\n} as const;\nexport type Accent = keyof typeof accentTextClasses;\n\nexport const accentFillClasses = {\n \"trace\": \"bg-accent-trace text-on-accent-trace hover:bg-accent-trace/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"debug\": \"bg-accent-debug text-on-accent-debug hover:bg-accent-debug/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"info\": \"bg-accent-info text-on-accent-info hover:bg-accent-info/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"warn\": \"bg-accent-warn text-on-accent-warn hover:bg-accent-warn/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n \"error\": \"bg-accent-error text-on-accent-error hover:bg-accent-error/90 focus-visible:ring-0 focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n} as const;\nexport type AccentFill = keyof typeof accentFillClasses;\n\nexport const accentOutlineClasses = {\n \"trace\": \"border border-accent-trace/40 text-accent-trace hover:bg-accent-trace/10\",\n \"debug\": \"border border-accent-debug/40 text-accent-debug hover:bg-accent-debug/10\",\n \"info\": \"border border-accent-info/40 text-accent-info-ink hover:bg-accent-info/10\",\n \"warn\": \"border border-accent-warn/40 text-accent-warn hover:bg-accent-warn/10\",\n \"error\": \"border border-accent-error/40 text-accent-error hover:bg-accent-error/10\",\n} as const;\nexport type AccentOutline = keyof typeof accentOutlineClasses;\n"],"mappings":"AAEO,MAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;AAGO,MAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;AAGO,MAAM,uBAAuB;AAAA,EAClC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const ACCOUNT_LIST_BASE = "flex flex-col gap-2";
|
|
2
|
+
const ACCOUNT_LIST_ITEM_BASE = "flex items-center gap-3 rounded-(--control-radius) border p-2.5 pr-3 transition-colors";
|
|
3
|
+
const ACCOUNT_LIST_ITEM_CHECKED = "border-primary-border bg-selected";
|
|
4
|
+
const ACCOUNT_LIST_ITEM_UNCHECKED = "border-border-subtle bg-muted hover:bg-hover";
|
|
5
|
+
const ACCOUNT_LIST_ITEM_DISABLED = "opacity-40";
|
|
6
|
+
const ACCOUNT_LIST_ITEM_RADIO = "flex min-w-0 flex-1 items-center gap-3 rounded-(--control-radius) text-left outline-none focus-visible:ring-2 focus-visible:ring-ring";
|
|
7
|
+
const ACCOUNT_LIST_ITEM_AVATAR = "size-14 shrink-0 rounded-(--control-radius)";
|
|
8
|
+
const ACCOUNT_LIST_ITEM_AVATAR_FALLBACK = "font-serif text-h2 font-light text-ink";
|
|
9
|
+
const ACCOUNT_LIST_ITEM_TEXT = "flex min-w-0 flex-1 flex-col gap-0.5";
|
|
10
|
+
const ACCOUNT_LIST_ITEM_NAME = "truncate text-body-l text-ink";
|
|
11
|
+
const ACCOUNT_LIST_ITEM_HANDLE = "truncate text-body text-ink-mid";
|
|
12
|
+
const ACCOUNT_LIST_ITEM_BADGES = "flex shrink-0 items-center gap-1.5";
|
|
13
|
+
const ACCOUNT_LIST_ITEM_FIGURE = "shrink-0 font-serif text-figure-m font-light tabular-nums text-ink";
|
|
14
|
+
const ACCOUNT_LIST_ITEM_CHECK = "flex size-4 shrink-0 text-primary-ink";
|
|
15
|
+
const ACCOUNT_LIST_ITEM_CHECK_HIDDEN = "invisible";
|
|
16
|
+
const ACCOUNT_LIST_ITEM_ACTIONS = "flex shrink-0 items-center gap-1";
|
|
17
|
+
export {
|
|
18
|
+
ACCOUNT_LIST_BASE,
|
|
19
|
+
ACCOUNT_LIST_ITEM_ACTIONS,
|
|
20
|
+
ACCOUNT_LIST_ITEM_AVATAR,
|
|
21
|
+
ACCOUNT_LIST_ITEM_AVATAR_FALLBACK,
|
|
22
|
+
ACCOUNT_LIST_ITEM_BADGES,
|
|
23
|
+
ACCOUNT_LIST_ITEM_BASE,
|
|
24
|
+
ACCOUNT_LIST_ITEM_CHECK,
|
|
25
|
+
ACCOUNT_LIST_ITEM_CHECKED,
|
|
26
|
+
ACCOUNT_LIST_ITEM_CHECK_HIDDEN,
|
|
27
|
+
ACCOUNT_LIST_ITEM_DISABLED,
|
|
28
|
+
ACCOUNT_LIST_ITEM_FIGURE,
|
|
29
|
+
ACCOUNT_LIST_ITEM_HANDLE,
|
|
30
|
+
ACCOUNT_LIST_ITEM_NAME,
|
|
31
|
+
ACCOUNT_LIST_ITEM_RADIO,
|
|
32
|
+
ACCOUNT_LIST_ITEM_TEXT,
|
|
33
|
+
ACCOUNT_LIST_ITEM_UNCHECKED
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=account-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/generated/account-list.ts"],"sourcesContent":["// AUTO-GENERATED by `nix run .#gen` — do not edit.\n\nexport const ACCOUNT_LIST_BASE = \"flex flex-col gap-2\";\n\nexport const ACCOUNT_LIST_ITEM_BASE = \"flex items-center gap-3 rounded-(--control-radius) border p-2.5 pr-3 transition-colors\";\n\nexport const ACCOUNT_LIST_ITEM_CHECKED = \"border-primary-border bg-selected\";\n\nexport const ACCOUNT_LIST_ITEM_UNCHECKED = \"border-border-subtle bg-muted hover:bg-hover\";\n\nexport const ACCOUNT_LIST_ITEM_DISABLED = \"opacity-40\";\n\nexport const ACCOUNT_LIST_ITEM_RADIO = \"flex min-w-0 flex-1 items-center gap-3 rounded-(--control-radius) text-left outline-none focus-visible:ring-2 focus-visible:ring-ring\";\n\nexport const ACCOUNT_LIST_ITEM_AVATAR = \"size-14 shrink-0 rounded-(--control-radius)\";\n\nexport const ACCOUNT_LIST_ITEM_AVATAR_FALLBACK = \"font-serif text-h2 font-light text-ink\";\n\nexport const ACCOUNT_LIST_ITEM_TEXT = \"flex min-w-0 flex-1 flex-col gap-0.5\";\n\nexport const ACCOUNT_LIST_ITEM_NAME = \"truncate text-body-l text-ink\";\n\nexport const ACCOUNT_LIST_ITEM_HANDLE = \"truncate text-body text-ink-mid\";\n\nexport const ACCOUNT_LIST_ITEM_BADGES = \"flex shrink-0 items-center gap-1.5\";\n\nexport const ACCOUNT_LIST_ITEM_FIGURE = \"shrink-0 font-serif text-figure-m font-light tabular-nums text-ink\";\n\nexport const ACCOUNT_LIST_ITEM_CHECK = \"flex size-4 shrink-0 text-primary-ink\";\n\nexport const ACCOUNT_LIST_ITEM_CHECK_HIDDEN = \"invisible\";\n\nexport const ACCOUNT_LIST_ITEM_ACTIONS = \"flex shrink-0 items-center gap-1\";\n"],"mappings":"AAEO,MAAM,oBAAoB;AAE1B,MAAM,yBAAyB;AAE/B,MAAM,4BAA4B;AAElC,MAAM,8BAA8B;AAEpC,MAAM,6BAA6B;AAEnC,MAAM,0BAA0B;AAEhC,MAAM,2BAA2B;AAEjC,MAAM,oCAAoC;AAE1C,MAAM,yBAAyB;AAE/B,MAAM,yBAAyB;AAE/B,MAAM,2BAA2B;AAEjC,MAAM,2BAA2B;AAEjC,MAAM,2BAA2B;AAEjC,MAAM,0BAA0B;AAEhC,MAAM,iCAAiC;AAEvC,MAAM,4BAA4B;","names":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const ACCOUNT_SETTINGS_DIALOG_CONTENT = "flex max-h-[90dvh] max-w-[calc(100%-2rem)] flex-col gap-0 overflow-hidden bg-popover p-0 sm:max-w-260 md:h-170 md:flex-row";
|
|
2
|
+
const ACCOUNT_SETTINGS_DIALOG_TABS = "min-h-0 flex-1 flex-col gap-0 md:flex-row";
|
|
3
|
+
const ACCOUNT_SETTINGS_DIALOG_SIDEBAR = "flex max-h-44 shrink-0 flex-col gap-2 overflow-y-auto border-b border-border-subtle bg-card p-2 md:max-h-none md:w-60 md:border-b-0 md:border-r";
|
|
4
|
+
const ACCOUNT_SETTINGS_DIALOG_LIST = "h-auto w-full flex-1 flex-col items-stretch justify-start gap-0.5 bg-transparent p-0";
|
|
5
|
+
const ACCOUNT_SETTINGS_DIALOG_ENTRY = "h-8 w-full flex-none justify-start gap-2.5 rounded-(--control-radius) border-0 px-2.5 text-body font-normal text-ink-mid shadow-none data-[state=active]:bg-active data-[state=active]:text-ink data-[state=active]:shadow-none hover:bg-hover [&_svg]:text-ink-soft";
|
|
6
|
+
const ACCOUNT_SETTINGS_DIALOG_FOOTER = "flex items-center gap-1 border-t border-border-subtle pt-2";
|
|
7
|
+
const ACCOUNT_SETTINGS_DIALOG_PANE = "relative flex min-h-0 min-w-0 flex-1 flex-col gap-5 overflow-y-auto p-6 md:p-8";
|
|
8
|
+
const ACCOUNT_SETTINGS_DIALOG_HEADING = "flex flex-col gap-1 pr-10";
|
|
9
|
+
const ACCOUNT_SETTINGS_DIALOG_TITLE = "font-serif text-h1 font-light text-ink";
|
|
10
|
+
const ACCOUNT_SETTINGS_DIALOG_DESCRIPTION = "text-body text-ink-mid";
|
|
11
|
+
const ACCOUNT_SETTINGS_DIALOG_PANEL = "flex flex-col gap-5";
|
|
12
|
+
const ACCOUNT_SETTINGS_DIALOG_CLOSE = "absolute right-4 top-4";
|
|
13
|
+
export {
|
|
14
|
+
ACCOUNT_SETTINGS_DIALOG_CLOSE,
|
|
15
|
+
ACCOUNT_SETTINGS_DIALOG_CONTENT,
|
|
16
|
+
ACCOUNT_SETTINGS_DIALOG_DESCRIPTION,
|
|
17
|
+
ACCOUNT_SETTINGS_DIALOG_ENTRY,
|
|
18
|
+
ACCOUNT_SETTINGS_DIALOG_FOOTER,
|
|
19
|
+
ACCOUNT_SETTINGS_DIALOG_HEADING,
|
|
20
|
+
ACCOUNT_SETTINGS_DIALOG_LIST,
|
|
21
|
+
ACCOUNT_SETTINGS_DIALOG_PANE,
|
|
22
|
+
ACCOUNT_SETTINGS_DIALOG_PANEL,
|
|
23
|
+
ACCOUNT_SETTINGS_DIALOG_SIDEBAR,
|
|
24
|
+
ACCOUNT_SETTINGS_DIALOG_TABS,
|
|
25
|
+
ACCOUNT_SETTINGS_DIALOG_TITLE
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=account-settings-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/generated/account-settings-dialog.ts"],"sourcesContent":["// AUTO-GENERATED by `nix run .#gen` — do not edit.\n\nexport const ACCOUNT_SETTINGS_DIALOG_CONTENT = \"flex max-h-[90dvh] max-w-[calc(100%-2rem)] flex-col gap-0 overflow-hidden bg-popover p-0 sm:max-w-260 md:h-170 md:flex-row\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_TABS = \"min-h-0 flex-1 flex-col gap-0 md:flex-row\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_SIDEBAR = \"flex max-h-44 shrink-0 flex-col gap-2 overflow-y-auto border-b border-border-subtle bg-card p-2 md:max-h-none md:w-60 md:border-b-0 md:border-r\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_LIST = \"h-auto w-full flex-1 flex-col items-stretch justify-start gap-0.5 bg-transparent p-0\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_ENTRY = \"h-8 w-full flex-none justify-start gap-2.5 rounded-(--control-radius) border-0 px-2.5 text-body font-normal text-ink-mid shadow-none data-[state=active]:bg-active data-[state=active]:text-ink data-[state=active]:shadow-none hover:bg-hover [&_svg]:text-ink-soft\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_FOOTER = \"flex items-center gap-1 border-t border-border-subtle pt-2\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_PANE = \"relative flex min-h-0 min-w-0 flex-1 flex-col gap-5 overflow-y-auto p-6 md:p-8\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_HEADING = \"flex flex-col gap-1 pr-10\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_TITLE = \"font-serif text-h1 font-light text-ink\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_DESCRIPTION = \"text-body text-ink-mid\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_PANEL = \"flex flex-col gap-5\";\n\nexport const ACCOUNT_SETTINGS_DIALOG_CLOSE = \"absolute right-4 top-4\";\n"],"mappings":"AAEO,MAAM,kCAAkC;AAExC,MAAM,+BAA+B;AAErC,MAAM,kCAAkC;AAExC,MAAM,+BAA+B;AAErC,MAAM,gCAAgC;AAEtC,MAAM,iCAAiC;AAEvC,MAAM,+BAA+B;AAErC,MAAM,kCAAkC;AAExC,MAAM,gCAAgC;AAEtC,MAAM,sCAAsC;AAE5C,MAAM,gCAAgC;AAEtC,MAAM,gCAAgC;","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const ALERT_DIALOG_OVERLAY = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 duration-200 data-[state=closed]:fill-mode-forwards data-[state=closed]:pointer-events-none fixed inset-0 z-50 bg-
|
|
1
|
+
const ALERT_DIALOG_OVERLAY = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 duration-200 data-[state=closed]:fill-mode-forwards data-[state=closed]:pointer-events-none fixed inset-0 z-50 bg-scrim";
|
|
2
2
|
const ALERT_DIALOG_CONTENT = "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border border-border p-6 shadow-lg duration-200 data-[state=closed]:fill-mode-forwards outline-hidden sm:max-w-lg";
|
|
3
3
|
const ALERT_DIALOG_HEADER = "flex flex-col gap-2 text-center sm:text-left";
|
|
4
4
|
const ALERT_DIALOG_FOOTER = "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end";
|