@knkcs/anker 2.7.0 → 2.8.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-77EOXDGW.js +49 -0
- package/dist/chunk-77EOXDGW.js.map +1 -0
- package/dist/chunk-7KPPPE4U.js +59 -0
- package/dist/chunk-7KPPPE4U.js.map +1 -0
- package/dist/chunk-CWBQKGL4.js +75 -0
- package/dist/chunk-CWBQKGL4.js.map +1 -0
- package/dist/forms/index.d.ts +12 -9
- package/dist/forms/index.js +5 -21
- package/dist/forms/index.js.map +1 -1
- package/dist/navigation/index.d.ts +26 -0
- package/dist/navigation/index.js +28 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/primitives/index.js +2 -1
- package/dist/primitives/index.js.map +1 -1
- package/dist/unsaved-changes-guard-kwzxMb6r.d.ts +67 -0
- package/package.json +6 -1
- package/dist/chunk-M5WNB4K6.js +0 -126
- package/dist/chunk-M5WNB4K6.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { LeavePageConfirmation } from './chunk-7KPPPE4U.js';
|
|
2
|
+
import { useBlocker } from 'react-router-dom';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function useUnsavedChangesBlocker(isDirty, opts) {
|
|
6
|
+
const blocker = useBlocker(({ currentLocation, nextLocation }) => {
|
|
7
|
+
if (!isDirty) return false;
|
|
8
|
+
if (opts?.shouldBlock) {
|
|
9
|
+
return opts.shouldBlock({ currentLocation, nextLocation });
|
|
10
|
+
}
|
|
11
|
+
if (opts?.safePathPrefix && nextLocation.pathname.startsWith(opts.safePathPrefix)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
if (nextLocation.pathname === currentLocation.pathname) return false;
|
|
15
|
+
return true;
|
|
16
|
+
});
|
|
17
|
+
return blocker;
|
|
18
|
+
}
|
|
19
|
+
function UnsavedChangesGuard({
|
|
20
|
+
isDirty,
|
|
21
|
+
safePathPrefix,
|
|
22
|
+
shouldBlock,
|
|
23
|
+
title,
|
|
24
|
+
message,
|
|
25
|
+
confirmLabel,
|
|
26
|
+
cancelLabel
|
|
27
|
+
}) {
|
|
28
|
+
const blocker = useUnsavedChangesBlocker(isDirty, {
|
|
29
|
+
safePathPrefix,
|
|
30
|
+
shouldBlock
|
|
31
|
+
});
|
|
32
|
+
return /* @__PURE__ */ jsx(
|
|
33
|
+
LeavePageConfirmation,
|
|
34
|
+
{
|
|
35
|
+
blocked: blocker.state === "blocked",
|
|
36
|
+
onConfirmLeave: () => blocker.proceed?.(),
|
|
37
|
+
onCancelLeave: () => blocker.reset?.(),
|
|
38
|
+
title,
|
|
39
|
+
message,
|
|
40
|
+
confirmLabel,
|
|
41
|
+
cancelLabel
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
UnsavedChangesGuard.displayName = "UnsavedChangesGuard";
|
|
46
|
+
|
|
47
|
+
export { UnsavedChangesGuard, useUnsavedChangesBlocker };
|
|
48
|
+
//# sourceMappingURL=chunk-77EOXDGW.js.map
|
|
49
|
+
//# sourceMappingURL=chunk-77EOXDGW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/navigation/use-unsaved-changes-blocker.ts","../src/navigation/unsaved-changes-guard.tsx"],"names":[],"mappings":";;;;AAgCO,SAAS,wBAAA,CACf,SACA,IAAA,EACU;AACV,EAAA,MAAM,UAAU,UAAA,CAAW,CAAC,EAAE,eAAA,EAAiB,cAAa,KAAM;AACjE,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,IAAA,IAAI,MAAM,WAAA,EAAa;AACtB,MAAA,OAAO,IAAA,CAAK,WAAA,CAAY,EAAE,eAAA,EAAiB,cAAc,CAAA;AAAA,IAC1D;AACA,IAAA,IACC,MAAM,cAAA,IACN,YAAA,CAAa,SAAS,UAAA,CAAW,IAAA,CAAK,cAAc,CAAA,EACnD;AACD,MAAA,OAAO,KAAA;AAAA,IACR;AACA,IAAA,IAAI,YAAA,CAAa,QAAA,KAAa,eAAA,CAAgB,QAAA,EAAU,OAAO,KAAA;AAC/D,IAAA,OAAO,IAAA;AAAA,EACR,CAAC,CAAA;AACD,EAAA,OAAO,OAAA;AACR;AChBO,SAAS,mBAAA,CAAoB;AAAA,EACnC,OAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA;AACD,CAAA,EAA6B;AAC5B,EAAA,MAAM,OAAA,GAAU,yBAAyB,OAAA,EAAS;AAAA,IACjD,cAAA;AAAA,IACA;AAAA,GACA,CAAA;AACD,EAAA,uBACC,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACA,OAAA,EAAS,QAAQ,KAAA,KAAU,SAAA;AAAA,MAC3B,cAAA,EAAgB,MAAM,OAAA,CAAQ,OAAA,IAAU;AAAA,MACxC,aAAA,EAAe,MAAM,OAAA,CAAQ,KAAA,IAAQ;AAAA,MACrC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACD;AAEF;AACA,mBAAA,CAAoB,WAAA,GAAc,qBAAA","file":"chunk-77EOXDGW.js","sourcesContent":["import type { Blocker, Location } from \"react-router-dom\";\nimport { useBlocker } from \"react-router-dom\";\n\nexport interface UnsavedChangesBlockerOptions {\n\t/**\n\t * Pathname prefix considered \"safe\" — navigation to a path starting with\n\t * this prefix does NOT trigger the block. Use for sibling tabs of the\n\t * same detail page (e.g. `/foo/bar/${id}/`). Trailing slash matters.\n\t */\n\tsafePathPrefix?: string;\n\t/**\n\t * Custom predicate. Receives react-router's blocker args. Takes\n\t * precedence over `safePathPrefix`. Default: block iff\n\t * `isDirty && nextLocation.pathname !== currentLocation.pathname`.\n\t */\n\tshouldBlock?: (args: {\n\t\tcurrentLocation: Location;\n\t\tnextLocation: Location;\n\t}) => boolean;\n}\n\n/**\n * Block in-app navigation while there are unsaved changes.\n *\n * Returns the raw react-router `Blocker` so the caller can render their own\n * dialog. For the conventional dialog UX use `<UnsavedChangesGuard/>` (which\n * composes this hook with `<LeavePageConfirmation/>`).\n *\n * Requires a react-router-dom **data router** (`createBrowserRouter` /\n * `createMemoryRouter` + `<RouterProvider/>`). The legacy `<BrowserRouter>` /\n * `<MemoryRouter>` JSX routers do not implement `useBlocker`.\n */\nexport function useUnsavedChangesBlocker(\n\tisDirty: boolean,\n\topts?: UnsavedChangesBlockerOptions,\n): Blocker {\n\tconst blocker = useBlocker(({ currentLocation, nextLocation }) => {\n\t\tif (!isDirty) return false;\n\t\tif (opts?.shouldBlock) {\n\t\t\treturn opts.shouldBlock({ currentLocation, nextLocation });\n\t\t}\n\t\tif (\n\t\t\topts?.safePathPrefix &&\n\t\t\tnextLocation.pathname.startsWith(opts.safePathPrefix)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (nextLocation.pathname === currentLocation.pathname) return false;\n\t\treturn true;\n\t});\n\treturn blocker;\n}\n","import { LeavePageConfirmation } from \"../primitives/leave-page-confirmation\";\nimport {\n\ttype UnsavedChangesBlockerOptions,\n\tuseUnsavedChangesBlocker,\n} from \"./use-unsaved-changes-blocker\";\n\nexport interface UnsavedChangesGuardProps extends UnsavedChangesBlockerOptions {\n\t/** Source of truth for whether there's unsaved work. */\n\tisDirty: boolean;\n\t/** Dialog title. @default \"You have unsaved changes\" */\n\ttitle?: string;\n\t/** Dialog message body. @default \"Are you sure you want to leave this page? You have unsaved changes.\" */\n\tmessage?: string;\n\t/** Confirm/leave label. @default \"Leave\" */\n\tconfirmLabel?: string;\n\t/** Cancel/stay label. @default \"Stay\" */\n\tcancelLabel?: string;\n}\n\n/**\n * Blocks in-app navigation while `isDirty` is true and renders\n * `LeavePageConfirmation` to ask the user to confirm. Non-form-aware —\n * pass any boolean (form `formState.isDirty`, Monaco buffer state, etc.).\n * For react-hook-form pages use `<DirtyFormGuard/>` which sources `isDirty`\n * from `useFormContext()` automatically.\n *\n * Use `safePathPrefix` to exempt sibling tabs of the same detail page:\n *\n * ```tsx\n * <UnsavedChangesGuard\n * isDirty={editor.hasAnyDirty}\n * safePathPrefix={`/template/templates/${templateId}/`}\n * />\n * ```\n */\nexport function UnsavedChangesGuard({\n\tisDirty,\n\tsafePathPrefix,\n\tshouldBlock,\n\ttitle,\n\tmessage,\n\tconfirmLabel,\n\tcancelLabel,\n}: UnsavedChangesGuardProps) {\n\tconst blocker = useUnsavedChangesBlocker(isDirty, {\n\t\tsafePathPrefix,\n\t\tshouldBlock,\n\t});\n\treturn (\n\t\t<LeavePageConfirmation\n\t\t\tblocked={blocker.state === \"blocked\"}\n\t\t\tonConfirmLeave={() => blocker.proceed?.()}\n\t\t\tonCancelLeave={() => blocker.reset?.()}\n\t\t\ttitle={title}\n\t\t\tmessage={message}\n\t\t\tconfirmLabel={confirmLabel}\n\t\t\tcancelLabel={cancelLabel}\n\t\t/>\n\t);\n}\nUnsavedChangesGuard.displayName = \"UnsavedChangesGuard\";\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Dialog, Portal, ButtonGroup, Button } from '@chakra-ui/react';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/primitives/leave-page-confirmation.tsx
|
|
6
|
+
var LeavePageConfirmation = (props) => {
|
|
7
|
+
const {
|
|
8
|
+
blocked,
|
|
9
|
+
onConfirmLeave,
|
|
10
|
+
onCancelLeave,
|
|
11
|
+
title = "You have unsaved changes",
|
|
12
|
+
message = "Are you sure you want to leave this page? You have unsaved changes.",
|
|
13
|
+
confirmLabel = "Leave",
|
|
14
|
+
cancelLabel = "Stay"
|
|
15
|
+
} = props;
|
|
16
|
+
const cancelRef = useRef(null);
|
|
17
|
+
return /* @__PURE__ */ jsx(
|
|
18
|
+
Dialog.Root,
|
|
19
|
+
{
|
|
20
|
+
open: blocked,
|
|
21
|
+
initialFocusEl: () => cancelRef.current,
|
|
22
|
+
role: "alertdialog",
|
|
23
|
+
onOpenChange: (e) => {
|
|
24
|
+
if (!e.open) {
|
|
25
|
+
onCancelLeave();
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
children: /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Dialog.Backdrop, { children: /* @__PURE__ */ jsx(Dialog.Positioner, { children: /* @__PURE__ */ jsxs(Dialog.Content, { children: [
|
|
29
|
+
/* @__PURE__ */ jsx(Dialog.Header, { fontSize: "lg", fontWeight: "bold", children: title }),
|
|
30
|
+
/* @__PURE__ */ jsx(Dialog.Body, { children: message }),
|
|
31
|
+
/* @__PURE__ */ jsx(Dialog.Footer, { children: /* @__PURE__ */ jsxs(ButtonGroup, { children: [
|
|
32
|
+
/* @__PURE__ */ jsx(
|
|
33
|
+
Button,
|
|
34
|
+
{
|
|
35
|
+
variant: "solid",
|
|
36
|
+
colorPalette: "primary",
|
|
37
|
+
onClick: onConfirmLeave,
|
|
38
|
+
children: confirmLabel
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
/* @__PURE__ */ jsx(
|
|
42
|
+
Button,
|
|
43
|
+
{
|
|
44
|
+
variant: "outline",
|
|
45
|
+
onClick: onCancelLeave,
|
|
46
|
+
ref: cancelRef,
|
|
47
|
+
children: cancelLabel
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
] }) })
|
|
51
|
+
] }) }) }) })
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
LeavePageConfirmation.displayName = "LeavePageConfirmation";
|
|
56
|
+
|
|
57
|
+
export { LeavePageConfirmation };
|
|
58
|
+
//# sourceMappingURL=chunk-7KPPPE4U.js.map
|
|
59
|
+
//# sourceMappingURL=chunk-7KPPPE4U.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/leave-page-confirmation.tsx"],"names":[],"mappings":";;;;;AAqBO,IAAM,qBAAA,GAA8D,CAC1E,KAAA,KACI;AACJ,EAAA,MAAM;AAAA,IACL,OAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA,GAAQ,0BAAA;AAAA,IACR,OAAA,GAAU,qEAAA;AAAA,IACV,YAAA,GAAe,OAAA;AAAA,IACf,WAAA,GAAc;AAAA,GACf,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAA,GAAY,OAAiC,IAAI,CAAA;AAEvD,EAAA,uBACC,GAAA;AAAA,IAAC,MAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MACA,IAAA,EAAM,OAAA;AAAA,MACN,cAAA,EAAgB,MAAM,SAAA,CAAU,OAAA;AAAA,MAChC,IAAA,EAAK,aAAA;AAAA,MACL,YAAA,EAAc,CAAC,CAAA,KAAM;AACpB,QAAA,IAAI,CAAC,EAAE,IAAA,EAAM;AACZ,UAAA,aAAA,EAAc;AAAA,QACf;AAAA,MACD,CAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EACA,QAAA,kBAAA,GAAA,CAAC,MAAA,CAAO,QAAA,EAAP,EACA,QAAA,kBAAA,GAAA,CAAC,MAAA,CAAO,UAAA,EAAP,EACA,QAAA,kBAAA,IAAA,CAAC,MAAA,CAAO,SAAP,EACA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAO,MAAA,EAAP,EAAc,UAAS,IAAA,EAAK,UAAA,EAAW,QACtC,QAAA,EAAA,KAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,MAAA,CAAO,IAAA,EAAP,EAAa,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,wBACtB,GAAA,CAAC,MAAA,CAAO,MAAA,EAAP,EACA,+BAAC,WAAA,EAAA,EACA,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACA,OAAA,EAAQ,OAAA;AAAA,cACR,YAAA,EAAa,SAAA;AAAA,cACb,OAAA,EAAS,cAAA;AAAA,cAER,QAAA,EAAA;AAAA;AAAA,WACF;AAAA,0BACA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACA,OAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,aAAA;AAAA,cACT,GAAA,EAAK,SAAA;AAAA,cAEJ,QAAA,EAAA;AAAA;AAAA;AACF,SAAA,EACD,CAAA,EACD;AAAA,OAAA,EACD,CAAA,EACD,GACD,CAAA,EACD;AAAA;AAAA,GACD;AAEF;AACA,qBAAA,CAAsB,WAAA,GAAc,uBAAA","file":"chunk-7KPPPE4U.js","sourcesContent":["import { Button, ButtonGroup, Dialog, Portal } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface LeavePageConfirmationProps {\n\t/** Whether the dialog is currently open (i.e., navigation is blocked). */\n\tblocked: boolean;\n\t/** Called when the user confirms they want to leave. */\n\tonConfirmLeave: () => void;\n\t/** Called when the user cancels and wants to stay. */\n\tonCancelLeave: () => void;\n\t/** Dialog title. Defaults to \"You have unsaved changes\". */\n\ttitle?: string;\n\t/** Dialog message body. Defaults to a generic unsaved-changes prompt. */\n\tmessage?: string;\n\t/** Label for the confirm/leave button. Defaults to \"Leave\". */\n\tconfirmLabel?: string;\n\t/** Label for the cancel/stay button. Defaults to \"Stay\". */\n\tcancelLabel?: string;\n}\n\nexport const LeavePageConfirmation: React.FC<LeavePageConfirmationProps> = (\n\tprops,\n) => {\n\tconst {\n\t\tblocked,\n\t\tonConfirmLeave,\n\t\tonCancelLeave,\n\t\ttitle = \"You have unsaved changes\",\n\t\tmessage = \"Are you sure you want to leave this page? You have unsaved changes.\",\n\t\tconfirmLabel = \"Leave\",\n\t\tcancelLabel = \"Stay\",\n\t} = props;\n\n\tconst cancelRef = useRef<HTMLButtonElement | null>(null);\n\n\treturn (\n\t\t<Dialog.Root\n\t\t\topen={blocked}\n\t\t\tinitialFocusEl={() => cancelRef.current}\n\t\t\trole=\"alertdialog\"\n\t\t\tonOpenChange={(e) => {\n\t\t\t\tif (!e.open) {\n\t\t\t\t\tonCancelLeave();\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<Portal>\n\t\t\t\t<Dialog.Backdrop>\n\t\t\t\t\t<Dialog.Positioner>\n\t\t\t\t\t\t<Dialog.Content>\n\t\t\t\t\t\t\t<Dialog.Header fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Dialog.Header>\n\t\t\t\t\t\t\t<Dialog.Body>{message}</Dialog.Body>\n\t\t\t\t\t\t\t<Dialog.Footer>\n\t\t\t\t\t\t\t\t<ButtonGroup>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"solid\"\n\t\t\t\t\t\t\t\t\t\tcolorPalette=\"primary\"\n\t\t\t\t\t\t\t\t\t\tonClick={onConfirmLeave}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{confirmLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\tonClick={onCancelLeave}\n\t\t\t\t\t\t\t\t\t\tref={cancelRef}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{cancelLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</ButtonGroup>\n\t\t\t\t\t\t\t</Dialog.Footer>\n\t\t\t\t\t\t</Dialog.Content>\n\t\t\t\t\t</Dialog.Positioner>\n\t\t\t\t</Dialog.Backdrop>\n\t\t\t</Portal>\n\t\t</Dialog.Root>\n\t);\n};\nLeavePageConfirmation.displayName = \"LeavePageConfirmation\";\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { NumberInput, RadioGroup as RadioGroup$1, NativeSelect as NativeSelect$1 } from '@chakra-ui/react';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
// src/primitives/native-select.tsx
|
|
5
|
+
var NativeSelect = function NativeSelect2({
|
|
6
|
+
ref,
|
|
7
|
+
...props
|
|
8
|
+
}) {
|
|
9
|
+
const {
|
|
10
|
+
size,
|
|
11
|
+
variant,
|
|
12
|
+
disabled,
|
|
13
|
+
invalid,
|
|
14
|
+
unstyled,
|
|
15
|
+
placeholder,
|
|
16
|
+
children,
|
|
17
|
+
...fieldProps
|
|
18
|
+
} = props;
|
|
19
|
+
return /* @__PURE__ */ jsxs(
|
|
20
|
+
NativeSelect$1.Root,
|
|
21
|
+
{
|
|
22
|
+
size,
|
|
23
|
+
variant,
|
|
24
|
+
disabled,
|
|
25
|
+
invalid,
|
|
26
|
+
unstyled,
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ jsxs(NativeSelect$1.Field, { ref, ...fieldProps, children: [
|
|
29
|
+
placeholder && /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: placeholder }),
|
|
30
|
+
children
|
|
31
|
+
] }),
|
|
32
|
+
/* @__PURE__ */ jsx(NativeSelect$1.Indicator, {})
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
NativeSelect.displayName = "NativeSelect";
|
|
38
|
+
var NumberInputRoot = function NumberInput$1({
|
|
39
|
+
ref,
|
|
40
|
+
...props
|
|
41
|
+
}) {
|
|
42
|
+
const { children, showStepper = true, ...rest } = props;
|
|
43
|
+
return /* @__PURE__ */ jsxs(NumberInput.Root, { ref, variant: "outline", ...rest, children: [
|
|
44
|
+
children,
|
|
45
|
+
showStepper && /* @__PURE__ */ jsxs(NumberInput.Control, { children: [
|
|
46
|
+
/* @__PURE__ */ jsx(NumberInput.IncrementTrigger, {}),
|
|
47
|
+
/* @__PURE__ */ jsx(NumberInput.DecrementTrigger, {})
|
|
48
|
+
] })
|
|
49
|
+
] });
|
|
50
|
+
};
|
|
51
|
+
NumberInputRoot.displayName = "NumberInputRoot";
|
|
52
|
+
var NumberInputField = NumberInput.Input;
|
|
53
|
+
NumberInputField.displayName = "NumberInputField";
|
|
54
|
+
var NumberInputScrubber = NumberInput.Scrubber;
|
|
55
|
+
NumberInputScrubber.displayName = "NumberInputScrubber";
|
|
56
|
+
var NumberInputLabel = NumberInput.Label;
|
|
57
|
+
NumberInputLabel.displayName = "NumberInputLabel";
|
|
58
|
+
var Radio = function Radio2({
|
|
59
|
+
ref,
|
|
60
|
+
...props
|
|
61
|
+
}) {
|
|
62
|
+
const { children, inputProps, rootRef, ...rest } = props;
|
|
63
|
+
return /* @__PURE__ */ jsxs(RadioGroup$1.Item, { ref: rootRef, ...rest, children: [
|
|
64
|
+
/* @__PURE__ */ jsx(RadioGroup$1.ItemHiddenInput, { ref, ...inputProps }),
|
|
65
|
+
/* @__PURE__ */ jsx(RadioGroup$1.ItemIndicator, {}),
|
|
66
|
+
children && /* @__PURE__ */ jsx(RadioGroup$1.ItemText, { children })
|
|
67
|
+
] });
|
|
68
|
+
};
|
|
69
|
+
Radio.displayName = "Radio";
|
|
70
|
+
var RadioGroup = RadioGroup$1.Root;
|
|
71
|
+
RadioGroup.displayName = "RadioGroup";
|
|
72
|
+
|
|
73
|
+
export { NativeSelect, NumberInputField, NumberInputLabel, NumberInputRoot, NumberInputScrubber, Radio, RadioGroup };
|
|
74
|
+
//# sourceMappingURL=chunk-CWBQKGL4.js.map
|
|
75
|
+
//# sourceMappingURL=chunk-CWBQKGL4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/native-select.tsx","../src/primitives/number-input.tsx","../src/primitives/radio.tsx"],"names":["NativeSelect","ChakraNativeSelect","NumberInput","jsxs","ChakraNumberInput","jsx","Radio","ChakraRadioGroup"],"mappings":"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","file":"chunk-CWBQKGL4.js","sourcesContent":["import {\n\tNativeSelect as ChakraNativeSelect,\n\ttype NativeSelectFieldProps,\n\ttype NativeSelectRootProps,\n} from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface NativeSelectProps\n\textends Omit<NativeSelectFieldProps, \"placeholder\"> {\n\t/** Props forwarded to the root wrapper. */\n\tsize?: NativeSelectRootProps[\"size\"];\n\tvariant?: NativeSelectRootProps[\"variant\"];\n\tdisabled?: NativeSelectRootProps[\"disabled\"];\n\tinvalid?: NativeSelectRootProps[\"invalid\"];\n\tunstyled?: NativeSelectRootProps[\"unstyled\"];\n\t/** Rendered as a disabled first <option> */\n\tplaceholder?: string;\n}\n\nexport const NativeSelect = function NativeSelect({\n\tref,\n\t...props\n}: NativeSelectProps & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tsize,\n\t\tvariant,\n\t\tdisabled,\n\t\tinvalid,\n\t\tunstyled,\n\t\tplaceholder,\n\t\tchildren,\n\t\t...fieldProps\n\t} = props;\n\n\treturn (\n\t\t<ChakraNativeSelect.Root\n\t\t\tsize={size}\n\t\t\tvariant={variant}\n\t\t\tdisabled={disabled}\n\t\t\tinvalid={invalid}\n\t\t\tunstyled={unstyled}\n\t\t>\n\t\t\t<ChakraNativeSelect.Field ref={ref} {...fieldProps}>\n\t\t\t\t{placeholder && (\n\t\t\t\t\t<option value=\"\" disabled>\n\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t</option>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</ChakraNativeSelect.Field>\n\t\t\t<ChakraNativeSelect.Indicator />\n\t\t</ChakraNativeSelect.Root>\n\t);\n};\nNativeSelect.displayName = \"NativeSelect\";\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {\n\tshowStepper?: boolean;\n}\n\nexport const NumberInputRoot = function NumberInput({\n\tref,\n\t...props\n}: NumberInputProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { children, showStepper = true, ...rest } = props;\n\treturn (\n\t\t<ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n\t\t\t{children}\n\t\t\t{showStepper && (\n\t\t\t\t<ChakraNumberInput.Control>\n\t\t\t\t\t<ChakraNumberInput.IncrementTrigger />\n\t\t\t\t\t<ChakraNumberInput.DecrementTrigger />\n\t\t\t\t</ChakraNumberInput.Control>\n\t\t\t)}\n\t\t</ChakraNumberInput.Root>\n\t);\n};\nNumberInputRoot.displayName = \"NumberInputRoot\";\n\nexport const NumberInputField = ChakraNumberInput.Input;\nNumberInputField.displayName = \"NumberInputField\";\nexport const NumberInputScrubber = ChakraNumberInput.Scrubber;\nNumberInputScrubber.displayName = \"NumberInputScrubber\";\nexport const NumberInputLabel = ChakraNumberInput.Label;\nNumberInputLabel.displayName = \"NumberInputLabel\";\n","import { RadioGroup as ChakraRadioGroup } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface RadioProps extends ChakraRadioGroup.ItemProps {\n\t/** Ref attached to the root element. */\n\trootRef?: React.RefObject<HTMLDivElement | null>;\n\t/** Additional props forwarded to the hidden input element. */\n\tinputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n}\n\nexport const Radio = function Radio({\n\tref,\n\t...props\n}: RadioProps & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst { children, inputProps, rootRef, ...rest } = props;\n\treturn (\n\t\t<ChakraRadioGroup.Item ref={rootRef} {...rest}>\n\t\t\t<ChakraRadioGroup.ItemHiddenInput ref={ref} {...inputProps} />\n\t\t\t<ChakraRadioGroup.ItemIndicator />\n\t\t\t{children && (\n\t\t\t\t<ChakraRadioGroup.ItemText>{children}</ChakraRadioGroup.ItemText>\n\t\t\t)}\n\t\t</ChakraRadioGroup.Item>\n\t);\n};\nRadio.displayName = \"Radio\";\n\nexport const RadioGroup = ChakraRadioGroup.Root;\nRadioGroup.displayName = \"RadioGroup\";\n"]}
|
package/dist/forms/index.d.ts
CHANGED
|
@@ -2,9 +2,11 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { FieldValues, Path, ControllerRenderProps } from 'react-hook-form';
|
|
4
4
|
import { ButtonProps, InputProps, RadioGroupRootProps, StackProps, NativeSelectFieldProps, TextareaProps } from '@chakra-ui/react';
|
|
5
|
+
import { U as UnsavedChangesGuardProps } from '../unsaved-changes-guard-kwzxMb6r.js';
|
|
5
6
|
import { b as NumberInputProps } from '../number-input-D2X0rWOg.js';
|
|
6
7
|
export { S as SearchInput, a as SearchInputProps } from '../search-input-C_Cl2OEx.js';
|
|
7
8
|
import { a as SwitchProps } from '../switch-B0o6G2XE.js';
|
|
9
|
+
import 'react-router-dom';
|
|
8
10
|
|
|
9
11
|
interface FormFieldProps<T extends FieldValues> {
|
|
10
12
|
name: Path<T>;
|
|
@@ -137,16 +139,17 @@ declare namespace DirtyCounter {
|
|
|
137
139
|
var displayName: string;
|
|
138
140
|
}
|
|
139
141
|
|
|
140
|
-
interface DirtyFormGuardProps {
|
|
141
|
-
/** Dialog title. @default "You have unsaved changes" */
|
|
142
|
-
title?: string;
|
|
143
|
-
/** Dialog message body. @default "Are you sure you want to leave this page? You have unsaved changes." */
|
|
144
|
-
message?: string;
|
|
145
|
-
/** Label for the confirm/leave button. @default "Leave" */
|
|
146
|
-
confirmLabel?: string;
|
|
147
|
-
/** Label for the cancel/stay button. @default "Stay" */
|
|
148
|
-
cancelLabel?: string;
|
|
142
|
+
interface DirtyFormGuardProps extends Omit<UnsavedChangesGuardProps, "isDirty"> {
|
|
149
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Form-aware shortcut for `<UnsavedChangesGuard/>`: sources `isDirty` from
|
|
146
|
+
* the surrounding `useFormContext()`. Must be mounted inside a
|
|
147
|
+
* `<FormProvider/>`. For non-form dirty sources (Monaco buffer, custom
|
|
148
|
+
* hook) use `<UnsavedChangesGuard isDirty={…}/>` directly.
|
|
149
|
+
*
|
|
150
|
+
* Pass `safePathPrefix` to exempt sibling tabs of the same detail page
|
|
151
|
+
* from the leave-confirmation modal.
|
|
152
|
+
*/
|
|
150
153
|
declare const DirtyFormGuard: React__default.FC<DirtyFormGuardProps>;
|
|
151
154
|
|
|
152
155
|
type DropzoneOptions = {
|
package/dist/forms/index.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NumberInputRoot, NumberInputField, RadioGroup, Radio, NativeSelect } from '../chunk-CWBQKGL4.js';
|
|
2
2
|
import { Popover, PopoverTrigger, PopoverContent, PopoverBody, Switch } from '../chunk-MIEUXFSK.js';
|
|
3
3
|
export { SearchInput } from '../chunk-E7KRPPCQ.js';
|
|
4
4
|
import { Textarea } from '../chunk-NFZMG6ZL.js';
|
|
5
5
|
import { text_input_default } from '../chunk-OU6H3KU4.js';
|
|
6
6
|
import { Stack, Grid, GridItem, Text, Box, HStack, Flex } from '../chunk-G4QMIXLC.js';
|
|
7
|
+
import { UnsavedChangesGuard } from '../chunk-77EOXDGW.js';
|
|
8
|
+
import '../chunk-7KPPPE4U.js';
|
|
7
9
|
import { Input, IconButton, ButtonGroup, Button, Field, Checkbox, Square, Editable, useEditableContext } from '@chakra-ui/react';
|
|
8
10
|
import { Trash2, Plus, Upload, Pencil } from 'lucide-react';
|
|
9
11
|
import React, { useId, useCallback, useEffect, useRef } from 'react';
|
|
10
12
|
import { useFormContext, useFieldArray, Controller } from 'react-hook-form';
|
|
11
13
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
12
|
-
import { useBlocker } from 'react-router-dom';
|
|
13
14
|
|
|
14
15
|
function FormField({
|
|
15
16
|
name,
|
|
@@ -487,26 +488,9 @@ function DirtyCounter({
|
|
|
487
488
|
] });
|
|
488
489
|
}
|
|
489
490
|
DirtyCounter.displayName = "DirtyCounter";
|
|
490
|
-
var DirtyFormGuard = ({
|
|
491
|
-
title,
|
|
492
|
-
message,
|
|
493
|
-
confirmLabel,
|
|
494
|
-
cancelLabel
|
|
495
|
-
}) => {
|
|
491
|
+
var DirtyFormGuard = (props) => {
|
|
496
492
|
const { formState } = useFormContext();
|
|
497
|
-
|
|
498
|
-
return /* @__PURE__ */ jsx(
|
|
499
|
-
LeavePageConfirmation,
|
|
500
|
-
{
|
|
501
|
-
blocked: blocker.state === "blocked",
|
|
502
|
-
onConfirmLeave: () => blocker.proceed?.(),
|
|
503
|
-
onCancelLeave: () => blocker.reset?.(),
|
|
504
|
-
title,
|
|
505
|
-
message,
|
|
506
|
-
confirmLabel,
|
|
507
|
-
cancelLabel
|
|
508
|
-
}
|
|
509
|
-
);
|
|
493
|
+
return /* @__PURE__ */ jsx(UnsavedChangesGuard, { isDirty: formState.isDirty, ...props });
|
|
510
494
|
};
|
|
511
495
|
DirtyFormGuard.displayName = "DirtyFormGuard";
|
|
512
496
|
function FileField(props) {
|
package/dist/forms/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/forms/form-field.tsx","../../src/forms/array-field.tsx","../../src/forms/checkbox-field.tsx","../../src/forms/code-field.tsx","../../src/forms/color-picker-field.tsx","../../src/forms/controlled-form-field.tsx","../../src/forms/date-picker-field.tsx","../../src/forms/dirty-counter.tsx","../../src/forms/dirty-form-guard.tsx","../../src/forms/file-field.tsx","../../src/forms/inline-edit.tsx","../../src/forms/input-field.tsx","../../src/forms/markdown-field.tsx","../../src/forms/number-input-field.tsx","../../src/forms/radio-group-field.tsx","../../src/forms/select-field.tsx","../../src/forms/switch-field.tsx","../../src/forms/textarea-field.tsx","../../src/forms/use-field-dirty.ts"],"names":["jsx","useFormContext","jsxs","IconButton","useId","Field","Input","useCallback","Button","ButtonGroup","NumberInputField"],"mappings":"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","file":"index.js","sourcesContent":["import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport {\n\tController,\n\ttype ControllerRenderProps,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface FormFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\t/** Persistent description that shows even when there's an error. */\n\tdescription?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\t/** When false, the dirty-marker on the label is suppressed and the\n\t * children-callback's `meta.isDirty` is forced to false. @default true */\n\tshowDirtyState?: boolean;\n\tchildren: (\n\t\tfield: ControllerRenderProps<T, Path<T>> & {\n\t\t\t/** Computed aria-describedby linking to helper/description/error elements. */\n\t\t\t\"aria-describedby\"?: string;\n\t\t},\n\t\tmeta: { isDirty: boolean },\n\t) => React.ReactNode;\n}\n\nexport function FormField<T extends FieldValues>({\n\tname,\n\tlabel,\n\thelperText,\n\tdescription,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tshowDirtyState = true,\n\tchildren,\n}: FormFieldProps<T>) {\n\tconst { control } = useFormContext<T>();\n\tconst uid = useId();\n\tconst descriptionId = `${uid}-description`;\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst describedBy =\n\t\t\t\t\t[\n\t\t\t\t\t\tdescription ? descriptionId : null,\n\t\t\t\t\t\thelperText ? helperId : null,\n\t\t\t\t\t\tfieldState.error ? errorId : null,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\" \") || undefined;\n\t\t\t\tconst isDirty = Boolean(showDirtyState && fieldState.isDirty);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root\n\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\tdata-dirty={isDirty ? \"true\" : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label &&\n\t\t\t\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t{isDirty && (\n\t\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"inline-block\"\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\theight=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius=\"full\"\n\t\t\t\t\t\t\t\t\t\t\t\tbg=\"yellow.500\"\n\t\t\t\t\t\t\t\t\t\t\t\tml=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"ungespeicherte Änderung\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{children(\n\t\t\t\t\t\t\t{ ...field, \"aria-describedby\": describedBy },\n\t\t\t\t\t\t\t{ isDirty },\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<Text id={descriptionId} fontSize=\"xs\" color=\"muted\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{helperText &&\n\t\t\t\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(FormField as { displayName?: string }).displayName = \"FormField\";\n","import { Button, ButtonGroup, IconButton, Input } from \"@chakra-ui/react\";\nimport { Plus, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport {\n\ttype FieldValues,\n\tuseFieldArray,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, Grid, GridItem, Stack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface ArrayFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/**\n\t * The mode of the array field.\n\t * - `dynamic` — add/remove key-value pairs\n\t * - `keyed` — fixed keys, editable values\n\t * @default \"dynamic\"\n\t */\n\tmode?: \"dynamic\" | \"keyed\";\n\t/** Header label for the value column. @default \"Value\" */\n\tvalueHeader?: string;\n\t/** Header label for the key column. @default \"Key\" */\n\tkeyHeader?: string;\n\t/** Fixed keys when mode is \"keyed\". */\n\tkeys?: Array<{ key: string; value: string }>;\n\t/** Label for the add button. @default \"Add Field\" */\n\taddLabel?: string;\n\t/** Aria label for the remove button. @default \"Remove Item\" */\n\tremoveLabel?: string;\n\t/** Content to display when there are no items. */\n\temptyState?: React.ReactNode;\n}\n\nexport function ArrayField<T extends FieldValues>(props: ArrayFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmode = \"dynamic\",\n\t\tvalueHeader = \"Value\",\n\t\tkeyHeader = \"Key\",\n\t\tkeys = [],\n\t\taddLabel = \"Add Field\",\n\t\tremoveLabel = \"Remove Item\",\n\t\treadOnly,\n\t\tshowDirtyState,\n\t\temptyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(/* field */) => (\n\t\t\t\t<Box py={4} px={4} bg=\"bg\" rounded=\"md\">\n\t\t\t\t\t{mode === \"dynamic\" ? (\n\t\t\t\t\t\t<DynamicArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\taddLabel={addLabel}\n\t\t\t\t\t\t\tremoveLabel={removeLabel}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\temptyState={emptyState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<KeyedArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\tkeys={keys}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n\nArrayField.displayName = \"ArrayField\";\n\ninterface DynamicArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\taddLabel: string;\n\tremoveLabel: string;\n\treadOnly?: boolean;\n\temptyState?: React.ReactNode;\n}\n\nconst DynamicArray: React.FC<DynamicArrayProps> = React.memo((props) => {\n\tconst {\n\t\tname,\n\t\tvalueHeader,\n\t\tkeyHeader,\n\t\taddLabel,\n\t\tremoveLabel,\n\t\treadOnly,\n\t\temptyState,\n\t} = props;\n\n\tconst { control, register } = useFormContext();\n\tconst { fields, append, remove } = useFieldArray({\n\t\tcontrol,\n\t\tname: name as any,\n\t});\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr 50px\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem colSpan={2}>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\n\t\t\t\t{fields.map((item, index) => (\n\t\t\t\t\t<React.Fragment key={item.id}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.key` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.value` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tcolorPalette=\"red\"\n\t\t\t\t\t\t\taria-label={removeLabel}\n\t\t\t\t\t\t\tonClick={() => remove(index)}\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trash2 size={16} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{fields.length === 0 && emptyState && (\n\t\t\t\t<Box py={4} textAlign=\"center\">\n\t\t\t\t\t{emptyState}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<ButtonGroup>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => append({ key: \"\", value: \"\" })}\n\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t>\n\t\t\t\t\t<Plus size={16} />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t</Stack>\n\t);\n});\n\nDynamicArray.displayName = \"DynamicArray\";\n\ninterface KeyedArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\tkeys: Array<{ key: string; value: string }>;\n\treadOnly?: boolean;\n}\n\nconst KeyedArray: React.FC<KeyedArrayProps> = React.memo((props) => {\n\tconst { name, valueHeader, keyHeader, keys, readOnly } = props;\n\tconst { register } = useFormContext();\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t{keys.map((keyItem) => (\n\t\t\t\t\t<React.Fragment key={keyItem.key}>\n\t\t\t\t\t\t<Text py={2}>{keyItem.value ?? keyItem.key}</Text>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${keyItem.key}` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n});\n\nKeyedArray.displayName = \"KeyedArray\";\n","import { Checkbox } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormFieldProps } from \"./form-field\";\nimport { FormField } from \"./form-field\";\n\nexport interface CheckboxFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** When provided, the field is treated as an array of checked values. */\n\tvalue?: string | number;\n\t/** Content to display after the checkbox. */\n\tchildren?: React.ReactNode;\n}\n\nexport function CheckboxField<T extends FieldValues>({\n\t...props\n}: CheckboxFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tvalue,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\thelperText,\n\t\tchildren,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\thelperText={helperText}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => {\n\t\t\t\t// Array mode: field.value is an array, value prop identifies the item\n\t\t\t\tconst isArrayMode = value !== undefined;\n\n\t\t\t\tconst isChecked = isArrayMode\n\t\t\t\t\t? Array.isArray(field.value) && field.value.includes(value)\n\t\t\t\t\t: !!field.value;\n\n\t\t\t\tconst handleCheckedChange = (details: {\n\t\t\t\t\tchecked: boolean | \"indeterminate\";\n\t\t\t\t}) => {\n\t\t\t\t\tif (isArrayMode) {\n\t\t\t\t\t\tconst currentValue = Array.isArray(field.value)\n\t\t\t\t\t\t\t? [...field.value]\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tif (details.checked) {\n\t\t\t\t\t\t\tif (!currentValue.includes(value)) {\n\t\t\t\t\t\t\t\tcurrentValue.push(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst idx = currentValue.indexOf(value);\n\t\t\t\t\t\t\tif (idx > -1) currentValue.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfield.onChange(currentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfield.onChange(!!details.checked);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst uniqueId = isArrayMode ? `${name}-${String(value)}` : name;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\tid={uniqueId}\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tvalue={isArrayMode ? String(value) : undefined}\n\t\t\t\t\t\tchecked={isChecked}\n\t\t\t\t\t\tonCheckedChange={handleCheckedChange}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Checkbox.HiddenInput />\n\t\t\t\t\t\t<Checkbox.Control>\n\t\t\t\t\t\t\t<Checkbox.Indicator />\n\t\t\t\t\t\t</Checkbox.Control>\n\t\t\t\t\t\t{(label || children) && <Checkbox.Label>{children}</Checkbox.Label>}\n\t\t\t\t\t</Checkbox.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(CheckboxField as { displayName?: string }).displayName = \"CheckboxField\";\n","import type React from \"react\";\nimport { useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @monaco-editor/react is an optional peer dependency\ntype MonacoEditorProps = {\n\tvalue?: string;\n\tlanguage?: string;\n\tonChange?: (value: string | undefined) => void;\n\tonMount?: (editor: any, monaco: any) => void;\n\theight?: string;\n\toptions?: Record<string, any>;\n};\n\nexport interface CodeFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tlanguage?: string;\n\tplaceholder?: string;\n\theight?: string;\n\tindentWithTab?: boolean;\n\t/** The Monaco Editor component. Pass it to avoid hard dependency on @monaco-editor/react. */\n\tEditor?: React.ComponentType<MonacoEditorProps>;\n}\n\nexport function CodeField<T extends FieldValues>({\n\tref,\n\t...props\n}: CodeFieldProps<T> & { ref?: React.Ref<any> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tlanguage = \"typescript\",\n\t\theight = \"400px\",\n\t\tindentWithTab = true,\n\t\treadOnly,\n\t\tEditor,\n\t\t...rest\n\t} = props;\n\n\tconst onMount = useCallback(\n\t\t(editorInstance: any, _monaco: any) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(editorInstance);\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t(ref as React.MutableRefObject<any>).current = editorInstance;\n\t\t\t}\n\t\t\teditorInstance.updateOptions?.({\n\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t});\n\t\t},\n\t\t[ref, indentWithTab],\n\t);\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) =>\n\t\t\t\tEditor ? (\n\t\t\t\t\t<Editor\n\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\tonMount={onMount}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\toptions={{\n\t\t\t\t\t\t\treadOnly,\n\t\t\t\t\t\t\twordWrap: \"on\",\n\t\t\t\t\t\t\tminimap: { enabled: false },\n\t\t\t\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontFamily: \"monospace\",\n\t\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: height,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t</FormField>\n\t);\n}\n(CodeField as { displayName?: string }).displayName = \"CodeField\";\n","import { type ButtonProps, IconButton, Square } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tPopover,\n\tPopoverBody,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../primitives/popover\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-colorful is an optional peer dependency\ntype HexColorPickerProps = {\n\tcolor?: string;\n\tonChange?: (color: string) => void;\n};\n\nexport interface ColorPickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tsize?: ButtonProps[\"size\"];\n\t/** The HexColorPicker component from react-colorful. Pass it to avoid hard dependency. */\n\tColorPicker?: React.ComponentType<HexColorPickerProps>;\n}\n\nexport function ColorPickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: ColorPickerFieldProps<T> & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { name, label, size = \"md\", readOnly, ColorPicker, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<Popover>\n\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tw=\"fit-content\"\n\t\t\t\t\t\t\tborderWidth=\"1px\"\n\t\t\t\t\t\t\trounded=\"md\"\n\t\t\t\t\t\t\tp={1}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t\taria-label={`Color: ${field.value || \"none\"}`}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square rounded=\"sm\" bg={field.value} size={6} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t<PopoverContent width=\"auto\" showArrow>\n\t\t\t\t\t\t<PopoverBody>\n\t\t\t\t\t\t\t{ColorPicker ? (\n\t\t\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\t\t\tcolor={field.value}\n\t\t\t\t\t\t\t\t\tonChange={(color) => field.onChange(color)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\tvalue={field.value || \"#000000\"}\n\t\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 200,\n\t\t\t\t\t\t\t\t\t\theight: 200,\n\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PopoverBody>\n\t\t\t\t\t</PopoverContent>\n\t\t\t\t</Popover>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(ColorPickerField as { displayName?: string }).displayName = \"ColorPickerField\";\n","import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport { HStack } from \"../primitives/layout\";\n\nexport interface ControlledFormFieldProps {\n\tname: string;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\terrorMessage?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nexport const ControlledFormField: React.FC<ControlledFormFieldProps> = ({\n\tname,\n\tlabel,\n\thelperText,\n\terrorMessage,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}) => {\n\tconst uid = useId();\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Field.Root\n\t\t\tinvalid={!!errorMessage}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t>\n\t\t\t{label &&\n\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t<HStack>\n\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</HStack>\n\t\t\t\t) : (\n\t\t\t\t\tlabel\n\t\t\t\t))}\n\t\t\t{/* aria-describedby must be set manually by the consumer since children is ReactNode, not a render function. */}\n\t\t\t{children}\n\t\t\t{helperText &&\n\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t) : (\n\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t))}\n\t\t\t{errorMessage && (\n\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</Field.ErrorText>\n\t\t\t)}\n\t\t</Field.Root>\n\t);\n};\nControlledFormField.displayName = \"ControlledFormField\";\n","import { Input } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface DatePickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Minimum date in YYYY-MM-DD format */\n\tmin?: string;\n\t/** Maximum date in YYYY-MM-DD format */\n\tmax?: string;\n\t/** Input type: \"date\", \"datetime-local\", or \"time\" */\n\ttype?: \"date\" | \"datetime-local\" | \"time\";\n}\n\nexport function DatePickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: DatePickerFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\ttype = \"date\",\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Input\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tid={name}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(DatePickerField as { displayName?: string }).displayName = \"DatePickerField\";\n","import { useFormContext } from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface DirtyCounterProps {\n\t/**\n\t * Label template. The literal `{count}` is replaced with the dirty\n\t * field count. @default \"{count} ungespeicherte Änderungen\"\n\t */\n\tlabel?: string;\n\t/** Render nothing when no fields are dirty. @default true */\n\thideWhenClean?: boolean;\n}\n\nexport function DirtyCounter({\n\tlabel = \"{count} ungespeicherte Änderungen\",\n\thideWhenClean = true,\n}: DirtyCounterProps) {\n\tconst ctx = useFormContext();\n\tconst dirty = ctx\n\t\t? (ctx.formState.dirtyFields as Record<string, unknown>)\n\t\t: {};\n\tconst count = Object.keys(dirty).length;\n\tif (count === 0 && hideWhenClean) return null;\n\treturn (\n\t\t<HStack gap=\"2\" fontSize=\"sm\" color=\"yellow.700\">\n\t\t\t<Box\n\t\t\t\twidth=\"6px\"\n\t\t\t\theight=\"6px\"\n\t\t\t\tborderRadius=\"full\"\n\t\t\t\tbg=\"yellow.500\"\n\t\t\t\taria-hidden\n\t\t\t/>\n\t\t\t<Text>{label.replace(\"{count}\", String(count))}</Text>\n\t\t</HStack>\n\t);\n}\nDirtyCounter.displayName = \"DirtyCounter\";\n","import type React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { useBlocker } from \"react-router-dom\";\nimport { LeavePageConfirmation } from \"../primitives/leave-page-confirmation\";\n\nexport interface DirtyFormGuardProps {\n\t/** Dialog title. @default \"You have unsaved changes\" */\n\ttitle?: string;\n\t/** Dialog message body. @default \"Are you sure you want to leave this page? You have unsaved changes.\" */\n\tmessage?: string;\n\t/** Label for the confirm/leave button. @default \"Leave\" */\n\tconfirmLabel?: string;\n\t/** Label for the cancel/stay button. @default \"Stay\" */\n\tcancelLabel?: string;\n}\n\nexport const DirtyFormGuard: React.FC<DirtyFormGuardProps> = ({\n\ttitle,\n\tmessage,\n\tconfirmLabel,\n\tcancelLabel,\n}) => {\n\tconst { formState } = useFormContext();\n\tconst blocker = useBlocker(formState.isDirty);\n\n\treturn (\n\t\t<LeavePageConfirmation\n\t\t\tblocked={blocker.state === \"blocked\"}\n\t\t\tonConfirmLeave={() => blocker.proceed?.()}\n\t\t\tonCancelLeave={() => blocker.reset?.()}\n\t\t\ttitle={title}\n\t\t\tmessage={message}\n\t\t\tconfirmLabel={confirmLabel}\n\t\t\tcancelLabel={cancelLabel}\n\t\t/>\n\t);\n};\nDirtyFormGuard.displayName = \"DirtyFormGuard\";\n","import { Button } from \"@chakra-ui/react\";\nimport { Upload } from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Box, Flex } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-dropzone is an optional peer dependency\ntype DropzoneOptions = {\n\tnoClick?: boolean;\n\tmultiple?: boolean;\n\tdisabled?: boolean;\n\taccept?: Record<string, string[]>;\n\tonDrop?: (files: File[]) => void;\n};\n\ntype UseDropzoneReturn = {\n\tgetRootProps: () => Record<string, any>;\n\tgetInputProps: () => Record<string, any>;\n\tisDragActive: boolean;\n\topen: () => void;\n};\n\nexport interface FileFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Accept configuration for file types, e.g. { \"image/*\": [\".png\", \".jpg\"] } */\n\taccept?: Record<string, string[]>;\n\t/** Allow multiple file selection. @default false */\n\tmultiple?: boolean;\n\t/** Text shown when dragging files over. @default \"Release to upload\" */\n\tdragActiveText?: string;\n\t/** Text shown below the file preview. @default \"Drag & drop a file to upload\" */\n\tdropHintText?: string;\n\t/** Label for the upload button. @default \"Choose File\" */\n\tbuttonLabel?: string;\n\t/** The useDropzone hook from react-dropzone. Pass it to avoid hard dependency. */\n\tuseDropzone?: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nexport function FileField<T extends FieldValues>(props: FileFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\taccept,\n\t\tmultiple = false,\n\t\tdisabled,\n\t\tdragActiveText = \"Release to upload\",\n\t\tdropHintText = \"Drag & drop a file to upload\",\n\t\tbuttonLabel = \"Choose File\",\n\t\tuseDropzone,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} disabled={disabled} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (useDropzone) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<DropzoneContent\n\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\taccept={accept}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdragActiveText={dragActiveText}\n\t\t\t\t\t\t\tdropHintText={dropHintText}\n\t\t\t\t\t\t\tbuttonLabel={buttonLabel}\n\t\t\t\t\t\t\tuseDropzone={useDropzone}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: native file input\n\t\t\t\treturn (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept={\n\t\t\t\t\t\t\t\taccept ? Object.values(accept).flat().join(\",\") : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst files = e.target.files;\n\t\t\t\t\t\t\t\tif (!files) return;\n\t\t\t\t\t\t\t\tif (multiple) {\n\t\t\t\t\t\t\t\t\tfield.onChange(Array.from(files));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield.onChange(files[0] || null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t<Text mt={2} fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t\t\t{(field.value as File)?.name ?? \"File selected\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n\nFileField.displayName = \"FileField\";\n\ninterface DropzoneContentProps {\n\tfield: {\n\t\tvalue: any;\n\t\tonChange: (...event: any[]) => void;\n\t\tonBlur: () => void;\n\t\tref: React.Ref<any>;\n\t\tname: string;\n\t};\n\taccept?: Record<string, string[]>;\n\tmultiple: boolean;\n\tdisabled?: boolean;\n\tdragActiveText: string;\n\tdropHintText: string;\n\tbuttonLabel: string;\n\tuseDropzone: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nconst DropzoneContent: React.FC<DropzoneContentProps> = ({\n\tfield,\n\taccept,\n\tmultiple,\n\tdisabled,\n\tdragActiveText,\n\tdropHintText,\n\tbuttonLabel,\n\tuseDropzone,\n}) => {\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (multiple) {\n\t\t\t\tfield.onChange(files);\n\t\t\t} else {\n\t\t\t\tconst file = files[0];\n\t\t\t\tif (file) {\n\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\tObject.assign(file, {\n\t\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[field, multiple],\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (field.value?.preview) {\n\t\t\t\tURL.revokeObjectURL(field.value.preview);\n\t\t\t}\n\t\t};\n\t}, [field.value]);\n\n\tconst { getRootProps, getInputProps, isDragActive, open } = useDropzone({\n\t\tnoClick: true,\n\t\tmultiple,\n\t\tdisabled,\n\t\taccept,\n\t\tonDrop: handleDrop,\n\t});\n\n\treturn (\n\t\t<Box {...getRootProps()}>\n\t\t\t<Box display=\"none\" {...getInputProps()} asChild>\n\t\t\t\t<input />\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tbgColor=\"bg.muted\"\n\t\t\t\tp={4}\n\t\t\t\trounded=\"md\"\n\t\t\t\toverflow=\"hidden\"\n\t\t\t\tposition=\"relative\"\n\t\t\t\ttextAlign=\"center\"\n\t\t\t>\n\t\t\t\t{isDragActive && (\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t\ttop=\"0\"\n\t\t\t\t\t\tinsetInlineStart=\"0\"\n\t\t\t\t\t\tposition=\"absolute\"\n\t\t\t\t\t\tbackgroundColor=\"blackAlpha.400\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\tgap=\"3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Upload size={48} />\n\t\t\t\t\t\t<Text fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t{dragActiveText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Flex>\n\t\t\t\t)}\n\t\t\t\t{field.value?.name && (\n\t\t\t\t\t<Text fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t{field.value.name}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text color=\"fg.muted\" fontSize=\"xs\" mt={2}>\n\t\t\t\t\t{dropHintText}\n\t\t\t\t</Text>\n\t\t\t\t<Button mt={2} size=\"sm\" variant=\"outline\" onClick={open}>\n\t\t\t\t\t<Upload size={14} />\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n};\n","import {\n\tButtonGroup,\n\tEditable,\n\tIconButton,\n\tuseEditableContext,\n} from \"@chakra-ui/react\";\nimport { Pencil } from \"lucide-react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface InlineEditProps {\n\tvalue?: string;\n\tonSubmit?: (nextValue: string) => void;\n\tonChange?: (nextValue: string) => void;\n\tonCancel?: (previousValue: string) => void;\n\t/** @default \"input\" */\n\tvariant?: \"input\" | \"textarea\";\n\tplaceholder?: string;\n\t/** @default \"md\" */\n\tfontSize?: string;\n\tfontWeight?: string;\n\tmaxW?: string;\n\tdisabled?: boolean;\n\t/** When false, submitting an empty value reverts to the previous value. @default false */\n\tallowEmpty?: boolean;\n\t/** Number of rows used to calculate minH for textarea variant. @default 3 */\n\trows?: number;\n\t/** Aria label for the edit button. @default \"Edit\" */\n\teditLabel?: string;\n}\n\ninterface CancelRefCaptureProps {\n\tcancelRef: React.MutableRefObject<(() => void) | null>;\n}\n\nconst CancelRefCapture: React.FC<CancelRefCaptureProps> = ({ cancelRef }) => {\n\tconst { cancel } = useEditableContext();\n\tcancelRef.current = cancel;\n\treturn null;\n};\n\nconst EditControls: React.FC<{ editLabel: string }> = ({ editLabel }) => {\n\tconst { editing } = useEditableContext();\n\n\tif (editing) return null;\n\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t<Editable.EditTrigger asChild>\n\t\t\t\t<IconButton\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tmarginInlineStart={2}\n\t\t\t\t\taria-label={editLabel}\n\t\t\t\t>\n\t\t\t\t\t<Pencil size={16} />\n\t\t\t\t</IconButton>\n\t\t\t</Editable.EditTrigger>\n\t\t</ButtonGroup>\n\t);\n};\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n\tvalue,\n\tonSubmit,\n\tonChange,\n\tonCancel,\n\tvariant = \"input\",\n\tplaceholder,\n\tfontSize = \"md\",\n\tfontWeight,\n\tmaxW,\n\tdisabled,\n\tallowEmpty = false,\n\trows = 3,\n\teditLabel = \"Edit\",\n}) => {\n\tconst cancelRef = useRef<(() => void) | null>(null);\n\n\tconst handleSubmit = (details: { value: string }) => {\n\t\tconst trimmed = details.value.trim();\n\t\tif (!allowEmpty && trimmed === \"\") {\n\t\t\tcancelRef.current?.();\n\t\t\treturn;\n\t\t}\n\t\tonSubmit?.(trimmed);\n\t};\n\n\treturn (\n\t\t<Editable.Root\n\t\t\tfontSize={fontSize}\n\t\t\tfontWeight={fontWeight}\n\t\t\tmaxW={maxW}\n\t\t\tvalue={String(value ?? \"\")}\n\t\t\tonValueChange={(d) => onChange?.(d.value)}\n\t\t\tonValueRevert={(d) => onCancel?.(d.value)}\n\t\t\tonValueCommit={handleSubmit}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t>\n\t\t\t<CancelRefCapture cancelRef={cancelRef} />\n\t\t\t<Editable.Preview />\n\t\t\t{variant === \"textarea\" ? (\n\t\t\t\t<Editable.Textarea minH={`${rows * 1.5}em`} />\n\t\t\t) : (\n\t\t\t\t<Editable.Input />\n\t\t\t)}\n\t\t\t<EditControls editLabel={editLabel} />\n\t\t</Editable.Root>\n\t);\n};\nInlineEdit.displayName = \"InlineEdit\";\n","import type { InputProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport TextInput from \"../atoms/text-input/text-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface InputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttype?: InputProps[\"type\"];\n\tappend?: string | React.ReactElement;\n\tprepend?: string | React.ReactElement;\n\tinputProps?: InputProps;\n}\n\nexport function InputField<T extends FieldValues>({\n\tref,\n\t...props\n}: InputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttype,\n\t\tappend,\n\t\tprepend,\n\t\tinputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<TextInput\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tappend={append}\n\t\t\t\t\tprepend={prepend}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(InputField as { displayName?: string }).displayName = \"InputField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @uiw/react-md-editor is an optional peer dependency\ntype MDEditorProps = {\n\tvalue?: string;\n\tonChange?: (value?: string) => void;\n\tminHeight?: number;\n\tmaxHeight?: number;\n\tvisibleDragbar?: boolean;\n};\n\ntype MDEditorComponent = React.ComponentType<MDEditorProps> & {\n\tMarkdown?: React.ComponentType<{ source?: string }>;\n};\n\nexport interface MarkdownFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** The MDEditor component from @uiw/react-md-editor. Pass it to avoid hard dependency. */\n\tMDEditor?: MDEditorComponent;\n\tminHeight?: number;\n\tmaxHeight?: number;\n}\n\nexport function MarkdownField<T extends FieldValues>(\n\tprops: MarkdownFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tMDEditor,\n\t\tminHeight = 200,\n\t\tmaxHeight = 600,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (MDEditor) {\n\t\t\t\t\tif (readOnly && MDEditor.Markdown) {\n\t\t\t\t\t\treturn <MDEditor.Markdown source={field.value} />;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MDEditor\n\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\t\tminHeight={minHeight}\n\t\t\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\t\t\tvisibleDragbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: plain textarea\n\t\t\t\treturn (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: `${minHeight}px`,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(MarkdownField as { displayName?: string }).displayName = \"MarkdownField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tNumberInputField as NumberInputInput,\n\ttype NumberInputProps,\n\tNumberInputRoot,\n} from \"../primitives/number-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface NumberInputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tmin?: number;\n\tmax?: number;\n\tstep?: number;\n\tshowStepper?: boolean;\n\tnumberInputProps?: NumberInputProps;\n}\n\nexport function NumberInputField<T extends FieldValues>({\n\tref,\n\t...props\n}: NumberInputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\tstep,\n\t\tshowStepper = true,\n\t\tnumberInputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NumberInputRoot\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={String(field.value ?? 0)}\n\t\t\t\t\tonValueChange={(details) => {\n\t\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\t\tdetails.value === \"\" ? 0 : Number.parseFloat(details.value),\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tid={name}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tshowStepper={showStepper && !readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\t{...numberInputProps}\n\t\t\t\t>\n\t\t\t\t\t<NumberInputInput\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t/>\n\t\t\t\t</NumberInputRoot>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(NumberInputField as { displayName?: string }).displayName = \"NumberInputField\";\n","import type { RadioGroupRootProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Stack, type StackProps } from \"../primitives/layout\";\nimport { Radio, RadioGroup } from \"../primitives/radio\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface RadioOption {\n\tlabel: React.ReactNode;\n\tvalue: string;\n}\n\nexport interface RadioGroupFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\toptions: RadioOption[];\n\tradioGroupProps?: RadioGroupRootProps;\n\tstackProps?: StackProps;\n}\n\nexport function RadioGroupField<T extends FieldValues>(\n\tprops: RadioGroupFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\toptions,\n\t\tshowDirtyState,\n\t\tradioGroupProps,\n\t\tstackProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<RadioGroup\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tonValueChange={(e) => field.onChange(e.value)}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t{...radioGroupProps}\n\t\t\t\t>\n\t\t\t\t\t<Stack direction=\"row\" {...stackProps}>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<Radio key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Radio>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</RadioGroup>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(RadioGroupField as { displayName?: string }).displayName = \"RadioGroupField\";\n","import type { NativeSelectFieldProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { NativeSelect } from \"../primitives/native-select\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SelectFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\tselectProps?: NativeSelectFieldProps;\n\tchildren: React.ReactNode;\n}\n\nexport function SelectField<T extends FieldValues>({\n\tref,\n\t...props\n}: SelectFieldProps<T> & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\tselectProps,\n\t\tchildren,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<NativeSelect\n\t\t\t\t\tdisabled={readOnly || disabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\t{...selectProps}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</NativeSelect>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SelectField as { displayName?: string }).displayName = \"SelectField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Switch, type SwitchProps } from \"../primitives/switch\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SwitchFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tswitchProps?: SwitchProps;\n}\n\nexport function SwitchField<T extends FieldValues>({\n\tref,\n\t...props\n}: SwitchFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\tswitchProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Switch\n\t\t\t\t\tid={name}\n\t\t\t\t\tname={field.name}\n\t\t\t\t\tchecked={field.value || false}\n\t\t\t\t\tonCheckedChange={(details) => field.onChange(!!details.checked)}\n\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...switchProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SwitchField as { displayName?: string }).displayName = \"SwitchField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Textarea, type TextareaProps } from \"../primitives/textarea\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface TextareaFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttextareaProps?: TextareaProps;\n}\n\nexport function TextareaField<T extends FieldValues>({\n\tref,\n\t...props\n}: TextareaFieldProps<T> & { ref?: React.Ref<HTMLTextAreaElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttextareaProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<Textarea\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...textareaProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(TextareaField as { displayName?: string }).displayName = \"TextareaField\";\n","import { useFormContext } from \"react-hook-form\";\n\nexport interface UseFieldDirtyOptions {\n\t/** Set to false to never report dirty (opt-out per field). */\n\tshowDirtyState?: boolean;\n}\n\n/**\n * useFieldDirty returns true when the field at `name` is dirty (changed\n * from its react-hook-form default) AND visual marking isn't suppressed.\n * Safe to call outside a FormProvider — returns false in that case.\n */\nexport function useFieldDirty(\n\tname: string,\n\topts: UseFieldDirtyOptions = {},\n): boolean {\n\t// useFormContext must be called unconditionally before any branch\n\t// (rules of hooks). Apply showDirtyState gate after.\n\tconst ctx = useFormContext();\n\tconst { showDirtyState = true } = opts;\n\tif (!showDirtyState || !ctx) return false;\n\tconst dirty = ctx.formState.dirtyFields as Record<string, unknown>;\n\treturn Boolean(dirty[name]);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/forms/form-field.tsx","../../src/forms/array-field.tsx","../../src/forms/checkbox-field.tsx","../../src/forms/code-field.tsx","../../src/forms/color-picker-field.tsx","../../src/forms/controlled-form-field.tsx","../../src/forms/date-picker-field.tsx","../../src/forms/dirty-counter.tsx","../../src/forms/dirty-form-guard.tsx","../../src/forms/file-field.tsx","../../src/forms/inline-edit.tsx","../../src/forms/input-field.tsx","../../src/forms/markdown-field.tsx","../../src/forms/number-input-field.tsx","../../src/forms/radio-group-field.tsx","../../src/forms/select-field.tsx","../../src/forms/switch-field.tsx","../../src/forms/textarea-field.tsx","../../src/forms/use-field-dirty.ts"],"names":["jsx","useFormContext","jsxs","IconButton","useId","Field","Input","useCallback","Button","ButtonGroup","NumberInputField"],"mappings":"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","file":"index.js","sourcesContent":["import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport {\n\tController,\n\ttype ControllerRenderProps,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface FormFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\t/** Persistent description that shows even when there's an error. */\n\tdescription?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\t/** When false, the dirty-marker on the label is suppressed and the\n\t * children-callback's `meta.isDirty` is forced to false. @default true */\n\tshowDirtyState?: boolean;\n\tchildren: (\n\t\tfield: ControllerRenderProps<T, Path<T>> & {\n\t\t\t/** Computed aria-describedby linking to helper/description/error elements. */\n\t\t\t\"aria-describedby\"?: string;\n\t\t},\n\t\tmeta: { isDirty: boolean },\n\t) => React.ReactNode;\n}\n\nexport function FormField<T extends FieldValues>({\n\tname,\n\tlabel,\n\thelperText,\n\tdescription,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tshowDirtyState = true,\n\tchildren,\n}: FormFieldProps<T>) {\n\tconst { control } = useFormContext<T>();\n\tconst uid = useId();\n\tconst descriptionId = `${uid}-description`;\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst describedBy =\n\t\t\t\t\t[\n\t\t\t\t\t\tdescription ? descriptionId : null,\n\t\t\t\t\t\thelperText ? helperId : null,\n\t\t\t\t\t\tfieldState.error ? errorId : null,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\" \") || undefined;\n\t\t\t\tconst isDirty = Boolean(showDirtyState && fieldState.isDirty);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root\n\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\tdata-dirty={isDirty ? \"true\" : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label &&\n\t\t\t\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t{isDirty && (\n\t\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"inline-block\"\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\theight=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius=\"full\"\n\t\t\t\t\t\t\t\t\t\t\t\tbg=\"yellow.500\"\n\t\t\t\t\t\t\t\t\t\t\t\tml=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"ungespeicherte Änderung\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{children(\n\t\t\t\t\t\t\t{ ...field, \"aria-describedby\": describedBy },\n\t\t\t\t\t\t\t{ isDirty },\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<Text id={descriptionId} fontSize=\"xs\" color=\"muted\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{helperText &&\n\t\t\t\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(FormField as { displayName?: string }).displayName = \"FormField\";\n","import { Button, ButtonGroup, IconButton, Input } from \"@chakra-ui/react\";\nimport { Plus, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport {\n\ttype FieldValues,\n\tuseFieldArray,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, Grid, GridItem, Stack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface ArrayFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/**\n\t * The mode of the array field.\n\t * - `dynamic` — add/remove key-value pairs\n\t * - `keyed` — fixed keys, editable values\n\t * @default \"dynamic\"\n\t */\n\tmode?: \"dynamic\" | \"keyed\";\n\t/** Header label for the value column. @default \"Value\" */\n\tvalueHeader?: string;\n\t/** Header label for the key column. @default \"Key\" */\n\tkeyHeader?: string;\n\t/** Fixed keys when mode is \"keyed\". */\n\tkeys?: Array<{ key: string; value: string }>;\n\t/** Label for the add button. @default \"Add Field\" */\n\taddLabel?: string;\n\t/** Aria label for the remove button. @default \"Remove Item\" */\n\tremoveLabel?: string;\n\t/** Content to display when there are no items. */\n\temptyState?: React.ReactNode;\n}\n\nexport function ArrayField<T extends FieldValues>(props: ArrayFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmode = \"dynamic\",\n\t\tvalueHeader = \"Value\",\n\t\tkeyHeader = \"Key\",\n\t\tkeys = [],\n\t\taddLabel = \"Add Field\",\n\t\tremoveLabel = \"Remove Item\",\n\t\treadOnly,\n\t\tshowDirtyState,\n\t\temptyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(/* field */) => (\n\t\t\t\t<Box py={4} px={4} bg=\"bg\" rounded=\"md\">\n\t\t\t\t\t{mode === \"dynamic\" ? (\n\t\t\t\t\t\t<DynamicArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\taddLabel={addLabel}\n\t\t\t\t\t\t\tremoveLabel={removeLabel}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\temptyState={emptyState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<KeyedArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\tkeys={keys}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n\nArrayField.displayName = \"ArrayField\";\n\ninterface DynamicArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\taddLabel: string;\n\tremoveLabel: string;\n\treadOnly?: boolean;\n\temptyState?: React.ReactNode;\n}\n\nconst DynamicArray: React.FC<DynamicArrayProps> = React.memo((props) => {\n\tconst {\n\t\tname,\n\t\tvalueHeader,\n\t\tkeyHeader,\n\t\taddLabel,\n\t\tremoveLabel,\n\t\treadOnly,\n\t\temptyState,\n\t} = props;\n\n\tconst { control, register } = useFormContext();\n\tconst { fields, append, remove } = useFieldArray({\n\t\tcontrol,\n\t\tname: name as any,\n\t});\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr 50px\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem colSpan={2}>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\n\t\t\t\t{fields.map((item, index) => (\n\t\t\t\t\t<React.Fragment key={item.id}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.key` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.value` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tcolorPalette=\"red\"\n\t\t\t\t\t\t\taria-label={removeLabel}\n\t\t\t\t\t\t\tonClick={() => remove(index)}\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trash2 size={16} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{fields.length === 0 && emptyState && (\n\t\t\t\t<Box py={4} textAlign=\"center\">\n\t\t\t\t\t{emptyState}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<ButtonGroup>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => append({ key: \"\", value: \"\" })}\n\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t>\n\t\t\t\t\t<Plus size={16} />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t</Stack>\n\t);\n});\n\nDynamicArray.displayName = \"DynamicArray\";\n\ninterface KeyedArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\tkeys: Array<{ key: string; value: string }>;\n\treadOnly?: boolean;\n}\n\nconst KeyedArray: React.FC<KeyedArrayProps> = React.memo((props) => {\n\tconst { name, valueHeader, keyHeader, keys, readOnly } = props;\n\tconst { register } = useFormContext();\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t{keys.map((keyItem) => (\n\t\t\t\t\t<React.Fragment key={keyItem.key}>\n\t\t\t\t\t\t<Text py={2}>{keyItem.value ?? keyItem.key}</Text>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${keyItem.key}` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n});\n\nKeyedArray.displayName = \"KeyedArray\";\n","import { Checkbox } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormFieldProps } from \"./form-field\";\nimport { FormField } from \"./form-field\";\n\nexport interface CheckboxFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** When provided, the field is treated as an array of checked values. */\n\tvalue?: string | number;\n\t/** Content to display after the checkbox. */\n\tchildren?: React.ReactNode;\n}\n\nexport function CheckboxField<T extends FieldValues>({\n\t...props\n}: CheckboxFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tvalue,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\thelperText,\n\t\tchildren,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\thelperText={helperText}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => {\n\t\t\t\t// Array mode: field.value is an array, value prop identifies the item\n\t\t\t\tconst isArrayMode = value !== undefined;\n\n\t\t\t\tconst isChecked = isArrayMode\n\t\t\t\t\t? Array.isArray(field.value) && field.value.includes(value)\n\t\t\t\t\t: !!field.value;\n\n\t\t\t\tconst handleCheckedChange = (details: {\n\t\t\t\t\tchecked: boolean | \"indeterminate\";\n\t\t\t\t}) => {\n\t\t\t\t\tif (isArrayMode) {\n\t\t\t\t\t\tconst currentValue = Array.isArray(field.value)\n\t\t\t\t\t\t\t? [...field.value]\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tif (details.checked) {\n\t\t\t\t\t\t\tif (!currentValue.includes(value)) {\n\t\t\t\t\t\t\t\tcurrentValue.push(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst idx = currentValue.indexOf(value);\n\t\t\t\t\t\t\tif (idx > -1) currentValue.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfield.onChange(currentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfield.onChange(!!details.checked);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst uniqueId = isArrayMode ? `${name}-${String(value)}` : name;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\tid={uniqueId}\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tvalue={isArrayMode ? String(value) : undefined}\n\t\t\t\t\t\tchecked={isChecked}\n\t\t\t\t\t\tonCheckedChange={handleCheckedChange}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Checkbox.HiddenInput />\n\t\t\t\t\t\t<Checkbox.Control>\n\t\t\t\t\t\t\t<Checkbox.Indicator />\n\t\t\t\t\t\t</Checkbox.Control>\n\t\t\t\t\t\t{(label || children) && <Checkbox.Label>{children}</Checkbox.Label>}\n\t\t\t\t\t</Checkbox.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(CheckboxField as { displayName?: string }).displayName = \"CheckboxField\";\n","import type React from \"react\";\nimport { useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @monaco-editor/react is an optional peer dependency\ntype MonacoEditorProps = {\n\tvalue?: string;\n\tlanguage?: string;\n\tonChange?: (value: string | undefined) => void;\n\tonMount?: (editor: any, monaco: any) => void;\n\theight?: string;\n\toptions?: Record<string, any>;\n};\n\nexport interface CodeFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tlanguage?: string;\n\tplaceholder?: string;\n\theight?: string;\n\tindentWithTab?: boolean;\n\t/** The Monaco Editor component. Pass it to avoid hard dependency on @monaco-editor/react. */\n\tEditor?: React.ComponentType<MonacoEditorProps>;\n}\n\nexport function CodeField<T extends FieldValues>({\n\tref,\n\t...props\n}: CodeFieldProps<T> & { ref?: React.Ref<any> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tlanguage = \"typescript\",\n\t\theight = \"400px\",\n\t\tindentWithTab = true,\n\t\treadOnly,\n\t\tEditor,\n\t\t...rest\n\t} = props;\n\n\tconst onMount = useCallback(\n\t\t(editorInstance: any, _monaco: any) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(editorInstance);\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t(ref as React.MutableRefObject<any>).current = editorInstance;\n\t\t\t}\n\t\t\teditorInstance.updateOptions?.({\n\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t});\n\t\t},\n\t\t[ref, indentWithTab],\n\t);\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) =>\n\t\t\t\tEditor ? (\n\t\t\t\t\t<Editor\n\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\tonMount={onMount}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\toptions={{\n\t\t\t\t\t\t\treadOnly,\n\t\t\t\t\t\t\twordWrap: \"on\",\n\t\t\t\t\t\t\tminimap: { enabled: false },\n\t\t\t\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontFamily: \"monospace\",\n\t\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: height,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t</FormField>\n\t);\n}\n(CodeField as { displayName?: string }).displayName = \"CodeField\";\n","import { type ButtonProps, IconButton, Square } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tPopover,\n\tPopoverBody,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../primitives/popover\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-colorful is an optional peer dependency\ntype HexColorPickerProps = {\n\tcolor?: string;\n\tonChange?: (color: string) => void;\n};\n\nexport interface ColorPickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tsize?: ButtonProps[\"size\"];\n\t/** The HexColorPicker component from react-colorful. Pass it to avoid hard dependency. */\n\tColorPicker?: React.ComponentType<HexColorPickerProps>;\n}\n\nexport function ColorPickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: ColorPickerFieldProps<T> & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { name, label, size = \"md\", readOnly, ColorPicker, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<Popover>\n\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tw=\"fit-content\"\n\t\t\t\t\t\t\tborderWidth=\"1px\"\n\t\t\t\t\t\t\trounded=\"md\"\n\t\t\t\t\t\t\tp={1}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t\taria-label={`Color: ${field.value || \"none\"}`}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square rounded=\"sm\" bg={field.value} size={6} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t<PopoverContent width=\"auto\" showArrow>\n\t\t\t\t\t\t<PopoverBody>\n\t\t\t\t\t\t\t{ColorPicker ? (\n\t\t\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\t\t\tcolor={field.value}\n\t\t\t\t\t\t\t\t\tonChange={(color) => field.onChange(color)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\tvalue={field.value || \"#000000\"}\n\t\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 200,\n\t\t\t\t\t\t\t\t\t\theight: 200,\n\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PopoverBody>\n\t\t\t\t\t</PopoverContent>\n\t\t\t\t</Popover>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(ColorPickerField as { displayName?: string }).displayName = \"ColorPickerField\";\n","import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport { HStack } from \"../primitives/layout\";\n\nexport interface ControlledFormFieldProps {\n\tname: string;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\terrorMessage?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nexport const ControlledFormField: React.FC<ControlledFormFieldProps> = ({\n\tname,\n\tlabel,\n\thelperText,\n\terrorMessage,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}) => {\n\tconst uid = useId();\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Field.Root\n\t\t\tinvalid={!!errorMessage}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t>\n\t\t\t{label &&\n\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t<HStack>\n\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</HStack>\n\t\t\t\t) : (\n\t\t\t\t\tlabel\n\t\t\t\t))}\n\t\t\t{/* aria-describedby must be set manually by the consumer since children is ReactNode, not a render function. */}\n\t\t\t{children}\n\t\t\t{helperText &&\n\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t) : (\n\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t))}\n\t\t\t{errorMessage && (\n\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</Field.ErrorText>\n\t\t\t)}\n\t\t</Field.Root>\n\t);\n};\nControlledFormField.displayName = \"ControlledFormField\";\n","import { Input } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface DatePickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Minimum date in YYYY-MM-DD format */\n\tmin?: string;\n\t/** Maximum date in YYYY-MM-DD format */\n\tmax?: string;\n\t/** Input type: \"date\", \"datetime-local\", or \"time\" */\n\ttype?: \"date\" | \"datetime-local\" | \"time\";\n}\n\nexport function DatePickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: DatePickerFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\ttype = \"date\",\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Input\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tid={name}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(DatePickerField as { displayName?: string }).displayName = \"DatePickerField\";\n","import { useFormContext } from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface DirtyCounterProps {\n\t/**\n\t * Label template. The literal `{count}` is replaced with the dirty\n\t * field count. @default \"{count} ungespeicherte Änderungen\"\n\t */\n\tlabel?: string;\n\t/** Render nothing when no fields are dirty. @default true */\n\thideWhenClean?: boolean;\n}\n\nexport function DirtyCounter({\n\tlabel = \"{count} ungespeicherte Änderungen\",\n\thideWhenClean = true,\n}: DirtyCounterProps) {\n\tconst ctx = useFormContext();\n\tconst dirty = ctx\n\t\t? (ctx.formState.dirtyFields as Record<string, unknown>)\n\t\t: {};\n\tconst count = Object.keys(dirty).length;\n\tif (count === 0 && hideWhenClean) return null;\n\treturn (\n\t\t<HStack gap=\"2\" fontSize=\"sm\" color=\"yellow.700\">\n\t\t\t<Box\n\t\t\t\twidth=\"6px\"\n\t\t\t\theight=\"6px\"\n\t\t\t\tborderRadius=\"full\"\n\t\t\t\tbg=\"yellow.500\"\n\t\t\t\taria-hidden\n\t\t\t/>\n\t\t\t<Text>{label.replace(\"{count}\", String(count))}</Text>\n\t\t</HStack>\n\t);\n}\nDirtyCounter.displayName = \"DirtyCounter\";\n","import type React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport {\n\tUnsavedChangesGuard,\n\ttype UnsavedChangesGuardProps,\n} from \"../navigation/unsaved-changes-guard\";\n\nexport interface DirtyFormGuardProps\n\textends Omit<UnsavedChangesGuardProps, \"isDirty\"> {\n\t// Inherits title/message/confirmLabel/cancelLabel/safePathPrefix/shouldBlock\n\t// from UnsavedChangesGuardProps; `isDirty` is resolved from\n\t// `useFormContext().formState.isDirty`.\n}\n\n/**\n * Form-aware shortcut for `<UnsavedChangesGuard/>`: sources `isDirty` from\n * the surrounding `useFormContext()`. Must be mounted inside a\n * `<FormProvider/>`. For non-form dirty sources (Monaco buffer, custom\n * hook) use `<UnsavedChangesGuard isDirty={…}/>` directly.\n *\n * Pass `safePathPrefix` to exempt sibling tabs of the same detail page\n * from the leave-confirmation modal.\n */\nexport const DirtyFormGuard: React.FC<DirtyFormGuardProps> = (props) => {\n\tconst { formState } = useFormContext();\n\treturn <UnsavedChangesGuard isDirty={formState.isDirty} {...props} />;\n};\nDirtyFormGuard.displayName = \"DirtyFormGuard\";\n","import { Button } from \"@chakra-ui/react\";\nimport { Upload } from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Box, Flex } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-dropzone is an optional peer dependency\ntype DropzoneOptions = {\n\tnoClick?: boolean;\n\tmultiple?: boolean;\n\tdisabled?: boolean;\n\taccept?: Record<string, string[]>;\n\tonDrop?: (files: File[]) => void;\n};\n\ntype UseDropzoneReturn = {\n\tgetRootProps: () => Record<string, any>;\n\tgetInputProps: () => Record<string, any>;\n\tisDragActive: boolean;\n\topen: () => void;\n};\n\nexport interface FileFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Accept configuration for file types, e.g. { \"image/*\": [\".png\", \".jpg\"] } */\n\taccept?: Record<string, string[]>;\n\t/** Allow multiple file selection. @default false */\n\tmultiple?: boolean;\n\t/** Text shown when dragging files over. @default \"Release to upload\" */\n\tdragActiveText?: string;\n\t/** Text shown below the file preview. @default \"Drag & drop a file to upload\" */\n\tdropHintText?: string;\n\t/** Label for the upload button. @default \"Choose File\" */\n\tbuttonLabel?: string;\n\t/** The useDropzone hook from react-dropzone. Pass it to avoid hard dependency. */\n\tuseDropzone?: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nexport function FileField<T extends FieldValues>(props: FileFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\taccept,\n\t\tmultiple = false,\n\t\tdisabled,\n\t\tdragActiveText = \"Release to upload\",\n\t\tdropHintText = \"Drag & drop a file to upload\",\n\t\tbuttonLabel = \"Choose File\",\n\t\tuseDropzone,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} disabled={disabled} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (useDropzone) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<DropzoneContent\n\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\taccept={accept}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdragActiveText={dragActiveText}\n\t\t\t\t\t\t\tdropHintText={dropHintText}\n\t\t\t\t\t\t\tbuttonLabel={buttonLabel}\n\t\t\t\t\t\t\tuseDropzone={useDropzone}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: native file input\n\t\t\t\treturn (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept={\n\t\t\t\t\t\t\t\taccept ? Object.values(accept).flat().join(\",\") : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst files = e.target.files;\n\t\t\t\t\t\t\t\tif (!files) return;\n\t\t\t\t\t\t\t\tif (multiple) {\n\t\t\t\t\t\t\t\t\tfield.onChange(Array.from(files));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield.onChange(files[0] || null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t<Text mt={2} fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t\t\t{(field.value as File)?.name ?? \"File selected\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n\nFileField.displayName = \"FileField\";\n\ninterface DropzoneContentProps {\n\tfield: {\n\t\tvalue: any;\n\t\tonChange: (...event: any[]) => void;\n\t\tonBlur: () => void;\n\t\tref: React.Ref<any>;\n\t\tname: string;\n\t};\n\taccept?: Record<string, string[]>;\n\tmultiple: boolean;\n\tdisabled?: boolean;\n\tdragActiveText: string;\n\tdropHintText: string;\n\tbuttonLabel: string;\n\tuseDropzone: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nconst DropzoneContent: React.FC<DropzoneContentProps> = ({\n\tfield,\n\taccept,\n\tmultiple,\n\tdisabled,\n\tdragActiveText,\n\tdropHintText,\n\tbuttonLabel,\n\tuseDropzone,\n}) => {\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (multiple) {\n\t\t\t\tfield.onChange(files);\n\t\t\t} else {\n\t\t\t\tconst file = files[0];\n\t\t\t\tif (file) {\n\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\tObject.assign(file, {\n\t\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[field, multiple],\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (field.value?.preview) {\n\t\t\t\tURL.revokeObjectURL(field.value.preview);\n\t\t\t}\n\t\t};\n\t}, [field.value]);\n\n\tconst { getRootProps, getInputProps, isDragActive, open } = useDropzone({\n\t\tnoClick: true,\n\t\tmultiple,\n\t\tdisabled,\n\t\taccept,\n\t\tonDrop: handleDrop,\n\t});\n\n\treturn (\n\t\t<Box {...getRootProps()}>\n\t\t\t<Box display=\"none\" {...getInputProps()} asChild>\n\t\t\t\t<input />\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tbgColor=\"bg.muted\"\n\t\t\t\tp={4}\n\t\t\t\trounded=\"md\"\n\t\t\t\toverflow=\"hidden\"\n\t\t\t\tposition=\"relative\"\n\t\t\t\ttextAlign=\"center\"\n\t\t\t>\n\t\t\t\t{isDragActive && (\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t\ttop=\"0\"\n\t\t\t\t\t\tinsetInlineStart=\"0\"\n\t\t\t\t\t\tposition=\"absolute\"\n\t\t\t\t\t\tbackgroundColor=\"blackAlpha.400\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\tgap=\"3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Upload size={48} />\n\t\t\t\t\t\t<Text fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t{dragActiveText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Flex>\n\t\t\t\t)}\n\t\t\t\t{field.value?.name && (\n\t\t\t\t\t<Text fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t{field.value.name}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text color=\"fg.muted\" fontSize=\"xs\" mt={2}>\n\t\t\t\t\t{dropHintText}\n\t\t\t\t</Text>\n\t\t\t\t<Button mt={2} size=\"sm\" variant=\"outline\" onClick={open}>\n\t\t\t\t\t<Upload size={14} />\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n};\n","import {\n\tButtonGroup,\n\tEditable,\n\tIconButton,\n\tuseEditableContext,\n} from \"@chakra-ui/react\";\nimport { Pencil } from \"lucide-react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface InlineEditProps {\n\tvalue?: string;\n\tonSubmit?: (nextValue: string) => void;\n\tonChange?: (nextValue: string) => void;\n\tonCancel?: (previousValue: string) => void;\n\t/** @default \"input\" */\n\tvariant?: \"input\" | \"textarea\";\n\tplaceholder?: string;\n\t/** @default \"md\" */\n\tfontSize?: string;\n\tfontWeight?: string;\n\tmaxW?: string;\n\tdisabled?: boolean;\n\t/** When false, submitting an empty value reverts to the previous value. @default false */\n\tallowEmpty?: boolean;\n\t/** Number of rows used to calculate minH for textarea variant. @default 3 */\n\trows?: number;\n\t/** Aria label for the edit button. @default \"Edit\" */\n\teditLabel?: string;\n}\n\ninterface CancelRefCaptureProps {\n\tcancelRef: React.MutableRefObject<(() => void) | null>;\n}\n\nconst CancelRefCapture: React.FC<CancelRefCaptureProps> = ({ cancelRef }) => {\n\tconst { cancel } = useEditableContext();\n\tcancelRef.current = cancel;\n\treturn null;\n};\n\nconst EditControls: React.FC<{ editLabel: string }> = ({ editLabel }) => {\n\tconst { editing } = useEditableContext();\n\n\tif (editing) return null;\n\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t<Editable.EditTrigger asChild>\n\t\t\t\t<IconButton\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tmarginInlineStart={2}\n\t\t\t\t\taria-label={editLabel}\n\t\t\t\t>\n\t\t\t\t\t<Pencil size={16} />\n\t\t\t\t</IconButton>\n\t\t\t</Editable.EditTrigger>\n\t\t</ButtonGroup>\n\t);\n};\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n\tvalue,\n\tonSubmit,\n\tonChange,\n\tonCancel,\n\tvariant = \"input\",\n\tplaceholder,\n\tfontSize = \"md\",\n\tfontWeight,\n\tmaxW,\n\tdisabled,\n\tallowEmpty = false,\n\trows = 3,\n\teditLabel = \"Edit\",\n}) => {\n\tconst cancelRef = useRef<(() => void) | null>(null);\n\n\tconst handleSubmit = (details: { value: string }) => {\n\t\tconst trimmed = details.value.trim();\n\t\tif (!allowEmpty && trimmed === \"\") {\n\t\t\tcancelRef.current?.();\n\t\t\treturn;\n\t\t}\n\t\tonSubmit?.(trimmed);\n\t};\n\n\treturn (\n\t\t<Editable.Root\n\t\t\tfontSize={fontSize}\n\t\t\tfontWeight={fontWeight}\n\t\t\tmaxW={maxW}\n\t\t\tvalue={String(value ?? \"\")}\n\t\t\tonValueChange={(d) => onChange?.(d.value)}\n\t\t\tonValueRevert={(d) => onCancel?.(d.value)}\n\t\t\tonValueCommit={handleSubmit}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t>\n\t\t\t<CancelRefCapture cancelRef={cancelRef} />\n\t\t\t<Editable.Preview />\n\t\t\t{variant === \"textarea\" ? (\n\t\t\t\t<Editable.Textarea minH={`${rows * 1.5}em`} />\n\t\t\t) : (\n\t\t\t\t<Editable.Input />\n\t\t\t)}\n\t\t\t<EditControls editLabel={editLabel} />\n\t\t</Editable.Root>\n\t);\n};\nInlineEdit.displayName = \"InlineEdit\";\n","import type { InputProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport TextInput from \"../atoms/text-input/text-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface InputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttype?: InputProps[\"type\"];\n\tappend?: string | React.ReactElement;\n\tprepend?: string | React.ReactElement;\n\tinputProps?: InputProps;\n}\n\nexport function InputField<T extends FieldValues>({\n\tref,\n\t...props\n}: InputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttype,\n\t\tappend,\n\t\tprepend,\n\t\tinputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<TextInput\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tappend={append}\n\t\t\t\t\tprepend={prepend}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(InputField as { displayName?: string }).displayName = \"InputField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @uiw/react-md-editor is an optional peer dependency\ntype MDEditorProps = {\n\tvalue?: string;\n\tonChange?: (value?: string) => void;\n\tminHeight?: number;\n\tmaxHeight?: number;\n\tvisibleDragbar?: boolean;\n};\n\ntype MDEditorComponent = React.ComponentType<MDEditorProps> & {\n\tMarkdown?: React.ComponentType<{ source?: string }>;\n};\n\nexport interface MarkdownFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** The MDEditor component from @uiw/react-md-editor. Pass it to avoid hard dependency. */\n\tMDEditor?: MDEditorComponent;\n\tminHeight?: number;\n\tmaxHeight?: number;\n}\n\nexport function MarkdownField<T extends FieldValues>(\n\tprops: MarkdownFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tMDEditor,\n\t\tminHeight = 200,\n\t\tmaxHeight = 600,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (MDEditor) {\n\t\t\t\t\tif (readOnly && MDEditor.Markdown) {\n\t\t\t\t\t\treturn <MDEditor.Markdown source={field.value} />;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MDEditor\n\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\t\tminHeight={minHeight}\n\t\t\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\t\t\tvisibleDragbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: plain textarea\n\t\t\t\treturn (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: `${minHeight}px`,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(MarkdownField as { displayName?: string }).displayName = \"MarkdownField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tNumberInputField as NumberInputInput,\n\ttype NumberInputProps,\n\tNumberInputRoot,\n} from \"../primitives/number-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface NumberInputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tmin?: number;\n\tmax?: number;\n\tstep?: number;\n\tshowStepper?: boolean;\n\tnumberInputProps?: NumberInputProps;\n}\n\nexport function NumberInputField<T extends FieldValues>({\n\tref,\n\t...props\n}: NumberInputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\tstep,\n\t\tshowStepper = true,\n\t\tnumberInputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NumberInputRoot\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={String(field.value ?? 0)}\n\t\t\t\t\tonValueChange={(details) => {\n\t\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\t\tdetails.value === \"\" ? 0 : Number.parseFloat(details.value),\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tid={name}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tshowStepper={showStepper && !readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\t{...numberInputProps}\n\t\t\t\t>\n\t\t\t\t\t<NumberInputInput\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t/>\n\t\t\t\t</NumberInputRoot>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(NumberInputField as { displayName?: string }).displayName = \"NumberInputField\";\n","import type { RadioGroupRootProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Stack, type StackProps } from \"../primitives/layout\";\nimport { Radio, RadioGroup } from \"../primitives/radio\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface RadioOption {\n\tlabel: React.ReactNode;\n\tvalue: string;\n}\n\nexport interface RadioGroupFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\toptions: RadioOption[];\n\tradioGroupProps?: RadioGroupRootProps;\n\tstackProps?: StackProps;\n}\n\nexport function RadioGroupField<T extends FieldValues>(\n\tprops: RadioGroupFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\toptions,\n\t\tshowDirtyState,\n\t\tradioGroupProps,\n\t\tstackProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<RadioGroup\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tonValueChange={(e) => field.onChange(e.value)}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t{...radioGroupProps}\n\t\t\t\t>\n\t\t\t\t\t<Stack direction=\"row\" {...stackProps}>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<Radio key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Radio>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</RadioGroup>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(RadioGroupField as { displayName?: string }).displayName = \"RadioGroupField\";\n","import type { NativeSelectFieldProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { NativeSelect } from \"../primitives/native-select\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SelectFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\tselectProps?: NativeSelectFieldProps;\n\tchildren: React.ReactNode;\n}\n\nexport function SelectField<T extends FieldValues>({\n\tref,\n\t...props\n}: SelectFieldProps<T> & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\tselectProps,\n\t\tchildren,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<NativeSelect\n\t\t\t\t\tdisabled={readOnly || disabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\t{...selectProps}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</NativeSelect>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SelectField as { displayName?: string }).displayName = \"SelectField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Switch, type SwitchProps } from \"../primitives/switch\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SwitchFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tswitchProps?: SwitchProps;\n}\n\nexport function SwitchField<T extends FieldValues>({\n\tref,\n\t...props\n}: SwitchFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\tswitchProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Switch\n\t\t\t\t\tid={name}\n\t\t\t\t\tname={field.name}\n\t\t\t\t\tchecked={field.value || false}\n\t\t\t\t\tonCheckedChange={(details) => field.onChange(!!details.checked)}\n\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...switchProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SwitchField as { displayName?: string }).displayName = \"SwitchField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Textarea, type TextareaProps } from \"../primitives/textarea\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface TextareaFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttextareaProps?: TextareaProps;\n}\n\nexport function TextareaField<T extends FieldValues>({\n\tref,\n\t...props\n}: TextareaFieldProps<T> & { ref?: React.Ref<HTMLTextAreaElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttextareaProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<Textarea\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...textareaProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(TextareaField as { displayName?: string }).displayName = \"TextareaField\";\n","import { useFormContext } from \"react-hook-form\";\n\nexport interface UseFieldDirtyOptions {\n\t/** Set to false to never report dirty (opt-out per field). */\n\tshowDirtyState?: boolean;\n}\n\n/**\n * useFieldDirty returns true when the field at `name` is dirty (changed\n * from its react-hook-form default) AND visual marking isn't suppressed.\n * Safe to call outside a FormProvider — returns false in that case.\n */\nexport function useFieldDirty(\n\tname: string,\n\topts: UseFieldDirtyOptions = {},\n): boolean {\n\t// useFormContext must be called unconditionally before any branch\n\t// (rules of hooks). Apply showDirtyState gate after.\n\tconst ctx = useFormContext();\n\tconst { showDirtyState = true } = opts;\n\tif (!showDirtyState || !ctx) return false;\n\tconst dirty = ctx.formState.dirtyFields as Record<string, unknown>;\n\treturn Boolean(dirty[name]);\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export { a as UnsavedChangesBlockerOptions, b as UnsavedChangesGuard, U as UnsavedChangesGuardProps, u as useUnsavedChangesBlocker } from '../unsaved-changes-guard-kwzxMb6r.js';
|
|
4
|
+
import 'react-router-dom';
|
|
5
|
+
|
|
6
|
+
interface TabDirtyState {
|
|
7
|
+
/** Returns true if a tab key has been marked dirty. */
|
|
8
|
+
isTabDirty: (key: string) => boolean;
|
|
9
|
+
/** Mark a tab key as dirty (true) or clean (false). */
|
|
10
|
+
setTabDirty: (key: string, dirty: boolean) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Multi-key registry for per-tab dirty state. Mount at the layout level
|
|
14
|
+
* of a tabbed detail page; have each tab's content publish its dirty
|
|
15
|
+
* state via `setTabDirty(tabKey, isDirty)` and render `<DirtyDot
|
|
16
|
+
* active={isTabDirty(tab.value)}/>` inside each `Tabs.Trigger`.
|
|
17
|
+
*
|
|
18
|
+
* The no-provider fallback returns clean state and a no-op setter so
|
|
19
|
+
* consumers don't have to defensively check.
|
|
20
|
+
*/
|
|
21
|
+
declare function TabDirtyProvider({ children }: {
|
|
22
|
+
children: ReactNode;
|
|
23
|
+
}): react_jsx_runtime.JSX.Element;
|
|
24
|
+
declare function useTabDirty(): TabDirtyState;
|
|
25
|
+
|
|
26
|
+
export { TabDirtyProvider, type TabDirtyState, useTabDirty };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { UnsavedChangesGuard, useUnsavedChangesBlocker } from '../chunk-77EOXDGW.js';
|
|
2
|
+
import '../chunk-7KPPPE4U.js';
|
|
3
|
+
import { createContext, useState, useCallback, useMemo, useContext } from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var Ctx = createContext({
|
|
7
|
+
isTabDirty: () => false,
|
|
8
|
+
setTabDirty: () => void 0
|
|
9
|
+
});
|
|
10
|
+
function TabDirtyProvider({ children }) {
|
|
11
|
+
const [dirty, setDirty] = useState({});
|
|
12
|
+
const setTabDirty = useCallback((key, v) => {
|
|
13
|
+
setDirty((prev) => prev[key] === v ? prev : { ...prev, [key]: v });
|
|
14
|
+
}, []);
|
|
15
|
+
const isTabDirty = useCallback((key) => Boolean(dirty[key]), [dirty]);
|
|
16
|
+
const value = useMemo(
|
|
17
|
+
() => ({ isTabDirty, setTabDirty }),
|
|
18
|
+
[isTabDirty, setTabDirty]
|
|
19
|
+
);
|
|
20
|
+
return /* @__PURE__ */ jsx(Ctx.Provider, { value, children });
|
|
21
|
+
}
|
|
22
|
+
function useTabDirty() {
|
|
23
|
+
return useContext(Ctx);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { TabDirtyProvider, useTabDirty };
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/navigation/tab-dirty-context.tsx"],"names":[],"mappings":";;;;;AAgBA,IAAM,MAAM,aAAA,CAA6B;AAAA,EACxC,YAAY,MAAM,KAAA;AAAA,EAClB,aAAa,MAAM;AACpB,CAAC,CAAA;AAWM,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAS,EAA4B;AACvE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAkC,EAAE,CAAA;AAE9D,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,GAAA,EAAa,CAAA,KAAe;AAC5D,IAAA,QAAA,CAAS,CAAC,IAAA,KAAU,IAAA,CAAK,GAAG,MAAM,CAAA,GAAI,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,CAAC,GAAG,GAAG,GAAI,CAAA;AAAA,EACpE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,CAAC,GAAA,KAAgB,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAE5E,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACb,OAAO,EAAE,UAAA,EAAY,WAAA,EAAY,CAAA;AAAA,IACjC,CAAC,YAAY,WAAW;AAAA,GACzB;AAEA,EAAA,uBAAO,GAAA,CAAC,GAAA,CAAI,QAAA,EAAJ,EAAa,OAAe,QAAA,EAAS,CAAA;AAC9C;AAEO,SAAS,WAAA,GAA6B;AAC5C,EAAA,OAAO,WAAW,GAAG,CAAA;AACtB","file":"index.js","sourcesContent":["import type { ReactNode } from \"react\";\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n\tuseState,\n} from \"react\";\n\nexport interface TabDirtyState {\n\t/** Returns true if a tab key has been marked dirty. */\n\tisTabDirty: (key: string) => boolean;\n\t/** Mark a tab key as dirty (true) or clean (false). */\n\tsetTabDirty: (key: string, dirty: boolean) => void;\n}\n\nconst Ctx = createContext<TabDirtyState>({\n\tisTabDirty: () => false,\n\tsetTabDirty: () => undefined,\n});\n\n/**\n * Multi-key registry for per-tab dirty state. Mount at the layout level\n * of a tabbed detail page; have each tab's content publish its dirty\n * state via `setTabDirty(tabKey, isDirty)` and render `<DirtyDot\n * active={isTabDirty(tab.value)}/>` inside each `Tabs.Trigger`.\n *\n * The no-provider fallback returns clean state and a no-op setter so\n * consumers don't have to defensively check.\n */\nexport function TabDirtyProvider({ children }: { children: ReactNode }) {\n\tconst [dirty, setDirty] = useState<Record<string, boolean>>({});\n\n\tconst setTabDirty = useCallback((key: string, v: boolean) => {\n\t\tsetDirty((prev) => (prev[key] === v ? prev : { ...prev, [key]: v }));\n\t}, []);\n\n\tconst isTabDirty = useCallback((key: string) => Boolean(dirty[key]), [dirty]);\n\n\tconst value = useMemo<TabDirtyState>(\n\t\t() => ({ isTabDirty, setTabDirty }),\n\t\t[isTabDirty, setTabDirty],\n\t);\n\n\treturn <Ctx.Provider value={value}>{children}</Ctx.Provider>;\n}\n\nexport function useTabDirty(): TabDirtyState {\n\treturn useContext(Ctx);\n}\n"]}
|
package/dist/primitives/index.js
CHANGED
|
@@ -2,12 +2,13 @@ import { theme_default } from '../chunk-UOXSDSBY.js';
|
|
|
2
2
|
export { Checkbox, CheckboxGroup, Collapsible, Separator, Skeleton, SkeletonCircle, SkeletonText } from '../chunk-TXGJ7BNX.js';
|
|
3
3
|
export { Prose } from '../chunk-VOGT33LU.js';
|
|
4
4
|
export { Avatar, AvatarGroup, Badge, MenuArrow, MenuCheckboxItem, MenuContent, MenuContextTrigger, MenuItem, MenuItemCommand, MenuItemGroup, MenuItemText, MenuRadioItem, MenuRadioItemGroup, MenuRoot, MenuSeparator, MenuTrigger, MenuTriggerItem, Table, Tooltip } from '../chunk-I7Z6NCRB.js';
|
|
5
|
-
export {
|
|
5
|
+
export { NativeSelect, NumberInputField, NumberInputLabel, NumberInputRoot, NumberInputScrubber, Radio, RadioGroup } from '../chunk-CWBQKGL4.js';
|
|
6
6
|
export { Popover, PopoverBody, PopoverCloseTrigger, PopoverContent, PopoverDescription, PopoverFooter, PopoverHeader, PopoverTitle, PopoverTrigger, Switch } from '../chunk-MIEUXFSK.js';
|
|
7
7
|
export { Textarea } from '../chunk-NFZMG6ZL.js';
|
|
8
8
|
export { Progress, ProgressCircle } from '../chunk-WEP2AIQ5.js';
|
|
9
9
|
export { Spinner } from '../chunk-5YDCDC4B.js';
|
|
10
10
|
export { Box, Center, Code, Container, Flex, Grid, GridItem, HStack, Heading, Link, Spacer, Stack, Text, VStack } from '../chunk-G4QMIXLC.js';
|
|
11
|
+
export { LeavePageConfirmation } from '../chunk-7KPPPE4U.js';
|
|
11
12
|
import { Accordion, Breadcrumb, Stat, createToaster, Portal, Toaster as Toaster$1, Toast, Spinner, Stack, Alert as Alert$1, ClientOnly, IconButton, Skeleton, Span, HoverCard as HoverCard$1, PinInput as PinInput$1, ChakraProvider, SegmentGroup, Slider as Slider$1, Popover, FormatNumber, Badge } from '@chakra-ui/react';
|
|
12
13
|
export { List, Tabs } from '@chakra-ui/react';
|
|
13
14
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/primitives/accordion.tsx","../../src/primitives/alert.tsx","../../src/primitives/breadcrumb.tsx","../../src/primitives/color-mode.tsx","../../src/primitives/hover-card.tsx","../../src/primitives/pin-input.tsx","../../src/primitives/provider.tsx","../../src/primitives/segmented-control.tsx","../../src/primitives/slider.tsx","../../src/primitives/toggle-tip.tsx","../../src/primitives/stat.tsx","../../src/primitives/toaster.tsx"],"names":["AccordionItem","ChakraAccordion","Alert","jsxs","ChakraAlert","jsx","ChakraBreadcrumb","ColorModeButton","Skeleton","LightMode","DarkMode","HoverCard","ChakraHoverCard","PinInput","ChakraPinInput","SegmentedControl","ChakraSegmentGroup","Slider","ChakraSlider","ToggleTip","ChakraPopover","Portal","InfoTip","IconButton","StatLabel","ChakraStat","StatValueText","StatUpTrend","Badge","StatDownTrend","toaster","ChakraToaster","Spinner","Stack"],"mappings":"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","file":"index.js","sourcesContent":["import { Accordion as ChakraAccordion } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface AccordionItemProps extends ChakraAccordion.ItemProps {\n\t/** The trigger label shown in the accordion header. */\n\tlabel: React.ReactNode;\n\t/** Content revealed when the item is expanded. */\n\tchildren: React.ReactNode;\n}\n\nexport const AccordionItem = function AccordionItem({\n\tref,\n\t...props\n}: AccordionItemProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { label, children, ...rest } = props;\n\treturn (\n\t\t<ChakraAccordion.Item ref={ref} {...rest}>\n\t\t\t<ChakraAccordion.ItemTrigger>\n\t\t\t\t{label}\n\t\t\t\t<ChakraAccordion.ItemIndicator />\n\t\t\t</ChakraAccordion.ItemTrigger>\n\t\t\t<ChakraAccordion.ItemContent>\n\t\t\t\t<ChakraAccordion.ItemBody>{children}</ChakraAccordion.ItemBody>\n\t\t\t</ChakraAccordion.ItemContent>\n\t\t</ChakraAccordion.Item>\n\t);\n};\nAccordionItem.displayName = \"AccordionItem\";\n\n// Pass-through exports for composition\nexport const AccordionRoot = ChakraAccordion.Root;\nAccordionRoot.displayName = \"AccordionRoot\";\n\nexport type AccordionRootProps = ChakraAccordion.RootProps;\n","import { Alert as ChakraAlert } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface AlertProps extends Omit<ChakraAlert.RootProps, \"title\"> {\n\tstartElement?: React.ReactNode;\n\tendElement?: React.ReactNode;\n\ttitle?: React.ReactNode;\n\ticon?: React.ReactElement;\n}\n\nexport const Alert = function Alert({\n\tref,\n\t...props\n}: AlertProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { title, children, icon, startElement, endElement, ...rest } = props;\n\treturn (\n\t\t<ChakraAlert.Root ref={ref} {...rest}>\n\t\t\t{startElement || <ChakraAlert.Indicator>{icon}</ChakraAlert.Indicator>}\n\t\t\t{children ? (\n\t\t\t\t<ChakraAlert.Content>\n\t\t\t\t\t<ChakraAlert.Title>{title}</ChakraAlert.Title>\n\t\t\t\t\t<ChakraAlert.Description>{children}</ChakraAlert.Description>\n\t\t\t\t</ChakraAlert.Content>\n\t\t\t) : (\n\t\t\t\t<ChakraAlert.Title flex=\"1\">{title}</ChakraAlert.Title>\n\t\t\t)}\n\t\t\t{endElement}\n\t\t</ChakraAlert.Root>\n\t);\n};\nAlert.displayName = \"Alert\";\n","import { Breadcrumb as ChakraBreadcrumb } from \"@chakra-ui/react\";\n\n// Pass-through exports with stable API\nexport const BreadcrumbRoot = ChakraBreadcrumb.Root;\nBreadcrumbRoot.displayName = \"BreadcrumbRoot\";\n\nexport const BreadcrumbList = ChakraBreadcrumb.List;\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport const BreadcrumbItem = ChakraBreadcrumb.Item;\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport const BreadcrumbLink = ChakraBreadcrumb.Link;\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nexport const BreadcrumbCurrentLink = ChakraBreadcrumb.CurrentLink;\nBreadcrumbCurrentLink.displayName = \"BreadcrumbCurrentLink\";\n\nexport const BreadcrumbSeparator = ChakraBreadcrumb.Separator;\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nexport const BreadcrumbEllipsis = ChakraBreadcrumb.Ellipsis;\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport type BreadcrumbRootProps = ChakraBreadcrumb.RootProps;\nexport type BreadcrumbLinkProps = ChakraBreadcrumb.LinkProps;\n","import type { IconButtonProps, SpanProps } from \"@chakra-ui/react\";\nimport { ClientOnly, IconButton, Skeleton, Span } from \"@chakra-ui/react\";\nimport { Moon, Sun } from \"lucide-react\";\nimport type { ThemeProviderProps } from \"next-themes\";\nimport { ThemeProvider, useTheme } from \"next-themes\";\nimport type * as React from \"react\";\n\nexport interface ColorModeProviderProps extends ThemeProviderProps {}\n\nexport function ColorModeProvider(props: ColorModeProviderProps) {\n\treturn (\n\t\t<ThemeProvider attribute=\"class\" disableTransitionOnChange {...props} />\n\t);\n}\nColorModeProvider.displayName = \"ColorModeProvider\";\n\nexport type ColorMode = \"light\" | \"dark\";\n\nexport interface UseColorModeReturn {\n\tcolorMode: ColorMode;\n\tsetColorMode: (colorMode: ColorMode) => void;\n\ttoggleColorMode: () => void;\n}\n\nexport function useColorMode(): UseColorModeReturn {\n\tconst { resolvedTheme, setTheme, forcedTheme } = useTheme();\n\tconst colorMode = forcedTheme || resolvedTheme;\n\tconst toggleColorMode = () => {\n\t\tsetTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\");\n\t};\n\treturn {\n\t\tcolorMode: colorMode as ColorMode,\n\t\tsetColorMode: setTheme,\n\t\ttoggleColorMode,\n\t};\n}\n\nexport function useColorModeValue<T>(light: T, dark: T) {\n\tconst { colorMode } = useColorMode();\n\treturn colorMode === \"dark\" ? dark : light;\n}\n\nexport function ColorModeIcon() {\n\tconst { colorMode } = useColorMode();\n\treturn colorMode === \"dark\" ? <Moon /> : <Sun />;\n}\nColorModeIcon.displayName = \"ColorModeIcon\";\n\ninterface ColorModeButtonProps extends Omit<IconButtonProps, \"aria-label\"> {\n\t/** Accessible label for the color mode toggle button. @default \"Toggle color mode\" */\n\tlabel?: string;\n}\n\nexport const ColorModeButton = function ColorModeButton({\n\tref,\n\tlabel = \"Toggle color mode\",\n\t...props\n}: ColorModeButtonProps & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { toggleColorMode } = useColorMode();\n\treturn (\n\t\t<ClientOnly fallback={<Skeleton boxSize=\"9\" />}>\n\t\t\t<IconButton\n\t\t\t\tonClick={toggleColorMode}\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label={label}\n\t\t\t\tsize=\"sm\"\n\t\t\t\tref={ref}\n\t\t\t\t{...props}\n\t\t\t\tcss={{\n\t\t\t\t\t_icon: {\n\t\t\t\t\t\twidth: \"5\",\n\t\t\t\t\t\theight: \"5\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ColorModeIcon />\n\t\t\t</IconButton>\n\t\t</ClientOnly>\n\t);\n};\nColorModeButton.displayName = \"ColorModeButton\";\n\nexport const LightMode = function LightMode({\n\tref,\n\t...props\n}: SpanProps & { ref?: React.Ref<HTMLSpanElement> }) {\n\treturn (\n\t\t<Span\n\t\t\tcolor=\"fg\"\n\t\t\tdisplay=\"contents\"\n\t\t\tclassName=\"chakra-theme light\"\n\t\t\tcolorPalette=\"gray\"\n\t\t\tdata-theme=\"light\"\n\t\t\tref={ref}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\nLightMode.displayName = \"LightMode\";\n\nexport const DarkMode = function DarkMode({\n\tref,\n\t...props\n}: SpanProps & { ref?: React.Ref<HTMLSpanElement> }) {\n\treturn (\n\t\t<Span\n\t\t\tcolor=\"fg\"\n\t\t\tdisplay=\"contents\"\n\t\t\tclassName=\"chakra-theme dark\"\n\t\t\tcolorPalette=\"gray\"\n\t\t\tdata-theme=\"dark\"\n\t\t\tref={ref}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\nDarkMode.displayName = \"DarkMode\";\n","import { HoverCard as ChakraHoverCard, Portal } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface HoverCardProps extends ChakraHoverCard.RootProps {\n\t/** Content displayed in the hover card. */\n\tcontent: React.ReactNode;\n\t/** Whether to show an arrow. @default false */\n\tshowArrow?: boolean;\n\t/** Whether to render in a portal. @default true */\n\tportalled?: boolean;\n\t/** Container ref for portal. */\n\tportalRef?: React.RefObject<HTMLElement | null>;\n\t/** Props passed to the content element. */\n\tcontentProps?: ChakraHoverCard.ContentProps;\n}\n\nexport const HoverCard = function HoverCard(props: HoverCardProps) {\n\tconst {\n\t\tcontent,\n\t\tshowArrow,\n\t\tchildren,\n\t\tportalled = true,\n\t\tportalRef,\n\t\tcontentProps,\n\t\t...rest\n\t} = props;\n\treturn (\n\t\t<ChakraHoverCard.Root {...rest}>\n\t\t\t<ChakraHoverCard.Trigger asChild>{children}</ChakraHoverCard.Trigger>\n\t\t\t<Portal disabled={!portalled} container={portalRef}>\n\t\t\t\t{/* Explicit zIndex so hover cards render above sticky layout\n\t\t\t\t chrome (sidebar / page header) at `docked` (10). See the\n\t\t\t\t matching note in primitives/menu.tsx. */}\n\t\t\t\t<ChakraHoverCard.Positioner style={{ zIndex: 1500 }}>\n\t\t\t\t\t<ChakraHoverCard.Content {...contentProps}>\n\t\t\t\t\t\t{showArrow && (\n\t\t\t\t\t\t\t<ChakraHoverCard.Arrow>\n\t\t\t\t\t\t\t\t<ChakraHoverCard.ArrowTip />\n\t\t\t\t\t\t\t</ChakraHoverCard.Arrow>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</ChakraHoverCard.Content>\n\t\t\t\t</ChakraHoverCard.Positioner>\n\t\t\t</Portal>\n\t\t</ChakraHoverCard.Root>\n\t);\n};\nHoverCard.displayName = \"HoverCard\";\n","import { PinInput as ChakraPinInput } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface PinInputProps\n\textends Omit<ChakraPinInput.RootProps, \"children\"> {\n\t/** Number of input fields. @default 4 */\n\tlength?: number;\n}\n\nexport const PinInput = function PinInput({\n\tref,\n\t...props\n}: PinInputProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { length = 4, ...rest } = props;\n\treturn (\n\t\t<ChakraPinInput.Root ref={ref} {...rest}>\n\t\t\t<ChakraPinInput.HiddenInput />\n\t\t\t<ChakraPinInput.Control>\n\t\t\t\t{Array.from({ length }).map((_, i) => (\n\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: index is the stable identity for pin input fields\n\t\t\t\t\t<ChakraPinInput.Input key={i} index={i} />\n\t\t\t\t))}\n\t\t\t</ChakraPinInput.Control>\n\t\t</ChakraPinInput.Root>\n\t);\n};\nPinInput.displayName = \"PinInput\";\n","import type { SystemContext } from \"@chakra-ui/react\";\nimport { ChakraProvider } from \"@chakra-ui/react\";\nimport defaultSystem from \"../theme\";\nimport { ColorModeProvider, type ColorModeProviderProps } from \"./color-mode\";\n\nexport interface ProviderProps extends ColorModeProviderProps {\n\t/** Override the default anker theme system. */\n\tsystem?: SystemContext;\n}\n\nexport function Provider({ system, ...props }: ProviderProps) {\n\treturn (\n\t\t<ChakraProvider value={system ?? defaultSystem}>\n\t\t\t<ColorModeProvider {...props} />\n\t\t</ChakraProvider>\n\t);\n}\nProvider.displayName = \"Provider\";\n","import { SegmentGroup as ChakraSegmentGroup } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface SegmentedControlItem {\n\tvalue: string;\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n\textends Omit<ChakraSegmentGroup.RootProps, \"children\"> {\n\t/** Items to render as segments. */\n\titems: Array<string | SegmentedControlItem>;\n}\n\nexport const SegmentedControl = function SegmentedControl({\n\tref,\n\t...props\n}: SegmentedControlProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { items, ...rest } = props;\n\treturn (\n\t\t<ChakraSegmentGroup.Root ref={ref} {...rest}>\n\t\t\t<ChakraSegmentGroup.Indicator />\n\t\t\t{items.map((item) => {\n\t\t\t\tconst value = typeof item === \"string\" ? item : item.value;\n\t\t\t\tconst label = typeof item === \"string\" ? item : item.label;\n\t\t\t\tconst disabled = typeof item === \"string\" ? false : item.disabled;\n\t\t\t\treturn (\n\t\t\t\t\t<ChakraSegmentGroup.Item\n\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChakraSegmentGroup.ItemText>{label}</ChakraSegmentGroup.ItemText>\n\t\t\t\t\t\t<ChakraSegmentGroup.ItemHiddenInput />\n\t\t\t\t\t</ChakraSegmentGroup.Item>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ChakraSegmentGroup.Root>\n\t);\n};\nSegmentedControl.displayName = \"SegmentedControl\";\n","import { Slider as ChakraSlider } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface SliderProps extends ChakraSlider.RootProps {\n\t/** Whether to show the current value label. @default false */\n\tshowValue?: boolean;\n\t/** Label text displayed alongside the slider. */\n\tlabel?: React.ReactNode;\n\t/** Marks to display on the track. */\n\tmarks?: Array<number | { value: number; label: React.ReactNode }>;\n}\n\nexport const Slider = function Slider({\n\tref,\n\t...props\n}: SliderProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { showValue, label, marks, ...rest } = props;\n\treturn (\n\t\t<ChakraSlider.Root ref={ref} {...rest}>\n\t\t\t{(label || showValue) && (\n\t\t\t\t<ChakraSlider.Label>\n\t\t\t\t\t{label}\n\t\t\t\t\t{showValue && <ChakraSlider.ValueText />}\n\t\t\t\t</ChakraSlider.Label>\n\t\t\t)}\n\t\t\t<ChakraSlider.Control>\n\t\t\t\t<ChakraSlider.Track>\n\t\t\t\t\t<ChakraSlider.Range />\n\t\t\t\t</ChakraSlider.Track>\n\t\t\t\t<ChakraSlider.Thumbs />\n\t\t\t</ChakraSlider.Control>\n\t\t\t{marks && <ChakraSlider.Marks marks={marks} />}\n\t\t</ChakraSlider.Root>\n\t);\n};\nSlider.displayName = \"Slider\";\n","import {\n\tPopover as ChakraPopover,\n\tIconButton,\n\ttype IconButtonProps,\n\tPortal,\n} from \"@chakra-ui/react\";\nimport { Info } from \"lucide-react\";\nimport type * as React from \"react\";\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n\tshowArrow?: boolean;\n\tportalled?: boolean;\n\tportalRef?: React.RefObject<HTMLElement | null>;\n\tcontent?: React.ReactNode;\n\tcontentProps?: ChakraPopover.ContentProps;\n}\n\nexport const ToggleTip = function ToggleTip({\n\tref,\n\t...props\n}: ToggleTipProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst {\n\t\tshowArrow,\n\t\tchildren,\n\t\tportalled = true,\n\t\tcontent,\n\t\tcontentProps,\n\t\tportalRef,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<ChakraPopover.Root\n\t\t\t{...rest}\n\t\t\tpositioning={{ ...rest.positioning, gutter: 4 }}\n\t\t>\n\t\t\t<ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n\t\t\t<Portal disabled={!portalled} container={portalRef}>\n\t\t\t\t<ChakraPopover.Positioner>\n\t\t\t\t\t<ChakraPopover.Content\n\t\t\t\t\t\twidth=\"auto\"\n\t\t\t\t\t\tpx=\"2\"\n\t\t\t\t\t\tpy=\"1\"\n\t\t\t\t\t\ttextStyle=\"xs\"\n\t\t\t\t\t\trounded=\"sm\"\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t{...contentProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showArrow && (\n\t\t\t\t\t\t\t<ChakraPopover.Arrow>\n\t\t\t\t\t\t\t\t<ChakraPopover.ArrowTip />\n\t\t\t\t\t\t\t</ChakraPopover.Arrow>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</ChakraPopover.Content>\n\t\t\t\t</ChakraPopover.Positioner>\n\t\t\t</Portal>\n\t\t</ChakraPopover.Root>\n\t);\n};\nToggleTip.displayName = \"ToggleTip\";\n\nexport interface InfoTipProps extends Partial<ToggleTipProps> {\n\tbuttonProps?: IconButtonProps | undefined;\n\t/** Accessible label for the info tip button. @default \"info\" */\n\tlabel?: string;\n}\n\nexport const InfoTip = function InfoTip({\n\tref,\n\t...props\n}: InfoTipProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { children, buttonProps, label = \"info\", ...rest } = props;\n\treturn (\n\t\t<ToggleTip content={children} {...rest} ref={ref}>\n\t\t\t<IconButton\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label={label}\n\t\t\t\tsize=\"2xs\"\n\t\t\t\tcolorPalette=\"gray\"\n\t\t\t\tminWidth=\"44px\"\n\t\t\t\tminHeight=\"44px\"\n\t\t\t\t{...buttonProps}\n\t\t\t>\n\t\t\t\t<Info />\n\t\t\t</IconButton>\n\t\t</ToggleTip>\n\t);\n};\nInfoTip.displayName = \"InfoTip\";\n","import {\n\tBadge,\n\ttype BadgeProps,\n\tStat as ChakraStat,\n\tFormatNumber,\n} from \"@chakra-ui/react\";\nimport type * as React from \"react\";\nimport { InfoTip } from \"./toggle-tip\";\n\nexport interface StatLabelProps extends ChakraStat.LabelProps {\n\tinfo?: React.ReactNode;\n}\n\nexport const StatLabel = function StatLabel({\n\tref,\n\t...props\n}: StatLabelProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { info, children, ...rest } = props;\n\treturn (\n\t\t<ChakraStat.Label {...rest} ref={ref}>\n\t\t\t{children}\n\t\t\t{info && <InfoTip>{info}</InfoTip>}\n\t\t</ChakraStat.Label>\n\t);\n};\nStatLabel.displayName = \"StatLabel\";\n\nexport interface StatValueTextProps extends ChakraStat.ValueTextProps {\n\tvalue?: number;\n\tformatOptions?: Intl.NumberFormatOptions;\n}\n\nexport const StatValueText = function StatValueText({\n\tref,\n\t...props\n}: StatValueTextProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { value, formatOptions, children, ...rest } = props;\n\treturn (\n\t\t<ChakraStat.ValueText {...rest} ref={ref}>\n\t\t\t{children ||\n\t\t\t\t(value != null && <FormatNumber value={value} {...formatOptions} />)}\n\t\t</ChakraStat.ValueText>\n\t);\n};\nStatValueText.displayName = \"StatValueText\";\n\nexport const StatUpTrend = function StatUpTrend({\n\tref,\n\t...props\n}: BadgeProps & { ref?: React.Ref<HTMLDivElement> }) {\n\treturn (\n\t\t<Badge colorPalette=\"green\" gap=\"0\" {...props} ref={ref}>\n\t\t\t<ChakraStat.UpIndicator />\n\t\t\t{props.children}\n\t\t</Badge>\n\t);\n};\nStatUpTrend.displayName = \"StatUpTrend\";\n\nexport const StatDownTrend = function StatDownTrend({\n\tref,\n\t...props\n}: BadgeProps & { ref?: React.Ref<HTMLDivElement> }) {\n\treturn (\n\t\t<Badge colorPalette=\"red\" gap=\"0\" {...props} ref={ref}>\n\t\t\t<ChakraStat.DownIndicator />\n\t\t\t{props.children}\n\t\t</Badge>\n\t);\n};\nStatDownTrend.displayName = \"StatDownTrend\";\n\nexport const StatRoot = ChakraStat.Root;\nStatRoot.displayName = \"StatRoot\";\nexport const StatHelpText = ChakraStat.HelpText;\nStatHelpText.displayName = \"StatHelpText\";\nexport const StatValueUnit = ChakraStat.ValueUnit;\nStatValueUnit.displayName = \"StatValueUnit\";\n","import {\n\tToaster as ChakraToaster,\n\tcreateToaster,\n\tPortal,\n\tSpinner,\n\tStack,\n\tToast,\n} from \"@chakra-ui/react\";\n\nexport interface CreateToasterOptions {\n\tplacement?:\n\t\t| \"top\"\n\t\t| \"top-start\"\n\t\t| \"top-end\"\n\t\t| \"bottom\"\n\t\t| \"bottom-start\"\n\t\t| \"bottom-end\";\n\tpauseOnPageIdle?: boolean;\n}\n\nexport function createAnkerToaster(options: CreateToasterOptions = {}) {\n\tconst { placement = \"bottom-end\", pauseOnPageIdle = true } = options;\n\n\tconst toaster = createToaster({\n\t\tplacement,\n\t\tpauseOnPageIdle,\n\t});\n\n\tconst ToasterComponent = () => {\n\t\treturn (\n\t\t\t<Portal>\n\t\t\t\t<ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n\t\t\t\t\t{(toast) => (\n\t\t\t\t\t\t<Toast.Root width={{ md: \"sm\" }}>\n\t\t\t\t\t\t\t{toast.type === \"loading\" ? (\n\t\t\t\t\t\t\t\t<Spinner size=\"sm\" color=\"accent\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Toast.Indicator />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Stack gap=\"1\" flex=\"1\" maxWidth=\"100%\">\n\t\t\t\t\t\t\t\t{toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n\t\t\t\t\t\t\t\t{toast.description && (\n\t\t\t\t\t\t\t\t\t<Toast.Description>{toast.description}</Toast.Description>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t{toast.action && (\n\t\t\t\t\t\t\t\t<Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{toast.closable && <Toast.CloseTrigger />}\n\t\t\t\t\t\t</Toast.Root>\n\t\t\t\t\t)}\n\t\t\t\t</ChakraToaster>\n\t\t\t</Portal>\n\t\t);\n\t};\n\n\treturn { toaster, Toaster: ToasterComponent };\n}\n\n// Default instance for convenience\nconst { toaster, Toaster } = createAnkerToaster();\n\n(Toaster as { displayName?: string }).displayName = \"Toaster\";\n\nexport { toaster, Toaster };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/primitives/accordion.tsx","../../src/primitives/alert.tsx","../../src/primitives/breadcrumb.tsx","../../src/primitives/color-mode.tsx","../../src/primitives/hover-card.tsx","../../src/primitives/pin-input.tsx","../../src/primitives/provider.tsx","../../src/primitives/segmented-control.tsx","../../src/primitives/slider.tsx","../../src/primitives/toggle-tip.tsx","../../src/primitives/stat.tsx","../../src/primitives/toaster.tsx"],"names":["AccordionItem","ChakraAccordion","Alert","jsxs","ChakraAlert","jsx","ChakraBreadcrumb","ColorModeButton","Skeleton","LightMode","DarkMode","HoverCard","ChakraHoverCard","PinInput","ChakraPinInput","SegmentedControl","ChakraSegmentGroup","Slider","ChakraSlider","ToggleTip","ChakraPopover","Portal","InfoTip","IconButton","StatLabel","ChakraStat","StatValueText","StatUpTrend","Badge","StatDownTrend","toaster","ChakraToaster","Spinner","Stack"],"mappings":"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","file":"index.js","sourcesContent":["import { Accordion as ChakraAccordion } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface AccordionItemProps extends ChakraAccordion.ItemProps {\n\t/** The trigger label shown in the accordion header. */\n\tlabel: React.ReactNode;\n\t/** Content revealed when the item is expanded. */\n\tchildren: React.ReactNode;\n}\n\nexport const AccordionItem = function AccordionItem({\n\tref,\n\t...props\n}: AccordionItemProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { label, children, ...rest } = props;\n\treturn (\n\t\t<ChakraAccordion.Item ref={ref} {...rest}>\n\t\t\t<ChakraAccordion.ItemTrigger>\n\t\t\t\t{label}\n\t\t\t\t<ChakraAccordion.ItemIndicator />\n\t\t\t</ChakraAccordion.ItemTrigger>\n\t\t\t<ChakraAccordion.ItemContent>\n\t\t\t\t<ChakraAccordion.ItemBody>{children}</ChakraAccordion.ItemBody>\n\t\t\t</ChakraAccordion.ItemContent>\n\t\t</ChakraAccordion.Item>\n\t);\n};\nAccordionItem.displayName = \"AccordionItem\";\n\n// Pass-through exports for composition\nexport const AccordionRoot = ChakraAccordion.Root;\nAccordionRoot.displayName = \"AccordionRoot\";\n\nexport type AccordionRootProps = ChakraAccordion.RootProps;\n","import { Alert as ChakraAlert } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface AlertProps extends Omit<ChakraAlert.RootProps, \"title\"> {\n\tstartElement?: React.ReactNode;\n\tendElement?: React.ReactNode;\n\ttitle?: React.ReactNode;\n\ticon?: React.ReactElement;\n}\n\nexport const Alert = function Alert({\n\tref,\n\t...props\n}: AlertProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { title, children, icon, startElement, endElement, ...rest } = props;\n\treturn (\n\t\t<ChakraAlert.Root ref={ref} {...rest}>\n\t\t\t{startElement || <ChakraAlert.Indicator>{icon}</ChakraAlert.Indicator>}\n\t\t\t{children ? (\n\t\t\t\t<ChakraAlert.Content>\n\t\t\t\t\t<ChakraAlert.Title>{title}</ChakraAlert.Title>\n\t\t\t\t\t<ChakraAlert.Description>{children}</ChakraAlert.Description>\n\t\t\t\t</ChakraAlert.Content>\n\t\t\t) : (\n\t\t\t\t<ChakraAlert.Title flex=\"1\">{title}</ChakraAlert.Title>\n\t\t\t)}\n\t\t\t{endElement}\n\t\t</ChakraAlert.Root>\n\t);\n};\nAlert.displayName = \"Alert\";\n","import { Breadcrumb as ChakraBreadcrumb } from \"@chakra-ui/react\";\n\n// Pass-through exports with stable API\nexport const BreadcrumbRoot = ChakraBreadcrumb.Root;\nBreadcrumbRoot.displayName = \"BreadcrumbRoot\";\n\nexport const BreadcrumbList = ChakraBreadcrumb.List;\nBreadcrumbList.displayName = \"BreadcrumbList\";\n\nexport const BreadcrumbItem = ChakraBreadcrumb.Item;\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\n\nexport const BreadcrumbLink = ChakraBreadcrumb.Link;\nBreadcrumbLink.displayName = \"BreadcrumbLink\";\n\nexport const BreadcrumbCurrentLink = ChakraBreadcrumb.CurrentLink;\nBreadcrumbCurrentLink.displayName = \"BreadcrumbCurrentLink\";\n\nexport const BreadcrumbSeparator = ChakraBreadcrumb.Separator;\nBreadcrumbSeparator.displayName = \"BreadcrumbSeparator\";\n\nexport const BreadcrumbEllipsis = ChakraBreadcrumb.Ellipsis;\nBreadcrumbEllipsis.displayName = \"BreadcrumbEllipsis\";\n\nexport type BreadcrumbRootProps = ChakraBreadcrumb.RootProps;\nexport type BreadcrumbLinkProps = ChakraBreadcrumb.LinkProps;\n","import type { IconButtonProps, SpanProps } from \"@chakra-ui/react\";\nimport { ClientOnly, IconButton, Skeleton, Span } from \"@chakra-ui/react\";\nimport { Moon, Sun } from \"lucide-react\";\nimport type { ThemeProviderProps } from \"next-themes\";\nimport { ThemeProvider, useTheme } from \"next-themes\";\nimport type * as React from \"react\";\n\nexport interface ColorModeProviderProps extends ThemeProviderProps {}\n\nexport function ColorModeProvider(props: ColorModeProviderProps) {\n\treturn (\n\t\t<ThemeProvider attribute=\"class\" disableTransitionOnChange {...props} />\n\t);\n}\nColorModeProvider.displayName = \"ColorModeProvider\";\n\nexport type ColorMode = \"light\" | \"dark\";\n\nexport interface UseColorModeReturn {\n\tcolorMode: ColorMode;\n\tsetColorMode: (colorMode: ColorMode) => void;\n\ttoggleColorMode: () => void;\n}\n\nexport function useColorMode(): UseColorModeReturn {\n\tconst { resolvedTheme, setTheme, forcedTheme } = useTheme();\n\tconst colorMode = forcedTheme || resolvedTheme;\n\tconst toggleColorMode = () => {\n\t\tsetTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\");\n\t};\n\treturn {\n\t\tcolorMode: colorMode as ColorMode,\n\t\tsetColorMode: setTheme,\n\t\ttoggleColorMode,\n\t};\n}\n\nexport function useColorModeValue<T>(light: T, dark: T) {\n\tconst { colorMode } = useColorMode();\n\treturn colorMode === \"dark\" ? dark : light;\n}\n\nexport function ColorModeIcon() {\n\tconst { colorMode } = useColorMode();\n\treturn colorMode === \"dark\" ? <Moon /> : <Sun />;\n}\nColorModeIcon.displayName = \"ColorModeIcon\";\n\ninterface ColorModeButtonProps extends Omit<IconButtonProps, \"aria-label\"> {\n\t/** Accessible label for the color mode toggle button. @default \"Toggle color mode\" */\n\tlabel?: string;\n}\n\nexport const ColorModeButton = function ColorModeButton({\n\tref,\n\tlabel = \"Toggle color mode\",\n\t...props\n}: ColorModeButtonProps & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { toggleColorMode } = useColorMode();\n\treturn (\n\t\t<ClientOnly fallback={<Skeleton boxSize=\"9\" />}>\n\t\t\t<IconButton\n\t\t\t\tonClick={toggleColorMode}\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label={label}\n\t\t\t\tsize=\"sm\"\n\t\t\t\tref={ref}\n\t\t\t\t{...props}\n\t\t\t\tcss={{\n\t\t\t\t\t_icon: {\n\t\t\t\t\t\twidth: \"5\",\n\t\t\t\t\t\theight: \"5\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ColorModeIcon />\n\t\t\t</IconButton>\n\t\t</ClientOnly>\n\t);\n};\nColorModeButton.displayName = \"ColorModeButton\";\n\nexport const LightMode = function LightMode({\n\tref,\n\t...props\n}: SpanProps & { ref?: React.Ref<HTMLSpanElement> }) {\n\treturn (\n\t\t<Span\n\t\t\tcolor=\"fg\"\n\t\t\tdisplay=\"contents\"\n\t\t\tclassName=\"chakra-theme light\"\n\t\t\tcolorPalette=\"gray\"\n\t\t\tdata-theme=\"light\"\n\t\t\tref={ref}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\nLightMode.displayName = \"LightMode\";\n\nexport const DarkMode = function DarkMode({\n\tref,\n\t...props\n}: SpanProps & { ref?: React.Ref<HTMLSpanElement> }) {\n\treturn (\n\t\t<Span\n\t\t\tcolor=\"fg\"\n\t\t\tdisplay=\"contents\"\n\t\t\tclassName=\"chakra-theme dark\"\n\t\t\tcolorPalette=\"gray\"\n\t\t\tdata-theme=\"dark\"\n\t\t\tref={ref}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\nDarkMode.displayName = \"DarkMode\";\n","import { HoverCard as ChakraHoverCard, Portal } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface HoverCardProps extends ChakraHoverCard.RootProps {\n\t/** Content displayed in the hover card. */\n\tcontent: React.ReactNode;\n\t/** Whether to show an arrow. @default false */\n\tshowArrow?: boolean;\n\t/** Whether to render in a portal. @default true */\n\tportalled?: boolean;\n\t/** Container ref for portal. */\n\tportalRef?: React.RefObject<HTMLElement | null>;\n\t/** Props passed to the content element. */\n\tcontentProps?: ChakraHoverCard.ContentProps;\n}\n\nexport const HoverCard = function HoverCard(props: HoverCardProps) {\n\tconst {\n\t\tcontent,\n\t\tshowArrow,\n\t\tchildren,\n\t\tportalled = true,\n\t\tportalRef,\n\t\tcontentProps,\n\t\t...rest\n\t} = props;\n\treturn (\n\t\t<ChakraHoverCard.Root {...rest}>\n\t\t\t<ChakraHoverCard.Trigger asChild>{children}</ChakraHoverCard.Trigger>\n\t\t\t<Portal disabled={!portalled} container={portalRef}>\n\t\t\t\t{/* Explicit zIndex so hover cards render above sticky layout\n\t\t\t\t chrome (sidebar / page header) at `docked` (10). See the\n\t\t\t\t matching note in primitives/menu.tsx. */}\n\t\t\t\t<ChakraHoverCard.Positioner style={{ zIndex: 1500 }}>\n\t\t\t\t\t<ChakraHoverCard.Content {...contentProps}>\n\t\t\t\t\t\t{showArrow && (\n\t\t\t\t\t\t\t<ChakraHoverCard.Arrow>\n\t\t\t\t\t\t\t\t<ChakraHoverCard.ArrowTip />\n\t\t\t\t\t\t\t</ChakraHoverCard.Arrow>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</ChakraHoverCard.Content>\n\t\t\t\t</ChakraHoverCard.Positioner>\n\t\t\t</Portal>\n\t\t</ChakraHoverCard.Root>\n\t);\n};\nHoverCard.displayName = \"HoverCard\";\n","import { PinInput as ChakraPinInput } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface PinInputProps\n\textends Omit<ChakraPinInput.RootProps, \"children\"> {\n\t/** Number of input fields. @default 4 */\n\tlength?: number;\n}\n\nexport const PinInput = function PinInput({\n\tref,\n\t...props\n}: PinInputProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { length = 4, ...rest } = props;\n\treturn (\n\t\t<ChakraPinInput.Root ref={ref} {...rest}>\n\t\t\t<ChakraPinInput.HiddenInput />\n\t\t\t<ChakraPinInput.Control>\n\t\t\t\t{Array.from({ length }).map((_, i) => (\n\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: index is the stable identity for pin input fields\n\t\t\t\t\t<ChakraPinInput.Input key={i} index={i} />\n\t\t\t\t))}\n\t\t\t</ChakraPinInput.Control>\n\t\t</ChakraPinInput.Root>\n\t);\n};\nPinInput.displayName = \"PinInput\";\n","import type { SystemContext } from \"@chakra-ui/react\";\nimport { ChakraProvider } from \"@chakra-ui/react\";\nimport defaultSystem from \"../theme\";\nimport { ColorModeProvider, type ColorModeProviderProps } from \"./color-mode\";\n\nexport interface ProviderProps extends ColorModeProviderProps {\n\t/** Override the default anker theme system. */\n\tsystem?: SystemContext;\n}\n\nexport function Provider({ system, ...props }: ProviderProps) {\n\treturn (\n\t\t<ChakraProvider value={system ?? defaultSystem}>\n\t\t\t<ColorModeProvider {...props} />\n\t\t</ChakraProvider>\n\t);\n}\nProvider.displayName = \"Provider\";\n","import { SegmentGroup as ChakraSegmentGroup } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface SegmentedControlItem {\n\tvalue: string;\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n}\n\nexport interface SegmentedControlProps\n\textends Omit<ChakraSegmentGroup.RootProps, \"children\"> {\n\t/** Items to render as segments. */\n\titems: Array<string | SegmentedControlItem>;\n}\n\nexport const SegmentedControl = function SegmentedControl({\n\tref,\n\t...props\n}: SegmentedControlProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { items, ...rest } = props;\n\treturn (\n\t\t<ChakraSegmentGroup.Root ref={ref} {...rest}>\n\t\t\t<ChakraSegmentGroup.Indicator />\n\t\t\t{items.map((item) => {\n\t\t\t\tconst value = typeof item === \"string\" ? item : item.value;\n\t\t\t\tconst label = typeof item === \"string\" ? item : item.label;\n\t\t\t\tconst disabled = typeof item === \"string\" ? false : item.disabled;\n\t\t\t\treturn (\n\t\t\t\t\t<ChakraSegmentGroup.Item\n\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChakraSegmentGroup.ItemText>{label}</ChakraSegmentGroup.ItemText>\n\t\t\t\t\t\t<ChakraSegmentGroup.ItemHiddenInput />\n\t\t\t\t\t</ChakraSegmentGroup.Item>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ChakraSegmentGroup.Root>\n\t);\n};\nSegmentedControl.displayName = \"SegmentedControl\";\n","import { Slider as ChakraSlider } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface SliderProps extends ChakraSlider.RootProps {\n\t/** Whether to show the current value label. @default false */\n\tshowValue?: boolean;\n\t/** Label text displayed alongside the slider. */\n\tlabel?: React.ReactNode;\n\t/** Marks to display on the track. */\n\tmarks?: Array<number | { value: number; label: React.ReactNode }>;\n}\n\nexport const Slider = function Slider({\n\tref,\n\t...props\n}: SliderProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { showValue, label, marks, ...rest } = props;\n\treturn (\n\t\t<ChakraSlider.Root ref={ref} {...rest}>\n\t\t\t{(label || showValue) && (\n\t\t\t\t<ChakraSlider.Label>\n\t\t\t\t\t{label}\n\t\t\t\t\t{showValue && <ChakraSlider.ValueText />}\n\t\t\t\t</ChakraSlider.Label>\n\t\t\t)}\n\t\t\t<ChakraSlider.Control>\n\t\t\t\t<ChakraSlider.Track>\n\t\t\t\t\t<ChakraSlider.Range />\n\t\t\t\t</ChakraSlider.Track>\n\t\t\t\t<ChakraSlider.Thumbs />\n\t\t\t</ChakraSlider.Control>\n\t\t\t{marks && <ChakraSlider.Marks marks={marks} />}\n\t\t</ChakraSlider.Root>\n\t);\n};\nSlider.displayName = \"Slider\";\n","import {\n\tPopover as ChakraPopover,\n\tIconButton,\n\ttype IconButtonProps,\n\tPortal,\n} from \"@chakra-ui/react\";\nimport { Info } from \"lucide-react\";\nimport type * as React from \"react\";\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n\tshowArrow?: boolean;\n\tportalled?: boolean;\n\tportalRef?: React.RefObject<HTMLElement | null>;\n\tcontent?: React.ReactNode;\n\tcontentProps?: ChakraPopover.ContentProps;\n}\n\nexport const ToggleTip = function ToggleTip({\n\tref,\n\t...props\n}: ToggleTipProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst {\n\t\tshowArrow,\n\t\tchildren,\n\t\tportalled = true,\n\t\tcontent,\n\t\tcontentProps,\n\t\tportalRef,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<ChakraPopover.Root\n\t\t\t{...rest}\n\t\t\tpositioning={{ ...rest.positioning, gutter: 4 }}\n\t\t>\n\t\t\t<ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n\t\t\t<Portal disabled={!portalled} container={portalRef}>\n\t\t\t\t<ChakraPopover.Positioner>\n\t\t\t\t\t<ChakraPopover.Content\n\t\t\t\t\t\twidth=\"auto\"\n\t\t\t\t\t\tpx=\"2\"\n\t\t\t\t\t\tpy=\"1\"\n\t\t\t\t\t\ttextStyle=\"xs\"\n\t\t\t\t\t\trounded=\"sm\"\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t{...contentProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showArrow && (\n\t\t\t\t\t\t\t<ChakraPopover.Arrow>\n\t\t\t\t\t\t\t\t<ChakraPopover.ArrowTip />\n\t\t\t\t\t\t\t</ChakraPopover.Arrow>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</ChakraPopover.Content>\n\t\t\t\t</ChakraPopover.Positioner>\n\t\t\t</Portal>\n\t\t</ChakraPopover.Root>\n\t);\n};\nToggleTip.displayName = \"ToggleTip\";\n\nexport interface InfoTipProps extends Partial<ToggleTipProps> {\n\tbuttonProps?: IconButtonProps | undefined;\n\t/** Accessible label for the info tip button. @default \"info\" */\n\tlabel?: string;\n}\n\nexport const InfoTip = function InfoTip({\n\tref,\n\t...props\n}: InfoTipProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { children, buttonProps, label = \"info\", ...rest } = props;\n\treturn (\n\t\t<ToggleTip content={children} {...rest} ref={ref}>\n\t\t\t<IconButton\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label={label}\n\t\t\t\tsize=\"2xs\"\n\t\t\t\tcolorPalette=\"gray\"\n\t\t\t\tminWidth=\"44px\"\n\t\t\t\tminHeight=\"44px\"\n\t\t\t\t{...buttonProps}\n\t\t\t>\n\t\t\t\t<Info />\n\t\t\t</IconButton>\n\t\t</ToggleTip>\n\t);\n};\nInfoTip.displayName = \"InfoTip\";\n","import {\n\tBadge,\n\ttype BadgeProps,\n\tStat as ChakraStat,\n\tFormatNumber,\n} from \"@chakra-ui/react\";\nimport type * as React from \"react\";\nimport { InfoTip } from \"./toggle-tip\";\n\nexport interface StatLabelProps extends ChakraStat.LabelProps {\n\tinfo?: React.ReactNode;\n}\n\nexport const StatLabel = function StatLabel({\n\tref,\n\t...props\n}: StatLabelProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { info, children, ...rest } = props;\n\treturn (\n\t\t<ChakraStat.Label {...rest} ref={ref}>\n\t\t\t{children}\n\t\t\t{info && <InfoTip>{info}</InfoTip>}\n\t\t</ChakraStat.Label>\n\t);\n};\nStatLabel.displayName = \"StatLabel\";\n\nexport interface StatValueTextProps extends ChakraStat.ValueTextProps {\n\tvalue?: number;\n\tformatOptions?: Intl.NumberFormatOptions;\n}\n\nexport const StatValueText = function StatValueText({\n\tref,\n\t...props\n}: StatValueTextProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { value, formatOptions, children, ...rest } = props;\n\treturn (\n\t\t<ChakraStat.ValueText {...rest} ref={ref}>\n\t\t\t{children ||\n\t\t\t\t(value != null && <FormatNumber value={value} {...formatOptions} />)}\n\t\t</ChakraStat.ValueText>\n\t);\n};\nStatValueText.displayName = \"StatValueText\";\n\nexport const StatUpTrend = function StatUpTrend({\n\tref,\n\t...props\n}: BadgeProps & { ref?: React.Ref<HTMLDivElement> }) {\n\treturn (\n\t\t<Badge colorPalette=\"green\" gap=\"0\" {...props} ref={ref}>\n\t\t\t<ChakraStat.UpIndicator />\n\t\t\t{props.children}\n\t\t</Badge>\n\t);\n};\nStatUpTrend.displayName = \"StatUpTrend\";\n\nexport const StatDownTrend = function StatDownTrend({\n\tref,\n\t...props\n}: BadgeProps & { ref?: React.Ref<HTMLDivElement> }) {\n\treturn (\n\t\t<Badge colorPalette=\"red\" gap=\"0\" {...props} ref={ref}>\n\t\t\t<ChakraStat.DownIndicator />\n\t\t\t{props.children}\n\t\t</Badge>\n\t);\n};\nStatDownTrend.displayName = \"StatDownTrend\";\n\nexport const StatRoot = ChakraStat.Root;\nStatRoot.displayName = \"StatRoot\";\nexport const StatHelpText = ChakraStat.HelpText;\nStatHelpText.displayName = \"StatHelpText\";\nexport const StatValueUnit = ChakraStat.ValueUnit;\nStatValueUnit.displayName = \"StatValueUnit\";\n","import {\n\tToaster as ChakraToaster,\n\tcreateToaster,\n\tPortal,\n\tSpinner,\n\tStack,\n\tToast,\n} from \"@chakra-ui/react\";\n\nexport interface CreateToasterOptions {\n\tplacement?:\n\t\t| \"top\"\n\t\t| \"top-start\"\n\t\t| \"top-end\"\n\t\t| \"bottom\"\n\t\t| \"bottom-start\"\n\t\t| \"bottom-end\";\n\tpauseOnPageIdle?: boolean;\n}\n\nexport function createAnkerToaster(options: CreateToasterOptions = {}) {\n\tconst { placement = \"bottom-end\", pauseOnPageIdle = true } = options;\n\n\tconst toaster = createToaster({\n\t\tplacement,\n\t\tpauseOnPageIdle,\n\t});\n\n\tconst ToasterComponent = () => {\n\t\treturn (\n\t\t\t<Portal>\n\t\t\t\t<ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n\t\t\t\t\t{(toast) => (\n\t\t\t\t\t\t<Toast.Root width={{ md: \"sm\" }}>\n\t\t\t\t\t\t\t{toast.type === \"loading\" ? (\n\t\t\t\t\t\t\t\t<Spinner size=\"sm\" color=\"accent\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Toast.Indicator />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Stack gap=\"1\" flex=\"1\" maxWidth=\"100%\">\n\t\t\t\t\t\t\t\t{toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n\t\t\t\t\t\t\t\t{toast.description && (\n\t\t\t\t\t\t\t\t\t<Toast.Description>{toast.description}</Toast.Description>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t{toast.action && (\n\t\t\t\t\t\t\t\t<Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{toast.closable && <Toast.CloseTrigger />}\n\t\t\t\t\t\t</Toast.Root>\n\t\t\t\t\t)}\n\t\t\t\t</ChakraToaster>\n\t\t\t</Portal>\n\t\t);\n\t};\n\n\treturn { toaster, Toaster: ToasterComponent };\n}\n\n// Default instance for convenience\nconst { toaster, Toaster } = createAnkerToaster();\n\n(Toaster as { displayName?: string }).displayName = \"Toaster\";\n\nexport { toaster, Toaster };\n"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Location, Blocker } from 'react-router-dom';
|
|
3
|
+
|
|
4
|
+
interface UnsavedChangesBlockerOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Pathname prefix considered "safe" — navigation to a path starting with
|
|
7
|
+
* this prefix does NOT trigger the block. Use for sibling tabs of the
|
|
8
|
+
* same detail page (e.g. `/foo/bar/${id}/`). Trailing slash matters.
|
|
9
|
+
*/
|
|
10
|
+
safePathPrefix?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Custom predicate. Receives react-router's blocker args. Takes
|
|
13
|
+
* precedence over `safePathPrefix`. Default: block iff
|
|
14
|
+
* `isDirty && nextLocation.pathname !== currentLocation.pathname`.
|
|
15
|
+
*/
|
|
16
|
+
shouldBlock?: (args: {
|
|
17
|
+
currentLocation: Location;
|
|
18
|
+
nextLocation: Location;
|
|
19
|
+
}) => boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Block in-app navigation while there are unsaved changes.
|
|
23
|
+
*
|
|
24
|
+
* Returns the raw react-router `Blocker` so the caller can render their own
|
|
25
|
+
* dialog. For the conventional dialog UX use `<UnsavedChangesGuard/>` (which
|
|
26
|
+
* composes this hook with `<LeavePageConfirmation/>`).
|
|
27
|
+
*
|
|
28
|
+
* Requires a react-router-dom **data router** (`createBrowserRouter` /
|
|
29
|
+
* `createMemoryRouter` + `<RouterProvider/>`). The legacy `<BrowserRouter>` /
|
|
30
|
+
* `<MemoryRouter>` JSX routers do not implement `useBlocker`.
|
|
31
|
+
*/
|
|
32
|
+
declare function useUnsavedChangesBlocker(isDirty: boolean, opts?: UnsavedChangesBlockerOptions): Blocker;
|
|
33
|
+
|
|
34
|
+
interface UnsavedChangesGuardProps extends UnsavedChangesBlockerOptions {
|
|
35
|
+
/** Source of truth for whether there's unsaved work. */
|
|
36
|
+
isDirty: boolean;
|
|
37
|
+
/** Dialog title. @default "You have unsaved changes" */
|
|
38
|
+
title?: string;
|
|
39
|
+
/** Dialog message body. @default "Are you sure you want to leave this page? You have unsaved changes." */
|
|
40
|
+
message?: string;
|
|
41
|
+
/** Confirm/leave label. @default "Leave" */
|
|
42
|
+
confirmLabel?: string;
|
|
43
|
+
/** Cancel/stay label. @default "Stay" */
|
|
44
|
+
cancelLabel?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Blocks in-app navigation while `isDirty` is true and renders
|
|
48
|
+
* `LeavePageConfirmation` to ask the user to confirm. Non-form-aware —
|
|
49
|
+
* pass any boolean (form `formState.isDirty`, Monaco buffer state, etc.).
|
|
50
|
+
* For react-hook-form pages use `<DirtyFormGuard/>` which sources `isDirty`
|
|
51
|
+
* from `useFormContext()` automatically.
|
|
52
|
+
*
|
|
53
|
+
* Use `safePathPrefix` to exempt sibling tabs of the same detail page:
|
|
54
|
+
*
|
|
55
|
+
* ```tsx
|
|
56
|
+
* <UnsavedChangesGuard
|
|
57
|
+
* isDirty={editor.hasAnyDirty}
|
|
58
|
+
* safePathPrefix={`/template/templates/${templateId}/`}
|
|
59
|
+
* />
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
declare function UnsavedChangesGuard({ isDirty, safePathPrefix, shouldBlock, title, message, confirmLabel, cancelLabel, }: UnsavedChangesGuardProps): react_jsx_runtime.JSX.Element;
|
|
63
|
+
declare namespace UnsavedChangesGuard {
|
|
64
|
+
var displayName: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { type UnsavedChangesGuardProps as U, type UnsavedChangesBlockerOptions as a, UnsavedChangesGuard as b, useUnsavedChangesBlocker as u };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knkcs/anker",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"description": "UI component library for the knk software group",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -38,6 +38,10 @@
|
|
|
38
38
|
"./templates": {
|
|
39
39
|
"import": "./dist/templates/index.js",
|
|
40
40
|
"types": "./dist/templates/index.d.ts"
|
|
41
|
+
},
|
|
42
|
+
"./navigation": {
|
|
43
|
+
"import": "./dist/navigation/index.js",
|
|
44
|
+
"types": "./dist/navigation/index.d.ts"
|
|
41
45
|
}
|
|
42
46
|
},
|
|
43
47
|
"files": [
|
|
@@ -90,6 +94,7 @@
|
|
|
90
94
|
"@testing-library/jest-dom": "^6.0.0",
|
|
91
95
|
"@testing-library/react": "^16.0.0",
|
|
92
96
|
"@types/lodash.debounce": "^4.0.9",
|
|
97
|
+
"happy-dom": "^20.9.0",
|
|
93
98
|
"i18next": "^23.0.0",
|
|
94
99
|
"jsdom": "^25.0.0",
|
|
95
100
|
"react": "^19.0.0",
|
package/dist/chunk-M5WNB4K6.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { NumberInput, RadioGroup as RadioGroup$1, Dialog, Portal, ButtonGroup, Button, NativeSelect as NativeSelect$1 } from '@chakra-ui/react';
|
|
2
|
-
import { useRef } from 'react';
|
|
3
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
// src/primitives/leave-page-confirmation.tsx
|
|
6
|
-
var LeavePageConfirmation = (props) => {
|
|
7
|
-
const {
|
|
8
|
-
blocked,
|
|
9
|
-
onConfirmLeave,
|
|
10
|
-
onCancelLeave,
|
|
11
|
-
title = "You have unsaved changes",
|
|
12
|
-
message = "Are you sure you want to leave this page? You have unsaved changes.",
|
|
13
|
-
confirmLabel = "Leave",
|
|
14
|
-
cancelLabel = "Stay"
|
|
15
|
-
} = props;
|
|
16
|
-
const cancelRef = useRef(null);
|
|
17
|
-
return /* @__PURE__ */ jsx(
|
|
18
|
-
Dialog.Root,
|
|
19
|
-
{
|
|
20
|
-
open: blocked,
|
|
21
|
-
initialFocusEl: () => cancelRef.current,
|
|
22
|
-
role: "alertdialog",
|
|
23
|
-
onOpenChange: (e) => {
|
|
24
|
-
if (!e.open) {
|
|
25
|
-
onCancelLeave();
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
children: /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Dialog.Backdrop, { children: /* @__PURE__ */ jsx(Dialog.Positioner, { children: /* @__PURE__ */ jsxs(Dialog.Content, { children: [
|
|
29
|
-
/* @__PURE__ */ jsx(Dialog.Header, { fontSize: "lg", fontWeight: "bold", children: title }),
|
|
30
|
-
/* @__PURE__ */ jsx(Dialog.Body, { children: message }),
|
|
31
|
-
/* @__PURE__ */ jsx(Dialog.Footer, { children: /* @__PURE__ */ jsxs(ButtonGroup, { children: [
|
|
32
|
-
/* @__PURE__ */ jsx(
|
|
33
|
-
Button,
|
|
34
|
-
{
|
|
35
|
-
variant: "solid",
|
|
36
|
-
colorPalette: "primary",
|
|
37
|
-
onClick: onConfirmLeave,
|
|
38
|
-
children: confirmLabel
|
|
39
|
-
}
|
|
40
|
-
),
|
|
41
|
-
/* @__PURE__ */ jsx(
|
|
42
|
-
Button,
|
|
43
|
-
{
|
|
44
|
-
variant: "outline",
|
|
45
|
-
onClick: onCancelLeave,
|
|
46
|
-
ref: cancelRef,
|
|
47
|
-
children: cancelLabel
|
|
48
|
-
}
|
|
49
|
-
)
|
|
50
|
-
] }) })
|
|
51
|
-
] }) }) }) })
|
|
52
|
-
}
|
|
53
|
-
);
|
|
54
|
-
};
|
|
55
|
-
LeavePageConfirmation.displayName = "LeavePageConfirmation";
|
|
56
|
-
var NativeSelect = function NativeSelect2({
|
|
57
|
-
ref,
|
|
58
|
-
...props
|
|
59
|
-
}) {
|
|
60
|
-
const {
|
|
61
|
-
size,
|
|
62
|
-
variant,
|
|
63
|
-
disabled,
|
|
64
|
-
invalid,
|
|
65
|
-
unstyled,
|
|
66
|
-
placeholder,
|
|
67
|
-
children,
|
|
68
|
-
...fieldProps
|
|
69
|
-
} = props;
|
|
70
|
-
return /* @__PURE__ */ jsxs(
|
|
71
|
-
NativeSelect$1.Root,
|
|
72
|
-
{
|
|
73
|
-
size,
|
|
74
|
-
variant,
|
|
75
|
-
disabled,
|
|
76
|
-
invalid,
|
|
77
|
-
unstyled,
|
|
78
|
-
children: [
|
|
79
|
-
/* @__PURE__ */ jsxs(NativeSelect$1.Field, { ref, ...fieldProps, children: [
|
|
80
|
-
placeholder && /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: placeholder }),
|
|
81
|
-
children
|
|
82
|
-
] }),
|
|
83
|
-
/* @__PURE__ */ jsx(NativeSelect$1.Indicator, {})
|
|
84
|
-
]
|
|
85
|
-
}
|
|
86
|
-
);
|
|
87
|
-
};
|
|
88
|
-
NativeSelect.displayName = "NativeSelect";
|
|
89
|
-
var NumberInputRoot = function NumberInput$1({
|
|
90
|
-
ref,
|
|
91
|
-
...props
|
|
92
|
-
}) {
|
|
93
|
-
const { children, showStepper = true, ...rest } = props;
|
|
94
|
-
return /* @__PURE__ */ jsxs(NumberInput.Root, { ref, variant: "outline", ...rest, children: [
|
|
95
|
-
children,
|
|
96
|
-
showStepper && /* @__PURE__ */ jsxs(NumberInput.Control, { children: [
|
|
97
|
-
/* @__PURE__ */ jsx(NumberInput.IncrementTrigger, {}),
|
|
98
|
-
/* @__PURE__ */ jsx(NumberInput.DecrementTrigger, {})
|
|
99
|
-
] })
|
|
100
|
-
] });
|
|
101
|
-
};
|
|
102
|
-
NumberInputRoot.displayName = "NumberInputRoot";
|
|
103
|
-
var NumberInputField = NumberInput.Input;
|
|
104
|
-
NumberInputField.displayName = "NumberInputField";
|
|
105
|
-
var NumberInputScrubber = NumberInput.Scrubber;
|
|
106
|
-
NumberInputScrubber.displayName = "NumberInputScrubber";
|
|
107
|
-
var NumberInputLabel = NumberInput.Label;
|
|
108
|
-
NumberInputLabel.displayName = "NumberInputLabel";
|
|
109
|
-
var Radio = function Radio2({
|
|
110
|
-
ref,
|
|
111
|
-
...props
|
|
112
|
-
}) {
|
|
113
|
-
const { children, inputProps, rootRef, ...rest } = props;
|
|
114
|
-
return /* @__PURE__ */ jsxs(RadioGroup$1.Item, { ref: rootRef, ...rest, children: [
|
|
115
|
-
/* @__PURE__ */ jsx(RadioGroup$1.ItemHiddenInput, { ref, ...inputProps }),
|
|
116
|
-
/* @__PURE__ */ jsx(RadioGroup$1.ItemIndicator, {}),
|
|
117
|
-
children && /* @__PURE__ */ jsx(RadioGroup$1.ItemText, { children })
|
|
118
|
-
] });
|
|
119
|
-
};
|
|
120
|
-
Radio.displayName = "Radio";
|
|
121
|
-
var RadioGroup = RadioGroup$1.Root;
|
|
122
|
-
RadioGroup.displayName = "RadioGroup";
|
|
123
|
-
|
|
124
|
-
export { LeavePageConfirmation, NativeSelect, NumberInputField, NumberInputLabel, NumberInputRoot, NumberInputScrubber, Radio, RadioGroup };
|
|
125
|
-
//# sourceMappingURL=chunk-M5WNB4K6.js.map
|
|
126
|
-
//# sourceMappingURL=chunk-M5WNB4K6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/leave-page-confirmation.tsx","../src/primitives/native-select.tsx","../src/primitives/number-input.tsx","../src/primitives/radio.tsx"],"names":["NativeSelect","jsxs","ChakraNativeSelect","jsx","NumberInput","ChakraNumberInput","Radio","ChakraRadioGroup"],"mappings":"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","file":"chunk-M5WNB4K6.js","sourcesContent":["import { Button, ButtonGroup, Dialog, Portal } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface LeavePageConfirmationProps {\n\t/** Whether the dialog is currently open (i.e., navigation is blocked). */\n\tblocked: boolean;\n\t/** Called when the user confirms they want to leave. */\n\tonConfirmLeave: () => void;\n\t/** Called when the user cancels and wants to stay. */\n\tonCancelLeave: () => void;\n\t/** Dialog title. Defaults to \"You have unsaved changes\". */\n\ttitle?: string;\n\t/** Dialog message body. Defaults to a generic unsaved-changes prompt. */\n\tmessage?: string;\n\t/** Label for the confirm/leave button. Defaults to \"Leave\". */\n\tconfirmLabel?: string;\n\t/** Label for the cancel/stay button. Defaults to \"Stay\". */\n\tcancelLabel?: string;\n}\n\nexport const LeavePageConfirmation: React.FC<LeavePageConfirmationProps> = (\n\tprops,\n) => {\n\tconst {\n\t\tblocked,\n\t\tonConfirmLeave,\n\t\tonCancelLeave,\n\t\ttitle = \"You have unsaved changes\",\n\t\tmessage = \"Are you sure you want to leave this page? You have unsaved changes.\",\n\t\tconfirmLabel = \"Leave\",\n\t\tcancelLabel = \"Stay\",\n\t} = props;\n\n\tconst cancelRef = useRef<HTMLButtonElement | null>(null);\n\n\treturn (\n\t\t<Dialog.Root\n\t\t\topen={blocked}\n\t\t\tinitialFocusEl={() => cancelRef.current}\n\t\t\trole=\"alertdialog\"\n\t\t\tonOpenChange={(e) => {\n\t\t\t\tif (!e.open) {\n\t\t\t\t\tonCancelLeave();\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<Portal>\n\t\t\t\t<Dialog.Backdrop>\n\t\t\t\t\t<Dialog.Positioner>\n\t\t\t\t\t\t<Dialog.Content>\n\t\t\t\t\t\t\t<Dialog.Header fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Dialog.Header>\n\t\t\t\t\t\t\t<Dialog.Body>{message}</Dialog.Body>\n\t\t\t\t\t\t\t<Dialog.Footer>\n\t\t\t\t\t\t\t\t<ButtonGroup>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"solid\"\n\t\t\t\t\t\t\t\t\t\tcolorPalette=\"primary\"\n\t\t\t\t\t\t\t\t\t\tonClick={onConfirmLeave}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{confirmLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\tonClick={onCancelLeave}\n\t\t\t\t\t\t\t\t\t\tref={cancelRef}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{cancelLabel}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t</ButtonGroup>\n\t\t\t\t\t\t\t</Dialog.Footer>\n\t\t\t\t\t\t</Dialog.Content>\n\t\t\t\t\t</Dialog.Positioner>\n\t\t\t\t</Dialog.Backdrop>\n\t\t\t</Portal>\n\t\t</Dialog.Root>\n\t);\n};\nLeavePageConfirmation.displayName = \"LeavePageConfirmation\";\n","import {\n\tNativeSelect as ChakraNativeSelect,\n\ttype NativeSelectFieldProps,\n\ttype NativeSelectRootProps,\n} from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface NativeSelectProps\n\textends Omit<NativeSelectFieldProps, \"placeholder\"> {\n\t/** Props forwarded to the root wrapper. */\n\tsize?: NativeSelectRootProps[\"size\"];\n\tvariant?: NativeSelectRootProps[\"variant\"];\n\tdisabled?: NativeSelectRootProps[\"disabled\"];\n\tinvalid?: NativeSelectRootProps[\"invalid\"];\n\tunstyled?: NativeSelectRootProps[\"unstyled\"];\n\t/** Rendered as a disabled first <option> */\n\tplaceholder?: string;\n}\n\nexport const NativeSelect = function NativeSelect({\n\tref,\n\t...props\n}: NativeSelectProps & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tsize,\n\t\tvariant,\n\t\tdisabled,\n\t\tinvalid,\n\t\tunstyled,\n\t\tplaceholder,\n\t\tchildren,\n\t\t...fieldProps\n\t} = props;\n\n\treturn (\n\t\t<ChakraNativeSelect.Root\n\t\t\tsize={size}\n\t\t\tvariant={variant}\n\t\t\tdisabled={disabled}\n\t\t\tinvalid={invalid}\n\t\t\tunstyled={unstyled}\n\t\t>\n\t\t\t<ChakraNativeSelect.Field ref={ref} {...fieldProps}>\n\t\t\t\t{placeholder && (\n\t\t\t\t\t<option value=\"\" disabled>\n\t\t\t\t\t\t{placeholder}\n\t\t\t\t\t</option>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</ChakraNativeSelect.Field>\n\t\t\t<ChakraNativeSelect.Indicator />\n\t\t</ChakraNativeSelect.Root>\n\t);\n};\nNativeSelect.displayName = \"NativeSelect\";\n","import { NumberInput as ChakraNumberInput } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface NumberInputProps extends ChakraNumberInput.RootProps {\n\tshowStepper?: boolean;\n}\n\nexport const NumberInputRoot = function NumberInput({\n\tref,\n\t...props\n}: NumberInputProps & { ref?: React.Ref<HTMLDivElement> }) {\n\tconst { children, showStepper = true, ...rest } = props;\n\treturn (\n\t\t<ChakraNumberInput.Root ref={ref} variant=\"outline\" {...rest}>\n\t\t\t{children}\n\t\t\t{showStepper && (\n\t\t\t\t<ChakraNumberInput.Control>\n\t\t\t\t\t<ChakraNumberInput.IncrementTrigger />\n\t\t\t\t\t<ChakraNumberInput.DecrementTrigger />\n\t\t\t\t</ChakraNumberInput.Control>\n\t\t\t)}\n\t\t</ChakraNumberInput.Root>\n\t);\n};\nNumberInputRoot.displayName = \"NumberInputRoot\";\n\nexport const NumberInputField = ChakraNumberInput.Input;\nNumberInputField.displayName = \"NumberInputField\";\nexport const NumberInputScrubber = ChakraNumberInput.Scrubber;\nNumberInputScrubber.displayName = \"NumberInputScrubber\";\nexport const NumberInputLabel = ChakraNumberInput.Label;\nNumberInputLabel.displayName = \"NumberInputLabel\";\n","import { RadioGroup as ChakraRadioGroup } from \"@chakra-ui/react\";\nimport type * as React from \"react\";\n\nexport interface RadioProps extends ChakraRadioGroup.ItemProps {\n\t/** Ref attached to the root element. */\n\trootRef?: React.RefObject<HTMLDivElement | null>;\n\t/** Additional props forwarded to the hidden input element. */\n\tinputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n}\n\nexport const Radio = function Radio({\n\tref,\n\t...props\n}: RadioProps & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst { children, inputProps, rootRef, ...rest } = props;\n\treturn (\n\t\t<ChakraRadioGroup.Item ref={rootRef} {...rest}>\n\t\t\t<ChakraRadioGroup.ItemHiddenInput ref={ref} {...inputProps} />\n\t\t\t<ChakraRadioGroup.ItemIndicator />\n\t\t\t{children && (\n\t\t\t\t<ChakraRadioGroup.ItemText>{children}</ChakraRadioGroup.ItemText>\n\t\t\t)}\n\t\t</ChakraRadioGroup.Item>\n\t);\n};\nRadio.displayName = \"Radio\";\n\nexport const RadioGroup = ChakraRadioGroup.Root;\nRadioGroup.displayName = \"RadioGroup\";\n"]}
|