@declarion/react 0.1.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/LICENSE +21 -0
- package/README.md +21 -0
- package/dist-lib/JsonEditor-C5NOzsey.js +71 -0
- package/dist-lib/JsonEditor-C5NOzsey.js.map +1 -0
- package/dist-lib/api/auth.d.ts +11 -0
- package/dist-lib/api/client.d.ts +3 -0
- package/dist-lib/api/data.d.ts +28 -0
- package/dist-lib/api/entities.d.ts +75 -0
- package/dist-lib/api/events.d.ts +9 -0
- package/dist-lib/api/params.d.ts +3 -0
- package/dist-lib/api/properties.d.ts +3 -0
- package/dist-lib/api/schema.d.ts +2 -0
- package/dist-lib/api/status.d.ts +2 -0
- package/dist-lib/app.d.ts +1 -0
- package/dist-lib/components/columns/ColumnPicker.d.ts +15 -0
- package/dist-lib/components/detail-layout/AssociatedBlock.d.ts +8 -0
- package/dist-lib/components/detail-layout/AssociatedToolbar.d.ts +13 -0
- package/dist-lib/components/detail-layout/ChildrenBlock.d.ts +15 -0
- package/dist-lib/components/detail-layout/ChildrenCards.d.ts +2 -0
- package/dist-lib/components/detail-layout/ChildrenList.d.ts +2 -0
- package/dist-lib/components/detail-layout/ChildrenTable.d.ts +2 -0
- package/dist-lib/components/detail-layout/ChildrenTimeline.d.ts +2 -0
- package/dist-lib/components/detail-layout/DraggableChildrenTable.d.ts +15 -0
- package/dist-lib/components/detail-layout/EditableChildrenTable.d.ts +15 -0
- package/dist-lib/components/detail-layout/FieldsBlock.d.ts +7 -0
- package/dist-lib/components/detail-layout/LayoutColumn.d.ts +9 -0
- package/dist-lib/components/detail-layout/LayoutRenderer.d.ts +42 -0
- package/dist-lib/components/detail-layout/LayoutRow.d.ts +8 -0
- package/dist-lib/components/detail-layout/LayoutTabs.d.ts +8 -0
- package/dist-lib/components/detail-layout/PropertiesBlock.d.ts +8 -0
- package/dist-lib/components/detail-layout/QuickAddForm.d.ts +10 -0
- package/dist-lib/components/detail-layout/SectionBlock.d.ts +8 -0
- package/dist-lib/components/detail-layout/StatusesBlock.d.ts +8 -0
- package/dist-lib/components/detail-layout/TimelineComposer.d.ts +10 -0
- package/dist-lib/components/detail-layout/index.d.ts +18 -0
- package/dist-lib/components/detail-layout/useQuickAdd.d.ts +17 -0
- package/dist-lib/components/fields/BoolField.d.ts +2 -0
- package/dist-lib/components/fields/EmailField.d.ts +2 -0
- package/dist-lib/components/fields/EnumField.d.ts +2 -0
- package/dist-lib/components/fields/IntArrayField.d.ts +2 -0
- package/dist-lib/components/fields/JsonEditor.d.ts +9 -0
- package/dist-lib/components/fields/JsonField.d.ts +2 -0
- package/dist-lib/components/fields/MultilangField.d.ts +2 -0
- package/dist-lib/components/fields/MultilangTextField.d.ts +2 -0
- package/dist-lib/components/fields/NumberField.d.ts +2 -0
- package/dist-lib/components/fields/PasswordField.d.ts +2 -0
- package/dist-lib/components/fields/RefField.d.ts +2 -0
- package/dist-lib/components/fields/SecretField.d.ts +2 -0
- package/dist-lib/components/fields/StringArrayField.d.ts +2 -0
- package/dist-lib/components/fields/StringField.d.ts +2 -0
- package/dist-lib/components/fields/StructureField.d.ts +2 -0
- package/dist-lib/components/fields/TextField.d.ts +2 -0
- package/dist-lib/components/fields/TimestampField.d.ts +2 -0
- package/dist-lib/components/fields/UrlField.d.ts +2 -0
- package/dist-lib/components/fields/index.d.ts +16 -0
- package/dist-lib/components/filters/FilterChips.d.ts +16 -0
- package/dist-lib/components/filters/FilterDrawer.d.ts +27 -0
- package/dist-lib/components/layout/Layout.d.ts +1 -0
- package/dist-lib/components/layout/Sidebar.d.ts +1 -0
- package/dist-lib/components/layout/TabBar.d.ts +1 -0
- package/dist-lib/components/layout/ThemeToggle.d.ts +1 -0
- package/dist-lib/components/layout/TopBar.d.ts +1 -0
- package/dist-lib/components/pages/AdminCatalogPage.d.ts +1 -0
- package/dist-lib/components/pages/LoginPage.d.ts +1 -0
- package/dist-lib/components/pages/NotFoundPage.d.ts +1 -0
- package/dist-lib/components/pages/SSOCallbackPage.d.ts +1 -0
- package/dist-lib/components/pages/SignupPage.d.ts +1 -0
- package/dist-lib/components/pages/SmartDetailPage.d.ts +5 -0
- package/dist-lib/components/pages/SmartListPage.d.ts +5 -0
- package/dist-lib/components/pages/SmartRecordListPage.d.ts +5 -0
- package/dist-lib/components/shared/ActionButton.d.ts +24 -0
- package/dist-lib/components/shared/ActionConfirmDialog.d.ts +10 -0
- package/dist-lib/components/shared/ActionDialog.d.ts +22 -0
- package/dist-lib/components/shared/ActionResultDialog.d.ts +18 -0
- package/dist-lib/components/shared/AssociationTabs.d.ts +9 -0
- package/dist-lib/components/shared/BatchActionProgress.d.ts +18 -0
- package/dist-lib/components/shared/ConfirmDialog.d.ts +11 -0
- package/dist-lib/components/shared/DynamicIcon.d.ts +6 -0
- package/dist-lib/components/shared/EmptyState.d.ts +9 -0
- package/dist-lib/components/shared/ErrorBoundary.d.ts +22 -0
- package/dist-lib/components/shared/LoadingSkeleton.d.ts +5 -0
- package/dist-lib/components/shared/PageHeader.d.ts +8 -0
- package/dist-lib/components/shared/RowActionItem.d.ts +11 -0
- package/dist-lib/components/shared/StatusGroupsDisplay.d.ts +11 -0
- package/dist-lib/components/ui/alert-dialog.d.ts +14 -0
- package/dist-lib/components/ui/badge.d.ts +9 -0
- package/dist-lib/components/ui/button.d.ts +11 -0
- package/dist-lib/components/ui/card.d.ts +8 -0
- package/dist-lib/components/ui/dialog.d.ts +13 -0
- package/dist-lib/components/ui/dropdown-menu.d.ts +24 -0
- package/dist-lib/components/ui/input.d.ts +3 -0
- package/dist-lib/components/ui/label.d.ts +5 -0
- package/dist-lib/components/ui/select.d.ts +13 -0
- package/dist-lib/components/ui/separator.d.ts +4 -0
- package/dist-lib/components/ui/skeleton.d.ts +2 -0
- package/dist-lib/components/ui/table.d.ts +10 -0
- package/dist-lib/components/ui/textarea.d.ts +3 -0
- package/dist-lib/components/views/ViewSwitcher.d.ts +27 -0
- package/dist-lib/hooks/useAssociatedData.d.ts +10 -0
- package/dist-lib/hooks/useAuth.d.ts +21 -0
- package/dist-lib/hooks/useChildrenData.d.ts +3 -0
- package/dist-lib/hooks/useColumns.d.ts +13 -0
- package/dist-lib/hooks/useDebounce.d.ts +1 -0
- package/dist-lib/hooks/useEntity.d.ts +2 -0
- package/dist-lib/hooks/useEntityData.d.ts +2 -0
- package/dist-lib/hooks/useEntityItem.d.ts +2 -0
- package/dist-lib/hooks/useFilters.d.ts +11 -0
- package/dist-lib/hooks/useMutations.d.ts +13 -0
- package/dist-lib/hooks/useObjectStatus.d.ts +5 -0
- package/dist-lib/hooks/useParams.d.ts +2 -0
- package/dist-lib/hooks/useProperties.d.ts +5 -0
- package/dist-lib/hooks/useSSE.d.ts +1 -0
- package/dist-lib/hooks/useSchema.d.ts +1 -0
- package/dist-lib/hooks/useScreen.d.ts +2 -0
- package/dist-lib/hooks/useTabNavigate.d.ts +8 -0
- package/dist-lib/hooks/useViews.d.ts +6 -0
- package/dist-lib/index.d.ts +37 -0
- package/dist-lib/index.js +8424 -0
- package/dist-lib/index.js.map +1 -0
- package/dist-lib/lib/actions.d.ts +43 -0
- package/dist-lib/lib/child-config.d.ts +23 -0
- package/dist-lib/lib/children-validation.d.ts +3 -0
- package/dist-lib/lib/filters.d.ts +42 -0
- package/dist-lib/lib/quick-add.d.ts +2 -0
- package/dist-lib/lib/size-value.d.ts +16 -0
- package/dist-lib/lib/theme-utils.d.ts +3 -0
- package/dist-lib/lib/timestamp.d.ts +8 -0
- package/dist-lib/lib/utils.d.ts +2 -0
- package/dist-lib/main.d.ts +1 -0
- package/dist-lib/stores/auth.d.ts +15 -0
- package/dist-lib/stores/screen-registry.d.ts +3 -0
- package/dist-lib/stores/tabs.d.ts +21 -0
- package/dist-lib/stores/theme.d.ts +10 -0
- package/dist-lib/types/api.d.ts +178 -0
- package/dist-lib/types/schema.d.ts +380 -0
- package/package.json +85 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Disciplinedware LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# @declarion/react
|
|
2
|
+
|
|
3
|
+
React SDK for [Declarion](https://declarion.io), the schema-driven business apps platform.
|
|
4
|
+
|
|
5
|
+
Declarion lets you build production business apps from YAML schemas: entities, screens, navigation, actions, and handlers. This package is the React client that renders those schemas into working UIs against a Declarion API backend.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @declarion/react
|
|
11
|
+
# peer deps:
|
|
12
|
+
pnpm add react react-dom
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## License
|
|
16
|
+
|
|
17
|
+
MIT. See `LICENSE`.
|
|
18
|
+
|
|
19
|
+
## Runtime
|
|
20
|
+
|
|
21
|
+
The SDK talks to a Declarion runtime server. The runtime is proprietary commercial software - contact konstantin@trunin.com for licensing.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as b } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as i, useEffect as a } from "react";
|
|
3
|
+
import { Mode as d, createJSONEditor as E } from "vanilla-jsoneditor";
|
|
4
|
+
import "vanilla-jsoneditor/themes/jse-theme-dark.css";
|
|
5
|
+
function p(t) {
|
|
6
|
+
if (t == null) return { text: "" };
|
|
7
|
+
if (typeof t == "string")
|
|
8
|
+
try {
|
|
9
|
+
return { json: JSON.parse(t) };
|
|
10
|
+
} catch {
|
|
11
|
+
return { text: t };
|
|
12
|
+
}
|
|
13
|
+
return { json: t };
|
|
14
|
+
}
|
|
15
|
+
function R({ value: t, onChange: c, readOnly: r }) {
|
|
16
|
+
const o = i(null), s = i(null), n = i(c);
|
|
17
|
+
return a(() => {
|
|
18
|
+
n.current = c;
|
|
19
|
+
}, [c]), a(() => {
|
|
20
|
+
if (!o.current) return;
|
|
21
|
+
const j = {
|
|
22
|
+
content: p(t),
|
|
23
|
+
readOnly: r ?? !1,
|
|
24
|
+
mode: r ? d.tree : d.text,
|
|
25
|
+
mainMenuBar: !r,
|
|
26
|
+
navigationBar: !1,
|
|
27
|
+
statusBar: !1,
|
|
28
|
+
onChange: (e, u, x) => {
|
|
29
|
+
if (!(r || !n.current) && !x.contentErrors) {
|
|
30
|
+
if ("json" in e)
|
|
31
|
+
n.current(e.json);
|
|
32
|
+
else if ("text" in e)
|
|
33
|
+
try {
|
|
34
|
+
n.current(JSON.parse(e.text));
|
|
35
|
+
} catch {
|
|
36
|
+
n.current(e.text);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}, f = () => {
|
|
41
|
+
var u;
|
|
42
|
+
const e = document.documentElement.classList.contains("dark");
|
|
43
|
+
(u = o.current) == null || u.classList.toggle("jse-theme-dark", e);
|
|
44
|
+
};
|
|
45
|
+
f();
|
|
46
|
+
const m = new MutationObserver(f);
|
|
47
|
+
m.observe(document.documentElement, {
|
|
48
|
+
attributes: !0,
|
|
49
|
+
attributeFilter: ["class"]
|
|
50
|
+
});
|
|
51
|
+
const l = E({
|
|
52
|
+
target: o.current,
|
|
53
|
+
props: j
|
|
54
|
+
});
|
|
55
|
+
return s.current = l, () => {
|
|
56
|
+
m.disconnect(), l.destroy(), s.current = null;
|
|
57
|
+
};
|
|
58
|
+
}, [r]), a(() => {
|
|
59
|
+
!s.current || !r || s.current.updateProps({ content: p(t) });
|
|
60
|
+
}, [t, r]), /* @__PURE__ */ b(
|
|
61
|
+
"div",
|
|
62
|
+
{
|
|
63
|
+
ref: o,
|
|
64
|
+
className: r ? "json-editor-readonly" : "json-editor-editable"
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
export {
|
|
69
|
+
R as JsonEditor
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=JsonEditor-C5NOzsey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonEditor-C5NOzsey.js","sources":["../src/components/fields/JsonEditor.tsx"],"sourcesContent":["import { useRef, useEffect } from \"react\";\nimport {\n createJSONEditor,\n Mode,\n type Content,\n type OnChangeStatus,\n type JSONEditorPropsOptional,\n} from \"vanilla-jsoneditor\";\n// Dark theme CSS vars for vanilla-jsoneditor (sets --jse-* custom properties)\nimport \"vanilla-jsoneditor/themes/jse-theme-dark.css\";\n\ninterface JsonEditorProps {\n value: unknown;\n onChange?: (value: unknown) => void;\n readOnly?: boolean;\n // Future: JSON Schema for in-editor validation (Ajv). Accept now, wire later.\n schema?: Record<string, unknown>;\n}\n\nfunction toContent(v: unknown): Content {\n if (v == null) return { text: \"\" };\n if (typeof v === \"string\") {\n try {\n return { json: JSON.parse(v) };\n } catch {\n return { text: v };\n }\n }\n return { json: v };\n}\n\nexport function JsonEditor({ value, onChange, readOnly }: JsonEditorProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<ReturnType<typeof createJSONEditor> | null>(null);\n const onChangeRef = useRef(onChange);\n useEffect(() => { onChangeRef.current = onChange; }, [onChange]);\n\n // Create / recreate editor when readOnly changes\n useEffect(() => {\n if (!containerRef.current) return;\n\n const props: JSONEditorPropsOptional = {\n content: toContent(value),\n readOnly: readOnly ?? false,\n mode: readOnly ? Mode.tree : Mode.text,\n mainMenuBar: !readOnly,\n navigationBar: false,\n statusBar: false,\n onChange: (content: Content, _prev: Content, status: OnChangeStatus) => {\n if (readOnly || !onChangeRef.current) return;\n if (status.contentErrors) return;\n if (\"json\" in content) {\n onChangeRef.current(content.json);\n } else if (\"text\" in content) {\n try {\n onChangeRef.current(JSON.parse(content.text));\n } catch {\n onChangeRef.current(content.text);\n }\n }\n },\n };\n\n const syncDarkClass = () => {\n const isDark = document.documentElement.classList.contains(\"dark\");\n containerRef.current?.classList.toggle(\"jse-theme-dark\", isDark);\n };\n syncDarkClass();\n\n // Watch for dark mode toggles\n const observer = new MutationObserver(syncDarkClass);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n\n const editor = createJSONEditor({\n target: containerRef.current,\n props,\n });\n editorRef.current = editor;\n\n return () => {\n observer.disconnect();\n editor.destroy();\n editorRef.current = null;\n };\n }, [readOnly]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update content when value changes externally (read-only mode only)\n useEffect(() => {\n if (!editorRef.current || !readOnly) return;\n editorRef.current.updateProps({ content: toContent(value) });\n }, [value, readOnly]);\n\n return (\n <div\n ref={containerRef}\n className={readOnly ? \"json-editor-readonly\" : \"json-editor-editable\"}\n />\n );\n}\n"],"names":["toContent","v","JsonEditor","value","onChange","readOnly","containerRef","useRef","editorRef","onChangeRef","useEffect","props","Mode","content","_prev","status","syncDarkClass","isDark","_a","observer","editor","createJSONEditor","jsx"],"mappings":";;;;AAmBA,SAASA,EAAUC,GAAqB;AACtC,MAAIA,KAAK,KAAM,QAAO,EAAE,MAAM,GAAA;AAC9B,MAAI,OAAOA,KAAM;AACf,QAAI;AACF,aAAO,EAAE,MAAM,KAAK,MAAMA,CAAC,EAAA;AAAA,IAC7B,QAAQ;AACN,aAAO,EAAE,MAAMA,EAAA;AAAA,IACjB;AAEF,SAAO,EAAE,MAAMA,EAAA;AACjB;AAEO,SAASC,EAAW,EAAE,OAAAC,GAAO,UAAAC,GAAU,UAAAC,KAA6B;AACzE,QAAMC,IAAeC,EAAuB,IAAI,GAC1CC,IAAYD,EAAmD,IAAI,GACnEE,IAAcF,EAAOH,CAAQ;AACnC,SAAAM,EAAU,MAAM;AAAE,IAAAD,EAAY,UAAUL;AAAA,EAAU,GAAG,CAACA,CAAQ,CAAC,GAG/DM,EAAU,MAAM;AACd,QAAI,CAACJ,EAAa,QAAS;AAE3B,UAAMK,IAAiC;AAAA,MACrC,SAASX,EAAUG,CAAK;AAAA,MACxB,UAAUE,KAAY;AAAA,MACtB,MAAMA,IAAWO,EAAK,OAAOA,EAAK;AAAA,MAClC,aAAa,CAACP;AAAA,MACd,eAAe;AAAA,MACf,WAAW;AAAA,MACX,UAAU,CAACQ,GAAkBC,GAAgBC,MAA2B;AACtE,YAAI,EAAAV,KAAY,CAACI,EAAY,YACzB,CAAAM,EAAO;AACX,cAAI,UAAUF;AACZ,YAAAJ,EAAY,QAAQI,EAAQ,IAAI;AAAA,mBACvB,UAAUA;AACnB,gBAAI;AACF,cAAAJ,EAAY,QAAQ,KAAK,MAAMI,EAAQ,IAAI,CAAC;AAAA,YAC9C,QAAQ;AACN,cAAAJ,EAAY,QAAQI,EAAQ,IAAI;AAAA,YAClC;AAAA;AAAA,MAEJ;AAAA,IAAA,GAGIG,IAAgB,MAAM;;AAC1B,YAAMC,IAAS,SAAS,gBAAgB,UAAU,SAAS,MAAM;AACjE,OAAAC,IAAAZ,EAAa,YAAb,QAAAY,EAAsB,UAAU,OAAO,kBAAkBD;AAAA,IAC3D;AACA,IAAAD,EAAA;AAGA,UAAMG,IAAW,IAAI,iBAAiBH,CAAa;AACnD,IAAAG,EAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,OAAO;AAAA,IAAA,CAC1B;AAED,UAAMC,IAASC,EAAiB;AAAA,MAC9B,QAAQf,EAAa;AAAA,MACrB,OAAAK;AAAA,IAAA,CACD;AACD,WAAAH,EAAU,UAAUY,GAEb,MAAM;AACX,MAAAD,EAAS,WAAA,GACTC,EAAO,QAAA,GACPZ,EAAU,UAAU;AAAA,IACtB;AAAA,EACF,GAAG,CAACH,CAAQ,CAAC,GAGbK,EAAU,MAAM;AACd,IAAI,CAACF,EAAU,WAAW,CAACH,KAC3BG,EAAU,QAAQ,YAAY,EAAE,SAASR,EAAUG,CAAK,GAAG;AAAA,EAC7D,GAAG,CAACA,GAAOE,CAAQ,CAAC,GAGlB,gBAAAiB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKhB;AAAA,MACL,WAAWD,IAAW,yBAAyB;AAAA,IAAA;AAAA,EAAA;AAGrD;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CheckSetupResponse, LoginResponse, AuthUser, Tenant, SSOProvider } from "@/types/api";
|
|
2
|
+
export declare function checkSetup(): Promise<CheckSetupResponse>;
|
|
3
|
+
export declare function login(email: string, password: string): Promise<LoginResponse>;
|
|
4
|
+
export declare function signup(email: string, password: string, displayName: string): Promise<LoginResponse>;
|
|
5
|
+
export declare function getMe(): Promise<AuthUser>;
|
|
6
|
+
export declare function listTenants(): Promise<Tenant[]>;
|
|
7
|
+
export declare function switchTenant(tenantId: string): Promise<LoginResponse>;
|
|
8
|
+
export declare function createTenant(code: string, name: string): Promise<Tenant>;
|
|
9
|
+
export declare function logout(): Promise<void>;
|
|
10
|
+
export declare function listSSOProviders(tenantCode?: string): Promise<SSOProvider[]>;
|
|
11
|
+
export declare function ssoAuthorizeUrl(slug: string, tenantCode?: string, redirect?: string): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ListParams, ListResponse, DataResponse } from "@/types/api";
|
|
2
|
+
import type { PkValues } from "@/types/schema";
|
|
3
|
+
export declare function listEntities(entity: string, params?: ListParams): Promise<ListResponse>;
|
|
4
|
+
export declare function getEntity(entity: string, pkValues: PkValues | string): Promise<DataResponse>;
|
|
5
|
+
export declare function createEntity(entity: string, data: Record<string, unknown>): Promise<DataResponse>;
|
|
6
|
+
export declare function updateEntity(entity: string, pkValues: PkValues | string, data: Record<string, unknown>): Promise<DataResponse>;
|
|
7
|
+
export declare function deleteEntity(entity: string, pkValues: PkValues | string): Promise<void>;
|
|
8
|
+
export declare function restoreEntity(entity: string, pkValues: PkValues | string): Promise<void>;
|
|
9
|
+
export interface ActionExecuteRequest {
|
|
10
|
+
entity?: string;
|
|
11
|
+
ids?: string[];
|
|
12
|
+
args?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export interface ActionExecuteResponse {
|
|
15
|
+
status: string;
|
|
16
|
+
result?: unknown;
|
|
17
|
+
audit_operation_id?: string;
|
|
18
|
+
object_count?: number;
|
|
19
|
+
/** IDs that succeeded (batch_mode: each responses). */
|
|
20
|
+
success?: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare function executeAction(code: string, body: ActionExecuteRequest): Promise<ActionExecuteResponse>;
|
|
23
|
+
export interface AssociationResponse {
|
|
24
|
+
target_entity: string;
|
|
25
|
+
ids: string[];
|
|
26
|
+
count: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function resolveAssociation(code: string, ids: string[]): Promise<AssociationResponse>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Refs, V2ListParams, V2Meta, V2StatusInstance, V2PropertyInstance, EnrichedRow } from "@/types/api";
|
|
2
|
+
/** Helper methods injected onto enriched rows. */
|
|
3
|
+
export interface RowHelpers {
|
|
4
|
+
$status(groupCode: string): V2StatusInstance | undefined;
|
|
5
|
+
$property(propertyCode: string): V2PropertyInstance | undefined;
|
|
6
|
+
}
|
|
7
|
+
/** Normalized ref cache that merges $refs across multiple responses. */
|
|
8
|
+
export declare class RefCache {
|
|
9
|
+
private cache;
|
|
10
|
+
/** Merge incoming refs into the cache. */
|
|
11
|
+
merge(refs: Refs | undefined): void;
|
|
12
|
+
/** Get a snapshot of all cached refs. */
|
|
13
|
+
all(): Refs;
|
|
14
|
+
/** Look up a single ref by entity code and id. */
|
|
15
|
+
get(entityCode: string, id: string): Record<string, unknown> | undefined;
|
|
16
|
+
/** Clear the cache. */
|
|
17
|
+
clear(): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generic, type-safe client for a single entity's v2 API.
|
|
21
|
+
*
|
|
22
|
+
* Single-item methods wrap arrays and unwrap the first result.
|
|
23
|
+
* Bulk methods pass arrays through directly.
|
|
24
|
+
*
|
|
25
|
+
* All write responses return enriched rows with $refs, $statuses, etc.
|
|
26
|
+
*/
|
|
27
|
+
export declare class EntityClient<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
28
|
+
readonly entity: string;
|
|
29
|
+
readonly refs: RefCache;
|
|
30
|
+
constructor(entity: string, refCache?: RefCache);
|
|
31
|
+
/** Get a single record by ID. Returns the full object with all sub-resources. */
|
|
32
|
+
get(id: string): Promise<T & EnrichedRow & RowHelpers>;
|
|
33
|
+
/** List records with cursor-based pagination, field selection, and expansion. */
|
|
34
|
+
list(params?: V2ListParams): Promise<{
|
|
35
|
+
data: (T & RowHelpers)[];
|
|
36
|
+
meta: V2Meta;
|
|
37
|
+
$refs: Refs;
|
|
38
|
+
}>;
|
|
39
|
+
/** Create a single record. Wraps in array, returns unwrapped result. */
|
|
40
|
+
create(item: Partial<T> & Record<string, unknown>): Promise<T & EnrichedRow & RowHelpers>;
|
|
41
|
+
/** Create multiple records in one request. */
|
|
42
|
+
createMany(items: (Partial<T> & Record<string, unknown>)[]): Promise<(T & EnrichedRow & RowHelpers)[]>;
|
|
43
|
+
/** Update a single record. Wraps in array, returns unwrapped result. */
|
|
44
|
+
update(id: string, data: Partial<T> & Record<string, unknown>): Promise<T & EnrichedRow & RowHelpers>;
|
|
45
|
+
/** Update multiple records in one request. Each item must include its id. */
|
|
46
|
+
updateMany(items: (Partial<T> & Record<string, unknown> & {
|
|
47
|
+
id: string;
|
|
48
|
+
})[]): Promise<(T & EnrichedRow & RowHelpers)[]>;
|
|
49
|
+
/** Delete a single record by ID. */
|
|
50
|
+
delete(id: string): Promise<void>;
|
|
51
|
+
/** Delete multiple records in one request. Returns the count of deleted records. */
|
|
52
|
+
deleteMany(ids: string[]): Promise<{
|
|
53
|
+
count: number;
|
|
54
|
+
}>;
|
|
55
|
+
/** Restore a single soft-deleted record by ID. */
|
|
56
|
+
restore(id: string): Promise<void>;
|
|
57
|
+
/** Restore multiple soft-deleted records. Returns the count of restored records. */
|
|
58
|
+
restoreMany(ids: string[]): Promise<{
|
|
59
|
+
count: number;
|
|
60
|
+
}>;
|
|
61
|
+
/** Upsert a single record. Wraps in array, returns unwrapped result. */
|
|
62
|
+
upsert(item: Partial<T> & Record<string, unknown>, uniqueFields: string[]): Promise<T & EnrichedRow & RowHelpers>;
|
|
63
|
+
/** Upsert multiple records. Existing matches (by unique_fields) are updated. */
|
|
64
|
+
upsertMany(items: (Partial<T> & Record<string, unknown>)[], uniqueFields: string[]): Promise<(T & EnrichedRow & RowHelpers)[]>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create an EntityClient for the given entity code.
|
|
68
|
+
* Optionally share a RefCache across multiple clients.
|
|
69
|
+
*
|
|
70
|
+
* NOTE(T5): Each call creates a new EntityClient (and a new RefCache if none is
|
|
71
|
+
* provided). For cross-page ref accumulation, callers should create a persistent
|
|
72
|
+
* RefCache instance and pass it to every entityClient() call, e.g. via React
|
|
73
|
+
* context or a module-level singleton.
|
|
74
|
+
*/
|
|
75
|
+
export declare function entityClient<T extends Record<string, unknown> = Record<string, unknown>>(entity: string, refCache?: RefCache): EntityClient<T>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type SSEEvent = {
|
|
2
|
+
type: "entity_changed";
|
|
3
|
+
entity: string;
|
|
4
|
+
ids: string[];
|
|
5
|
+
action: "created" | "updated" | "deleted" | "restored";
|
|
6
|
+
} | {
|
|
7
|
+
type: "session_refresh";
|
|
8
|
+
};
|
|
9
|
+
export declare function streamEvents(signal?: AbortSignal): AsyncGenerator<SSEEvent>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { PropertyValue } from "@/types/api";
|
|
2
|
+
export declare function setObjectProperty(entity: string, id: string, propertyCode: string, value: unknown): Promise<PropertyValue>;
|
|
3
|
+
export declare function deleteObjectProperty(entity: string, id: string, propertyCode: string): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function App(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface ColumnPickerProps {
|
|
2
|
+
availableColumns: string[];
|
|
3
|
+
visibleColumns: string[];
|
|
4
|
+
onToggle: (col: string) => void;
|
|
5
|
+
onReset: () => void;
|
|
6
|
+
onShowAll: () => void;
|
|
7
|
+
/** Resolve column code to display label */
|
|
8
|
+
columnLabel?: (code: string) => string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* ColumnPicker - popover-style checklist for toggling column visibility.
|
|
12
|
+
* Drag-reorder deferred to later phase (using @dnd-kit).
|
|
13
|
+
*/
|
|
14
|
+
export declare function ColumnPicker({ availableColumns, visibleColumns, onToggle, onReset, onShowAll, columnLabel, }: ColumnPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LayoutNode } from "@/types/schema";
|
|
2
|
+
import type { LayoutContext } from "./LayoutRenderer";
|
|
3
|
+
interface AssociatedBlockProps {
|
|
4
|
+
node: LayoutNode;
|
|
5
|
+
ctx: LayoutContext;
|
|
6
|
+
}
|
|
7
|
+
export declare function AssociatedBlock({ node, ctx }: AssociatedBlockProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Entity } from "@/types/schema";
|
|
2
|
+
interface AssociatedToolbarProps {
|
|
3
|
+
entity: Entity;
|
|
4
|
+
searchable?: boolean;
|
|
5
|
+
filterFields?: string[];
|
|
6
|
+
searchValue: string;
|
|
7
|
+
onSearchChange: (value: string) => void;
|
|
8
|
+
filters: Record<string, string>;
|
|
9
|
+
onFilterChange: (field: string, value: string) => void;
|
|
10
|
+
allEntities?: Record<string, Entity>;
|
|
11
|
+
}
|
|
12
|
+
export declare function AssociatedToolbar({ entity, searchable, filterFields, searchValue, onSearchChange, filters, onFilterChange, allEntities, }: AssociatedToolbarProps): import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LayoutNode, Schema } from "@/types/schema";
|
|
2
|
+
import { type ResolvedChildConfig } from "@/lib/child-config";
|
|
3
|
+
import type { LayoutContext } from "./LayoutRenderer";
|
|
4
|
+
interface ChildrenBlockProps {
|
|
5
|
+
node: LayoutNode;
|
|
6
|
+
ctx: LayoutContext;
|
|
7
|
+
}
|
|
8
|
+
export interface ChildDisplayProps {
|
|
9
|
+
config: ResolvedChildConfig;
|
|
10
|
+
parentEntity: string;
|
|
11
|
+
parentId: string;
|
|
12
|
+
schema: Schema;
|
|
13
|
+
}
|
|
14
|
+
export declare function ChildrenBlock({ node, ctx }: ChildrenBlockProps): import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Entity, Schema } from "@/types/schema";
|
|
2
|
+
import type { RefsMap } from "@/components/fields";
|
|
3
|
+
import type { PendingChildRow } from "./LayoutRenderer";
|
|
4
|
+
import type { ResolvedChildConfig } from "@/lib/child-config";
|
|
5
|
+
interface DraggableChildrenTableProps {
|
|
6
|
+
config: ResolvedChildConfig;
|
|
7
|
+
childEntity: Entity;
|
|
8
|
+
schema: Schema;
|
|
9
|
+
rows: PendingChildRow[];
|
|
10
|
+
onChange: (rows: PendingChildRow[]) => void;
|
|
11
|
+
validationErrors?: Record<string, string[]>;
|
|
12
|
+
refs?: RefsMap;
|
|
13
|
+
}
|
|
14
|
+
export declare function DraggableChildrenTable({ config, childEntity, schema, rows, onChange, validationErrors, refs, }: DraggableChildrenTableProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Entity, Schema } from "@/types/schema";
|
|
2
|
+
import type { RefsMap } from "@/components/fields";
|
|
3
|
+
import type { PendingChildRow } from "./LayoutRenderer";
|
|
4
|
+
import type { ResolvedChildConfig } from "@/lib/child-config";
|
|
5
|
+
interface EditableChildrenTableProps {
|
|
6
|
+
config: ResolvedChildConfig;
|
|
7
|
+
childEntity: Entity;
|
|
8
|
+
schema: Schema;
|
|
9
|
+
rows: PendingChildRow[];
|
|
10
|
+
onChange: (rows: PendingChildRow[]) => void;
|
|
11
|
+
validationErrors?: Record<string, string[]>;
|
|
12
|
+
refs?: RefsMap;
|
|
13
|
+
}
|
|
14
|
+
export declare function EditableChildrenTable({ config, childEntity, schema, rows, onChange, validationErrors, refs, }: EditableChildrenTableProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ColumnConfig, LayoutNode } from "@/types/schema";
|
|
2
|
+
import { type LayoutContext } from "./LayoutRenderer";
|
|
3
|
+
interface LayoutColumnProps {
|
|
4
|
+
config: ColumnConfig;
|
|
5
|
+
node: LayoutNode;
|
|
6
|
+
ctx: LayoutContext;
|
|
7
|
+
}
|
|
8
|
+
export declare function LayoutColumn({ config, ctx }: LayoutColumnProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Entity, LayoutNode, Schema } from "@/types/schema";
|
|
2
|
+
import type { StatusInfo, PropertyValue } from "@/types/api";
|
|
3
|
+
import type { RefsMap } from "@/components/fields";
|
|
4
|
+
export interface PendingChildRow {
|
|
5
|
+
_key: string;
|
|
6
|
+
_deleted?: boolean;
|
|
7
|
+
_dirty?: boolean;
|
|
8
|
+
[field: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface LayoutContext {
|
|
11
|
+
schema: Schema;
|
|
12
|
+
entity: Entity;
|
|
13
|
+
entityCode: string;
|
|
14
|
+
recordId: string;
|
|
15
|
+
record: Record<string, unknown>;
|
|
16
|
+
isNew: boolean;
|
|
17
|
+
mode: "display" | "edit";
|
|
18
|
+
onFieldChange?: (field: string, value: unknown) => void;
|
|
19
|
+
refs?: RefsMap;
|
|
20
|
+
columns?: number;
|
|
21
|
+
objectProperties?: PropertyValue[];
|
|
22
|
+
onSetProperty?: (propertyCode: string, value: unknown) => void;
|
|
23
|
+
isPropertyPending?: boolean;
|
|
24
|
+
objectStatuses?: StatusInfo[];
|
|
25
|
+
onSetStatus?: (groupCode: string, statusCode: string) => void;
|
|
26
|
+
isStatusPending?: boolean;
|
|
27
|
+
pendingChildren?: Record<string, PendingChildRow[]>;
|
|
28
|
+
onChildrenChange?: (childCode: string, rows: PendingChildRow[]) => void;
|
|
29
|
+
childValidationErrors?: Record<string, Record<string, string[]>>;
|
|
30
|
+
}
|
|
31
|
+
interface LayoutRendererProps {
|
|
32
|
+
nodes: LayoutNode[];
|
|
33
|
+
ctx: LayoutContext;
|
|
34
|
+
}
|
|
35
|
+
export declare function LayoutRenderer({ nodes, ctx }: LayoutRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
interface LayoutNodeRendererProps {
|
|
37
|
+
node: LayoutNode;
|
|
38
|
+
ctx: LayoutContext;
|
|
39
|
+
}
|
|
40
|
+
export declare function LayoutNodeRenderer({ node, ctx }: LayoutNodeRendererProps): import("react/jsx-runtime").JSX.Element | null;
|
|
41
|
+
export declare function getNodeKind(node: LayoutNode): string | null;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RowConfig } from "@/types/schema";
|
|
2
|
+
import { type LayoutContext } from "./LayoutRenderer";
|
|
3
|
+
interface LayoutRowProps {
|
|
4
|
+
config: RowConfig;
|
|
5
|
+
ctx: LayoutContext;
|
|
6
|
+
}
|
|
7
|
+
export declare function LayoutRow({ config, ctx }: LayoutRowProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TabsConfig } from "@/types/schema";
|
|
2
|
+
import { type LayoutContext } from "./LayoutRenderer";
|
|
3
|
+
interface LayoutTabsProps {
|
|
4
|
+
config: TabsConfig;
|
|
5
|
+
ctx: LayoutContext;
|
|
6
|
+
}
|
|
7
|
+
export declare function LayoutTabs({ config, ctx }: LayoutTabsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LayoutNode } from "@/types/schema";
|
|
2
|
+
import type { LayoutContext } from "./LayoutRenderer";
|
|
3
|
+
interface PropertiesBlockProps {
|
|
4
|
+
node: LayoutNode;
|
|
5
|
+
ctx: LayoutContext;
|
|
6
|
+
}
|
|
7
|
+
export declare function PropertiesBlock({ node, ctx }: PropertiesBlockProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ResolvedChildConfig } from "@/lib/child-config";
|
|
2
|
+
import type { Schema } from "@/types/schema";
|
|
3
|
+
interface QuickAddFormProps {
|
|
4
|
+
config: ResolvedChildConfig;
|
|
5
|
+
parentEntity: string;
|
|
6
|
+
parentId: string | string[];
|
|
7
|
+
schema: Schema;
|
|
8
|
+
}
|
|
9
|
+
export declare function QuickAddForm({ config, parentEntity, parentId, schema }: QuickAddFormProps): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SectionNode } from "@/types/schema";
|
|
2
|
+
import type { LayoutContext } from "./LayoutRenderer";
|
|
3
|
+
interface SectionBlockProps {
|
|
4
|
+
config: SectionNode;
|
|
5
|
+
ctx: LayoutContext;
|
|
6
|
+
}
|
|
7
|
+
export declare function SectionBlock({ config, ctx }: SectionBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LayoutNode } from "@/types/schema";
|
|
2
|
+
import type { LayoutContext } from "./LayoutRenderer";
|
|
3
|
+
interface StatusesBlockProps {
|
|
4
|
+
node: LayoutNode;
|
|
5
|
+
ctx: LayoutContext;
|
|
6
|
+
}
|
|
7
|
+
export declare function StatusesBlock({ node, ctx }: StatusesBlockProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ResolvedChildConfig } from "@/lib/child-config";
|
|
2
|
+
import type { Schema } from "@/types/schema";
|
|
3
|
+
interface TimelineComposerProps {
|
|
4
|
+
config: ResolvedChildConfig;
|
|
5
|
+
parentEntity: string;
|
|
6
|
+
parentId: string | string[];
|
|
7
|
+
schema: Schema;
|
|
8
|
+
}
|
|
9
|
+
export declare function TimelineComposer({ config, parentEntity, parentId, schema }: TimelineComposerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { LayoutRenderer, LayoutNodeRenderer, getNodeKind, type LayoutContext, type PendingChildRow } from "./LayoutRenderer";
|
|
2
|
+
export { LayoutRow } from "./LayoutRow";
|
|
3
|
+
export { LayoutColumn } from "./LayoutColumn";
|
|
4
|
+
export { LayoutTabs } from "./LayoutTabs";
|
|
5
|
+
export { SectionBlock } from "./SectionBlock";
|
|
6
|
+
export { FieldsBlock } from "./FieldsBlock";
|
|
7
|
+
export { ChildrenBlock, type ChildDisplayProps } from "./ChildrenBlock";
|
|
8
|
+
export { ChildrenTable } from "./ChildrenTable";
|
|
9
|
+
export { EditableChildrenTable } from "./EditableChildrenTable";
|
|
10
|
+
export { DraggableChildrenTable } from "./DraggableChildrenTable";
|
|
11
|
+
export { ChildrenList } from "./ChildrenList";
|
|
12
|
+
export { ChildrenCards } from "./ChildrenCards";
|
|
13
|
+
export { ChildrenTimeline } from "./ChildrenTimeline";
|
|
14
|
+
export { PropertiesBlock } from "./PropertiesBlock";
|
|
15
|
+
export { StatusesBlock } from "./StatusesBlock";
|
|
16
|
+
export { QuickAddForm } from "./QuickAddForm";
|
|
17
|
+
export { TimelineComposer } from "./TimelineComposer";
|
|
18
|
+
export { useQuickAdd } from "./useQuickAdd";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type FormEvent } from "react";
|
|
2
|
+
import type { ResolvedChildConfig } from "@/lib/child-config";
|
|
3
|
+
import type { Schema } from "@/types/schema";
|
|
4
|
+
export interface UseQuickAddResult {
|
|
5
|
+
values: Record<string, unknown>;
|
|
6
|
+
quickAdd: ResolvedChildConfig["quick_add"];
|
|
7
|
+
childEntity: ReturnType<typeof getChildEntity>;
|
|
8
|
+
isPending: boolean;
|
|
9
|
+
error: Error | null;
|
|
10
|
+
isReady: boolean;
|
|
11
|
+
handleSubmit: (e: FormEvent) => void;
|
|
12
|
+
handleFieldChange: (fieldName: string, val: unknown) => void;
|
|
13
|
+
}
|
|
14
|
+
type ChildEntity = Schema["entities"][string] | undefined;
|
|
15
|
+
declare function getChildEntity(schema: Schema, entityCode: string): ChildEntity;
|
|
16
|
+
export declare function useQuickAdd(config: ResolvedChildConfig, parentEntity: string, parentId: string | string[], schema: Schema): UseQuickAddResult;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "vanilla-jsoneditor/themes/jse-theme-dark.css";
|
|
2
|
+
interface JsonEditorProps {
|
|
3
|
+
value: unknown;
|
|
4
|
+
onChange?: (value: unknown) => void;
|
|
5
|
+
readOnly?: boolean;
|
|
6
|
+
schema?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export declare function JsonEditor({ value, onChange, readOnly }: JsonEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|