@pilotiq/pilotiq 0.3.0 → 0.4.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.
@@ -26,6 +26,9 @@ export interface FieldShellProps {
26
26
  /** Right-of-input counterpart. Used by `revealable() / copyable() /
27
27
  * suffixAction()`. Renders after the passive `suffix` decoration. */
28
28
  after?: React.ReactNode;
29
+ /** Optional ReactNode rendered inline next to the label — used by
30
+ * plugins that register via `registerFieldLabelSlot()`. */
31
+ labelSlot?: React.ReactNode;
29
32
  }
30
- export declare function FieldShell({ el, name, label, required, children, before, after }: FieldShellProps): React.ReactElement;
33
+ export declare function FieldShell({ el, name, label, required, children, before, after, labelSlot }: FieldShellProps): React.ReactElement;
31
34
  //# sourceMappingURL=FieldShell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FieldShell.d.ts","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAS,WAAW,CAAA;IACtB,IAAI,EAAO,MAAM,CAAA;IACjB,KAAK,EAAM,MAAM,CAAA;IACjB,QAAQ,EAAG,OAAO,CAAA;IAClB,QAAQ,EAAG,KAAK,CAAC,SAAS,CAAA;IAC1B;;;0DAGsD;IACtD,MAAM,CAAC,EAAI,KAAK,CAAC,SAAS,CAAA;IAC1B;0EACsE;IACtE,KAAK,CAAC,EAAK,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAqDtH"}
1
+ {"version":3,"file":"FieldShell.d.ts","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAS,WAAW,CAAA;IACtB,IAAI,EAAO,MAAM,CAAA;IACjB,KAAK,EAAM,MAAM,CAAA;IACjB,QAAQ,EAAG,OAAO,CAAA;IAClB,QAAQ,EAAG,KAAK,CAAC,SAAS,CAAA;IAC1B;;;0DAGsD;IACtD,MAAM,CAAC,EAAI,KAAK,CAAC,SAAS,CAAA;IAC1B;0EACsE;IACtE,KAAK,CAAC,EAAK,KAAK,CAAC,SAAS,CAAA;IAC1B;gEAC4D;IAC5D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAsDjI"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getIcon } from '../../icons/registry.js';
3
- export function FieldShell({ el, name, label, required, children, before, after }) {
3
+ export function FieldShell({ el, name, label, required, children, before, after, labelSlot }) {
4
4
  const prefix = el['prefix'];
5
5
  const suffix = el['suffix'];
6
6
  const helperText = el['helperText'];
@@ -10,7 +10,7 @@ export function FieldShell({ el, name, label, required, children, before, after
10
10
  const labelClass = hiddenLabel
11
11
  ? 'sr-only'
12
12
  : 'text-sm font-medium leading-none';
13
- const labelEl = label !== '' ? (_jsxs("label", { htmlFor: name, className: labelClass, children: [label, required && _jsx("span", { className: "text-destructive ml-0.5", children: "*" })] })) : null;
13
+ const labelEl = label !== '' ? (_jsxs("label", { htmlFor: name, className: labelClass, children: [label, required && _jsx("span", { className: "text-destructive ml-0.5", children: "*" }), labelSlot] })) : null;
14
14
  const hasDecoration = !!(prefix || suffix || before || after);
15
15
  const input = hasDecoration
16
16
  ? (_jsxs("div", { className: "flex items-center gap-2", children: [before, prefix && _jsx(Decoration, { content: prefix, side: "prefix" }), _jsx("div", { className: "flex-1 min-w-0", children: children }), suffix && _jsx(Decoration, { content: suffix, side: "suffix" }), after] }))
@@ -1 +1 @@
1
- {"version":3,"file":"FieldShell.js","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FieldShell.js","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAiCjD,MAAM,UAAU,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAmB;IAC3G,MAAM,MAAM,GAAO,EAAE,CAAC,QAAQ,CAA8C,CAAA;IAC5E,MAAM,MAAM,GAAO,EAAE,CAAC,QAAQ,CAA8C,CAAA;IAC5E,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAuB,CAAA;IACzD,MAAM,MAAM,GAAO,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC7C,MAAM,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,IAAI,CAAA;IAC9C,MAAM,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAA;IAEzC,MAAM,UAAU,GAAG,WAAW;QAC5B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,kCAAkC,CAAA;IACtC,MAAM,OAAO,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,CAC7B,iBAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,aACxC,KAAK,EAAE,QAAQ,IAAI,eAAM,SAAS,EAAC,yBAAyB,kBAAS,EACrE,SAAS,IACJ,CACT,CAAC,CAAC,CAAC,IAAI,CAAA;IAER,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,CAAC,CAAA;IAC7D,MAAM,KAAK,GAAG,aAAa;QACzB,CAAC,CAAC,CACA,eAAK,SAAS,EAAC,yBAAyB,aACrC,MAAM,EACN,MAAM,IAAI,KAAC,UAAU,IAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAC,QAAQ,GAAG,EACxD,cAAK,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAO,EAC/C,MAAM,IAAI,KAAC,UAAU,IAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAC,QAAQ,GAAG,EACvD,KAAK,IACF,CACP;QACD,CAAC,CAAC,QAAQ,CAAA;IAEZ,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CACL,eAAK,SAAS,EAAC,2BAA2B,KAAK,YAAY,aACxD,OAAO,IAAI,cAAK,SAAS,EAAC,eAAe,YAAE,OAAO,GAAO,EAC1D,eAAK,SAAS,EAAC,gBAAgB,aAC5B,KAAK,EACL,UAAU,IAAI,CACb,YAAG,SAAS,EAAC,oCAAoC,YAAE,UAAU,GAAK,CACnE,IACG,IACF,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,KAAK,YAAY,aACpD,OAAO,EACP,KAAK,EACL,UAAU,IAAI,CACb,YAAG,SAAS,EAAC,+BAA+B,YAAE,UAAU,GAAK,CAC9D,IACG,CACP,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,EAAe;IACvC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAsE,CAAA;IACpG,MAAM,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAA0D,CAAA;IACpG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAA;IACvB,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAA;AACvC,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAGlC;IACC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CACL,eAAM,SAAS,EAAC,wCAAwC,eAAY,IAAI,YACrE,OAAO,GACH,CACR,CAAA;IACH,CAAC;IACD,OAAO,KAAC,cAAc,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAI,CAAA;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,IAAI,EAAoB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAwG,CAAA;IACjI,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,OAAO,KAAC,IAAI,IAAC,SAAS,EAAC,uCAAuC,iBAAa,MAAM,GAAG,CAAA;AACtF,CAAC"}
@@ -2,6 +2,7 @@ export { AppShell, type AppShellProps } from './AppShell.js';
2
2
  export { ComponentRegistryProvider, useComponentRegistry, useIconFor, type ComponentRegistry, } from './icon-context.js';
3
3
  export { SchemaRenderer, type SchemaRendererProps, FormFields, type FormFieldsProps, } from './SchemaRenderer.js';
4
4
  export { registerFieldRenderer, getFieldRenderer, type FieldRendererProps } from './registry.js';
5
+ export { registerFieldLabelSlot, getFieldLabelSlot, type FieldLabelSlotProps } from './FieldLabelSlotRegistry.js';
5
6
  export { registerWidgetRenderer, getWidgetRenderer, type WidgetRendererProps, } from './widgetRegistry.js';
6
7
  export { FormStateProvider, useFieldState, useFormState, type FormStateApi, type FormStateProviderProps, type UseFieldStateResult, } from './FormStateContext.js';
7
8
  export { parseFormDataToNested } from './formStateHelpers.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,EACV,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAChG,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAW,gBAAgB,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,KAAK,aAAa,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,EACV,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAW,gBAAgB,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,KAAK,aAAa,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA"}
@@ -2,6 +2,7 @@ export { AppShell } from './AppShell.js';
2
2
  export { ComponentRegistryProvider, useComponentRegistry, useIconFor, } from './icon-context.js';
3
3
  export { SchemaRenderer, FormFields, } from './SchemaRenderer.js';
4
4
  export { registerFieldRenderer, getFieldRenderer } from './registry.js';
5
+ export { registerFieldLabelSlot, getFieldLabelSlot } from './FieldLabelSlotRegistry.js';
5
6
  export { registerWidgetRenderer, getWidgetRenderer, } from './widgetRegistry.js';
6
7
  export { FormStateProvider, useFieldState, useFormState, } from './FormStateContext.js';
7
8
  export { parseFormDataToNested } from './formStateHelpers.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GAEX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,cAAc,EAEd,UAAU,GAEX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAA2B,MAAM,eAAe,CAAA;AAChG,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,GAIb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GAId,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,uBAAuB,GAGxB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,YAAY,GAEb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EACL,iBAAiB,EACjB,eAAe,GAGhB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAW,gBAAgB,CAAA;AAE/C,iHAAiH;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,mBAAmB;AACnB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAyC,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GAEX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,cAAc,EAEd,UAAU,GAEX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAA2B,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAA4B,MAAM,6BAA6B,CAAA;AACjH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,GAIb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GAId,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,uBAAuB,GAGxB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,YAAY,GAEb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EACL,iBAAiB,EACjB,eAAe,GAGhB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAW,gBAAgB,CAAA;AAE/C,iHAAiH;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,mBAAmB;AACnB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAyC,MAAM,eAAe,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pilotiq/pilotiq",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "View-based admin panel for RudderJS",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/pageData.ts CHANGED
@@ -955,6 +955,37 @@ export function tagFormWizardUrls(
955
955
  }
956
956
  }
957
957
 
958
+ /**
959
+ * Stamp `_agentRunBase` on every field element in the resolved
960
+ * `ElementMeta[]` tree that carries `aiActions`. Operates on the
961
+ * post-`resolveSchema` wire shape (plain objects) rather than on
962
+ * `Element` instances — `aiActions` is added by the `field-ai.ts`
963
+ * wrapper during `toMeta()`, so it isn't visible to pre-resolve walkers.
964
+ *
965
+ * Only called on edit pages where a `recordId` is known. Create pages
966
+ * deliberately skip it — field AI actions target existing content.
967
+ */
968
+ export function tagFieldAiUrls(
969
+ elements: ReadonlyArray<Record<string, unknown>>,
970
+ agentBase: string,
971
+ ): void {
972
+ for (const el of elements) {
973
+ if (Array.isArray(el['aiActions']) && (el['aiActions'] as unknown[]).length > 0) {
974
+ ;(el as Record<string, unknown>)['_agentRunBase'] = agentBase
975
+ }
976
+ const children = el['children']
977
+ if (Array.isArray(children)) tagFieldAiUrls(children as Record<string, unknown>[], agentBase)
978
+ // Repeater rows
979
+ const rows = el['rows']
980
+ if (Array.isArray(rows)) {
981
+ for (const row of rows as Record<string, unknown>[]) {
982
+ const rowChildren = row['children']
983
+ if (Array.isArray(rowChildren)) tagFieldAiUrls(rowChildren as Record<string, unknown>[], agentBase)
984
+ }
985
+ }
986
+ }
987
+ }
988
+
958
989
  /**
959
990
  * Audit row 2026-05-07 cont'd⁸ — stamp the inline-create-option endpoint
960
991
  * URL on every `SelectField` that has called `createOptionForm()`. Walks
@@ -1860,6 +1891,8 @@ export async function resourceEditData(
1860
1891
  editRoute,
1861
1892
  )
1862
1893
 
1894
+ tagFieldAiUrls(schemaData as Record<string, unknown>[], `${resourceBase}/${recordId}/_agents`)
1895
+
1863
1896
  return {
1864
1897
  panel: await panelInfo(pilotiq, req, editRoute),
1865
1898
  page: PageClass.toMeta(),
@@ -0,0 +1,30 @@
1
+ import type { ComponentType } from 'react'
2
+
3
+ /**
4
+ * Props the field label slot component receives from `SchemaRenderer`.
5
+ * For AI actions this carries the field name, action list, and the
6
+ * pre-composed agent-run base URL stamped by `tagFieldAiUrls`.
7
+ */
8
+ export interface FieldLabelSlotProps {
9
+ fieldName: string
10
+ actions: Array<{ slug: string; label: string; icon?: string }>
11
+ agentRunBase: string
12
+ }
13
+
14
+ let _component: ComponentType<FieldLabelSlotProps> | null = null
15
+
16
+ /**
17
+ * Register a component to render inline next to every field label that
18
+ * has `aiActions` stamped on its meta. Called once at boot by a plugin's
19
+ * `register(panel)` step (e.g. `@pilotiq-pro/ai`). No-op when no plugin
20
+ * registers — `getFieldLabelSlot()` returns `null` and `SchemaRenderer`
21
+ * skips the slot.
22
+ */
23
+ export function registerFieldLabelSlot(C: ComponentType<FieldLabelSlotProps>): void {
24
+ _component = C
25
+ }
26
+
27
+ /** Returns the registered field label slot component, or `null`. */
28
+ export function getFieldLabelSlot(): ComponentType<FieldLabelSlotProps> | null {
29
+ return _component
30
+ }
@@ -1,6 +1,7 @@
1
1
  import React, { useEffect, useRef, useState } from 'react'
2
2
  import type { ElementMeta } from '../schema/Element.js'
3
3
  import { getFieldRenderer } from './registry.js'
4
+ import { getFieldLabelSlot } from './FieldLabelSlotRegistry.js'
4
5
  import { FormStateProvider, useFormState, FormIdContext } from './FormStateContext.js'
5
6
  import { Checkbox } from './ui/checkbox.js'
6
7
  import { Input } from './ui/input.js'
@@ -185,6 +186,16 @@ function renderField(el: ElementMeta, index: number): React.ReactNode {
185
186
  return <HiddenInput key={index} name={name} defaultValue={defaultValue} />
186
187
  }
187
188
 
189
+ // Field label slot — rendered next to the label when a plugin registered
190
+ // a component via registerFieldLabelSlot() and the field has aiActions +
191
+ // _agentRunBase stamped on its meta (set by tagFieldAiUrls in pageData).
192
+ const LabelSlot = getFieldLabelSlot()
193
+ const aiActions = Array.isArray(el['aiActions']) ? el['aiActions'] as Array<{ slug: string; label: string; icon?: string }> : undefined
194
+ const agentRunBase = typeof el['_agentRunBase'] === 'string' ? el['_agentRunBase'] : undefined
195
+ const labelSlot = (LabelSlot && aiActions?.length && agentRunBase)
196
+ ? <LabelSlot fieldName={name} actions={aiActions} agentRunBase={agentRunBase} />
197
+ : undefined
198
+
188
199
  const autofocus = el['autofocus'] === true
189
200
  const extraInput = el['extraInputAttributes'] as Record<string, string | number | boolean> | undefined
190
201
  const common = {
@@ -204,7 +215,7 @@ function renderField(el: ElementMeta, index: number): React.ReactNode {
204
215
  const Custom = getFieldRenderer(fieldType)
205
216
  if (Custom) {
206
217
  return (
207
- <FieldShell key={index} el={el} name={name} label={label} required={required}>
218
+ <FieldShell key={index} el={el} name={name} label={label} required={required} labelSlot={labelSlot}>
208
219
  <Custom
209
220
  el={el}
210
221
  name={name}
@@ -230,6 +241,7 @@ function renderField(el: ElementMeta, index: number): React.ReactNode {
230
241
  label={label}
231
242
  required={required}
232
243
  common={common}
244
+ labelSlot={labelSlot}
233
245
  />
234
246
  )
235
247
  }
@@ -237,7 +249,7 @@ function renderField(el: ElementMeta, index: number): React.ReactNode {
237
249
  const input = renderFieldInput(fieldType, el, name, defaultValue, defaultStr, common, disabled, required, placeholder)
238
250
 
239
251
  return (
240
- <FieldShell key={index} el={el} name={name} label={label} required={required}>
252
+ <FieldShell key={index} el={el} name={name} label={label} required={required} labelSlot={labelSlot}>
241
253
  {input}
242
254
  </FieldShell>
243
255
  )
@@ -249,13 +261,14 @@ function renderField(el: ElementMeta, index: number): React.ReactNode {
249
261
  * Keeps `renderField` itself hook-free.
250
262
  */
251
263
  function TextFieldShell({
252
- el, name, label, required, common,
264
+ el, name, label, required, common, labelSlot,
253
265
  }: {
254
- el: ElementMeta
255
- name: string
256
- label: string
257
- required: boolean
258
- common: Record<string, unknown>
266
+ el: ElementMeta
267
+ name: string
268
+ label: string
269
+ required: boolean
270
+ common: Record<string, unknown>
271
+ labelSlot?: React.ReactNode
259
272
  }): React.ReactElement {
260
273
  const controls = useTextInputControls(el, name, (m) => renderElement(m, 0))
261
274
 
@@ -297,6 +310,7 @@ function TextFieldShell({
297
310
  required={required}
298
311
  before={controls.before}
299
312
  after={controls.after}
313
+ labelSlot={labelSlot}
300
314
  >
301
315
  {input}
302
316
  </FieldShell>
@@ -28,9 +28,12 @@ export interface FieldShellProps {
28
28
  /** Right-of-input counterpart. Used by `revealable() / copyable() /
29
29
  * suffixAction()`. Renders after the passive `suffix` decoration. */
30
30
  after?: React.ReactNode
31
+ /** Optional ReactNode rendered inline next to the label — used by
32
+ * plugins that register via `registerFieldLabelSlot()`. */
33
+ labelSlot?: React.ReactNode
31
34
  }
32
35
 
33
- export function FieldShell({ el, name, label, required, children, before, after }: FieldShellProps): React.ReactElement {
36
+ export function FieldShell({ el, name, label, required, children, before, after, labelSlot }: FieldShellProps): React.ReactElement {
34
37
  const prefix = el['prefix'] as string | { icon: string } | undefined
35
38
  const suffix = el['suffix'] as string | { icon: string } | undefined
36
39
  const helperText = el['helperText'] as string | undefined
@@ -44,6 +47,7 @@ export function FieldShell({ el, name, label, required, children, before, after
44
47
  const labelEl = label !== '' ? (
45
48
  <label htmlFor={name} className={labelClass}>
46
49
  {label}{required && <span className="text-destructive ml-0.5">*</span>}
50
+ {labelSlot}
47
51
  </label>
48
52
  ) : null
49
53
 
@@ -13,6 +13,7 @@ export {
13
13
  type FormFieldsProps,
14
14
  } from './SchemaRenderer.js'
15
15
  export { registerFieldRenderer, getFieldRenderer, type FieldRendererProps } from './registry.js'
16
+ export { registerFieldLabelSlot, getFieldLabelSlot, type FieldLabelSlotProps } from './FieldLabelSlotRegistry.js'
16
17
  export {
17
18
  registerWidgetRenderer,
18
19
  getWidgetRenderer,