@lattice-php/lattice 0.12.0 → 0.14.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/core/components/card.js +9 -2
- package/dist/core/components/card.js.map +1 -1
- package/dist/core/components/collapsible.d.ts +3 -0
- package/dist/core/components/collapsible.js +67 -0
- package/dist/core/components/collapsible.js.map +1 -0
- package/dist/core/components/eager.d.ts +1 -0
- package/dist/core/components/eager.js +50 -0
- package/dist/core/components/eager.js.map +1 -0
- package/dist/core/components/heading.js +10 -8
- package/dist/core/components/heading.js.map +1 -1
- package/dist/core/components/index.js +5 -1
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/section.js +14 -7
- package/dist/core/components/section.js.map +1 -1
- package/dist/core/components/tooltip.d.ts +3 -0
- package/dist/core/components/tooltip.js +25 -0
- package/dist/core/components/tooltip.js.map +1 -0
- package/dist/core/renderer.js +1 -1
- package/dist/core/use-column-resizing.js +1 -5
- package/dist/core/use-column-resizing.js.map +1 -1
- package/dist/core/use-column-visibility.d.ts +18 -0
- package/dist/core/use-column-visibility.js +91 -0
- package/dist/core/use-column-visibility.js.map +1 -0
- package/dist/create-app.js +7 -3
- package/dist/create-app.js.map +1 -1
- package/dist/form/components/base/field.js +1 -1
- package/dist/form/components/fields/checkbox.js +2 -2
- package/dist/form/components/fields/select.js +3 -2
- package/dist/form/components/fields/select.js.map +1 -1
- package/dist/form/components/fields/toggle.js +1 -1
- package/dist/form/components/index.js +1 -1
- package/dist/form/eager.d.ts +1 -0
- package/dist/form/eager.js +47 -0
- package/dist/form/eager.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -5
- package/dist/provider-base.d.ts +10 -0
- package/dist/provider-base.js +27 -0
- package/dist/provider-base.js.map +1 -0
- package/dist/provider.d.ts +4 -7
- package/dist/provider.js +9 -22
- package/dist/provider.js.map +1 -1
- package/dist/registry/eager.d.ts +1 -0
- package/dist/registry/eager.js +14 -0
- package/dist/registry/eager.js.map +1 -0
- package/dist/registry/lazy.d.ts +1 -0
- package/dist/registry/lazy.js +14 -0
- package/dist/registry/lazy.js.map +1 -0
- package/dist/registry.d.ts +1 -1
- package/dist/registry.js +2 -14
- package/dist/table/components/column-visibility-menu.d.ts +10 -0
- package/dist/table/components/column-visibility-menu.js +53 -0
- package/dist/table/components/column-visibility-menu.js.map +1 -0
- package/dist/table/components/filter-controls.js +1 -1
- package/dist/table/components/table.js +37 -18
- package/dist/table/components/table.js.map +1 -1
- package/dist/table/eager.d.ts +1 -0
- package/dist/table/eager.js +11 -0
- package/dist/table/eager.js.map +1 -0
- package/dist/table/use-table.js +1 -1
- package/dist/types/generated.d.ts +24 -0
- package/package.json +9 -1
- package/dist/registry.js.map +0 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { useCallback, useMemo, useState } from "react";
|
|
2
|
+
//#region resources/js/core/use-column-visibility.ts
|
|
3
|
+
function useColumnVisibility({ columns, storageKey }) {
|
|
4
|
+
const toggleableColumns = useMemo(() => columns.filter((column) => column.toggleable === true), [columns]);
|
|
5
|
+
const toggleableKeys = useMemo(() => toggleableColumns.map((column) => column.key), [toggleableColumns]);
|
|
6
|
+
const [overrides, setOverrides] = useState(() => readStoredVisibility(storageKey, toggleableKeys));
|
|
7
|
+
const isVisible = useCallback((column) => {
|
|
8
|
+
if (column.toggleable !== true) return true;
|
|
9
|
+
return overrides[column.key] ?? column.hiddenByDefault !== true;
|
|
10
|
+
}, [overrides]);
|
|
11
|
+
const visibleColumns = useMemo(() => columns.filter((column) => isVisible(column)), [columns, isVisible]);
|
|
12
|
+
const setColumnVisible = useCallback((key, visible) => {
|
|
13
|
+
setOverrides((current) => {
|
|
14
|
+
const next = {
|
|
15
|
+
...current,
|
|
16
|
+
[key]: visible
|
|
17
|
+
};
|
|
18
|
+
writeStoredVisibility(storageKey, toggleableKeys, next);
|
|
19
|
+
return next;
|
|
20
|
+
});
|
|
21
|
+
}, [storageKey, toggleableKeys]);
|
|
22
|
+
const resetVisibility = useCallback(() => {
|
|
23
|
+
setOverrides({});
|
|
24
|
+
writeStoredVisibility(storageKey, toggleableKeys, {});
|
|
25
|
+
}, [storageKey, toggleableKeys]);
|
|
26
|
+
const hasToggleableColumns = toggleableColumns.length > 0;
|
|
27
|
+
return {
|
|
28
|
+
hasHidden: toggleableColumns.some((column) => !isVisible(column)),
|
|
29
|
+
hasToggleableColumns,
|
|
30
|
+
isVisible,
|
|
31
|
+
resetVisibility,
|
|
32
|
+
setColumnVisible,
|
|
33
|
+
toggleableColumns,
|
|
34
|
+
visibleColumns
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function readStoredVisibility(storageKey, toggleableKeys) {
|
|
38
|
+
if (!storageKey || typeof window === "undefined") return {};
|
|
39
|
+
try {
|
|
40
|
+
const raw = window.localStorage.getItem(storageKey);
|
|
41
|
+
if (raw === null) return {};
|
|
42
|
+
const stored = JSON.parse(raw);
|
|
43
|
+
if (!isStoredColumnVisibility(stored)) {
|
|
44
|
+
removeStoredVisibility(storageKey);
|
|
45
|
+
return {};
|
|
46
|
+
}
|
|
47
|
+
const known = new Set(toggleableKeys);
|
|
48
|
+
const overrides = {};
|
|
49
|
+
for (const [key, value] of Object.entries(stored.overrides)) if (known.has(key) && typeof value === "boolean") overrides[key] = value;
|
|
50
|
+
if (Object.keys(overrides).length === 0) removeStoredVisibility(storageKey);
|
|
51
|
+
return overrides;
|
|
52
|
+
} catch {
|
|
53
|
+
removeStoredVisibility(storageKey);
|
|
54
|
+
return {};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function writeStoredVisibility(storageKey, toggleableKeys, overrides) {
|
|
58
|
+
if (!storageKey || typeof window === "undefined") return;
|
|
59
|
+
const known = new Set(toggleableKeys);
|
|
60
|
+
const stored = {};
|
|
61
|
+
for (const [key, value] of Object.entries(overrides)) if (known.has(key) && typeof value === "boolean") stored[key] = value;
|
|
62
|
+
if (Object.keys(stored).length === 0) {
|
|
63
|
+
removeStoredVisibility(storageKey);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
window.localStorage.setItem(storageKey, JSON.stringify({
|
|
68
|
+
columns: toggleableKeys,
|
|
69
|
+
overrides: stored
|
|
70
|
+
}));
|
|
71
|
+
} catch {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function removeStoredVisibility(storageKey) {
|
|
76
|
+
if (typeof window === "undefined") return;
|
|
77
|
+
try {
|
|
78
|
+
window.localStorage.removeItem(storageKey);
|
|
79
|
+
} catch {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function isStoredColumnVisibility(value) {
|
|
84
|
+
if (typeof value !== "object" || value === null) return false;
|
|
85
|
+
const record = value;
|
|
86
|
+
return Array.isArray(record.columns) && record.columns.every((column) => typeof column === "string") && typeof record.overrides === "object" && record.overrides !== null && !Array.isArray(record.overrides);
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
export { useColumnVisibility };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=use-column-visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-column-visibility.js","names":[],"sources":["../../resources/js/core/use-column-visibility.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport type ToggleableColumn = {\n key: string;\n label?: string;\n toggleable?: boolean | null;\n hiddenByDefault?: boolean | null;\n};\n\ntype StoredColumnVisibility = {\n columns: string[];\n overrides: Record<string, boolean>;\n};\n\nexport function useColumnVisibility<TColumn extends ToggleableColumn>({\n columns,\n storageKey,\n}: {\n columns: TColumn[];\n storageKey?: string;\n}) {\n const toggleableColumns = useMemo(\n () => columns.filter((column) => column.toggleable === true),\n [columns],\n );\n const toggleableKeys = useMemo(\n () => toggleableColumns.map((column) => column.key),\n [toggleableColumns],\n );\n\n const [overrides, setOverrides] = useState<Record<string, boolean>>(() =>\n readStoredVisibility(storageKey, toggleableKeys),\n );\n\n const isVisible = useCallback(\n (column: ToggleableColumn): boolean => {\n if (column.toggleable !== true) {\n return true;\n }\n\n return overrides[column.key] ?? column.hiddenByDefault !== true;\n },\n [overrides],\n );\n\n const visibleColumns = useMemo(\n () => columns.filter((column) => isVisible(column)),\n [columns, isVisible],\n );\n\n const setColumnVisible = useCallback(\n (key: string, visible: boolean) => {\n setOverrides((current) => {\n const next = { ...current, [key]: visible };\n writeStoredVisibility(storageKey, toggleableKeys, next);\n\n return next;\n });\n },\n [storageKey, toggleableKeys],\n );\n\n const resetVisibility = useCallback(() => {\n setOverrides({});\n writeStoredVisibility(storageKey, toggleableKeys, {});\n }, [storageKey, toggleableKeys]);\n\n const hasToggleableColumns = toggleableColumns.length > 0;\n const hasHidden = toggleableColumns.some((column) => !isVisible(column));\n\n return {\n hasHidden,\n hasToggleableColumns,\n isVisible,\n resetVisibility,\n setColumnVisible,\n toggleableColumns,\n visibleColumns,\n };\n}\n\nfunction readStoredVisibility(\n storageKey: string | undefined,\n toggleableKeys: string[],\n): Record<string, boolean> {\n if (!storageKey || typeof window === \"undefined\") {\n return {};\n }\n\n try {\n const raw = window.localStorage.getItem(storageKey);\n\n if (raw === null) {\n return {};\n }\n\n const stored = JSON.parse(raw) as unknown;\n\n if (!isStoredColumnVisibility(stored)) {\n removeStoredVisibility(storageKey);\n\n return {};\n }\n\n const known = new Set(toggleableKeys);\n const overrides: Record<string, boolean> = {};\n\n for (const [key, value] of Object.entries(stored.overrides)) {\n if (known.has(key) && typeof value === \"boolean\") {\n overrides[key] = value;\n }\n }\n\n if (Object.keys(overrides).length === 0) {\n removeStoredVisibility(storageKey);\n }\n\n return overrides;\n } catch {\n removeStoredVisibility(storageKey);\n\n return {};\n }\n}\n\nfunction writeStoredVisibility(\n storageKey: string | undefined,\n toggleableKeys: string[],\n overrides: Record<string, boolean>,\n): void {\n if (!storageKey || typeof window === \"undefined\") {\n return;\n }\n\n const known = new Set(toggleableKeys);\n const stored: Record<string, boolean> = {};\n\n for (const [key, value] of Object.entries(overrides)) {\n if (known.has(key) && typeof value === \"boolean\") {\n stored[key] = value;\n }\n }\n\n if (Object.keys(stored).length === 0) {\n removeStoredVisibility(storageKey);\n\n return;\n }\n\n try {\n window.localStorage.setItem(\n storageKey,\n JSON.stringify({ columns: toggleableKeys, overrides: stored }),\n );\n } catch {\n return;\n }\n}\n\nfunction removeStoredVisibility(storageKey: string): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n try {\n window.localStorage.removeItem(storageKey);\n } catch {\n return;\n }\n}\n\nfunction isStoredColumnVisibility(value: unknown): value is StoredColumnVisibility {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n\n return (\n Array.isArray(record.columns) &&\n record.columns.every((column) => typeof column === \"string\") &&\n typeof record.overrides === \"object\" &&\n record.overrides !== null &&\n !Array.isArray(record.overrides)\n );\n}\n"],"mappings":"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"}
|
package/dist/create-app.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { initializeTheme } from "./appearance/index.js";
|
|
2
|
+
import { setDefaultRegistry } from "./core/registry-context.js";
|
|
2
3
|
import { createLayoutResolver, createPageResolver } from "./inertia.js";
|
|
3
|
-
import {
|
|
4
|
+
import { ProviderBase } from "./provider-base.js";
|
|
5
|
+
import { lazyRegistry } from "./registry/lazy.js";
|
|
4
6
|
import { createInertiaApp } from "@inertiajs/react";
|
|
5
7
|
import { jsx } from "react/jsx-runtime";
|
|
6
8
|
//#region resources/js/create-app.tsx
|
|
@@ -11,13 +13,15 @@ import { jsx } from "react/jsx-runtime";
|
|
|
11
13
|
* initialization. Forwards any other createInertiaApp option.
|
|
12
14
|
*/
|
|
13
15
|
function createLatticeApp({ registry, sprite, pages = {}, defaultLayout, strictMode = true, ...inertiaOptions } = {}) {
|
|
16
|
+
const activeRegistry = registry ?? lazyRegistry;
|
|
17
|
+
setDefaultRegistry(activeRegistry);
|
|
14
18
|
const app = createInertiaApp({
|
|
15
19
|
...inertiaOptions,
|
|
16
20
|
strictMode,
|
|
17
21
|
resolve: createPageResolver(pages),
|
|
18
22
|
layout: createLayoutResolver({ defaultLayout }),
|
|
19
|
-
withApp: (node) => /* @__PURE__ */ jsx(
|
|
20
|
-
registry,
|
|
23
|
+
withApp: (node) => /* @__PURE__ */ jsx(ProviderBase, {
|
|
24
|
+
registry: activeRegistry,
|
|
21
25
|
sprite,
|
|
22
26
|
children: node
|
|
23
27
|
})
|
package/dist/create-app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-app.js","names":[],"sources":["../resources/js/create-app.tsx"],"sourcesContent":["import { createInertiaApp } from \"@inertiajs/react\";\nimport type { ReactElement } from \"react\";\nimport { initializeTheme } from \"./appearance\";\nimport type { Registry } from \"./core/registry\";\nimport type { SpriteValue } from \"./icons/sprite\";\nimport {\n createLayoutResolver,\n createPageResolver,\n type CreateLayoutResolverOptions,\n type PageModules,\n} from \"./inertia\";\nimport {
|
|
1
|
+
{"version":3,"file":"create-app.js","names":[],"sources":["../resources/js/create-app.tsx"],"sourcesContent":["import { createInertiaApp } from \"@inertiajs/react\";\nimport type { ReactElement } from \"react\";\nimport { initializeTheme } from \"./appearance\";\nimport type { Registry } from \"./core/registry\";\nimport { setDefaultRegistry } from \"./core/registry-context\";\nimport type { SpriteValue } from \"./icons/sprite\";\nimport {\n createLayoutResolver,\n createPageResolver,\n type CreateLayoutResolverOptions,\n type PageModules,\n} from \"./inertia\";\nimport { ProviderBase } from \"./provider-base\";\nimport { registry as defaultRegistry } from \"./registry\";\n\ntype InertiaAppOptions = NonNullable<Parameters<typeof createInertiaApp>[0]>;\n\nexport type CreateLatticeAppOptions = Omit<\n InertiaAppOptions,\n \"resolve\" | \"layout\" | \"setup\" | \"withApp\" | \"pages\"\n> & {\n registry?: Registry;\n sprite?: SpriteValue;\n /** Normal Inertia page modules, e.g. `import.meta.glob('./pages/**\\/*.tsx')`. */\n pages?: PageModules;\n defaultLayout?: CreateLayoutResolverOptions[\"defaultLayout\"];\n};\n\n/**\n * Bootstrap an Inertia app with the Lattice shell: the page/layout resolvers\n * (server-driven Lattice pages and normal Inertia pages alike), the Provider —\n * registry, sprite, flash toasts via Lattice's own Toaster — and theme\n * initialization. Forwards any other createInertiaApp option.\n */\nexport function createLatticeApp({\n registry,\n sprite,\n pages = {},\n defaultLayout,\n strictMode = true,\n ...inertiaOptions\n}: CreateLatticeAppOptions = {}) {\n const activeRegistry = registry ?? defaultRegistry;\n\n setDefaultRegistry(activeRegistry);\n\n const app = createInertiaApp({\n ...inertiaOptions,\n strictMode,\n resolve: createPageResolver(pages),\n layout: createLayoutResolver({ defaultLayout }),\n withApp: (node: ReactElement): ReactElement => (\n <ProviderBase registry={activeRegistry} sprite={sprite}>\n {node}\n </ProviderBase>\n ),\n });\n\n initializeTheme();\n\n return app;\n}\n"],"mappings":";;;;;;;;;;;;;;AAkCA,SAAgB,iBAAiB,EAC/B,UACA,QACA,QAAQ,CAAC,GACT,eACA,aAAa,MACb,GAAG,mBACwB,CAAC,GAAG;CAC/B,MAAM,iBAAiB,YAAY;CAEnC,mBAAmB,cAAc;CAEjC,MAAM,MAAM,iBAAiB;EAC3B,GAAG;EACH;EACA,SAAS,mBAAmB,KAAK;EACjC,QAAQ,qBAAqB,EAAE,cAAc,CAAC;EAC9C,UAAU,SACR,oBAAC,cAAD;GAAc,UAAU;GAAwB;aAC7C;EACW,CAAA;CAElB,CAAC;CAED,gBAAgB;CAEhB,OAAO;AACT"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TextLink } from "../../../core/components/link.js";
|
|
2
1
|
import { InfoTooltip } from "../../../core/components/info-tooltip.js";
|
|
2
|
+
import { TextLink } from "../../../core/components/link.js";
|
|
3
3
|
import InputError from "./input-error.js";
|
|
4
4
|
import { Label } from "./label.js";
|
|
5
5
|
import { useInTableCell } from "../row-layout-context.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { testIdentity } from "../../../core/test-id.js";
|
|
2
2
|
import { useFieldScope } from "../field-scope.js";
|
|
3
3
|
import { useFormValue } from "../values.js";
|
|
4
|
-
import { Checkbox } from "../../../core/components/checkbox.js";
|
|
5
|
-
import { toBoolean } from "../conditions.js";
|
|
6
4
|
import { Label } from "../base/label.js";
|
|
5
|
+
import { toBoolean } from "../conditions.js";
|
|
7
6
|
import { useDependentField } from "../use-dependent-field.js";
|
|
7
|
+
import { Checkbox } from "../../../core/components/checkbox.js";
|
|
8
8
|
import { useFieldCommit } from "../use-field-commit.js";
|
|
9
9
|
import { useSeedDefault } from "../use-seed-default.js";
|
|
10
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -6,11 +6,11 @@ import { postFormAction } from "../form-transport.js";
|
|
|
6
6
|
import { useFieldScope } from "../field-scope.js";
|
|
7
7
|
import { useResolvedNode } from "../resolved-nodes.js";
|
|
8
8
|
import { useFormValue, useFormValues } from "../values.js";
|
|
9
|
-
import { Combobox } from "../../../core/components/combobox.js";
|
|
10
|
-
import { controlSurface } from "../../../core/components/control.js";
|
|
11
9
|
import { FormFieldFrame } from "../base/field.js";
|
|
12
10
|
import { useDependentField } from "../use-dependent-field.js";
|
|
13
11
|
import { useFieldCommit } from "../use-field-commit.js";
|
|
12
|
+
import { controlSurface } from "../../../core/components/control.js";
|
|
13
|
+
import { Combobox } from "../../../core/components/combobox.js";
|
|
14
14
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
15
15
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
16
16
|
//#region resources/js/form/components/fields/select.tsx
|
|
@@ -132,6 +132,7 @@ var SelectComponent = ({ node }) => {
|
|
|
132
132
|
},
|
|
133
133
|
options,
|
|
134
134
|
searchPlaceholder: props.searchPlaceholder ?? void 0,
|
|
135
|
+
showSearch: Boolean(searchable),
|
|
135
136
|
selected,
|
|
136
137
|
testId: `select-${name}`,
|
|
137
138
|
trigger: /* @__PURE__ */ jsxs(Fragment$1, { children: [!multiple && selected.length > 0 ? /* @__PURE__ */ jsx("span", { children: labelFor(selected[0]) }) : /* @__PURE__ */ jsx("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","names":[],"sources":["../../../../resources/js/form/components/fields/select.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport { Combobox } from \"@lattice-php/lattice/core/components/combobox\";\nimport { controlSurface } from \"@lattice-php/lattice/core/components/control\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { Option, RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { useFormContext } from \"../context\";\nimport { postFormAction } from \"../form-transport\";\nimport { useResolvedNode } from \"../resolved-nodes\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { useFieldCommit } from \"../use-field-commit\";\nimport { useFieldScope } from \"../field-scope\";\nimport { useFormValue, useFormValues } from \"../values\";\n\nfunction toValues(stored: unknown, fallback: unknown): string[] {\n const source = stored ?? fallback;\n\n if (Array.isArray(source)) {\n return source.map(String);\n }\n\n if (source === undefined || source === null || source === \"\") {\n return [];\n }\n\n return [String(source)];\n}\n\nexport const SelectComponent: RendererComponent<\"field.select\"> = ({ node }) => {\n const { t } = useT(\"lattice\");\n const props = node.props;\n const { action, componentRef, errors } = useFormContext();\n const { hidden, required, readOnly, disabled } = useDependentField(node);\n const { change, blur } = useFieldCommit();\n const resolvedNode = useResolvedNode(node);\n const name = props.name;\n const scope = useFieldScope();\n const domName = scope ? scope.scopedName(name) : name;\n const errorKey = scope ? scope.errorKey(name) : name;\n const searchKey = scope ? scope.errorKey(name) : name;\n const placeholder = props.placeholder || \"Select…\";\n const multiple = props.multiple;\n const searchable = props.searchable;\n const staticOptions = useMemo(\n () => (resolvedNode.props as { options?: Option[] }).options ?? [],\n [resolvedNode.props],\n );\n\n const globalValue = useFormValue(name);\n const values = useFormValues();\n const valuesRef = useRef(values);\n valuesRef.current = values;\n const storedValue = scope ? scope.getValue(name) : globalValue;\n const selected = useMemo(() => toValues(storedValue, props.value), [storedValue, props.value]);\n\n const [open, setOpen] = useState(false);\n const [results, setResults] = useState<Option[] | null>(null);\n const [loading, setLoading] = useState(false);\n const searchAbort = useRef<AbortController | null>(null);\n\n const labels = useMemo(() => {\n const map = new Map<string, string>();\n for (const option of [...staticOptions, ...(results ?? [])]) {\n map.set(option.value, option.label);\n }\n return map;\n }, [staticOptions, results]);\n const labelFor = (value: string) => labels.get(value) ?? value;\n\n const locked = readOnly || disabled;\n\n const search = useCallback(\n (query: string) => {\n searchAbort.current?.abort();\n\n if (query.trim() === \"\") {\n setResults(null);\n setLoading(false);\n\n return;\n }\n\n const controller = new AbortController();\n searchAbort.current = controller;\n setLoading(true);\n\n void postFormAction<{ options?: Option[] }>(\n action,\n componentRef,\n { ...valuesRef.current, _search: searchKey, q: query },\n controller.signal,\n )\n .then((response) => {\n setResults(response?.options ?? []);\n setLoading(false);\n })\n .catch(() => {});\n },\n [action, componentRef, searchKey],\n );\n\n function commit(next: string[]): void {\n change(name, multiple ? next : (next[0] ?? \"\"));\n }\n\n function select(value: string): void {\n if (multiple) {\n commit(\n selected.includes(value) ? selected.filter((item) => item !== value) : [...selected, value],\n );\n\n return;\n }\n\n commit([value]);\n }\n\n function remove(value: string): void {\n commit(selected.filter((item) => item !== value));\n }\n\n if (hidden) {\n return null;\n }\n\n const options = searchable ? (results ?? staticOptions) : staticOptions;\n\n return (\n <FormFieldFrame\n error={errors[errorKey]}\n helperText={props.helperText ?? undefined}\n tooltip={props.tooltip ?? undefined}\n label={props.label ?? \"\"}\n name={name}\n required={required}\n >\n {multiple ? (\n selected.map((value) => (\n <input key={value} name={`${domName}[]`} type=\"hidden\" value={value} />\n ))\n ) : (\n <input name={domName} type=\"hidden\" value={selected[0] ?? \"\"} />\n )}\n\n <div>\n {multiple && selected.length > 0 && (\n <div className=\"mb-1.5 flex flex-wrap gap-1\">\n {selected.map((value) => (\n <span\n className=\"inline-flex items-center gap-1 rounded-lt-sm bg-lt-muted px-2 py-0.5 text-xs\"\n key={value}\n >\n {labelFor(value)}\n {!locked && (\n <button\n aria-label={t(\"form.removeOption\", \"Remove {{label}}\", {\n label: labelFor(value),\n })}\n data-test={`select-${name}-remove-${value}`}\n className=\"text-lt-muted-fg hover:text-lt-fg [&_svg]:size-lt-icon-xs\"\n onClick={() => remove(value)}\n type=\"button\"\n >\n <Icon name=\"x\" />\n </button>\n )}\n </span>\n ))}\n </div>\n )}\n\n <Combobox\n emptyLabel={props.emptyLabel ?? undefined}\n loading={loading}\n multiple={multiple}\n onSearch={searchable ? search : undefined}\n onSelect={select}\n open={open && !locked}\n onOpenChange={(next) => {\n setOpen(next);\n\n if (!next) {\n blur(name);\n }\n }}\n options={options}\n searchPlaceholder={props.searchPlaceholder ?? undefined}\n selected={selected}\n testId={`select-${name}`}\n trigger={\n <>\n {!multiple && selected.length > 0 ? (\n <span>{labelFor(selected[0])}</span>\n ) : (\n <span className=\"text-lt-muted-fg\">{placeholder}</span>\n )}\n <Icon name=\"chevrons-up-down\" className=\"size-lt-icon-md shrink-0 text-lt-muted-fg\" />\n </>\n }\n triggerClassName={cn(\n controlSurface(),\n \"flex items-center justify-between gap-2 text-left\",\n locked && \"cursor-not-allowed opacity-60\",\n )}\n triggerProps={{\n \"aria-haspopup\": \"listbox\",\n autoFocus: props.autoFocus ?? undefined,\n \"data-test\": `select-${name}`,\n disabled: locked,\n tabIndex: props.tabIndex ?? undefined,\n }}\n />\n </div>\n </FormFieldFrame>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select.js","names":[],"sources":["../../../../resources/js/form/components/fields/select.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport { Combobox } from \"@lattice-php/lattice/core/components/combobox\";\nimport { controlSurface } from \"@lattice-php/lattice/core/components/control\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { Option, RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { useFormContext } from \"../context\";\nimport { postFormAction } from \"../form-transport\";\nimport { useResolvedNode } from \"../resolved-nodes\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { useFieldCommit } from \"../use-field-commit\";\nimport { useFieldScope } from \"../field-scope\";\nimport { useFormValue, useFormValues } from \"../values\";\n\nfunction toValues(stored: unknown, fallback: unknown): string[] {\n const source = stored ?? fallback;\n\n if (Array.isArray(source)) {\n return source.map(String);\n }\n\n if (source === undefined || source === null || source === \"\") {\n return [];\n }\n\n return [String(source)];\n}\n\nexport const SelectComponent: RendererComponent<\"field.select\"> = ({ node }) => {\n const { t } = useT(\"lattice\");\n const props = node.props;\n const { action, componentRef, errors } = useFormContext();\n const { hidden, required, readOnly, disabled } = useDependentField(node);\n const { change, blur } = useFieldCommit();\n const resolvedNode = useResolvedNode(node);\n const name = props.name;\n const scope = useFieldScope();\n const domName = scope ? scope.scopedName(name) : name;\n const errorKey = scope ? scope.errorKey(name) : name;\n const searchKey = scope ? scope.errorKey(name) : name;\n const placeholder = props.placeholder || \"Select…\";\n const multiple = props.multiple;\n const searchable = props.searchable;\n const staticOptions = useMemo(\n () => (resolvedNode.props as { options?: Option[] }).options ?? [],\n [resolvedNode.props],\n );\n\n const globalValue = useFormValue(name);\n const values = useFormValues();\n const valuesRef = useRef(values);\n valuesRef.current = values;\n const storedValue = scope ? scope.getValue(name) : globalValue;\n const selected = useMemo(() => toValues(storedValue, props.value), [storedValue, props.value]);\n\n const [open, setOpen] = useState(false);\n const [results, setResults] = useState<Option[] | null>(null);\n const [loading, setLoading] = useState(false);\n const searchAbort = useRef<AbortController | null>(null);\n\n const labels = useMemo(() => {\n const map = new Map<string, string>();\n for (const option of [...staticOptions, ...(results ?? [])]) {\n map.set(option.value, option.label);\n }\n return map;\n }, [staticOptions, results]);\n const labelFor = (value: string) => labels.get(value) ?? value;\n\n const locked = readOnly || disabled;\n\n const search = useCallback(\n (query: string) => {\n searchAbort.current?.abort();\n\n if (query.trim() === \"\") {\n setResults(null);\n setLoading(false);\n\n return;\n }\n\n const controller = new AbortController();\n searchAbort.current = controller;\n setLoading(true);\n\n void postFormAction<{ options?: Option[] }>(\n action,\n componentRef,\n { ...valuesRef.current, _search: searchKey, q: query },\n controller.signal,\n )\n .then((response) => {\n setResults(response?.options ?? []);\n setLoading(false);\n })\n .catch(() => {});\n },\n [action, componentRef, searchKey],\n );\n\n function commit(next: string[]): void {\n change(name, multiple ? next : (next[0] ?? \"\"));\n }\n\n function select(value: string): void {\n if (multiple) {\n commit(\n selected.includes(value) ? selected.filter((item) => item !== value) : [...selected, value],\n );\n\n return;\n }\n\n commit([value]);\n }\n\n function remove(value: string): void {\n commit(selected.filter((item) => item !== value));\n }\n\n if (hidden) {\n return null;\n }\n\n const options = searchable ? (results ?? staticOptions) : staticOptions;\n\n return (\n <FormFieldFrame\n error={errors[errorKey]}\n helperText={props.helperText ?? undefined}\n tooltip={props.tooltip ?? undefined}\n label={props.label ?? \"\"}\n name={name}\n required={required}\n >\n {multiple ? (\n selected.map((value) => (\n <input key={value} name={`${domName}[]`} type=\"hidden\" value={value} />\n ))\n ) : (\n <input name={domName} type=\"hidden\" value={selected[0] ?? \"\"} />\n )}\n\n <div>\n {multiple && selected.length > 0 && (\n <div className=\"mb-1.5 flex flex-wrap gap-1\">\n {selected.map((value) => (\n <span\n className=\"inline-flex items-center gap-1 rounded-lt-sm bg-lt-muted px-2 py-0.5 text-xs\"\n key={value}\n >\n {labelFor(value)}\n {!locked && (\n <button\n aria-label={t(\"form.removeOption\", \"Remove {{label}}\", {\n label: labelFor(value),\n })}\n data-test={`select-${name}-remove-${value}`}\n className=\"text-lt-muted-fg hover:text-lt-fg [&_svg]:size-lt-icon-xs\"\n onClick={() => remove(value)}\n type=\"button\"\n >\n <Icon name=\"x\" />\n </button>\n )}\n </span>\n ))}\n </div>\n )}\n\n <Combobox\n emptyLabel={props.emptyLabel ?? undefined}\n loading={loading}\n multiple={multiple}\n onSearch={searchable ? search : undefined}\n onSelect={select}\n open={open && !locked}\n onOpenChange={(next) => {\n setOpen(next);\n\n if (!next) {\n blur(name);\n }\n }}\n options={options}\n searchPlaceholder={props.searchPlaceholder ?? undefined}\n showSearch={Boolean(searchable)}\n selected={selected}\n testId={`select-${name}`}\n trigger={\n <>\n {!multiple && selected.length > 0 ? (\n <span>{labelFor(selected[0])}</span>\n ) : (\n <span className=\"text-lt-muted-fg\">{placeholder}</span>\n )}\n <Icon name=\"chevrons-up-down\" className=\"size-lt-icon-md shrink-0 text-lt-muted-fg\" />\n </>\n }\n triggerClassName={cn(\n controlSurface(),\n \"flex items-center justify-between gap-2 text-left\",\n locked && \"cursor-not-allowed opacity-60\",\n )}\n triggerProps={{\n \"aria-haspopup\": \"listbox\",\n autoFocus: props.autoFocus ?? undefined,\n \"data-test\": `select-${name}`,\n disabled: locked,\n tabIndex: props.tabIndex ?? undefined,\n }}\n />\n </div>\n </FormFieldFrame>\n );\n};\n"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { testIdentity } from "../../../core/test-id.js";
|
|
|
3
3
|
import { useFormContext } from "../context.js";
|
|
4
4
|
import { useFieldScope } from "../field-scope.js";
|
|
5
5
|
import { useFormValue } from "../values.js";
|
|
6
|
-
import { toBoolean } from "../conditions.js";
|
|
7
6
|
import { FormFieldFrame } from "../base/field.js";
|
|
7
|
+
import { toBoolean } from "../conditions.js";
|
|
8
8
|
import { useDependentField } from "../use-dependent-field.js";
|
|
9
9
|
import { useFieldCommit } from "../use-field-commit.js";
|
|
10
10
|
import { useSeedDefault } from "../use-seed-default.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { FormComponent } from "./form.js";
|
|
2
1
|
import { BuilderComponent } from "./fields/builder.js";
|
|
3
2
|
import { CheckboxComponent } from "./fields/checkbox.js";
|
|
4
3
|
import { ChoiceComponent } from "./fields/choice.js";
|
|
5
4
|
import { DateInputComponent } from "./fields/date-input.js";
|
|
6
5
|
import { DateTimeInputComponent } from "./fields/date-time-input.js";
|
|
7
6
|
import { FileUploadComponent } from "./fields/file-upload.js";
|
|
7
|
+
import { FormComponent } from "./form.js";
|
|
8
8
|
import { HiddenInputComponent } from "./fields/hidden-input.js";
|
|
9
9
|
import { NumberInputComponent } from "./fields/number-input.js";
|
|
10
10
|
import { OtpInputComponent } from "./fields/otp-input.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const eagerFormComponents: import('../core/registry').Plugin;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createPlugin, eagerComponent } from "../core/registry.js";
|
|
2
|
+
import { BuilderComponent } from "./components/fields/builder.js";
|
|
3
|
+
import { CheckboxComponent } from "./components/fields/checkbox.js";
|
|
4
|
+
import { ChoiceComponent } from "./components/fields/choice.js";
|
|
5
|
+
import { DateInputComponent } from "./components/fields/date-input.js";
|
|
6
|
+
import { DateTimeInputComponent } from "./components/fields/date-time-input.js";
|
|
7
|
+
import { FileUploadComponent } from "./components/fields/file-upload.js";
|
|
8
|
+
import { FormComponent } from "./components/form.js";
|
|
9
|
+
import { HiddenInputComponent } from "./components/fields/hidden-input.js";
|
|
10
|
+
import { NumberInputComponent } from "./components/fields/number-input.js";
|
|
11
|
+
import { OtpInputComponent } from "./components/fields/otp-input.js";
|
|
12
|
+
import { PasswordInputComponent } from "./components/fields/password-input.js";
|
|
13
|
+
import { RepeaterComponent } from "./components/fields/repeater.js";
|
|
14
|
+
import { SelectComponent } from "./components/fields/select.js";
|
|
15
|
+
import { TextareaComponent } from "./components/fields/textarea.js";
|
|
16
|
+
import { TextInputComponent } from "./components/fields/text-input.js";
|
|
17
|
+
import { TimeInputComponent } from "./components/fields/time-input.js";
|
|
18
|
+
import { ToggleComponent } from "./components/fields/toggle.js";
|
|
19
|
+
import { RichEditorComponent } from "./components/fields/rich-editor.js";
|
|
20
|
+
//#region resources/js/form/eager.ts
|
|
21
|
+
var eagerFormComponents = createPlugin({
|
|
22
|
+
components: {
|
|
23
|
+
form: eagerComponent(FormComponent),
|
|
24
|
+
"field.builder": eagerComponent(BuilderComponent),
|
|
25
|
+
"field.checkbox": eagerComponent(CheckboxComponent),
|
|
26
|
+
"field.choice": eagerComponent(ChoiceComponent),
|
|
27
|
+
"field.date-input": eagerComponent(DateInputComponent),
|
|
28
|
+
"field.date-time-input": eagerComponent(DateTimeInputComponent),
|
|
29
|
+
"field.file-upload": eagerComponent(FileUploadComponent),
|
|
30
|
+
"field.hidden-input": eagerComponent(HiddenInputComponent),
|
|
31
|
+
"field.number-input": eagerComponent(NumberInputComponent),
|
|
32
|
+
"field.otp": eagerComponent(OtpInputComponent),
|
|
33
|
+
"field.password-input": eagerComponent(PasswordInputComponent),
|
|
34
|
+
"field.repeater": eagerComponent(RepeaterComponent),
|
|
35
|
+
"field.rich-editor": eagerComponent(RichEditorComponent),
|
|
36
|
+
"field.select": eagerComponent(SelectComponent),
|
|
37
|
+
"field.textarea": eagerComponent(TextareaComponent),
|
|
38
|
+
"field.text-input": eagerComponent(TextInputComponent),
|
|
39
|
+
"field.time-input": eagerComponent(TimeInputComponent),
|
|
40
|
+
"field.toggle": eagerComponent(ToggleComponent)
|
|
41
|
+
},
|
|
42
|
+
name: "lattice/form"
|
|
43
|
+
});
|
|
44
|
+
//#endregion
|
|
45
|
+
export { eagerFormComponents };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=eager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eager.js","names":[],"sources":["../../resources/js/form/eager.ts"],"sourcesContent":["import { createPlugin, eagerComponent } from \"@lattice-php/lattice/core/registry\";\nimport {\n BuilderComponent,\n CheckboxComponent,\n ChoiceComponent,\n DateInputComponent,\n DateTimeInputComponent,\n FileUploadComponent,\n FormComponent,\n HiddenInputComponent,\n NumberInputComponent,\n OtpInputComponent,\n PasswordInputComponent,\n RepeaterComponent,\n SelectComponent,\n TextareaComponent,\n TextInputComponent,\n TimeInputComponent,\n ToggleComponent,\n} from \"./components\";\nimport { RichEditorComponent } from \"./components/fields/rich-editor\";\n\nexport const eagerFormComponents = createPlugin({\n components: {\n form: eagerComponent(FormComponent),\n \"field.builder\": eagerComponent(BuilderComponent),\n \"field.checkbox\": eagerComponent(CheckboxComponent),\n \"field.choice\": eagerComponent(ChoiceComponent),\n \"field.date-input\": eagerComponent(DateInputComponent),\n \"field.date-time-input\": eagerComponent(DateTimeInputComponent),\n \"field.file-upload\": eagerComponent(FileUploadComponent),\n \"field.hidden-input\": eagerComponent(HiddenInputComponent),\n \"field.number-input\": eagerComponent(NumberInputComponent),\n \"field.otp\": eagerComponent(OtpInputComponent),\n \"field.password-input\": eagerComponent(PasswordInputComponent),\n \"field.repeater\": eagerComponent(RepeaterComponent),\n \"field.rich-editor\": eagerComponent(RichEditorComponent),\n \"field.select\": eagerComponent(SelectComponent),\n \"field.textarea\": eagerComponent(TextareaComponent),\n \"field.text-input\": eagerComponent(TextInputComponent),\n \"field.time-input\": eagerComponent(TimeInputComponent),\n \"field.toggle\": eagerComponent(ToggleComponent),\n },\n name: \"lattice/form\",\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsBA,IAAa,sBAAsB,aAAa;CAC9C,YAAY;EACV,MAAM,eAAe,aAAa;EAClC,iBAAiB,eAAe,gBAAgB;EAChD,kBAAkB,eAAe,iBAAiB;EAClD,gBAAgB,eAAe,eAAe;EAC9C,oBAAoB,eAAe,kBAAkB;EACrD,yBAAyB,eAAe,sBAAsB;EAC9D,qBAAqB,eAAe,mBAAmB;EACvD,sBAAsB,eAAe,oBAAoB;EACzD,sBAAsB,eAAe,oBAAoB;EACzD,aAAa,eAAe,iBAAiB;EAC7C,wBAAwB,eAAe,sBAAsB;EAC7D,kBAAkB,eAAe,iBAAiB;EAClD,qBAAqB,eAAe,mBAAmB;EACvD,gBAAgB,eAAe,eAAe;EAC9C,kBAAkB,eAAe,iBAAiB;EAClD,oBAAoB,eAAe,kBAAkB;EACrD,oBAAoB,eAAe,kBAAkB;EACrD,gBAAgB,eAAe,eAAe;CAChD;CACA,MAAM;AACR,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { registry } from './registry';
|
|
1
|
+
export { lazyRegistry, registry } from './registry';
|
|
2
2
|
export { useChat } from './chat/use-chat';
|
|
3
3
|
export { chatPlugin } from './chat';
|
|
4
4
|
export { getActionEffects, isActionEffect, dispatchEffects, dispatchActionError, } from './effects/dispatch';
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { initializeTheme, updateAppearance, useAppearance } from "./appearance/index.js";
|
|
2
|
+
import { useColumnRegistry, useComponentRegistry } from "./core/registry-context.js";
|
|
2
3
|
import { LATTICE_EVENT } from "./events/event-names.js";
|
|
3
4
|
import { LATTICE_REF_HEADER, withRefHeader } from "./core/component-ref.js";
|
|
4
5
|
import { withHeaders } from "./core/headers.js";
|
|
5
6
|
import { Icon, SpriteProvider } from "./icons/sprite.js";
|
|
6
7
|
import { IconRenderer, IconRendererProvider } from "./icons/icon-renderer.js";
|
|
7
8
|
import { CollapsedContext, useCollapsed } from "./core/collapsed-context.js";
|
|
8
|
-
import { useColumnRegistry, useComponentRegistry } from "./core/registry-context.js";
|
|
9
9
|
import { Renderer } from "./core/renderer.js";
|
|
10
10
|
import { onToast, showToast } from "./toast/toast.js";
|
|
11
11
|
import { onCallout } from "./toast/callout.js";
|
|
@@ -20,12 +20,12 @@ import { layoutComponents } from "./layout/components.js";
|
|
|
20
20
|
import SchemaLayout from "./layout/schema-layout.js";
|
|
21
21
|
import { RealtimeListeners } from "./realtime/listeners.js";
|
|
22
22
|
import { createLayoutResolver, createPageResolver, pageComponentName, withVisitHeaders } from "./inertia.js";
|
|
23
|
+
import { Toaster } from "./toast/toaster.js";
|
|
23
24
|
import { useChat } from "./chat/use-chat.js";
|
|
24
25
|
import { chatPlugin } from "./chat/index.js";
|
|
25
26
|
import { copyToClipboard, useClipboard } from "./clipboard/index.js";
|
|
26
|
-
import {
|
|
27
|
-
import { Toaster } from "./toast/toaster.js";
|
|
28
|
-
import { Provider } from "./provider.js";
|
|
27
|
+
import { lazyRegistry } from "./registry/lazy.js";
|
|
29
28
|
import { createLatticeApp } from "./create-app.js";
|
|
29
|
+
import { Provider } from "./provider.js";
|
|
30
30
|
import { columnCell } from "./table/registry.js";
|
|
31
|
-
export { Callouts, EventBridge, Icon, IconRenderer, IconRendererProvider, LATTICE_EVENT, LATTICE_REF_HEADER, OutletContext, Provider, RealtimeListeners, Renderer, SchemaLayout, CollapsedContext as SidebarCollapsedContext, SpriteProvider, Toaster, builtinEffectHandlers, chatPlugin, columnCell, copyToClipboard, createLatticeApp, createLayoutResolver, createPageResolver, createPlugin, createRegistry, dispatchActionError, dispatchEffects, eagerComponent, effectHandler, extendRegistry, getActionEffects, initializeTheme, isActionEffect, layoutComponents, lazyComponent, mergeEffectHandlers, onCallout, onToast, pageComponentName, registry, showToast, updateAppearance, useAppearance, useChat, useClipboard, useColumnRegistry, useComponentRegistry, useEffectDispatcher, useCollapsed as useSidebarCollapsed, withHeaders, withRefHeader, withVisitHeaders };
|
|
31
|
+
export { Callouts, EventBridge, Icon, IconRenderer, IconRendererProvider, LATTICE_EVENT, LATTICE_REF_HEADER, OutletContext, Provider, RealtimeListeners, Renderer, SchemaLayout, CollapsedContext as SidebarCollapsedContext, SpriteProvider, Toaster, builtinEffectHandlers, chatPlugin, columnCell, copyToClipboard, createLatticeApp, createLayoutResolver, createPageResolver, createPlugin, createRegistry, dispatchActionError, dispatchEffects, eagerComponent, effectHandler, extendRegistry, getActionEffects, initializeTheme, isActionEffect, layoutComponents, lazyComponent, lazyRegistry, mergeEffectHandlers, onCallout, onToast, pageComponentName, lazyRegistry as registry, showToast, updateAppearance, useAppearance, useChat, useClipboard, useColumnRegistry, useComponentRegistry, useEffectDispatcher, useCollapsed as useSidebarCollapsed, withHeaders, withRefHeader, withVisitHeaders };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { Registry } from './core/registry';
|
|
3
|
+
import { SpriteValue } from './icons/sprite';
|
|
4
|
+
export type ProviderBaseProps = {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
registry: Registry;
|
|
7
|
+
sprite?: SpriteValue;
|
|
8
|
+
toaster?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function ProviderBase({ children, registry, sprite, toaster, }: ProviderBaseProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { updateAppearance } from "./appearance/index.js";
|
|
2
|
+
import { RegistryContext } from "./core/registry-context.js";
|
|
3
|
+
import { SpriteProvider } from "./icons/sprite.js";
|
|
4
|
+
import { EventBridge } from "./events/event-bridge.js";
|
|
5
|
+
import { useFlashEffects } from "./effects/use-flash-effects.js";
|
|
6
|
+
import { Toaster } from "./toast/toaster.js";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region resources/js/provider-base.tsx
|
|
9
|
+
var defaultSprite = { href: "" };
|
|
10
|
+
function ProviderBase({ children, registry, sprite = defaultSprite, toaster = true }) {
|
|
11
|
+
useFlashEffects();
|
|
12
|
+
return /* @__PURE__ */ jsx(RegistryContext.Provider, {
|
|
13
|
+
value: registry,
|
|
14
|
+
children: /* @__PURE__ */ jsxs(SpriteProvider, {
|
|
15
|
+
sprite,
|
|
16
|
+
children: [
|
|
17
|
+
children,
|
|
18
|
+
/* @__PURE__ */ jsx(EventBridge, { onAppearanceChange: updateAppearance }),
|
|
19
|
+
toaster ? /* @__PURE__ */ jsx(Toaster, {}) : null
|
|
20
|
+
]
|
|
21
|
+
})
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { ProviderBase };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=provider-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-base.js","names":[],"sources":["../resources/js/provider-base.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { Registry } from \"./core/registry\";\nimport { RegistryContext } from \"./core/registry-context\";\nimport { useFlashEffects } from \"./effects/use-flash-effects\";\nimport { EventBridge } from \"./events/event-bridge\";\nimport type { SpriteValue } from \"./icons/sprite\";\nimport { SpriteProvider } from \"./icons/sprite\";\nimport { Toaster } from \"./toast\";\nimport { updateAppearance } from \"./appearance\";\n\nconst defaultSprite: SpriteValue = { href: \"\" };\n\nexport type ProviderBaseProps = {\n children: ReactNode;\n registry: Registry;\n sprite?: SpriteValue;\n toaster?: boolean;\n};\n\nexport function ProviderBase({\n children,\n registry,\n sprite = defaultSprite,\n toaster = true,\n}: ProviderBaseProps) {\n useFlashEffects();\n\n return (\n <RegistryContext.Provider value={registry}>\n <SpriteProvider sprite={sprite}>\n {children}\n <EventBridge onAppearanceChange={updateAppearance} />\n {toaster ? <Toaster /> : null}\n </SpriteProvider>\n </RegistryContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;AAUA,IAAM,gBAA6B,EAAE,MAAM,GAAG;AAS9C,SAAgB,aAAa,EAC3B,UACA,UACA,SAAS,eACT,UAAU,QACU;CACpB,gBAAgB;CAEhB,OACE,oBAAC,gBAAgB,UAAjB;EAA0B,OAAO;YAC/B,qBAAC,gBAAD;GAAwB;aAAxB;IACG;IACD,oBAAC,aAAD,EAAa,oBAAoB,iBAAmB,CAAA;IACnD,UAAU,oBAAC,SAAD,CAAU,CAAA,IAAI;GACX;;CACQ,CAAA;AAE9B"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { SpriteValue } from './icons/sprite';
|
|
3
1
|
import { Registry } from './core/registry';
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { ProviderBaseProps } from './provider-base';
|
|
3
|
+
type ProviderProps = Omit<ProviderBaseProps, "registry"> & {
|
|
6
4
|
registry?: Registry;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}): import("react").JSX.Element;
|
|
5
|
+
};
|
|
6
|
+
export declare function Provider({ registry, ...props }: ProviderProps): import("react").JSX.Element;
|
|
10
7
|
export { useComponentRegistry, useColumnRegistry, useEffectHandlerRegistry, } from './core/registry-context';
|
package/dist/provider.js
CHANGED
|
@@ -1,26 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { registry } from "./registry.js";
|
|
6
|
-
import { Toaster } from "./toast/toaster.js";
|
|
7
|
-
import { useFlashEffects } from "./effects/use-flash-effects.js";
|
|
8
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { setDefaultRegistry, useColumnRegistry, useComponentRegistry, useEffectHandlerRegistry } from "./core/registry-context.js";
|
|
2
|
+
import { ProviderBase } from "./provider-base.js";
|
|
3
|
+
import { lazyRegistry } from "./registry/lazy.js";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
5
|
//#region resources/js/provider.tsx
|
|
10
|
-
setDefaultRegistry(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
value: registry$1,
|
|
16
|
-
children: /* @__PURE__ */ jsxs(SpriteProvider, {
|
|
17
|
-
sprite,
|
|
18
|
-
children: [
|
|
19
|
-
children,
|
|
20
|
-
/* @__PURE__ */ jsx(EventBridge, { onAppearanceChange: updateAppearance }),
|
|
21
|
-
toaster ? /* @__PURE__ */ jsx(Toaster, {}) : null
|
|
22
|
-
]
|
|
23
|
-
})
|
|
6
|
+
setDefaultRegistry(lazyRegistry);
|
|
7
|
+
function Provider({ registry = lazyRegistry, ...props }) {
|
|
8
|
+
return /* @__PURE__ */ jsx(ProviderBase, {
|
|
9
|
+
...props,
|
|
10
|
+
registry
|
|
24
11
|
});
|
|
25
12
|
}
|
|
26
13
|
//#endregion
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","names":[],"sources":["../resources/js/provider.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"provider.js","names":[],"sources":["../resources/js/provider.tsx"],"sourcesContent":["import { registry as defaultRegistry } from \"./registry\";\nimport type { Registry } from \"./core/registry\";\nimport { setDefaultRegistry } from \"./core/registry-context\";\nimport { ProviderBase, type ProviderBaseProps } from \"./provider-base\";\n\n// Register the default registry so selectors work outside <Provider>.\n// This module is always loaded after registry.ts finishes, so defaultRegistry\n// is guaranteed to be defined here.\nsetDefaultRegistry(defaultRegistry);\n\ntype ProviderProps = Omit<ProviderBaseProps, \"registry\"> & {\n registry?: Registry;\n};\n\nexport function Provider({ registry = defaultRegistry, ...props }: ProviderProps) {\n return <ProviderBase {...props} registry={registry} />;\n}\n\nexport {\n useComponentRegistry,\n useColumnRegistry,\n useEffectHandlerRegistry,\n} from \"./core/registry-context\";\n"],"mappings":";;;;;AAQA,mBAAmB,YAAe;AAMlC,SAAgB,SAAS,EAAE,WAAW,cAAiB,GAAG,SAAwB;CAChF,OAAO,oBAAC,cAAD;EAAc,GAAI;EAAiB;CAAW,CAAA;AACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const eagerRegistry: import('../core/registry').Registry;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createRegistry } from "../core/registry.js";
|
|
2
|
+
import { layoutComponents } from "../layout/components.js";
|
|
3
|
+
import { actionComponents } from "../action/index.js";
|
|
4
|
+
import { chatPlugin } from "../chat/index.js";
|
|
5
|
+
import { remoteComponents } from "../remote/index.js";
|
|
6
|
+
import { eagerFormComponents } from "../form/eager.js";
|
|
7
|
+
import { eagerCoreComponents } from "../core/components/eager.js";
|
|
8
|
+
import { eagerTableComponents } from "../table/eager.js";
|
|
9
|
+
//#region resources/js/registry/eager.ts
|
|
10
|
+
var eagerRegistry = createRegistry(eagerCoreComponents, actionComponents, eagerFormComponents, layoutComponents, eagerTableComponents, chatPlugin, remoteComponents);
|
|
11
|
+
//#endregion
|
|
12
|
+
export { eagerRegistry };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=eager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eager.js","names":[],"sources":["../../resources/js/registry/eager.ts"],"sourcesContent":["import { createRegistry } from \"@lattice-php/lattice/core/registry\";\nimport { actionComponents } from \"../action\";\nimport { chatPlugin } from \"../chat\";\nimport { eagerCoreComponents } from \"../core/components/eager\";\nimport { eagerFormComponents } from \"../form/eager\";\nimport { layoutComponents } from \"../layout/components\";\nimport { remoteComponents } from \"../remote\";\nimport { eagerTableComponents } from \"../table/eager\";\n\nexport const eagerRegistry = createRegistry(\n eagerCoreComponents,\n actionComponents,\n eagerFormComponents,\n layoutComponents,\n eagerTableComponents,\n chatPlugin,\n remoteComponents,\n);\n"],"mappings":";;;;;;;;;AASA,IAAa,gBAAgB,eAC3B,qBACA,kBACA,qBACA,kBACA,sBACA,YACA,gBACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const lazyRegistry: import('../core/registry').Registry;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createRegistry } from "../core/registry.js";
|
|
2
|
+
import { layoutComponents } from "../layout/components.js";
|
|
3
|
+
import { actionComponents } from "../action/index.js";
|
|
4
|
+
import { chatPlugin } from "../chat/index.js";
|
|
5
|
+
import { coreComponents } from "../core/components/index.js";
|
|
6
|
+
import { formComponents } from "../form/index.js";
|
|
7
|
+
import { remoteComponents } from "../remote/index.js";
|
|
8
|
+
import { tableComponents } from "../table/index.js";
|
|
9
|
+
//#region resources/js/registry/lazy.ts
|
|
10
|
+
var lazyRegistry = createRegistry(coreComponents, actionComponents, formComponents, layoutComponents, tableComponents, chatPlugin, remoteComponents);
|
|
11
|
+
//#endregion
|
|
12
|
+
export { lazyRegistry };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=lazy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.js","names":[],"sources":["../../resources/js/registry/lazy.ts"],"sourcesContent":["import { createRegistry } from \"@lattice-php/lattice/core/registry\";\nimport { actionComponents } from \"../action\";\nimport { chatPlugin } from \"../chat\";\nimport { coreComponents } from \"../core/components\";\nimport { formComponents } from \"../form\";\nimport { layoutComponents } from \"../layout/components\";\nimport { remoteComponents } from \"../remote\";\nimport { tableComponents } from \"../table\";\n\nexport const lazyRegistry = createRegistry(\n coreComponents,\n actionComponents,\n formComponents,\n layoutComponents,\n tableComponents,\n chatPlugin,\n remoteComponents,\n);\n"],"mappings":";;;;;;;;;AASA,IAAa,eAAe,eAC1B,gBACA,kBACA,gBACA,kBACA,iBACA,YACA,gBACF"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { lazyRegistry, lazyRegistry as registry } from './registry/lazy';
|
package/dist/registry.js
CHANGED
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { actionComponents } from "./action/index.js";
|
|
4
|
-
import { chatPlugin } from "./chat/index.js";
|
|
5
|
-
import { coreComponents } from "./core/components/index.js";
|
|
6
|
-
import { formComponents } from "./form/index.js";
|
|
7
|
-
import { remoteComponents } from "./remote/index.js";
|
|
8
|
-
import { tableComponents } from "./table/index.js";
|
|
9
|
-
//#region resources/js/registry.ts
|
|
10
|
-
var registry = createRegistry(coreComponents, actionComponents, formComponents, layoutComponents, tableComponents, chatPlugin, remoteComponents);
|
|
11
|
-
//#endregion
|
|
12
|
-
export { registry };
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=registry.js.map
|
|
1
|
+
import { lazyRegistry } from "./registry/lazy.js";
|
|
2
|
+
export { lazyRegistry, lazyRegistry as registry };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ToggleableColumn } from '../../core/use-column-visibility';
|
|
2
|
+
export declare function ColumnVisibilityMenu({ columns, hasHidden, isVisible, onReset, onToggle, processing, visibleColumnCount, }: {
|
|
3
|
+
columns: ToggleableColumn[];
|
|
4
|
+
hasHidden: boolean;
|
|
5
|
+
isVisible: (column: ToggleableColumn) => boolean;
|
|
6
|
+
onReset: () => void;
|
|
7
|
+
onToggle: (key: string, visible: boolean) => void;
|
|
8
|
+
processing: boolean;
|
|
9
|
+
visibleColumnCount: number;
|
|
10
|
+
}): import("react").JSX.Element;
|