@uisatin/ui 0.2.0 → 0.3.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/CHANGELOG.md +14 -0
- package/README.md +10 -1
- package/chunk-3DHJXU45.js +147 -0
- package/{chunk-6YXUBP27.js → chunk-5725MFGQ.js} +72 -67
- package/{chunk-BKZBWPUH.js → chunk-57QEOCDZ.js} +9 -11
- package/{chunk-RTJ76X5U.js → chunk-5KTBSMQU.js} +2 -4
- package/{chunk-B2K45IUR.js → chunk-5XTUFBZI.js} +5 -7
- package/{chunk-LW3TRU5W.js → chunk-674SRBZK.js} +28 -16
- package/{chunk-XZNHT6MO.js → chunk-6VKV36OK.js} +115 -61
- package/{chunk-GICKPMJU.js → chunk-73Z7NMQQ.js} +31 -31
- package/chunk-7Q76HLRQ.js +128 -0
- package/{chunk-JPNWHWAQ.js → chunk-AIMQNLPY.js} +38 -35
- package/{chunk-MYEZXZZC.js → chunk-BN7FDKCJ.js} +23 -25
- package/{chunk-3DINAQLL.js → chunk-BR2B4OIT.js} +33 -29
- package/{chunk-2HKBZFIK.js → chunk-CGOH5IYX.js} +31 -31
- package/chunk-CVNRZ2YV.js +112 -0
- package/{chunk-QUF2IPOZ.js → chunk-DPYIBFQD.js} +12 -14
- package/chunk-EF5GT4OG.js +87 -0
- package/chunk-FAJ3OVL4.js +37 -0
- package/{chunk-L6NCCSIP.js → chunk-FB5HTCO2.js} +36 -29
- package/chunk-GI2SMFZL.js +55 -0
- package/{chunk-B6V4VSGH.js → chunk-GMETYACH.js} +14 -15
- package/chunk-HK6WINL6.js +95 -0
- package/{chunk-HL42K2NH.js → chunk-IKO3GQFE.js} +17 -17
- package/{chunk-DO3TBNSC.js → chunk-ISYKZCPJ.js} +15 -17
- package/{chunk-YG7JOOLJ.js → chunk-J7RMFN54.js} +5 -7
- package/{chunk-SHDFUXYV.js → chunk-JBKBRAC4.js} +16 -18
- package/{chunk-LZMKSFCF.js → chunk-JCXI7VQL.js} +10 -12
- package/{chunk-NN6PKJWS.js → chunk-JYOZUQNU.js} +7 -9
- package/{chunk-LLHTVIM3.js → chunk-LB37KTJH.js} +7 -9
- package/{chunk-NSRTTYQ4.js → chunk-LB7Z6BSK.js} +42 -35
- package/{chunk-BNZVTLHV.js → chunk-LFGUJHFF.js} +25 -21
- package/{chunk-7TXHCRAG.js → chunk-M2HEVFQ3.js} +8 -10
- package/{chunk-SH6NG6VN.js → chunk-NH3EHMIL.js} +6 -8
- package/chunk-NL574STL.js +88 -0
- package/chunk-NQL6SIIB.js +168 -0
- package/chunk-O46O6LFQ.js +25 -0
- package/{chunk-YPNKBE5X.js → chunk-OURZQM27.js} +5 -7
- package/{chunk-XL75JRUA.js → chunk-OVKPPXK5.js} +42 -22
- package/chunk-PD6YPFYN.js +42 -0
- package/{chunk-XILQ7GXE.js → chunk-PHNR6ZQ7.js} +11 -13
- package/{chunk-BNTPPZCK.js → chunk-PUWSL5XW.js} +37 -39
- package/{chunk-A5XEM3GF.js → chunk-RHQHDYTE.js} +34 -36
- package/chunk-S7QHBVPX.js +45 -0
- package/{chunk-TX3H3QMA.js → chunk-SAYNV7B3.js} +71 -70
- package/{chunk-6QMSWITQ.js → chunk-SDOTDMYG.js} +24 -26
- package/{chunk-UGRSWP6U.js → chunk-SPGUZMCC.js} +10 -12
- package/chunk-SSOFFQ5T.js +74 -0
- package/{chunk-AN2RNJLR.js → chunk-SZJIVBOD.js} +16 -16
- package/chunk-T6L32XXH.js +107 -0
- package/{chunk-QS4N4MNP.js → chunk-TT2N5752.js} +18 -20
- package/{chunk-72OCFAPT.js → chunk-UCCNXGLG.js} +22 -21
- package/{chunk-KNUWZNFV.js → chunk-UGIVCXGN.js} +4 -6
- package/{chunk-H4NU7NPO.js → chunk-UUCVRIVP.js} +62 -61
- package/{chunk-P4O6TGDR.js → chunk-UZ4DXU6W.js} +28 -26
- package/{chunk-UBNHSZSE.js → chunk-VUOAPWTF.js} +10 -12
- package/{chunk-VAGIAREV.js → chunk-W472DBMT.js} +29 -26
- package/{chunk-X3PQANZO.js → chunk-W4RDTP6W.js} +47 -46
- package/{chunk-CL2II6BX.js → chunk-WLQD5BN2.js} +11 -13
- package/{chunk-FDKIX4DC.js → chunk-X2GNMNZQ.js} +7 -9
- package/{chunk-PF3YBUKT.js → chunk-X66KTATQ.js} +16 -15
- package/{chunk-J3NSDRVH.js → chunk-XETMIETJ.js} +0 -2
- package/chunk-XH56JGYC.js +71 -0
- package/{chunk-O7F3CIDV.js → chunk-XUOSJMEJ.js} +10 -12
- package/chunk-YJK4MGSI.js +86 -0
- package/{chunk-YX5VNRJX.js → chunk-YYFAZQ25.js} +0 -2
- package/chunk-Z7S2KQZS.js +177 -0
- package/chunk-ZBZ3ZQRB.js +195 -0
- package/{chunk-Y5AYU7PK.js → chunk-ZHFIWDGF.js} +0 -2
- package/components/accordion.js +2 -4
- package/components/agent-loading.d.ts +2 -0
- package/components/agent-loading.js +2 -4
- package/components/agent-picker.js +4 -5
- package/components/agent-suggestion.js +5 -6
- package/components/announcement-bar.js +6 -7
- package/components/attachment.js +4 -5
- package/components/avatar.js +4 -6
- package/components/badge.js +2 -4
- package/components/banner-mesh.js +1 -3
- package/components/banner.js +4 -6
- package/components/bar-chart.js +10 -11
- package/components/breadcrumb.js +5 -6
- package/components/button.js +2 -4
- package/components/card.js +3 -5
- package/components/channel-chart.js +10 -11
- package/components/chart.js +9 -10
- package/components/checkbox.js +2 -4
- package/components/chip.js +2 -4
- package/components/citations.d.ts +6 -4
- package/components/citations.js +4 -5
- package/components/code-block.js +3 -5
- package/components/combobox.d.ts +12 -3
- package/components/combobox.js +9 -10
- package/components/command-menu.d.ts +6 -2
- package/components/command-menu.js +5 -6
- package/components/context-menu.d.ts +12 -5
- package/components/context-menu.js +5 -6
- package/components/cookie-consent.js +3 -5
- package/components/date-picker.d.ts +26 -14
- package/components/date-picker.js +8 -9
- package/components/decision-card.js +6 -7
- package/components/dialog.d.ts +5 -2
- package/components/dialog.js +4 -5
- package/components/donut-chart.js +10 -11
- package/components/dot.js +2 -4
- package/components/dropdown.d.ts +6 -1
- package/components/dropdown.js +4 -5
- package/components/empty-state.js +2 -4
- package/components/file-upload.js +6 -7
- package/components/floating.js +1 -3
- package/components/form-field.js +2 -4
- package/components/hover-card.d.ts +5 -2
- package/components/hover-card.js +2 -4
- package/components/input-otp.d.ts +4 -2
- package/components/input-otp.js +7 -8
- package/components/input.js +3 -5
- package/components/kbd.js +2 -4
- package/components/labels.d.ts +79 -0
- package/components/labels.js +1 -0
- package/components/line-chart.js +11 -12
- package/components/message-actions.js +4 -5
- package/components/message.js +7 -8
- package/components/number-input.d.ts +4 -2
- package/components/number-input.js +7 -8
- package/components/pagination.js +4 -6
- package/components/popover.d.ts +11 -5
- package/components/popover.js +3 -4
- package/components/progress.js +2 -4
- package/components/prompt-bar.js +5 -6
- package/components/radio.js +2 -4
- package/components/search-bar.js +3 -5
- package/components/segmented-control.d.ts +4 -2
- package/components/segmented-control.js +3 -5
- package/components/select.d.ts +10 -2
- package/components/select.js +6 -7
- package/components/sheet.d.ts +4 -2
- package/components/sheet.js +5 -6
- package/components/sidebar.js +2 -4
- package/components/skeleton.js +2 -4
- package/components/slider.d.ts +6 -2
- package/components/slider.js +7 -8
- package/components/sliding-indicator.js +1 -3
- package/components/streaming-text.js +2 -4
- package/components/switch.js +2 -4
- package/components/table.d.ts +16 -5
- package/components/table.js +4 -5
- package/components/tabs.d.ts +4 -2
- package/components/tabs.js +3 -5
- package/components/textarea.js +3 -5
- package/components/thinking.js +3 -5
- package/components/toast.js +4 -5
- package/components/toggle.js +2 -4
- package/components/tooltip.d.ts +5 -2
- package/components/tooltip.js +3 -5
- package/index.d.ts +1 -0
- package/index.js +67 -231
- package/lib/utils.d.ts +8 -1
- package/lib/utils.js +1 -3
- package/package.json +11 -1
- package/styles.css +1 -1
- package/theme/create-theme.d.ts +6 -2
- package/theme/index.js +1 -0
- package/chunk-2HKBZFIK.js.map +0 -1
- package/chunk-3DINAQLL.js.map +0 -1
- package/chunk-3ERGAHKA.js +0 -179
- package/chunk-3ERGAHKA.js.map +0 -1
- package/chunk-6C7CGJX2.js +0 -86
- package/chunk-6C7CGJX2.js.map +0 -1
- package/chunk-6QMSWITQ.js.map +0 -1
- package/chunk-6YXUBP27.js.map +0 -1
- package/chunk-72OCFAPT.js.map +0 -1
- package/chunk-7TXHCRAG.js.map +0 -1
- package/chunk-A5XEM3GF.js.map +0 -1
- package/chunk-AN2RNJLR.js.map +0 -1
- package/chunk-B2K45IUR.js.map +0 -1
- package/chunk-B6V4VSGH.js.map +0 -1
- package/chunk-BKZBWPUH.js.map +0 -1
- package/chunk-BNTPPZCK.js.map +0 -1
- package/chunk-BNZVTLHV.js.map +0 -1
- package/chunk-CL2II6BX.js.map +0 -1
- package/chunk-D7RZNTFC.js +0 -95
- package/chunk-D7RZNTFC.js.map +0 -1
- package/chunk-DETGJAIC.js +0 -147
- package/chunk-DETGJAIC.js.map +0 -1
- package/chunk-DO3TBNSC.js.map +0 -1
- package/chunk-ESC5JCVQ.js +0 -90
- package/chunk-ESC5JCVQ.js.map +0 -1
- package/chunk-FDKIX4DC.js.map +0 -1
- package/chunk-GICKPMJU.js.map +0 -1
- package/chunk-GQA24FYG.js +0 -57
- package/chunk-GQA24FYG.js.map +0 -1
- package/chunk-H4NU7NPO.js.map +0 -1
- package/chunk-H63FYCMY.js +0 -11
- package/chunk-H63FYCMY.js.map +0 -1
- package/chunk-HL42K2NH.js.map +0 -1
- package/chunk-HNQUX43Z.js +0 -109
- package/chunk-HNQUX43Z.js.map +0 -1
- package/chunk-HRKPV66B.js +0 -32
- package/chunk-HRKPV66B.js.map +0 -1
- package/chunk-J3NSDRVH.js.map +0 -1
- package/chunk-JPNWHWAQ.js.map +0 -1
- package/chunk-KNUWZNFV.js.map +0 -1
- package/chunk-L6NCCSIP.js.map +0 -1
- package/chunk-LLHTVIM3.js.map +0 -1
- package/chunk-LW3TRU5W.js.map +0 -1
- package/chunk-LZMKSFCF.js.map +0 -1
- package/chunk-MR3JDI7E.js +0 -122
- package/chunk-MR3JDI7E.js.map +0 -1
- package/chunk-MYEZXZZC.js.map +0 -1
- package/chunk-NN6PKJWS.js.map +0 -1
- package/chunk-NSRTTYQ4.js.map +0 -1
- package/chunk-O7F3CIDV.js.map +0 -1
- package/chunk-P4O6TGDR.js.map +0 -1
- package/chunk-PF3YBUKT.js.map +0 -1
- package/chunk-PVOLDO4G.js +0 -47
- package/chunk-PVOLDO4G.js.map +0 -1
- package/chunk-QS4N4MNP.js.map +0 -1
- package/chunk-QUF2IPOZ.js.map +0 -1
- package/chunk-RTJ76X5U.js.map +0 -1
- package/chunk-SH6NG6VN.js.map +0 -1
- package/chunk-SHDFUXYV.js.map +0 -1
- package/chunk-TKO44NDI.js +0 -84
- package/chunk-TKO44NDI.js.map +0 -1
- package/chunk-TX3H3QMA.js.map +0 -1
- package/chunk-UBNHSZSE.js.map +0 -1
- package/chunk-UC3ZJWOD.js +0 -73
- package/chunk-UC3ZJWOD.js.map +0 -1
- package/chunk-UGRSWP6U.js.map +0 -1
- package/chunk-VAGIAREV.js.map +0 -1
- package/chunk-WTMZT3IT.js +0 -105
- package/chunk-WTMZT3IT.js.map +0 -1
- package/chunk-WX6BP5ZP.js +0 -39
- package/chunk-WX6BP5ZP.js.map +0 -1
- package/chunk-X3PQANZO.js.map +0 -1
- package/chunk-XILQ7GXE.js.map +0 -1
- package/chunk-XL75JRUA.js.map +0 -1
- package/chunk-XZNHT6MO.js.map +0 -1
- package/chunk-Y5AYU7PK.js.map +0 -1
- package/chunk-YG7JOOLJ.js.map +0 -1
- package/chunk-YPJYW624.js +0 -195
- package/chunk-YPJYW624.js.map +0 -1
- package/chunk-YPNKBE5X.js.map +0 -1
- package/chunk-YX5VNRJX.js.map +0 -1
- package/components/accordion.js.map +0 -1
- package/components/agent-loading.js.map +0 -1
- package/components/agent-picker.js.map +0 -1
- package/components/agent-suggestion.js.map +0 -1
- package/components/announcement-bar.js.map +0 -1
- package/components/attachment.js.map +0 -1
- package/components/avatar.js.map +0 -1
- package/components/badge.js.map +0 -1
- package/components/banner-mesh.js.map +0 -1
- package/components/banner.js.map +0 -1
- package/components/bar-chart.js.map +0 -1
- package/components/breadcrumb.js.map +0 -1
- package/components/button.js.map +0 -1
- package/components/card.js.map +0 -1
- package/components/channel-chart.js.map +0 -1
- package/components/chart.js.map +0 -1
- package/components/checkbox.js.map +0 -1
- package/components/chip.js.map +0 -1
- package/components/citations.js.map +0 -1
- package/components/code-block.js.map +0 -1
- package/components/combobox.js.map +0 -1
- package/components/command-menu.js.map +0 -1
- package/components/context-menu.js.map +0 -1
- package/components/cookie-consent.js.map +0 -1
- package/components/date-picker.js.map +0 -1
- package/components/decision-card.js.map +0 -1
- package/components/dialog.js.map +0 -1
- package/components/donut-chart.js.map +0 -1
- package/components/dot.js.map +0 -1
- package/components/dropdown.js.map +0 -1
- package/components/empty-state.js.map +0 -1
- package/components/file-upload.js.map +0 -1
- package/components/floating.js.map +0 -1
- package/components/form-field.js.map +0 -1
- package/components/hover-card.js.map +0 -1
- package/components/input-otp.js.map +0 -1
- package/components/input.js.map +0 -1
- package/components/kbd.js.map +0 -1
- package/components/line-chart.js.map +0 -1
- package/components/message-actions.js.map +0 -1
- package/components/message.js.map +0 -1
- package/components/number-input.js.map +0 -1
- package/components/pagination.js.map +0 -1
- package/components/popover.js.map +0 -1
- package/components/progress.js.map +0 -1
- package/components/prompt-bar.js.map +0 -1
- package/components/radio.js.map +0 -1
- package/components/search-bar.js.map +0 -1
- package/components/segmented-control.js.map +0 -1
- package/components/select.js.map +0 -1
- package/components/sheet.js.map +0 -1
- package/components/sidebar.js.map +0 -1
- package/components/skeleton.js.map +0 -1
- package/components/slider.js.map +0 -1
- package/components/sliding-indicator.js.map +0 -1
- package/components/streaming-text.js.map +0 -1
- package/components/switch.js.map +0 -1
- package/components/table.js.map +0 -1
- package/components/tabs.js.map +0 -1
- package/components/textarea.js.map +0 -1
- package/components/thinking.js.map +0 -1
- package/components/toast.js.map +0 -1
- package/components/toggle.js.map +0 -1
- package/components/tooltip.js.map +0 -1
- package/index.js.map +0 -1
- package/lib/utils.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Chip } from './chunk-
|
|
2
|
-
import { useFieldChrome, FieldChrome, SelectChevron } from './chunk-
|
|
3
|
-
import { MenuItemContent, menuItemClass, menuSurfaceClass } from './chunk-
|
|
4
|
-
import { Button } from './chunk-
|
|
5
|
-
import {
|
|
1
|
+
import { Chip } from './chunk-Z7S2KQZS.js';
|
|
2
|
+
import { useFieldChrome, FieldChrome, SelectChevron } from './chunk-UCCNXGLG.js';
|
|
3
|
+
import { MenuItemContent, menuItemClass, menuSurfaceClass } from './chunk-BR2B4OIT.js';
|
|
4
|
+
import { Button } from './chunk-T6L32XXH.js';
|
|
5
|
+
import { useSatinLabels } from './chunk-SSOFFQ5T.js';
|
|
6
|
+
import { cn } from './chunk-O46O6LFQ.js';
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
import { Popover } from 'radix-ui';
|
|
8
9
|
import { Search } from 'iconoir-react';
|
|
@@ -20,12 +21,12 @@ function Combobox({
|
|
|
20
21
|
onValueChange,
|
|
21
22
|
multiple = false,
|
|
22
23
|
footer = false,
|
|
23
|
-
placeholder
|
|
24
|
-
searchPlaceholder
|
|
25
|
-
emptyText
|
|
26
|
-
applyLabel
|
|
27
|
-
cancelLabel
|
|
28
|
-
clearLabel
|
|
24
|
+
placeholder: placeholderProp,
|
|
25
|
+
searchPlaceholder: searchPlaceholderProp,
|
|
26
|
+
emptyText: emptyTextProp,
|
|
27
|
+
applyLabel: applyLabelProp,
|
|
28
|
+
cancelLabel: cancelLabelProp,
|
|
29
|
+
clearLabel: clearLabelProp,
|
|
29
30
|
label,
|
|
30
31
|
hint,
|
|
31
32
|
error,
|
|
@@ -41,9 +42,17 @@ function Combobox({
|
|
|
41
42
|
onInteractOutside,
|
|
42
43
|
wrapperClassName,
|
|
43
44
|
className,
|
|
45
|
+
"aria-describedby": describedBy,
|
|
44
46
|
...props
|
|
45
47
|
}) {
|
|
46
48
|
const chrome = useFieldChrome({ id, disabled, error, hint });
|
|
49
|
+
const labels = useSatinLabels();
|
|
50
|
+
const placeholder = placeholderProp ?? labels.select;
|
|
51
|
+
const searchPlaceholder = searchPlaceholderProp ?? labels.search;
|
|
52
|
+
const emptyText = emptyTextProp ?? labels.noResults;
|
|
53
|
+
const applyLabel = applyLabelProp ?? labels.apply;
|
|
54
|
+
const cancelLabel = cancelLabelProp ?? labels.cancel;
|
|
55
|
+
const clearLabel = clearLabelProp ?? labels.clear;
|
|
47
56
|
const listId = `${chrome.controlId}-list`;
|
|
48
57
|
const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
|
|
49
58
|
const applied = value ?? uncontrolledValue;
|
|
@@ -100,51 +109,51 @@ function Combobox({
|
|
|
100
109
|
"data-invalid": chrome.invalid || void 0,
|
|
101
110
|
"data-disabled": chrome.disabled || void 0,
|
|
102
111
|
"data-state": open ? "open" : "closed",
|
|
103
|
-
className: cn("satin-field satin-select satin-combobox relative", className),
|
|
112
|
+
className: cn("satin-field satin-select satin-combobox sa:relative", className),
|
|
104
113
|
children: [
|
|
105
114
|
/* @__PURE__ */ jsx(
|
|
106
115
|
Popover.Trigger,
|
|
107
116
|
{
|
|
117
|
+
...props,
|
|
108
118
|
id: chrome.controlId,
|
|
109
119
|
"data-slot": "combobox-trigger",
|
|
110
120
|
disabled: chrome.disabled,
|
|
111
121
|
"aria-invalid": chrome.invalid || void 0,
|
|
112
|
-
"aria-describedby": chrome.describedBy,
|
|
113
|
-
"aria-label": props["aria-label"],
|
|
122
|
+
"aria-describedby": [describedBy, chrome.describedBy].filter(Boolean).join(" ") || void 0,
|
|
114
123
|
"aria-haspopup": "listbox",
|
|
115
|
-
className: "absolute inset-0 cursor-pointer rounded-[inherit] outline-none focus-visible:ring-0 disabled:cursor-not-allowed",
|
|
116
|
-
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: chosen.length ? chosen.map((o) => o.label).join(", ") : placeholder })
|
|
124
|
+
className: "sa:absolute sa:inset-0 sa:cursor-pointer sa:rounded-[inherit] sa:outline-none sa:focus-visible:ring-0 sa:disabled:cursor-not-allowed",
|
|
125
|
+
children: /* @__PURE__ */ jsx("span", { className: "sa:sr-only", children: chosen.length ? chosen.map((o) => o.label).join(", ") : placeholder })
|
|
117
126
|
}
|
|
118
127
|
),
|
|
119
|
-
lead && /* @__PURE__ */ jsx("span", { className: "satin-field-icon satin-combobox-icon pointer-events-none", "aria-hidden": true, children: lead }),
|
|
120
|
-
/* @__PURE__ */ jsxs("div", { className: "pointer-events-none flex min-w-0 flex-1 flex-wrap items-center gap-1
|
|
128
|
+
lead && /* @__PURE__ */ jsx("span", { className: "satin-field-icon satin-combobox-icon sa:pointer-events-none", "aria-hidden": true, children: lead }),
|
|
129
|
+
/* @__PURE__ */ jsxs("div", { className: "sa:pointer-events-none sa:flex sa:min-w-0 sa:flex-1 sa:flex-wrap sa:items-center sa:gap-1 sa:*:pointer-events-auto", children: [
|
|
121
130
|
chips && chosen.map((o) => /* @__PURE__ */ jsx(
|
|
122
131
|
Chip,
|
|
123
132
|
{
|
|
124
133
|
size: "sm",
|
|
125
134
|
variant: "outline",
|
|
126
135
|
disabled: chrome.disabled,
|
|
127
|
-
removeLabel:
|
|
136
|
+
removeLabel: `${labels.remove} ${o.label}`,
|
|
128
137
|
onRemove: () => commit(applied.filter((v) => v !== o.value)),
|
|
129
|
-
className: "relative",
|
|
138
|
+
className: "sa:relative",
|
|
130
139
|
children: o.label
|
|
131
140
|
},
|
|
132
141
|
o.value
|
|
133
142
|
)),
|
|
134
|
-
triggerText && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("pointer-events-none! min-w-0 flex-1 truncate", chosen.length ? "text-text-default" : "text-text-muted"), children: triggerText }),
|
|
143
|
+
triggerText && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("sa:pointer-events-none! sa:min-w-0 sa:flex-1 sa:truncate", chosen.length ? "sa:text-text-default" : "sa:text-text-muted"), children: triggerText }),
|
|
135
144
|
!label && chips && chosen.length > 1 && /* @__PURE__ */ jsx(
|
|
136
145
|
Button,
|
|
137
146
|
{
|
|
138
147
|
variant: "tertiary",
|
|
139
148
|
size: "xs",
|
|
140
149
|
disabled: chrome.disabled,
|
|
141
|
-
className: "relative ml-auto",
|
|
150
|
+
className: "sa:relative sa:ml-auto",
|
|
142
151
|
onClick: () => commit([]),
|
|
143
152
|
children: clearLabel
|
|
144
153
|
}
|
|
145
154
|
)
|
|
146
155
|
] }),
|
|
147
|
-
/* @__PURE__ */ jsx(SelectChevron, { className: "satin-combobox-icon pointer-events-none" })
|
|
156
|
+
/* @__PURE__ */ jsx(SelectChevron, { className: "satin-combobox-icon sa:pointer-events-none" })
|
|
148
157
|
]
|
|
149
158
|
}
|
|
150
159
|
) }),
|
|
@@ -159,14 +168,14 @@ function Combobox({
|
|
|
159
168
|
onOpenAutoFocus,
|
|
160
169
|
onInteractOutside,
|
|
161
170
|
className: cn(
|
|
162
|
-
"pointer-events-auto z-50 flex w-(--radix-popover-trigger-width) min-w-60 max-w-[520px] flex-col overflow-hidden",
|
|
171
|
+
"sa:pointer-events-auto sa:z-50 sa:flex sa:w-(--radix-popover-trigger-width) sa:min-w-60 sa:max-w-[520px] sa:flex-col sa:overflow-hidden",
|
|
163
172
|
menuSurfaceClass,
|
|
164
|
-
"origin-(--radix-popover-content-transform-origin) outline-none",
|
|
165
|
-
"data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]"
|
|
173
|
+
"sa:origin-(--radix-popover-content-transform-origin) sa:outline-none",
|
|
174
|
+
"sa:data-[state=open]:animate-[satin-enter_var(--sa-duration-base)_var(--sa-ease-out)]"
|
|
166
175
|
),
|
|
167
176
|
children: [
|
|
168
|
-
/* @__PURE__ */ jsxs("label", { className: "flex h-9 shrink-0 items-center gap-2 border-b border-border-subtle px-3 text-text-muted", children: [
|
|
169
|
-
/* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "size-4 shrink-0 [stroke-width:1.875]" }),
|
|
177
|
+
/* @__PURE__ */ jsxs("label", { className: "sa:flex sa:h-9 sa:shrink-0 sa:items-center sa:gap-2 sa:border-b sa:border-border-subtle sa:px-3 sa:text-text-muted", children: [
|
|
178
|
+
/* @__PURE__ */ jsx(Search, { "aria-hidden": true, className: "sa:size-4 sa:shrink-0 sa:[stroke-width:1.875]" }),
|
|
170
179
|
/* @__PURE__ */ jsx(
|
|
171
180
|
"input",
|
|
172
181
|
{
|
|
@@ -192,7 +201,7 @@ function Combobox({
|
|
|
192
201
|
if (!shown[active].disabled) pick(shown[active].value);
|
|
193
202
|
}
|
|
194
203
|
},
|
|
195
|
-
className: "min-w-0 flex-1 bg-transparent text-base leading-[21px] text-text-default outline-none placeholder:text-text-muted focus-visible:ring-0"
|
|
204
|
+
className: "sa:min-w-0 sa:flex-1 sa:bg-transparent sa:text-base sa:leading-[21px] sa:text-text-default sa:outline-none sa:placeholder:text-text-muted sa:focus-visible:ring-0"
|
|
196
205
|
}
|
|
197
206
|
)
|
|
198
207
|
] }),
|
|
@@ -202,8 +211,8 @@ function Combobox({
|
|
|
202
211
|
id: listId,
|
|
203
212
|
role: "listbox",
|
|
204
213
|
"aria-multiselectable": multiple || void 0,
|
|
205
|
-
className: "flex max-h-60 flex-col gap-0.5 overflow-y-auto p-1",
|
|
206
|
-
children: shown.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-3 py-6 text-center text-sm text-text-muted", children: emptyText }) : shown.map((o, i) => {
|
|
214
|
+
className: "sa:flex sa:max-h-60 sa:flex-col sa:gap-0.5 sa:overflow-y-auto sa:p-1",
|
|
215
|
+
children: shown.length === 0 ? /* @__PURE__ */ jsx("p", { className: "sa:px-3 sa:py-6 sa:text-center sa:text-sm sa:text-text-muted", children: emptyText }) : shown.map((o, i) => {
|
|
207
216
|
const picked = picks.includes(o.value);
|
|
208
217
|
return /* @__PURE__ */ jsx(
|
|
209
218
|
"div",
|
|
@@ -217,7 +226,7 @@ function Combobox({
|
|
|
217
226
|
onPointerMove: () => setActive(i),
|
|
218
227
|
onMouseDown: (e) => e.preventDefault(),
|
|
219
228
|
onClick: () => !o.disabled && pick(o.value),
|
|
220
|
-
className: cn(menuItemClass, picked && "bg-bg-selected"),
|
|
229
|
+
className: cn(menuItemClass, picked && "sa:bg-bg-selected"),
|
|
221
230
|
children: /* @__PURE__ */ jsx(
|
|
222
231
|
MenuItemContent,
|
|
223
232
|
{
|
|
@@ -235,7 +244,7 @@ function Combobox({
|
|
|
235
244
|
})
|
|
236
245
|
}
|
|
237
246
|
),
|
|
238
|
-
footer && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center justify-end gap-2 border-t border-border-subtle p-2", children: [
|
|
247
|
+
footer && /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:shrink-0 sa:items-center sa:justify-end sa:gap-2 sa:border-t sa:border-border-subtle sa:p-2", children: [
|
|
239
248
|
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setOpen(false), children: cancelLabel }),
|
|
240
249
|
/* @__PURE__ */ jsx(Button, { disabled: pending.length === 0, onClick: apply, children: applyLabel })
|
|
241
250
|
] })
|
|
@@ -248,5 +257,3 @@ function Combobox({
|
|
|
248
257
|
}
|
|
249
258
|
|
|
250
259
|
export { Combobox };
|
|
251
|
-
//# sourceMappingURL=chunk-NSRTTYQ4.js.map
|
|
252
|
-
//# sourceMappingURL=chunk-NSRTTYQ4.js.map
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useSatinLabels } from './chunk-SSOFFQ5T.js';
|
|
2
|
+
import { cn } from './chunk-O46O6LFQ.js';
|
|
2
3
|
import * as React from 'react';
|
|
3
4
|
import { Popover as Popover$1 } from 'radix-ui';
|
|
4
5
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
6
|
|
|
6
7
|
var panelClass = cn(
|
|
7
|
-
"relative flex w-[320px] max-w-[calc(100vw-16px)] flex-col overflow-clip pb-2.5",
|
|
8
|
-
"rounded-xl border border-border-default bg-bg-popover",
|
|
9
|
-
"[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]"
|
|
8
|
+
"sa:relative sa:flex sa:w-[320px] sa:max-w-[calc(100vw-16px)] sa:flex-col sa:overflow-clip sa:pb-2.5",
|
|
9
|
+
"sa:rounded-xl sa:border sa:border-border-default sa:bg-bg-popover",
|
|
10
|
+
"sa:[box-shadow:0_4px_6px_-4px_var(--effect-shadow-sm),0_10px_15px_-3px_var(--effect-shadow-sm)]"
|
|
10
11
|
);
|
|
11
12
|
var closeClass = cn(
|
|
12
|
-
"absolute top-2.5 right-2.5 grid size-4 place-items-center rounded-sm text-text-subtle",
|
|
13
|
-
"transition-colors duration-(--duration-fast) ease-(--ease-out)",
|
|
14
|
-
"satin-hover:text-text-default focus-visible:outline-none satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]"
|
|
13
|
+
"sa:absolute sa:top-2.5 sa:right-2.5 sa:grid sa:size-4 sa:place-items-center sa:rounded-sm sa:text-text-subtle",
|
|
14
|
+
"sa:transition-colors sa:duration-(--sa-duration-fast) sa:ease-(--sa-ease-out)",
|
|
15
|
+
"sa:satin-hover:text-text-default sa:focus-visible:outline-none sa:satin-focus:[box-shadow:0_0_0_2px_var(--action-focus-ring)]"
|
|
15
16
|
);
|
|
16
17
|
var closeIcon = /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx(
|
|
17
18
|
"path",
|
|
@@ -25,11 +26,11 @@ var closeIcon = /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox:
|
|
|
25
26
|
) });
|
|
26
27
|
function PanelBody({ titleId, title, description, body, closeButton }) {
|
|
27
28
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
28
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 px-2.5 pt-2.5 text-sm", children: [
|
|
29
|
-
/* @__PURE__ */ jsx("p", { id: titleId, className: cn("leading-[18px] font-medium text-text-default", closeButton && "pr-6"), children: title }),
|
|
30
|
-
description ? /* @__PURE__ */ jsx("p", { className: "text-text-muted", children: description }) : null
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "sa:flex sa:flex-col sa:gap-0.5 sa:px-2.5 sa:pt-2.5 sa:text-sm", children: [
|
|
30
|
+
/* @__PURE__ */ jsx("p", { id: titleId, className: cn("sa:leading-[18px] sa:font-medium sa:text-text-default", closeButton && "sa:pr-6"), children: title }),
|
|
31
|
+
description ? /* @__PURE__ */ jsx("p", { className: "sa:text-text-muted", children: description }) : null
|
|
31
32
|
] }),
|
|
32
|
-
body ? /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4 px-2.5 pt-4", children: body }) : null
|
|
33
|
+
body ? /* @__PURE__ */ jsx("div", { className: "sa:flex sa:flex-col sa:gap-4 sa:px-2.5 sa:pt-4", children: body }) : null
|
|
33
34
|
] });
|
|
34
35
|
}
|
|
35
36
|
function Popover({
|
|
@@ -47,31 +48,34 @@ function Popover({
|
|
|
47
48
|
container,
|
|
48
49
|
onOpenAutoFocus,
|
|
49
50
|
onInteractOutside,
|
|
50
|
-
className
|
|
51
|
+
className,
|
|
52
|
+
...props
|
|
51
53
|
}) {
|
|
54
|
+
const labels = useSatinLabels();
|
|
52
55
|
const titleId = React.useId();
|
|
53
56
|
return /* @__PURE__ */ jsxs(Popover$1.Root, { open, defaultOpen, onOpenChange, children: [
|
|
54
57
|
children && /* @__PURE__ */ jsx(Popover$1.Trigger, { asChild: true, children }),
|
|
55
58
|
/* @__PURE__ */ jsx(Popover$1.Portal, { container, children: /* @__PURE__ */ jsxs(
|
|
56
59
|
Popover$1.Content,
|
|
57
60
|
{
|
|
61
|
+
collisionPadding: 8,
|
|
62
|
+
...props,
|
|
58
63
|
"data-slot": "popover",
|
|
59
64
|
"aria-labelledby": titleId,
|
|
60
65
|
side,
|
|
61
66
|
align,
|
|
62
67
|
sideOffset,
|
|
63
|
-
collisionPadding: 8,
|
|
64
68
|
onOpenAutoFocus,
|
|
65
69
|
onInteractOutside,
|
|
66
70
|
className: cn(
|
|
67
71
|
panelClass,
|
|
68
|
-
"pointer-events-auto z-50 origin-(--radix-popover-content-transform-origin) focus-visible:outline-none",
|
|
69
|
-
"data-[state=open]:animate-[satin-enter_var(--duration-base)_var(--ease-out)]",
|
|
72
|
+
"sa:pointer-events-auto sa:z-50 sa:origin-(--radix-popover-content-transform-origin) sa:focus-visible:outline-none",
|
|
73
|
+
"sa:data-[state=open]:animate-[satin-enter_var(--sa-duration-base)_var(--sa-ease-out)]",
|
|
70
74
|
className
|
|
71
75
|
),
|
|
72
76
|
children: [
|
|
73
77
|
/* @__PURE__ */ jsx(PanelBody, { titleId, title, description, body, closeButton }),
|
|
74
|
-
closeButton && /* @__PURE__ */ jsx(Popover$1.Close, { "aria-label":
|
|
78
|
+
closeButton && /* @__PURE__ */ jsx(Popover$1.Close, { "aria-label": labels.close, className: closeClass, children: closeIcon })
|
|
75
79
|
]
|
|
76
80
|
}
|
|
77
81
|
) })
|
|
@@ -83,16 +87,16 @@ function PopoverPanel({
|
|
|
83
87
|
body,
|
|
84
88
|
closeButton = true,
|
|
85
89
|
onClose,
|
|
86
|
-
className
|
|
90
|
+
className,
|
|
91
|
+
...props
|
|
87
92
|
}) {
|
|
93
|
+
const labels = useSatinLabels();
|
|
88
94
|
const titleId = React.useId();
|
|
89
|
-
return /* @__PURE__ */ jsxs("div", { role: "dialog", "aria-labelledby": titleId, "data-slot": "popover", className: cn(panelClass, className), children: [
|
|
95
|
+
return /* @__PURE__ */ jsxs("div", { ...props, role: "dialog", "aria-labelledby": titleId, "data-slot": "popover", className: cn(panelClass, className), children: [
|
|
90
96
|
/* @__PURE__ */ jsx(PanelBody, { titleId, title, description, body, closeButton }),
|
|
91
|
-
closeButton && /* @__PURE__ */ jsx("button", { type: "button", "aria-label":
|
|
97
|
+
closeButton && /* @__PURE__ */ jsx("button", { type: "button", "aria-label": labels.close, onClick: onClose, className: closeClass, children: closeIcon })
|
|
92
98
|
] });
|
|
93
99
|
}
|
|
94
100
|
var PopoverClose = Popover$1.Close;
|
|
95
101
|
|
|
96
102
|
export { Popover, PopoverClose, PopoverPanel };
|
|
97
|
-
//# sourceMappingURL=chunk-BNZVTLHV.js.map
|
|
98
|
-
//# sourceMappingURL=chunk-BNZVTLHV.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
1
|
+
import { cn } from './chunk-O46O6LFQ.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
|
|
@@ -18,10 +18,10 @@ function Progress({
|
|
|
18
18
|
const known = value != null;
|
|
19
19
|
const v = known ? Math.min(max, Math.max(0, value)) : 0;
|
|
20
20
|
const text = known ? formatValue(v, max) : void 0;
|
|
21
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot": "progress", "data-size": size, className: cn("flex w-full flex-col gap-2", className), ...props, children: [
|
|
22
|
-
(label || showValue && known) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 text-sm leading-5", children: [
|
|
23
|
-
label ? /* @__PURE__ */ jsx("span", { id: labelId, className: "min-w-0 truncate font-medium text-text-default", children: label }) : /* @__PURE__ */ jsx("span", {}),
|
|
24
|
-
showValue && known && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "shrink-0 text-text-muted tabular-nums", children: text })
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", { "data-slot": "progress", "data-size": size, className: cn("sa:flex sa:w-full sa:flex-col sa:gap-2", className), ...props, children: [
|
|
22
|
+
(label || showValue && known) && /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:items-center sa:justify-between sa:gap-3 sa:text-sm sa:leading-5", children: [
|
|
23
|
+
label ? /* @__PURE__ */ jsx("span", { id: labelId, className: "sa:min-w-0 sa:truncate sa:font-medium sa:text-text-default", children: label }) : /* @__PURE__ */ jsx("span", {}),
|
|
24
|
+
showValue && known && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "sa:shrink-0 sa:text-text-muted sa:tabular-nums", children: text })
|
|
25
25
|
] }),
|
|
26
26
|
/* @__PURE__ */ jsx(
|
|
27
27
|
"div",
|
|
@@ -33,19 +33,17 @@ function Progress({
|
|
|
33
33
|
"aria-valuemax": max,
|
|
34
34
|
"aria-valuenow": known ? v : void 0,
|
|
35
35
|
"aria-valuetext": text,
|
|
36
|
-
className: cn("relative w-full overflow-hidden rounded-full bg-bg-muted", size === "md" ? "h-2" : "h-1"),
|
|
36
|
+
className: cn("sa:relative sa:w-full sa:overflow-hidden sa:rounded-full sa:bg-bg-muted", size === "md" ? "sa:h-2" : "sa:h-1"),
|
|
37
37
|
children: known ? /* @__PURE__ */ jsx(
|
|
38
38
|
"div",
|
|
39
39
|
{
|
|
40
|
-
className: "h-full rounded-full bg-action-primary-bg transition-[width] duration-300 ease-(--ease-out)",
|
|
40
|
+
className: "sa:h-full sa:rounded-full sa:bg-action-primary-bg sa:transition-[width] sa:duration-300 sa:ease-(--sa-ease-out)",
|
|
41
41
|
style: { width: `${v / max * 100}%` }
|
|
42
42
|
}
|
|
43
|
-
) : /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 left-0 w-1/3 rounded-full bg-action-primary-bg animate-[satin-progress-indeterminate_1.4s_var(--ease-in-out)_infinite]" })
|
|
43
|
+
) : /* @__PURE__ */ jsx("div", { className: "sa:absolute sa:inset-y-0 sa:left-0 sa:w-1/3 sa:rounded-full sa:bg-action-primary-bg sa:animate-[satin-progress-indeterminate_1.4s_var(--sa-ease-in-out)_infinite]" })
|
|
44
44
|
}
|
|
45
45
|
)
|
|
46
46
|
] });
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
export { Progress };
|
|
50
|
-
//# sourceMappingURL=chunk-7TXHCRAG.js.map
|
|
51
|
-
//# sourceMappingURL=chunk-7TXHCRAG.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cn } from './chunk-
|
|
1
|
+
import { cn } from './chunk-O46O6LFQ.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { Switch as Switch$1 } from 'radix-ui';
|
|
4
4
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -13,7 +13,7 @@ function Switch({ className, label, description, placement = "left", id, ...prop
|
|
|
13
13
|
id: switchId,
|
|
14
14
|
"data-slot": "switch",
|
|
15
15
|
"aria-describedby": descriptionId,
|
|
16
|
-
className: cn("peer satin-switch", className),
|
|
16
|
+
className: cn("sa:peer satin-switch", className),
|
|
17
17
|
...props,
|
|
18
18
|
children: /* @__PURE__ */ jsx(Switch$1.Thumb, { className: "satin-switch-thumb" })
|
|
19
19
|
}
|
|
@@ -23,12 +23,12 @@ function Switch({ className, label, description, placement = "left", id, ...prop
|
|
|
23
23
|
"div",
|
|
24
24
|
{
|
|
25
25
|
"data-slot": "switch-field",
|
|
26
|
-
className: cn("flex items-start gap-2.5", placement === "right" && "flex-row-reverse justify-between"),
|
|
26
|
+
className: cn("sa:flex sa:items-start sa:gap-2.5", placement === "right" && "sa:flex-row-reverse sa:justify-between"),
|
|
27
27
|
children: [
|
|
28
28
|
control,
|
|
29
|
-
/* @__PURE__ */ jsxs("div", { className: "grid gap-0.5 text-sm leading-[19.5px] peer-disabled:opacity-50", children: [
|
|
30
|
-
label && /* @__PURE__ */ jsx("label", { htmlFor: switchId, className: "font-medium text-text-default", children: label }),
|
|
31
|
-
description && /* @__PURE__ */ jsx("p", { id: descriptionId, className: "text-text-muted", children: description })
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "sa:grid sa:gap-0.5 sa:text-sm sa:leading-[19.5px] sa:peer-disabled:opacity-50", children: [
|
|
30
|
+
label && /* @__PURE__ */ jsx("label", { htmlFor: switchId, className: "sa:font-medium sa:text-text-default", children: label }),
|
|
31
|
+
description && /* @__PURE__ */ jsx("p", { id: descriptionId, className: "sa:text-text-muted", children: description })
|
|
32
32
|
] })
|
|
33
33
|
]
|
|
34
34
|
}
|
|
@@ -36,5 +36,3 @@ function Switch({ className, label, description, placement = "left", id, ...prop
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export { Switch };
|
|
39
|
-
//# sourceMappingURL=chunk-SH6NG6VN.js.map
|
|
40
|
-
//# sourceMappingURL=chunk-SH6NG6VN.js.map
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { FlappySprite, TetrisStill } from './chunk-UGIVCXGN.js';
|
|
2
|
+
import { cn } from './chunk-O46O6LFQ.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { NavArrowDown, Check, EditPencil } from 'iconoir-react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
function Thinking({
|
|
8
|
+
state = "collapsed",
|
|
9
|
+
label = "Thought",
|
|
10
|
+
steps = [],
|
|
11
|
+
indicator = "tetris",
|
|
12
|
+
onToggle,
|
|
13
|
+
className,
|
|
14
|
+
...props
|
|
15
|
+
}) {
|
|
16
|
+
const [open, setOpen] = React.useState(state === "expanded");
|
|
17
|
+
React.useEffect(() => setOpen(state === "expanded"), [state]);
|
|
18
|
+
const bodyId = `${React.useId()}-steps`;
|
|
19
|
+
return /* @__PURE__ */ jsxs("div", { "data-slot": "thinking", "data-state": open ? "expanded" : "collapsed", className: cn("sa:w-full", className), ...props, children: [
|
|
20
|
+
/* @__PURE__ */ jsxs(
|
|
21
|
+
"button",
|
|
22
|
+
{
|
|
23
|
+
type: "button",
|
|
24
|
+
"aria-expanded": open,
|
|
25
|
+
"aria-controls": bodyId,
|
|
26
|
+
onClick: () => {
|
|
27
|
+
setOpen(!open);
|
|
28
|
+
onToggle?.(!open);
|
|
29
|
+
},
|
|
30
|
+
className: "sa:group sa:flex sa:w-fit sa:cursor-pointer sa:items-center sa:gap-3 sa:rounded-md sa:p-1 sa:outline-none sa:select-none sa:focus-visible:[box-shadow:0_0_0_2px_var(--action-focus-ring)]",
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsx(ThinkingMark, { indicator }),
|
|
33
|
+
/* @__PURE__ */ jsx("span", { className: "sa:text-sm sa:whitespace-nowrap sa:text-text-muted", children: label }),
|
|
34
|
+
/* @__PURE__ */ jsx(
|
|
35
|
+
NavArrowDown,
|
|
36
|
+
{
|
|
37
|
+
"aria-hidden": true,
|
|
38
|
+
className: cn(
|
|
39
|
+
"sa:size-icon-size-sm sa:shrink-0 sa:text-text-muted sa:transition-transform sa:duration-(--sa-duration-base) sa:ease-(--sa-ease-out) sa:[stroke-width:1.875]",
|
|
40
|
+
open && "sa:rotate-180"
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
),
|
|
47
|
+
/* @__PURE__ */ jsx("div", { id: bodyId, "data-state": open ? "open" : "closed", className: "satin-expand", children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:gap-3 sa:pt-2 sa:pl-1", children: [
|
|
48
|
+
/* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "sa:relative sa:w-4 sa:shrink-0 sa:self-stretch", children: /* @__PURE__ */ jsx("div", { className: "sa:absolute sa:inset-y-0 sa:left-1/2 sa:w-px sa:-translate-x-1/2 sa:bg-linear-to-b sa:from-component-rail-edge sa:via-component-rail-center sa:to-component-rail-edge" }) }),
|
|
49
|
+
/* @__PURE__ */ jsx("ol", { className: "sa:flex sa:min-w-0 sa:flex-1 sa:flex-col sa:gap-2", children: steps.map((step, i) => /* @__PURE__ */ jsx("li", { className: "sa:min-w-0", children: /* @__PURE__ */ jsx(Step, { step }) }, i)) })
|
|
50
|
+
] }) }) })
|
|
51
|
+
] });
|
|
52
|
+
}
|
|
53
|
+
function Step({ step }) {
|
|
54
|
+
switch (step.type) {
|
|
55
|
+
case "text":
|
|
56
|
+
return /* @__PURE__ */ jsx("p", { className: "sa:text-body sa:text-text-muted", children: step.text });
|
|
57
|
+
case "more":
|
|
58
|
+
return /* @__PURE__ */ jsx("p", { className: "sa:text-sm sa:whitespace-nowrap sa:text-text-muted", children: step.label });
|
|
59
|
+
case "source":
|
|
60
|
+
return /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-w-0 sa:items-center sa:gap-3 sa:p-1 sa:text-sm", children: [
|
|
61
|
+
/* @__PURE__ */ jsx("span", { className: "sa:flex sa:size-4 sa:shrink-0 sa:items-center sa:justify-center sa:overflow-clip sa:rounded-xs sa:[&>*]:size-4", children: step.icon }),
|
|
62
|
+
/* @__PURE__ */ jsx("span", { className: "sa:max-w-full sa:shrink-0 sa:truncate sa:text-text-default", children: step.label }),
|
|
63
|
+
step.meta != null && /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:text-text-muted", children: step.meta })
|
|
64
|
+
] });
|
|
65
|
+
case "tool":
|
|
66
|
+
return /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-w-0 sa:items-center sa:gap-2 sa:p-1 sa:text-sm sa:[&>svg]:size-icon-size sa:[&>svg]:shrink-0 sa:[&>svg]:text-text-muted sa:[&>svg]:[stroke-width:1.875]", children: [
|
|
67
|
+
step.icon ?? /* @__PURE__ */ jsx(EditPencil, {}),
|
|
68
|
+
/* @__PURE__ */ jsx("span", { className: "sa:shrink-0 sa:whitespace-nowrap sa:text-text-default", children: step.label }),
|
|
69
|
+
/* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:font-mono sa:tracking-normal sa:text-text-muted", children: step.target }),
|
|
70
|
+
(step.added != null || step.removed != null) && /* @__PURE__ */ jsxs("span", { className: "sa:flex sa:shrink-0 sa:gap-1.5 sa:font-mono sa:tracking-normal sa:whitespace-nowrap", children: [
|
|
71
|
+
step.added != null && /* @__PURE__ */ jsx("span", { className: "sa:text-status-green-fg", children: step.added }),
|
|
72
|
+
step.removed != null && /* @__PURE__ */ jsx("span", { className: "sa:text-status-red-fg", children: step.removed })
|
|
73
|
+
] }),
|
|
74
|
+
step.meta != null && /* @__PURE__ */ jsx("span", { className: "sa:shrink-0 sa:whitespace-nowrap sa:text-text-muted", children: step.meta })
|
|
75
|
+
] });
|
|
76
|
+
default:
|
|
77
|
+
return /* @__PURE__ */ jsxs("div", { className: "sa:flex sa:min-w-0 sa:items-center sa:gap-3 sa:p-1 sa:text-sm", children: [
|
|
78
|
+
/* @__PURE__ */ jsx(Check, { "aria-hidden": true, className: "sa:size-icon-size-sm sa:shrink-0 sa:text-status-green-fg sa:[stroke-width:1.875]" }),
|
|
79
|
+
/* @__PURE__ */ jsx("span", { className: "sa:max-w-full sa:shrink-0 sa:truncate sa:text-text-default", children: step.label }),
|
|
80
|
+
step.meta != null && /* @__PURE__ */ jsx("span", { className: "sa:min-w-0 sa:flex-1 sa:truncate sa:text-text-muted", children: step.meta })
|
|
81
|
+
] });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function ThinkingMark({ indicator }) {
|
|
85
|
+
return indicator === "flappy" ? /* @__PURE__ */ jsx(FlappySprite, { size: 16, run: false }) : /* @__PURE__ */ jsx(TetrisStill, {});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { Thinking };
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// src/theme/create-theme.ts
|
|
2
|
+
var defaultTheme = { brand: "#4633D7", radius: 1 };
|
|
3
|
+
var toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
4
|
+
var toGamma = (c) => c <= 31308e-7 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055;
|
|
5
|
+
function hexToRgb(hex) {
|
|
6
|
+
const h = hex.replace("#", "");
|
|
7
|
+
const full = h.length === 3 ? [...h].map((c) => c + c).join("") : h.slice(0, 6);
|
|
8
|
+
return [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16) / 255);
|
|
9
|
+
}
|
|
10
|
+
function rgbToOklch([r, g, b]) {
|
|
11
|
+
const [lr, lg, lb] = [r, g, b].map(toLinear);
|
|
12
|
+
const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);
|
|
13
|
+
const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);
|
|
14
|
+
const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);
|
|
15
|
+
const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s;
|
|
16
|
+
const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;
|
|
17
|
+
const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;
|
|
18
|
+
return [L, Math.hypot(A, B), (Math.atan2(B, A) * 180 / Math.PI + 360) % 360];
|
|
19
|
+
}
|
|
20
|
+
function oklchToRgb([L, C, H]) {
|
|
21
|
+
const a = C * Math.cos(H * Math.PI / 180);
|
|
22
|
+
const b = C * Math.sin(H * Math.PI / 180);
|
|
23
|
+
const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;
|
|
24
|
+
const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;
|
|
25
|
+
const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;
|
|
26
|
+
return [
|
|
27
|
+
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
|
|
28
|
+
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
|
|
29
|
+
-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
var inGamut = (rgb) => rgb.every((c) => c >= -5e-4 && c <= 1.0005);
|
|
33
|
+
function oklchToHex([L, C, H]) {
|
|
34
|
+
let c = C;
|
|
35
|
+
let rgb = oklchToRgb([L, c, H]);
|
|
36
|
+
while (!inGamut(rgb) && c > 0) {
|
|
37
|
+
c = Math.max(0, c - 5e-3);
|
|
38
|
+
rgb = oklchToRgb([L, c, H]);
|
|
39
|
+
}
|
|
40
|
+
return "#" + rgb.map((v) => Math.round(Math.min(1, Math.max(0, toGamma(v))) * 255).toString(16).padStart(2, "0")).join("").toUpperCase();
|
|
41
|
+
}
|
|
42
|
+
var luminance = (hex) => {
|
|
43
|
+
const [r, g, b] = hexToRgb(hex).map(toLinear);
|
|
44
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
45
|
+
};
|
|
46
|
+
var contrast = (a, b) => {
|
|
47
|
+
const [x, y] = [luminance(a), luminance(b)].sort((p, q) => q - p);
|
|
48
|
+
return (x + 0.05) / (y + 0.05);
|
|
49
|
+
};
|
|
50
|
+
var RAMP = {
|
|
51
|
+
"blue-50": "#F2F4FF",
|
|
52
|
+
"blue-200": "#CFD6FF",
|
|
53
|
+
"blue-300": "#B1BBFE",
|
|
54
|
+
"blue-500": "#5146E9",
|
|
55
|
+
"blue-600": "#4633D7",
|
|
56
|
+
"blue-700": "#3923B9",
|
|
57
|
+
"blue-900": "#1D1168",
|
|
58
|
+
"blue-950": "#110A47",
|
|
59
|
+
"blue-soft-50": "#F3F5FF",
|
|
60
|
+
"blue-soft-200": "#D9DEFB",
|
|
61
|
+
"blue-soft-300": "#BEC7FC",
|
|
62
|
+
"blue-soft-700": "#5158A0",
|
|
63
|
+
"blue-soft-900": "#30344F",
|
|
64
|
+
"blue-soft-950": "#1F2132",
|
|
65
|
+
"primary-dark": "#493DD6",
|
|
66
|
+
"primary-hover-dark": "#554FE7",
|
|
67
|
+
"primary-pressed-dark": "#3E2AC5",
|
|
68
|
+
"primary-border-light": "#9085E7",
|
|
69
|
+
"primary-border-dark": "#928BE6"
|
|
70
|
+
};
|
|
71
|
+
var SOLID = /* @__PURE__ */ new Set(["blue-500", "blue-600", "blue-700", "primary-dark", "primary-hover-dark", "primary-pressed-dark"]);
|
|
72
|
+
function solidLightness(c, h, base, hoverStep) {
|
|
73
|
+
const passes = (L) => contrast(oklchToHex([L, c, h]), "#FFFFFF") >= 4.7 && contrast(oklchToHex([L + hoverStep, c, h]), "#FFFFFF") >= 4.7;
|
|
74
|
+
if (passes(base)) return base;
|
|
75
|
+
let lo = 0.2;
|
|
76
|
+
let hi = base;
|
|
77
|
+
for (let i = 0; i < 20; i++) {
|
|
78
|
+
const mid = (lo + hi) / 2;
|
|
79
|
+
if (passes(mid)) lo = mid;
|
|
80
|
+
else hi = mid;
|
|
81
|
+
}
|
|
82
|
+
return lo;
|
|
83
|
+
}
|
|
84
|
+
function brandVars(brand) {
|
|
85
|
+
const [bl, bc, bh] = rgbToOklch(hexToRgb(brand));
|
|
86
|
+
const lch = (step) => rgbToOklch(hexToRgb(RAMP[step]));
|
|
87
|
+
const [rl, rc, rh] = lch("blue-600");
|
|
88
|
+
const chroma = bc / rc;
|
|
89
|
+
const light = solidLightness(bc, bh, bl, lch("blue-500")[0] - rl);
|
|
90
|
+
const darkRest = lch("primary-dark")[0];
|
|
91
|
+
const dark = solidLightness(bc, bh, light + (darkRest - rl), lch("primary-hover-dark")[0] - darkRest);
|
|
92
|
+
const root = {};
|
|
93
|
+
for (const [step, hex] of Object.entries(RAMP)) {
|
|
94
|
+
const [l, c, h] = rgbToOklch(hexToRgb(hex));
|
|
95
|
+
const isDark = step.endsWith("-dark") && step !== "primary-border-dark";
|
|
96
|
+
const L = SOLID.has(step) ? isDark ? dark + (l - darkRest) : light + (l - rl) : l;
|
|
97
|
+
root[`--color-${step}`] = step === "blue-600" && light === bl ? brand.toUpperCase() : oklchToHex([Math.min(0.97, Math.max(0.15, L)), c * chroma, bh + (h - rh)]);
|
|
98
|
+
}
|
|
99
|
+
root["--sa-color-blue-600-a20"] = `${root["--sa-color-blue-600"]}33`;
|
|
100
|
+
root["--sa-color-blue-500-a20"] = `${root["--sa-color-blue-500"]}33`;
|
|
101
|
+
root["--sa-color-primary-focus-dark"] = `${root["--sa-color-primary-dark"]}33`;
|
|
102
|
+
return root;
|
|
103
|
+
}
|
|
104
|
+
var RADII = { xs: 4, sm: 6, md: 8, xl: 12, "2xl": 16, "3xl": 20 };
|
|
105
|
+
function radiusVars(scale) {
|
|
106
|
+
const v = {};
|
|
107
|
+
for (const [k, px] of Object.entries(RADII)) v[`--radius-${k}`] = `${Math.round(px * scale * 2) / 2}px`;
|
|
108
|
+
v["--sa-radius"] = `${Math.round(10 * scale * 2) / 2}px`;
|
|
109
|
+
v["--sa-radius-pill"] = scale >= 1 ? "9999px" : `${Math.round(16 * scale)}px`;
|
|
110
|
+
return v;
|
|
111
|
+
}
|
|
112
|
+
var VAR_PREFIX = "sa-";
|
|
113
|
+
var prefixed = (text, prefix) => prefix ? text.replace(/--(?=color-|radius)/g, `--${prefix}`) : text;
|
|
114
|
+
var prefixVars = (vars, prefix) => Object.fromEntries(Object.entries(vars).map(([k, v]) => [prefixed(k, prefix), prefixed(v, prefix)]));
|
|
115
|
+
function themeVars(theme, options = {}) {
|
|
116
|
+
const prefix = options.prefix ?? VAR_PREFIX;
|
|
117
|
+
return { root: prefixVars({ ...brandVars(theme.brand), ...radiusVars(theme.radius) }, prefix), dark: {} };
|
|
118
|
+
}
|
|
119
|
+
var SCOPED_LIGHT = {
|
|
120
|
+
"--border-focus": "var(--sa-color-blue-600)",
|
|
121
|
+
"--action-primary-bg": "var(--sa-color-blue-600)",
|
|
122
|
+
"--action-primary-bg-hover": "var(--sa-color-blue-500)",
|
|
123
|
+
"--action-primary-bg-pressed": "var(--sa-color-blue-700)",
|
|
124
|
+
"--action-primary-border": "var(--sa-color-primary-border-light)",
|
|
125
|
+
"--action-focus-ring": "var(--sa-color-blue-600-a20)",
|
|
126
|
+
"--status-brand-bg": "var(--sa-color-blue-soft-50)",
|
|
127
|
+
"--status-brand-border": "var(--sa-color-blue-soft-200)",
|
|
128
|
+
"--status-brand-fg": "var(--sa-color-blue-soft-700)",
|
|
129
|
+
"--sa-radius-lg": "var(--sa-radius)"
|
|
130
|
+
};
|
|
131
|
+
var SCOPED_DARK = {
|
|
132
|
+
"--border-focus": "var(--sa-color-primary-hover-dark)",
|
|
133
|
+
"--action-primary-bg": "var(--sa-color-primary-dark)",
|
|
134
|
+
"--action-primary-bg-hover": "var(--sa-color-primary-hover-dark)",
|
|
135
|
+
"--action-primary-bg-pressed": "var(--sa-color-primary-pressed-dark)",
|
|
136
|
+
"--action-primary-border": "var(--sa-color-primary-border-dark)",
|
|
137
|
+
"--action-focus-ring": "var(--sa-color-primary-focus-dark)",
|
|
138
|
+
"--status-brand-bg": "var(--sa-color-blue-soft-950)",
|
|
139
|
+
"--status-brand-border": "var(--sa-color-blue-soft-900)",
|
|
140
|
+
"--status-brand-fg": "var(--sa-color-blue-soft-300)"
|
|
141
|
+
};
|
|
142
|
+
function themeCss(theme, scope, options = {}) {
|
|
143
|
+
const prefix = options.prefix ?? VAR_PREFIX;
|
|
144
|
+
const vars = themeVars(theme, { prefix });
|
|
145
|
+
const root = scope ? { ...vars.root, ...prefixVars(SCOPED_LIGHT, prefix) } : vars.root;
|
|
146
|
+
const dark = scope ? { ...vars.dark, ...prefixVars(SCOPED_DARK, prefix) } : vars.dark;
|
|
147
|
+
const block = (sel, vars2) => `${sel} {
|
|
148
|
+
${Object.entries(vars2).map(([k, v]) => ` ${k}: ${v};`).join("\n")}
|
|
149
|
+
}`;
|
|
150
|
+
return [
|
|
151
|
+
`/* Satin theme: brand ${theme.brand.toUpperCase()}, radius ${theme.radius}. */`,
|
|
152
|
+
// :root:root outranks Satin's own :root, so the theme wins wherever the file is loaded.
|
|
153
|
+
block(scope ?? ":root:root", root),
|
|
154
|
+
...Object.keys(dark).length ? [block(scope ? `.dark ${scope}` : ":root.dark", dark)] : [],
|
|
155
|
+
""
|
|
156
|
+
].join("\n\n");
|
|
157
|
+
}
|
|
158
|
+
function randomTheme(current) {
|
|
159
|
+
const [, , currentHue] = current ? rgbToOklch(hexToRgb(current.brand)) : [0, 0, -360];
|
|
160
|
+
const hue = (currentHue + 60 + Math.random() * 240) % 360;
|
|
161
|
+
const l = 0.5 + Math.random() * 0.25;
|
|
162
|
+
const brand = oklchToHex([l, 0.12 + Math.random() * 0.08, hue]);
|
|
163
|
+
const radii = [0, 0.5, 1, 1.5].filter((r) => r !== current?.radius);
|
|
164
|
+
const radius = radii[Math.floor(Math.random() * radii.length)];
|
|
165
|
+
return { brand, radius };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export { contrast, defaultTheme, randomTheme, themeCss, themeVars };
|