@octaviaflow/core 3.0.17-beta.0 → 3.0.18-beta.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/dist/chunk-2RD5OERK.js +2553 -0
- package/dist/chunk-2RD5OERK.js.map +1 -0
- package/dist/chunk-CGWNV2HS.js +2549 -0
- package/dist/chunk-CGWNV2HS.js.map +1 -0
- package/dist/chunk-CS7JWNQD.js +2552 -0
- package/dist/chunk-CS7JWNQD.js.map +1 -0
- package/dist/chunk-D6CFZILB.js +2550 -0
- package/dist/chunk-D6CFZILB.js.map +1 -0
- package/dist/chunk-ECOTUJWJ.js +2548 -0
- package/dist/chunk-ECOTUJWJ.js.map +1 -0
- package/dist/chunk-F3ZHEDDP.js +2548 -0
- package/dist/chunk-F3ZHEDDP.js.map +1 -0
- package/dist/chunk-QWICIDGH.js +2547 -0
- package/dist/chunk-QWICIDGH.js.map +1 -0
- package/dist/chunk-TTKIDRN7.js +2551 -0
- package/dist/chunk-TTKIDRN7.js.map +1 -0
- package/dist/chunk-UFGAO5OY.js +2546 -0
- package/dist/chunk-UFGAO5OY.js.map +1 -0
- package/dist/components/ActionsDrawer/ActionsDrawer.d.ts +6 -0
- package/dist/components/ActionsDrawer/ActionsDrawer.d.ts.map +1 -1
- package/dist/components/ConfigPanel/ConfigPanel.d.ts +20 -1
- package/dist/components/ConfigPanel/ConfigPanel.d.ts.map +1 -1
- package/dist/components/ExecutionConsole/ExecutionConsole.d.ts +18 -2
- package/dist/components/ExecutionConsole/ExecutionConsole.d.ts.map +1 -1
- package/dist/components/FlowMinimap/FlowMinimap.d.ts +27 -2
- package/dist/components/FlowMinimap/FlowMinimap.d.ts.map +1 -1
- package/dist/components/FlowToolbar/FlowToolbar.d.ts +91 -1
- package/dist/components/FlowToolbar/FlowToolbar.d.ts.map +1 -1
- package/dist/components/FlowToolbar/index.d.ts +1 -1
- package/dist/components/FlowToolbar/index.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/index.cjs +1417 -994
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1193 -778
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/workflow/components/kinds/BaseNode.d.ts +7 -1
- package/dist/workflow/components/kinds/BaseNode.d.ts.map +1 -1
- package/dist/workflow/components/kinds/index.d.ts +6 -0
- package/dist/workflow/components/kinds/index.d.ts.map +1 -1
- package/dist/workflow.cjs +9 -2
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
applyEdgeChanges,
|
|
4
4
|
applyNodeChanges,
|
|
5
5
|
buildEdgePath
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2RD5OERK.js";
|
|
7
7
|
import {
|
|
8
8
|
__export,
|
|
9
9
|
cn
|
|
@@ -182,6 +182,7 @@ function ActionsDrawer({
|
|
|
182
182
|
"aria-controls": `${uid}-group-${group.id}`,
|
|
183
183
|
children: [
|
|
184
184
|
/* @__PURE__ */ jsx(ChevronIcon, { open: !isCollapsed }),
|
|
185
|
+
group.icon && /* @__PURE__ */ jsx("span", { className: "ods-actions-drawer__group-icon", "aria-hidden": "true", children: group.icon }),
|
|
185
186
|
/* @__PURE__ */ jsx("span", { className: "ods-actions-drawer__group-label", children: group.label }),
|
|
186
187
|
/* @__PURE__ */ jsx("span", { className: "ods-actions-drawer__group-count", children: group.items.length })
|
|
187
188
|
]
|
|
@@ -4068,13 +4069,15 @@ function ConditionBuilder({
|
|
|
4068
4069
|
import { AnimatePresence, motion as motion3 } from "framer-motion";
|
|
4069
4070
|
import { useRef as useRef8 } from "react";
|
|
4070
4071
|
import { useButton as useButton2 } from "react-aria";
|
|
4071
|
-
import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4072
|
+
import { Fragment as Fragment5, jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4072
4073
|
function ConfigPanel({
|
|
4073
4074
|
open = false,
|
|
4074
4075
|
onClose,
|
|
4075
4076
|
title = "Configure",
|
|
4076
4077
|
icon,
|
|
4077
4078
|
children,
|
|
4079
|
+
customRender,
|
|
4080
|
+
customFooter,
|
|
4078
4081
|
onSave,
|
|
4079
4082
|
onCancel,
|
|
4080
4083
|
className
|
|
@@ -4091,6 +4094,7 @@ function ConfigPanel({
|
|
|
4091
4094
|
const safeCloseProps = stripMotionConflicts(closeProps);
|
|
4092
4095
|
const safeSaveProps = stripMotionConflicts(saveProps);
|
|
4093
4096
|
const safeCancelProps = stripMotionConflicts(cancelProps);
|
|
4097
|
+
const bodyContent = customRender ?? children;
|
|
4094
4098
|
return /* @__PURE__ */ jsx21(AnimatePresence, { children: open && /* @__PURE__ */ jsxs20(
|
|
4095
4099
|
motion3.div,
|
|
4096
4100
|
{
|
|
@@ -4119,8 +4123,8 @@ function ConfigPanel({
|
|
|
4119
4123
|
}
|
|
4120
4124
|
)
|
|
4121
4125
|
] }),
|
|
4122
|
-
/* @__PURE__ */ jsx21("div", { className: "ods-config-panel__body", "data-testid": "config-panel-body", children }),
|
|
4123
|
-
/* @__PURE__ */
|
|
4126
|
+
/* @__PURE__ */ jsx21("div", { className: "ods-config-panel__body", "data-testid": "config-panel-body", children: bodyContent }),
|
|
4127
|
+
/* @__PURE__ */ jsx21("div", { className: "ods-config-panel__footer", children: customFooter ?? /* @__PURE__ */ jsxs20(Fragment5, { children: [
|
|
4124
4128
|
/* @__PURE__ */ jsx21(
|
|
4125
4129
|
"button",
|
|
4126
4130
|
{
|
|
@@ -4141,7 +4145,7 @@ function ConfigPanel({
|
|
|
4141
4145
|
children: "Save"
|
|
4142
4146
|
}
|
|
4143
4147
|
)
|
|
4144
|
-
] })
|
|
4148
|
+
] }) })
|
|
4145
4149
|
]
|
|
4146
4150
|
}
|
|
4147
4151
|
) });
|
|
@@ -4153,7 +4157,7 @@ function stripMotionConflicts(props) {
|
|
|
4153
4157
|
|
|
4154
4158
|
// src/components/DataMapper/DataMapper.tsx
|
|
4155
4159
|
import { useCallback as useCallback3, useEffect as useEffect3, useMemo as useMemo5, useRef as useRef9, useState as useState7 } from "react";
|
|
4156
|
-
import { Fragment as
|
|
4160
|
+
import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4157
4161
|
var TYPE_CLASSES = {
|
|
4158
4162
|
string: "string",
|
|
4159
4163
|
integer: "integer",
|
|
@@ -4693,7 +4697,7 @@ function DataMapper({
|
|
|
4693
4697
|
" mapped"
|
|
4694
4698
|
] })
|
|
4695
4699
|
] }),
|
|
4696
|
-
requiredUnmapped > 0 && /* @__PURE__ */ jsxs21(
|
|
4700
|
+
requiredUnmapped > 0 && /* @__PURE__ */ jsxs21(Fragment6, { children: [
|
|
4697
4701
|
/* @__PURE__ */ jsx22("span", { className: "ods-data-mapper__stat-sep", children: "\xB7" }),
|
|
4698
4702
|
/* @__PURE__ */ jsxs21("span", { className: "ods-data-mapper__stat ods-data-mapper__stat--warn", children: [
|
|
4699
4703
|
/* @__PURE__ */ jsx22("span", { className: "ods-data-mapper__stat-value", children: requiredUnmapped }),
|
|
@@ -5459,7 +5463,7 @@ import { AnimatePresence as AnimatePresence2, motion as motion4 } from "framer-m
|
|
|
5459
5463
|
import { useCallback as useCallback4, useEffect as useEffect4, useMemo as useMemo6, useRef as useRef10, useState as useState8 } from "react";
|
|
5460
5464
|
import { HiddenSelect, useButton as useButton3, useListBox, useOption, useSelect } from "react-aria";
|
|
5461
5465
|
import { createPortal } from "react-dom";
|
|
5462
|
-
import { Fragment as
|
|
5466
|
+
import { Fragment as Fragment7, jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
5463
5467
|
function ListBox(props) {
|
|
5464
5468
|
const ref = useRef10(null);
|
|
5465
5469
|
const { listBoxRef = ref, state, showCheckmark } = props;
|
|
@@ -5681,7 +5685,7 @@ function Select({
|
|
|
5681
5685
|
"aria-required": required || void 0,
|
|
5682
5686
|
className: cn("ods-select__trigger", state.isOpen && "ods-select__trigger--open"),
|
|
5683
5687
|
children: [
|
|
5684
|
-
/* @__PURE__ */ jsx23("span", { className: "ods-select__value", children: selectedOption ? /* @__PURE__ */ jsxs22(
|
|
5688
|
+
/* @__PURE__ */ jsx23("span", { className: "ods-select__value", children: selectedOption ? /* @__PURE__ */ jsxs22(Fragment7, { children: [
|
|
5685
5689
|
selectedOption.icon && /* @__PURE__ */ jsx23("span", { className: "ods-select__value-icon", children: selectedOption.icon }),
|
|
5686
5690
|
selectedOption.label
|
|
5687
5691
|
] }) : /* @__PURE__ */ jsx23("span", { className: "ods-select__placeholder", children: placeholder }) }),
|
|
@@ -5750,7 +5754,7 @@ function Select({
|
|
|
5750
5754
|
}
|
|
5751
5755
|
|
|
5752
5756
|
// src/components/DataTable/DataTable.tsx
|
|
5753
|
-
import { Fragment as
|
|
5757
|
+
import { Fragment as Fragment8, jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
5754
5758
|
function readValue(row, col) {
|
|
5755
5759
|
if (typeof col.accessor === "function") return col.accessor(row);
|
|
5756
5760
|
const k = col.accessor ?? col.key;
|
|
@@ -6219,7 +6223,7 @@ function DataTable(props) {
|
|
|
6219
6223
|
const showBulkBar = selectable && selectedCount > 0;
|
|
6220
6224
|
const wrapperClass = cn("ods-datatable", `ods-datatable--${density}`, className);
|
|
6221
6225
|
return /* @__PURE__ */ jsxs23("div", { className: wrapperClass, role: "region", "aria-label": "Data table", children: [
|
|
6222
|
-
/* @__PURE__ */ jsx24("div", { className: "ods-datatable__toolbar", children: showBulkBar ? /* @__PURE__ */ jsxs23(
|
|
6226
|
+
/* @__PURE__ */ jsx24("div", { className: "ods-datatable__toolbar", children: showBulkBar ? /* @__PURE__ */ jsxs23(Fragment8, { children: [
|
|
6223
6227
|
/* @__PURE__ */ jsxs23("div", { className: "ods-datatable__bulk-summary", children: [
|
|
6224
6228
|
/* @__PURE__ */ jsx24("span", { className: "ods-datatable__bulk-count", children: selectedCount }),
|
|
6225
6229
|
/* @__PURE__ */ jsx24("span", { children: "selected" }),
|
|
@@ -6253,7 +6257,7 @@ function DataTable(props) {
|
|
|
6253
6257
|
},
|
|
6254
6258
|
i
|
|
6255
6259
|
)) })
|
|
6256
|
-
] }) : /* @__PURE__ */ jsxs23(
|
|
6260
|
+
] }) : /* @__PURE__ */ jsxs23(Fragment8, { children: [
|
|
6257
6261
|
/* @__PURE__ */ jsxs23("div", { className: "ods-datatable__title-block", children: [
|
|
6258
6262
|
title && /* @__PURE__ */ jsxs23("h2", { className: "ods-datatable__title", children: [
|
|
6259
6263
|
title,
|
|
@@ -6523,7 +6527,7 @@ function Row({
|
|
|
6523
6527
|
}) {
|
|
6524
6528
|
const [menuOpen, setMenuOpen] = useState9(false);
|
|
6525
6529
|
const triggerRef = useRef11(null);
|
|
6526
|
-
return /* @__PURE__ */ jsxs23(
|
|
6530
|
+
return /* @__PURE__ */ jsxs23(Fragment8, { children: [
|
|
6527
6531
|
/* @__PURE__ */ jsxs23(
|
|
6528
6532
|
"tr",
|
|
6529
6533
|
{
|
|
@@ -6951,7 +6955,7 @@ function Dialog(props) {
|
|
|
6951
6955
|
}
|
|
6952
6956
|
|
|
6953
6957
|
// src/components/DonutChart/DonutChart.tsx
|
|
6954
|
-
import { Fragment as
|
|
6958
|
+
import { Fragment as Fragment9, jsx as jsx28, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
6955
6959
|
function DonutChart({
|
|
6956
6960
|
data,
|
|
6957
6961
|
size = 160,
|
|
@@ -7002,7 +7006,7 @@ function DonutChart({
|
|
|
7002
7006
|
i
|
|
7003
7007
|
)) })
|
|
7004
7008
|
] }),
|
|
7005
|
-
/* @__PURE__ */ jsx28("div", { className: "ods-donut__center", children: centerLabel ?? /* @__PURE__ */ jsxs27(
|
|
7009
|
+
/* @__PURE__ */ jsx28("div", { className: "ods-donut__center", children: centerLabel ?? /* @__PURE__ */ jsxs27(Fragment9, { children: [
|
|
7006
7010
|
/* @__PURE__ */ jsx28("div", { className: "ods-donut__value", children: total }),
|
|
7007
7011
|
/* @__PURE__ */ jsx28("div", { className: "ods-donut__small", children: "total" })
|
|
7008
7012
|
] }) })
|
|
@@ -7073,7 +7077,7 @@ import { AnimatePresence as AnimatePresence4, motion as motion6 } from "framer-m
|
|
|
7073
7077
|
import { useEffect as useEffect7, useRef as useRef14 } from "react";
|
|
7074
7078
|
import { useButton as useButton4, useMenu, useMenuItem, useMenuTrigger } from "react-aria";
|
|
7075
7079
|
import { createPortal as createPortal4 } from "react-dom";
|
|
7076
|
-
import { Fragment as
|
|
7080
|
+
import { Fragment as Fragment10, jsx as jsx30, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
7077
7081
|
function MenuItemComponent({ item, state, onAction }) {
|
|
7078
7082
|
const ref = useRef14(null);
|
|
7079
7083
|
const { menuItemProps } = useMenuItem({ key: item.key, onAction }, state, ref);
|
|
@@ -7227,7 +7231,7 @@ function DropdownMenu({
|
|
|
7227
7231
|
});
|
|
7228
7232
|
const { buttonProps } = useButton4({ ...menuTriggerProps, ...ariaNameProps }, triggerRef);
|
|
7229
7233
|
const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeTriggerProps } = buttonProps;
|
|
7230
|
-
return /* @__PURE__ */ jsxs29(
|
|
7234
|
+
return /* @__PURE__ */ jsxs29(Fragment10, { children: [
|
|
7231
7235
|
/* @__PURE__ */ jsx30(
|
|
7232
7236
|
"button",
|
|
7233
7237
|
{
|
|
@@ -7266,7 +7270,7 @@ function EmptyState({ icon, title, description, action, className }) {
|
|
|
7266
7270
|
// src/components/ExecutionConsole/ExecutionConsole.tsx
|
|
7267
7271
|
import { motion as motion7 } from "framer-motion";
|
|
7268
7272
|
import { useEffect as useEffect8, useMemo as useMemo8, useRef as useRef15, useState as useState11 } from "react";
|
|
7269
|
-
import { Fragment as
|
|
7273
|
+
import { Fragment as Fragment11, jsx as jsx32, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
7270
7274
|
var iconProps = {
|
|
7271
7275
|
xmlns: "http://www.w3.org/2000/svg",
|
|
7272
7276
|
viewBox: "0 0 24 24",
|
|
@@ -7324,6 +7328,7 @@ function ExecutionConsole({
|
|
|
7324
7328
|
showNodeFilter = true,
|
|
7325
7329
|
exportable = true,
|
|
7326
7330
|
expandedHeight = DEFAULT_EXPANDED_HEIGHT,
|
|
7331
|
+
height,
|
|
7327
7332
|
toolbar,
|
|
7328
7333
|
emptyState,
|
|
7329
7334
|
className
|
|
@@ -7430,12 +7435,16 @@ function ExecutionConsole({
|
|
|
7430
7435
|
}, [logs]);
|
|
7431
7436
|
const showNodeChrome = showNodeFilter && nodeOptions.length > 0;
|
|
7432
7437
|
const hasFilterChrome = searchable || showLevelFilter || showNodeChrome;
|
|
7438
|
+
const useFlexFill = height === "fill" || height === "100%";
|
|
7439
|
+
const explicitHeightStyle = useFlexFill ? { flex: "1 1 auto", minHeight: 0, height: "100%" } : height !== void 0 ? { height: typeof height === "number" ? `${height}px` : height } : void 0;
|
|
7440
|
+
const motionAnimate = explicitHeightStyle ? false : { height: open ? expandedHeight : COLLAPSED_HEIGHT };
|
|
7433
7441
|
return /* @__PURE__ */ jsxs31(
|
|
7434
7442
|
motion7.div,
|
|
7435
7443
|
{
|
|
7436
7444
|
className: cn("ods-console", open && "ods-console--open", className),
|
|
7437
|
-
animate:
|
|
7445
|
+
animate: motionAnimate,
|
|
7438
7446
|
transition: { type: "spring", stiffness: 300, damping: 30 },
|
|
7447
|
+
style: explicitHeightStyle,
|
|
7439
7448
|
"data-testid": "execution-console",
|
|
7440
7449
|
children: [
|
|
7441
7450
|
/* @__PURE__ */ jsxs31("div", { className: "ods-console__bar", "data-testid": "console-bar", children: [
|
|
@@ -7554,7 +7563,7 @@ function ExecutionConsole({
|
|
|
7554
7563
|
children: /* @__PURE__ */ jsx32(TrashIcon2, {})
|
|
7555
7564
|
}
|
|
7556
7565
|
),
|
|
7557
|
-
toolbar && /* @__PURE__ */ jsxs31(
|
|
7566
|
+
toolbar && /* @__PURE__ */ jsxs31(Fragment11, { children: [
|
|
7558
7567
|
/* @__PURE__ */ jsx32("span", { className: "ods-console__action-separator", "aria-hidden": "true" }),
|
|
7559
7568
|
toolbar
|
|
7560
7569
|
] })
|
|
@@ -7683,7 +7692,7 @@ function q(query, text) {
|
|
|
7683
7692
|
const lc = text.toLowerCase();
|
|
7684
7693
|
const idx = lc.indexOf(trimmed.toLowerCase());
|
|
7685
7694
|
if (idx < 0) return text;
|
|
7686
|
-
return /* @__PURE__ */ jsxs31(
|
|
7695
|
+
return /* @__PURE__ */ jsxs31(Fragment11, { children: [
|
|
7687
7696
|
text.slice(0, idx),
|
|
7688
7697
|
/* @__PURE__ */ jsx32("mark", { className: "ods-console__match", children: text.slice(idx, idx + trimmed.length) }),
|
|
7689
7698
|
text.slice(idx + trimmed.length)
|
|
@@ -7820,7 +7829,7 @@ function sanitizeHref(url) {
|
|
|
7820
7829
|
}
|
|
7821
7830
|
|
|
7822
7831
|
// src/components/FileDropzone/FileDropzone.tsx
|
|
7823
|
-
import { Fragment as
|
|
7832
|
+
import { Fragment as Fragment12, jsx as jsx34, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
7824
7833
|
var UPLOAD_ICON = /* @__PURE__ */ jsx34("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx34(
|
|
7825
7834
|
"path",
|
|
7826
7835
|
{
|
|
@@ -8217,7 +8226,7 @@ function FileDropzone({
|
|
|
8217
8226
|
children: CHECK_ICON
|
|
8218
8227
|
}
|
|
8219
8228
|
),
|
|
8220
|
-
status === "error" && /* @__PURE__ */ jsxs33(
|
|
8229
|
+
status === "error" && /* @__PURE__ */ jsxs33(Fragment12, { children: [
|
|
8221
8230
|
/* @__PURE__ */ jsx34(
|
|
8222
8231
|
"span",
|
|
8223
8232
|
{
|
|
@@ -8973,7 +8982,13 @@ function FlowCanvas2({
|
|
|
8973
8982
|
}
|
|
8974
8983
|
|
|
8975
8984
|
// src/components/FlowMinimap/FlowMinimap.tsx
|
|
8976
|
-
import {
|
|
8985
|
+
import {
|
|
8986
|
+
useCallback as useCallback9,
|
|
8987
|
+
useEffect as useEffect11,
|
|
8988
|
+
useMemo as useMemo9,
|
|
8989
|
+
useRef as useRef19,
|
|
8990
|
+
useState as useState15
|
|
8991
|
+
} from "react";
|
|
8977
8992
|
import { jsx as jsx38, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
8978
8993
|
var MINIMAP_WIDTH = 140;
|
|
8979
8994
|
var MINIMAP_HEIGHT = 100;
|
|
@@ -8981,6 +8996,7 @@ function FlowMinimap({
|
|
|
8981
8996
|
nodes = [],
|
|
8982
8997
|
edges = [],
|
|
8983
8998
|
viewportRect,
|
|
8999
|
+
viewport,
|
|
8984
9000
|
totalWidth = 2e3,
|
|
8985
9001
|
totalHeight = 1500,
|
|
8986
9002
|
onViewportChange,
|
|
@@ -9016,72 +9032,200 @@ function FlowMinimap({
|
|
|
9016
9032
|
height: viewportRect.height * scaleY
|
|
9017
9033
|
};
|
|
9018
9034
|
}, [viewportRect, scaleX, scaleY]);
|
|
9019
|
-
const
|
|
9020
|
-
(
|
|
9035
|
+
const reportViewportChange = useCallback9(
|
|
9036
|
+
(worldX, worldY) => {
|
|
9021
9037
|
if (!onViewportChange) return;
|
|
9038
|
+
if (onViewportChange.length <= 1) {
|
|
9039
|
+
onViewportChange({
|
|
9040
|
+
x: worldX,
|
|
9041
|
+
y: worldY,
|
|
9042
|
+
zoom: viewport?.zoom
|
|
9043
|
+
});
|
|
9044
|
+
} else {
|
|
9045
|
+
onViewportChange(worldX, worldY);
|
|
9046
|
+
}
|
|
9047
|
+
},
|
|
9048
|
+
[onViewportChange, viewport?.zoom]
|
|
9049
|
+
);
|
|
9050
|
+
const handleSvgClick = useCallback9(
|
|
9051
|
+
(e) => {
|
|
9052
|
+
if (dragRef.current.dragging) return;
|
|
9022
9053
|
const rect = e.currentTarget.getBoundingClientRect();
|
|
9023
9054
|
const clickX = e.clientX - rect.left;
|
|
9024
9055
|
const clickY = e.clientY - rect.top;
|
|
9025
|
-
|
|
9026
|
-
|
|
9027
|
-
|
|
9056
|
+
let worldX = clickX / scaleX;
|
|
9057
|
+
let worldY = clickY / scaleY;
|
|
9058
|
+
if (viewportRect) {
|
|
9059
|
+
worldX -= viewportRect.width / 2;
|
|
9060
|
+
worldY -= viewportRect.height / 2;
|
|
9061
|
+
}
|
|
9062
|
+
reportViewportChange(worldX, worldY);
|
|
9063
|
+
},
|
|
9064
|
+
[scaleX, scaleY, viewportRect, reportViewportChange]
|
|
9065
|
+
);
|
|
9066
|
+
const dragRef = useRef19({
|
|
9067
|
+
dragging: false,
|
|
9068
|
+
pointerId: -1,
|
|
9069
|
+
startX: 0,
|
|
9070
|
+
startY: 0,
|
|
9071
|
+
startWorldX: 0,
|
|
9072
|
+
startWorldY: 0
|
|
9073
|
+
});
|
|
9074
|
+
const [isDragging, setIsDragging] = useState15(false);
|
|
9075
|
+
const onViewportPointerDown = useCallback9(
|
|
9076
|
+
(e) => {
|
|
9077
|
+
if (!viewportRect) return;
|
|
9078
|
+
e.stopPropagation();
|
|
9079
|
+
e.preventDefault();
|
|
9080
|
+
const svg = e.currentTarget.ownerSVGElement ?? e.currentTarget;
|
|
9081
|
+
svg.setPointerCapture?.(e.pointerId);
|
|
9082
|
+
dragRef.current = {
|
|
9083
|
+
dragging: true,
|
|
9084
|
+
pointerId: e.pointerId,
|
|
9085
|
+
startX: e.clientX,
|
|
9086
|
+
startY: e.clientY,
|
|
9087
|
+
startWorldX: viewportRect.x,
|
|
9088
|
+
startWorldY: viewportRect.y
|
|
9089
|
+
};
|
|
9090
|
+
setIsDragging(true);
|
|
9028
9091
|
},
|
|
9029
|
-
[
|
|
9092
|
+
[viewportRect]
|
|
9030
9093
|
);
|
|
9031
|
-
|
|
9094
|
+
const onSvgPointerMove = useCallback9(
|
|
9095
|
+
(e) => {
|
|
9096
|
+
const d = dragRef.current;
|
|
9097
|
+
if (!d.dragging || d.pointerId !== e.pointerId) return;
|
|
9098
|
+
const dx = (e.clientX - d.startX) / scaleX;
|
|
9099
|
+
const dy = (e.clientY - d.startY) / scaleY;
|
|
9100
|
+
reportViewportChange(d.startWorldX + dx, d.startWorldY + dy);
|
|
9101
|
+
},
|
|
9102
|
+
[scaleX, scaleY, reportViewportChange]
|
|
9103
|
+
);
|
|
9104
|
+
const onSvgPointerUp = useCallback9((e) => {
|
|
9105
|
+
const d = dragRef.current;
|
|
9106
|
+
if (d.dragging && d.pointerId === e.pointerId) {
|
|
9107
|
+
d.dragging = false;
|
|
9108
|
+
d.pointerId = -1;
|
|
9109
|
+
setIsDragging(false);
|
|
9110
|
+
e.currentTarget.releasePointerCapture?.(e.pointerId);
|
|
9111
|
+
}
|
|
9112
|
+
}, []);
|
|
9113
|
+
useEffect11(
|
|
9114
|
+
() => () => {
|
|
9115
|
+
dragRef.current.dragging = false;
|
|
9116
|
+
},
|
|
9117
|
+
[]
|
|
9118
|
+
);
|
|
9119
|
+
return /* @__PURE__ */ jsx38(
|
|
9120
|
+
"div",
|
|
9121
|
+
{
|
|
9122
|
+
className: cn("ods-flow-minimap", isDragging && "ods-flow-minimap--dragging", className),
|
|
9123
|
+
"data-testid": "flow-minimap",
|
|
9124
|
+
children: /* @__PURE__ */ jsxs37(
|
|
9125
|
+
"svg",
|
|
9126
|
+
{
|
|
9127
|
+
width: MINIMAP_WIDTH,
|
|
9128
|
+
height: MINIMAP_HEIGHT,
|
|
9129
|
+
viewBox: `0 0 ${MINIMAP_WIDTH} ${MINIMAP_HEIGHT}`,
|
|
9130
|
+
onClick: handleSvgClick,
|
|
9131
|
+
onPointerMove: onSvgPointerMove,
|
|
9132
|
+
onPointerUp: onSvgPointerUp,
|
|
9133
|
+
onPointerCancel: onSvgPointerUp,
|
|
9134
|
+
"data-testid": "flow-minimap-svg",
|
|
9135
|
+
children: [
|
|
9136
|
+
scaledEdges.map((e, i) => /* @__PURE__ */ jsx38(
|
|
9137
|
+
"line",
|
|
9138
|
+
{
|
|
9139
|
+
x1: e.x1,
|
|
9140
|
+
y1: e.y1,
|
|
9141
|
+
x2: e.x2,
|
|
9142
|
+
y2: e.y2,
|
|
9143
|
+
className: "ods-flow-minimap__edge"
|
|
9144
|
+
},
|
|
9145
|
+
i
|
|
9146
|
+
)),
|
|
9147
|
+
scaledNodes.map((n) => /* @__PURE__ */ jsx38(
|
|
9148
|
+
"rect",
|
|
9149
|
+
{
|
|
9150
|
+
x: n.sx,
|
|
9151
|
+
y: n.sy,
|
|
9152
|
+
width: n.sw,
|
|
9153
|
+
height: n.sh,
|
|
9154
|
+
rx: 1,
|
|
9155
|
+
fill: n.color || "var(--ods-color-brand-500, #3b5bff)",
|
|
9156
|
+
className: "ods-flow-minimap__node",
|
|
9157
|
+
"data-testid": `minimap-node-${n.id}`
|
|
9158
|
+
},
|
|
9159
|
+
n.id
|
|
9160
|
+
)),
|
|
9161
|
+
scaledViewport && /* @__PURE__ */ jsx38(
|
|
9162
|
+
"rect",
|
|
9163
|
+
{
|
|
9164
|
+
x: scaledViewport.x,
|
|
9165
|
+
y: scaledViewport.y,
|
|
9166
|
+
width: scaledViewport.width,
|
|
9167
|
+
height: scaledViewport.height,
|
|
9168
|
+
className: "ods-flow-minimap__viewport",
|
|
9169
|
+
"data-testid": "minimap-viewport",
|
|
9170
|
+
onPointerDown: onViewportPointerDown,
|
|
9171
|
+
style: { cursor: viewportRect ? "grab" : "default" }
|
|
9172
|
+
}
|
|
9173
|
+
)
|
|
9174
|
+
]
|
|
9175
|
+
}
|
|
9176
|
+
)
|
|
9177
|
+
}
|
|
9178
|
+
);
|
|
9179
|
+
}
|
|
9180
|
+
|
|
9181
|
+
// src/components/FlowToolbar/FlowToolbar.tsx
|
|
9182
|
+
import { useEffect as useEffect12, useRef as useRef20, useState as useState16 } from "react";
|
|
9183
|
+
|
|
9184
|
+
// src/components/Spinner/Spinner.tsx
|
|
9185
|
+
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
9186
|
+
var sizeMap = {
|
|
9187
|
+
sm: 16,
|
|
9188
|
+
md: 24,
|
|
9189
|
+
lg: 32,
|
|
9190
|
+
xl: 48
|
|
9191
|
+
};
|
|
9192
|
+
function Spinner({
|
|
9193
|
+
size = "md",
|
|
9194
|
+
color = "var(--ods-color-brand-500)",
|
|
9195
|
+
className
|
|
9196
|
+
}) {
|
|
9197
|
+
const px = sizeMap[size];
|
|
9198
|
+
return /* @__PURE__ */ jsx39(
|
|
9032
9199
|
"svg",
|
|
9033
9200
|
{
|
|
9034
|
-
|
|
9035
|
-
|
|
9036
|
-
|
|
9037
|
-
|
|
9038
|
-
|
|
9039
|
-
|
|
9040
|
-
|
|
9041
|
-
|
|
9042
|
-
|
|
9043
|
-
|
|
9044
|
-
|
|
9045
|
-
|
|
9046
|
-
|
|
9047
|
-
|
|
9048
|
-
|
|
9049
|
-
|
|
9050
|
-
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
|
|
9054
|
-
x: n.sx,
|
|
9055
|
-
y: n.sy,
|
|
9056
|
-
width: n.sw,
|
|
9057
|
-
height: n.sh,
|
|
9058
|
-
rx: 1,
|
|
9059
|
-
fill: n.color || "var(--ods-color-brand-500, #3b5bff)",
|
|
9060
|
-
className: "ods-flow-minimap__node",
|
|
9061
|
-
"data-testid": `minimap-node-${n.id}`
|
|
9062
|
-
},
|
|
9063
|
-
n.id
|
|
9064
|
-
)),
|
|
9065
|
-
scaledViewport && /* @__PURE__ */ jsx38(
|
|
9066
|
-
"rect",
|
|
9067
|
-
{
|
|
9068
|
-
x: scaledViewport.x,
|
|
9069
|
-
y: scaledViewport.y,
|
|
9070
|
-
width: scaledViewport.width,
|
|
9071
|
-
height: scaledViewport.height,
|
|
9072
|
-
className: "ods-flow-minimap__viewport",
|
|
9073
|
-
"data-testid": "minimap-viewport"
|
|
9074
|
-
}
|
|
9075
|
-
)
|
|
9076
|
-
]
|
|
9201
|
+
className: cn("ods-spinner", `ods-spinner--${size}`, className),
|
|
9202
|
+
width: px,
|
|
9203
|
+
height: px,
|
|
9204
|
+
viewBox: "0 0 24 24",
|
|
9205
|
+
fill: "none",
|
|
9206
|
+
role: "status",
|
|
9207
|
+
"aria-label": "Loading",
|
|
9208
|
+
style: { color },
|
|
9209
|
+
children: /* @__PURE__ */ jsx39(
|
|
9210
|
+
"circle",
|
|
9211
|
+
{
|
|
9212
|
+
cx: "12",
|
|
9213
|
+
cy: "12",
|
|
9214
|
+
r: "10",
|
|
9215
|
+
strokeWidth: "3",
|
|
9216
|
+
strokeLinecap: "round",
|
|
9217
|
+
strokeDasharray: "31.4 31.4",
|
|
9218
|
+
className: "ods-spinner__circle"
|
|
9219
|
+
}
|
|
9220
|
+
)
|
|
9077
9221
|
}
|
|
9078
|
-
)
|
|
9222
|
+
);
|
|
9079
9223
|
}
|
|
9080
9224
|
|
|
9081
9225
|
// src/components/FlowToolbar/FlowToolbar.tsx
|
|
9082
|
-
import { Fragment as
|
|
9226
|
+
import { Fragment as Fragment13, jsx as jsx40, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
9083
9227
|
function FlowToolbar({ children, placement = "left", className }) {
|
|
9084
|
-
return /* @__PURE__ */
|
|
9228
|
+
return /* @__PURE__ */ jsx40(
|
|
9085
9229
|
"div",
|
|
9086
9230
|
{
|
|
9087
9231
|
className: cn("ods-flow-toolbar", `ods-flow-toolbar--${placement}`, className),
|
|
@@ -9104,7 +9248,7 @@ function FlowToolbarButton({
|
|
|
9104
9248
|
}) {
|
|
9105
9249
|
const hoverLabel = tooltip ?? label;
|
|
9106
9250
|
const title = shortcut ? `${hoverLabel} (${shortcut})` : hoverLabel;
|
|
9107
|
-
return /* @__PURE__ */
|
|
9251
|
+
return /* @__PURE__ */ jsx40("span", { className: "ods-flow-toolbar__btn-wrapper", "data-tooltip": title, children: /* @__PURE__ */ jsx40(
|
|
9108
9252
|
"button",
|
|
9109
9253
|
{
|
|
9110
9254
|
type: "button",
|
|
@@ -9119,12 +9263,12 @@ function FlowToolbarButton({
|
|
|
9119
9263
|
"aria-label": label,
|
|
9120
9264
|
"aria-pressed": active,
|
|
9121
9265
|
title,
|
|
9122
|
-
children: /* @__PURE__ */
|
|
9266
|
+
children: /* @__PURE__ */ jsx40("span", { className: "ods-flow-toolbar__btn-icon", children: icon })
|
|
9123
9267
|
}
|
|
9124
9268
|
) });
|
|
9125
9269
|
}
|
|
9126
9270
|
function FlowToolbarDivider({ className }) {
|
|
9127
|
-
return /* @__PURE__ */
|
|
9271
|
+
return /* @__PURE__ */ jsx40("span", { className: cn("ods-flow-toolbar__divider", className), "aria-hidden": "true" });
|
|
9128
9272
|
}
|
|
9129
9273
|
var SVG_BASE = {
|
|
9130
9274
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -9136,112 +9280,323 @@ var SVG_BASE = {
|
|
|
9136
9280
|
strokeLinejoin: "round",
|
|
9137
9281
|
"aria-hidden": true
|
|
9138
9282
|
};
|
|
9139
|
-
var mkIcon = (children) => /* @__PURE__ */
|
|
9283
|
+
var mkIcon = (children) => /* @__PURE__ */ jsx40("svg", { ...SVG_BASE, width: "16", height: "16", children });
|
|
9140
9284
|
var FlowToolbarIcons = {
|
|
9141
9285
|
save: mkIcon(
|
|
9142
|
-
/* @__PURE__ */ jsxs38(
|
|
9143
|
-
/* @__PURE__ */
|
|
9144
|
-
/* @__PURE__ */
|
|
9145
|
-
/* @__PURE__ */
|
|
9286
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9287
|
+
/* @__PURE__ */ jsx40("path", { d: "M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" }),
|
|
9288
|
+
/* @__PURE__ */ jsx40("polyline", { points: "17 21 17 13 7 13 7 21" }),
|
|
9289
|
+
/* @__PURE__ */ jsx40("polyline", { points: "7 3 7 8 15 8" })
|
|
9146
9290
|
] })
|
|
9147
9291
|
),
|
|
9148
|
-
run: mkIcon(/* @__PURE__ */
|
|
9149
|
-
stop: mkIcon(/* @__PURE__ */
|
|
9292
|
+
run: mkIcon(/* @__PURE__ */ jsx40("polygon", { points: "6 4 20 12 6 20 6 4", fill: "currentColor", stroke: "none" })),
|
|
9293
|
+
stop: mkIcon(/* @__PURE__ */ jsx40("rect", { x: "6", y: "6", width: "12", height: "12", rx: "1" })),
|
|
9150
9294
|
lock: mkIcon(
|
|
9151
|
-
/* @__PURE__ */ jsxs38(
|
|
9152
|
-
/* @__PURE__ */
|
|
9153
|
-
/* @__PURE__ */
|
|
9295
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9296
|
+
/* @__PURE__ */ jsx40("rect", { x: "4", y: "11", width: "16", height: "10", rx: "2" }),
|
|
9297
|
+
/* @__PURE__ */ jsx40("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" })
|
|
9154
9298
|
] })
|
|
9155
9299
|
),
|
|
9156
9300
|
unlock: mkIcon(
|
|
9157
|
-
/* @__PURE__ */ jsxs38(
|
|
9158
|
-
/* @__PURE__ */
|
|
9159
|
-
/* @__PURE__ */
|
|
9301
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9302
|
+
/* @__PURE__ */ jsx40("rect", { x: "4", y: "11", width: "16", height: "10", rx: "2" }),
|
|
9303
|
+
/* @__PURE__ */ jsx40("path", { d: "M8 11V7a4 4 0 0 1 8 0" })
|
|
9160
9304
|
] })
|
|
9161
9305
|
),
|
|
9162
9306
|
reset: mkIcon(
|
|
9163
|
-
/* @__PURE__ */ jsxs38(
|
|
9164
|
-
/* @__PURE__ */
|
|
9165
|
-
/* @__PURE__ */
|
|
9307
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9308
|
+
/* @__PURE__ */ jsx40("polyline", { points: "1 4 1 10 7 10" }),
|
|
9309
|
+
/* @__PURE__ */ jsx40("path", { d: "M3.51 15a9 9 0 1 0 2.13-9.36L1 10" })
|
|
9166
9310
|
] })
|
|
9167
9311
|
),
|
|
9168
9312
|
undo: mkIcon(
|
|
9169
|
-
/* @__PURE__ */ jsxs38(
|
|
9170
|
-
/* @__PURE__ */
|
|
9171
|
-
/* @__PURE__ */
|
|
9313
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9314
|
+
/* @__PURE__ */ jsx40("path", { d: "M3 7v6h6" }),
|
|
9315
|
+
/* @__PURE__ */ jsx40("path", { d: "M21 17a9 9 0 0 0-9-9 9 9 0 0 0-7.07 3.43L3 13" })
|
|
9172
9316
|
] })
|
|
9173
9317
|
),
|
|
9174
9318
|
redo: mkIcon(
|
|
9175
|
-
/* @__PURE__ */ jsxs38(
|
|
9176
|
-
/* @__PURE__ */
|
|
9177
|
-
/* @__PURE__ */
|
|
9319
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9320
|
+
/* @__PURE__ */ jsx40("path", { d: "M21 7v6h-6" }),
|
|
9321
|
+
/* @__PURE__ */ jsx40("path", { d: "M3 17a9 9 0 0 1 9-9 9 9 0 0 1 7.07 3.43L21 13" })
|
|
9178
9322
|
] })
|
|
9179
9323
|
),
|
|
9180
9324
|
drawerOpen: mkIcon(
|
|
9181
|
-
/* @__PURE__ */ jsxs38(
|
|
9182
|
-
/* @__PURE__ */
|
|
9183
|
-
/* @__PURE__ */
|
|
9184
|
-
/* @__PURE__ */
|
|
9325
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9326
|
+
/* @__PURE__ */ jsx40("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
|
|
9327
|
+
/* @__PURE__ */ jsx40("line", { x1: "9", y1: "3", x2: "9", y2: "21" }),
|
|
9328
|
+
/* @__PURE__ */ jsx40("polyline", { points: "13 9 16 12 13 15" })
|
|
9185
9329
|
] })
|
|
9186
9330
|
),
|
|
9187
9331
|
drawerClose: mkIcon(
|
|
9188
|
-
/* @__PURE__ */ jsxs38(
|
|
9189
|
-
/* @__PURE__ */
|
|
9190
|
-
/* @__PURE__ */
|
|
9191
|
-
/* @__PURE__ */
|
|
9332
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9333
|
+
/* @__PURE__ */ jsx40("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
|
|
9334
|
+
/* @__PURE__ */ jsx40("line", { x1: "9", y1: "3", x2: "9", y2: "21" }),
|
|
9335
|
+
/* @__PURE__ */ jsx40("polyline", { points: "16 9 13 12 16 15" })
|
|
9192
9336
|
] })
|
|
9193
9337
|
),
|
|
9194
9338
|
settings: mkIcon(
|
|
9195
|
-
/* @__PURE__ */ jsxs38(
|
|
9196
|
-
/* @__PURE__ */
|
|
9197
|
-
/* @__PURE__ */
|
|
9339
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9340
|
+
/* @__PURE__ */ jsx40("circle", { cx: "12", cy: "12", r: "3" }),
|
|
9341
|
+
/* @__PURE__ */ jsx40("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" })
|
|
9198
9342
|
] })
|
|
9199
9343
|
),
|
|
9200
9344
|
history: mkIcon(
|
|
9201
|
-
/* @__PURE__ */ jsxs38(
|
|
9202
|
-
/* @__PURE__ */
|
|
9203
|
-
/* @__PURE__ */
|
|
9204
|
-
/* @__PURE__ */
|
|
9345
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9346
|
+
/* @__PURE__ */ jsx40("path", { d: "M22 12A10 10 0 1 1 12 2" }),
|
|
9347
|
+
/* @__PURE__ */ jsx40("polyline", { points: "22 2 22 8 16 8" }),
|
|
9348
|
+
/* @__PURE__ */ jsx40("polyline", { points: "12 7 12 12 15 15" })
|
|
9205
9349
|
] })
|
|
9206
9350
|
),
|
|
9207
9351
|
debug: mkIcon(
|
|
9208
|
-
/* @__PURE__ */ jsxs38(
|
|
9209
|
-
/* @__PURE__ */
|
|
9210
|
-
/* @__PURE__ */
|
|
9352
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9353
|
+
/* @__PURE__ */ jsx40("polyline", { points: "4 17 10 11 4 5" }),
|
|
9354
|
+
/* @__PURE__ */ jsx40("line", { x1: "12", y1: "19", x2: "20", y2: "19" })
|
|
9211
9355
|
] })
|
|
9212
9356
|
),
|
|
9213
9357
|
zoomIn: mkIcon(
|
|
9214
|
-
/* @__PURE__ */ jsxs38(
|
|
9215
|
-
/* @__PURE__ */
|
|
9216
|
-
/* @__PURE__ */
|
|
9217
|
-
/* @__PURE__ */
|
|
9218
|
-
/* @__PURE__ */
|
|
9358
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9359
|
+
/* @__PURE__ */ jsx40("circle", { cx: "11", cy: "11", r: "7" }),
|
|
9360
|
+
/* @__PURE__ */ jsx40("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" }),
|
|
9361
|
+
/* @__PURE__ */ jsx40("line", { x1: "11", y1: "8", x2: "11", y2: "14" }),
|
|
9362
|
+
/* @__PURE__ */ jsx40("line", { x1: "8", y1: "11", x2: "14", y2: "11" })
|
|
9219
9363
|
] })
|
|
9220
9364
|
),
|
|
9221
9365
|
zoomOut: mkIcon(
|
|
9222
|
-
/* @__PURE__ */ jsxs38(
|
|
9223
|
-
/* @__PURE__ */
|
|
9224
|
-
/* @__PURE__ */
|
|
9225
|
-
/* @__PURE__ */
|
|
9366
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9367
|
+
/* @__PURE__ */ jsx40("circle", { cx: "11", cy: "11", r: "7" }),
|
|
9368
|
+
/* @__PURE__ */ jsx40("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" }),
|
|
9369
|
+
/* @__PURE__ */ jsx40("line", { x1: "8", y1: "11", x2: "14", y2: "11" })
|
|
9226
9370
|
] })
|
|
9227
9371
|
),
|
|
9228
9372
|
zoomReset: mkIcon(
|
|
9229
|
-
/* @__PURE__ */ jsxs38(
|
|
9230
|
-
/* @__PURE__ */
|
|
9231
|
-
/* @__PURE__ */
|
|
9232
|
-
/* @__PURE__ */
|
|
9233
|
-
/* @__PURE__ */
|
|
9373
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9374
|
+
/* @__PURE__ */ jsx40("circle", { cx: "11", cy: "11", r: "7" }),
|
|
9375
|
+
/* @__PURE__ */ jsx40("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" }),
|
|
9376
|
+
/* @__PURE__ */ jsx40("polyline", { points: "8 9 8 13 12 13" }),
|
|
9377
|
+
/* @__PURE__ */ jsx40("path", { d: "M14 8a4 4 0 0 1 0 6" })
|
|
9234
9378
|
] })
|
|
9235
9379
|
),
|
|
9236
9380
|
fit: mkIcon(
|
|
9237
|
-
/* @__PURE__ */ jsxs38(
|
|
9238
|
-
/* @__PURE__ */
|
|
9239
|
-
/* @__PURE__ */
|
|
9240
|
-
/* @__PURE__ */
|
|
9241
|
-
/* @__PURE__ */
|
|
9381
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9382
|
+
/* @__PURE__ */ jsx40("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }),
|
|
9383
|
+
/* @__PURE__ */ jsx40("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }),
|
|
9384
|
+
/* @__PURE__ */ jsx40("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }),
|
|
9385
|
+
/* @__PURE__ */ jsx40("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })
|
|
9386
|
+
] })
|
|
9387
|
+
),
|
|
9388
|
+
/**
|
|
9389
|
+
* Auto-layout glyph — a small directed-graph diagram (three connected
|
|
9390
|
+
* nodes) that reads as "graph layout". Lives inside this barrel so the
|
|
9391
|
+
* `<FlowToolbarAutoLayout>` button doesn't need an icon-pack import.
|
|
9392
|
+
* If the design system later adds a canonical icon to `@octaviaflow/icons`,
|
|
9393
|
+
* this can be swapped without breaking consumers.
|
|
9394
|
+
*/
|
|
9395
|
+
autoLayout: mkIcon(
|
|
9396
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9397
|
+
/* @__PURE__ */ jsx40("rect", { x: "2", y: "3", width: "6", height: "4", rx: "0.5" }),
|
|
9398
|
+
/* @__PURE__ */ jsx40("rect", { x: "9", y: "10", width: "6", height: "4", rx: "0.5" }),
|
|
9399
|
+
/* @__PURE__ */ jsx40("rect", { x: "16", y: "3", width: "6", height: "4", rx: "0.5" }),
|
|
9400
|
+
/* @__PURE__ */ jsx40("rect", { x: "9", y: "17", width: "6", height: "4", rx: "0.5" }),
|
|
9401
|
+
/* @__PURE__ */ jsx40("path", { d: "M5 7v3a2 2 0 0 0 2 2h2" }),
|
|
9402
|
+
/* @__PURE__ */ jsx40("path", { d: "M19 7v3a2 2 0 0 1-2 2h-2" }),
|
|
9403
|
+
/* @__PURE__ */ jsx40("path", { d: "M12 14v3" })
|
|
9404
|
+
] })
|
|
9405
|
+
),
|
|
9406
|
+
/** Checkmark — short-lived success indicator on the save button. */
|
|
9407
|
+
check: mkIcon(/* @__PURE__ */ jsx40("polyline", { points: "5 12 10 17 19 7" })),
|
|
9408
|
+
/** Filled exclamation — error indicator on the save button. */
|
|
9409
|
+
error: mkIcon(
|
|
9410
|
+
/* @__PURE__ */ jsxs38(Fragment13, { children: [
|
|
9411
|
+
/* @__PURE__ */ jsx40("circle", { cx: "12", cy: "12", r: "9" }),
|
|
9412
|
+
/* @__PURE__ */ jsx40("line", { x1: "12", y1: "8", x2: "12", y2: "13" }),
|
|
9413
|
+
/* @__PURE__ */ jsx40("circle", { cx: "12", cy: "16.5", r: "0.6", fill: "currentColor", stroke: "none" })
|
|
9242
9414
|
] })
|
|
9243
9415
|
)
|
|
9244
9416
|
};
|
|
9417
|
+
function FlowToolbarSave({
|
|
9418
|
+
state,
|
|
9419
|
+
loading,
|
|
9420
|
+
lastSavedAt,
|
|
9421
|
+
error,
|
|
9422
|
+
successDisplayMs = 1500,
|
|
9423
|
+
onSave,
|
|
9424
|
+
label = "Save",
|
|
9425
|
+
shortcut,
|
|
9426
|
+
showLabel = false,
|
|
9427
|
+
className
|
|
9428
|
+
}) {
|
|
9429
|
+
const [inferred, setInferred] = useState16("idle");
|
|
9430
|
+
const prevSavedAt = useRef20(lastSavedAt);
|
|
9431
|
+
const prevLoading = useRef20(loading);
|
|
9432
|
+
useEffect12(() => {
|
|
9433
|
+
if (state !== void 0) return;
|
|
9434
|
+
if (error) {
|
|
9435
|
+
setInferred("error");
|
|
9436
|
+
return;
|
|
9437
|
+
}
|
|
9438
|
+
if (loading) {
|
|
9439
|
+
setInferred("saving");
|
|
9440
|
+
prevLoading.current = true;
|
|
9441
|
+
return;
|
|
9442
|
+
}
|
|
9443
|
+
const becameSaved = prevLoading.current && !loading;
|
|
9444
|
+
const newSavedAt = lastSavedAt !== prevSavedAt.current && lastSavedAt !== void 0;
|
|
9445
|
+
if (becameSaved || newSavedAt) {
|
|
9446
|
+
setInferred("success");
|
|
9447
|
+
prevSavedAt.current = lastSavedAt;
|
|
9448
|
+
prevLoading.current = loading;
|
|
9449
|
+
const t = setTimeout(() => setInferred("idle"), successDisplayMs);
|
|
9450
|
+
return () => clearTimeout(t);
|
|
9451
|
+
}
|
|
9452
|
+
prevLoading.current = loading;
|
|
9453
|
+
}, [state, loading, lastSavedAt, error, successDisplayMs]);
|
|
9454
|
+
const resolved = state ?? inferred;
|
|
9455
|
+
const disabled = resolved === "saving";
|
|
9456
|
+
const icon = resolved === "saving" ? /* @__PURE__ */ jsx40(Spinner, { size: "sm" }) : resolved === "success" ? FlowToolbarIcons.check : resolved === "error" ? FlowToolbarIcons.error : FlowToolbarIcons.save;
|
|
9457
|
+
const tooltip = resolved === "saving" ? "Saving\u2026" : resolved === "success" ? "Saved" : resolved === "error" ? typeof error === "string" ? error : "Save failed" : label;
|
|
9458
|
+
return /* @__PURE__ */ jsx40(
|
|
9459
|
+
"span",
|
|
9460
|
+
{
|
|
9461
|
+
className: "ods-flow-toolbar__btn-wrapper",
|
|
9462
|
+
"data-tooltip": shortcut ? `${tooltip} (${shortcut})` : tooltip,
|
|
9463
|
+
children: /* @__PURE__ */ jsxs38(
|
|
9464
|
+
"button",
|
|
9465
|
+
{
|
|
9466
|
+
type: "button",
|
|
9467
|
+
className: cn(
|
|
9468
|
+
"ods-flow-toolbar__btn",
|
|
9469
|
+
`ods-flow-toolbar__btn--save-${resolved}`,
|
|
9470
|
+
resolved === "error" && "ods-flow-toolbar__btn--danger",
|
|
9471
|
+
className
|
|
9472
|
+
),
|
|
9473
|
+
onClick: disabled ? void 0 : onSave,
|
|
9474
|
+
disabled,
|
|
9475
|
+
"aria-label": tooltip,
|
|
9476
|
+
"aria-busy": resolved === "saving",
|
|
9477
|
+
title: shortcut ? `${tooltip} (${shortcut})` : tooltip,
|
|
9478
|
+
children: [
|
|
9479
|
+
/* @__PURE__ */ jsx40("span", { className: "ods-flow-toolbar__btn-icon", children: icon }),
|
|
9480
|
+
showLabel && /* @__PURE__ */ jsx40("span", { className: "ods-flow-toolbar__btn-label", children: resolved === "saving" ? "Saving\u2026" : label })
|
|
9481
|
+
]
|
|
9482
|
+
}
|
|
9483
|
+
)
|
|
9484
|
+
}
|
|
9485
|
+
);
|
|
9486
|
+
}
|
|
9487
|
+
function FlowToolbarRun({
|
|
9488
|
+
running = false,
|
|
9489
|
+
disabled = false,
|
|
9490
|
+
onRun,
|
|
9491
|
+
onStop,
|
|
9492
|
+
shortcut,
|
|
9493
|
+
className
|
|
9494
|
+
}) {
|
|
9495
|
+
return /* @__PURE__ */ jsx40(
|
|
9496
|
+
FlowToolbarButton,
|
|
9497
|
+
{
|
|
9498
|
+
icon: running ? FlowToolbarIcons.stop : FlowToolbarIcons.run,
|
|
9499
|
+
label: running ? "Stop" : "Run",
|
|
9500
|
+
onClick: running ? onStop : onRun,
|
|
9501
|
+
disabled,
|
|
9502
|
+
danger: running,
|
|
9503
|
+
shortcut,
|
|
9504
|
+
className
|
|
9505
|
+
}
|
|
9506
|
+
);
|
|
9507
|
+
}
|
|
9508
|
+
function FlowToolbarUndo({
|
|
9509
|
+
canUndo = true,
|
|
9510
|
+
onUndo,
|
|
9511
|
+
shortcut = "\u2318Z",
|
|
9512
|
+
className
|
|
9513
|
+
}) {
|
|
9514
|
+
return /* @__PURE__ */ jsx40(
|
|
9515
|
+
FlowToolbarButton,
|
|
9516
|
+
{
|
|
9517
|
+
icon: FlowToolbarIcons.undo,
|
|
9518
|
+
label: "Undo",
|
|
9519
|
+
onClick: onUndo,
|
|
9520
|
+
disabled: !canUndo,
|
|
9521
|
+
shortcut,
|
|
9522
|
+
className
|
|
9523
|
+
}
|
|
9524
|
+
);
|
|
9525
|
+
}
|
|
9526
|
+
function FlowToolbarRedo({
|
|
9527
|
+
canRedo = true,
|
|
9528
|
+
onRedo,
|
|
9529
|
+
shortcut = "\u2318\u21E7Z",
|
|
9530
|
+
className
|
|
9531
|
+
}) {
|
|
9532
|
+
return /* @__PURE__ */ jsx40(
|
|
9533
|
+
FlowToolbarButton,
|
|
9534
|
+
{
|
|
9535
|
+
icon: FlowToolbarIcons.redo,
|
|
9536
|
+
label: "Redo",
|
|
9537
|
+
onClick: onRedo,
|
|
9538
|
+
disabled: !canRedo,
|
|
9539
|
+
shortcut,
|
|
9540
|
+
className
|
|
9541
|
+
}
|
|
9542
|
+
);
|
|
9543
|
+
}
|
|
9544
|
+
function FlowToolbarAutoLayout({
|
|
9545
|
+
onAutoLayout,
|
|
9546
|
+
disabled = false,
|
|
9547
|
+
shortcut,
|
|
9548
|
+
className
|
|
9549
|
+
}) {
|
|
9550
|
+
return /* @__PURE__ */ jsx40(
|
|
9551
|
+
FlowToolbarButton,
|
|
9552
|
+
{
|
|
9553
|
+
icon: FlowToolbarIcons.autoLayout,
|
|
9554
|
+
label: "Auto-layout",
|
|
9555
|
+
tooltip: "Tidy the graph (auto-layout)",
|
|
9556
|
+
onClick: onAutoLayout,
|
|
9557
|
+
disabled,
|
|
9558
|
+
shortcut,
|
|
9559
|
+
className
|
|
9560
|
+
}
|
|
9561
|
+
);
|
|
9562
|
+
}
|
|
9563
|
+
function FlowToolbarFitView({
|
|
9564
|
+
onFit,
|
|
9565
|
+
disabled = false,
|
|
9566
|
+
shortcut = "\u2318.",
|
|
9567
|
+
className
|
|
9568
|
+
}) {
|
|
9569
|
+
return /* @__PURE__ */ jsx40(
|
|
9570
|
+
FlowToolbarButton,
|
|
9571
|
+
{
|
|
9572
|
+
icon: FlowToolbarIcons.fit,
|
|
9573
|
+
label: "Fit to view",
|
|
9574
|
+
onClick: onFit,
|
|
9575
|
+
disabled,
|
|
9576
|
+
shortcut,
|
|
9577
|
+
className
|
|
9578
|
+
}
|
|
9579
|
+
);
|
|
9580
|
+
}
|
|
9581
|
+
function FlowToolbarReset({
|
|
9582
|
+
onReset,
|
|
9583
|
+
disabled = false,
|
|
9584
|
+
shortcut = "\u23180",
|
|
9585
|
+
className
|
|
9586
|
+
}) {
|
|
9587
|
+
return /* @__PURE__ */ jsx40(
|
|
9588
|
+
FlowToolbarButton,
|
|
9589
|
+
{
|
|
9590
|
+
icon: FlowToolbarIcons.zoomReset,
|
|
9591
|
+
label: "Reset zoom",
|
|
9592
|
+
tooltip: "Reset zoom to 100%",
|
|
9593
|
+
onClick: onReset,
|
|
9594
|
+
disabled,
|
|
9595
|
+
shortcut,
|
|
9596
|
+
className
|
|
9597
|
+
}
|
|
9598
|
+
);
|
|
9599
|
+
}
|
|
9245
9600
|
function FlowToolbarZoom({
|
|
9246
9601
|
zoom,
|
|
9247
9602
|
onZoomIn,
|
|
@@ -9251,7 +9606,7 @@ function FlowToolbarZoom({
|
|
|
9251
9606
|
className
|
|
9252
9607
|
}) {
|
|
9253
9608
|
return /* @__PURE__ */ jsxs38("div", { className: cn("ods-flow-toolbar__zoom", className), children: [
|
|
9254
|
-
/* @__PURE__ */
|
|
9609
|
+
/* @__PURE__ */ jsx40(
|
|
9255
9610
|
FlowToolbarButton,
|
|
9256
9611
|
{
|
|
9257
9612
|
icon: FlowToolbarIcons.zoomIn,
|
|
@@ -9260,7 +9615,7 @@ function FlowToolbarZoom({
|
|
|
9260
9615
|
shortcut: "\u2318+"
|
|
9261
9616
|
}
|
|
9262
9617
|
),
|
|
9263
|
-
/* @__PURE__ */
|
|
9618
|
+
/* @__PURE__ */ jsx40(
|
|
9264
9619
|
FlowToolbarButton,
|
|
9265
9620
|
{
|
|
9266
9621
|
icon: FlowToolbarIcons.zoomOut,
|
|
@@ -9269,7 +9624,7 @@ function FlowToolbarZoom({
|
|
|
9269
9624
|
shortcut: "\u2318\u2212"
|
|
9270
9625
|
}
|
|
9271
9626
|
),
|
|
9272
|
-
onReset && /* @__PURE__ */
|
|
9627
|
+
onReset && /* @__PURE__ */ jsx40(
|
|
9273
9628
|
FlowToolbarButton,
|
|
9274
9629
|
{
|
|
9275
9630
|
icon: FlowToolbarIcons.zoomReset,
|
|
@@ -9279,7 +9634,7 @@ function FlowToolbarZoom({
|
|
|
9279
9634
|
shortcut: "\u23180"
|
|
9280
9635
|
}
|
|
9281
9636
|
),
|
|
9282
|
-
onFit && /* @__PURE__ */
|
|
9637
|
+
onFit && /* @__PURE__ */ jsx40(
|
|
9283
9638
|
FlowToolbarButton,
|
|
9284
9639
|
{
|
|
9285
9640
|
icon: FlowToolbarIcons.fit,
|
|
@@ -9304,7 +9659,7 @@ function FlowToolbarZoom({
|
|
|
9304
9659
|
}
|
|
9305
9660
|
|
|
9306
9661
|
// src/components/FormSection/FormSection.tsx
|
|
9307
|
-
import { jsx as
|
|
9662
|
+
import { jsx as jsx41, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
9308
9663
|
function FormSection({
|
|
9309
9664
|
title,
|
|
9310
9665
|
description,
|
|
@@ -9315,18 +9670,18 @@ function FormSection({
|
|
|
9315
9670
|
}) {
|
|
9316
9671
|
return /* @__PURE__ */ jsxs39("section", { className: cn("ods-form-section", divided && "ods-form-section--divided", className), children: [
|
|
9317
9672
|
(title || description) && /* @__PURE__ */ jsxs39("header", { className: "ods-form-section__head", children: [
|
|
9318
|
-
title && /* @__PURE__ */
|
|
9319
|
-
description && /* @__PURE__ */
|
|
9673
|
+
title && /* @__PURE__ */ jsx41("h3", { className: "ods-form-section__title", children: title }),
|
|
9674
|
+
description && /* @__PURE__ */ jsx41("p", { className: "ods-form-section__desc", children: description })
|
|
9320
9675
|
] }),
|
|
9321
|
-
/* @__PURE__ */
|
|
9322
|
-
footer && /* @__PURE__ */
|
|
9676
|
+
/* @__PURE__ */ jsx41("div", { className: "ods-form-section__body", children }),
|
|
9677
|
+
footer && /* @__PURE__ */ jsx41("footer", { className: "ods-form-section__footer", children: footer })
|
|
9323
9678
|
] });
|
|
9324
9679
|
}
|
|
9325
9680
|
|
|
9326
9681
|
// src/components/HoverCard/HoverCard.tsx
|
|
9327
|
-
import { useCallback as useCallback10, useEffect as
|
|
9682
|
+
import { useCallback as useCallback10, useEffect as useEffect13, useLayoutEffect as useLayoutEffect2, useRef as useRef21, useState as useState17 } from "react";
|
|
9328
9683
|
import { createPortal as createPortal5 } from "react-dom";
|
|
9329
|
-
import { Fragment as
|
|
9684
|
+
import { Fragment as Fragment14, jsx as jsx42, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
9330
9685
|
function computePosition(rect, panelRect, placement, offset) {
|
|
9331
9686
|
const cx = rect.left + rect.width / 2;
|
|
9332
9687
|
const cy = rect.top + rect.height / 2;
|
|
@@ -9350,12 +9705,12 @@ function HoverCard({
|
|
|
9350
9705
|
children,
|
|
9351
9706
|
className
|
|
9352
9707
|
}) {
|
|
9353
|
-
const [open, setOpen] =
|
|
9354
|
-
const triggerRef =
|
|
9355
|
-
const panelRef =
|
|
9356
|
-
const openTimer =
|
|
9357
|
-
const closeTimer =
|
|
9358
|
-
const [coords, setCoords] =
|
|
9708
|
+
const [open, setOpen] = useState17(false);
|
|
9709
|
+
const triggerRef = useRef21(null);
|
|
9710
|
+
const panelRef = useRef21(null);
|
|
9711
|
+
const openTimer = useRef21(null);
|
|
9712
|
+
const closeTimer = useRef21(null);
|
|
9713
|
+
const [coords, setCoords] = useState17(null);
|
|
9359
9714
|
const clearTimers = () => {
|
|
9360
9715
|
if (openTimer.current) {
|
|
9361
9716
|
clearTimeout(openTimer.current);
|
|
@@ -9366,7 +9721,7 @@ function HoverCard({
|
|
|
9366
9721
|
closeTimer.current = null;
|
|
9367
9722
|
}
|
|
9368
9723
|
};
|
|
9369
|
-
|
|
9724
|
+
useEffect13(() => () => clearTimers(), []);
|
|
9370
9725
|
const show = () => {
|
|
9371
9726
|
clearTimers();
|
|
9372
9727
|
openTimer.current = setTimeout(() => setOpen(true), openDelay);
|
|
@@ -9387,7 +9742,7 @@ function HoverCard({
|
|
|
9387
9742
|
const id = requestAnimationFrame(reposition);
|
|
9388
9743
|
return () => cancelAnimationFrame(id);
|
|
9389
9744
|
}, [open, reposition]);
|
|
9390
|
-
|
|
9745
|
+
useEffect13(() => {
|
|
9391
9746
|
if (!open) return;
|
|
9392
9747
|
const h = () => reposition();
|
|
9393
9748
|
window.addEventListener("scroll", h, true);
|
|
@@ -9397,7 +9752,7 @@ function HoverCard({
|
|
|
9397
9752
|
window.removeEventListener("resize", h);
|
|
9398
9753
|
};
|
|
9399
9754
|
}, [open, reposition]);
|
|
9400
|
-
const triggerEl = /* @__PURE__ */
|
|
9755
|
+
const triggerEl = /* @__PURE__ */ jsx42(
|
|
9401
9756
|
"span",
|
|
9402
9757
|
{
|
|
9403
9758
|
ref: triggerRef,
|
|
@@ -9410,7 +9765,7 @@ function HoverCard({
|
|
|
9410
9765
|
}
|
|
9411
9766
|
);
|
|
9412
9767
|
const portal = typeof document !== "undefined" && open ? createPortal5(
|
|
9413
|
-
/* @__PURE__ */
|
|
9768
|
+
/* @__PURE__ */ jsx42(
|
|
9414
9769
|
"div",
|
|
9415
9770
|
{
|
|
9416
9771
|
ref: panelRef,
|
|
@@ -9431,14 +9786,14 @@ function HoverCard({
|
|
|
9431
9786
|
),
|
|
9432
9787
|
document.body
|
|
9433
9788
|
) : null;
|
|
9434
|
-
return /* @__PURE__ */ jsxs40(
|
|
9789
|
+
return /* @__PURE__ */ jsxs40(Fragment14, { children: [
|
|
9435
9790
|
triggerEl,
|
|
9436
9791
|
portal
|
|
9437
9792
|
] });
|
|
9438
9793
|
}
|
|
9439
9794
|
|
|
9440
9795
|
// src/components/IconCard/IconCard.tsx
|
|
9441
|
-
import { jsx as
|
|
9796
|
+
import { jsx as jsx43, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
9442
9797
|
function IconCard({
|
|
9443
9798
|
variant = "default",
|
|
9444
9799
|
icon,
|
|
@@ -9462,12 +9817,12 @@ function IconCard({
|
|
|
9462
9817
|
role: interactive ? "button" : void 0,
|
|
9463
9818
|
tabIndex: interactive ? 0 : void 0,
|
|
9464
9819
|
children: [
|
|
9465
|
-
/* @__PURE__ */
|
|
9820
|
+
/* @__PURE__ */ jsx43("span", { className: "ods-icon-card__icon", "aria-hidden": "true", children: icon }),
|
|
9466
9821
|
/* @__PURE__ */ jsxs41("div", { className: "ods-icon-card__body", children: [
|
|
9467
|
-
/* @__PURE__ */
|
|
9468
|
-
description && /* @__PURE__ */
|
|
9822
|
+
/* @__PURE__ */ jsx43("div", { className: "ods-icon-card__title", children: title }),
|
|
9823
|
+
description && /* @__PURE__ */ jsx43("div", { className: "ods-icon-card__description", children: description })
|
|
9469
9824
|
] }),
|
|
9470
|
-
action && /* @__PURE__ */
|
|
9825
|
+
action && /* @__PURE__ */ jsx43("div", { className: "ods-icon-card__action", children: action })
|
|
9471
9826
|
]
|
|
9472
9827
|
}
|
|
9473
9828
|
);
|
|
@@ -9478,10 +9833,10 @@ import {
|
|
|
9478
9833
|
forwardRef as forwardRef2,
|
|
9479
9834
|
useId as useId6,
|
|
9480
9835
|
useImperativeHandle,
|
|
9481
|
-
useRef as
|
|
9836
|
+
useRef as useRef22
|
|
9482
9837
|
} from "react";
|
|
9483
|
-
import { jsx as
|
|
9484
|
-
var CLEAR_GLYPH = /* @__PURE__ */
|
|
9838
|
+
import { jsx as jsx44, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
9839
|
+
var CLEAR_GLYPH = /* @__PURE__ */ jsx44("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx44("path", { d: "m3 3 6 6M9 3l-6 6", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" }) });
|
|
9485
9840
|
var Input = forwardRef2(
|
|
9486
9841
|
({
|
|
9487
9842
|
type = "text",
|
|
@@ -9503,7 +9858,7 @@ var Input = forwardRef2(
|
|
|
9503
9858
|
onChange,
|
|
9504
9859
|
...props
|
|
9505
9860
|
}, forwardedRef) => {
|
|
9506
|
-
const innerRef =
|
|
9861
|
+
const innerRef = useRef22(null);
|
|
9507
9862
|
useImperativeHandle(forwardedRef, () => innerRef.current);
|
|
9508
9863
|
const reactId = useId6();
|
|
9509
9864
|
const inputId = id ?? `${reactId}-input`;
|
|
@@ -9539,10 +9894,10 @@ var Input = forwardRef2(
|
|
|
9539
9894
|
className
|
|
9540
9895
|
),
|
|
9541
9896
|
children: [
|
|
9542
|
-
label && /* @__PURE__ */
|
|
9897
|
+
label && /* @__PURE__ */ jsx44("label", { htmlFor: inputId, className: "ods-input__label", children: label }),
|
|
9543
9898
|
/* @__PURE__ */ jsxs42("div", { className: "ods-input__wrapper", children: [
|
|
9544
|
-
leftIcon && /* @__PURE__ */
|
|
9545
|
-
/* @__PURE__ */
|
|
9899
|
+
leftIcon && /* @__PURE__ */ jsx44("span", { className: "ods-input__icon--left", "aria-hidden": "true", children: leftIcon }),
|
|
9900
|
+
/* @__PURE__ */ jsx44(
|
|
9546
9901
|
"input",
|
|
9547
9902
|
{
|
|
9548
9903
|
...props,
|
|
@@ -9564,7 +9919,7 @@ var Input = forwardRef2(
|
|
|
9564
9919
|
}
|
|
9565
9920
|
),
|
|
9566
9921
|
/* @__PURE__ */ jsxs42("span", { className: "ods-input__right", children: [
|
|
9567
|
-
showClear && /* @__PURE__ */
|
|
9922
|
+
showClear && /* @__PURE__ */ jsx44(
|
|
9568
9923
|
"button",
|
|
9569
9924
|
{
|
|
9570
9925
|
type: "button",
|
|
@@ -9575,12 +9930,12 @@ var Input = forwardRef2(
|
|
|
9575
9930
|
children: CLEAR_GLYPH
|
|
9576
9931
|
}
|
|
9577
9932
|
),
|
|
9578
|
-
shortcutHint && !showClear && /* @__PURE__ */
|
|
9579
|
-
rightIcon && !showClear && !shortcutHint && /* @__PURE__ */
|
|
9933
|
+
shortcutHint && !showClear && /* @__PURE__ */ jsx44("span", { className: "ods-input__kbd", "aria-hidden": "true", children: shortcutHint }),
|
|
9934
|
+
rightIcon && !showClear && !shortcutHint && /* @__PURE__ */ jsx44("span", { className: "ods-input__icon--right", "aria-hidden": "true", children: rightIcon })
|
|
9580
9935
|
] })
|
|
9581
9936
|
] }),
|
|
9582
|
-
error && errorMessage && /* @__PURE__ */
|
|
9583
|
-
!error && helperText && /* @__PURE__ */
|
|
9937
|
+
error && errorMessage && /* @__PURE__ */ jsx44("div", { id: errorId, className: "ods-input__error-message", role: "alert", children: errorMessage }),
|
|
9938
|
+
!error && helperText && /* @__PURE__ */ jsx44("div", { id: helperId, className: "ods-input__helper", children: helperText })
|
|
9584
9939
|
]
|
|
9585
9940
|
}
|
|
9586
9941
|
);
|
|
@@ -9589,8 +9944,8 @@ var Input = forwardRef2(
|
|
|
9589
9944
|
Input.displayName = "Input";
|
|
9590
9945
|
|
|
9591
9946
|
// src/components/JsonViewer/JsonViewer.tsx
|
|
9592
|
-
import { useMemo as useMemo10, useState as
|
|
9593
|
-
import { Fragment as
|
|
9947
|
+
import { useMemo as useMemo10, useState as useState18 } from "react";
|
|
9948
|
+
import { Fragment as Fragment15, jsx as jsx45, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
9594
9949
|
var VARIANT = {
|
|
9595
9950
|
string: "string",
|
|
9596
9951
|
number: "number",
|
|
@@ -9609,10 +9964,10 @@ function JsonViewer({
|
|
|
9609
9964
|
}) {
|
|
9610
9965
|
return /* @__PURE__ */ jsxs43("div", { className: cn("ods-json-viewer", className), children: [
|
|
9611
9966
|
(title || status) && /* @__PURE__ */ jsxs43("div", { className: "ods-json-viewer__head", children: [
|
|
9612
|
-
title && /* @__PURE__ */
|
|
9613
|
-
status && /* @__PURE__ */
|
|
9967
|
+
title && /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__title", children: title }),
|
|
9968
|
+
status && /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__status", children: status })
|
|
9614
9969
|
] }),
|
|
9615
|
-
/* @__PURE__ */
|
|
9970
|
+
/* @__PURE__ */ jsx45("div", { className: "ods-json-viewer__body", children: /* @__PURE__ */ jsx45(
|
|
9616
9971
|
JsonNode,
|
|
9617
9972
|
{
|
|
9618
9973
|
value: data,
|
|
@@ -9635,24 +9990,24 @@ function JsonNode({
|
|
|
9635
9990
|
truncateAt,
|
|
9636
9991
|
isLast = true
|
|
9637
9992
|
}) {
|
|
9638
|
-
const [open, setOpen] =
|
|
9993
|
+
const [open, setOpen] = useState18(depth < defaultExpandDepth);
|
|
9639
9994
|
const isObject = value !== null && typeof value === "object" && !Array.isArray(value);
|
|
9640
9995
|
const isArray = Array.isArray(value);
|
|
9641
9996
|
const isContainer = isObject || isArray;
|
|
9642
9997
|
const renderKey = useMemo10(() => {
|
|
9643
9998
|
if (name === void 0) return null;
|
|
9644
9999
|
if (typeof name === "number") {
|
|
9645
|
-
return showIndexes ? /* @__PURE__ */
|
|
10000
|
+
return showIndexes ? /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__key ods-json-viewer__key--index", children: name }) : null;
|
|
9646
10001
|
}
|
|
9647
|
-
return /* @__PURE__ */
|
|
10002
|
+
return /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__key", children: `"${name}"` });
|
|
9648
10003
|
}, [name, showIndexes]);
|
|
9649
10004
|
if (!isContainer) {
|
|
9650
10005
|
return /* @__PURE__ */ jsxs43("div", { className: "ods-json-viewer__row", style: { paddingLeft: depth * 14 }, children: [
|
|
9651
|
-
/* @__PURE__ */
|
|
10006
|
+
/* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__caret-spacer" }),
|
|
9652
10007
|
renderKey,
|
|
9653
|
-
renderKey != null && /* @__PURE__ */
|
|
9654
|
-
/* @__PURE__ */
|
|
9655
|
-
!isLast && /* @__PURE__ */
|
|
10008
|
+
renderKey != null && /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__colon", children: ":" }),
|
|
10009
|
+
/* @__PURE__ */ jsx45(Leaf, { value, truncateAt, copyable }),
|
|
10010
|
+
!isLast && /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__comma", children: "," })
|
|
9656
10011
|
] });
|
|
9657
10012
|
}
|
|
9658
10013
|
const entries = isArray ? value.map((v, i) => [i, v]) : Object.entries(value);
|
|
@@ -9666,7 +10021,7 @@ function JsonNode({
|
|
|
9666
10021
|
style: { paddingLeft: depth * 14 },
|
|
9667
10022
|
onClick: () => setOpen((o) => !o),
|
|
9668
10023
|
children: [
|
|
9669
|
-
/* @__PURE__ */
|
|
10024
|
+
/* @__PURE__ */ jsx45(
|
|
9670
10025
|
"button",
|
|
9671
10026
|
{
|
|
9672
10027
|
type: "button",
|
|
@@ -9677,7 +10032,7 @@ function JsonNode({
|
|
|
9677
10032
|
e.stopPropagation();
|
|
9678
10033
|
setOpen((o) => !o);
|
|
9679
10034
|
},
|
|
9680
|
-
children: /* @__PURE__ */
|
|
10035
|
+
children: /* @__PURE__ */ jsx45("svg", { width: "8", height: "8", viewBox: "0 0 8 8", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx45(
|
|
9681
10036
|
"path",
|
|
9682
10037
|
{
|
|
9683
10038
|
d: "M3 2 5 4 3 6",
|
|
@@ -9690,18 +10045,18 @@ function JsonNode({
|
|
|
9690
10045
|
}
|
|
9691
10046
|
),
|
|
9692
10047
|
renderKey,
|
|
9693
|
-
renderKey != null && /* @__PURE__ */
|
|
9694
|
-
/* @__PURE__ */
|
|
9695
|
-
!open && /* @__PURE__ */ jsxs43(
|
|
9696
|
-
/* @__PURE__ */
|
|
9697
|
-
/* @__PURE__ */
|
|
10048
|
+
renderKey != null && /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__colon", children: ":" }),
|
|
10049
|
+
/* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__bracket", children: openBracket }),
|
|
10050
|
+
!open && /* @__PURE__ */ jsxs43(Fragment15, { children: [
|
|
10051
|
+
/* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__preview", children: isArray ? entries.length === 0 ? "" : `${entries.length} item${entries.length === 1 ? "" : "s"}` : entries.length === 0 ? "" : `${entries.length} key${entries.length === 1 ? "" : "s"}` }),
|
|
10052
|
+
/* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__bracket", children: closeBracket })
|
|
9698
10053
|
] }),
|
|
9699
|
-
!isLast && !open && /* @__PURE__ */
|
|
10054
|
+
!isLast && !open && /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__comma", children: "," })
|
|
9700
10055
|
]
|
|
9701
10056
|
}
|
|
9702
10057
|
),
|
|
9703
|
-
open && /* @__PURE__ */ jsxs43(
|
|
9704
|
-
entries.map(([k, v], i) => /* @__PURE__ */
|
|
10058
|
+
open && /* @__PURE__ */ jsxs43(Fragment15, { children: [
|
|
10059
|
+
entries.map(([k, v], i) => /* @__PURE__ */ jsx45(
|
|
9705
10060
|
JsonNode,
|
|
9706
10061
|
{
|
|
9707
10062
|
name: isArray ? k : k,
|
|
@@ -9721,9 +10076,9 @@ function JsonNode({
|
|
|
9721
10076
|
className: "ods-json-viewer__row ods-json-viewer__row--close",
|
|
9722
10077
|
style: { paddingLeft: depth * 14 },
|
|
9723
10078
|
children: [
|
|
9724
|
-
/* @__PURE__ */
|
|
9725
|
-
/* @__PURE__ */
|
|
9726
|
-
!isLast && /* @__PURE__ */
|
|
10079
|
+
/* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__caret-spacer" }),
|
|
10080
|
+
/* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__bracket", children: closeBracket }),
|
|
10081
|
+
!isLast && /* @__PURE__ */ jsx45("span", { className: "ods-json-viewer__comma", children: "," })
|
|
9727
10082
|
]
|
|
9728
10083
|
}
|
|
9729
10084
|
)
|
|
@@ -9762,8 +10117,8 @@ function Leaf({
|
|
|
9762
10117
|
}
|
|
9763
10118
|
};
|
|
9764
10119
|
return /* @__PURE__ */ jsxs43("span", { className: cn("ods-json-viewer__value", `ods-json-viewer__value--${VARIANT[variant]}`), children: [
|
|
9765
|
-
/* @__PURE__ */
|
|
9766
|
-
copyable && /* @__PURE__ */
|
|
10120
|
+
/* @__PURE__ */ jsx45("span", { children: display }),
|
|
10121
|
+
copyable && /* @__PURE__ */ jsx45(
|
|
9767
10122
|
"button",
|
|
9768
10123
|
{
|
|
9769
10124
|
type: "button",
|
|
@@ -9774,8 +10129,8 @@ function Leaf({
|
|
|
9774
10129
|
},
|
|
9775
10130
|
"aria-label": "Copy value",
|
|
9776
10131
|
children: /* @__PURE__ */ jsxs43("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": "true", children: [
|
|
9777
|
-
/* @__PURE__ */
|
|
9778
|
-
/* @__PURE__ */
|
|
10132
|
+
/* @__PURE__ */ jsx45("rect", { x: "2", y: "2", width: "6", height: "6", rx: "1", stroke: "currentColor", strokeWidth: "1.2" }),
|
|
10133
|
+
/* @__PURE__ */ jsx45("path", { d: "M3.5 0.5h5v5", stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round" })
|
|
9779
10134
|
] })
|
|
9780
10135
|
}
|
|
9781
10136
|
)
|
|
@@ -9783,7 +10138,7 @@ function Leaf({
|
|
|
9783
10138
|
}
|
|
9784
10139
|
|
|
9785
10140
|
// src/components/KanbanCard/KanbanCard.tsx
|
|
9786
|
-
import { jsx as
|
|
10141
|
+
import { jsx as jsx46, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
9787
10142
|
function KanbanCard({
|
|
9788
10143
|
title,
|
|
9789
10144
|
tag,
|
|
@@ -9808,8 +10163,8 @@ function KanbanCard({
|
|
|
9808
10163
|
),
|
|
9809
10164
|
children: [
|
|
9810
10165
|
tag && /* @__PURE__ */ jsxs44("div", { className: "ods-kanban-card__head", children: [
|
|
9811
|
-
/* @__PURE__ */
|
|
9812
|
-
/* @__PURE__ */
|
|
10166
|
+
/* @__PURE__ */ jsx46("span", { className: "ods-kanban-card__tag", children: tag }),
|
|
10167
|
+
/* @__PURE__ */ jsx46(
|
|
9813
10168
|
"button",
|
|
9814
10169
|
{
|
|
9815
10170
|
type: "button",
|
|
@@ -9817,19 +10172,19 @@ function KanbanCard({
|
|
|
9817
10172
|
"aria-label": "More options",
|
|
9818
10173
|
onClick: (e) => e.stopPropagation(),
|
|
9819
10174
|
children: /* @__PURE__ */ jsxs44("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: [
|
|
9820
|
-
/* @__PURE__ */
|
|
9821
|
-
/* @__PURE__ */
|
|
9822
|
-
/* @__PURE__ */
|
|
10175
|
+
/* @__PURE__ */ jsx46("circle", { cx: "3", cy: "7", r: "1.2", fill: "currentColor" }),
|
|
10176
|
+
/* @__PURE__ */ jsx46("circle", { cx: "7", cy: "7", r: "1.2", fill: "currentColor" }),
|
|
10177
|
+
/* @__PURE__ */ jsx46("circle", { cx: "11", cy: "7", r: "1.2", fill: "currentColor" })
|
|
9823
10178
|
] })
|
|
9824
10179
|
}
|
|
9825
10180
|
)
|
|
9826
10181
|
] }),
|
|
9827
|
-
/* @__PURE__ */
|
|
10182
|
+
/* @__PURE__ */ jsx46("div", { className: "ods-kanban-card__title", children: title }),
|
|
9828
10183
|
/* @__PURE__ */ jsxs44("div", { className: "ods-kanban-card__footer", children: [
|
|
9829
10184
|
/* @__PURE__ */ jsxs44("div", { className: "ods-kanban-card__meta", children: [
|
|
9830
10185
|
date && /* @__PURE__ */ jsxs44("span", { className: "ods-kanban-card__date", children: [
|
|
9831
10186
|
/* @__PURE__ */ jsxs44("svg", { width: "11", height: "11", viewBox: "0 0 11 11", fill: "none", "aria-hidden": "true", children: [
|
|
9832
|
-
/* @__PURE__ */
|
|
10187
|
+
/* @__PURE__ */ jsx46(
|
|
9833
10188
|
"rect",
|
|
9834
10189
|
{
|
|
9835
10190
|
x: "1.5",
|
|
@@ -9841,7 +10196,7 @@ function KanbanCard({
|
|
|
9841
10196
|
strokeWidth: "1.2"
|
|
9842
10197
|
}
|
|
9843
10198
|
),
|
|
9844
|
-
/* @__PURE__ */
|
|
10199
|
+
/* @__PURE__ */ jsx46(
|
|
9845
10200
|
"path",
|
|
9846
10201
|
{
|
|
9847
10202
|
d: "M3.5 1.5v2M7.5 1.5v2M1.5 4.5h8",
|
|
@@ -9854,7 +10209,7 @@ function KanbanCard({
|
|
|
9854
10209
|
date
|
|
9855
10210
|
] }),
|
|
9856
10211
|
typeof comments === "number" && /* @__PURE__ */ jsxs44("span", { className: "ods-kanban-card__comments", children: [
|
|
9857
|
-
/* @__PURE__ */
|
|
10212
|
+
/* @__PURE__ */ jsx46("svg", { width: "11", height: "11", viewBox: "0 0 11 11", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx46(
|
|
9858
10213
|
"path",
|
|
9859
10214
|
{
|
|
9860
10215
|
d: "M2 3a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H6l-2 2v-2H3a1 1 0 0 1-1-1V3z",
|
|
@@ -9865,7 +10220,7 @@ function KanbanCard({
|
|
|
9865
10220
|
comments
|
|
9866
10221
|
] })
|
|
9867
10222
|
] }),
|
|
9868
|
-
assignee && /* @__PURE__ */
|
|
10223
|
+
assignee && /* @__PURE__ */ jsx46("div", { className: "ods-kanban-card__assignee", children: assignee })
|
|
9869
10224
|
] })
|
|
9870
10225
|
]
|
|
9871
10226
|
}
|
|
@@ -9873,19 +10228,19 @@ function KanbanCard({
|
|
|
9873
10228
|
}
|
|
9874
10229
|
|
|
9875
10230
|
// src/components/Kbd/Kbd.tsx
|
|
9876
|
-
import { jsx as
|
|
10231
|
+
import { jsx as jsx47, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
9877
10232
|
function Kbd({ size = "md", children, className }) {
|
|
9878
|
-
return /* @__PURE__ */
|
|
10233
|
+
return /* @__PURE__ */ jsx47("kbd", { className: cn("ods-kbd", `ods-kbd--${size}`, className), children });
|
|
9879
10234
|
}
|
|
9880
10235
|
function KbdGroup({ size = "md", separator = "+", keys, className }) {
|
|
9881
|
-
return /* @__PURE__ */
|
|
9882
|
-
/* @__PURE__ */
|
|
9883
|
-
i < keys.length - 1 && /* @__PURE__ */
|
|
10236
|
+
return /* @__PURE__ */ jsx47("span", { className: cn("ods-kbd-group", className), children: keys.map((k, i) => /* @__PURE__ */ jsxs45("span", { className: "ods-kbd-group__item", children: [
|
|
10237
|
+
/* @__PURE__ */ jsx47(Kbd, { size, children: k }),
|
|
10238
|
+
i < keys.length - 1 && /* @__PURE__ */ jsx47("span", { className: "ods-kbd-group__sep", "aria-hidden": "true", children: separator })
|
|
9884
10239
|
] }, i)) });
|
|
9885
10240
|
}
|
|
9886
10241
|
|
|
9887
10242
|
// src/components/LineChart/LineChart.tsx
|
|
9888
|
-
import { jsx as
|
|
10243
|
+
import { jsx as jsx48, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
9889
10244
|
function buildPath(points, smooth) {
|
|
9890
10245
|
if (points.length === 0) return "";
|
|
9891
10246
|
if (!smooth) {
|
|
@@ -9931,8 +10286,8 @@ function LineChart({
|
|
|
9931
10286
|
const areaPath = fill && pts.length ? `${path} L${pts[pts.length - 1][0]},${H - pad2} L${pts[0][0]},${H - pad2} Z` : null;
|
|
9932
10287
|
return /* @__PURE__ */ jsxs46("div", { className: cn("ods-line-chart", className), children: [
|
|
9933
10288
|
(title || total) && /* @__PURE__ */ jsxs46("div", { className: "ods-line-chart__head", children: [
|
|
9934
|
-
title && /* @__PURE__ */
|
|
9935
|
-
total && /* @__PURE__ */
|
|
10289
|
+
title && /* @__PURE__ */ jsx48("div", { className: "ods-line-chart__title", children: title }),
|
|
10290
|
+
total && /* @__PURE__ */ jsx48("div", { className: "ods-line-chart__total", children: total })
|
|
9936
10291
|
] }),
|
|
9937
10292
|
/* @__PURE__ */ jsxs46(
|
|
9938
10293
|
"svg",
|
|
@@ -9942,8 +10297,8 @@ function LineChart({
|
|
|
9942
10297
|
preserveAspectRatio: "none",
|
|
9943
10298
|
style: { height },
|
|
9944
10299
|
children: [
|
|
9945
|
-
areaPath && /* @__PURE__ */
|
|
9946
|
-
/* @__PURE__ */
|
|
10300
|
+
areaPath && /* @__PURE__ */ jsx48("path", { d: areaPath, fill }),
|
|
10301
|
+
/* @__PURE__ */ jsx48(
|
|
9947
10302
|
"path",
|
|
9948
10303
|
{
|
|
9949
10304
|
d: path,
|
|
@@ -9961,7 +10316,7 @@ function LineChart({
|
|
|
9961
10316
|
}
|
|
9962
10317
|
|
|
9963
10318
|
// src/components/LinkButton/LinkButton.tsx
|
|
9964
|
-
import { jsx as
|
|
10319
|
+
import { jsx as jsx49, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
9965
10320
|
function LinkButton({
|
|
9966
10321
|
variant = "primary",
|
|
9967
10322
|
size = "md",
|
|
@@ -9984,9 +10339,9 @@ function LinkButton({
|
|
|
9984
10339
|
className
|
|
9985
10340
|
),
|
|
9986
10341
|
children: [
|
|
9987
|
-
leftIcon && /* @__PURE__ */
|
|
9988
|
-
/* @__PURE__ */
|
|
9989
|
-
rightIcon && /* @__PURE__ */
|
|
10342
|
+
leftIcon && /* @__PURE__ */ jsx49("span", { className: "ods-link-btn__icon ods-link-btn__icon--left", "aria-hidden": "true", children: leftIcon }),
|
|
10343
|
+
/* @__PURE__ */ jsx49("span", { className: "ods-link-btn__label", children }),
|
|
10344
|
+
rightIcon && /* @__PURE__ */ jsx49("span", { className: "ods-link-btn__icon ods-link-btn__icon--right", "aria-hidden": "true", children: rightIcon })
|
|
9990
10345
|
]
|
|
9991
10346
|
}
|
|
9992
10347
|
);
|
|
@@ -9996,14 +10351,14 @@ function LinkButton({
|
|
|
9996
10351
|
import { AnimatePresence as AnimatePresence6, motion as motion9 } from "framer-motion";
|
|
9997
10352
|
import {
|
|
9998
10353
|
useCallback as useCallback11,
|
|
9999
|
-
useEffect as
|
|
10354
|
+
useEffect as useEffect14,
|
|
10000
10355
|
useLayoutEffect as useLayoutEffect3,
|
|
10001
10356
|
useMemo as useMemo11,
|
|
10002
|
-
useRef as
|
|
10003
|
-
useState as
|
|
10357
|
+
useRef as useRef23,
|
|
10358
|
+
useState as useState19
|
|
10004
10359
|
} from "react";
|
|
10005
10360
|
import { createPortal as createPortal6 } from "react-dom";
|
|
10006
|
-
import { jsx as
|
|
10361
|
+
import { jsx as jsx50, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
10007
10362
|
var RESERVED_TAIL_PX = 64;
|
|
10008
10363
|
var TAGS_GAP = 6;
|
|
10009
10364
|
function MultiSelect({
|
|
@@ -10023,17 +10378,17 @@ function MultiSelect({
|
|
|
10023
10378
|
maxTags,
|
|
10024
10379
|
className
|
|
10025
10380
|
}) {
|
|
10026
|
-
const [internalValue, setInternalValue] =
|
|
10381
|
+
const [internalValue, setInternalValue] = useState19(defaultValue ?? []);
|
|
10027
10382
|
const selectedValues = controlledValue ?? internalValue;
|
|
10028
|
-
const [open, setOpen] =
|
|
10029
|
-
const [query, setQuery] =
|
|
10030
|
-
const [activeIdx, setActiveIdx] =
|
|
10031
|
-
const [dropdownPos, setDropdownPos] =
|
|
10032
|
-
const wrapRef =
|
|
10033
|
-
const tagsRowRef =
|
|
10034
|
-
const searchRef =
|
|
10035
|
-
const dropdownRef =
|
|
10036
|
-
const chipRefs =
|
|
10383
|
+
const [open, setOpen] = useState19(false);
|
|
10384
|
+
const [query, setQuery] = useState19("");
|
|
10385
|
+
const [activeIdx, setActiveIdx] = useState19(0);
|
|
10386
|
+
const [dropdownPos, setDropdownPos] = useState19({ top: 0, left: 0, width: 0 });
|
|
10387
|
+
const wrapRef = useRef23(null);
|
|
10388
|
+
const tagsRowRef = useRef23(null);
|
|
10389
|
+
const searchRef = useRef23(null);
|
|
10390
|
+
const dropdownRef = useRef23(null);
|
|
10391
|
+
const chipRefs = useRef23([]);
|
|
10037
10392
|
const commit = useCallback11(
|
|
10038
10393
|
(next) => {
|
|
10039
10394
|
if (controlledValue === void 0) setInternalValue(next);
|
|
@@ -10058,7 +10413,7 @@ function MultiSelect({
|
|
|
10058
10413
|
const rect = wrapRef.current.getBoundingClientRect();
|
|
10059
10414
|
setDropdownPos({ top: rect.bottom + 4, left: rect.left, width: rect.width });
|
|
10060
10415
|
}, []);
|
|
10061
|
-
|
|
10416
|
+
useEffect14(() => {
|
|
10062
10417
|
if (!open) return;
|
|
10063
10418
|
updatePosition();
|
|
10064
10419
|
window.addEventListener("scroll", updatePosition, true);
|
|
@@ -10068,7 +10423,7 @@ function MultiSelect({
|
|
|
10068
10423
|
window.removeEventListener("resize", updatePosition);
|
|
10069
10424
|
};
|
|
10070
10425
|
}, [open, updatePosition]);
|
|
10071
|
-
|
|
10426
|
+
useEffect14(() => {
|
|
10072
10427
|
if (!open) return;
|
|
10073
10428
|
const onDoc = (e) => {
|
|
10074
10429
|
const t = e.target;
|
|
@@ -10080,14 +10435,14 @@ function MultiSelect({
|
|
|
10080
10435
|
document.addEventListener("mousedown", onDoc);
|
|
10081
10436
|
return () => document.removeEventListener("mousedown", onDoc);
|
|
10082
10437
|
}, [open]);
|
|
10083
|
-
|
|
10438
|
+
useEffect14(() => {
|
|
10084
10439
|
if (open && showSearch) {
|
|
10085
10440
|
requestAnimationFrame(() => searchRef.current?.focus());
|
|
10086
10441
|
}
|
|
10087
10442
|
}, [open, showSearch]);
|
|
10088
|
-
|
|
10089
|
-
const [fitCount, setFitCount] =
|
|
10090
|
-
const [tick, setTick] =
|
|
10443
|
+
useEffect14(() => setActiveIdx(0), [query, open]);
|
|
10444
|
+
const [fitCount, setFitCount] = useState19(selectedValues.length);
|
|
10445
|
+
const [tick, setTick] = useState19(0);
|
|
10091
10446
|
useLayoutEffect3(() => {
|
|
10092
10447
|
if (maxVisibleTags !== void 0) {
|
|
10093
10448
|
setFitCount(Math.min(selectedValues.length, maxVisibleTags));
|
|
@@ -10114,7 +10469,7 @@ function MultiSelect({
|
|
|
10114
10469
|
if (count < selectedValues.length && count > 0) count = Math.max(1, count - 1);
|
|
10115
10470
|
setFitCount(count);
|
|
10116
10471
|
}, [tick, selectedValues, maxVisibleTags]);
|
|
10117
|
-
|
|
10472
|
+
useEffect14(() => {
|
|
10118
10473
|
if (typeof ResizeObserver === "undefined") return;
|
|
10119
10474
|
const row = tagsRowRef.current;
|
|
10120
10475
|
if (!row) return;
|
|
@@ -10186,7 +10541,7 @@ function MultiSelect({
|
|
|
10186
10541
|
className
|
|
10187
10542
|
),
|
|
10188
10543
|
children: [
|
|
10189
|
-
label && /* @__PURE__ */
|
|
10544
|
+
label && /* @__PURE__ */ jsx50("label", { className: "ods-multiselect__label", children: label }),
|
|
10190
10545
|
/* @__PURE__ */ jsxs48(
|
|
10191
10546
|
"div",
|
|
10192
10547
|
{
|
|
@@ -10199,7 +10554,7 @@ function MultiSelect({
|
|
|
10199
10554
|
onClick: () => !disabled && setOpen(true),
|
|
10200
10555
|
children: [
|
|
10201
10556
|
/* @__PURE__ */ jsxs48("div", { ref: tagsRowRef, className: "ods-multiselect__tags", children: [
|
|
10202
|
-
/* @__PURE__ */
|
|
10557
|
+
/* @__PURE__ */ jsx50("div", { className: "ods-multiselect__measure", "aria-hidden": "true", children: selectedValues.map((val, i) => /* @__PURE__ */ jsxs48(
|
|
10203
10558
|
"span",
|
|
10204
10559
|
{
|
|
10205
10560
|
ref: (el) => {
|
|
@@ -10207,17 +10562,17 @@ function MultiSelect({
|
|
|
10207
10562
|
},
|
|
10208
10563
|
className: "ods-multiselect__tag",
|
|
10209
10564
|
children: [
|
|
10210
|
-
getIcon(val) && /* @__PURE__ */
|
|
10211
|
-
/* @__PURE__ */
|
|
10212
|
-
/* @__PURE__ */
|
|
10565
|
+
getIcon(val) && /* @__PURE__ */ jsx50("span", { className: "ods-multiselect__tag-icon", children: getIcon(val) }),
|
|
10566
|
+
/* @__PURE__ */ jsx50("span", { children: getLabel(val) }),
|
|
10567
|
+
/* @__PURE__ */ jsx50("span", { className: "ods-multiselect__tag-remove-spacer", "aria-hidden": "true" })
|
|
10213
10568
|
]
|
|
10214
10569
|
},
|
|
10215
10570
|
val
|
|
10216
10571
|
)) }),
|
|
10217
10572
|
visibleChips.map((val) => /* @__PURE__ */ jsxs48("span", { className: "ods-multiselect__tag", children: [
|
|
10218
|
-
getIcon(val) && /* @__PURE__ */
|
|
10219
|
-
/* @__PURE__ */
|
|
10220
|
-
/* @__PURE__ */
|
|
10573
|
+
getIcon(val) && /* @__PURE__ */ jsx50("span", { className: "ods-multiselect__tag-icon", children: getIcon(val) }),
|
|
10574
|
+
/* @__PURE__ */ jsx50("span", { children: getLabel(val) }),
|
|
10575
|
+
/* @__PURE__ */ jsx50(
|
|
10221
10576
|
"button",
|
|
10222
10577
|
{
|
|
10223
10578
|
type: "button",
|
|
@@ -10228,7 +10583,7 @@ function MultiSelect({
|
|
|
10228
10583
|
},
|
|
10229
10584
|
"aria-label": `Remove ${getLabel(val)}`,
|
|
10230
10585
|
tabIndex: -1,
|
|
10231
|
-
children: /* @__PURE__ */
|
|
10586
|
+
children: /* @__PURE__ */ jsx50("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx50(
|
|
10232
10587
|
"path",
|
|
10233
10588
|
{
|
|
10234
10589
|
d: "M3 3L9 9M9 3L3 9",
|
|
@@ -10251,9 +10606,9 @@ function MultiSelect({
|
|
|
10251
10606
|
]
|
|
10252
10607
|
}
|
|
10253
10608
|
),
|
|
10254
|
-
selectedValues.length === 0 && /* @__PURE__ */
|
|
10609
|
+
selectedValues.length === 0 && /* @__PURE__ */ jsx50("span", { className: "ods-multiselect__placeholder", children: placeholder })
|
|
10255
10610
|
] }),
|
|
10256
|
-
/* @__PURE__ */
|
|
10611
|
+
/* @__PURE__ */ jsx50(
|
|
10257
10612
|
"svg",
|
|
10258
10613
|
{
|
|
10259
10614
|
width: "16",
|
|
@@ -10262,7 +10617,7 @@ function MultiSelect({
|
|
|
10262
10617
|
fill: "none",
|
|
10263
10618
|
"aria-hidden": "true",
|
|
10264
10619
|
className: cn("ods-multiselect__chevron", open && "ods-multiselect__chevron--open"),
|
|
10265
|
-
children: /* @__PURE__ */
|
|
10620
|
+
children: /* @__PURE__ */ jsx50(
|
|
10266
10621
|
"path",
|
|
10267
10622
|
{
|
|
10268
10623
|
d: "M4 6l4 4 4-4",
|
|
@@ -10274,7 +10629,7 @@ function MultiSelect({
|
|
|
10274
10629
|
)
|
|
10275
10630
|
}
|
|
10276
10631
|
),
|
|
10277
|
-
selectedValues.length > 0 && !disabled && /* @__PURE__ */
|
|
10632
|
+
selectedValues.length > 0 && !disabled && /* @__PURE__ */ jsx50(
|
|
10278
10633
|
"button",
|
|
10279
10634
|
{
|
|
10280
10635
|
type: "button",
|
|
@@ -10292,7 +10647,7 @@ function MultiSelect({
|
|
|
10292
10647
|
}
|
|
10293
10648
|
),
|
|
10294
10649
|
typeof document !== "undefined" && createPortal6(
|
|
10295
|
-
/* @__PURE__ */
|
|
10650
|
+
/* @__PURE__ */ jsx50(AnimatePresence6, { children: open && /* @__PURE__ */ jsxs48(
|
|
10296
10651
|
motion9.div,
|
|
10297
10652
|
{
|
|
10298
10653
|
ref: dropdownRef,
|
|
@@ -10312,8 +10667,8 @@ function MultiSelect({
|
|
|
10312
10667
|
children: [
|
|
10313
10668
|
showSearch && /* @__PURE__ */ jsxs48("div", { className: "ods-multiselect__search", children: [
|
|
10314
10669
|
/* @__PURE__ */ jsxs48("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: [
|
|
10315
|
-
/* @__PURE__ */
|
|
10316
|
-
/* @__PURE__ */
|
|
10670
|
+
/* @__PURE__ */ jsx50("circle", { cx: "6", cy: "6", r: "4.5", stroke: "currentColor", strokeWidth: "1.4" }),
|
|
10671
|
+
/* @__PURE__ */ jsx50(
|
|
10317
10672
|
"path",
|
|
10318
10673
|
{
|
|
10319
10674
|
d: "m12 12-2.5-2.5",
|
|
@@ -10323,7 +10678,7 @@ function MultiSelect({
|
|
|
10323
10678
|
}
|
|
10324
10679
|
)
|
|
10325
10680
|
] }),
|
|
10326
|
-
/* @__PURE__ */
|
|
10681
|
+
/* @__PURE__ */ jsx50(
|
|
10327
10682
|
"input",
|
|
10328
10683
|
{
|
|
10329
10684
|
ref: searchRef,
|
|
@@ -10338,7 +10693,7 @@ function MultiSelect({
|
|
|
10338
10693
|
}
|
|
10339
10694
|
)
|
|
10340
10695
|
] }),
|
|
10341
|
-
/* @__PURE__ */
|
|
10696
|
+
/* @__PURE__ */ jsx50("div", { className: "ods-multiselect__list", children: availableOptions.length > 0 ? availableOptions.map((opt, idx) => /* @__PURE__ */ jsxs48(
|
|
10342
10697
|
"div",
|
|
10343
10698
|
{
|
|
10344
10699
|
className: cn(
|
|
@@ -10350,21 +10705,21 @@ function MultiSelect({
|
|
|
10350
10705
|
onClick: () => addValue(opt.value),
|
|
10351
10706
|
onMouseEnter: () => setActiveIdx(idx),
|
|
10352
10707
|
children: [
|
|
10353
|
-
opt.icon && /* @__PURE__ */
|
|
10708
|
+
opt.icon && /* @__PURE__ */ jsx50("span", { className: "ods-multiselect__option-icon", children: opt.icon }),
|
|
10354
10709
|
/* @__PURE__ */ jsxs48("span", { className: "ods-multiselect__option-text", children: [
|
|
10355
|
-
/* @__PURE__ */
|
|
10356
|
-
opt.description && /* @__PURE__ */
|
|
10710
|
+
/* @__PURE__ */ jsx50("span", { children: opt.label }),
|
|
10711
|
+
opt.description && /* @__PURE__ */ jsx50("span", { className: "ods-multiselect__option-desc", children: opt.description })
|
|
10357
10712
|
] })
|
|
10358
10713
|
]
|
|
10359
10714
|
},
|
|
10360
10715
|
opt.value
|
|
10361
|
-
)) : /* @__PURE__ */
|
|
10716
|
+
)) : /* @__PURE__ */ jsx50("div", { className: "ods-multiselect__empty", children: "No results" }) })
|
|
10362
10717
|
]
|
|
10363
10718
|
}
|
|
10364
10719
|
) }),
|
|
10365
10720
|
document.body
|
|
10366
10721
|
),
|
|
10367
|
-
error && errorMessage && /* @__PURE__ */
|
|
10722
|
+
error && errorMessage && /* @__PURE__ */ jsx50("span", { className: "ods-multiselect__error", children: errorMessage })
|
|
10368
10723
|
]
|
|
10369
10724
|
}
|
|
10370
10725
|
);
|
|
@@ -10372,7 +10727,7 @@ function MultiSelect({
|
|
|
10372
10727
|
|
|
10373
10728
|
// src/components/NumberInput/NumberInput.tsx
|
|
10374
10729
|
import { useCallback as useCallback12 } from "react";
|
|
10375
|
-
import { jsx as
|
|
10730
|
+
import { jsx as jsx51, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
10376
10731
|
function NumberInput({
|
|
10377
10732
|
label,
|
|
10378
10733
|
value,
|
|
@@ -10415,9 +10770,9 @@ function NumberInput({
|
|
|
10415
10770
|
className
|
|
10416
10771
|
),
|
|
10417
10772
|
children: [
|
|
10418
|
-
label && /* @__PURE__ */
|
|
10773
|
+
label && /* @__PURE__ */ jsx51("label", { className: "ods-num__label", children: label }),
|
|
10419
10774
|
/* @__PURE__ */ jsxs49("div", { className: "ods-num__field", children: [
|
|
10420
|
-
/* @__PURE__ */
|
|
10775
|
+
/* @__PURE__ */ jsx51(
|
|
10421
10776
|
"button",
|
|
10422
10777
|
{
|
|
10423
10778
|
type: "button",
|
|
@@ -10425,11 +10780,11 @@ function NumberInput({
|
|
|
10425
10780
|
onClick: dec,
|
|
10426
10781
|
disabled: disabled || typeof min === "number" && value <= min,
|
|
10427
10782
|
"aria-label": "Decrease",
|
|
10428
|
-
children: /* @__PURE__ */
|
|
10783
|
+
children: /* @__PURE__ */ jsx51("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx51("path", { d: "M3 7h8", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round" }) })
|
|
10429
10784
|
}
|
|
10430
10785
|
),
|
|
10431
|
-
prefix && /* @__PURE__ */
|
|
10432
|
-
/* @__PURE__ */
|
|
10786
|
+
prefix && /* @__PURE__ */ jsx51("span", { className: "ods-num__prefix", children: prefix }),
|
|
10787
|
+
/* @__PURE__ */ jsx51(
|
|
10433
10788
|
"input",
|
|
10434
10789
|
{
|
|
10435
10790
|
type: "number",
|
|
@@ -10444,8 +10799,8 @@ function NumberInput({
|
|
|
10444
10799
|
"aria-label": props["aria-label"]
|
|
10445
10800
|
}
|
|
10446
10801
|
),
|
|
10447
|
-
suffix && /* @__PURE__ */
|
|
10448
|
-
/* @__PURE__ */
|
|
10802
|
+
suffix && /* @__PURE__ */ jsx51("span", { className: "ods-num__suffix", children: suffix }),
|
|
10803
|
+
/* @__PURE__ */ jsx51(
|
|
10449
10804
|
"button",
|
|
10450
10805
|
{
|
|
10451
10806
|
type: "button",
|
|
@@ -10453,11 +10808,11 @@ function NumberInput({
|
|
|
10453
10808
|
onClick: inc,
|
|
10454
10809
|
disabled: disabled || typeof max === "number" && value >= max,
|
|
10455
10810
|
"aria-label": "Increase",
|
|
10456
|
-
children: /* @__PURE__ */
|
|
10811
|
+
children: /* @__PURE__ */ jsx51("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx51("path", { d: "M7 3v8M3 7h8", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round" }) })
|
|
10457
10812
|
}
|
|
10458
10813
|
)
|
|
10459
10814
|
] }),
|
|
10460
|
-
error ? /* @__PURE__ */
|
|
10815
|
+
error ? /* @__PURE__ */ jsx51("div", { className: "ods-num__hint ods-num__hint--error", children: error }) : helperText ? /* @__PURE__ */ jsx51("div", { className: "ods-num__hint", children: helperText }) : null
|
|
10461
10816
|
]
|
|
10462
10817
|
}
|
|
10463
10818
|
);
|
|
@@ -10466,9 +10821,9 @@ function NumberInput({
|
|
|
10466
10821
|
// src/components/OTPInput/OTPInput.tsx
|
|
10467
10822
|
import {
|
|
10468
10823
|
useCallback as useCallback13,
|
|
10469
|
-
useRef as
|
|
10824
|
+
useRef as useRef24
|
|
10470
10825
|
} from "react";
|
|
10471
|
-
import { jsx as
|
|
10826
|
+
import { jsx as jsx52, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
10472
10827
|
function OTPInput({
|
|
10473
10828
|
label,
|
|
10474
10829
|
length = 6,
|
|
@@ -10482,7 +10837,7 @@ function OTPInput({
|
|
|
10482
10837
|
autoFocus = false,
|
|
10483
10838
|
className
|
|
10484
10839
|
}) {
|
|
10485
|
-
const refs =
|
|
10840
|
+
const refs = useRef24([]);
|
|
10486
10841
|
const pattern = type === "numeric" ? /[^0-9]/g : /[^a-zA-Z0-9]/g;
|
|
10487
10842
|
const setCharAt = useCallback13(
|
|
10488
10843
|
(idx, ch) => {
|
|
@@ -10521,8 +10876,8 @@ function OTPInput({
|
|
|
10521
10876
|
className
|
|
10522
10877
|
),
|
|
10523
10878
|
children: [
|
|
10524
|
-
label && /* @__PURE__ */
|
|
10525
|
-
/* @__PURE__ */
|
|
10879
|
+
label && /* @__PURE__ */ jsx52("label", { className: "ods-otp__label", children: label }),
|
|
10880
|
+
/* @__PURE__ */ jsx52(
|
|
10526
10881
|
"div",
|
|
10527
10882
|
{
|
|
10528
10883
|
className: "ods-otp__row",
|
|
@@ -10530,7 +10885,7 @@ function OTPInput({
|
|
|
10530
10885
|
"aria-label": typeof label === "string" ? label : "One-time passcode",
|
|
10531
10886
|
children: Array.from({ length }).map((_, i) => {
|
|
10532
10887
|
const ch = value[i] ?? "";
|
|
10533
|
-
return /* @__PURE__ */
|
|
10888
|
+
return /* @__PURE__ */ jsx52(
|
|
10534
10889
|
"input",
|
|
10535
10890
|
{
|
|
10536
10891
|
ref: (el) => {
|
|
@@ -10553,14 +10908,14 @@ function OTPInput({
|
|
|
10553
10908
|
})
|
|
10554
10909
|
}
|
|
10555
10910
|
),
|
|
10556
|
-
error && /* @__PURE__ */
|
|
10911
|
+
error && /* @__PURE__ */ jsx52("div", { className: "ods-otp__hint", children: error })
|
|
10557
10912
|
]
|
|
10558
10913
|
}
|
|
10559
10914
|
);
|
|
10560
10915
|
}
|
|
10561
10916
|
|
|
10562
10917
|
// src/components/PageHeader/PageHeader.tsx
|
|
10563
|
-
import { jsx as
|
|
10918
|
+
import { jsx as jsx53, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
10564
10919
|
function PageHeader({
|
|
10565
10920
|
title,
|
|
10566
10921
|
description,
|
|
@@ -10571,9 +10926,9 @@ function PageHeader({
|
|
|
10571
10926
|
}) {
|
|
10572
10927
|
return /* @__PURE__ */ jsxs51("header", { className: cn("ods-page-header", className), children: [
|
|
10573
10928
|
/* @__PURE__ */ jsxs51("div", { className: "ods-page-header__main", children: [
|
|
10574
|
-
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */
|
|
10575
|
-
c.href ? /* @__PURE__ */
|
|
10576
|
-
i < breadcrumbs.length - 1 && /* @__PURE__ */
|
|
10929
|
+
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx53("nav", { className: "ods-page-header__crumbs", "aria-label": "Breadcrumb", children: breadcrumbs.map((c, i) => /* @__PURE__ */ jsxs51("span", { className: "ods-page-header__crumb", children: [
|
|
10930
|
+
c.href ? /* @__PURE__ */ jsx53("a", { href: c.href, onClick: c.onClick, children: c.label }) : c.onClick ? /* @__PURE__ */ jsx53("button", { type: "button", onClick: c.onClick, children: c.label }) : /* @__PURE__ */ jsx53("span", { children: c.label }),
|
|
10931
|
+
i < breadcrumbs.length - 1 && /* @__PURE__ */ jsx53("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx53(
|
|
10577
10932
|
"path",
|
|
10578
10933
|
{
|
|
10579
10934
|
d: "m4.5 3 3 3-3 3",
|
|
@@ -10584,17 +10939,17 @@ function PageHeader({
|
|
|
10584
10939
|
}
|
|
10585
10940
|
) })
|
|
10586
10941
|
] }, i)) }),
|
|
10587
|
-
/* @__PURE__ */
|
|
10588
|
-
description && /* @__PURE__ */
|
|
10589
|
-
meta && /* @__PURE__ */
|
|
10942
|
+
/* @__PURE__ */ jsx53("h1", { className: "ods-page-header__title", children: title }),
|
|
10943
|
+
description && /* @__PURE__ */ jsx53("p", { className: "ods-page-header__description", children: description }),
|
|
10944
|
+
meta && /* @__PURE__ */ jsx53("div", { className: "ods-page-header__meta", children: meta })
|
|
10590
10945
|
] }),
|
|
10591
|
-
actions && /* @__PURE__ */
|
|
10946
|
+
actions && /* @__PURE__ */ jsx53("div", { className: "ods-page-header__actions", children: actions })
|
|
10592
10947
|
] });
|
|
10593
10948
|
}
|
|
10594
10949
|
|
|
10595
10950
|
// src/components/PasswordInput/PasswordInput.tsx
|
|
10596
|
-
import { useState as
|
|
10597
|
-
import { jsx as
|
|
10951
|
+
import { useState as useState20 } from "react";
|
|
10952
|
+
import { jsx as jsx54, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
10598
10953
|
var strengthLabels = ["Very weak", "Weak", "Fair", "Strong", "Very strong"];
|
|
10599
10954
|
function PasswordInput({
|
|
10600
10955
|
label,
|
|
@@ -10610,7 +10965,7 @@ function PasswordInput({
|
|
|
10610
10965
|
className,
|
|
10611
10966
|
...rest
|
|
10612
10967
|
}) {
|
|
10613
|
-
const [shown, setShown] =
|
|
10968
|
+
const [shown, setShown] = useState20(false);
|
|
10614
10969
|
const handle = (e) => onChange?.(e.target.value);
|
|
10615
10970
|
return /* @__PURE__ */ jsxs52(
|
|
10616
10971
|
"div",
|
|
@@ -10623,10 +10978,10 @@ function PasswordInput({
|
|
|
10623
10978
|
className
|
|
10624
10979
|
),
|
|
10625
10980
|
children: [
|
|
10626
|
-
label && /* @__PURE__ */
|
|
10981
|
+
label && /* @__PURE__ */ jsx54("label", { className: "ods-pwd__label", children: label }),
|
|
10627
10982
|
/* @__PURE__ */ jsxs52("div", { className: "ods-pwd__field", children: [
|
|
10628
|
-
leftIcon && /* @__PURE__ */
|
|
10629
|
-
/* @__PURE__ */
|
|
10983
|
+
leftIcon && /* @__PURE__ */ jsx54("span", { className: "ods-pwd__icon", "aria-hidden": "true", children: leftIcon }),
|
|
10984
|
+
/* @__PURE__ */ jsx54(
|
|
10630
10985
|
"input",
|
|
10631
10986
|
{
|
|
10632
10987
|
...rest,
|
|
@@ -10637,7 +10992,7 @@ function PasswordInput({
|
|
|
10637
10992
|
className: "ods-pwd__input"
|
|
10638
10993
|
}
|
|
10639
10994
|
),
|
|
10640
|
-
showToggle && /* @__PURE__ */
|
|
10995
|
+
showToggle && /* @__PURE__ */ jsx54(
|
|
10641
10996
|
"button",
|
|
10642
10997
|
{
|
|
10643
10998
|
type: "button",
|
|
@@ -10646,7 +11001,7 @@ function PasswordInput({
|
|
|
10646
11001
|
"aria-label": shown ? "Hide password" : "Show password",
|
|
10647
11002
|
disabled,
|
|
10648
11003
|
children: shown ? /* @__PURE__ */ jsxs52("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
|
|
10649
|
-
/* @__PURE__ */
|
|
11004
|
+
/* @__PURE__ */ jsx54(
|
|
10650
11005
|
"path",
|
|
10651
11006
|
{
|
|
10652
11007
|
d: "M2 8c1.5-2.6 3.6-4 6-4s4.5 1.4 6 4c-1.5 2.6-3.6 4-6 4s-4.5-1.4-6-4z",
|
|
@@ -10654,8 +11009,8 @@ function PasswordInput({
|
|
|
10654
11009
|
strokeWidth: "1.3"
|
|
10655
11010
|
}
|
|
10656
11011
|
),
|
|
10657
|
-
/* @__PURE__ */
|
|
10658
|
-
/* @__PURE__ */
|
|
11012
|
+
/* @__PURE__ */ jsx54("circle", { cx: "8", cy: "8", r: "1.8", stroke: "currentColor", strokeWidth: "1.3" }),
|
|
11013
|
+
/* @__PURE__ */ jsx54(
|
|
10659
11014
|
"path",
|
|
10660
11015
|
{
|
|
10661
11016
|
d: "M2 2l12 12",
|
|
@@ -10665,7 +11020,7 @@ function PasswordInput({
|
|
|
10665
11020
|
}
|
|
10666
11021
|
)
|
|
10667
11022
|
] }) : /* @__PURE__ */ jsxs52("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
|
|
10668
|
-
/* @__PURE__ */
|
|
11023
|
+
/* @__PURE__ */ jsx54(
|
|
10669
11024
|
"path",
|
|
10670
11025
|
{
|
|
10671
11026
|
d: "M2 8c1.5-2.6 3.6-4 6-4s4.5 1.4 6 4c-1.5 2.6-3.6 4-6 4s-4.5-1.4-6-4z",
|
|
@@ -10673,24 +11028,24 @@ function PasswordInput({
|
|
|
10673
11028
|
strokeWidth: "1.3"
|
|
10674
11029
|
}
|
|
10675
11030
|
),
|
|
10676
|
-
/* @__PURE__ */
|
|
11031
|
+
/* @__PURE__ */ jsx54("circle", { cx: "8", cy: "8", r: "2", stroke: "currentColor", strokeWidth: "1.3" })
|
|
10677
11032
|
] })
|
|
10678
11033
|
}
|
|
10679
11034
|
)
|
|
10680
11035
|
] }),
|
|
10681
11036
|
typeof strength === "number" && /* @__PURE__ */ jsxs52("div", { className: "ods-pwd__strength", "data-level": strength, children: [
|
|
10682
|
-
/* @__PURE__ */
|
|
10683
|
-
/* @__PURE__ */
|
|
11037
|
+
/* @__PURE__ */ jsx54("span", { className: "ods-pwd__meter", children: /* @__PURE__ */ jsx54("span", { className: cn("ods-pwd__bar", `ods-pwd__bar--${strength}`) }) }),
|
|
11038
|
+
/* @__PURE__ */ jsx54("span", { className: "ods-pwd__strength-label", children: strengthLabels[strength] })
|
|
10684
11039
|
] }),
|
|
10685
|
-
error ? /* @__PURE__ */
|
|
11040
|
+
error ? /* @__PURE__ */ jsx54("div", { className: "ods-pwd__hint ods-pwd__hint--error", children: error }) : helperText ? /* @__PURE__ */ jsx54("div", { className: "ods-pwd__hint", children: helperText }) : null
|
|
10686
11041
|
]
|
|
10687
11042
|
}
|
|
10688
11043
|
);
|
|
10689
11044
|
}
|
|
10690
11045
|
|
|
10691
11046
|
// src/components/PhoneInput/PhoneInput.tsx
|
|
10692
|
-
import { useState as
|
|
10693
|
-
import { jsx as
|
|
11047
|
+
import { useState as useState21 } from "react";
|
|
11048
|
+
import { jsx as jsx55, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
10694
11049
|
var DEFAULT_COUNTRIES = [
|
|
10695
11050
|
{ code: "US", name: "United States", dialCode: "+1", flag: "\u{1F1FA}\u{1F1F8}" },
|
|
10696
11051
|
{ code: "GB", name: "United Kingdom", dialCode: "+44", flag: "\u{1F1EC}\u{1F1E7}" },
|
|
@@ -10715,7 +11070,7 @@ function PhoneInput({
|
|
|
10715
11070
|
helperText,
|
|
10716
11071
|
className
|
|
10717
11072
|
}) {
|
|
10718
|
-
const [open, setOpen] =
|
|
11073
|
+
const [open, setOpen] = useState21(false);
|
|
10719
11074
|
const country = countries.find((c) => c.code === countryCode) ?? countries[0];
|
|
10720
11075
|
const onInput = (e) => onChange?.(e.target.value);
|
|
10721
11076
|
return /* @__PURE__ */ jsxs53(
|
|
@@ -10729,7 +11084,7 @@ function PhoneInput({
|
|
|
10729
11084
|
className
|
|
10730
11085
|
),
|
|
10731
11086
|
children: [
|
|
10732
|
-
label && /* @__PURE__ */
|
|
11087
|
+
label && /* @__PURE__ */ jsx55("label", { className: "ods-phone__label", children: label }),
|
|
10733
11088
|
/* @__PURE__ */ jsxs53("div", { className: "ods-phone__field", children: [
|
|
10734
11089
|
/* @__PURE__ */ jsxs53(
|
|
10735
11090
|
"button",
|
|
@@ -10741,9 +11096,9 @@ function PhoneInput({
|
|
|
10741
11096
|
"aria-haspopup": "listbox",
|
|
10742
11097
|
"aria-expanded": open,
|
|
10743
11098
|
children: [
|
|
10744
|
-
/* @__PURE__ */
|
|
10745
|
-
/* @__PURE__ */
|
|
10746
|
-
/* @__PURE__ */
|
|
11099
|
+
/* @__PURE__ */ jsx55("span", { className: "ods-phone__flag", "aria-hidden": "true", children: country.flag }),
|
|
11100
|
+
/* @__PURE__ */ jsx55("span", { className: "ods-phone__dial", children: country.dialCode }),
|
|
11101
|
+
/* @__PURE__ */ jsx55("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx55(
|
|
10747
11102
|
"path",
|
|
10748
11103
|
{
|
|
10749
11104
|
d: "M3 4.5L6 7.5L9 4.5",
|
|
@@ -10756,7 +11111,7 @@ function PhoneInput({
|
|
|
10756
11111
|
]
|
|
10757
11112
|
}
|
|
10758
11113
|
),
|
|
10759
|
-
/* @__PURE__ */
|
|
11114
|
+
/* @__PURE__ */ jsx55(
|
|
10760
11115
|
"input",
|
|
10761
11116
|
{
|
|
10762
11117
|
type: "tel",
|
|
@@ -10768,7 +11123,7 @@ function PhoneInput({
|
|
|
10768
11123
|
"aria-label": typeof label === "string" ? `${label} number` : "Phone number"
|
|
10769
11124
|
}
|
|
10770
11125
|
),
|
|
10771
|
-
open && /* @__PURE__ */
|
|
11126
|
+
open && /* @__PURE__ */ jsx55("ul", { className: "ods-phone__menu", role: "listbox", "aria-label": "Country", children: countries.map((c) => /* @__PURE__ */ jsx55("li", { children: /* @__PURE__ */ jsxs53(
|
|
10772
11127
|
"button",
|
|
10773
11128
|
{
|
|
10774
11129
|
type: "button",
|
|
@@ -10783,23 +11138,23 @@ function PhoneInput({
|
|
|
10783
11138
|
setOpen(false);
|
|
10784
11139
|
},
|
|
10785
11140
|
children: [
|
|
10786
|
-
/* @__PURE__ */
|
|
10787
|
-
/* @__PURE__ */
|
|
10788
|
-
/* @__PURE__ */
|
|
11141
|
+
/* @__PURE__ */ jsx55("span", { className: "ods-phone__flag", "aria-hidden": "true", children: c.flag }),
|
|
11142
|
+
/* @__PURE__ */ jsx55("span", { className: "ods-phone__menu-name", children: c.name }),
|
|
11143
|
+
/* @__PURE__ */ jsx55("span", { className: "ods-phone__menu-dial", children: c.dialCode })
|
|
10789
11144
|
]
|
|
10790
11145
|
}
|
|
10791
11146
|
) }, c.code)) })
|
|
10792
11147
|
] }),
|
|
10793
|
-
error ? /* @__PURE__ */
|
|
11148
|
+
error ? /* @__PURE__ */ jsx55("div", { className: "ods-phone__hint ods-phone__hint--error", children: error }) : helperText ? /* @__PURE__ */ jsx55("div", { className: "ods-phone__hint", children: helperText }) : null
|
|
10794
11149
|
]
|
|
10795
11150
|
}
|
|
10796
11151
|
);
|
|
10797
11152
|
}
|
|
10798
11153
|
|
|
10799
11154
|
// src/components/Popover/Popover.tsx
|
|
10800
|
-
import { useCallback as useCallback14, useEffect as
|
|
11155
|
+
import { useCallback as useCallback14, useEffect as useEffect15, useLayoutEffect as useLayoutEffect4, useRef as useRef25, useState as useState22 } from "react";
|
|
10801
11156
|
import { createPortal as createPortal7 } from "react-dom";
|
|
10802
|
-
import { Fragment as
|
|
11157
|
+
import { Fragment as Fragment16, jsx as jsx56, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
10803
11158
|
function computePosition2(rect, popRect, placement, offset) {
|
|
10804
11159
|
const cx = rect.left + rect.width / 2;
|
|
10805
11160
|
const cy = rect.top + rect.height / 2;
|
|
@@ -10828,7 +11183,7 @@ function Popover({
|
|
|
10828
11183
|
children,
|
|
10829
11184
|
className
|
|
10830
11185
|
}) {
|
|
10831
|
-
const [openState, setOpenState] =
|
|
11186
|
+
const [openState, setOpenState] = useState22(defaultOpen);
|
|
10832
11187
|
const open = openProp ?? openState;
|
|
10833
11188
|
const setOpen = useCallback14(
|
|
10834
11189
|
(v) => {
|
|
@@ -10837,9 +11192,9 @@ function Popover({
|
|
|
10837
11192
|
},
|
|
10838
11193
|
[openProp, onOpenChange]
|
|
10839
11194
|
);
|
|
10840
|
-
const triggerRef =
|
|
10841
|
-
const popRef =
|
|
10842
|
-
const [coords, setCoords] =
|
|
11195
|
+
const triggerRef = useRef25(null);
|
|
11196
|
+
const popRef = useRef25(null);
|
|
11197
|
+
const [coords, setCoords] = useState22(null);
|
|
10843
11198
|
const reposition = useCallback14(() => {
|
|
10844
11199
|
if (!triggerRef.current || !popRef.current) return;
|
|
10845
11200
|
const trigRect = triggerRef.current.getBoundingClientRect();
|
|
@@ -10852,7 +11207,7 @@ function Popover({
|
|
|
10852
11207
|
const id = requestAnimationFrame(reposition);
|
|
10853
11208
|
return () => cancelAnimationFrame(id);
|
|
10854
11209
|
}, [open, reposition, content]);
|
|
10855
|
-
|
|
11210
|
+
useEffect15(() => {
|
|
10856
11211
|
if (!open) return;
|
|
10857
11212
|
const onScroll = () => reposition();
|
|
10858
11213
|
window.addEventListener("scroll", onScroll, true);
|
|
@@ -10862,7 +11217,7 @@ function Popover({
|
|
|
10862
11217
|
window.removeEventListener("resize", onScroll);
|
|
10863
11218
|
};
|
|
10864
11219
|
}, [open, reposition]);
|
|
10865
|
-
|
|
11220
|
+
useEffect15(() => {
|
|
10866
11221
|
if (!open || !closeOnClickOutside) return;
|
|
10867
11222
|
const onDoc = (e) => {
|
|
10868
11223
|
const t = e.target;
|
|
@@ -10873,7 +11228,7 @@ function Popover({
|
|
|
10873
11228
|
document.addEventListener("mousedown", onDoc);
|
|
10874
11229
|
return () => document.removeEventListener("mousedown", onDoc);
|
|
10875
11230
|
}, [open, closeOnClickOutside, setOpen]);
|
|
10876
|
-
|
|
11231
|
+
useEffect15(() => {
|
|
10877
11232
|
if (!open || !closeOnEsc) return;
|
|
10878
11233
|
const onKey = (e) => {
|
|
10879
11234
|
if (e.key === "Escape") setOpen(false);
|
|
@@ -10881,7 +11236,7 @@ function Popover({
|
|
|
10881
11236
|
document.addEventListener("keydown", onKey);
|
|
10882
11237
|
return () => document.removeEventListener("keydown", onKey);
|
|
10883
11238
|
}, [open, closeOnEsc, setOpen]);
|
|
10884
|
-
const triggerEl = /* @__PURE__ */
|
|
11239
|
+
const triggerEl = /* @__PURE__ */ jsx56(
|
|
10885
11240
|
"span",
|
|
10886
11241
|
{
|
|
10887
11242
|
ref: triggerRef,
|
|
@@ -10911,20 +11266,20 @@ function Popover({
|
|
|
10911
11266
|
},
|
|
10912
11267
|
children: [
|
|
10913
11268
|
content,
|
|
10914
|
-
arrow && /* @__PURE__ */
|
|
11269
|
+
arrow && /* @__PURE__ */ jsx56("span", { className: "ods-popover__arrow", "aria-hidden": "true" })
|
|
10915
11270
|
]
|
|
10916
11271
|
}
|
|
10917
11272
|
),
|
|
10918
11273
|
document.body
|
|
10919
11274
|
) : null;
|
|
10920
|
-
return /* @__PURE__ */ jsxs54(
|
|
11275
|
+
return /* @__PURE__ */ jsxs54(Fragment16, { children: [
|
|
10921
11276
|
triggerEl,
|
|
10922
11277
|
portal
|
|
10923
11278
|
] });
|
|
10924
11279
|
}
|
|
10925
11280
|
|
|
10926
11281
|
// src/components/PricingCard/PricingCard.tsx
|
|
10927
|
-
import { jsx as
|
|
11282
|
+
import { jsx as jsx57, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
10928
11283
|
function PricingCard({
|
|
10929
11284
|
name,
|
|
10930
11285
|
description,
|
|
@@ -10938,17 +11293,17 @@ function PricingCard({
|
|
|
10938
11293
|
}) {
|
|
10939
11294
|
return /* @__PURE__ */ jsxs55("div", { className: cn("ods-pricing", highlighted && "ods-pricing--highlighted", className), children: [
|
|
10940
11295
|
/* @__PURE__ */ jsxs55("div", { className: "ods-pricing__head", children: [
|
|
10941
|
-
badge && /* @__PURE__ */
|
|
10942
|
-
/* @__PURE__ */
|
|
10943
|
-
description && /* @__PURE__ */
|
|
11296
|
+
badge && /* @__PURE__ */ jsx57("span", { className: "ods-pricing__badge", children: badge }),
|
|
11297
|
+
/* @__PURE__ */ jsx57("h3", { className: "ods-pricing__name", children: name }),
|
|
11298
|
+
description && /* @__PURE__ */ jsx57("p", { className: "ods-pricing__desc", children: description })
|
|
10944
11299
|
] }),
|
|
10945
11300
|
/* @__PURE__ */ jsxs55("div", { className: "ods-pricing__price", children: [
|
|
10946
|
-
/* @__PURE__ */
|
|
10947
|
-
pricePeriod && /* @__PURE__ */
|
|
11301
|
+
/* @__PURE__ */ jsx57("span", { className: "ods-pricing__amount", children: price }),
|
|
11302
|
+
pricePeriod && /* @__PURE__ */ jsx57("span", { className: "ods-pricing__period", children: pricePeriod })
|
|
10948
11303
|
] }),
|
|
10949
|
-
/* @__PURE__ */
|
|
10950
|
-
/* @__PURE__ */
|
|
10951
|
-
/* @__PURE__ */
|
|
11304
|
+
/* @__PURE__ */ jsx57("hr", { className: "ods-pricing__sep" }),
|
|
11305
|
+
/* @__PURE__ */ jsx57("ul", { className: "ods-pricing__features", children: features.map((f, i) => /* @__PURE__ */ jsxs55("li", { className: "ods-pricing__feature", children: [
|
|
11306
|
+
/* @__PURE__ */ jsx57("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx57(
|
|
10952
11307
|
"path",
|
|
10953
11308
|
{
|
|
10954
11309
|
d: "m3 8.5 3 3 7-7",
|
|
@@ -10958,14 +11313,14 @@ function PricingCard({
|
|
|
10958
11313
|
strokeLinejoin: "round"
|
|
10959
11314
|
}
|
|
10960
11315
|
) }),
|
|
10961
|
-
/* @__PURE__ */
|
|
11316
|
+
/* @__PURE__ */ jsx57("span", { children: f })
|
|
10962
11317
|
] }, i)) }),
|
|
10963
|
-
cta && /* @__PURE__ */
|
|
11318
|
+
cta && /* @__PURE__ */ jsx57("div", { className: "ods-pricing__cta", children: cta })
|
|
10964
11319
|
] });
|
|
10965
11320
|
}
|
|
10966
11321
|
|
|
10967
11322
|
// src/components/ProductCard/ProductCard.tsx
|
|
10968
|
-
import { jsx as
|
|
11323
|
+
import { jsx as jsx58, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
10969
11324
|
function ProductCard({
|
|
10970
11325
|
image,
|
|
10971
11326
|
tag,
|
|
@@ -10977,22 +11332,22 @@ function ProductCard({
|
|
|
10977
11332
|
className
|
|
10978
11333
|
}) {
|
|
10979
11334
|
return /* @__PURE__ */ jsxs56("div", { className: cn("ods-product-card", className), children: [
|
|
10980
|
-
/* @__PURE__ */
|
|
10981
|
-
tag && /* @__PURE__ */
|
|
10982
|
-
/* @__PURE__ */
|
|
10983
|
-
description && /* @__PURE__ */
|
|
11335
|
+
/* @__PURE__ */ jsx58("div", { className: "ods-product-card__image", children: image }),
|
|
11336
|
+
tag && /* @__PURE__ */ jsx58("span", { className: "ods-product-card__tag", children: tag }),
|
|
11337
|
+
/* @__PURE__ */ jsx58("div", { className: "ods-product-card__name", children: name }),
|
|
11338
|
+
description && /* @__PURE__ */ jsx58("div", { className: "ods-product-card__desc", children: description }),
|
|
10984
11339
|
/* @__PURE__ */ jsxs56("div", { className: "ods-product-card__footer", children: [
|
|
10985
11340
|
/* @__PURE__ */ jsxs56("div", { className: "ods-product-card__price-group", children: [
|
|
10986
|
-
/* @__PURE__ */
|
|
10987
|
-
originalPrice && /* @__PURE__ */
|
|
11341
|
+
/* @__PURE__ */ jsx58("span", { className: "ods-product-card__price", children: price }),
|
|
11342
|
+
originalPrice && /* @__PURE__ */ jsx58("span", { className: "ods-product-card__strike", children: originalPrice })
|
|
10988
11343
|
] }),
|
|
10989
|
-
action && /* @__PURE__ */
|
|
11344
|
+
action && /* @__PURE__ */ jsx58("div", { className: "ods-product-card__action", children: action })
|
|
10990
11345
|
] })
|
|
10991
11346
|
] });
|
|
10992
11347
|
}
|
|
10993
11348
|
|
|
10994
11349
|
// src/components/ProgressRing/ProgressRing.tsx
|
|
10995
|
-
import { jsx as
|
|
11350
|
+
import { jsx as jsx59, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
10996
11351
|
var VARIANT_COLORS = {
|
|
10997
11352
|
primary: "#6c5ce7",
|
|
10998
11353
|
success: "#16a34a",
|
|
@@ -11033,7 +11388,7 @@ function ProgressRing({
|
|
|
11033
11388
|
"aria-valuenow": indeterminate ? void 0 : value,
|
|
11034
11389
|
children: [
|
|
11035
11390
|
/* @__PURE__ */ jsxs57("svg", { className: "ods-progress-ring__svg", width: size, height: size, children: [
|
|
11036
|
-
/* @__PURE__ */
|
|
11391
|
+
/* @__PURE__ */ jsx59(
|
|
11037
11392
|
"circle",
|
|
11038
11393
|
{
|
|
11039
11394
|
className: "ods-progress-ring__track",
|
|
@@ -11045,7 +11400,7 @@ function ProgressRing({
|
|
|
11045
11400
|
strokeWidth
|
|
11046
11401
|
}
|
|
11047
11402
|
),
|
|
11048
|
-
/* @__PURE__ */
|
|
11403
|
+
/* @__PURE__ */ jsx59(
|
|
11049
11404
|
"circle",
|
|
11050
11405
|
{
|
|
11051
11406
|
className: "ods-progress-ring__fill",
|
|
@@ -11062,7 +11417,7 @@ function ProgressRing({
|
|
|
11062
11417
|
}
|
|
11063
11418
|
)
|
|
11064
11419
|
] }),
|
|
11065
|
-
!indeterminate && (label || showValue) && /* @__PURE__ */
|
|
11420
|
+
!indeterminate && (label || showValue) && /* @__PURE__ */ jsx59("div", { className: "ods-progress-ring__center", children: label ?? /* @__PURE__ */ jsxs57("span", { className: "ods-progress-ring__value", children: [
|
|
11066
11421
|
Math.round(pct * 100),
|
|
11067
11422
|
"%"
|
|
11068
11423
|
] }) })
|
|
@@ -11074,12 +11429,12 @@ function ProgressRing({
|
|
|
11074
11429
|
// src/components/PromptInput/PromptInput.tsx
|
|
11075
11430
|
import {
|
|
11076
11431
|
useCallback as useCallback15,
|
|
11077
|
-
useEffect as
|
|
11078
|
-
useRef as
|
|
11079
|
-
useState as
|
|
11432
|
+
useEffect as useEffect16,
|
|
11433
|
+
useRef as useRef26,
|
|
11434
|
+
useState as useState23
|
|
11080
11435
|
} from "react";
|
|
11081
|
-
import { jsx as
|
|
11082
|
-
var ATTACH_GLYPH = /* @__PURE__ */
|
|
11436
|
+
import { jsx as jsx60, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
11437
|
+
var ATTACH_GLYPH = /* @__PURE__ */ jsx60("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx60(
|
|
11083
11438
|
"path",
|
|
11084
11439
|
{
|
|
11085
11440
|
d: "M10.5 7 6.4 11.1a2 2 0 1 1-2.8-2.8L8.3 3.6a3 3 0 0 1 4.2 4.2l-5.6 5.6",
|
|
@@ -11089,7 +11444,7 @@ var ATTACH_GLYPH = /* @__PURE__ */ jsx59("svg", { width: "14", height: "14", vie
|
|
|
11089
11444
|
strokeLinejoin: "round"
|
|
11090
11445
|
}
|
|
11091
11446
|
) });
|
|
11092
|
-
var SEND_GLYPH = /* @__PURE__ */
|
|
11447
|
+
var SEND_GLYPH = /* @__PURE__ */ jsx60("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx60(
|
|
11093
11448
|
"path",
|
|
11094
11449
|
{
|
|
11095
11450
|
d: "m2 7 10-5-4 10-1.5-3.5L2 7Z",
|
|
@@ -11100,7 +11455,7 @@ var SEND_GLYPH = /* @__PURE__ */ jsx59("svg", { width: "14", height: "14", viewB
|
|
|
11100
11455
|
fillOpacity: "0.15"
|
|
11101
11456
|
}
|
|
11102
11457
|
) });
|
|
11103
|
-
var STOP_GLYPH = /* @__PURE__ */
|
|
11458
|
+
var STOP_GLYPH = /* @__PURE__ */ jsx60("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx60("rect", { x: "2", y: "2", width: "8", height: "8", rx: "1" }) });
|
|
11104
11459
|
function PromptInput({
|
|
11105
11460
|
value,
|
|
11106
11461
|
defaultValue = "",
|
|
@@ -11128,14 +11483,14 @@ function PromptInput({
|
|
|
11128
11483
|
className,
|
|
11129
11484
|
ariaLabel = "Prompt"
|
|
11130
11485
|
}) {
|
|
11131
|
-
const taRef =
|
|
11132
|
-
const [internal, setInternal] =
|
|
11486
|
+
const taRef = useRef26(null);
|
|
11487
|
+
const [internal, setInternal] = useState23(defaultValue);
|
|
11133
11488
|
const v = value ?? internal;
|
|
11134
11489
|
const isControlled = value !== void 0;
|
|
11135
|
-
const [suggestionsOpen, setSuggestionsOpen] =
|
|
11136
|
-
const [suggestionIndex, setSuggestionIndex] =
|
|
11137
|
-
const [isDragOver, setIsDragOver] =
|
|
11138
|
-
const [historyIdx, setHistoryIdx] =
|
|
11490
|
+
const [suggestionsOpen, setSuggestionsOpen] = useState23(false);
|
|
11491
|
+
const [suggestionIndex, setSuggestionIndex] = useState23(0);
|
|
11492
|
+
const [isDragOver, setIsDragOver] = useState23(false);
|
|
11493
|
+
const [historyIdx, setHistoryIdx] = useState23(null);
|
|
11139
11494
|
const setValue = useCallback15(
|
|
11140
11495
|
(next) => {
|
|
11141
11496
|
if (!isControlled) setInternal(next);
|
|
@@ -11143,7 +11498,7 @@ function PromptInput({
|
|
|
11143
11498
|
},
|
|
11144
11499
|
[isControlled, onChange]
|
|
11145
11500
|
);
|
|
11146
|
-
|
|
11501
|
+
useEffect16(() => {
|
|
11147
11502
|
const el = taRef.current;
|
|
11148
11503
|
if (!el) return;
|
|
11149
11504
|
const computed = window.getComputedStyle(el);
|
|
@@ -11298,7 +11653,7 @@ function PromptInput({
|
|
|
11298
11653
|
onDrop: handleDrop,
|
|
11299
11654
|
children: [
|
|
11300
11655
|
isDragOver && /* @__PURE__ */ jsxs58("div", { className: "ods-prompt-input__drop-overlay", "aria-hidden": "true", children: [
|
|
11301
|
-
/* @__PURE__ */
|
|
11656
|
+
/* @__PURE__ */ jsx60("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx60(
|
|
11302
11657
|
"path",
|
|
11303
11658
|
{
|
|
11304
11659
|
d: "M10 3v9M6 7l4-4 4 4M3 15h14",
|
|
@@ -11308,22 +11663,22 @@ function PromptInput({
|
|
|
11308
11663
|
strokeLinejoin: "round"
|
|
11309
11664
|
}
|
|
11310
11665
|
) }),
|
|
11311
|
-
/* @__PURE__ */
|
|
11666
|
+
/* @__PURE__ */ jsx60("span", { children: "Drop files to attach" })
|
|
11312
11667
|
] }),
|
|
11313
|
-
attachments.length > 0 && /* @__PURE__ */
|
|
11668
|
+
attachments.length > 0 && /* @__PURE__ */ jsx60("div", { className: "ods-prompt-input__attachments", children: attachments.map((a) => {
|
|
11314
11669
|
const safePreview = sanitizeImageUrl(a.previewUrl);
|
|
11315
11670
|
return /* @__PURE__ */ jsxs58("span", { className: "ods-prompt-input__chip", title: a.name, children: [
|
|
11316
|
-
/* @__PURE__ */
|
|
11317
|
-
/* @__PURE__ */
|
|
11318
|
-
a.size != null && /* @__PURE__ */
|
|
11319
|
-
onRemoveAttachment && /* @__PURE__ */
|
|
11671
|
+
/* @__PURE__ */ jsx60("span", { className: "ods-prompt-input__chip-glyph", "aria-hidden": "true", children: safePreview ? /* @__PURE__ */ jsx60("img", { src: safePreview, alt: "", className: "ods-prompt-input__chip-thumb" }) : ATTACH_GLYPH }),
|
|
11672
|
+
/* @__PURE__ */ jsx60("span", { className: "ods-prompt-input__chip-label", children: a.name }),
|
|
11673
|
+
a.size != null && /* @__PURE__ */ jsx60("span", { className: "ods-prompt-input__chip-size", children: fmtSize2(a.size) }),
|
|
11674
|
+
onRemoveAttachment && /* @__PURE__ */ jsx60(
|
|
11320
11675
|
"button",
|
|
11321
11676
|
{
|
|
11322
11677
|
type: "button",
|
|
11323
11678
|
className: "ods-prompt-input__chip-remove",
|
|
11324
11679
|
onClick: () => onRemoveAttachment(a.id),
|
|
11325
11680
|
"aria-label": `Remove ${a.name}`,
|
|
11326
|
-
children: /* @__PURE__ */
|
|
11681
|
+
children: /* @__PURE__ */ jsx60("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx60(
|
|
11327
11682
|
"path",
|
|
11328
11683
|
{
|
|
11329
11684
|
d: "m2.5 2.5 5 5M7.5 2.5l-5 5",
|
|
@@ -11337,7 +11692,7 @@ function PromptInput({
|
|
|
11337
11692
|
] }, a.id);
|
|
11338
11693
|
}) }),
|
|
11339
11694
|
/* @__PURE__ */ jsxs58("div", { className: "ods-prompt-input__field", children: [
|
|
11340
|
-
/* @__PURE__ */
|
|
11695
|
+
/* @__PURE__ */ jsx60(
|
|
11341
11696
|
"textarea",
|
|
11342
11697
|
{
|
|
11343
11698
|
ref: taRef,
|
|
@@ -11358,7 +11713,7 @@ function PromptInput({
|
|
|
11358
11713
|
maxLength
|
|
11359
11714
|
}
|
|
11360
11715
|
),
|
|
11361
|
-
visibleSuggestions.length > 0 && /* @__PURE__ */
|
|
11716
|
+
visibleSuggestions.length > 0 && /* @__PURE__ */ jsx60("ul", { className: "ods-prompt-input__suggestions", role: "listbox", children: visibleSuggestions.map((s, i) => /* @__PURE__ */ jsxs58(
|
|
11362
11717
|
"li",
|
|
11363
11718
|
{
|
|
11364
11719
|
role: "option",
|
|
@@ -11376,10 +11731,10 @@ function PromptInput({
|
|
|
11376
11731
|
},
|
|
11377
11732
|
onMouseEnter: () => setSuggestionIndex(i),
|
|
11378
11733
|
children: [
|
|
11379
|
-
s.icon && /* @__PURE__ */
|
|
11734
|
+
s.icon && /* @__PURE__ */ jsx60("span", { className: "ods-prompt-input__suggestion-icon", children: s.icon }),
|
|
11380
11735
|
/* @__PURE__ */ jsxs58("span", { className: "ods-prompt-input__suggestion-text", children: [
|
|
11381
|
-
/* @__PURE__ */
|
|
11382
|
-
s.description && /* @__PURE__ */
|
|
11736
|
+
/* @__PURE__ */ jsx60("span", { className: "ods-prompt-input__suggestion-label", children: s.label }),
|
|
11737
|
+
s.description && /* @__PURE__ */ jsx60("span", { className: "ods-prompt-input__suggestion-desc", children: s.description })
|
|
11383
11738
|
] })
|
|
11384
11739
|
]
|
|
11385
11740
|
},
|
|
@@ -11387,9 +11742,9 @@ function PromptInput({
|
|
|
11387
11742
|
)) })
|
|
11388
11743
|
] }),
|
|
11389
11744
|
/* @__PURE__ */ jsxs58("div", { className: "ods-prompt-input__toolbar", children: [
|
|
11390
|
-
/* @__PURE__ */
|
|
11745
|
+
/* @__PURE__ */ jsx60("div", { className: "ods-prompt-input__toolbar-left", children: leftActions }),
|
|
11391
11746
|
/* @__PURE__ */ jsxs58("div", { className: "ods-prompt-input__toolbar-right", children: [
|
|
11392
|
-
showCharCounter && /* @__PURE__ */
|
|
11747
|
+
showCharCounter && /* @__PURE__ */ jsx60(
|
|
11393
11748
|
"span",
|
|
11394
11749
|
{
|
|
11395
11750
|
className: cn(
|
|
@@ -11409,10 +11764,10 @@ function PromptInput({
|
|
|
11409
11764
|
"aria-label": "Stop generating",
|
|
11410
11765
|
children: [
|
|
11411
11766
|
STOP_GLYPH,
|
|
11412
|
-
/* @__PURE__ */
|
|
11767
|
+
/* @__PURE__ */ jsx60("span", { children: "Stop" })
|
|
11413
11768
|
]
|
|
11414
11769
|
}
|
|
11415
|
-
) : showSend && /* @__PURE__ */
|
|
11770
|
+
) : showSend && /* @__PURE__ */ jsx60(
|
|
11416
11771
|
"button",
|
|
11417
11772
|
{
|
|
11418
11773
|
type: "button",
|
|
@@ -11428,7 +11783,7 @@ function PromptInput({
|
|
|
11428
11783
|
)
|
|
11429
11784
|
] })
|
|
11430
11785
|
] }),
|
|
11431
|
-
quickActions && quickActions.length > 0 && /* @__PURE__ */
|
|
11786
|
+
quickActions && quickActions.length > 0 && /* @__PURE__ */ jsx60("div", { className: "ods-prompt-input__quick-actions", role: "toolbar", "aria-label": "Quick prompts", children: quickActions.map((q2) => /* @__PURE__ */ jsxs58(
|
|
11432
11787
|
"button",
|
|
11433
11788
|
{
|
|
11434
11789
|
type: "button",
|
|
@@ -11439,20 +11794,20 @@ function PromptInput({
|
|
|
11439
11794
|
requestAnimationFrame(() => taRef.current?.focus());
|
|
11440
11795
|
},
|
|
11441
11796
|
children: [
|
|
11442
|
-
q2.icon && /* @__PURE__ */
|
|
11443
|
-
/* @__PURE__ */
|
|
11797
|
+
q2.icon && /* @__PURE__ */ jsx60("span", { className: "ods-prompt-input__quick-action-icon", children: q2.icon }),
|
|
11798
|
+
/* @__PURE__ */ jsx60("span", { children: q2.label })
|
|
11444
11799
|
]
|
|
11445
11800
|
},
|
|
11446
11801
|
q2.id
|
|
11447
11802
|
)) }),
|
|
11448
|
-
hint && /* @__PURE__ */
|
|
11803
|
+
hint && /* @__PURE__ */ jsx60("div", { className: "ods-prompt-input__hint", children: hint })
|
|
11449
11804
|
]
|
|
11450
11805
|
}
|
|
11451
11806
|
);
|
|
11452
11807
|
}
|
|
11453
11808
|
|
|
11454
11809
|
// src/components/Quote/Quote.tsx
|
|
11455
|
-
import { jsx as
|
|
11810
|
+
import { jsx as jsx61, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
11456
11811
|
function Quote({
|
|
11457
11812
|
variant = "default",
|
|
11458
11813
|
author,
|
|
@@ -11466,11 +11821,11 @@ function Quote({
|
|
|
11466
11821
|
{
|
|
11467
11822
|
className: cn("ods-quote", `ods-quote--${variant}`, `ods-quote--${size}`, className),
|
|
11468
11823
|
children: [
|
|
11469
|
-
/* @__PURE__ */
|
|
11470
|
-
/* @__PURE__ */
|
|
11824
|
+
/* @__PURE__ */ jsx61("span", { className: "ods-quote__mark", "aria-hidden": "true", children: '"' }),
|
|
11825
|
+
/* @__PURE__ */ jsx61("p", { className: "ods-quote__text", children }),
|
|
11471
11826
|
(author || attribution) && /* @__PURE__ */ jsxs59("footer", { className: "ods-quote__footer", children: [
|
|
11472
|
-
author && /* @__PURE__ */
|
|
11473
|
-
attribution && /* @__PURE__ */
|
|
11827
|
+
author && /* @__PURE__ */ jsx61("cite", { className: "ods-quote__author", children: author }),
|
|
11828
|
+
attribution && /* @__PURE__ */ jsx61("span", { className: "ods-quote__attribution", children: attribution })
|
|
11474
11829
|
] })
|
|
11475
11830
|
]
|
|
11476
11831
|
}
|
|
@@ -11478,13 +11833,13 @@ function Quote({
|
|
|
11478
11833
|
}
|
|
11479
11834
|
|
|
11480
11835
|
// src/components/Radio/Radio.tsx
|
|
11481
|
-
import { useRef as
|
|
11836
|
+
import { useRef as useRef28 } from "react";
|
|
11482
11837
|
import { useRadio } from "react-aria";
|
|
11483
11838
|
|
|
11484
11839
|
// src/components/Radio/RadioGroup.tsx
|
|
11485
|
-
import { createContext, useContext, useRef as
|
|
11840
|
+
import { createContext, useContext, useRef as useRef27 } from "react";
|
|
11486
11841
|
import { useRadioGroup } from "react-aria";
|
|
11487
|
-
import { jsx as
|
|
11842
|
+
import { jsx as jsx62, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
11488
11843
|
var RadioGroupContext = createContext(null);
|
|
11489
11844
|
function useRadioGroupContext() {
|
|
11490
11845
|
const context = useContext(RadioGroupContext);
|
|
@@ -11523,7 +11878,7 @@ function RadioGroup({
|
|
|
11523
11878
|
"aria-describedby": ariaDescribedBy
|
|
11524
11879
|
};
|
|
11525
11880
|
const state = $384704861d32dbed$export$bca9d026f8e704eb(ariaProps);
|
|
11526
|
-
const ref =
|
|
11881
|
+
const ref = useRef27(null);
|
|
11527
11882
|
const { radioGroupProps, labelProps } = useRadioGroup(ariaProps, state);
|
|
11528
11883
|
return /* @__PURE__ */ jsxs60(
|
|
11529
11884
|
"div",
|
|
@@ -11538,18 +11893,18 @@ function RadioGroup({
|
|
|
11538
11893
|
className
|
|
11539
11894
|
),
|
|
11540
11895
|
children: [
|
|
11541
|
-
label && /* @__PURE__ */
|
|
11542
|
-
/* @__PURE__ */
|
|
11896
|
+
label && /* @__PURE__ */ jsx62("span", { ...labelProps, className: "ods-radio-group__label", children: label }),
|
|
11897
|
+
/* @__PURE__ */ jsx62(RadioGroupContext.Provider, { value: state, children: /* @__PURE__ */ jsx62("div", { className: "ods-radio-group__items", children }) })
|
|
11543
11898
|
]
|
|
11544
11899
|
}
|
|
11545
11900
|
);
|
|
11546
11901
|
}
|
|
11547
11902
|
|
|
11548
11903
|
// src/components/Radio/Radio.tsx
|
|
11549
|
-
import { jsx as
|
|
11904
|
+
import { jsx as jsx63, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
11550
11905
|
function Radio({ value, label, disabled = false, className, ...props }) {
|
|
11551
11906
|
const state = useRadioGroupContext();
|
|
11552
|
-
const ref =
|
|
11907
|
+
const ref = useRef28(null);
|
|
11553
11908
|
const ariaNameProps = resolveAccessibleName({
|
|
11554
11909
|
label,
|
|
11555
11910
|
ariaLabel: props["aria-label"],
|
|
@@ -11585,7 +11940,7 @@ function Radio({ value, label, disabled = false, className, ...props }) {
|
|
|
11585
11940
|
className
|
|
11586
11941
|
),
|
|
11587
11942
|
children: [
|
|
11588
|
-
/* @__PURE__ */
|
|
11943
|
+
/* @__PURE__ */ jsx63(
|
|
11589
11944
|
"input",
|
|
11590
11945
|
{
|
|
11591
11946
|
...passthroughProps,
|
|
@@ -11594,15 +11949,15 @@ function Radio({ value, label, disabled = false, className, ...props }) {
|
|
|
11594
11949
|
className: "ods-radio__input"
|
|
11595
11950
|
}
|
|
11596
11951
|
),
|
|
11597
|
-
/* @__PURE__ */
|
|
11598
|
-
label && /* @__PURE__ */
|
|
11952
|
+
/* @__PURE__ */ jsx63("div", { className: "ods-radio__circle", "aria-hidden": "true", children: /* @__PURE__ */ jsx63("div", { className: cn("ods-radio__dot", isSelected && "ods-radio__dot--visible") }) }),
|
|
11953
|
+
label && /* @__PURE__ */ jsx63("span", { className: "ods-radio__label", children: label })
|
|
11599
11954
|
]
|
|
11600
11955
|
}
|
|
11601
11956
|
);
|
|
11602
11957
|
}
|
|
11603
11958
|
|
|
11604
11959
|
// src/components/RangeSlider/RangeSlider.tsx
|
|
11605
|
-
import { jsx as
|
|
11960
|
+
import { jsx as jsx64, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
11606
11961
|
function RangeSlider({
|
|
11607
11962
|
label,
|
|
11608
11963
|
value,
|
|
@@ -11640,7 +11995,7 @@ function RangeSlider({
|
|
|
11640
11995
|
),
|
|
11641
11996
|
children: [
|
|
11642
11997
|
(label || showValue) && /* @__PURE__ */ jsxs62("div", { className: "ods-range-slider__head", children: [
|
|
11643
|
-
label && /* @__PURE__ */
|
|
11998
|
+
label && /* @__PURE__ */ jsx64("span", { className: "ods-range-slider__label", children: label }),
|
|
11644
11999
|
showValue && /* @__PURE__ */ jsxs62("span", { className: "ods-range-slider__value", children: [
|
|
11645
12000
|
fmt(lo),
|
|
11646
12001
|
" \u2013 ",
|
|
@@ -11648,14 +12003,14 @@ function RangeSlider({
|
|
|
11648
12003
|
] })
|
|
11649
12004
|
] }),
|
|
11650
12005
|
/* @__PURE__ */ jsxs62("div", { className: "ods-range-slider__track", children: [
|
|
11651
|
-
/* @__PURE__ */
|
|
12006
|
+
/* @__PURE__ */ jsx64(
|
|
11652
12007
|
"span",
|
|
11653
12008
|
{
|
|
11654
12009
|
className: "ods-range-slider__fill",
|
|
11655
12010
|
style: { left: `${loPct}%`, right: `${100 - hiPct}%` }
|
|
11656
12011
|
}
|
|
11657
12012
|
),
|
|
11658
|
-
/* @__PURE__ */
|
|
12013
|
+
/* @__PURE__ */ jsx64(
|
|
11659
12014
|
"input",
|
|
11660
12015
|
{
|
|
11661
12016
|
type: "range",
|
|
@@ -11669,7 +12024,7 @@ function RangeSlider({
|
|
|
11669
12024
|
"aria-label": "Minimum"
|
|
11670
12025
|
}
|
|
11671
12026
|
),
|
|
11672
|
-
/* @__PURE__ */
|
|
12027
|
+
/* @__PURE__ */ jsx64(
|
|
11673
12028
|
"input",
|
|
11674
12029
|
{
|
|
11675
12030
|
type: "range",
|
|
@@ -11690,16 +12045,16 @@ function RangeSlider({
|
|
|
11690
12045
|
}
|
|
11691
12046
|
|
|
11692
12047
|
// src/components/Rating/Rating.tsx
|
|
11693
|
-
import { useState as
|
|
11694
|
-
import { jsx as
|
|
12048
|
+
import { useState as useState24 } from "react";
|
|
12049
|
+
import { jsx as jsx65, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
11695
12050
|
function StarIcon({ fill }) {
|
|
11696
12051
|
const pathId = `r-${Math.random().toString(36).slice(2)}`;
|
|
11697
12052
|
return /* @__PURE__ */ jsxs63("svg", { width: "22", height: "22", viewBox: "0 0 22 22", fill: "none", "aria-hidden": "true", children: [
|
|
11698
|
-
/* @__PURE__ */
|
|
11699
|
-
/* @__PURE__ */
|
|
11700
|
-
/* @__PURE__ */
|
|
12053
|
+
/* @__PURE__ */ jsx65("defs", { children: /* @__PURE__ */ jsxs63("linearGradient", { id: pathId, x1: "0", x2: "1", y1: "0", y2: "0", children: [
|
|
12054
|
+
/* @__PURE__ */ jsx65("stop", { offset: `${fill * 100}%`, stopColor: "#f59e0b" }),
|
|
12055
|
+
/* @__PURE__ */ jsx65("stop", { offset: `${fill * 100}%`, stopColor: "#e1e5eb" })
|
|
11701
12056
|
] }) }),
|
|
11702
|
-
/* @__PURE__ */
|
|
12057
|
+
/* @__PURE__ */ jsx65(
|
|
11703
12058
|
"path",
|
|
11704
12059
|
{
|
|
11705
12060
|
d: "M11 2l2.6 5.4 6 .9-4.3 4.2 1 6-5.3-2.8-5.3 2.8 1-6L2 8.3l6-.9L11 2z",
|
|
@@ -11714,11 +12069,11 @@ function StarIcon({ fill }) {
|
|
|
11714
12069
|
function HeartIcon({ fill }) {
|
|
11715
12070
|
const pathId = `h-${Math.random().toString(36).slice(2)}`;
|
|
11716
12071
|
return /* @__PURE__ */ jsxs63("svg", { width: "22", height: "22", viewBox: "0 0 22 22", fill: "none", "aria-hidden": "true", children: [
|
|
11717
|
-
/* @__PURE__ */
|
|
11718
|
-
/* @__PURE__ */
|
|
11719
|
-
/* @__PURE__ */
|
|
12072
|
+
/* @__PURE__ */ jsx65("defs", { children: /* @__PURE__ */ jsxs63("linearGradient", { id: pathId, x1: "0", x2: "1", y1: "0", y2: "0", children: [
|
|
12073
|
+
/* @__PURE__ */ jsx65("stop", { offset: `${fill * 100}%`, stopColor: "#ec4899" }),
|
|
12074
|
+
/* @__PURE__ */ jsx65("stop", { offset: `${fill * 100}%`, stopColor: "#e1e5eb" })
|
|
11720
12075
|
] }) }),
|
|
11721
|
-
/* @__PURE__ */
|
|
12076
|
+
/* @__PURE__ */ jsx65(
|
|
11722
12077
|
"path",
|
|
11723
12078
|
{
|
|
11724
12079
|
d: "M11 18s-6-4-6-8.5A3.5 3.5 0 0 1 11 6a3.5 3.5 0 0 1 6 3.5c0 4.5-6 8.5-6 8.5z",
|
|
@@ -11743,7 +12098,7 @@ function Rating({
|
|
|
11743
12098
|
icon = "star",
|
|
11744
12099
|
className
|
|
11745
12100
|
}) {
|
|
11746
|
-
const [hover, setHover] =
|
|
12101
|
+
const [hover, setHover] = useState24(null);
|
|
11747
12102
|
const display = hover ?? value;
|
|
11748
12103
|
const interactive = !readOnly && !disabled;
|
|
11749
12104
|
const Icon = icon === "heart" ? HeartIcon : StarIcon;
|
|
@@ -11777,7 +12132,7 @@ function Rating({
|
|
|
11777
12132
|
onMouseLeave: () => setHover(null),
|
|
11778
12133
|
className: "ods-rating__item",
|
|
11779
12134
|
children: [
|
|
11780
|
-
/* @__PURE__ */
|
|
12135
|
+
/* @__PURE__ */ jsx65(
|
|
11781
12136
|
"span",
|
|
11782
12137
|
{
|
|
11783
12138
|
className: "ods-rating__half ods-rating__half--left",
|
|
@@ -11785,7 +12140,7 @@ function Rating({
|
|
|
11785
12140
|
onClick: () => click(i, allowHalf)
|
|
11786
12141
|
}
|
|
11787
12142
|
),
|
|
11788
|
-
/* @__PURE__ */
|
|
12143
|
+
/* @__PURE__ */ jsx65(
|
|
11789
12144
|
"span",
|
|
11790
12145
|
{
|
|
11791
12146
|
className: "ods-rating__half ods-rating__half--right",
|
|
@@ -11793,13 +12148,13 @@ function Rating({
|
|
|
11793
12148
|
onClick: () => click(i, false)
|
|
11794
12149
|
}
|
|
11795
12150
|
),
|
|
11796
|
-
/* @__PURE__ */
|
|
12151
|
+
/* @__PURE__ */ jsx65(Icon, { fill })
|
|
11797
12152
|
]
|
|
11798
12153
|
},
|
|
11799
12154
|
i
|
|
11800
12155
|
);
|
|
11801
12156
|
}),
|
|
11802
|
-
showLabel && /* @__PURE__ */
|
|
12157
|
+
showLabel && /* @__PURE__ */ jsx65("span", { className: "ods-rating__label", children: typeof label === "string" || label ? label : `${value.toFixed(allowHalf ? 1 : 0)}/${max}` })
|
|
11803
12158
|
]
|
|
11804
12159
|
}
|
|
11805
12160
|
);
|
|
@@ -11808,11 +12163,11 @@ function Rating({
|
|
|
11808
12163
|
// src/components/Resizable/Resizable.tsx
|
|
11809
12164
|
import {
|
|
11810
12165
|
useCallback as useCallback16,
|
|
11811
|
-
useEffect as
|
|
11812
|
-
useRef as
|
|
11813
|
-
useState as
|
|
12166
|
+
useEffect as useEffect17,
|
|
12167
|
+
useRef as useRef29,
|
|
12168
|
+
useState as useState25
|
|
11814
12169
|
} from "react";
|
|
11815
|
-
import { jsx as
|
|
12170
|
+
import { jsx as jsx66, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
11816
12171
|
function Resizable({
|
|
11817
12172
|
direction = "horizontal",
|
|
11818
12173
|
children,
|
|
@@ -11826,8 +12181,8 @@ function Resizable({
|
|
|
11826
12181
|
className,
|
|
11827
12182
|
ariaLabel = "Resize panels"
|
|
11828
12183
|
}) {
|
|
11829
|
-
const wrapRef =
|
|
11830
|
-
const [internalSplit, setInternalSplit] =
|
|
12184
|
+
const wrapRef = useRef29(null);
|
|
12185
|
+
const [internalSplit, setInternalSplit] = useState25(() => {
|
|
11831
12186
|
if (typeof window === "undefined" || !storageKey) return null;
|
|
11832
12187
|
const stored = window.localStorage.getItem(storageKey);
|
|
11833
12188
|
if (stored != null) {
|
|
@@ -11836,20 +12191,20 @@ function Resizable({
|
|
|
11836
12191
|
}
|
|
11837
12192
|
return null;
|
|
11838
12193
|
});
|
|
11839
|
-
const draggingRef =
|
|
11840
|
-
const [isDragging, setDragging] =
|
|
12194
|
+
const draggingRef = useRef29(false);
|
|
12195
|
+
const [isDragging, setDragging] = useState25(false);
|
|
11841
12196
|
const computeFromDefault = useCallback16(() => {
|
|
11842
12197
|
const el = wrapRef.current;
|
|
11843
12198
|
if (!el) return 240;
|
|
11844
12199
|
const total = direction === "horizontal" ? el.offsetWidth : el.offsetHeight;
|
|
11845
12200
|
return defaultSplit > 0 && defaultSplit < 1 ? total * defaultSplit : defaultSplit;
|
|
11846
12201
|
}, [direction, defaultSplit]);
|
|
11847
|
-
const [split, setSplit] =
|
|
12202
|
+
const [split, setSplit] = useState25(() => {
|
|
11848
12203
|
if (splitProp != null) return splitProp;
|
|
11849
12204
|
if (internalSplit != null) return internalSplit;
|
|
11850
12205
|
return defaultSplit > 0 && defaultSplit < 1 ? 0 : defaultSplit;
|
|
11851
12206
|
});
|
|
11852
|
-
|
|
12207
|
+
useEffect17(() => {
|
|
11853
12208
|
if (splitProp != null) {
|
|
11854
12209
|
setSplit(splitProp);
|
|
11855
12210
|
return;
|
|
@@ -11882,7 +12237,7 @@ function Resizable({
|
|
|
11882
12237
|
draggingRef.current = true;
|
|
11883
12238
|
setDragging(true);
|
|
11884
12239
|
};
|
|
11885
|
-
|
|
12240
|
+
useEffect17(() => {
|
|
11886
12241
|
const onMove = (e) => {
|
|
11887
12242
|
if (!draggingRef.current) return;
|
|
11888
12243
|
const el = wrapRef.current;
|
|
@@ -11941,7 +12296,7 @@ function Resizable({
|
|
|
11941
12296
|
),
|
|
11942
12297
|
style,
|
|
11943
12298
|
children: [
|
|
11944
|
-
/* @__PURE__ */
|
|
12299
|
+
/* @__PURE__ */ jsx66(
|
|
11945
12300
|
"div",
|
|
11946
12301
|
{
|
|
11947
12302
|
className: "ods-resizable__panel ods-resizable__panel--first",
|
|
@@ -11949,7 +12304,7 @@ function Resizable({
|
|
|
11949
12304
|
children: children[0]
|
|
11950
12305
|
}
|
|
11951
12306
|
),
|
|
11952
|
-
/* @__PURE__ */
|
|
12307
|
+
/* @__PURE__ */ jsx66(
|
|
11953
12308
|
"div",
|
|
11954
12309
|
{
|
|
11955
12310
|
role: "separator",
|
|
@@ -11961,10 +12316,10 @@ function Resizable({
|
|
|
11961
12316
|
className: "ods-resizable__handle",
|
|
11962
12317
|
onMouseDown,
|
|
11963
12318
|
onKeyDown,
|
|
11964
|
-
children: /* @__PURE__ */
|
|
12319
|
+
children: /* @__PURE__ */ jsx66("span", { className: "ods-resizable__grip", "aria-hidden": "true" })
|
|
11965
12320
|
}
|
|
11966
12321
|
),
|
|
11967
|
-
/* @__PURE__ */
|
|
12322
|
+
/* @__PURE__ */ jsx66("div", { className: "ods-resizable__panel ods-resizable__panel--second", children: children[1] })
|
|
11968
12323
|
]
|
|
11969
12324
|
}
|
|
11970
12325
|
);
|
|
@@ -11978,18 +12333,18 @@ function ResizablePanel({
|
|
|
11978
12333
|
children,
|
|
11979
12334
|
className
|
|
11980
12335
|
}) {
|
|
11981
|
-
const [internal, setInternal] =
|
|
12336
|
+
const [internal, setInternal] = useState25(sizeProp ?? defaultSize);
|
|
11982
12337
|
const size = sizeProp ?? internal;
|
|
11983
|
-
const draggingRef =
|
|
11984
|
-
const [isDragging, setDragging] =
|
|
11985
|
-
const startRef =
|
|
12338
|
+
const draggingRef = useRef29(false);
|
|
12339
|
+
const [isDragging, setDragging] = useState25(false);
|
|
12340
|
+
const startRef = useRef29({ x: 0, size });
|
|
11986
12341
|
const onMouseDown = (e) => {
|
|
11987
12342
|
e.preventDefault();
|
|
11988
12343
|
draggingRef.current = true;
|
|
11989
12344
|
setDragging(true);
|
|
11990
12345
|
startRef.current = { x: e.clientX, size };
|
|
11991
12346
|
};
|
|
11992
|
-
|
|
12347
|
+
useEffect17(() => {
|
|
11993
12348
|
const onMove = (e) => {
|
|
11994
12349
|
if (!draggingRef.current) return;
|
|
11995
12350
|
const dx = e.clientX - startRef.current.x;
|
|
@@ -12018,8 +12373,8 @@ function ResizablePanel({
|
|
|
12018
12373
|
),
|
|
12019
12374
|
style: { width: size },
|
|
12020
12375
|
children: [
|
|
12021
|
-
/* @__PURE__ */
|
|
12022
|
-
/* @__PURE__ */
|
|
12376
|
+
/* @__PURE__ */ jsx66("div", { className: "ods-resizable-panel__content", children }),
|
|
12377
|
+
/* @__PURE__ */ jsx66(
|
|
12023
12378
|
"div",
|
|
12024
12379
|
{
|
|
12025
12380
|
role: "separator",
|
|
@@ -12027,7 +12382,7 @@ function ResizablePanel({
|
|
|
12027
12382
|
"aria-label": "Resize panel",
|
|
12028
12383
|
className: "ods-resizable-panel__handle",
|
|
12029
12384
|
onMouseDown,
|
|
12030
|
-
children: /* @__PURE__ */
|
|
12385
|
+
children: /* @__PURE__ */ jsx66("span", { className: "ods-resizable-panel__grip", "aria-hidden": "true" })
|
|
12031
12386
|
}
|
|
12032
12387
|
)
|
|
12033
12388
|
]
|
|
@@ -12036,7 +12391,7 @@ function ResizablePanel({
|
|
|
12036
12391
|
}
|
|
12037
12392
|
|
|
12038
12393
|
// src/components/Ribbon/Ribbon.tsx
|
|
12039
|
-
import { jsx as
|
|
12394
|
+
import { jsx as jsx67, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
12040
12395
|
function Ribbon({
|
|
12041
12396
|
variant = "primary",
|
|
12042
12397
|
icon,
|
|
@@ -12045,13 +12400,13 @@ function Ribbon({
|
|
|
12045
12400
|
className
|
|
12046
12401
|
}) {
|
|
12047
12402
|
return /* @__PURE__ */ jsxs65("span", { className: cn("ods-ribbon", `ods-ribbon--${variant}`, `ods-ribbon--${size}`, className), children: [
|
|
12048
|
-
icon && /* @__PURE__ */
|
|
12049
|
-
/* @__PURE__ */
|
|
12403
|
+
icon && /* @__PURE__ */ jsx67("span", { className: "ods-ribbon__icon", "aria-hidden": "true", children: icon }),
|
|
12404
|
+
/* @__PURE__ */ jsx67("span", { className: "ods-ribbon__label", children })
|
|
12050
12405
|
] });
|
|
12051
12406
|
}
|
|
12052
12407
|
|
|
12053
12408
|
// src/components/SettingsRow/SettingsRow.tsx
|
|
12054
|
-
import { jsx as
|
|
12409
|
+
import { jsx as jsx68, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
12055
12410
|
function SettingsRow({
|
|
12056
12411
|
title,
|
|
12057
12412
|
description,
|
|
@@ -12061,20 +12416,20 @@ function SettingsRow({
|
|
|
12061
12416
|
className
|
|
12062
12417
|
}) {
|
|
12063
12418
|
return /* @__PURE__ */ jsxs66("div", { className: cn("ods-settings-row", `ods-settings-row--${align}`, className), children: [
|
|
12064
|
-
icon && /* @__PURE__ */
|
|
12419
|
+
icon && /* @__PURE__ */ jsx68("span", { className: "ods-settings-row__icon", "aria-hidden": "true", children: icon }),
|
|
12065
12420
|
/* @__PURE__ */ jsxs66("div", { className: "ods-settings-row__body", children: [
|
|
12066
|
-
/* @__PURE__ */
|
|
12067
|
-
description && /* @__PURE__ */
|
|
12421
|
+
/* @__PURE__ */ jsx68("div", { className: "ods-settings-row__title", children: title }),
|
|
12422
|
+
description && /* @__PURE__ */ jsx68("div", { className: "ods-settings-row__desc", children: description })
|
|
12068
12423
|
] }),
|
|
12069
|
-
control && /* @__PURE__ */
|
|
12424
|
+
control && /* @__PURE__ */ jsx68("div", { className: "ods-settings-row__control", children: control })
|
|
12070
12425
|
] });
|
|
12071
12426
|
}
|
|
12072
12427
|
|
|
12073
12428
|
// src/components/Sheet/Sheet.tsx
|
|
12074
12429
|
import { AnimatePresence as AnimatePresence7, motion as motion10 } from "framer-motion";
|
|
12075
|
-
import { useEffect as
|
|
12430
|
+
import { useEffect as useEffect18 } from "react";
|
|
12076
12431
|
import { createPortal as createPortal8 } from "react-dom";
|
|
12077
|
-
import { Fragment as
|
|
12432
|
+
import { Fragment as Fragment17, jsx as jsx69, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
12078
12433
|
var slideVariants = {
|
|
12079
12434
|
top: { initial: { y: "-100%" }, animate: { y: 0 }, exit: { y: "-100%" } },
|
|
12080
12435
|
bottom: { initial: { y: "100%" }, animate: { y: 0 }, exit: { y: "100%" } },
|
|
@@ -12107,7 +12462,7 @@ function Sheet({
|
|
|
12107
12462
|
dragHandle = true,
|
|
12108
12463
|
className
|
|
12109
12464
|
}) {
|
|
12110
|
-
|
|
12465
|
+
useEffect18(() => {
|
|
12111
12466
|
if (!open || !closeOnEsc) return;
|
|
12112
12467
|
const onKey = (e) => {
|
|
12113
12468
|
if (e.key === "Escape") onClose();
|
|
@@ -12118,8 +12473,8 @@ function Sheet({
|
|
|
12118
12473
|
const variant = slideVariants[side];
|
|
12119
12474
|
const resolved = resolveSize(side, size);
|
|
12120
12475
|
const isVertical = side === "left" || side === "right";
|
|
12121
|
-
const content = /* @__PURE__ */
|
|
12122
|
-
/* @__PURE__ */
|
|
12476
|
+
const content = /* @__PURE__ */ jsx69(AnimatePresence7, { children: open && /* @__PURE__ */ jsxs67(Fragment17, { children: [
|
|
12477
|
+
/* @__PURE__ */ jsx69(
|
|
12123
12478
|
motion10.div,
|
|
12124
12479
|
{
|
|
12125
12480
|
className: "ods-sheet__backdrop",
|
|
@@ -12143,13 +12498,13 @@ function Sheet({
|
|
|
12143
12498
|
exit: variant.exit,
|
|
12144
12499
|
transition: { type: "tween", ease: [0.32, 0.72, 0, 1], duration: 0.28 },
|
|
12145
12500
|
children: [
|
|
12146
|
-
(side === "bottom" || side === "top") && dragHandle && /* @__PURE__ */
|
|
12501
|
+
(side === "bottom" || side === "top") && dragHandle && /* @__PURE__ */ jsx69("div", { className: "ods-sheet__handle", "aria-hidden": "true" }),
|
|
12147
12502
|
(title || description) && /* @__PURE__ */ jsxs67("header", { className: "ods-sheet__head", children: [
|
|
12148
|
-
title && /* @__PURE__ */
|
|
12149
|
-
description && /* @__PURE__ */
|
|
12503
|
+
title && /* @__PURE__ */ jsx69("h2", { className: "ods-sheet__title", children: title }),
|
|
12504
|
+
description && /* @__PURE__ */ jsx69("p", { className: "ods-sheet__desc", children: description })
|
|
12150
12505
|
] }),
|
|
12151
|
-
/* @__PURE__ */
|
|
12152
|
-
footer && /* @__PURE__ */
|
|
12506
|
+
/* @__PURE__ */ jsx69("div", { className: "ods-sheet__body", children }),
|
|
12507
|
+
footer && /* @__PURE__ */ jsx69("footer", { className: "ods-sheet__footer", children: footer })
|
|
12153
12508
|
]
|
|
12154
12509
|
}
|
|
12155
12510
|
)
|
|
@@ -12159,8 +12514,8 @@ function Sheet({
|
|
|
12159
12514
|
}
|
|
12160
12515
|
|
|
12161
12516
|
// src/components/Sidebar/Sidebar.tsx
|
|
12162
|
-
import { useCallback as useCallback17, useEffect as
|
|
12163
|
-
import { Fragment as
|
|
12517
|
+
import { useCallback as useCallback17, useEffect as useEffect19, useRef as useRef30, useState as useState26 } from "react";
|
|
12518
|
+
import { Fragment as Fragment18, jsx as jsx70, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
12164
12519
|
function Sidebar({
|
|
12165
12520
|
variant = "expanded",
|
|
12166
12521
|
brand,
|
|
@@ -12181,8 +12536,8 @@ function Sidebar({
|
|
|
12181
12536
|
className
|
|
12182
12537
|
}) {
|
|
12183
12538
|
const allSections = sections ?? (items ? [{ items }] : []);
|
|
12184
|
-
const [internalPinned, setInternalPinned] =
|
|
12185
|
-
|
|
12539
|
+
const [internalPinned, setInternalPinned] = useState26(defaultPinned);
|
|
12540
|
+
useEffect19(() => {
|
|
12186
12541
|
if (pinnedProp !== void 0) return;
|
|
12187
12542
|
try {
|
|
12188
12543
|
const stored = window.localStorage.getItem(pinStorageKey);
|
|
@@ -12204,9 +12559,9 @@ function Sidebar({
|
|
|
12204
12559
|
},
|
|
12205
12560
|
[pinnedProp, pinStorageKey, onPinnedChange]
|
|
12206
12561
|
);
|
|
12207
|
-
const [hoverOpen, setHoverOpen] =
|
|
12208
|
-
const openTimer =
|
|
12209
|
-
const closeTimer =
|
|
12562
|
+
const [hoverOpen, setHoverOpen] = useState26(false);
|
|
12563
|
+
const openTimer = useRef30(null);
|
|
12564
|
+
const closeTimer = useRef30(null);
|
|
12210
12565
|
const clearTimers = () => {
|
|
12211
12566
|
if (openTimer.current) {
|
|
12212
12567
|
clearTimeout(openTimer.current);
|
|
@@ -12217,7 +12572,7 @@ function Sidebar({
|
|
|
12217
12572
|
closeTimer.current = null;
|
|
12218
12573
|
}
|
|
12219
12574
|
};
|
|
12220
|
-
|
|
12575
|
+
useEffect19(() => () => clearTimers(), []);
|
|
12221
12576
|
const handleEnter = () => {
|
|
12222
12577
|
clearTimers();
|
|
12223
12578
|
openTimer.current = setTimeout(() => setHoverOpen(true), hoverOpenDelay);
|
|
@@ -12229,7 +12584,7 @@ function Sidebar({
|
|
|
12229
12584
|
const autoMode = variant === "auto";
|
|
12230
12585
|
const showAsRail = autoMode ? !pinned : variant === "rail";
|
|
12231
12586
|
const overlayOpen = autoMode && !pinned && hoverOpen;
|
|
12232
|
-
|
|
12587
|
+
useEffect19(() => {
|
|
12233
12588
|
if (!overlayOpen) return;
|
|
12234
12589
|
const handler = (e) => {
|
|
12235
12590
|
if (e.key === "Escape") {
|
|
@@ -12255,7 +12610,7 @@ function Sidebar({
|
|
|
12255
12610
|
onMouseEnter: autoMode && !pinned ? handleEnter : void 0,
|
|
12256
12611
|
onMouseLeave: autoMode && !pinned ? handleLeave : void 0,
|
|
12257
12612
|
children: [
|
|
12258
|
-
showAsRail ? /* @__PURE__ */
|
|
12613
|
+
showAsRail ? /* @__PURE__ */ jsx70(
|
|
12259
12614
|
RailLayout,
|
|
12260
12615
|
{
|
|
12261
12616
|
logo,
|
|
@@ -12266,7 +12621,7 @@ function Sidebar({
|
|
|
12266
12621
|
tooltipDelay,
|
|
12267
12622
|
suppressTooltips: overlayOpen
|
|
12268
12623
|
}
|
|
12269
|
-
) : /* @__PURE__ */
|
|
12624
|
+
) : /* @__PURE__ */ jsx70(
|
|
12270
12625
|
ExpandedLayout,
|
|
12271
12626
|
{
|
|
12272
12627
|
logo,
|
|
@@ -12279,7 +12634,7 @@ function Sidebar({
|
|
|
12279
12634
|
onPinToggle: autoMode ? () => setPinned(!pinned) : void 0
|
|
12280
12635
|
}
|
|
12281
12636
|
),
|
|
12282
|
-
overlayOpen && /* @__PURE__ */
|
|
12637
|
+
overlayOpen && /* @__PURE__ */ jsx70("div", { className: "ods-sidebar__overlay", onMouseEnter: handleEnter, onMouseLeave: handleLeave, children: /* @__PURE__ */ jsx70(
|
|
12283
12638
|
ExpandedLayout,
|
|
12284
12639
|
{
|
|
12285
12640
|
logo,
|
|
@@ -12305,16 +12660,16 @@ function RailLayout({
|
|
|
12305
12660
|
tooltipDelay,
|
|
12306
12661
|
suppressTooltips
|
|
12307
12662
|
}) {
|
|
12308
|
-
return /* @__PURE__ */ jsxs68(
|
|
12309
|
-
logo && /* @__PURE__ */
|
|
12310
|
-
onToggle && /* @__PURE__ */
|
|
12663
|
+
return /* @__PURE__ */ jsxs68(Fragment18, { children: [
|
|
12664
|
+
logo && /* @__PURE__ */ jsx70("div", { className: "ods-sidebar__logo-rail", children: logo }),
|
|
12665
|
+
onToggle && /* @__PURE__ */ jsx70(
|
|
12311
12666
|
"button",
|
|
12312
12667
|
{
|
|
12313
12668
|
type: "button",
|
|
12314
12669
|
className: "ods-sidebar__expand-rail",
|
|
12315
12670
|
onClick: onToggle,
|
|
12316
12671
|
"aria-label": "Expand sidebar",
|
|
12317
|
-
children: /* @__PURE__ */
|
|
12672
|
+
children: /* @__PURE__ */ jsx70("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx70(
|
|
12318
12673
|
"path",
|
|
12319
12674
|
{
|
|
12320
12675
|
d: "M13 3v10M5 5l3 3-3 3",
|
|
@@ -12326,7 +12681,7 @@ function RailLayout({
|
|
|
12326
12681
|
) })
|
|
12327
12682
|
}
|
|
12328
12683
|
),
|
|
12329
|
-
/* @__PURE__ */
|
|
12684
|
+
/* @__PURE__ */ jsx70("div", { className: "ods-sidebar__nav-rail", children: sections.flatMap((s) => s.items).map((item) => /* @__PURE__ */ jsx70(
|
|
12330
12685
|
RailItem,
|
|
12331
12686
|
{
|
|
12332
12687
|
item,
|
|
@@ -12335,8 +12690,8 @@ function RailLayout({
|
|
|
12335
12690
|
},
|
|
12336
12691
|
item.id
|
|
12337
12692
|
)) }),
|
|
12338
|
-
/* @__PURE__ */
|
|
12339
|
-
footerItems && footerItems.length > 0 && /* @__PURE__ */
|
|
12693
|
+
/* @__PURE__ */ jsx70("div", { className: "ods-sidebar__spacer" }),
|
|
12694
|
+
footerItems && footerItems.length > 0 && /* @__PURE__ */ jsx70("div", { className: "ods-sidebar__footer-rail", children: footerItems.map((item) => /* @__PURE__ */ jsx70(
|
|
12340
12695
|
RailItem,
|
|
12341
12696
|
{
|
|
12342
12697
|
item,
|
|
@@ -12345,14 +12700,14 @@ function RailLayout({
|
|
|
12345
12700
|
},
|
|
12346
12701
|
item.id
|
|
12347
12702
|
)) }),
|
|
12348
|
-
user && /* @__PURE__ */
|
|
12703
|
+
user && /* @__PURE__ */ jsx70(SidebarUserRail, { user })
|
|
12349
12704
|
] });
|
|
12350
12705
|
}
|
|
12351
12706
|
function SidebarUserRail({ user }) {
|
|
12352
12707
|
const labelText = typeof user.name === "string" ? user.name : "User";
|
|
12353
|
-
const avatar = user.avatar ?? /* @__PURE__ */
|
|
12708
|
+
const avatar = user.avatar ?? /* @__PURE__ */ jsx70("span", { children: user.initial ?? (typeof user.name === "string" ? user.name.charAt(0).toUpperCase() : "?") });
|
|
12354
12709
|
if (user.menu && user.menu.length > 0) {
|
|
12355
|
-
return /* @__PURE__ */
|
|
12710
|
+
return /* @__PURE__ */ jsx70(
|
|
12356
12711
|
DropdownMenu,
|
|
12357
12712
|
{
|
|
12358
12713
|
trigger: avatar,
|
|
@@ -12363,7 +12718,7 @@ function SidebarUserRail({ user }) {
|
|
|
12363
12718
|
}
|
|
12364
12719
|
);
|
|
12365
12720
|
}
|
|
12366
|
-
return /* @__PURE__ */
|
|
12721
|
+
return /* @__PURE__ */ jsx70(
|
|
12367
12722
|
"button",
|
|
12368
12723
|
{
|
|
12369
12724
|
type: "button",
|
|
@@ -12379,8 +12734,8 @@ function RailItem({
|
|
|
12379
12734
|
tooltipDelay,
|
|
12380
12735
|
suppressTooltip
|
|
12381
12736
|
}) {
|
|
12382
|
-
const [open, setOpen] =
|
|
12383
|
-
const timerRef =
|
|
12737
|
+
const [open, setOpen] = useState26(false);
|
|
12738
|
+
const timerRef = useRef30(null);
|
|
12384
12739
|
const hasChildren = !!(item.children && item.children.length > 0);
|
|
12385
12740
|
const clear = () => {
|
|
12386
12741
|
if (timerRef.current) {
|
|
@@ -12388,7 +12743,7 @@ function RailItem({
|
|
|
12388
12743
|
timerRef.current = null;
|
|
12389
12744
|
}
|
|
12390
12745
|
};
|
|
12391
|
-
|
|
12746
|
+
useEffect19(() => () => clear(), []);
|
|
12392
12747
|
const show = () => {
|
|
12393
12748
|
if (suppressTooltip) return;
|
|
12394
12749
|
clear();
|
|
@@ -12409,7 +12764,7 @@ function RailItem({
|
|
|
12409
12764
|
onFocus: show,
|
|
12410
12765
|
onBlur: hide,
|
|
12411
12766
|
children: [
|
|
12412
|
-
/* @__PURE__ */
|
|
12767
|
+
/* @__PURE__ */ jsx70(
|
|
12413
12768
|
Comp,
|
|
12414
12769
|
{
|
|
12415
12770
|
type: item.href ? void 0 : "button",
|
|
@@ -12424,13 +12779,13 @@ function RailItem({
|
|
|
12424
12779
|
"aria-label": labelText,
|
|
12425
12780
|
"aria-haspopup": hasChildren ? "menu" : void 0,
|
|
12426
12781
|
"aria-expanded": hasChildren ? open : void 0,
|
|
12427
|
-
children: /* @__PURE__ */
|
|
12782
|
+
children: /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__rail-icon", children: item.icon })
|
|
12428
12783
|
}
|
|
12429
12784
|
),
|
|
12430
|
-
open && labelText && hasChildren && /* @__PURE__ */
|
|
12785
|
+
open && labelText && hasChildren && /* @__PURE__ */ jsx70(RailFlyout, { title: labelText, items: item.children ?? [] }),
|
|
12431
12786
|
open && labelText && !hasChildren && /* @__PURE__ */ jsxs68("div", { className: "ods-sidebar__rail-tooltip", role: "tooltip", children: [
|
|
12432
|
-
/* @__PURE__ */
|
|
12433
|
-
item.shortcut && /* @__PURE__ */
|
|
12787
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__rail-tooltip-label", children: labelText }),
|
|
12788
|
+
item.shortcut && /* @__PURE__ */ jsx70("kbd", { className: "ods-sidebar__rail-kbd", children: item.shortcut })
|
|
12434
12789
|
] })
|
|
12435
12790
|
]
|
|
12436
12791
|
}
|
|
@@ -12438,10 +12793,10 @@ function RailItem({
|
|
|
12438
12793
|
}
|
|
12439
12794
|
function RailFlyout({ title, items }) {
|
|
12440
12795
|
return /* @__PURE__ */ jsxs68("div", { className: "ods-sidebar__rail-flyout", role: "menu", children: [
|
|
12441
|
-
/* @__PURE__ */
|
|
12442
|
-
/* @__PURE__ */
|
|
12796
|
+
/* @__PURE__ */ jsx70("div", { className: "ods-sidebar__rail-flyout-header", children: /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__rail-flyout-title", children: title }) }),
|
|
12797
|
+
/* @__PURE__ */ jsx70("ul", { className: "ods-sidebar__rail-flyout-list", children: items.map((child) => {
|
|
12443
12798
|
const ChildComp = child.href ? "a" : "button";
|
|
12444
|
-
return /* @__PURE__ */
|
|
12799
|
+
return /* @__PURE__ */ jsx70("li", { children: /* @__PURE__ */ jsxs68(
|
|
12445
12800
|
ChildComp,
|
|
12446
12801
|
{
|
|
12447
12802
|
type: child.href ? void 0 : "button",
|
|
@@ -12454,10 +12809,10 @@ function RailFlyout({ title, items }) {
|
|
|
12454
12809
|
),
|
|
12455
12810
|
"aria-current": child.active ? "page" : void 0,
|
|
12456
12811
|
children: [
|
|
12457
|
-
/* @__PURE__ */
|
|
12458
|
-
/* @__PURE__ */
|
|
12459
|
-
child.tag && /* @__PURE__ */
|
|
12460
|
-
child.badge && /* @__PURE__ */
|
|
12812
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__rail-flyout-icon", children: child.icon }),
|
|
12813
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__rail-flyout-label", children: child.label }),
|
|
12814
|
+
child.tag && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__rail-flyout-tag", children: child.tag }),
|
|
12815
|
+
child.badge && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__rail-flyout-badge", children: child.badge })
|
|
12461
12816
|
]
|
|
12462
12817
|
}
|
|
12463
12818
|
) }, child.id);
|
|
@@ -12475,21 +12830,21 @@ function ExpandedLayout({
|
|
|
12475
12830
|
onPinToggle
|
|
12476
12831
|
}) {
|
|
12477
12832
|
const hasFooterControl = Boolean(onPinToggle || onToggle);
|
|
12478
|
-
return /* @__PURE__ */ jsxs68(
|
|
12833
|
+
return /* @__PURE__ */ jsxs68(Fragment18, { children: [
|
|
12479
12834
|
(logo || brand) && /* @__PURE__ */ jsxs68("div", { className: "ods-sidebar__header", children: [
|
|
12480
|
-
logo && /* @__PURE__ */
|
|
12835
|
+
logo && /* @__PURE__ */ jsx70("div", { className: "ods-sidebar__logo", children: logo }),
|
|
12481
12836
|
brand && /* @__PURE__ */ jsxs68("div", { className: "ods-sidebar__brand", children: [
|
|
12482
|
-
/* @__PURE__ */
|
|
12483
|
-
brand.subtitle && /* @__PURE__ */
|
|
12837
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__brand-name", children: brand.name }),
|
|
12838
|
+
brand.subtitle && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__brand-sub", children: brand.subtitle })
|
|
12484
12839
|
] })
|
|
12485
12840
|
] }),
|
|
12486
|
-
/* @__PURE__ */
|
|
12487
|
-
section.label && /* @__PURE__ */
|
|
12488
|
-
section.items.map((item) => /* @__PURE__ */
|
|
12841
|
+
/* @__PURE__ */ jsx70("div", { className: "ods-sidebar__body", children: sections.map((section, sIdx) => /* @__PURE__ */ jsxs68("div", { className: "ods-sidebar__section", children: [
|
|
12842
|
+
section.label && /* @__PURE__ */ jsx70("div", { className: "ods-sidebar__section-label", children: section.label }),
|
|
12843
|
+
section.items.map((item) => /* @__PURE__ */ jsx70(ExpandedItem, { item, level: 0 }, item.id))
|
|
12489
12844
|
] }, section.id ?? sIdx)) }),
|
|
12490
12845
|
(footerItems || user || hasFooterControl) && /* @__PURE__ */ jsxs68("div", { className: "ods-sidebar__footer", children: [
|
|
12491
|
-
footerItems && footerItems.length > 0 && /* @__PURE__ */
|
|
12492
|
-
hasFooterControl && /* @__PURE__ */
|
|
12846
|
+
footerItems && footerItems.length > 0 && /* @__PURE__ */ jsx70("div", { className: "ods-sidebar__footer-list", children: footerItems.map((item) => /* @__PURE__ */ jsx70(ExpandedItem, { item, level: 0 }, item.id)) }),
|
|
12847
|
+
hasFooterControl && /* @__PURE__ */ jsx70("div", { className: "ods-sidebar__footer-control", children: onPinToggle ? /* @__PURE__ */ jsxs68(
|
|
12493
12848
|
"button",
|
|
12494
12849
|
{
|
|
12495
12850
|
type: "button",
|
|
@@ -12498,8 +12853,8 @@ function ExpandedLayout({
|
|
|
12498
12853
|
"aria-label": pinned ? "Unpin sidebar" : "Pin sidebar",
|
|
12499
12854
|
"aria-pressed": pinned,
|
|
12500
12855
|
children: [
|
|
12501
|
-
/* @__PURE__ */
|
|
12502
|
-
/* @__PURE__ */
|
|
12856
|
+
/* @__PURE__ */ jsx70(PinIcon, { pinned: !!pinned }),
|
|
12857
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__pin-label", children: pinned ? "Unpin" : "Pin sidebar" })
|
|
12503
12858
|
]
|
|
12504
12859
|
}
|
|
12505
12860
|
) : /* @__PURE__ */ jsxs68(
|
|
@@ -12510,7 +12865,7 @@ function ExpandedLayout({
|
|
|
12510
12865
|
onClick: onToggle,
|
|
12511
12866
|
"aria-label": "Collapse sidebar",
|
|
12512
12867
|
children: [
|
|
12513
|
-
/* @__PURE__ */
|
|
12868
|
+
/* @__PURE__ */ jsx70("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx70(
|
|
12514
12869
|
"path",
|
|
12515
12870
|
{
|
|
12516
12871
|
d: "M3 3v10M11 5l-3 3 3 3",
|
|
@@ -12520,11 +12875,11 @@ function ExpandedLayout({
|
|
|
12520
12875
|
strokeLinejoin: "round"
|
|
12521
12876
|
}
|
|
12522
12877
|
) }),
|
|
12523
|
-
/* @__PURE__ */
|
|
12878
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__pin-label", children: "Collapse" })
|
|
12524
12879
|
]
|
|
12525
12880
|
}
|
|
12526
12881
|
) }),
|
|
12527
|
-
user && /* @__PURE__ */
|
|
12882
|
+
user && /* @__PURE__ */ jsx70(SidebarUserCard, { user })
|
|
12528
12883
|
] })
|
|
12529
12884
|
] });
|
|
12530
12885
|
}
|
|
@@ -12542,19 +12897,19 @@ function PinIcon({ pinned }) {
|
|
|
12542
12897
|
strokeLinecap: "round",
|
|
12543
12898
|
"aria-hidden": "true",
|
|
12544
12899
|
children: [
|
|
12545
|
-
/* @__PURE__ */
|
|
12546
|
-
/* @__PURE__ */
|
|
12900
|
+
/* @__PURE__ */ jsx70("path", { d: "M10.5 1.5 14.5 5.5 11.5 8.5 11 11 5 5 7.5 4.5z" }),
|
|
12901
|
+
/* @__PURE__ */ jsx70("path", { d: "M5 5 1.5 14.5" })
|
|
12547
12902
|
]
|
|
12548
12903
|
}
|
|
12549
12904
|
);
|
|
12550
12905
|
}
|
|
12551
12906
|
function ExpandedItem({ item, level }) {
|
|
12552
12907
|
const hasChildren = !!(item.children && item.children.length > 0);
|
|
12553
|
-
const [open, setOpen] =
|
|
12908
|
+
const [open, setOpen] = useState26(
|
|
12554
12909
|
item.defaultExpanded ?? (hasChildren && hasActiveDescendant(item))
|
|
12555
12910
|
);
|
|
12556
12911
|
if (hasChildren) {
|
|
12557
|
-
return /* @__PURE__ */ jsxs68(
|
|
12912
|
+
return /* @__PURE__ */ jsxs68(Fragment18, { children: [
|
|
12558
12913
|
/* @__PURE__ */ jsxs68(
|
|
12559
12914
|
"button",
|
|
12560
12915
|
{
|
|
@@ -12572,11 +12927,11 @@ function ExpandedItem({ item, level }) {
|
|
|
12572
12927
|
},
|
|
12573
12928
|
"aria-expanded": open,
|
|
12574
12929
|
children: [
|
|
12575
|
-
/* @__PURE__ */
|
|
12576
|
-
/* @__PURE__ */
|
|
12577
|
-
item.tag && /* @__PURE__ */
|
|
12578
|
-
item.badge && /* @__PURE__ */
|
|
12579
|
-
/* @__PURE__ */
|
|
12930
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__icon", children: item.icon }),
|
|
12931
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__label", children: item.label }),
|
|
12932
|
+
item.tag && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__tag", children: item.tag }),
|
|
12933
|
+
item.badge && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__badge", children: item.badge }),
|
|
12934
|
+
/* @__PURE__ */ jsx70(
|
|
12580
12935
|
"svg",
|
|
12581
12936
|
{
|
|
12582
12937
|
className: cn("ods-sidebar__chevron", open && "ods-sidebar__chevron--open"),
|
|
@@ -12585,7 +12940,7 @@ function ExpandedItem({ item, level }) {
|
|
|
12585
12940
|
viewBox: "0 0 12 12",
|
|
12586
12941
|
fill: "none",
|
|
12587
12942
|
"aria-hidden": "true",
|
|
12588
|
-
children: /* @__PURE__ */
|
|
12943
|
+
children: /* @__PURE__ */ jsx70(
|
|
12589
12944
|
"path",
|
|
12590
12945
|
{
|
|
12591
12946
|
d: "M4.5 3l3 3-3 3",
|
|
@@ -12600,14 +12955,14 @@ function ExpandedItem({ item, level }) {
|
|
|
12600
12955
|
]
|
|
12601
12956
|
}
|
|
12602
12957
|
),
|
|
12603
|
-
open && /* @__PURE__ */
|
|
12958
|
+
open && /* @__PURE__ */ jsx70(
|
|
12604
12959
|
"div",
|
|
12605
12960
|
{
|
|
12606
12961
|
className: cn(
|
|
12607
12962
|
"ods-sidebar__subtree",
|
|
12608
12963
|
`ods-sidebar__subtree--l${Math.min(level + 1, 3)}`
|
|
12609
12964
|
),
|
|
12610
|
-
children: item.children.map((child) => /* @__PURE__ */
|
|
12965
|
+
children: item.children.map((child) => /* @__PURE__ */ jsx70(ExpandedItem, { item: child, level: level + 1 }, child.id))
|
|
12611
12966
|
}
|
|
12612
12967
|
)
|
|
12613
12968
|
] });
|
|
@@ -12626,30 +12981,30 @@ function ExpandedItem({ item, level }) {
|
|
|
12626
12981
|
),
|
|
12627
12982
|
"aria-current": item.active ? "page" : void 0,
|
|
12628
12983
|
children: [
|
|
12629
|
-
/* @__PURE__ */
|
|
12630
|
-
/* @__PURE__ */
|
|
12631
|
-
item.tag && /* @__PURE__ */
|
|
12632
|
-
item.badge && /* @__PURE__ */
|
|
12984
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__icon", children: item.icon }),
|
|
12985
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__label", children: item.label }),
|
|
12986
|
+
item.tag && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__tag", children: item.tag }),
|
|
12987
|
+
item.badge && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__badge", children: item.badge })
|
|
12633
12988
|
]
|
|
12634
12989
|
}
|
|
12635
12990
|
);
|
|
12636
12991
|
}
|
|
12637
12992
|
function SidebarUserCard({ user }) {
|
|
12638
12993
|
const labelText = typeof user.name === "string" ? user.name : "User";
|
|
12639
|
-
const body = /* @__PURE__ */ jsxs68(
|
|
12640
|
-
/* @__PURE__ */
|
|
12994
|
+
const body = /* @__PURE__ */ jsxs68(Fragment18, { children: [
|
|
12995
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__user-avatar", children: user.avatar ?? /* @__PURE__ */ jsx70("span", { children: user.initial ?? (typeof user.name === "string" ? user.name.charAt(0).toUpperCase() : "?") }) }),
|
|
12641
12996
|
/* @__PURE__ */ jsxs68("span", { className: "ods-sidebar__user-info", children: [
|
|
12642
|
-
/* @__PURE__ */
|
|
12643
|
-
user.email && /* @__PURE__ */
|
|
12997
|
+
/* @__PURE__ */ jsx70("span", { className: "ods-sidebar__user-name", children: user.name }),
|
|
12998
|
+
user.email && /* @__PURE__ */ jsx70("span", { className: "ods-sidebar__user-email", children: user.email })
|
|
12644
12999
|
] }),
|
|
12645
13000
|
/* @__PURE__ */ jsxs68("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
|
|
12646
|
-
/* @__PURE__ */
|
|
12647
|
-
/* @__PURE__ */
|
|
12648
|
-
/* @__PURE__ */
|
|
13001
|
+
/* @__PURE__ */ jsx70("circle", { cx: "8", cy: "3", r: "1.3", fill: "currentColor" }),
|
|
13002
|
+
/* @__PURE__ */ jsx70("circle", { cx: "8", cy: "8", r: "1.3", fill: "currentColor" }),
|
|
13003
|
+
/* @__PURE__ */ jsx70("circle", { cx: "8", cy: "13", r: "1.3", fill: "currentColor" })
|
|
12649
13004
|
] })
|
|
12650
13005
|
] });
|
|
12651
13006
|
if (user.menu && user.menu.length > 0) {
|
|
12652
|
-
return /* @__PURE__ */
|
|
13007
|
+
return /* @__PURE__ */ jsx70(
|
|
12653
13008
|
DropdownMenu,
|
|
12654
13009
|
{
|
|
12655
13010
|
trigger: body,
|
|
@@ -12660,7 +13015,7 @@ function SidebarUserCard({ user }) {
|
|
|
12660
13015
|
}
|
|
12661
13016
|
);
|
|
12662
13017
|
}
|
|
12663
|
-
return /* @__PURE__ */
|
|
13018
|
+
return /* @__PURE__ */ jsx70("button", { type: "button", className: "ods-sidebar__user-card", onClick: user.onClick, children: body });
|
|
12664
13019
|
}
|
|
12665
13020
|
function hasActiveDescendant(item) {
|
|
12666
13021
|
if (!item.children) return false;
|
|
@@ -12672,12 +13027,12 @@ function hasActiveDescendant(item) {
|
|
|
12672
13027
|
}
|
|
12673
13028
|
|
|
12674
13029
|
// src/components/Skeleton/Skeleton.tsx
|
|
12675
|
-
import { jsx as
|
|
13030
|
+
import { jsx as jsx71 } from "react/jsx-runtime";
|
|
12676
13031
|
function Skeleton({ variant = "text", width, height, lines = 1, className }) {
|
|
12677
13032
|
const resolvedWidth = typeof width === "number" ? `${width}px` : width;
|
|
12678
13033
|
const resolvedHeight = typeof height === "number" ? `${height}px` : height;
|
|
12679
13034
|
if (variant === "text" && lines > 1) {
|
|
12680
|
-
return /* @__PURE__ */
|
|
13035
|
+
return /* @__PURE__ */ jsx71("div", { className: cn("ods-skeleton__group", className), role: "status", "aria-label": "Loading", children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsx71(
|
|
12681
13036
|
"div",
|
|
12682
13037
|
{
|
|
12683
13038
|
className: cn("ods-skeleton", "ods-skeleton--text"),
|
|
@@ -12689,7 +13044,7 @@ function Skeleton({ variant = "text", width, height, lines = 1, className }) {
|
|
|
12689
13044
|
i
|
|
12690
13045
|
)) });
|
|
12691
13046
|
}
|
|
12692
|
-
return /* @__PURE__ */
|
|
13047
|
+
return /* @__PURE__ */ jsx71(
|
|
12693
13048
|
"div",
|
|
12694
13049
|
{
|
|
12695
13050
|
className: cn("ods-skeleton", `ods-skeleton--${variant}`, className),
|
|
@@ -12705,10 +13060,10 @@ function Skeleton({ variant = "text", width, height, lines = 1, className }) {
|
|
|
12705
13060
|
|
|
12706
13061
|
// src/components/SlideoutPanel/SlideoutPanel.tsx
|
|
12707
13062
|
import { AnimatePresence as AnimatePresence8, motion as motion11 } from "framer-motion";
|
|
12708
|
-
import { useRef as
|
|
13063
|
+
import { useRef as useRef31 } from "react";
|
|
12709
13064
|
import { FocusScope as FocusScope2, OverlayProvider as OverlayProvider2, useDialog as useDialog2, useModal as useModal2, useOverlay as useOverlay2 } from "react-aria";
|
|
12710
13065
|
import { createPortal as createPortal9 } from "react-dom";
|
|
12711
|
-
import { Fragment as
|
|
13066
|
+
import { Fragment as Fragment19, jsx as jsx72, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
12712
13067
|
var slideVariants2 = {
|
|
12713
13068
|
left: {
|
|
12714
13069
|
initial: { x: "-100%" },
|
|
@@ -12731,8 +13086,8 @@ function SlideoutContent({
|
|
|
12731
13086
|
footer,
|
|
12732
13087
|
className
|
|
12733
13088
|
}) {
|
|
12734
|
-
const overlayRef =
|
|
12735
|
-
const panelRef =
|
|
13089
|
+
const overlayRef = useRef31(null);
|
|
13090
|
+
const panelRef = useRef31(null);
|
|
12736
13091
|
const { overlayProps } = useOverlay2(
|
|
12737
13092
|
{
|
|
12738
13093
|
isOpen: open,
|
|
@@ -12746,8 +13101,8 @@ function SlideoutContent({
|
|
|
12746
13101
|
const { onDrag, onDragStart, onDragEnd, onAnimationStart, ...safeOverlayProps } = overlayProps;
|
|
12747
13102
|
const variant = slideVariants2[position];
|
|
12748
13103
|
const panelWidth = typeof width === "number" ? `${width}px` : width;
|
|
12749
|
-
return /* @__PURE__ */
|
|
12750
|
-
/* @__PURE__ */
|
|
13104
|
+
return /* @__PURE__ */ jsx72(AnimatePresence8, { children: open && /* @__PURE__ */ jsxs69(Fragment19, { children: [
|
|
13105
|
+
/* @__PURE__ */ jsx72(
|
|
12751
13106
|
motion11.div,
|
|
12752
13107
|
{
|
|
12753
13108
|
className: "ods-slideout__backdrop",
|
|
@@ -12760,7 +13115,7 @@ function SlideoutContent({
|
|
|
12760
13115
|
"aria-hidden": "true"
|
|
12761
13116
|
}
|
|
12762
13117
|
),
|
|
12763
|
-
/* @__PURE__ */
|
|
13118
|
+
/* @__PURE__ */ jsx72(FocusScope2, { contain: true, restoreFocus: true, autoFocus: true, children: /* @__PURE__ */ jsxs69(
|
|
12764
13119
|
motion11.div,
|
|
12765
13120
|
{
|
|
12766
13121
|
...safeOverlayProps,
|
|
@@ -12778,20 +13133,20 @@ function SlideoutContent({
|
|
|
12778
13133
|
transition: { type: "tween", ease: [0.32, 0.72, 0, 1], duration: 0.28 },
|
|
12779
13134
|
children: [
|
|
12780
13135
|
title && /* @__PURE__ */ jsxs69("div", { className: "ods-slideout__header", children: [
|
|
12781
|
-
/* @__PURE__ */
|
|
12782
|
-
/* @__PURE__ */
|
|
13136
|
+
/* @__PURE__ */ jsx72("h2", { ...titleProps, className: "ods-slideout__title", children: title }),
|
|
13137
|
+
/* @__PURE__ */ jsx72(
|
|
12783
13138
|
"button",
|
|
12784
13139
|
{
|
|
12785
13140
|
className: "ods-slideout__close",
|
|
12786
13141
|
onClick: onClose,
|
|
12787
13142
|
"aria-label": "Close panel",
|
|
12788
13143
|
type: "button",
|
|
12789
|
-
children: /* @__PURE__ */
|
|
13144
|
+
children: /* @__PURE__ */ jsx72("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx72("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) })
|
|
12790
13145
|
}
|
|
12791
13146
|
)
|
|
12792
13147
|
] }),
|
|
12793
|
-
/* @__PURE__ */
|
|
12794
|
-
footer && /* @__PURE__ */
|
|
13148
|
+
/* @__PURE__ */ jsx72("div", { className: "ods-slideout__body", children }),
|
|
13149
|
+
footer && /* @__PURE__ */ jsx72("div", { className: "ods-slideout__footer", children: footer })
|
|
12795
13150
|
]
|
|
12796
13151
|
}
|
|
12797
13152
|
) })
|
|
@@ -12800,13 +13155,13 @@ function SlideoutContent({
|
|
|
12800
13155
|
function SlideoutPanel(props) {
|
|
12801
13156
|
if (typeof document === "undefined") return null;
|
|
12802
13157
|
return createPortal9(
|
|
12803
|
-
/* @__PURE__ */
|
|
13158
|
+
/* @__PURE__ */ jsx72(OverlayProvider2, { children: /* @__PURE__ */ jsx72(SlideoutContent, { ...props }) }),
|
|
12804
13159
|
document.body
|
|
12805
13160
|
);
|
|
12806
13161
|
}
|
|
12807
13162
|
|
|
12808
13163
|
// src/components/Slider/Slider.tsx
|
|
12809
|
-
import { jsx as
|
|
13164
|
+
import { jsx as jsx73, jsxs as jsxs70 } from "react/jsx-runtime";
|
|
12810
13165
|
function Slider({
|
|
12811
13166
|
label,
|
|
12812
13167
|
value,
|
|
@@ -12837,12 +13192,12 @@ function Slider({
|
|
|
12837
13192
|
),
|
|
12838
13193
|
children: [
|
|
12839
13194
|
(label || showValue) && /* @__PURE__ */ jsxs70("div", { className: "ods-slider__head", children: [
|
|
12840
|
-
label && /* @__PURE__ */
|
|
12841
|
-
showValue && /* @__PURE__ */
|
|
13195
|
+
label && /* @__PURE__ */ jsx73("span", { className: "ods-slider__label", children: label }),
|
|
13196
|
+
showValue && /* @__PURE__ */ jsx73("span", { className: "ods-slider__value", children: display })
|
|
12842
13197
|
] }),
|
|
12843
13198
|
/* @__PURE__ */ jsxs70("div", { className: "ods-slider__track", children: [
|
|
12844
|
-
/* @__PURE__ */
|
|
12845
|
-
/* @__PURE__ */
|
|
13199
|
+
/* @__PURE__ */ jsx73("span", { className: "ods-slider__fill", style: { width: `${pct}%` } }),
|
|
13200
|
+
/* @__PURE__ */ jsx73(
|
|
12846
13201
|
"input",
|
|
12847
13202
|
{
|
|
12848
13203
|
type: "range",
|
|
@@ -12863,7 +13218,7 @@ function Slider({
|
|
|
12863
13218
|
}
|
|
12864
13219
|
|
|
12865
13220
|
// src/components/SocialButton/SocialButton.tsx
|
|
12866
|
-
import { jsx as
|
|
13221
|
+
import { jsx as jsx74, jsxs as jsxs71 } from "react/jsx-runtime";
|
|
12867
13222
|
var DEFAULT_LABELS = {
|
|
12868
13223
|
google: "Continue with Google",
|
|
12869
13224
|
github: "Continue with GitHub",
|
|
@@ -12871,28 +13226,28 @@ var DEFAULT_LABELS = {
|
|
|
12871
13226
|
twitter: "Continue with X"
|
|
12872
13227
|
};
|
|
12873
13228
|
var GoogleIcon = () => /* @__PURE__ */ jsxs71("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": "true", children: [
|
|
12874
|
-
/* @__PURE__ */
|
|
13229
|
+
/* @__PURE__ */ jsx74(
|
|
12875
13230
|
"path",
|
|
12876
13231
|
{
|
|
12877
13232
|
d: "M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.48h4.84a4.14 4.14 0 0 1-1.79 2.72v2.26h2.9c1.69-1.56 2.69-3.85 2.69-6.62z",
|
|
12878
13233
|
fill: "#4285F4"
|
|
12879
13234
|
}
|
|
12880
13235
|
),
|
|
12881
|
-
/* @__PURE__ */
|
|
13236
|
+
/* @__PURE__ */ jsx74(
|
|
12882
13237
|
"path",
|
|
12883
13238
|
{
|
|
12884
13239
|
d: "M9 18c2.43 0 4.47-.8 5.96-2.18l-2.9-2.26c-.8.54-1.84.86-3.06.86-2.34 0-4.33-1.58-5.04-3.71H.96v2.33A9 9 0 0 0 9 18z",
|
|
12885
13240
|
fill: "#34A853"
|
|
12886
13241
|
}
|
|
12887
13242
|
),
|
|
12888
|
-
/* @__PURE__ */
|
|
13243
|
+
/* @__PURE__ */ jsx74(
|
|
12889
13244
|
"path",
|
|
12890
13245
|
{
|
|
12891
13246
|
d: "M3.96 10.71A5.38 5.38 0 0 1 3.68 9c0-.6.1-1.18.28-1.71V4.96H.96A9 9 0 0 0 0 9c0 1.45.35 2.82.96 4.04l3-2.33z",
|
|
12892
13247
|
fill: "#FBBC05"
|
|
12893
13248
|
}
|
|
12894
13249
|
),
|
|
12895
|
-
/* @__PURE__ */
|
|
13250
|
+
/* @__PURE__ */ jsx74(
|
|
12896
13251
|
"path",
|
|
12897
13252
|
{
|
|
12898
13253
|
d: "M9 3.58c1.32 0 2.5.45 3.44 1.35l2.58-2.58A9 9 0 0 0 9 0 9 9 0 0 0 .96 4.96l3 2.33C4.67 5.16 6.66 3.58 9 3.58z",
|
|
@@ -12900,21 +13255,21 @@ var GoogleIcon = () => /* @__PURE__ */ jsxs71("svg", { width: "18", height: "18"
|
|
|
12900
13255
|
}
|
|
12901
13256
|
)
|
|
12902
13257
|
] });
|
|
12903
|
-
var GitHubIcon = () => /* @__PURE__ */
|
|
13258
|
+
var GitHubIcon = () => /* @__PURE__ */ jsx74("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx74(
|
|
12904
13259
|
"path",
|
|
12905
13260
|
{
|
|
12906
13261
|
d: "M9 .2a9 9 0 0 0-2.85 17.55c.45.08.62-.2.62-.43v-1.5c-2.5.54-3.04-1.2-3.04-1.2-.41-1.05-1-1.33-1-1.33-.82-.56.06-.55.06-.55.9.06 1.38.93 1.38.93.8 1.38 2.11.98 2.63.75.08-.58.31-.98.57-1.2-2-.23-4.1-1-4.1-4.44 0-.98.35-1.78.93-2.41-.1-.23-.4-1.15.09-2.4 0 0 .76-.25 2.48.92a8.6 8.6 0 0 1 4.5 0c1.72-1.17 2.48-.92 2.48-.92.49 1.25.18 2.17.09 2.4.58.63.93 1.43.93 2.4 0 3.45-2.1 4.21-4.1 4.44.32.28.6.82.6 1.67v2.47c0 .24.17.52.63.43A9 9 0 0 0 9 .2z",
|
|
12907
13262
|
fill: "#ffffff"
|
|
12908
13263
|
}
|
|
12909
13264
|
) });
|
|
12910
|
-
var AppleIcon = () => /* @__PURE__ */
|
|
13265
|
+
var AppleIcon = () => /* @__PURE__ */ jsx74("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx74(
|
|
12911
13266
|
"path",
|
|
12912
13267
|
{
|
|
12913
13268
|
d: "M13.4 9.5c0-1.7 1.4-2.5 1.5-2.6-.8-1.2-2.1-1.3-2.5-1.3-1.1-.1-2.1.6-2.6.6-.6 0-1.4-.6-2.3-.6-1.2 0-2.3.7-2.9 1.8-1.2 2.1-.3 5.3.9 7 .6.9 1.3 1.8 2.2 1.8.9 0 1.2-.6 2.3-.6s1.4.6 2.3.6 1.5-.9 2.1-1.8c.7-1 1-2 1-2.1 0 0-1.9-.7-2-2.8zM11.5 4.5c.5-.6.8-1.4.7-2.2-.7 0-1.5.5-2 1.1-.4.5-.8 1.3-.7 2.1.8.1 1.6-.4 2-1z",
|
|
12914
13269
|
fill: "#ffffff"
|
|
12915
13270
|
}
|
|
12916
13271
|
) });
|
|
12917
|
-
var TwitterIcon = () => /* @__PURE__ */
|
|
13272
|
+
var TwitterIcon = () => /* @__PURE__ */ jsx74("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx74(
|
|
12918
13273
|
"path",
|
|
12919
13274
|
{
|
|
12920
13275
|
d: "M13.8 1.3h2.6l-5.7 6.5L17.4 16h-5.2l-4.1-5.3L3.4 16H.8l6-6.9L.5 1.3h5.4l3.7 4.9 4.2-4.9z",
|
|
@@ -12952,8 +13307,8 @@ function SocialButton({
|
|
|
12952
13307
|
className
|
|
12953
13308
|
),
|
|
12954
13309
|
children: [
|
|
12955
|
-
resolvedIcon && /* @__PURE__ */
|
|
12956
|
-
/* @__PURE__ */
|
|
13310
|
+
resolvedIcon && /* @__PURE__ */ jsx74("span", { className: "ods-social-btn__icon", "aria-hidden": "true", children: resolvedIcon }),
|
|
13311
|
+
/* @__PURE__ */ jsx74("span", { className: "ods-social-btn__label", children: resolvedLabel })
|
|
12957
13312
|
]
|
|
12958
13313
|
}
|
|
12959
13314
|
);
|
|
@@ -12962,11 +13317,11 @@ function SocialButton({
|
|
|
12962
13317
|
// src/components/Sortable/Sortable.tsx
|
|
12963
13318
|
import {
|
|
12964
13319
|
useCallback as useCallback18,
|
|
12965
|
-
useEffect as
|
|
12966
|
-
useRef as
|
|
12967
|
-
useState as
|
|
13320
|
+
useEffect as useEffect20,
|
|
13321
|
+
useRef as useRef32,
|
|
13322
|
+
useState as useState27
|
|
12968
13323
|
} from "react";
|
|
12969
|
-
import { jsx as
|
|
13324
|
+
import { jsx as jsx75, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
12970
13325
|
var DT_TYPE = "application/x-ods-sortable";
|
|
12971
13326
|
function Sortable({
|
|
12972
13327
|
items,
|
|
@@ -12978,13 +13333,13 @@ function Sortable({
|
|
|
12978
13333
|
autoScrollEdge = 48,
|
|
12979
13334
|
className
|
|
12980
13335
|
}) {
|
|
12981
|
-
const containerRef =
|
|
12982
|
-
const itemRefs =
|
|
12983
|
-
const originalOrderRef =
|
|
12984
|
-
const scrollTimerRef =
|
|
12985
|
-
const [draggingId, setDraggingId] =
|
|
12986
|
-
const [dropPos, setDropPos] =
|
|
12987
|
-
const [kbActiveId, setKbActiveId] =
|
|
13336
|
+
const containerRef = useRef32(null);
|
|
13337
|
+
const itemRefs = useRef32(/* @__PURE__ */ new Map());
|
|
13338
|
+
const originalOrderRef = useRef32(null);
|
|
13339
|
+
const scrollTimerRef = useRef32(null);
|
|
13340
|
+
const [draggingId, setDraggingId] = useState27(null);
|
|
13341
|
+
const [dropPos, setDropPos] = useState27(null);
|
|
13342
|
+
const [kbActiveId, setKbActiveId] = useState27(null);
|
|
12988
13343
|
const isVertical = direction === "vertical";
|
|
12989
13344
|
const onDragStart = useCallback18(
|
|
12990
13345
|
(id) => (e) => {
|
|
@@ -13045,7 +13400,7 @@ function Sortable({
|
|
|
13045
13400
|
},
|
|
13046
13401
|
[items, onChange]
|
|
13047
13402
|
);
|
|
13048
|
-
|
|
13403
|
+
useEffect20(() => {
|
|
13049
13404
|
if (!autoScroll || !draggingId) return;
|
|
13050
13405
|
const container = containerRef.current;
|
|
13051
13406
|
if (!container) return;
|
|
@@ -13095,7 +13450,7 @@ function Sortable({
|
|
|
13095
13450
|
}
|
|
13096
13451
|
};
|
|
13097
13452
|
}, [autoScroll, autoScrollEdge, draggingId, isVertical]);
|
|
13098
|
-
|
|
13453
|
+
useEffect20(() => {
|
|
13099
13454
|
if (!draggingId) return;
|
|
13100
13455
|
const onKey = (e) => {
|
|
13101
13456
|
if (e.key === "Escape") cancelDrag();
|
|
@@ -13197,7 +13552,7 @@ function Sortable({
|
|
|
13197
13552
|
),
|
|
13198
13553
|
onDragOver: onItemDragOver(item.id),
|
|
13199
13554
|
children: [
|
|
13200
|
-
/* @__PURE__ */
|
|
13555
|
+
/* @__PURE__ */ jsx75(
|
|
13201
13556
|
"span",
|
|
13202
13557
|
{
|
|
13203
13558
|
className: "ods-sortable__indicator ods-sortable__indicator--before",
|
|
@@ -13205,7 +13560,7 @@ function Sortable({
|
|
|
13205
13560
|
}
|
|
13206
13561
|
),
|
|
13207
13562
|
renderItem(item, idx, dragProps),
|
|
13208
|
-
/* @__PURE__ */
|
|
13563
|
+
/* @__PURE__ */ jsx75(
|
|
13209
13564
|
"span",
|
|
13210
13565
|
{
|
|
13211
13566
|
className: "ods-sortable__indicator ods-sortable__indicator--after",
|
|
@@ -13217,7 +13572,7 @@ function Sortable({
|
|
|
13217
13572
|
item.id
|
|
13218
13573
|
);
|
|
13219
13574
|
}),
|
|
13220
|
-
/* @__PURE__ */
|
|
13575
|
+
/* @__PURE__ */ jsx75("span", { className: "ods-sortable__sr", "aria-live": "polite", "aria-atomic": "true", children: kbActiveId ? `Item picked up. Use arrow keys to reorder, Space or Enter to drop, Escape to cancel.` : "" })
|
|
13221
13576
|
]
|
|
13222
13577
|
}
|
|
13223
13578
|
);
|
|
@@ -13228,7 +13583,7 @@ function DragHandle({
|
|
|
13228
13583
|
ariaLabel = "Drag to reorder",
|
|
13229
13584
|
dragProps
|
|
13230
13585
|
}) {
|
|
13231
|
-
return /* @__PURE__ */
|
|
13586
|
+
return /* @__PURE__ */ jsx75(
|
|
13232
13587
|
"span",
|
|
13233
13588
|
{
|
|
13234
13589
|
"data-ods-sortable-handle": "true",
|
|
@@ -13237,19 +13592,19 @@ function DragHandle({
|
|
|
13237
13592
|
style,
|
|
13238
13593
|
...dragProps,
|
|
13239
13594
|
children: /* @__PURE__ */ jsxs72("svg", { width: "8", height: "14", viewBox: "0 0 8 14", fill: "none", "aria-hidden": "true", children: [
|
|
13240
|
-
/* @__PURE__ */
|
|
13241
|
-
/* @__PURE__ */
|
|
13242
|
-
/* @__PURE__ */
|
|
13243
|
-
/* @__PURE__ */
|
|
13244
|
-
/* @__PURE__ */
|
|
13245
|
-
/* @__PURE__ */
|
|
13595
|
+
/* @__PURE__ */ jsx75("circle", { cx: "2", cy: "3", r: "1", fill: "currentColor" }),
|
|
13596
|
+
/* @__PURE__ */ jsx75("circle", { cx: "6", cy: "3", r: "1", fill: "currentColor" }),
|
|
13597
|
+
/* @__PURE__ */ jsx75("circle", { cx: "2", cy: "7", r: "1", fill: "currentColor" }),
|
|
13598
|
+
/* @__PURE__ */ jsx75("circle", { cx: "6", cy: "7", r: "1", fill: "currentColor" }),
|
|
13599
|
+
/* @__PURE__ */ jsx75("circle", { cx: "2", cy: "11", r: "1", fill: "currentColor" }),
|
|
13600
|
+
/* @__PURE__ */ jsx75("circle", { cx: "6", cy: "11", r: "1", fill: "currentColor" })
|
|
13246
13601
|
] })
|
|
13247
13602
|
}
|
|
13248
13603
|
);
|
|
13249
13604
|
}
|
|
13250
13605
|
|
|
13251
13606
|
// src/components/Sparkline/Sparkline.tsx
|
|
13252
|
-
import { jsx as
|
|
13607
|
+
import { jsx as jsx76, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
13253
13608
|
function Sparkline({
|
|
13254
13609
|
data,
|
|
13255
13610
|
width = 80,
|
|
@@ -13297,8 +13652,8 @@ function Sparkline({
|
|
|
13297
13652
|
role: "img",
|
|
13298
13653
|
"aria-label": ariaLabel,
|
|
13299
13654
|
children: [
|
|
13300
|
-
area && /* @__PURE__ */
|
|
13301
|
-
/* @__PURE__ */
|
|
13655
|
+
area && /* @__PURE__ */ jsx76("path", { d: area, fill }),
|
|
13656
|
+
/* @__PURE__ */ jsx76(
|
|
13302
13657
|
"path",
|
|
13303
13658
|
{
|
|
13304
13659
|
d: path,
|
|
@@ -13314,47 +13669,6 @@ function Sparkline({
|
|
|
13314
13669
|
);
|
|
13315
13670
|
}
|
|
13316
13671
|
|
|
13317
|
-
// src/components/Spinner/Spinner.tsx
|
|
13318
|
-
import { jsx as jsx76 } from "react/jsx-runtime";
|
|
13319
|
-
var sizeMap = {
|
|
13320
|
-
sm: 16,
|
|
13321
|
-
md: 24,
|
|
13322
|
-
lg: 32,
|
|
13323
|
-
xl: 48
|
|
13324
|
-
};
|
|
13325
|
-
function Spinner({
|
|
13326
|
-
size = "md",
|
|
13327
|
-
color = "var(--ods-color-brand-500)",
|
|
13328
|
-
className
|
|
13329
|
-
}) {
|
|
13330
|
-
const px = sizeMap[size];
|
|
13331
|
-
return /* @__PURE__ */ jsx76(
|
|
13332
|
-
"svg",
|
|
13333
|
-
{
|
|
13334
|
-
className: cn("ods-spinner", `ods-spinner--${size}`, className),
|
|
13335
|
-
width: px,
|
|
13336
|
-
height: px,
|
|
13337
|
-
viewBox: "0 0 24 24",
|
|
13338
|
-
fill: "none",
|
|
13339
|
-
role: "status",
|
|
13340
|
-
"aria-label": "Loading",
|
|
13341
|
-
style: { color },
|
|
13342
|
-
children: /* @__PURE__ */ jsx76(
|
|
13343
|
-
"circle",
|
|
13344
|
-
{
|
|
13345
|
-
cx: "12",
|
|
13346
|
-
cy: "12",
|
|
13347
|
-
r: "10",
|
|
13348
|
-
strokeWidth: "3",
|
|
13349
|
-
strokeLinecap: "round",
|
|
13350
|
-
strokeDasharray: "31.4 31.4",
|
|
13351
|
-
className: "ods-spinner__circle"
|
|
13352
|
-
}
|
|
13353
|
-
)
|
|
13354
|
-
}
|
|
13355
|
-
);
|
|
13356
|
-
}
|
|
13357
|
-
|
|
13358
13672
|
// src/components/Stat/Stat.tsx
|
|
13359
13673
|
import { jsx as jsx77, jsxs as jsxs74 } from "react/jsx-runtime";
|
|
13360
13674
|
function Stat({
|
|
@@ -13386,7 +13700,7 @@ function Stat({
|
|
|
13386
13700
|
}
|
|
13387
13701
|
|
|
13388
13702
|
// src/components/Switch/Switch.tsx
|
|
13389
|
-
import { useRef as
|
|
13703
|
+
import { useRef as useRef33 } from "react";
|
|
13390
13704
|
import { useSwitch } from "react-aria";
|
|
13391
13705
|
import { jsx as jsx78, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
13392
13706
|
function Switch({
|
|
@@ -13399,7 +13713,7 @@ function Switch({
|
|
|
13399
13713
|
className,
|
|
13400
13714
|
...props
|
|
13401
13715
|
}) {
|
|
13402
|
-
const ref =
|
|
13716
|
+
const ref = useRef33(null);
|
|
13403
13717
|
const state = $fd3c5e01e837dc20$export$8042c6c013fd5226({
|
|
13404
13718
|
isSelected: checked,
|
|
13405
13719
|
defaultSelected: defaultChecked,
|
|
@@ -13457,8 +13771,8 @@ function Switch({
|
|
|
13457
13771
|
}
|
|
13458
13772
|
|
|
13459
13773
|
// src/components/Table/Table.tsx
|
|
13460
|
-
import { useCallback as useCallback19, useState as
|
|
13461
|
-
import { Fragment as
|
|
13774
|
+
import { useCallback as useCallback19, useState as useState28 } from "react";
|
|
13775
|
+
import { Fragment as Fragment20, jsx as jsx79, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
13462
13776
|
function Table({
|
|
13463
13777
|
columns,
|
|
13464
13778
|
data,
|
|
@@ -13580,8 +13894,8 @@ function TableRow({
|
|
|
13580
13894
|
totalCols
|
|
13581
13895
|
}) {
|
|
13582
13896
|
const isSelected = selectedRows?.has(rowIndex) ?? false;
|
|
13583
|
-
const [expanded, setExpanded] =
|
|
13584
|
-
return /* @__PURE__ */ jsxs76(
|
|
13897
|
+
const [expanded, setExpanded] = useState28(false);
|
|
13898
|
+
return /* @__PURE__ */ jsxs76(Fragment20, { children: [
|
|
13585
13899
|
/* @__PURE__ */ jsxs76(
|
|
13586
13900
|
"tr",
|
|
13587
13901
|
{
|
|
@@ -13617,11 +13931,15 @@ function TableRow({
|
|
|
13617
13931
|
|
|
13618
13932
|
// src/components/Tabs/Tabs.tsx
|
|
13619
13933
|
import { motion as motion12 } from "framer-motion";
|
|
13620
|
-
import { useMemo as useMemo12, useRef as
|
|
13934
|
+
import { useCallback as useCallback20, useEffect as useEffect21, useId as useId7, useMemo as useMemo12, useRef as useRef34, useState as useState29 } from "react";
|
|
13621
13935
|
import { useTab, useTabList, useTabPanel } from "react-aria";
|
|
13622
13936
|
import { jsx as jsx80, jsxs as jsxs77 } from "react/jsx-runtime";
|
|
13623
|
-
function TabButton({
|
|
13624
|
-
|
|
13937
|
+
function TabButton({
|
|
13938
|
+
item,
|
|
13939
|
+
state,
|
|
13940
|
+
indicatorLayoutId
|
|
13941
|
+
}) {
|
|
13942
|
+
const ref = useRef34(null);
|
|
13625
13943
|
const { tabProps } = useTab({ key: item.key }, state, ref);
|
|
13626
13944
|
const isSelected = state.selectedKey === item.key;
|
|
13627
13945
|
const isDisabled = state.disabledKeys.has(item.key);
|
|
@@ -13642,7 +13960,7 @@ function TabButton({ item, state }) {
|
|
|
13642
13960
|
motion12.div,
|
|
13643
13961
|
{
|
|
13644
13962
|
className: "ods-tabs__indicator",
|
|
13645
|
-
layoutId:
|
|
13963
|
+
layoutId: indicatorLayoutId,
|
|
13646
13964
|
transition: { type: "spring", damping: 30, stiffness: 400 }
|
|
13647
13965
|
}
|
|
13648
13966
|
)
|
|
@@ -13651,10 +13969,12 @@ function TabButton({ item, state }) {
|
|
|
13651
13969
|
);
|
|
13652
13970
|
}
|
|
13653
13971
|
function TabPanelContent({ state, panelContent, ...props }) {
|
|
13654
|
-
const ref =
|
|
13972
|
+
const ref = useRef34(null);
|
|
13655
13973
|
const { tabPanelProps } = useTabPanel(props, state, ref);
|
|
13656
13974
|
return /* @__PURE__ */ jsx80("div", { ...tabPanelProps, ref, className: "ods-tabs__panel", children: panelContent });
|
|
13657
13975
|
}
|
|
13976
|
+
var SCROLL_EDGE_EPSILON = 1;
|
|
13977
|
+
var SCROLL_STEP_PX = 200;
|
|
13658
13978
|
function Tabs({
|
|
13659
13979
|
items,
|
|
13660
13980
|
value,
|
|
@@ -13663,7 +13983,9 @@ function Tabs({
|
|
|
13663
13983
|
orientation = "horizontal",
|
|
13664
13984
|
className
|
|
13665
13985
|
}) {
|
|
13666
|
-
const
|
|
13986
|
+
const reactId = useId7();
|
|
13987
|
+
const indicatorLayoutId = `ods-tabs-indicator-${reactId}`;
|
|
13988
|
+
const [internalValue, setInternalValue] = useState29(defaultValue || items[0]?.value);
|
|
13667
13989
|
const selectedKey = value ?? internalValue;
|
|
13668
13990
|
const handleSelectionChange = (key) => {
|
|
13669
13991
|
const keyStr = String(key);
|
|
@@ -13687,17 +14009,103 @@ function Tabs({
|
|
|
13687
14009
|
disabledKeys: items.filter((i) => i.disabled).map((i) => i.value)
|
|
13688
14010
|
};
|
|
13689
14011
|
const state = $caeb030f09a278a1$export$4ba071daf4e486(stateProps);
|
|
13690
|
-
const ref =
|
|
14012
|
+
const ref = useRef34(null);
|
|
13691
14013
|
const { tabListProps } = useTabList({ ...stateProps, orientation }, state, ref);
|
|
14014
|
+
const scrollContainerRef = useRef34(null);
|
|
14015
|
+
const [canScrollLeft, setCanScrollLeft] = useState29(false);
|
|
14016
|
+
const [canScrollRight, setCanScrollRight] = useState29(false);
|
|
14017
|
+
const measureOverflow = useCallback20(() => {
|
|
14018
|
+
const el = scrollContainerRef.current;
|
|
14019
|
+
if (!el || orientation !== "horizontal") {
|
|
14020
|
+
setCanScrollLeft(false);
|
|
14021
|
+
setCanScrollRight(false);
|
|
14022
|
+
return;
|
|
14023
|
+
}
|
|
14024
|
+
const max = el.scrollWidth - el.clientWidth;
|
|
14025
|
+
setCanScrollLeft(el.scrollLeft > SCROLL_EDGE_EPSILON);
|
|
14026
|
+
setCanScrollRight(el.scrollLeft < max - SCROLL_EDGE_EPSILON);
|
|
14027
|
+
}, [orientation]);
|
|
14028
|
+
useEffect21(() => {
|
|
14029
|
+
measureOverflow();
|
|
14030
|
+
const el = scrollContainerRef.current;
|
|
14031
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
14032
|
+
const ro = new ResizeObserver(() => measureOverflow());
|
|
14033
|
+
ro.observe(el);
|
|
14034
|
+
return () => ro.disconnect();
|
|
14035
|
+
}, [items, measureOverflow]);
|
|
14036
|
+
const onScroll = () => measureOverflow();
|
|
14037
|
+
const scrollBy = (dir) => {
|
|
14038
|
+
const el = scrollContainerRef.current;
|
|
14039
|
+
if (!el) return;
|
|
14040
|
+
el.scrollBy({ left: dir * SCROLL_STEP_PX, behavior: "smooth" });
|
|
14041
|
+
};
|
|
13692
14042
|
const currentPanelContent = panelContentMap.get(String(selectedKey));
|
|
13693
14043
|
return /* @__PURE__ */ jsxs77("div", { className: cn("ods-tabs", `ods-tabs--${orientation}`, className), children: [
|
|
13694
|
-
/* @__PURE__ */
|
|
14044
|
+
/* @__PURE__ */ jsxs77("div", { className: "ods-tabs__list-wrap", children: [
|
|
14045
|
+
orientation === "horizontal" && canScrollLeft && /* @__PURE__ */ jsx80(
|
|
14046
|
+
"button",
|
|
14047
|
+
{
|
|
14048
|
+
type: "button",
|
|
14049
|
+
className: "ods-tabs__scroll-btn ods-tabs__scroll-btn--left",
|
|
14050
|
+
onClick: () => scrollBy(-1),
|
|
14051
|
+
"aria-label": "Scroll tabs left",
|
|
14052
|
+
tabIndex: -1,
|
|
14053
|
+
children: /* @__PURE__ */ jsx80(ChevronSvg, { dir: "left" })
|
|
14054
|
+
}
|
|
14055
|
+
),
|
|
14056
|
+
/* @__PURE__ */ jsx80(
|
|
14057
|
+
"div",
|
|
14058
|
+
{
|
|
14059
|
+
className: "ods-tabs__scroller",
|
|
14060
|
+
ref: scrollContainerRef,
|
|
14061
|
+
onScroll: orientation === "horizontal" ? onScroll : void 0,
|
|
14062
|
+
children: /* @__PURE__ */ jsx80("div", { ...tabListProps, ref, className: "ods-tabs__list", children: [...state.collection].map((item) => /* @__PURE__ */ jsx80(
|
|
14063
|
+
TabButton,
|
|
14064
|
+
{
|
|
14065
|
+
item,
|
|
14066
|
+
state,
|
|
14067
|
+
indicatorLayoutId
|
|
14068
|
+
},
|
|
14069
|
+
item.key
|
|
14070
|
+
)) })
|
|
14071
|
+
}
|
|
14072
|
+
),
|
|
14073
|
+
orientation === "horizontal" && canScrollRight && /* @__PURE__ */ jsx80(
|
|
14074
|
+
"button",
|
|
14075
|
+
{
|
|
14076
|
+
type: "button",
|
|
14077
|
+
className: "ods-tabs__scroll-btn ods-tabs__scroll-btn--right",
|
|
14078
|
+
onClick: () => scrollBy(1),
|
|
14079
|
+
"aria-label": "Scroll tabs right",
|
|
14080
|
+
tabIndex: -1,
|
|
14081
|
+
children: /* @__PURE__ */ jsx80(ChevronSvg, { dir: "right" })
|
|
14082
|
+
}
|
|
14083
|
+
)
|
|
14084
|
+
] }),
|
|
13695
14085
|
/* @__PURE__ */ jsx80(TabPanelContent, { state, panelContent: currentPanelContent }, state.selectedKey)
|
|
13696
14086
|
] });
|
|
13697
14087
|
}
|
|
14088
|
+
function ChevronSvg({ dir }) {
|
|
14089
|
+
const d = dir === "left" ? "M11 4L5 10l6 6" : "M9 4l6 6-6 6";
|
|
14090
|
+
return /* @__PURE__ */ jsx80(
|
|
14091
|
+
"svg",
|
|
14092
|
+
{
|
|
14093
|
+
width: "14",
|
|
14094
|
+
height: "14",
|
|
14095
|
+
viewBox: "0 0 20 20",
|
|
14096
|
+
fill: "none",
|
|
14097
|
+
stroke: "currentColor",
|
|
14098
|
+
strokeWidth: "1.8",
|
|
14099
|
+
strokeLinecap: "round",
|
|
14100
|
+
strokeLinejoin: "round",
|
|
14101
|
+
"aria-hidden": "true",
|
|
14102
|
+
children: /* @__PURE__ */ jsx80("path", { d })
|
|
14103
|
+
}
|
|
14104
|
+
);
|
|
14105
|
+
}
|
|
13698
14106
|
|
|
13699
14107
|
// src/components/TagsInput/TagsInput.tsx
|
|
13700
|
-
import { useState as
|
|
14108
|
+
import { useState as useState30 } from "react";
|
|
13701
14109
|
import { jsx as jsx81, jsxs as jsxs78 } from "react/jsx-runtime";
|
|
13702
14110
|
function TagsInput({
|
|
13703
14111
|
label,
|
|
@@ -13713,7 +14121,7 @@ function TagsInput({
|
|
|
13713
14121
|
separators = ["Enter", ","],
|
|
13714
14122
|
className
|
|
13715
14123
|
}) {
|
|
13716
|
-
const [draft, setDraft] =
|
|
14124
|
+
const [draft, setDraft] = useState30("");
|
|
13717
14125
|
const addTag = (raw) => {
|
|
13718
14126
|
const tag = raw.trim();
|
|
13719
14127
|
if (!tag) return;
|
|
@@ -13841,7 +14249,7 @@ function TestimonialCard({
|
|
|
13841
14249
|
}
|
|
13842
14250
|
|
|
13843
14251
|
// src/components/Textarea/Textarea.tsx
|
|
13844
|
-
import { useId as
|
|
14252
|
+
import { useId as useId8, useRef as useRef35, useState as useState31 } from "react";
|
|
13845
14253
|
import { useTextField } from "react-aria";
|
|
13846
14254
|
import { jsx as jsx83, jsxs as jsxs80 } from "react/jsx-runtime";
|
|
13847
14255
|
function Textarea({
|
|
@@ -13859,9 +14267,9 @@ function Textarea({
|
|
|
13859
14267
|
onChange,
|
|
13860
14268
|
...props
|
|
13861
14269
|
}) {
|
|
13862
|
-
const ref =
|
|
13863
|
-
const errorId =
|
|
13864
|
-
const [charCount, setCharCount] =
|
|
14270
|
+
const ref = useRef35(null);
|
|
14271
|
+
const errorId = useId8();
|
|
14272
|
+
const [charCount, setCharCount] = useState31(() => String(value ?? defaultValue ?? "").length);
|
|
13865
14273
|
const ariaNameProps = resolveAccessibleName({
|
|
13866
14274
|
label,
|
|
13867
14275
|
ariaLabel: props["aria-label"],
|
|
@@ -13958,13 +14366,13 @@ function Timeline({ items, size = "md", className }) {
|
|
|
13958
14366
|
|
|
13959
14367
|
// src/components/TimePicker/TimePicker.tsx
|
|
13960
14368
|
import {
|
|
13961
|
-
Fragment as
|
|
13962
|
-
useCallback as
|
|
13963
|
-
useEffect as
|
|
13964
|
-
useRef as
|
|
13965
|
-
useState as
|
|
14369
|
+
Fragment as Fragment21,
|
|
14370
|
+
useCallback as useCallback21,
|
|
14371
|
+
useEffect as useEffect22,
|
|
14372
|
+
useRef as useRef36,
|
|
14373
|
+
useState as useState32
|
|
13966
14374
|
} from "react";
|
|
13967
|
-
import { Fragment as
|
|
14375
|
+
import { Fragment as Fragment22, jsx as jsx85, jsxs as jsxs82 } from "react/jsx-runtime";
|
|
13968
14376
|
var pad = (n) => n.toString().padStart(2, "0");
|
|
13969
14377
|
function format(v, use24h, showSeconds) {
|
|
13970
14378
|
const base = `${pad(v.hours)}:${pad(v.minutes)}${showSeconds ? `:${pad(v.seconds ?? 0)}` : ""}`;
|
|
@@ -13991,15 +14399,15 @@ function TimePicker({
|
|
|
13991
14399
|
helperText,
|
|
13992
14400
|
className
|
|
13993
14401
|
}) {
|
|
13994
|
-
const [open, setOpen] =
|
|
13995
|
-
const [activeSeg, setActiveSeg] =
|
|
13996
|
-
const draftRef =
|
|
13997
|
-
const wrapRef =
|
|
13998
|
-
const hoursRef =
|
|
13999
|
-
const minutesRef =
|
|
14000
|
-
const secondsRef =
|
|
14402
|
+
const [open, setOpen] = useState32(false);
|
|
14403
|
+
const [activeSeg, setActiveSeg] = useState32(null);
|
|
14404
|
+
const draftRef = useRef36("");
|
|
14405
|
+
const wrapRef = useRef36(null);
|
|
14406
|
+
const hoursRef = useRef36(null);
|
|
14407
|
+
const minutesRef = useRef36(null);
|
|
14408
|
+
const secondsRef = useRef36(null);
|
|
14001
14409
|
const refOf = (s) => s === "hours" ? hoursRef : s === "minutes" ? minutesRef : secondsRef;
|
|
14002
|
-
|
|
14410
|
+
useEffect22(() => {
|
|
14003
14411
|
if (!open) return;
|
|
14004
14412
|
const onDoc = (e) => {
|
|
14005
14413
|
if (!wrapRef.current?.contains(e.target)) {
|
|
@@ -14010,7 +14418,7 @@ function TimePicker({
|
|
|
14010
14418
|
document.addEventListener("mousedown", onDoc);
|
|
14011
14419
|
return () => document.removeEventListener("mousedown", onDoc);
|
|
14012
14420
|
}, [open]);
|
|
14013
|
-
const commit =
|
|
14421
|
+
const commit = useCallback21(
|
|
14014
14422
|
(seg, n) => {
|
|
14015
14423
|
const next = { ...value, [seg]: clampSeg(seg, n, use24h) };
|
|
14016
14424
|
if (showSeconds && next.seconds === void 0) next.seconds = 0;
|
|
@@ -14173,7 +14581,7 @@ function TimePicker({
|
|
|
14173
14581
|
segButton("hours", value.hours),
|
|
14174
14582
|
/* @__PURE__ */ jsx85("span", { className: "ods-timepicker__display-sep", children: ":" }),
|
|
14175
14583
|
segButton("minutes", value.minutes),
|
|
14176
|
-
showSeconds && /* @__PURE__ */ jsxs82(
|
|
14584
|
+
showSeconds && /* @__PURE__ */ jsxs82(Fragment22, { children: [
|
|
14177
14585
|
/* @__PURE__ */ jsx85("span", { className: "ods-timepicker__display-sep", children: ":" }),
|
|
14178
14586
|
segButton("seconds", value.seconds ?? 0)
|
|
14179
14587
|
] })
|
|
@@ -14205,7 +14613,7 @@ function TimePicker({
|
|
|
14205
14613
|
)
|
|
14206
14614
|
] })
|
|
14207
14615
|
] }),
|
|
14208
|
-
/* @__PURE__ */ jsx85("div", { className: "ods-timepicker__body", children: segOrder().map((seg, i, arr) => /* @__PURE__ */ jsxs82(
|
|
14616
|
+
/* @__PURE__ */ jsx85("div", { className: "ods-timepicker__body", children: segOrder().map((seg, i, arr) => /* @__PURE__ */ jsxs82(Fragment21, { children: [
|
|
14209
14617
|
/* @__PURE__ */ jsxs82("div", { className: "ods-timepicker__col", children: [
|
|
14210
14618
|
/* @__PURE__ */ jsx85("span", { className: "ods-timepicker__col-lbl", children: seg === "hours" ? "HOUR" : seg === "minutes" ? "MIN" : "SEC" }),
|
|
14211
14619
|
/* @__PURE__ */ jsx85(
|
|
@@ -14260,8 +14668,8 @@ function TimePicker({
|
|
|
14260
14668
|
}
|
|
14261
14669
|
|
|
14262
14670
|
// src/components/TimezonePicker/TimezonePicker.tsx
|
|
14263
|
-
import { useEffect as
|
|
14264
|
-
import { Fragment as
|
|
14671
|
+
import { useEffect as useEffect23, useMemo as useMemo13, useRef as useRef37, useState as useState33 } from "react";
|
|
14672
|
+
import { Fragment as Fragment23, jsx as jsx86, jsxs as jsxs83 } from "react/jsx-runtime";
|
|
14265
14673
|
var DEFAULT_TZS = [
|
|
14266
14674
|
{ iana: "America/Los_Angeles", label: "Pacific Time", offset: "UTC\u22128" },
|
|
14267
14675
|
{ iana: "America/Denver", label: "Mountain Time", offset: "UTC\u22127" },
|
|
@@ -14288,10 +14696,10 @@ function TimezonePicker({
|
|
|
14288
14696
|
placeholder = "Select timezone",
|
|
14289
14697
|
className
|
|
14290
14698
|
}) {
|
|
14291
|
-
const [open, setOpen] =
|
|
14292
|
-
const [query, setQuery] =
|
|
14293
|
-
const wrapRef =
|
|
14294
|
-
const inputRef =
|
|
14699
|
+
const [open, setOpen] = useState33(false);
|
|
14700
|
+
const [query, setQuery] = useState33("");
|
|
14701
|
+
const wrapRef = useRef37(null);
|
|
14702
|
+
const inputRef = useRef37(null);
|
|
14295
14703
|
const selected = options.find((o) => o.iana === value);
|
|
14296
14704
|
const filtered = useMemo13(() => {
|
|
14297
14705
|
if (!query.trim()) return options;
|
|
@@ -14300,7 +14708,7 @@ function TimezonePicker({
|
|
|
14300
14708
|
(o) => o.iana.toLowerCase().includes(q2) || o.label.toLowerCase().includes(q2) || o.offset.toLowerCase().includes(q2) || o.region?.toLowerCase().includes(q2)
|
|
14301
14709
|
);
|
|
14302
14710
|
}, [options, query]);
|
|
14303
|
-
|
|
14711
|
+
useEffect23(() => {
|
|
14304
14712
|
if (!open) return;
|
|
14305
14713
|
const onDoc = (e) => {
|
|
14306
14714
|
if (!wrapRef.current?.contains(e.target)) {
|
|
@@ -14311,7 +14719,7 @@ function TimezonePicker({
|
|
|
14311
14719
|
document.addEventListener("mousedown", onDoc);
|
|
14312
14720
|
return () => document.removeEventListener("mousedown", onDoc);
|
|
14313
14721
|
}, [open]);
|
|
14314
|
-
|
|
14722
|
+
useEffect23(() => {
|
|
14315
14723
|
if (open) requestAnimationFrame(() => inputRef.current?.focus());
|
|
14316
14724
|
}, [open]);
|
|
14317
14725
|
const select = (iana) => {
|
|
@@ -14354,7 +14762,7 @@ function TimezonePicker({
|
|
|
14354
14762
|
}
|
|
14355
14763
|
)
|
|
14356
14764
|
] }),
|
|
14357
|
-
/* @__PURE__ */ jsx86("span", { className: "ods-tzpicker__info", children: selected ? /* @__PURE__ */ jsxs83(
|
|
14765
|
+
/* @__PURE__ */ jsx86("span", { className: "ods-tzpicker__info", children: selected ? /* @__PURE__ */ jsxs83(Fragment23, { children: [
|
|
14358
14766
|
/* @__PURE__ */ jsx86("span", { className: "ods-tzpicker__name", children: selected.label }),
|
|
14359
14767
|
/* @__PURE__ */ jsxs83("span", { className: "ods-tzpicker__meta", children: [
|
|
14360
14768
|
selected.iana.split("/").pop()?.replace(/_/g, " "),
|
|
@@ -14466,14 +14874,14 @@ function TimezonePicker({
|
|
|
14466
14874
|
import { AnimatePresence as AnimatePresence9, motion as motion13 } from "framer-motion";
|
|
14467
14875
|
import {
|
|
14468
14876
|
createContext as createContext2,
|
|
14469
|
-
useCallback as
|
|
14877
|
+
useCallback as useCallback22,
|
|
14470
14878
|
useContext as useContext2,
|
|
14471
14879
|
useMemo as useMemo14,
|
|
14472
|
-
useRef as
|
|
14473
|
-
useState as
|
|
14880
|
+
useRef as useRef38,
|
|
14881
|
+
useState as useState34
|
|
14474
14882
|
} from "react";
|
|
14475
14883
|
import { createPortal as createPortal10 } from "react-dom";
|
|
14476
|
-
import { Fragment as
|
|
14884
|
+
import { Fragment as Fragment24, jsx as jsx87, jsxs as jsxs84 } from "react/jsx-runtime";
|
|
14477
14885
|
var defaultIcons = {
|
|
14478
14886
|
success: /* @__PURE__ */ jsxs84("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: [
|
|
14479
14887
|
/* @__PURE__ */ jsx87(
|
|
@@ -14564,9 +14972,9 @@ var defaultIcons = {
|
|
|
14564
14972
|
var ToastContext = createContext2(null);
|
|
14565
14973
|
function ToastBody({ item, onDismiss }) {
|
|
14566
14974
|
const dismiss = () => onDismiss(item.id);
|
|
14567
|
-
if (item.render) return /* @__PURE__ */ jsx87(
|
|
14975
|
+
if (item.render) return /* @__PURE__ */ jsx87(Fragment24, { children: item.render({ id: item.id, dismiss }) });
|
|
14568
14976
|
const title = item.title ?? item.message;
|
|
14569
|
-
return /* @__PURE__ */ jsxs84(
|
|
14977
|
+
return /* @__PURE__ */ jsxs84(Fragment24, { children: [
|
|
14570
14978
|
/* @__PURE__ */ jsx87("span", { className: "ods-toast__icon", "aria-hidden": "true", children: item.icon ?? defaultIcons[item.variant] }),
|
|
14571
14979
|
/* @__PURE__ */ jsxs84("div", { className: "ods-toast__body", children: [
|
|
14572
14980
|
title && /* @__PURE__ */ jsx87("div", { className: "ods-toast__title", children: title }),
|
|
@@ -14597,8 +15005,8 @@ function ToastBody({ item, onDismiss }) {
|
|
|
14597
15005
|
] });
|
|
14598
15006
|
}
|
|
14599
15007
|
function PositionStack({ items, position, onDismiss, maxStack }) {
|
|
14600
|
-
const [hovered, setHovered] =
|
|
14601
|
-
const [pinned, setPinned] =
|
|
15008
|
+
const [hovered, setHovered] = useState34(false);
|
|
15009
|
+
const [pinned, setPinned] = useState34(false);
|
|
14602
15010
|
const expanded = hovered || pinned;
|
|
14603
15011
|
const ordered = useMemo14(() => [...items].reverse(), [items]);
|
|
14604
15012
|
const isBottom = position.startsWith("bottom");
|
|
@@ -14698,10 +15106,10 @@ function ToastProvider({
|
|
|
14698
15106
|
defaultPosition = "bottom-right",
|
|
14699
15107
|
maxStack = 3
|
|
14700
15108
|
}) {
|
|
14701
|
-
const [toasts, setToasts] =
|
|
14702
|
-
const timers =
|
|
14703
|
-
const idCounter2 =
|
|
14704
|
-
const dismiss =
|
|
15109
|
+
const [toasts, setToasts] = useState34([]);
|
|
15110
|
+
const timers = useRef38(/* @__PURE__ */ new Map());
|
|
15111
|
+
const idCounter2 = useRef38(0);
|
|
15112
|
+
const dismiss = useCallback22((id) => {
|
|
14705
15113
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
14706
15114
|
const timer = timers.current.get(id);
|
|
14707
15115
|
if (timer) {
|
|
@@ -14709,7 +15117,7 @@ function ToastProvider({
|
|
|
14709
15117
|
timers.current.delete(id);
|
|
14710
15118
|
}
|
|
14711
15119
|
}, []);
|
|
14712
|
-
const dismissAll =
|
|
15120
|
+
const dismissAll = useCallback22((position) => {
|
|
14713
15121
|
setToasts((prev) => {
|
|
14714
15122
|
const remaining = position ? prev.filter((t) => t.position !== position) : [];
|
|
14715
15123
|
for (const t of prev) {
|
|
@@ -14724,7 +15132,7 @@ function ToastProvider({
|
|
|
14724
15132
|
return remaining;
|
|
14725
15133
|
});
|
|
14726
15134
|
}, []);
|
|
14727
|
-
const toast =
|
|
15135
|
+
const toast = useCallback22(
|
|
14728
15136
|
(options) => {
|
|
14729
15137
|
const id = `toast-${++idCounter2.current}`;
|
|
14730
15138
|
const item = {
|
|
@@ -14762,7 +15170,7 @@ function ToastProvider({
|
|
|
14762
15170
|
return out;
|
|
14763
15171
|
}, [toasts]);
|
|
14764
15172
|
const ctx = { toast, dismiss, dismissAll };
|
|
14765
|
-
const containers = /* @__PURE__ */ jsx87(
|
|
15173
|
+
const containers = /* @__PURE__ */ jsx87(Fragment24, { children: POSITIONS.map((pos) => {
|
|
14766
15174
|
const list = groups[pos];
|
|
14767
15175
|
if (list.length === 0) return null;
|
|
14768
15176
|
return /* @__PURE__ */ jsx87(
|
|
@@ -15020,15 +15428,15 @@ function ToolCard({
|
|
|
15020
15428
|
import { AnimatePresence as AnimatePresence10, motion as motion14 } from "framer-motion";
|
|
15021
15429
|
import {
|
|
15022
15430
|
cloneElement,
|
|
15023
|
-
useCallback as
|
|
15024
|
-
useEffect as
|
|
15431
|
+
useCallback as useCallback23,
|
|
15432
|
+
useEffect as useEffect24,
|
|
15025
15433
|
useLayoutEffect as useLayoutEffect5,
|
|
15026
|
-
useRef as
|
|
15027
|
-
useState as
|
|
15434
|
+
useRef as useRef39,
|
|
15435
|
+
useState as useState35
|
|
15028
15436
|
} from "react";
|
|
15029
15437
|
import { useTooltip, useTooltipTrigger } from "react-aria";
|
|
15030
15438
|
import { createPortal as createPortal11 } from "react-dom";
|
|
15031
|
-
import { Fragment as
|
|
15439
|
+
import { Fragment as Fragment25, jsx as jsx91, jsxs as jsxs88 } from "react/jsx-runtime";
|
|
15032
15440
|
function computePosition3(rect, tipRect, position, offset) {
|
|
15033
15441
|
const cx = rect.left + rect.width / 2;
|
|
15034
15442
|
const cy = rect.top + rect.height / 2;
|
|
@@ -15058,9 +15466,9 @@ function TooltipContent({
|
|
|
15058
15466
|
offset
|
|
15059
15467
|
}) {
|
|
15060
15468
|
const { tooltipProps } = useTooltip({ isOpen: state.isOpen }, state);
|
|
15061
|
-
const tipRef =
|
|
15062
|
-
const [coords, setCoords] =
|
|
15063
|
-
const reposition =
|
|
15469
|
+
const tipRef = useRef39(null);
|
|
15470
|
+
const [coords, setCoords] = useState35(null);
|
|
15471
|
+
const reposition = useCallback23(() => {
|
|
15064
15472
|
if (!triggerRef.current || !tipRef.current) return;
|
|
15065
15473
|
const trigRect = triggerRef.current.getBoundingClientRect();
|
|
15066
15474
|
const tipRect = tipRef.current.getBoundingClientRect();
|
|
@@ -15072,7 +15480,7 @@ function TooltipContent({
|
|
|
15072
15480
|
const id = requestAnimationFrame(reposition);
|
|
15073
15481
|
return () => cancelAnimationFrame(id);
|
|
15074
15482
|
}, [state.isOpen, reposition]);
|
|
15075
|
-
|
|
15483
|
+
useEffect24(() => {
|
|
15076
15484
|
if (!state.isOpen) return;
|
|
15077
15485
|
const handler = () => reposition();
|
|
15078
15486
|
window.addEventListener("scroll", handler, true);
|
|
@@ -15128,10 +15536,10 @@ function Tooltip({
|
|
|
15128
15536
|
children,
|
|
15129
15537
|
className
|
|
15130
15538
|
}) {
|
|
15131
|
-
const triggerRef =
|
|
15539
|
+
const triggerRef = useRef39(null);
|
|
15132
15540
|
const state = $3834487504f4fc00$export$4d40659c25ecb50b({ delay });
|
|
15133
15541
|
const { triggerProps } = useTooltipTrigger({ delay }, state, triggerRef);
|
|
15134
|
-
return /* @__PURE__ */ jsxs88(
|
|
15542
|
+
return /* @__PURE__ */ jsxs88(Fragment25, { children: [
|
|
15135
15543
|
cloneElement(children, {
|
|
15136
15544
|
...triggerProps,
|
|
15137
15545
|
ref: triggerRef
|
|
@@ -15232,7 +15640,7 @@ function TopBar({
|
|
|
15232
15640
|
}
|
|
15233
15641
|
|
|
15234
15642
|
// src/components/TraceStep/TraceStep.tsx
|
|
15235
|
-
import { useState as
|
|
15643
|
+
import { useState as useState36 } from "react";
|
|
15236
15644
|
import { jsx as jsx93, jsxs as jsxs90 } from "react/jsx-runtime";
|
|
15237
15645
|
var KIND_GLYPH = {
|
|
15238
15646
|
thought: /* @__PURE__ */ jsx93("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx93(
|
|
@@ -15293,7 +15701,7 @@ function TraceStep({
|
|
|
15293
15701
|
isLast = false,
|
|
15294
15702
|
className
|
|
15295
15703
|
}) {
|
|
15296
|
-
const [open, setOpen] =
|
|
15704
|
+
const [open, setOpen] = useState36(defaultOpen);
|
|
15297
15705
|
const canExpand = !!children;
|
|
15298
15706
|
return /* @__PURE__ */ jsxs90(
|
|
15299
15707
|
"div",
|
|
@@ -15412,10 +15820,10 @@ function UserCard({ name, role, avatar, initial, stats, action, className }) {
|
|
|
15412
15820
|
}
|
|
15413
15821
|
|
|
15414
15822
|
// src/components/WorkflowEditor/WorkflowEditor.tsx
|
|
15415
|
-
import { useCallback as
|
|
15823
|
+
import { useCallback as useCallback25, useMemo as useMemo16, useState as useState37 } from "react";
|
|
15416
15824
|
|
|
15417
15825
|
// src/hooks/useWorkflow.ts
|
|
15418
|
-
import { useCallback as
|
|
15826
|
+
import { useCallback as useCallback24, useMemo as useMemo15, useReducer } from "react";
|
|
15419
15827
|
|
|
15420
15828
|
// src/workflow/types.ts
|
|
15421
15829
|
var types_exports = {};
|
|
@@ -15929,11 +16337,11 @@ function useWorkflow(options = {}) {
|
|
|
15929
16337
|
[]
|
|
15930
16338
|
);
|
|
15931
16339
|
const [workflow, dispatch] = useReducer(reducer, initial);
|
|
15932
|
-
const addNode =
|
|
16340
|
+
const addNode = useCallback24(
|
|
15933
16341
|
(node) => dispatch({ type: "ADD_NODE", payload: node }),
|
|
15934
16342
|
[]
|
|
15935
16343
|
);
|
|
15936
|
-
const createNode =
|
|
16344
|
+
const createNode = useCallback24(
|
|
15937
16345
|
(partial) => {
|
|
15938
16346
|
const id = partial.id ?? genId("node");
|
|
15939
16347
|
const ports = partial.ports ?? {
|
|
@@ -15982,27 +16390,27 @@ function useWorkflow(options = {}) {
|
|
|
15982
16390
|
},
|
|
15983
16391
|
[]
|
|
15984
16392
|
);
|
|
15985
|
-
const updateNode =
|
|
16393
|
+
const updateNode = useCallback24(
|
|
15986
16394
|
(id, updates) => dispatch({ type: "UPDATE_NODE", payload: { id, updates } }),
|
|
15987
16395
|
[]
|
|
15988
16396
|
);
|
|
15989
|
-
const deleteNode =
|
|
16397
|
+
const deleteNode = useCallback24(
|
|
15990
16398
|
(id) => dispatch({ type: "DELETE_NODE", payload: id }),
|
|
15991
16399
|
[]
|
|
15992
16400
|
);
|
|
15993
|
-
const deleteNodes =
|
|
16401
|
+
const deleteNodes = useCallback24(
|
|
15994
16402
|
(ids) => dispatch({ type: "DELETE_NODES", payload: ids }),
|
|
15995
16403
|
[]
|
|
15996
16404
|
);
|
|
15997
|
-
const replaceNodes =
|
|
16405
|
+
const replaceNodes = useCallback24(
|
|
15998
16406
|
(nodes) => dispatch({ type: "REPLACE_NODES", payload: nodes }),
|
|
15999
16407
|
[]
|
|
16000
16408
|
);
|
|
16001
|
-
const addEdge =
|
|
16409
|
+
const addEdge = useCallback24(
|
|
16002
16410
|
(edge) => dispatch({ type: "ADD_EDGE", payload: edge }),
|
|
16003
16411
|
[]
|
|
16004
16412
|
);
|
|
16005
|
-
const createEdge =
|
|
16413
|
+
const createEdge = useCallback24(
|
|
16006
16414
|
(source, sourcePort, target, targetPort) => {
|
|
16007
16415
|
const edge = {
|
|
16008
16416
|
id: genId("edge"),
|
|
@@ -16020,20 +16428,20 @@ function useWorkflow(options = {}) {
|
|
|
16020
16428
|
},
|
|
16021
16429
|
[]
|
|
16022
16430
|
);
|
|
16023
|
-
const deleteEdge =
|
|
16431
|
+
const deleteEdge = useCallback24(
|
|
16024
16432
|
(id) => dispatch({ type: "DELETE_EDGE", payload: id }),
|
|
16025
16433
|
[]
|
|
16026
16434
|
);
|
|
16027
|
-
const replaceEdges =
|
|
16435
|
+
const replaceEdges = useCallback24(
|
|
16028
16436
|
(edges) => dispatch({ type: "REPLACE_EDGES", payload: edges }),
|
|
16029
16437
|
[]
|
|
16030
16438
|
);
|
|
16031
|
-
const startConnecting =
|
|
16439
|
+
const startConnecting = useCallback24(
|
|
16032
16440
|
(nodeId, portId, portType) => dispatch({ type: "START_CONNECTING", payload: { nodeId, portId, portType } }),
|
|
16033
16441
|
[]
|
|
16034
16442
|
);
|
|
16035
|
-
const endConnecting =
|
|
16036
|
-
const selectNode =
|
|
16443
|
+
const endConnecting = useCallback24(() => dispatch({ type: "END_CONNECTING" }), []);
|
|
16444
|
+
const selectNode = useCallback24(
|
|
16037
16445
|
(id, multi = false) => {
|
|
16038
16446
|
if (multi) {
|
|
16039
16447
|
const current = workflow.canvas.selectedNodes;
|
|
@@ -16045,36 +16453,36 @@ function useWorkflow(options = {}) {
|
|
|
16045
16453
|
},
|
|
16046
16454
|
[workflow.canvas.selectedNodes]
|
|
16047
16455
|
);
|
|
16048
|
-
const selectNodes =
|
|
16456
|
+
const selectNodes = useCallback24(
|
|
16049
16457
|
(ids) => dispatch({ type: "SELECT_NODES", payload: ids }),
|
|
16050
16458
|
[]
|
|
16051
16459
|
);
|
|
16052
|
-
const selectEdge =
|
|
16460
|
+
const selectEdge = useCallback24(
|
|
16053
16461
|
(id) => dispatch({ type: "SELECT_EDGE", payload: id }),
|
|
16054
16462
|
[]
|
|
16055
16463
|
);
|
|
16056
|
-
const deselectAll =
|
|
16057
|
-
const zoomIn =
|
|
16464
|
+
const deselectAll = useCallback24(() => dispatch({ type: "DESELECT_ALL" }), []);
|
|
16465
|
+
const zoomIn = useCallback24(() => {
|
|
16058
16466
|
const z = Math.min(workflow.canvas.viewport.zoom * 1.2, 2);
|
|
16059
16467
|
dispatch({ type: "UPDATE_VIEWPORT", payload: { zoom: z } });
|
|
16060
16468
|
}, [workflow.canvas.viewport.zoom]);
|
|
16061
|
-
const zoomOut =
|
|
16469
|
+
const zoomOut = useCallback24(() => {
|
|
16062
16470
|
const z = Math.max(workflow.canvas.viewport.zoom / 1.2, 0.25);
|
|
16063
16471
|
dispatch({ type: "UPDATE_VIEWPORT", payload: { zoom: z } });
|
|
16064
16472
|
}, [workflow.canvas.viewport.zoom]);
|
|
16065
|
-
const resetViewport =
|
|
16473
|
+
const resetViewport = useCallback24(
|
|
16066
16474
|
() => dispatch({ type: "UPDATE_VIEWPORT", payload: { x: 0, y: 0, zoom: 1 } }),
|
|
16067
16475
|
[]
|
|
16068
16476
|
);
|
|
16069
|
-
const setViewport =
|
|
16477
|
+
const setViewport = useCallback24(
|
|
16070
16478
|
(viewport) => dispatch({ type: "UPDATE_VIEWPORT", payload: viewport }),
|
|
16071
16479
|
[]
|
|
16072
16480
|
);
|
|
16073
|
-
const undo =
|
|
16074
|
-
const redo =
|
|
16481
|
+
const undo = useCallback24(() => dispatch({ type: "UNDO" }), []);
|
|
16482
|
+
const redo = useCallback24(() => dispatch({ type: "REDO" }), []);
|
|
16075
16483
|
const canUndo = workflow.canvas.history.past.length > 0;
|
|
16076
16484
|
const canRedo = workflow.canvas.history.future.length > 0;
|
|
16077
|
-
const validate =
|
|
16485
|
+
const validate = useCallback24(() => workflow.validation, [workflow.validation]);
|
|
16078
16486
|
return {
|
|
16079
16487
|
workflow,
|
|
16080
16488
|
dispatch,
|
|
@@ -16180,35 +16588,35 @@ function WorkflowEditor({
|
|
|
16180
16588
|
}) {
|
|
16181
16589
|
const wf = useWorkflow(options);
|
|
16182
16590
|
const { workflow, dispatch, canUndo, canRedo, undo, redo } = wf;
|
|
16183
|
-
const [uncontrolledLock, setUncontrolledLock] =
|
|
16184
|
-
const [uncontrolledDrawer, setUncontrolledDrawer] =
|
|
16185
|
-
const [uncontrolledHistory, setUncontrolledHistory] =
|
|
16186
|
-
const [uncontrolledDebug, setUncontrolledDebug] =
|
|
16591
|
+
const [uncontrolledLock, setUncontrolledLock] = useState37(false);
|
|
16592
|
+
const [uncontrolledDrawer, setUncontrolledDrawer] = useState37(!!drawer);
|
|
16593
|
+
const [uncontrolledHistory, setUncontrolledHistory] = useState37(false);
|
|
16594
|
+
const [uncontrolledDebug, setUncontrolledDebug] = useState37(false);
|
|
16187
16595
|
const isLockMode = controlledLockMode ?? uncontrolledLock;
|
|
16188
16596
|
const isDrawerOpen = controlledDrawerOpen ?? uncontrolledDrawer;
|
|
16189
16597
|
const isHistoryOpen = controlledHistoryOpen ?? uncontrolledHistory;
|
|
16190
16598
|
const isDebugOpen = controlledDebugOpen ?? uncontrolledDebug;
|
|
16191
|
-
const toggleLock =
|
|
16599
|
+
const toggleLock = useCallback25(() => {
|
|
16192
16600
|
const next = !isLockMode;
|
|
16193
16601
|
if (controlledLockMode === void 0) setUncontrolledLock(next);
|
|
16194
16602
|
onToggleLockMode?.(next);
|
|
16195
16603
|
}, [isLockMode, controlledLockMode, onToggleLockMode]);
|
|
16196
|
-
const toggleDrawer =
|
|
16604
|
+
const toggleDrawer = useCallback25(() => {
|
|
16197
16605
|
const next = !isDrawerOpen;
|
|
16198
16606
|
if (controlledDrawerOpen === void 0) setUncontrolledDrawer(next);
|
|
16199
16607
|
onToggleDrawer?.(next);
|
|
16200
16608
|
}, [isDrawerOpen, controlledDrawerOpen, onToggleDrawer]);
|
|
16201
|
-
const toggleHistory =
|
|
16609
|
+
const toggleHistory = useCallback25(() => {
|
|
16202
16610
|
const next = !isHistoryOpen;
|
|
16203
16611
|
if (controlledHistoryOpen === void 0) setUncontrolledHistory(next);
|
|
16204
16612
|
onToggleHistory?.(next);
|
|
16205
16613
|
}, [isHistoryOpen, controlledHistoryOpen, onToggleHistory]);
|
|
16206
|
-
const toggleDebug =
|
|
16614
|
+
const toggleDebug = useCallback25(() => {
|
|
16207
16615
|
const next = !isDebugOpen;
|
|
16208
16616
|
if (controlledDebugOpen === void 0) setUncontrolledDebug(next);
|
|
16209
16617
|
onToggleDebug?.(next);
|
|
16210
16618
|
}, [isDebugOpen, controlledDebugOpen, onToggleDebug]);
|
|
16211
|
-
const handleReset =
|
|
16619
|
+
const handleReset = useCallback25(() => {
|
|
16212
16620
|
if (onReset) onReset();
|
|
16213
16621
|
else dispatch({ type: "RESET" });
|
|
16214
16622
|
}, [onReset, dispatch]);
|
|
@@ -16217,7 +16625,7 @@ function WorkflowEditor({
|
|
|
16217
16625
|
[workflow.canvas.nodes]
|
|
16218
16626
|
);
|
|
16219
16627
|
const nextEdges = useMemo16(() => workflow.canvas.edges.map(toNextEdge), [workflow.canvas.edges]);
|
|
16220
|
-
const onNodesChange =
|
|
16628
|
+
const onNodesChange = useCallback25(
|
|
16221
16629
|
(changes) => {
|
|
16222
16630
|
const reduced = applyNodeChanges(
|
|
16223
16631
|
nextNodes,
|
|
@@ -16258,7 +16666,7 @@ function WorkflowEditor({
|
|
|
16258
16666
|
},
|
|
16259
16667
|
[nextNodes, workflow.canvas.nodes, wf, onNodeSelect]
|
|
16260
16668
|
);
|
|
16261
|
-
const onEdgesChange =
|
|
16669
|
+
const onEdgesChange = useCallback25(
|
|
16262
16670
|
(changes) => {
|
|
16263
16671
|
const reduced = applyEdgeChanges(nextEdges, changes);
|
|
16264
16672
|
const byId = new Map(reduced.map((e) => [e.id, e]));
|
|
@@ -16268,18 +16676,18 @@ function WorkflowEditor({
|
|
|
16268
16676
|
},
|
|
16269
16677
|
[nextEdges, workflow.canvas.edges, wf]
|
|
16270
16678
|
);
|
|
16271
|
-
const onConnect =
|
|
16679
|
+
const onConnect = useCallback25(
|
|
16272
16680
|
(c) => {
|
|
16273
16681
|
wf.createEdge(c.source, c.sourceHandle ?? "default", c.target, c.targetHandle ?? "default");
|
|
16274
16682
|
},
|
|
16275
16683
|
[wf]
|
|
16276
16684
|
);
|
|
16277
|
-
const [canvasSize, setCanvasSize] =
|
|
16278
|
-
const handleCanvasRef =
|
|
16685
|
+
const [canvasSize, setCanvasSize] = useState37({ w: 0, h: 0 });
|
|
16686
|
+
const handleCanvasRef = useCallback25((node) => {
|
|
16279
16687
|
if (!node) return;
|
|
16280
16688
|
setCanvasSize({ w: node.clientWidth, h: node.clientHeight });
|
|
16281
16689
|
}, []);
|
|
16282
|
-
const fitToView =
|
|
16690
|
+
const fitToView = useCallback25(() => {
|
|
16283
16691
|
const nodes = workflow.canvas.nodes;
|
|
16284
16692
|
if (nodes.length === 0) return;
|
|
16285
16693
|
let minX = Infinity;
|
|
@@ -16513,8 +16921,8 @@ function DefaultEmptyState() {
|
|
|
16513
16921
|
}
|
|
16514
16922
|
|
|
16515
16923
|
// src/components/XmlViewer/XmlViewer.tsx
|
|
16516
|
-
import { useMemo as useMemo17, useState as
|
|
16517
|
-
import { Fragment as
|
|
16924
|
+
import { useMemo as useMemo17, useState as useState38 } from "react";
|
|
16925
|
+
import { Fragment as Fragment26, jsx as jsx96, jsxs as jsxs93 } from "react/jsx-runtime";
|
|
16518
16926
|
function parseXml(src) {
|
|
16519
16927
|
if (typeof window !== "undefined" && typeof window.DOMParser !== "undefined") {
|
|
16520
16928
|
try {
|
|
@@ -16595,7 +17003,7 @@ function XmlNodeRow({
|
|
|
16595
17003
|
showAttributes,
|
|
16596
17004
|
truncateAt
|
|
16597
17005
|
}) {
|
|
16598
|
-
const [open, setOpen] =
|
|
17006
|
+
const [open, setOpen] = useState38(depth < defaultExpandDepth);
|
|
16599
17007
|
const pad2 = depth * 14;
|
|
16600
17008
|
if (node.type === "text") {
|
|
16601
17009
|
const t = (node.text ?? "").trim();
|
|
@@ -16664,9 +17072,9 @@ function XmlNodeRow({
|
|
|
16664
17072
|
/* @__PURE__ */ jsx96("span", { className: "ods-xml-viewer__attr-eq", children: "=" }),
|
|
16665
17073
|
/* @__PURE__ */ jsx96("span", { className: "ods-xml-viewer__attr-value", children: `"${v}"` })
|
|
16666
17074
|
] }, k)),
|
|
16667
|
-
isSelfClosing ? /* @__PURE__ */ jsx96("span", { className: "ods-xml-viewer__bracket", children: " />" }) : /* @__PURE__ */ jsxs93(
|
|
17075
|
+
isSelfClosing ? /* @__PURE__ */ jsx96("span", { className: "ods-xml-viewer__bracket", children: " />" }) : /* @__PURE__ */ jsxs93(Fragment26, { children: [
|
|
16668
17076
|
/* @__PURE__ */ jsx96("span", { className: "ods-xml-viewer__bracket", children: ">" }),
|
|
16669
|
-
!open && /* @__PURE__ */ jsxs93(
|
|
17077
|
+
!open && /* @__PURE__ */ jsxs93(Fragment26, { children: [
|
|
16670
17078
|
/* @__PURE__ */ jsxs93("span", { className: "ods-xml-viewer__preview", children: [
|
|
16671
17079
|
children.length,
|
|
16672
17080
|
" child",
|
|
@@ -16680,7 +17088,7 @@ function XmlNodeRow({
|
|
|
16680
17088
|
]
|
|
16681
17089
|
}
|
|
16682
17090
|
),
|
|
16683
|
-
!isSelfClosing && open && /* @__PURE__ */ jsxs93(
|
|
17091
|
+
!isSelfClosing && open && /* @__PURE__ */ jsxs93(Fragment26, { children: [
|
|
16684
17092
|
children.map((c, i) => /* @__PURE__ */ jsx96(
|
|
16685
17093
|
XmlNodeRow,
|
|
16686
17094
|
{
|
|
@@ -16703,8 +17111,8 @@ function XmlNodeRow({
|
|
|
16703
17111
|
}
|
|
16704
17112
|
|
|
16705
17113
|
// src/components/YamlViewer/YamlViewer.tsx
|
|
16706
|
-
import { useMemo as useMemo18, useState as
|
|
16707
|
-
import { Fragment as
|
|
17114
|
+
import { useMemo as useMemo18, useState as useState39 } from "react";
|
|
17115
|
+
import { Fragment as Fragment27, jsx as jsx97, jsxs as jsxs94 } from "react/jsx-runtime";
|
|
16708
17116
|
function toYaml(value, indent = 0) {
|
|
16709
17117
|
const pad2 = " ".repeat(indent);
|
|
16710
17118
|
if (value === null) return "null";
|
|
@@ -16849,7 +17257,7 @@ function YamlViewer({
|
|
|
16849
17257
|
}
|
|
16850
17258
|
}, [data]);
|
|
16851
17259
|
const tokens = useMemo18(() => tokenizeYaml(text), [text]);
|
|
16852
|
-
const [collapsed, setCollapsed] =
|
|
17260
|
+
const [collapsed, setCollapsed] = useState39(() => {
|
|
16853
17261
|
const s = /* @__PURE__ */ new Set();
|
|
16854
17262
|
tokens.forEach((t) => {
|
|
16855
17263
|
if (t.hasChildren && t.depth >= defaultExpandDepth) s.add(t.index);
|
|
@@ -16930,7 +17338,7 @@ function YamlViewer({
|
|
|
16930
17338
|
}
|
|
16931
17339
|
) : /* @__PURE__ */ jsx97("span", { className: "ods-yaml-viewer__caret-spacer" }),
|
|
16932
17340
|
t.kind === "comment" && /* @__PURE__ */ jsx97("span", { className: "ods-yaml-viewer__comment", children: t.raw.trim() }),
|
|
16933
|
-
t.kind === "key" && /* @__PURE__ */ jsxs94(
|
|
17341
|
+
t.kind === "key" && /* @__PURE__ */ jsxs94(Fragment27, { children: [
|
|
16934
17342
|
t.raw.trim().startsWith("-") && /* @__PURE__ */ jsx97("span", { className: "ods-yaml-viewer__dash", children: "- " }),
|
|
16935
17343
|
/* @__PURE__ */ jsx97("span", { className: "ods-yaml-viewer__key", children: t.key }),
|
|
16936
17344
|
/* @__PURE__ */ jsx97("span", { className: "ods-yaml-viewer__colon", children: ":" }),
|
|
@@ -16949,7 +17357,7 @@ function YamlViewer({
|
|
|
16949
17357
|
),
|
|
16950
17358
|
isCollapsed && /* @__PURE__ */ jsx97("span", { className: "ods-yaml-viewer__preview", children: " \u2026" })
|
|
16951
17359
|
] }),
|
|
16952
|
-
t.kind === "sequence" && /* @__PURE__ */ jsxs94(
|
|
17360
|
+
t.kind === "sequence" && /* @__PURE__ */ jsxs94(Fragment27, { children: [
|
|
16953
17361
|
/* @__PURE__ */ jsx97("span", { className: "ods-yaml-viewer__dash", children: "- " }),
|
|
16954
17362
|
/* @__PURE__ */ jsx97(
|
|
16955
17363
|
"span",
|
|
@@ -16983,13 +17391,13 @@ function YamlViewer({
|
|
|
16983
17391
|
|
|
16984
17392
|
// src/provider/OdsProvider.tsx
|
|
16985
17393
|
import { generateCssVars, resolveConfig } from "@octaviaflow/config";
|
|
16986
|
-
import { createContext as createContext3, useContext as useContext3, useEffect as
|
|
17394
|
+
import { createContext as createContext3, useContext as useContext3, useEffect as useEffect25, useMemo as useMemo19 } from "react";
|
|
16987
17395
|
import { OverlayProvider as OverlayProvider3 } from "react-aria";
|
|
16988
17396
|
import { jsx as jsx98 } from "react/jsx-runtime";
|
|
16989
17397
|
var OdsContext = createContext3(null);
|
|
16990
17398
|
function OdsProvider({ config: userConfig, children }) {
|
|
16991
17399
|
const resolved = useMemo19(() => resolveConfig(userConfig), [userConfig]);
|
|
16992
|
-
|
|
17400
|
+
useEffect25(() => {
|
|
16993
17401
|
const cssVarsBlock = generateCssVars(resolved);
|
|
16994
17402
|
const match = cssVarsBlock.match(/:root\s*\{([\s\S]*)\}/);
|
|
16995
17403
|
if (match) {
|
|
@@ -17276,9 +17684,16 @@ export {
|
|
|
17276
17684
|
FlowMinimap,
|
|
17277
17685
|
FlowNode,
|
|
17278
17686
|
FlowToolbar,
|
|
17687
|
+
FlowToolbarAutoLayout,
|
|
17279
17688
|
FlowToolbarButton,
|
|
17280
17689
|
FlowToolbarDivider,
|
|
17690
|
+
FlowToolbarFitView,
|
|
17281
17691
|
FlowToolbarIcons,
|
|
17692
|
+
FlowToolbarRedo,
|
|
17693
|
+
FlowToolbarReset,
|
|
17694
|
+
FlowToolbarRun,
|
|
17695
|
+
FlowToolbarSave,
|
|
17696
|
+
FlowToolbarUndo,
|
|
17282
17697
|
FlowToolbarZoom,
|
|
17283
17698
|
FormSection,
|
|
17284
17699
|
HoverCard,
|