@lssm/lib.design-system 0.0.0-canary-20251221114240 → 0.0.0-canary-20251221144710

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.
@@ -1,12 +1,12 @@
1
1
  import { SkeletonCircleProps } from "./types.js";
2
- import * as react_jsx_runtime112 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime113 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/molecules/SkeletonCircle/index.web.d.ts
5
5
  declare function SkeletonCircle({
6
6
  size,
7
7
  sizeClass,
8
8
  className
9
- }: SkeletonCircleProps): react_jsx_runtime112.JSX.Element;
9
+ }: SkeletonCircleProps): react_jsx_runtime113.JSX.Element;
10
10
  //#endregion
11
11
  export { SkeletonCircle };
12
12
  //# sourceMappingURL=index.web.d.ts.map
@@ -1,11 +1,11 @@
1
1
  import { SkeletonListProps } from "./types.js";
2
- import * as react_jsx_runtime113 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime112 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/molecules/SkeletonList/index.web.d.ts
5
5
  declare function SkeletonList({
6
6
  count,
7
7
  className
8
- }: SkeletonListProps): react_jsx_runtime113.JSX.Element;
8
+ }: SkeletonListProps): react_jsx_runtime112.JSX.Element;
9
9
  //#endregion
10
10
  export { SkeletonList };
11
11
  //# sourceMappingURL=index.web.d.ts.map
@@ -0,0 +1,6 @@
1
+ //#region ../contracts/dist/_virtual/rolldown_runtime.js
2
+ var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
3
+
4
+ //#endregion
5
+ export { __esmMin };
6
+ //# sourceMappingURL=rolldown_runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolldown_runtime.js","names":[],"sources":["../../../../../contracts/dist/_virtual/rolldown_runtime.js"],"sourcesContent":["//#region rolldown:runtime\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);\nvar __export = (all, symbols) => {\n\tlet target = {};\n\tfor (var name in all) {\n\t\t__defProp(target, name, {\n\t\t\tget: all[name],\n\t\t\tenumerable: true\n\t\t});\n\t}\n\tif (symbols) {\n\t\t__defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\t}\n\treturn target;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") {\n\t\tfor (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\t\tkey = keys[i];\n\t\t\tif (!__hasOwnProp.call(to, key) && key !== except) {\n\t\t\t\t__defProp(to, key, {\n\t\t\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn to;\n};\nvar __toCommonJS = (mod) => __hasOwnProp.call(mod, \"module.exports\") ? mod[\"module.exports\"] : __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n//#endregion\nexport { __esmMin, __export, __toCommonJS };"],"mappings":";AAKA,IAAI,YAAY,IAAI,eAAe,OAAO,MAAM,GAAG,KAAK,EAAE,GAAG"}
@@ -1,4 +1,4 @@
1
- import { buildZodWithRelations, evalPredicate } from "../../forms.js";
1
+ import { buildZodWithRelations, evalPredicate } from "../../forms/forms.js";
2
2
  import React, { useEffect, useMemo, useState } from "react";
3
3
  import { Controller, useFieldArray, useForm } from "react-hook-form";
4
4
  import { zodResolver } from "@hookform/resolvers/zod";
@@ -1 +1 @@
1
- {"version":3,"file":"form-render.js","names":[],"sources":["../../../../../../contracts/dist/client/react/form-render.js"],"sourcesContent":["import { buildZodWithRelations, evalPredicate } from \"../../forms.js\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\n\n//#region src/client/react/form-render.tsx\nfunction toOptionsArray(src) {\n\tif (!src) return void 0;\n\tif (Array.isArray(src)) return {\n\t\tkind: \"static\",\n\t\toptions: src\n\t};\n\treturn src;\n}\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tcur = cur[s];\n\t}\n\treturn cur;\n}\nfunction makeDepsKey(values, deps) {\n\tif (!deps || deps.length === 0) return \"[]\";\n\ttry {\n\t\treturn JSON.stringify(deps.map((d) => getAtPath(values, d)));\n\t} catch {\n\t\treturn \"[]\";\n\t}\n}\nfunction useResolvedOptions(values, source, resolvers) {\n\tconst [opts, setOpts] = useState([]);\n\tuseEffect(() => {\n\t\tlet mounted = true;\n\t\tconst run = async () => {\n\t\t\tif (!source) return setOpts([]);\n\t\t\tif (source.kind === \"static\") return setOpts([...source.options ?? []]);\n\t\t\tconst fn = resolvers?.[source.resolverKey];\n\t\t\tif (!fn) return setOpts([]);\n\t\t\tconst res = await fn(values, source.args);\n\t\t\tif (mounted) setOpts([...res ?? []]);\n\t\t};\n\t\trun();\n\t\treturn () => {\n\t\t\tmounted = false;\n\t\t};\n\t}, [useMemo(() => {\n\t\tif (!source) return \"nil\";\n\t\tif (source.kind === \"static\") return JSON.stringify(source.options ?? []);\n\t\treturn makeDepsKey(values, source.deps);\n\t}, [source, values]), source && source.kind === \"resolver\" ? source.resolverKey : void 0]);\n\treturn opts;\n}\nfunction fieldPath(parent, name, arrayIndex) {\n\tif (!name) return parent ?? \"\";\n\tconst child = typeof arrayIndex === \"number\" ? `${name.replace(/^\\$index$/, String(arrayIndex))}` : name;\n\treturn parent ? `${parent}${typeof arrayIndex === \"number\" ? `.${arrayIndex}` : \"\"}.${child}`.replace(/\\.+/g, \".\") : child;\n}\nfunction createFormRenderer(base) {\n\tconst conf = base;\n\tconst { driver } = conf;\n\tfunction InternalForm(props) {\n\t\tconst { spec, options, merged } = props;\n\t\tconst baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);\n\t\tconst form = useForm({\n\t\t\t...merged.formOptions,\n\t\t\tresolver: zodResolver(baseZod),\n\t\t\tdefaultValues: options?.defaultValues\n\t\t});\n\t\tconst values = form.watch();\n\t\tconst renderOne = (f, parent, arrayIndex) => {\n\t\t\tconst DriverField = driver.Field;\n\t\t\tconst DriverLabel = driver.FieldLabel;\n\t\t\tconst DriverDesc = driver.FieldDescription;\n\t\t\tconst DriverError = driver.FieldError;\n\t\t\tconst name = fieldPath(parent, f.name, arrayIndex);\n\t\t\tconst visible = evalPredicate(values, f.visibleWhen);\n\t\t\tconst enabled = evalPredicate(values, f.enabledWhen);\n\t\t\tconst invalid = Boolean(form.getFieldState(name)?.invalid);\n\t\t\tif (!visible) return null;\n\t\t\tconst id = name?.replace(/\\./g, \"-\");\n\t\t\tconst commonWrapProps = {\n\t\t\t\t\"data-invalid\": invalid,\n\t\t\t\thidden: !visible,\n\t\t\t\tdisabled: !enabled\n\t\t\t};\n\t\t\tconst labelNode = f.labelI18n ? /* @__PURE__ */ jsx(DriverLabel, {\n\t\t\t\thtmlFor: id,\n\t\t\t\tchildren: f.labelI18n\n\t\t\t}) : null;\n\t\t\tconst descNode = f.descriptionI18n ? /* @__PURE__ */ jsx(DriverDesc, { children: f.descriptionI18n }) : null;\n\t\t\tif (f.kind === \"group\") {\n\t\t\t\tconst children = f.fields.map((c, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(c, name, arrayIndex) }, `${name}-${i}`));\n\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\tdescNode\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (f.kind === \"array\") return renderArray(f, parent);\n\t\t\treturn /* @__PURE__ */ jsx(Controller, {\n\t\t\t\tname,\n\t\t\t\tcontrol: form.control,\n\t\t\t\trender: ({ field, fieldState }) => {\n\t\t\t\t\tconst err = fieldState.error ? [fieldState.error] : [];\n\t\t\t\t\tconst ariaInvalid = fieldState.invalid || void 0;\n\t\t\t\t\tif (f.kind === \"text\") {\n\t\t\t\t\t\tconst textField = f;\n\t\t\t\t\t\tconst Input = driver.Input;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Input, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\tautoComplete: textField.autoComplete,\n\t\t\t\t\t\t\t\t\tinputMode: textField.inputMode,\n\t\t\t\t\t\t\t\t\tmaxLength: textField.maxLength,\n\t\t\t\t\t\t\t\t\tminLength: textField.minLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"textarea\") {\n\t\t\t\t\t\tconst textareaField = f;\n\t\t\t\t\t\tconst Textarea = driver.Textarea;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Textarea, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\trows: textareaField.rows,\n\t\t\t\t\t\t\t\t\tmaxLength: textareaField.maxLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"select\") {\n\t\t\t\t\t\tconst selectField = f;\n\t\t\t\t\t\tconst Select = driver.Select;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(selectField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Select, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"checkbox\") {\n\t\t\t\t\t\tconst Checkbox = driver.Checkbox;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Checkbox, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"radio\") {\n\t\t\t\t\t\tconst radioField = f;\n\t\t\t\t\t\tconst RadioGroup = driver.RadioGroup;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(radioField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(RadioGroup, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonValueChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"switch\") {\n\t\t\t\t\t\tconst Switch = driver.Switch;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Switch, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn /* @__PURE__ */ jsx(Fragment, {});\n\t\t\t\t}\n\t\t\t}, name);\n\t\t};\n\t\tconst renderArray = (f, parent) => {\n\t\t\tconst name = fieldPath(parent, f.name);\n\t\t\tconst { fields, append, remove } = useFieldArray({\n\t\t\t\tcontrol: form.control,\n\t\t\t\tname\n\t\t\t});\n\t\t\tconst canAdd = f.max == null || fields.length < f.max;\n\t\t\tconst canRemove = (idx) => (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;\n\t\t\tconst Button$1 = driver.Button;\n\t\t\tconst Label = driver.FieldLabel;\n\t\t\treturn /* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\tf.labelI18n ? /* @__PURE__ */ jsx(Label, { children: f.labelI18n }) : null,\n\t\t\t\tfields.map((row, idx) => /* @__PURE__ */ jsxs(\"div\", { children: [renderOne(f.of, name, idx), canRemove(idx) ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"ghost\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => remove(idx),\n\t\t\t\t\tchildren: \"Remove\"\n\t\t\t\t}) : null] }, row.id ?? idx)),\n\t\t\t\tcanAdd ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"outline\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => append({}),\n\t\t\t\t\tchildren: \"Add\"\n\t\t\t\t}) : null\n\t\t\t] }, name);\n\t\t};\n\t\tconst onSubmit = async (data) => {\n\t\t\tconst actionKey = spec.actions?.[0]?.key ?? \"submit\";\n\t\t\tif (merged.onSubmitOverride) return merged.onSubmitOverride(data, actionKey);\n\t\t};\n\t\tconst Button = driver.Button;\n\t\treturn /* @__PURE__ */ jsxs(\"form\", {\n\t\t\tonSubmit: form.handleSubmit(onSubmit),\n\t\t\tchildren: [(spec.fields || []).map((f, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(f) }, i)), spec.actions && spec.actions.length ? /* @__PURE__ */ jsx(\"div\", { children: spec.actions.map((a) => /* @__PURE__ */ jsx(Button, {\n\t\t\t\ttype: \"submit\",\n\t\t\t\tchildren: a.labelI18n\n\t\t\t}, a.key)) }) : null]\n\t\t});\n\t}\n\treturn { render: (spec, options) => /* @__PURE__ */ jsx(InternalForm, {\n\t\tspec,\n\t\toptions,\n\t\tmerged: {\n\t\t\t...conf,\n\t\t\t...options?.overrides ?? {}\n\t\t}\n\t}) };\n}\n\n//#endregion\nexport { createFormRenderer };"],"mappings":"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"}
1
+ {"version":3,"file":"form-render.js","names":[],"sources":["../../../../../../contracts/dist/client/react/form-render.js"],"sourcesContent":["import { buildZodWithRelations, evalPredicate } from \"../../forms/forms.js\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { Controller, useFieldArray, useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\n\n//#region src/client/react/form-render.tsx\nfunction toOptionsArray(src) {\n\tif (!src) return void 0;\n\tif (Array.isArray(src)) return {\n\t\tkind: \"static\",\n\t\toptions: src\n\t};\n\treturn src;\n}\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tcur = cur[s];\n\t}\n\treturn cur;\n}\nfunction makeDepsKey(values, deps) {\n\tif (!deps || deps.length === 0) return \"[]\";\n\ttry {\n\t\treturn JSON.stringify(deps.map((d) => getAtPath(values, d)));\n\t} catch {\n\t\treturn \"[]\";\n\t}\n}\nfunction useResolvedOptions(values, source, resolvers) {\n\tconst [opts, setOpts] = useState([]);\n\tuseEffect(() => {\n\t\tlet mounted = true;\n\t\tconst run = async () => {\n\t\t\tif (!source) return setOpts([]);\n\t\t\tif (source.kind === \"static\") return setOpts([...source.options ?? []]);\n\t\t\tconst fn = resolvers?.[source.resolverKey];\n\t\t\tif (!fn) return setOpts([]);\n\t\t\tconst res = await fn(values, source.args);\n\t\t\tif (mounted) setOpts([...res ?? []]);\n\t\t};\n\t\trun();\n\t\treturn () => {\n\t\t\tmounted = false;\n\t\t};\n\t}, [useMemo(() => {\n\t\tif (!source) return \"nil\";\n\t\tif (source.kind === \"static\") return JSON.stringify(source.options ?? []);\n\t\treturn makeDepsKey(values, source.deps);\n\t}, [source, values]), source && source.kind === \"resolver\" ? source.resolverKey : void 0]);\n\treturn opts;\n}\nfunction fieldPath(parent, name, arrayIndex) {\n\tif (!name) return parent ?? \"\";\n\tconst child = typeof arrayIndex === \"number\" ? `${name.replace(/^\\$index$/, String(arrayIndex))}` : name;\n\treturn parent ? `${parent}${typeof arrayIndex === \"number\" ? `.${arrayIndex}` : \"\"}.${child}`.replace(/\\.+/g, \".\") : child;\n}\nfunction createFormRenderer(base) {\n\tconst conf = base;\n\tconst { driver } = conf;\n\tfunction InternalForm(props) {\n\t\tconst { spec, options, merged } = props;\n\t\tconst baseZod = useMemo(() => buildZodWithRelations(spec), [spec]);\n\t\tconst form = useForm({\n\t\t\t...merged.formOptions,\n\t\t\tresolver: zodResolver(baseZod),\n\t\t\tdefaultValues: options?.defaultValues\n\t\t});\n\t\tconst values = form.watch();\n\t\tconst renderOne = (f, parent, arrayIndex) => {\n\t\t\tconst DriverField = driver.Field;\n\t\t\tconst DriverLabel = driver.FieldLabel;\n\t\t\tconst DriverDesc = driver.FieldDescription;\n\t\t\tconst DriverError = driver.FieldError;\n\t\t\tconst name = fieldPath(parent, f.name, arrayIndex);\n\t\t\tconst visible = evalPredicate(values, f.visibleWhen);\n\t\t\tconst enabled = evalPredicate(values, f.enabledWhen);\n\t\t\tconst invalid = Boolean(form.getFieldState(name)?.invalid);\n\t\t\tif (!visible) return null;\n\t\t\tconst id = name?.replace(/\\./g, \"-\");\n\t\t\tconst commonWrapProps = {\n\t\t\t\t\"data-invalid\": invalid,\n\t\t\t\thidden: !visible,\n\t\t\t\tdisabled: !enabled\n\t\t\t};\n\t\t\tconst labelNode = f.labelI18n ? /* @__PURE__ */ jsx(DriverLabel, {\n\t\t\t\thtmlFor: id,\n\t\t\t\tchildren: f.labelI18n\n\t\t\t}) : null;\n\t\t\tconst descNode = f.descriptionI18n ? /* @__PURE__ */ jsx(DriverDesc, { children: f.descriptionI18n }) : null;\n\t\t\tif (f.kind === \"group\") {\n\t\t\t\tconst children = f.fields.map((c, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(c, name, arrayIndex) }, `${name}-${i}`));\n\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\tdescNode\n\t\t\t\t\t]\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (f.kind === \"array\") return renderArray(f, parent);\n\t\t\treturn /* @__PURE__ */ jsx(Controller, {\n\t\t\t\tname,\n\t\t\t\tcontrol: form.control,\n\t\t\t\trender: ({ field, fieldState }) => {\n\t\t\t\t\tconst err = fieldState.error ? [fieldState.error] : [];\n\t\t\t\t\tconst ariaInvalid = fieldState.invalid || void 0;\n\t\t\t\t\tif (f.kind === \"text\") {\n\t\t\t\t\t\tconst textField = f;\n\t\t\t\t\t\tconst Input = driver.Input;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Input, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\tautoComplete: textField.autoComplete,\n\t\t\t\t\t\t\t\t\tinputMode: textField.inputMode,\n\t\t\t\t\t\t\t\t\tmaxLength: textField.maxLength,\n\t\t\t\t\t\t\t\t\tminLength: textField.minLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"textarea\") {\n\t\t\t\t\t\tconst textareaField = f;\n\t\t\t\t\t\tconst Textarea = driver.Textarea;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Textarea, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tplaceholder: f.placeholderI18n,\n\t\t\t\t\t\t\t\t\trows: textareaField.rows,\n\t\t\t\t\t\t\t\t\tmaxLength: textareaField.maxLength,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\t...field,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"select\") {\n\t\t\t\t\t\tconst selectField = f;\n\t\t\t\t\t\tconst Select = driver.Select;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(selectField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Select, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\"aria-invalid\": ariaInvalid,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"checkbox\") {\n\t\t\t\t\t\tconst Checkbox = driver.Checkbox;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Checkbox, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"radio\") {\n\t\t\t\t\t\tconst radioField = f;\n\t\t\t\t\t\tconst RadioGroup = driver.RadioGroup;\n\t\t\t\t\t\tconst opts = useResolvedOptions(values, toOptionsArray(radioField.options), merged.resolvers);\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(RadioGroup, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tvalue: field.value,\n\t\t\t\t\t\t\t\t\tonValueChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\toptions: opts,\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (f.kind === \"switch\") {\n\t\t\t\t\t\tconst Switch = driver.Switch;\n\t\t\t\t\t\treturn /* @__PURE__ */ jsxs(DriverField, {\n\t\t\t\t\t\t\t...commonWrapProps,\n\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\tlabelNode,\n\t\t\t\t\t\t\t\t/* @__PURE__ */ jsx(Switch, {\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tdisabled: !enabled,\n\t\t\t\t\t\t\t\t\tchecked: !!field.value,\n\t\t\t\t\t\t\t\t\tonCheckedChange: (v) => field.onChange(v),\n\t\t\t\t\t\t\t\t\t...f.uiProps\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tdescNode,\n\t\t\t\t\t\t\t\tfieldState.invalid ? /* @__PURE__ */ jsx(DriverError, { errors: err }) : null\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn /* @__PURE__ */ jsx(Fragment, {});\n\t\t\t\t}\n\t\t\t}, name);\n\t\t};\n\t\tconst renderArray = (f, parent) => {\n\t\t\tconst name = fieldPath(parent, f.name);\n\t\t\tconst { fields, append, remove } = useFieldArray({\n\t\t\t\tcontrol: form.control,\n\t\t\t\tname\n\t\t\t});\n\t\t\tconst canAdd = f.max == null || fields.length < f.max;\n\t\t\tconst canRemove = (idx) => (f.min == null ? fields.length > 0 : fields.length > f.min) && idx >= 0;\n\t\t\tconst Button$1 = driver.Button;\n\t\t\tconst Label = driver.FieldLabel;\n\t\t\treturn /* @__PURE__ */ jsxs(\"div\", { children: [\n\t\t\t\tf.labelI18n ? /* @__PURE__ */ jsx(Label, { children: f.labelI18n }) : null,\n\t\t\t\tfields.map((row, idx) => /* @__PURE__ */ jsxs(\"div\", { children: [renderOne(f.of, name, idx), canRemove(idx) ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"ghost\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => remove(idx),\n\t\t\t\t\tchildren: \"Remove\"\n\t\t\t\t}) : null] }, row.id ?? idx)),\n\t\t\t\tcanAdd ? /* @__PURE__ */ jsx(Button$1, {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\tvariant: \"outline\",\n\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\tonClick: () => append({}),\n\t\t\t\t\tchildren: \"Add\"\n\t\t\t\t}) : null\n\t\t\t] }, name);\n\t\t};\n\t\tconst onSubmit = async (data) => {\n\t\t\tconst actionKey = spec.actions?.[0]?.key ?? \"submit\";\n\t\t\tif (merged.onSubmitOverride) return merged.onSubmitOverride(data, actionKey);\n\t\t};\n\t\tconst Button = driver.Button;\n\t\treturn /* @__PURE__ */ jsxs(\"form\", {\n\t\t\tonSubmit: form.handleSubmit(onSubmit),\n\t\t\tchildren: [(spec.fields || []).map((f, i) => /* @__PURE__ */ jsx(React.Fragment, { children: renderOne(f) }, i)), spec.actions && spec.actions.length ? /* @__PURE__ */ jsx(\"div\", { children: spec.actions.map((a) => /* @__PURE__ */ jsx(Button, {\n\t\t\t\ttype: \"submit\",\n\t\t\t\tchildren: a.labelI18n\n\t\t\t}, a.key)) }) : null]\n\t\t});\n\t}\n\treturn { render: (spec, options) => /* @__PURE__ */ jsx(InternalForm, {\n\t\tspec,\n\t\toptions,\n\t\tmerged: {\n\t\t\t...conf,\n\t\t\t...options?.overrides ?? {}\n\t\t}\n\t}) };\n}\n\n//#endregion\nexport { createFormRenderer };"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- //#region ../contracts/dist/forms.js
1
+ import "../registry-utils.js";
2
+
3
+ //#region ../contracts/dist/forms/forms.js
2
4
  function getAtPath(values, path) {
3
5
  if (!path) return void 0;
4
6
  const segs = path.replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.js","names":[],"sources":["../../../../../contracts/dist/forms/forms.js"],"sourcesContent":["import { __toCommonJS } from \"../_virtual/rolldown_runtime.js\";\nimport { init_registry_utils, registry_utils_exports } from \"../registry-utils.js\";\n\n//#region src/forms/forms.ts\nfunction formKey(meta) {\n\treturn `${meta.key}.v${meta.version}`;\n}\nvar FormRegistry = class {\n\titems = /* @__PURE__ */ new Map();\n\tregister(spec) {\n\t\tconst key = formKey(spec.meta);\n\t\tif (this.items.has(key)) throw new Error(`Duplicate form ${key}`);\n\t\tthis.items.set(key, spec);\n\t\treturn this;\n\t}\n\tlist() {\n\t\treturn [...this.items.values()];\n\t}\n\tget(key, version) {\n\t\tif (version != null) return this.items.get(`${key}.v${version}`);\n\t\tlet candidate;\n\t\tlet max = -Infinity;\n\t\tfor (const [k, v] of this.items.entries()) {\n\t\t\tif (!k.startsWith(`${key}.v`)) continue;\n\t\t\tif (v.meta.version > max) {\n\t\t\t\tmax = v.meta.version;\n\t\t\t\tcandidate = v;\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\t/** Filter forms by criteria. */\n\tfilter(criteria) {\n\t\tconst { filterBy } = (init_registry_utils(), __toCommonJS(registry_utils_exports));\n\t\treturn filterBy(this.list(), criteria);\n\t}\n\t/** List forms with specific tag. */\n\tlistByTag(tag) {\n\t\treturn this.list().filter((f) => f.meta.tags?.includes(tag));\n\t}\n\t/** List forms by owner. */\n\tlistByOwner(owner) {\n\t\treturn this.list().filter((f) => f.meta.owners?.includes(owner));\n\t}\n\t/** Group forms by key function. */\n\tgroupBy(keyFn) {\n\t\tconst { groupBy } = (init_registry_utils(), __toCommonJS(registry_utils_exports));\n\t\treturn groupBy(this.list(), keyFn);\n\t}\n\t/** Get unique tags from all forms. */\n\tgetUniqueTags() {\n\t\tconst { getUniqueTags } = (init_registry_utils(), __toCommonJS(registry_utils_exports));\n\t\treturn getUniqueTags(this.list());\n\t}\n};\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tif (cur && typeof cur === \"object\" && s in cur) cur = cur[s];\n\t\telse return;\n\t}\n\treturn cur;\n}\nfunction evalPredicate(values, pred) {\n\tif (!pred) return true;\n\tif (pred.not) return !evalPredicate(values, pred.not);\n\tif (pred.all && pred.all.length) return pred.all.every((p) => evalPredicate(values, p));\n\tif (pred.anyOf && pred.anyOf.length) return pred.anyOf.some((p) => evalPredicate(values, p));\n\tif (pred.when) {\n\t\tconst { path, op = \"truthy\", value } = pred.when;\n\t\tconst v = getAtPath(values, path);\n\t\tswitch (op) {\n\t\t\tcase \"equals\": return v === value;\n\t\t\tcase \"notEquals\": return v !== value;\n\t\t\tcase \"in\": return Array.isArray(value) && value.includes(v);\n\t\t\tcase \"notIn\": return Array.isArray(value) && !value.includes(v);\n\t\t\tcase \"gt\": return Number(v) > Number(value);\n\t\t\tcase \"gte\": return Number(v) >= Number(value);\n\t\t\tcase \"lt\": return Number(v) < Number(value);\n\t\t\tcase \"lte\": return Number(v) <= Number(value);\n\t\t\tcase \"empty\": return v == null || (Array.isArray(v) ? v.length === 0 : String(v).length === 0);\n\t\t\tcase \"lengthGt\": return (Array.isArray(v) || typeof v === \"string\") && v.length > Number(value ?? 0);\n\t\t\tcase \"lengthGte\": return (Array.isArray(v) || typeof v === \"string\") && v.length >= Number(value ?? 0);\n\t\t\tcase \"lengthLt\": return (Array.isArray(v) || typeof v === \"string\") && v.length < Number(value ?? 0);\n\t\t\tcase \"lengthLte\": return (Array.isArray(v) || typeof v === \"string\") && v.length <= Number(value ?? 0);\n\t\t\tcase \"truthy\":\n\t\t\tdefault: return Boolean(v);\n\t\t}\n\t}\n\treturn true;\n}\n/**\n* Wrap the base zod schema with relation-driven refinements (requiredWhen, array min/max)\n* and optional custom constraints. Call this when wiring RHF resolver.\n*/\nfunction buildZodWithRelations(spec, handlers) {\n\treturn spec.model.getZod().superRefine((values, ctx) => {\n\t\tconst visit = (field, parentPath) => {\n\t\t\tconst path = field.name ? parentPath ? `${parentPath}.${field.name}` : field.name : parentPath ?? \"\";\n\t\t\tif (field.requiredWhen) {\n\t\t\t\tif (evalPredicate(values, field.requiredWhen)) {\n\t\t\t\t\tconst v = getAtPath(values, path);\n\t\t\t\t\tif (v == null || typeof v === \"string\" && v.trim().length === 0 || Array.isArray(v) && v.length === 0) ctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\t\tmessage: \"required\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (field.kind === \"array\") {\n\t\t\t\tconst arr = getAtPath(values, path);\n\t\t\t\tif (field.min != null && Array.isArray(arr) && arr.length < field.min) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `min:${field.min}`\n\t\t\t\t});\n\t\t\t\tif (field.max != null && Array.isArray(arr) && arr.length > field.max) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `max:${field.max}`\n\t\t\t\t});\n\t\t\t\tvisit(field.of, path);\n\t\t\t} else if (field.kind === \"group\") for (const child of field.fields) visit(child, path);\n\t\t};\n\t\tfor (const f of spec.fields) visit(f);\n\t\tif (spec.constraints && handlers) for (const c of spec.constraints) {\n\t\t\tconst fn = handlers[c.key];\n\t\t\tif (!fn) continue;\n\t\t\tconst res = fn(values, c.paths, c.args);\n\t\t\tif (!res.ok) ctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tpath: (res.path ?? c.paths[0] ?? \"\").split(\".\").filter(Boolean),\n\t\t\t\tmessage: res.message ?? c.messageI18n\n\t\t\t});\n\t\t}\n\t});\n}\nfunction defineFormSpec(spec) {\n\treturn spec;\n}\n\n//#endregion\nexport { FormRegistry, buildZodWithRelations, defineFormSpec, evalPredicate };"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { __esmMin } from "./_virtual/rolldown_runtime.js";
2
+
3
+ //#region ../contracts/dist/registry-utils.js
4
+ var GroupingStrategies;
5
+ var init_registry_utils = __esmMin(() => {
6
+ GroupingStrategies = {
7
+ byTag: (item) => item.meta.tags?.[0] ?? "untagged",
8
+ byAllTags: (item) => item.meta.tags?.length ? item.meta.tags : ["untagged"],
9
+ byOwner: (item) => item.meta.owners?.[0] ?? "unowned",
10
+ byDomain: (item) => {
11
+ return (item.meta.name ?? item.meta.key ?? "").split(".")[0] ?? "default";
12
+ },
13
+ byStability: (item) => item.meta.stability ?? "stable",
14
+ byUrlPath: (level) => (item) => {
15
+ if (!item.path) return "root";
16
+ return item.path.split("/").filter(Boolean).slice(0, level).join("/") || "root";
17
+ }
18
+ };
19
+ });
20
+ init_registry_utils();
21
+
22
+ //#endregion
23
+ //# sourceMappingURL=registry-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-utils.js","names":[],"sources":["../../../../contracts/dist/registry-utils.js"],"sourcesContent":["import { __esmMin, __export } from \"./_virtual/rolldown_runtime.js\";\n\n//#region src/registry-utils.ts\nvar registry_utils_exports = /* @__PURE__ */ __export({\n\tGroupingStrategies: () => GroupingStrategies,\n\tfilterBy: () => filterBy,\n\tgetUniqueDomains: () => getUniqueDomains,\n\tgetUniqueOwners: () => getUniqueOwners,\n\tgetUniqueTags: () => getUniqueTags,\n\tgroupBy: () => groupBy,\n\tgroupByMultiple: () => groupByMultiple,\n\tgroupByToArray: () => groupByToArray\n});\n/**\n* Filter items by criteria.\n* All criteria are combined with AND logic.\n*/\nfunction filterBy(items, filter) {\n\treturn items.filter((item) => {\n\t\tif (filter.tags?.length) {\n\t\t\tif (!filter.tags.some((tag) => item.meta.tags?.includes(tag))) return false;\n\t\t}\n\t\tif (filter.owners?.length) {\n\t\t\tif (!filter.owners.some((owner) => item.meta.owners?.includes(owner))) return false;\n\t\t}\n\t\tif (filter.stability?.length) {\n\t\t\tif (!filter.stability.includes(item.meta.stability ?? \"stable\")) return false;\n\t\t}\n\t\tif (filter.domain) {\n\t\t\tif (GroupingStrategies.byDomain(item) !== filter.domain) return false;\n\t\t}\n\t\tif (filter.namePattern) {\n\t\t\tconst name = item.meta.name ?? item.meta.key ?? \"\";\n\t\t\tconst pattern = filter.namePattern.replace(/\\*/g, \".*\").replace(/\\?/g, \".\");\n\t\t\tif (!new RegExp(`^${pattern}$`, \"i\").test(name)) return false;\n\t\t}\n\t\treturn true;\n\t});\n}\n/**\n* Group items by key function.\n*/\nfunction groupBy(items, keyFn) {\n\tconst groups = /* @__PURE__ */ new Map();\n\tfor (const item of items) {\n\t\tconst key = keyFn(item);\n\t\tconst existing = groups.get(key);\n\t\tif (existing) existing.push(item);\n\t\telse groups.set(key, [item]);\n\t}\n\treturn groups;\n}\n/**\n* Group items by key function, returning array format.\n*/\nfunction groupByToArray(items, keyFn) {\n\tconst map = groupBy(items, keyFn);\n\treturn Array.from(map.entries()).map(([key, items$1]) => ({\n\t\tkey,\n\t\titems: items$1\n\t}));\n}\n/**\n* Group items where one item can belong to multiple groups.\n* Useful for byAllTags grouping.\n*/\nfunction groupByMultiple(items, keysFn) {\n\tconst groups = /* @__PURE__ */ new Map();\n\tfor (const item of items) {\n\t\tconst keys = keysFn(item);\n\t\tfor (const key of keys) {\n\t\t\tconst existing = groups.get(key);\n\t\t\tif (existing) existing.push(item);\n\t\t\telse groups.set(key, [item]);\n\t\t}\n\t}\n\treturn groups;\n}\n/**\n* Get unique tags from a collection of items.\n*/\nfunction getUniqueTags(items) {\n\tconst tags = /* @__PURE__ */ new Set();\n\tfor (const item of items) for (const tag of item.meta.tags ?? []) tags.add(tag);\n\treturn Array.from(tags).sort();\n}\n/**\n* Get unique owners from a collection of items.\n*/\nfunction getUniqueOwners(items) {\n\tconst owners = /* @__PURE__ */ new Set();\n\tfor (const item of items) for (const owner of item.meta.owners ?? []) owners.add(owner);\n\treturn Array.from(owners).sort();\n}\n/**\n* Get unique domains from a collection of items.\n*/\nfunction getUniqueDomains(items) {\n\tconst domains = /* @__PURE__ */ new Set();\n\tfor (const item of items) domains.add(GroupingStrategies.byDomain(item));\n\treturn Array.from(domains).sort();\n}\nvar GroupingStrategies;\nvar init_registry_utils = __esmMin(() => {\n\tGroupingStrategies = {\n\t\tbyTag: (item) => item.meta.tags?.[0] ?? \"untagged\",\n\t\tbyAllTags: (item) => item.meta.tags?.length ? item.meta.tags : [\"untagged\"],\n\t\tbyOwner: (item) => item.meta.owners?.[0] ?? \"unowned\",\n\t\tbyDomain: (item) => {\n\t\t\treturn (item.meta.name ?? item.meta.key ?? \"\").split(\".\")[0] ?? \"default\";\n\t\t},\n\t\tbyStability: (item) => item.meta.stability ?? \"stable\",\n\t\tbyUrlPath: (level) => (item) => {\n\t\t\tif (!item.path) return \"root\";\n\t\t\treturn item.path.split(\"/\").filter(Boolean).slice(0, level).join(\"/\") || \"root\";\n\t\t}\n\t};\n});\n\n//#endregion\ninit_registry_utils();\nexport { GroupingStrategies, filterBy, getUniqueDomains, getUniqueOwners, getUniqueTags, groupBy, groupByMultiple, groupByToArray, init_registry_utils, registry_utils_exports };"],"mappings":";;;AAsGA,IAAI;AACJ,IAAI,sBAAsB,eAAe;AACxC,sBAAqB;EACpB,QAAQ,SAAS,KAAK,KAAK,OAAO,MAAM;EACxC,YAAY,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,KAAK,OAAO,CAAC,WAAW;EAC3E,UAAU,SAAS,KAAK,KAAK,SAAS,MAAM;EAC5C,WAAW,SAAS;AACnB,WAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,OAAO,IAAI,MAAM,IAAI,CAAC,MAAM;;EAEjE,cAAc,SAAS,KAAK,KAAK,aAAa;EAC9C,YAAY,WAAW,SAAS;AAC/B,OAAI,CAAC,KAAK,KAAM,QAAO;AACvB,UAAO,KAAK,KAAK,MAAM,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI;;EAE1E;EACA;AAGF,qBAAqB"}
@@ -1,11 +1,11 @@
1
1
  import * as react_jsx_runtime108 from "react/jsx-runtime";
2
2
  import * as _lssm_lib_schema0 from "@lssm/lib.schema";
3
- import * as _lssm_lib_contracts_forms0 from "@lssm/lib.contracts/forms";
3
+ import * as _lssm_lib_contracts_forms_forms0 from "@lssm/lib.contracts/forms/forms";
4
4
  import * as _lssm_lib_contracts_client_react_form_render0 from "@lssm/lib.contracts/client/react/form-render";
5
5
 
6
6
  //#region src/renderers/form-contract.d.ts
7
7
  declare const formRenderer: {
8
- render: (spec: _lssm_lib_contracts_forms0.FormSpec<_lssm_lib_schema0.AnySchemaModel>, options?: _lssm_lib_contracts_client_react_form_render0.RenderOptions<Record<string, any>> | undefined) => react_jsx_runtime108.JSX.Element;
8
+ render: (spec: _lssm_lib_contracts_forms_forms0.FormSpec<_lssm_lib_schema0.AnySchemaModel>, options?: _lssm_lib_contracts_client_react_form_render0.RenderOptions<Record<string, any>> | undefined) => react_jsx_runtime108.JSX.Element;
9
9
  };
10
10
  //#endregion
11
11
  export { formRenderer };
@@ -1 +1 @@
1
- {"version":3,"file":"form-contract.d.ts","names":[],"sources":["../../src/renderers/form-contract.tsx"],"sourcesContent":[],"mappings":";;;;;;cA+Fa;qDAsBX,iBAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"form-contract.d.ts","names":[],"sources":["../../src/renderers/form-contract.tsx"],"sourcesContent":[],"mappings":";;;;;;cA+Fa;2DAsBX,iBAAA,CAAA,cAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/lib.design-system",
3
- "version": "0.0.0-canary-20251221114240",
3
+ "version": "0.0.0-canary-20251221144710",
4
4
  "scripts": {
5
5
  "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
6
6
  "publish:pkg:canary": "bun publish:pkg --tag canary",
@@ -21,10 +21,10 @@
21
21
  "tree-shake": true,
22
22
  "dependencies": {
23
23
  "@hookform/resolvers": "5.2.2",
24
- "@lssm/lib.ai-agent": "0.0.0-canary-20251221114240",
25
- "@lssm/lib.contracts": "0.0.0-canary-20251221114240",
26
- "@lssm/lib.ui-kit": "0.0.0-canary-20251221114240",
27
- "@lssm/lib.ui-kit-web": "0.0.0-canary-20251221114240",
24
+ "@lssm/lib.ai-agent": "0.0.0-canary-20251221144710",
25
+ "@lssm/lib.contracts": "0.0.0-canary-20251221144710",
26
+ "@lssm/lib.ui-kit": "0.0.0-canary-20251221144710",
27
+ "@lssm/lib.ui-kit-web": "0.0.0-canary-20251221144710",
28
28
  "class-variance-authority": "^0.7.1",
29
29
  "clsx": "^2.1.1",
30
30
  "lucide-react": "^0.535.0",
@@ -36,8 +36,8 @@
36
36
  "next": "16.1.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@lssm/tool.typescript": "0.0.0-canary-20251221114240",
40
- "@lssm/tool.tsdown": "0.0.0-canary-20251221114240",
39
+ "@lssm/tool.typescript": "0.0.0-canary-20251221144710",
40
+ "@lssm/tool.tsdown": "0.0.0-canary-20251221144710",
41
41
  "@types/node": "^24.9.0",
42
42
  "@types/react-dom": "^19.0.14",
43
43
  "postcss": "^8.5",
@@ -1 +0,0 @@
1
- {"version":3,"file":"forms.js","names":[],"sources":["../../../../contracts/dist/forms.js"],"sourcesContent":["//#region src/forms.ts\nfunction formKey(meta) {\n\treturn `${meta.key}.v${meta.version}`;\n}\nvar FormRegistry = class {\n\titems = /* @__PURE__ */ new Map();\n\tregister(spec) {\n\t\tconst key = formKey(spec.meta);\n\t\tif (this.items.has(key)) throw new Error(`Duplicate form ${key}`);\n\t\tthis.items.set(key, spec);\n\t\treturn this;\n\t}\n\tlist() {\n\t\treturn [...this.items.values()];\n\t}\n\tget(key, version) {\n\t\tif (version != null) return this.items.get(`${key}.v${version}`);\n\t\tlet candidate;\n\t\tlet max = -Infinity;\n\t\tfor (const [k, v] of this.items.entries()) {\n\t\t\tif (!k.startsWith(`${key}.v`)) continue;\n\t\t\tif (v.meta.version > max) {\n\t\t\t\tmax = v.meta.version;\n\t\t\t\tcandidate = v;\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n};\nfunction getAtPath(values, path) {\n\tif (!path) return void 0;\n\tconst segs = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\").filter(Boolean);\n\tlet cur = values;\n\tfor (const s of segs) {\n\t\tif (cur == null) return void 0;\n\t\tif (cur && typeof cur === \"object\" && s in cur) cur = cur[s];\n\t\telse return;\n\t}\n\treturn cur;\n}\nfunction evalPredicate(values, pred) {\n\tif (!pred) return true;\n\tif (pred.not) return !evalPredicate(values, pred.not);\n\tif (pred.all && pred.all.length) return pred.all.every((p) => evalPredicate(values, p));\n\tif (pred.anyOf && pred.anyOf.length) return pred.anyOf.some((p) => evalPredicate(values, p));\n\tif (pred.when) {\n\t\tconst { path, op = \"truthy\", value } = pred.when;\n\t\tconst v = getAtPath(values, path);\n\t\tswitch (op) {\n\t\t\tcase \"equals\": return v === value;\n\t\t\tcase \"notEquals\": return v !== value;\n\t\t\tcase \"in\": return Array.isArray(value) && value.includes(v);\n\t\t\tcase \"notIn\": return Array.isArray(value) && !value.includes(v);\n\t\t\tcase \"gt\": return Number(v) > Number(value);\n\t\t\tcase \"gte\": return Number(v) >= Number(value);\n\t\t\tcase \"lt\": return Number(v) < Number(value);\n\t\t\tcase \"lte\": return Number(v) <= Number(value);\n\t\t\tcase \"empty\": return v == null || (Array.isArray(v) ? v.length === 0 : String(v).length === 0);\n\t\t\tcase \"lengthGt\": return (Array.isArray(v) || typeof v === \"string\") && v.length > Number(value ?? 0);\n\t\t\tcase \"lengthGte\": return (Array.isArray(v) || typeof v === \"string\") && v.length >= Number(value ?? 0);\n\t\t\tcase \"lengthLt\": return (Array.isArray(v) || typeof v === \"string\") && v.length < Number(value ?? 0);\n\t\t\tcase \"lengthLte\": return (Array.isArray(v) || typeof v === \"string\") && v.length <= Number(value ?? 0);\n\t\t\tcase \"truthy\":\n\t\t\tdefault: return Boolean(v);\n\t\t}\n\t}\n\treturn true;\n}\n/**\n* Wrap the base zod schema with relation-driven refinements (requiredWhen, array min/max)\n* and optional custom constraints. Call this when wiring RHF resolver.\n*/\nfunction buildZodWithRelations(spec, handlers) {\n\treturn spec.model.getZod().superRefine((values, ctx) => {\n\t\tconst visit = (field, parentPath) => {\n\t\t\tconst path = field.name ? parentPath ? `${parentPath}.${field.name}` : field.name : parentPath ?? \"\";\n\t\t\tif (field.requiredWhen) {\n\t\t\t\tif (evalPredicate(values, field.requiredWhen)) {\n\t\t\t\t\tconst v = getAtPath(values, path);\n\t\t\t\t\tif (v == null || typeof v === \"string\" && v.trim().length === 0 || Array.isArray(v) && v.length === 0) ctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\t\tmessage: \"required\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (field.kind === \"array\") {\n\t\t\t\tconst arr = getAtPath(values, path);\n\t\t\t\tif (field.min != null && Array.isArray(arr) && arr.length < field.min) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `min:${field.min}`\n\t\t\t\t});\n\t\t\t\tif (field.max != null && Array.isArray(arr) && arr.length > field.max) ctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tpath: path.split(\".\"),\n\t\t\t\t\tmessage: `max:${field.max}`\n\t\t\t\t});\n\t\t\t\tvisit(field.of, path);\n\t\t\t} else if (field.kind === \"group\") for (const child of field.fields) visit(child, path);\n\t\t};\n\t\tfor (const f of spec.fields) visit(f);\n\t\tif (spec.constraints && handlers) for (const c of spec.constraints) {\n\t\t\tconst fn = handlers[c.key];\n\t\t\tif (!fn) continue;\n\t\t\tconst res = fn(values, c.paths, c.args);\n\t\t\tif (!res.ok) ctx.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tpath: (res.path ?? c.paths[0] ?? \"\").split(\".\").filter(Boolean),\n\t\t\t\tmessage: res.message ?? c.messageI18n\n\t\t\t});\n\t\t}\n\t});\n}\nfunction defineFormSpec(spec) {\n\treturn spec;\n}\n\n//#endregion\nexport { FormRegistry, buildZodWithRelations, defineFormSpec, evalPredicate };"],"mappings":"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"}