agentic-zi-ui 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,5 +3,9 @@
3
3
  All notable changes to this package will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
- - Initial renderer extraction as `agentic-zi-ui`
7
- - Export branded component `ZijusCustomWidget`
6
+
7
+ ## [0.1.0] - 2026-02-14
8
+ - Added `AgenticComponent` widget wrapper for server payload rendering.
9
+ - Added widget-scoped stylesheet injection (`cssText` / `cssUrl`) support.
10
+ - Added source-based package layout (`src/*`) and regenerated `dist/*`.
11
+ - Kept backward-compatible `ZijusCustomWidget` export.
package/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # agentic-zi-ui
2
+
3
+ Safe React renderer for server-driven UI widgets.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm i agentic-zi-ui
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```tsx
14
+ import { AgenticComponent } from "agentic-zi-ui";
15
+
16
+ <AgenticComponent
17
+ widgetJson={widgetFromServer}
18
+ onFlowEvent={(name, payload) => {
19
+ console.log(name, payload);
20
+ }}
21
+ />;
22
+ ```
23
+
24
+ `AgenticComponent` supports widget-scoped CSS injection (`cssText` or `cssUrl`) so host apps do not need Tailwind installed.
25
+
26
+ ## Compatibility
27
+
28
+ `ZijusCustomWidget` is still exported for existing integrations.
@@ -1,4 +1,5 @@
1
- import type { UiTemplate, UiActionType } from "agentic-zi-ui-schema";
1
+ import React from "react";
2
+ import { type UiActionType, type UiTemplate } from "./contracts";
2
3
  export type RenderPolicy = {
3
4
  allowedTags?: string[];
4
5
  allowedProps?: string[];
@@ -7,8 +8,9 @@ export type RenderPolicy = {
7
8
  export type UiRendererProps = {
8
9
  template: UiTemplate;
9
10
  data?: Record<string, unknown>;
10
- onFlowEvent: (name: string, payload?: Record<string, unknown>) => void;
11
+ onFlowEvent?: (name: string, payload?: Record<string, unknown>) => void;
12
+ onToast?: (message: string) => void;
11
13
  policy?: RenderPolicy;
12
14
  };
13
- export declare function UiRenderer({ template, data, onFlowEvent, policy, }: UiRendererProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function UiRenderer({ template, data, onFlowEvent, onToast, policy, }: UiRendererProps): React.ReactElement;
14
16
  //# sourceMappingURL=UiRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiRenderer.d.ts","sourceRoot":"","sources":["../src/UiRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,UAAU,EAEV,YAAY,EACb,MAAM,sBAAsB,CAAC;AAgB9B,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvE,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAyGF,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,MAAM,GACP,EAAE,eAAe,2CAoQjB"}
1
+ {"version":3,"file":"UiRenderer.d.ts","sourceRoot":"","sources":["../src/UiRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAKL,KAAK,YAAY,EAEjB,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AA2JrB,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,OAAO,EACP,MAAM,GACP,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CA6QtC"}
@@ -1,53 +1,72 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
2
  import React, { useMemo, useReducer } from "react";
4
- import { UI_ALLOWED_TAGS, UI_ALLOWED_PROPS, UiActionTypeSchema, } from "agentic-zi-ui-schema";
3
+ import { UI_ACTION_TYPES, UI_ALLOWED_PROPS, UI_ALLOWED_TAGS, } from "./contracts";
5
4
  import { runAction } from "./actions";
6
5
  const BASE_ALLOWED_TAGS = new Set(UI_ALLOWED_TAGS);
7
6
  const BASE_ALLOWED_PROPS = new Set(UI_ALLOWED_PROPS);
8
- const BASE_ALLOWED_ACTIONS = new Set(UiActionTypeSchema.options);
9
- const MAX_REPEAT_ITEMS = 100;
10
- const MAX_REPEAT_DEPTH = 2;
7
+ const BASE_ALLOWED_ACTIONS = new Set(UI_ACTION_TYPES);
8
+ const MAX_REPEAT_ITEMS = 200;
9
+ const MAX_REPEAT_DEPTH = 4;
11
10
  function reducer(state, action) {
12
11
  switch (action.type) {
13
12
  case "patch":
14
13
  return { ...state, [action.key]: action.value };
14
+ case "reset":
15
+ return action.next;
15
16
  default:
16
17
  return state;
17
18
  }
18
19
  }
20
+ function readInitialState(data) {
21
+ if (!data || typeof data !== "object")
22
+ return {};
23
+ const state = data.state;
24
+ if (!state || typeof state !== "object" || Array.isArray(state))
25
+ return {};
26
+ return { ...state };
27
+ }
19
28
  function resolvePath(data, keyPath) {
20
- const parts = keyPath.split(".").map((p) => p.trim()).filter(Boolean);
29
+ const parts = keyPath
30
+ .split(".")
31
+ .map((p) => p.trim())
32
+ .filter(Boolean);
21
33
  let current = data;
22
34
  for (const part of parts) {
23
- if (current == null)
35
+ if (current == null || typeof current !== "object")
24
36
  return undefined;
25
37
  current = current[part];
26
38
  }
27
39
  return current;
28
40
  }
29
- function interpolateValue(s, data) {
30
- const fullMatch = s.match(/^\s*\{\{([^}]+)\}\}\s*$/);
41
+ function interpolateValue(input, data) {
42
+ const fullMatch = input.match(/^\s*\{\{([^}]+)\}\}\s*$/);
31
43
  if (fullMatch) {
32
44
  const keyPath = fullMatch[1].trim();
33
- const v = resolvePath(data, keyPath);
34
- return v === undefined || v === null ? "" : v;
45
+ const resolved = resolvePath(data, keyPath);
46
+ return resolved ?? "";
35
47
  }
36
- return s.replace(/\{\{([^}]+)\}\}/g, (_m, rawKey) => {
37
- const keyPath = String(rawKey).trim();
38
- const v = resolvePath(data, keyPath);
39
- return v === undefined || v === null ? "" : String(v);
48
+ return input.replace(/\{\{([^}]+)\}\}/g, (_match, rawKey) => {
49
+ const keyPath = rawKey.trim();
50
+ const resolved = resolvePath(data, keyPath);
51
+ if (resolved === undefined || resolved === null)
52
+ return "";
53
+ return String(resolved);
40
54
  });
41
55
  }
42
- function interpolateString(s, data) {
43
- const v = interpolateValue(s, data);
44
- return typeof v === "string" ? v : v === undefined || v === null ? "" : String(v);
56
+ function interpolateString(input, data) {
57
+ const value = interpolateValue(input, data);
58
+ if (typeof value === "string")
59
+ return value;
60
+ if (value === undefined || value === null)
61
+ return "";
62
+ return String(value);
45
63
  }
46
64
  function deepInterpolate(value, data) {
47
65
  if (typeof value === "string")
48
66
  return interpolateValue(value, data);
49
- if (Array.isArray(value))
50
- return value.map((v) => deepInterpolate(v, data));
67
+ if (Array.isArray(value)) {
68
+ return value.map((item) => deepInterpolate(item, data));
69
+ }
51
70
  if (value && typeof value === "object") {
52
71
  const out = {};
53
72
  for (const [k, v] of Object.entries(value)) {
@@ -74,23 +93,27 @@ function isSafeImageUrl(url) {
74
93
  function pickSafeProps(raw) {
75
94
  if (!raw || typeof raw !== "object")
76
95
  return {};
77
- // Only allow a small safe subset
78
96
  const out = {};
79
- for (const k of Object.keys(raw)) {
80
- if (BASE_ALLOWED_PROPS.has(k) ||
81
- k.startsWith("aria-") ||
82
- k.startsWith("data-")) {
83
- out[k] = raw[k];
97
+ for (const key of Object.keys(raw)) {
98
+ if (BASE_ALLOWED_PROPS.has(key) ||
99
+ key.startsWith("aria-") ||
100
+ key.startsWith("data-")) {
101
+ out[key] = raw[key];
84
102
  }
85
103
  }
86
- for (const key of ["disabled", "checked", "aria-disabled", "aria-hidden"]) {
87
- const value = out[key];
104
+ for (const booleanLikeKey of [
105
+ "disabled",
106
+ "checked",
107
+ "aria-disabled",
108
+ "aria-hidden",
109
+ ]) {
110
+ const value = out[booleanLikeKey];
88
111
  if (typeof value === "string") {
89
112
  const normalized = value.trim().toLowerCase();
90
113
  if (normalized === "true")
91
- out[key] = true;
114
+ out[booleanLikeKey] = true;
92
115
  if (normalized === "false")
93
- out[key] = false;
116
+ out[booleanLikeKey] = false;
94
117
  }
95
118
  }
96
119
  return out;
@@ -106,55 +129,65 @@ function intersect(left, right) {
106
129
  }
107
130
  return out;
108
131
  }
109
- export function UiRenderer({ template, data, onFlowEvent, policy, }) {
110
- const [state, dispatch] = useReducer(reducer, {});
132
+ function asUiAction(input) {
133
+ if (!input || typeof input !== "object")
134
+ return undefined;
135
+ const type = input.type;
136
+ if (typeof type !== "string")
137
+ return undefined;
138
+ if (!BASE_ALLOWED_ACTIONS.has(type))
139
+ return undefined;
140
+ return input;
141
+ }
142
+ export function UiRenderer({ template, data, onFlowEvent, onToast, policy, }) {
143
+ const [state, dispatch] = useReducer(reducer, data, (seed) => readInitialState(seed));
111
144
  const mergedData = useMemo(() => ({ ...(data ?? {}), state }), [data, state]);
112
145
  const allowedTags = useMemo(() => intersect(BASE_ALLOWED_TAGS, policy?.allowedTags), [policy?.allowedTags]);
113
146
  const allowedProps = useMemo(() => intersect(BASE_ALLOWED_PROPS, policy?.allowedProps), [policy?.allowedProps]);
114
147
  const allowedActions = useMemo(() => intersect(BASE_ALLOWED_ACTIONS, policy?.allowedActions), [policy?.allowedActions]);
115
- const ctx = useMemo(() => ({
148
+ const context = useMemo(() => ({
116
149
  sendFlowEvent: (name, payload) => {
117
- const interpolatedPayload = deepInterpolate(payload ?? {}, mergedData);
118
- onFlowEvent(name, interpolatedPayload);
150
+ onFlowEvent?.(name, payload);
119
151
  },
120
152
  patchState: (key, value) => dispatch({ type: "patch", key, value }),
121
153
  getState: (key) => state[key],
122
154
  toast: (message) => {
123
- // POC: swap with your notification system
124
- alert(message);
155
+ if (onToast) {
156
+ onToast(message);
157
+ return;
158
+ }
159
+ if (typeof window !== "undefined") {
160
+ window.alert(message);
161
+ }
125
162
  },
126
- }), [mergedData, onFlowEvent, state]);
127
- function attachEvent(action, handler) {
128
- if (!action)
129
- return undefined;
130
- return handler;
131
- }
163
+ }), [onFlowEvent, onToast, state]);
132
164
  function renderNode(node, idxPath, ctxData, repeatDepth) {
133
165
  const tag = node.type;
134
- if (tag === "repeat") {
166
+ if (tag === "repeat" || tag === "Repeat") {
135
167
  if (repeatDepth >= MAX_REPEAT_DEPTH)
136
168
  return null;
137
169
  if (!node.items || !node.as)
138
170
  return null;
139
- const items = resolvePath(ctxData, node.items);
140
- if (!Array.isArray(items) || items.length === 0)
171
+ const sourceItems = resolvePath(ctxData, node.items);
172
+ if (!Array.isArray(sourceItems) || sourceItems.length === 0)
141
173
  return null;
142
- const sliced = items.slice(0, MAX_REPEAT_ITEMS);
143
- const children = (node.children ?? []).map((c, i) => ({ c, i }));
144
- return (_jsx(React.Fragment, { children: sliced.map((item, i) => {
174
+ const slicedItems = sourceItems.slice(0, MAX_REPEAT_ITEMS);
175
+ const children = node.children ?? [];
176
+ return (_jsx(React.Fragment, { children: slicedItems.map((item, index) => {
145
177
  const nextCtx = {
146
178
  ...ctxData,
147
179
  [node.as]: item,
148
180
  };
149
181
  if (node.indexAs) {
150
- nextCtx[node.indexAs] = i;
182
+ nextCtx[node.indexAs] = index;
151
183
  }
152
- return (_jsx(React.Fragment, { children: children.map(({ c, i: childIndex }) => {
153
- const childPath = `${idxPath}.r.${i}.${childIndex}`;
154
- if (typeof c === "string")
155
- return interpolateString(c, nextCtx);
156
- return renderNode(c, childPath, nextCtx, repeatDepth + 1);
157
- }) }, `${idxPath}.r.${i}`));
184
+ return (_jsx(React.Fragment, { children: children.map((childNode, childIndex) => {
185
+ const childPath = `${idxPath}.r.${index}.${childIndex}`;
186
+ if (typeof childNode === "string") {
187
+ return interpolateString(childNode, nextCtx);
188
+ }
189
+ return renderNode(childNode, childPath, nextCtx, repeatDepth + 1);
190
+ }) }, `${idxPath}.r.${index}`));
158
191
  }) }, idxPath));
159
192
  }
160
193
  if (!allowedTags.has(tag)) {
@@ -163,87 +196,110 @@ export function UiRenderer({ template, data, onFlowEvent, policy, }) {
163
196
  const className = node.className
164
197
  ? interpolateString(node.className, ctxData)
165
198
  : undefined;
166
- const rawProps = node.props
167
- ? deepInterpolate(node.props, ctxData)
168
- : undefined;
199
+ const rawProps = node.props ? deepInterpolate(node.props, ctxData) : undefined;
169
200
  const safeProps = pickSafeProps(rawProps);
170
- for (const k of Object.keys(safeProps)) {
171
- if (!allowedProps.has(k))
172
- delete safeProps[k];
201
+ for (const key of Object.keys(safeProps)) {
202
+ if (!allowedProps.has(key)) {
203
+ delete safeProps[key];
204
+ }
173
205
  }
174
- // Bindings (POC)
175
- if (tag === "input") {
206
+ if (tag === "input" || tag === "textarea" || tag === "select") {
176
207
  if (node.bind?.valueKey) {
177
- safeProps.value = (ctx.getState(node.bind.valueKey) ?? "");
208
+ safeProps.value = context.getState(node.bind.valueKey) ?? "";
178
209
  }
179
210
  if (node.bind?.checkedKey) {
180
- safeProps.checked = !!ctx.getState(node.bind.checkedKey);
211
+ safeProps.checked = Boolean(context.getState(node.bind.checkedKey));
181
212
  }
182
213
  }
183
- // Events
184
- const onClick = attachEvent(node.events?.onClick, async () => {
185
- if (node.events?.onClick)
186
- await runAction(node.events.onClick, ctx, undefined, allowedActions);
187
- });
188
- const onChange = attachEvent(node.events?.onChange, async (ev) => {
189
- if (node.events?.onChange)
190
- await runAction(node.events.onChange, ctx, ev, allowedActions);
191
- });
192
- const onSubmit = attachEvent(node.events?.onSubmit, async (ev) => {
193
- ev?.preventDefault?.();
194
- if (node.events?.onSubmit)
195
- await runAction(node.events.onSubmit, ctx, ev, allowedActions);
196
- });
197
- const onMouseEnter = attachEvent(node.events?.onMouseEnter, async (ev) => {
198
- if (node.events?.onMouseEnter)
199
- await runAction(node.events.onMouseEnter, ctx, ev, allowedActions);
200
- });
201
- const onMouseLeave = attachEvent(node.events?.onMouseLeave, async (ev) => {
202
- if (node.events?.onMouseLeave)
203
- await runAction(node.events.onMouseLeave, ctx, ev, allowedActions);
204
- });
205
- const onMouseOver = attachEvent(node.events?.onMouseOver, async (ev) => {
206
- if (node.events?.onMouseOver)
207
- await runAction(node.events.onMouseOver, ctx, ev, allowedActions);
208
- });
209
- const onMouseOut = attachEvent(node.events?.onMouseOut, async (ev) => {
210
- if (node.events?.onMouseOut)
211
- await runAction(node.events.onMouseOut, ctx, ev, allowedActions);
212
- });
213
- const onMouseDown = attachEvent(node.events?.onMouseDown, async (ev) => {
214
- if (node.events?.onMouseDown)
215
- await runAction(node.events.onMouseDown, ctx, ev, allowedActions);
216
- });
217
- const onMouseUp = attachEvent(node.events?.onMouseUp, async (ev) => {
218
- if (node.events?.onMouseUp)
219
- await runAction(node.events.onMouseUp, ctx, ev, allowedActions);
220
- });
221
- const onMouseMove = attachEvent(node.events?.onMouseMove, async (ev) => {
222
- if (node.events?.onMouseMove)
223
- await runAction(node.events.onMouseMove, ctx, ev, allowedActions);
224
- });
225
- const onFocus = attachEvent(node.events?.onFocus, async (ev) => {
226
- if (node.events?.onFocus)
227
- await runAction(node.events.onFocus, ctx, ev, allowedActions);
228
- });
229
- const onBlur = attachEvent(node.events?.onBlur, async (ev) => {
230
- if (node.events?.onBlur)
231
- await runAction(node.events.onBlur, ctx, ev, allowedActions);
232
- });
233
- // Children
234
- const children = (node.children ?? []).map((c, i) => {
235
- const childPath = `${idxPath}.${i}`;
236
- if (typeof c === "string")
237
- return interpolateString(c, ctxData);
238
- return renderNode(c, childPath, ctxData, repeatDepth);
214
+ const resolveAction = (action) => {
215
+ if (!action)
216
+ return undefined;
217
+ const resolved = deepInterpolate(action, ctxData);
218
+ return asUiAction(resolved);
219
+ };
220
+ const clickAction = resolveAction(node.events?.onClick);
221
+ const changeAction = resolveAction(node.events?.onChange);
222
+ const submitAction = resolveAction(node.events?.onSubmit);
223
+ const mouseEnterAction = resolveAction(node.events?.onMouseEnter);
224
+ const mouseLeaveAction = resolveAction(node.events?.onMouseLeave);
225
+ const mouseOverAction = resolveAction(node.events?.onMouseOver);
226
+ const mouseOutAction = resolveAction(node.events?.onMouseOut);
227
+ const mouseDownAction = resolveAction(node.events?.onMouseDown);
228
+ const mouseUpAction = resolveAction(node.events?.onMouseUp);
229
+ const mouseMoveAction = resolveAction(node.events?.onMouseMove);
230
+ const focusAction = resolveAction(node.events?.onFocus);
231
+ const blurAction = resolveAction(node.events?.onBlur);
232
+ const onClick = clickAction
233
+ ? async () => {
234
+ await runAction(clickAction, context, undefined, allowedActions);
235
+ }
236
+ : undefined;
237
+ const onChange = changeAction
238
+ ? async (ev) => {
239
+ await runAction(changeAction, context, ev, allowedActions);
240
+ }
241
+ : undefined;
242
+ const onSubmit = submitAction
243
+ ? async (ev) => {
244
+ ev?.preventDefault?.();
245
+ await runAction(submitAction, context, ev, allowedActions);
246
+ }
247
+ : undefined;
248
+ const onMouseEnter = mouseEnterAction
249
+ ? async (ev) => {
250
+ await runAction(mouseEnterAction, context, ev, allowedActions);
251
+ }
252
+ : undefined;
253
+ const onMouseLeave = mouseLeaveAction
254
+ ? async (ev) => {
255
+ await runAction(mouseLeaveAction, context, ev, allowedActions);
256
+ }
257
+ : undefined;
258
+ const onMouseOver = mouseOverAction
259
+ ? async (ev) => {
260
+ await runAction(mouseOverAction, context, ev, allowedActions);
261
+ }
262
+ : undefined;
263
+ const onMouseOut = mouseOutAction
264
+ ? async (ev) => {
265
+ await runAction(mouseOutAction, context, ev, allowedActions);
266
+ }
267
+ : undefined;
268
+ const onMouseDown = mouseDownAction
269
+ ? async (ev) => {
270
+ await runAction(mouseDownAction, context, ev, allowedActions);
271
+ }
272
+ : undefined;
273
+ const onMouseUp = mouseUpAction
274
+ ? async (ev) => {
275
+ await runAction(mouseUpAction, context, ev, allowedActions);
276
+ }
277
+ : undefined;
278
+ const onMouseMove = mouseMoveAction
279
+ ? async (ev) => {
280
+ await runAction(mouseMoveAction, context, ev, allowedActions);
281
+ }
282
+ : undefined;
283
+ const onFocus = focusAction
284
+ ? async (ev) => {
285
+ await runAction(focusAction, context, ev, allowedActions);
286
+ }
287
+ : undefined;
288
+ const onBlur = blurAction
289
+ ? async (ev) => {
290
+ await runAction(blurAction, context, ev, allowedActions);
291
+ }
292
+ : undefined;
293
+ const children = (node.children ?? []).map((childNode, index) => {
294
+ const childPath = `${idxPath}.${index}`;
295
+ if (typeof childNode === "string") {
296
+ return interpolateString(childNode, ctxData);
297
+ }
298
+ return renderNode(childNode, childPath, ctxData, repeatDepth);
239
299
  });
240
300
  if (tag === "a") {
241
- if (typeof safeProps.href === "string") {
242
- if (!isSafeHttpUrl(safeProps.href)) {
243
- delete safeProps.href;
244
- }
245
- }
246
- else {
301
+ const href = safeProps.href;
302
+ if (typeof href !== "string" || !isSafeHttpUrl(href)) {
247
303
  delete safeProps.href;
248
304
  }
249
305
  if (safeProps.target !== "_blank" && safeProps.target !== "_self") {
@@ -254,19 +310,15 @@ export function UiRenderer({ template, data, onFlowEvent, policy, }) {
254
310
  }
255
311
  }
256
312
  if (tag === "img") {
257
- if (typeof safeProps.src === "string") {
258
- if (!isSafeImageUrl(safeProps.src)) {
259
- delete safeProps.src;
260
- }
261
- }
262
- else {
313
+ const src = safeProps.src;
314
+ if (typeof src !== "string" || !isSafeImageUrl(src)) {
263
315
  delete safeProps.src;
264
316
  }
265
317
  if (typeof safeProps.alt !== "string") {
266
318
  safeProps.alt = "";
267
319
  }
268
320
  }
269
- const props = {
321
+ const elementProps = {
270
322
  ...safeProps,
271
323
  className,
272
324
  onClick,
@@ -283,7 +335,8 @@ export function UiRenderer({ template, data, onFlowEvent, policy, }) {
283
335
  onBlur,
284
336
  key: idxPath,
285
337
  };
286
- return React.createElement(tag, props, ...children);
338
+ return React.createElement(tag, elementProps, ...children);
287
339
  }
288
340
  return _jsx(_Fragment, { children: renderNode(template.root, "0", mergedData, 0) });
289
341
  }
342
+ //# sourceMappingURL=UiRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiRenderer.js","sourceRoot":"","sources":["../src/UiRenderer.tsx"],"names":[],"mappings":"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"}
package/dist/actions.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { UiAction, UiActionType } from "agentic-zi-ui-schema";
1
+ import type { UiAction, UiActionType } from "./contracts";
2
2
  export type ActionContext = {
3
3
  sendFlowEvent: (name: string, payload?: Record<string, unknown>) => void;
4
4
  patchState: (key: string, value: unknown) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnE,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AAWF,wBAAsB,SAAS,CAC7B,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,aAAa,EAClB,EAAE,CAAC,EAAE,OAAO,EACZ,cAAc,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAuDf"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACzE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AAgDF,wBAAsB,SAAS,CAC7B,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,aAAa,EAClB,EAAE,CAAC,EAAE,OAAO,EACZ,cAAc,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CA2Df"}
package/dist/actions.js CHANGED
@@ -1,12 +1,35 @@
1
1
  function isSafeHttpUrl(url) {
2
2
  try {
3
- const u = new URL(url);
4
- return u.protocol === "https:" || u.protocol === "http:";
3
+ const parsed = new URL(url);
4
+ return parsed.protocol === "https:" || parsed.protocol === "http:";
5
5
  }
6
6
  catch {
7
7
  return false;
8
8
  }
9
9
  }
10
+ function substituteEventValues(payload, ev) {
11
+ const eventTarget = ev?.target;
12
+ const value = eventTarget?.value;
13
+ const checked = Boolean(eventTarget?.checked);
14
+ function walk(input) {
15
+ if (input === "$event.target.value")
16
+ return value ?? null;
17
+ if (input === "$event.target.checked")
18
+ return checked;
19
+ if (Array.isArray(input)) {
20
+ return input.map(walk);
21
+ }
22
+ if (input && typeof input === "object") {
23
+ const out = {};
24
+ for (const [k, v] of Object.entries(input)) {
25
+ out[k] = walk(v);
26
+ }
27
+ return out;
28
+ }
29
+ return input;
30
+ }
31
+ return walk(payload);
32
+ }
10
33
  export async function runAction(action, ctx, ev, allowedActions) {
11
34
  if (allowedActions && !allowedActions.has(action.type)) {
12
35
  ctx.toast("Blocked action");
@@ -15,7 +38,9 @@ export async function runAction(action, ctx, ev, allowedActions) {
15
38
  switch (action.type) {
16
39
  case "FLOW_EVENT": {
17
40
  const payload = substituteEventValues(action.payload ?? {}, ev);
18
- ctx.sendFlowEvent(action.name, payload);
41
+ ctx.sendFlowEvent(action.name, payload && typeof payload === "object"
42
+ ? payload
43
+ : undefined);
19
44
  return;
20
45
  }
21
46
  case "OPEN_URL": {
@@ -41,14 +66,12 @@ export async function runAction(action, ctx, ev, allowedActions) {
41
66
  ctx.patchState(action.key, action.value);
42
67
  return;
43
68
  }
44
- // valueFrom reads from event
45
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
- const e = ev;
69
+ const eventTarget = ev?.target;
47
70
  if (action.valueFrom === "event.target.value") {
48
- ctx.patchState(action.key, e?.target?.value);
71
+ ctx.patchState(action.key, eventTarget?.value);
49
72
  }
50
73
  else if (action.valueFrom === "event.target.checked") {
51
- ctx.patchState(action.key, !!e?.target?.checked);
74
+ ctx.patchState(action.key, Boolean(eventTarget?.checked));
52
75
  }
53
76
  else {
54
77
  ctx.patchState(action.key, null);
@@ -59,26 +82,4 @@ export async function runAction(action, ctx, ev, allowedActions) {
59
82
  return;
60
83
  }
61
84
  }
62
- function substituteEventValues(payload, ev) {
63
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
- const e = ev;
65
- const value = e?.target?.value;
66
- const checked = e?.target?.checked;
67
- function walk(input) {
68
- if (input === "$event.target.value")
69
- return value ?? null;
70
- if (input === "$event.target.checked")
71
- return !!checked;
72
- if (Array.isArray(input))
73
- return input.map(walk);
74
- if (input && typeof input === "object") {
75
- const out = {};
76
- for (const [k, v] of Object.entries(input)) {
77
- out[k] = walk(v);
78
- }
79
- return out;
80
- }
81
- return input;
82
- }
83
- return walk(payload);
84
- }
85
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoStyles.d.ts","sourceRoot":"","sources":["../src/autoStyles.ts"],"names":[],"mappings":"AAwCA,wBAAsB,yBAAyB,CAC7C,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
1
+ {"version":3,"file":"autoStyles.d.ts","sourceRoot":"","sources":["../src/autoStyles.ts"],"names":[],"mappings":"AAsDA,wBAAsB,yBAAyB,CAC7C,SAAS,SAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -4,18 +4,22 @@ function isBrowser() {
4
4
  return typeof window !== "undefined" && typeof document !== "undefined";
5
5
  }
6
6
  function getGlobalConfig() {
7
- const anyGlobal = globalThis;
8
- return anyGlobal.__AGENTIC_ZI_UI_CONFIG__ ?? null;
7
+ const withConfig = globalThis;
8
+ return withConfig.__AGENTIC_ZI_UI_CONFIG__ ?? null;
9
9
  }
10
10
  async function fetchConfig(url) {
11
11
  try {
12
- const res = await fetch(url, { headers: { "Accept": "application/json" } });
12
+ const res = await fetch(url, { headers: { Accept: "application/json" } });
13
13
  if (!res.ok)
14
14
  return null;
15
15
  const json = (await res.json());
16
16
  if (!json?.baseUrl || !Array.isArray(json.botIdList))
17
17
  return null;
18
- return json;
18
+ return {
19
+ baseUrl: json.baseUrl,
20
+ cssBaseUrl: json.cssBaseUrl,
21
+ botIdList: json.botIdList.map(String),
22
+ };
19
23
  }
20
24
  catch {
21
25
  return null;
@@ -40,12 +44,13 @@ export async function ensureAgenticStylesLoaded(configUrl = DEFAULT_CONFIG_URL)
40
44
  const config = getGlobalConfig() ?? (await fetchConfig(configUrl));
41
45
  if (!config)
42
46
  return;
43
- const baseUrl = config.cssBaseUrl ?? config.baseUrl;
47
+ const baseUrl = (config.cssBaseUrl ?? config.baseUrl).replace(/\/$/, "");
44
48
  const botIds = Array.isArray(config.botIdList) ? config.botIdList : [];
45
49
  for (const botId of botIds) {
46
- const href = `${baseUrl.replace(/\/$/, "")}/safelist/current/${encodeURIComponent(botId)}.css`;
50
+ const href = `${baseUrl}/safelist/current/${encodeURIComponent(botId)}.css`;
47
51
  ensureLink(href);
48
52
  }
49
53
  })();
50
54
  return loadPromise;
51
55
  }
56
+ //# sourceMappingURL=autoStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoStyles.js","sourceRoot":"","sources":["../src/autoStyles.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAYxD,IAAI,WAAW,GAAyB,IAAI,CAAC;AAE7C,SAAS,SAAS;IAChB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,CAAC;AAC1E,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,UAAU,GAAG,UAAkC,CAAC;IACtD,OAAO,UAAU,CAAC,wBAAwB,IAAI,IAAI,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmC,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAElE,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;SACtC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CACrC,4BAA4B,IAAI,IAAI,CACrC,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;IACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAS,GAAG,kBAAkB;IAE9B,IAAI,CAAC,SAAS,EAAE;QAAE,OAAO;IACzB,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,MAAM,GAAG,eAAe,EAAE,IAAI,CAAC,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,GAAG,OAAO,qBAAqB,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5E,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,WAAW,CAAC;AACrB,CAAC"}
package/dist/cli.js CHANGED
@@ -17,7 +17,7 @@ function readConfig(cwd) {
17
17
  }
18
18
  return {
19
19
  baseUrl: json.baseUrl.replace(/\/$/, ""),
20
- botIdList: json.botIdList,
20
+ botIdList: json.botIdList.map(String),
21
21
  outputPath: json.outputPath,
22
22
  };
23
23
  }
@@ -27,7 +27,12 @@ function parseTokens(payload) {
27
27
  }
28
28
  if (payload && typeof payload === "object") {
29
29
  const obj = payload;
30
- const tokens = obj.tokens ?? obj.safelist ?? obj.classes ?? obj.classNames ?? null;
30
+ const tokens = obj.tokens ??
31
+ obj.safelist ??
32
+ obj.classes ??
33
+ obj.classNames ??
34
+ obj.classList ??
35
+ null;
31
36
  if (Array.isArray(tokens)) {
32
37
  return tokens.map(String).filter(Boolean);
33
38
  }
@@ -35,21 +40,21 @@ function parseTokens(payload) {
35
40
  if (typeof payload === "string") {
36
41
  return payload
37
42
  .split(/\s+/)
38
- .map((t) => t.trim())
43
+ .map((token) => token.trim())
39
44
  .filter(Boolean);
40
45
  }
41
46
  return [];
42
47
  }
43
48
  async function fetchSafelist(baseUrl, botId) {
44
49
  const url = `${baseUrl}/safelist/current/${encodeURIComponent(botId)}`;
45
- const res = await fetch(url, { headers: { "Accept": "application/json" } });
50
+ const res = await fetch(url, { headers: { Accept: "application/json" } });
46
51
  if (!res.ok) {
47
52
  const text = await res.text();
48
53
  throw new Error(`Failed ${res.status} ${url}: ${text}`);
49
54
  }
50
55
  const contentType = res.headers.get("content-type") ?? "";
51
56
  if (contentType.includes("application/json")) {
52
- const json = await res.json();
57
+ const json = (await res.json());
53
58
  return parseTokens(json);
54
59
  }
55
60
  const text = await res.text();
@@ -68,9 +73,13 @@ async function main() {
68
73
  const output = Array.from(tokens).sort().join("\n");
69
74
  fs.mkdirSync(path.dirname(outputPath), { recursive: true });
70
75
  fs.writeFileSync(outputPath, `${output}\n`, "utf8");
76
+ // eslint-disable-next-line no-console
71
77
  console.log(`Safelist updated: ${outputPath} (${tokens.size} classes) from ${config.botIdList.length} bot(s).`);
72
78
  }
73
79
  main().catch((err) => {
74
- console.error(err?.message ?? err);
80
+ const message = err instanceof Error ? err.message : String(err);
81
+ // eslint-disable-next-line no-console
82
+ console.error(message);
75
83
  process.exit(1);
76
84
  });
85
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export declare const UI_ALLOWED_TAGS: readonly ["repeat", "a", "article", "aside", "blockquote", "br", "button", "code", "div", "em", "figcaption", "figure", "fieldset", "footer", "form", "h1", "h2", "h3", "h4", "header", "hr", "img", "input", "label", "li", "main", "nav", "ol", "option", "p", "path", "pre", "section", "select", "small", "span", "strong", "svg", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "tr", "ul"];
2
+ export declare const UI_ALLOWED_PROPS: readonly ["alt", "aria-label", "aria-controls", "aria-current", "aria-describedby", "aria-disabled", "aria-expanded", "aria-hidden", "aria-invalid", "aria-labelledby", "aria-live", "aria-pressed", "aria-required", "aria-selected", "aria-checked", "aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-valuetext", "aria-busy", "checked", "clipRule", "cols", "cx", "cy", "d", "decoding", "disabled", "fill", "fillRule", "height", "htmlFor", "href", "loading", "max", "maxLength", "min", "minLength", "name", "opacity", "placeholder", "preserveAspectRatio", "r", "rel", "role", "rows", "src", "stroke", "strokeLinecap", "strokeLinejoin", "strokeWidth", "step", "target", "title", "type", "value", "viewBox", "width", "x", "y"];
3
+ export declare const UI_ACTION_TYPES: readonly ["FLOW_EVENT", "OPEN_URL", "COPY", "TOAST", "PATCH_STATE"];
4
+ export type UiActionType = (typeof UI_ACTION_TYPES)[number];
5
+ export type UiAction = {
6
+ type: "FLOW_EVENT";
7
+ name: string;
8
+ payload?: Record<string, unknown>;
9
+ } | {
10
+ type: "OPEN_URL";
11
+ url: string;
12
+ target?: "_blank" | "_self";
13
+ } | {
14
+ type: "COPY";
15
+ text: string;
16
+ } | {
17
+ type: "TOAST";
18
+ message: string;
19
+ level?: "info" | "success" | "warning" | "error";
20
+ } | {
21
+ type: "PATCH_STATE";
22
+ key: string;
23
+ valueFrom?: "event.target.value" | "event.target.checked";
24
+ value?: unknown;
25
+ };
26
+ export type UiEventMap = Partial<Record<"onClick" | "onChange" | "onSubmit" | "onMouseEnter" | "onMouseLeave" | "onMouseOver" | "onMouseOut" | "onMouseDown" | "onMouseUp" | "onMouseMove" | "onFocus" | "onBlur", UiAction>>;
27
+ export type UiBind = {
28
+ valueKey?: string;
29
+ checkedKey?: string;
30
+ };
31
+ export type UiNode = {
32
+ id?: string;
33
+ type: string;
34
+ className?: string;
35
+ props?: Record<string, unknown>;
36
+ events?: UiEventMap;
37
+ bind?: UiBind;
38
+ items?: string;
39
+ as?: string;
40
+ indexAs?: string;
41
+ children?: Array<string | UiNode>;
42
+ slots?: Record<string, Array<string | UiNode>>;
43
+ };
44
+ export type UiTemplate = {
45
+ schema: "ui.v1";
46
+ root: UiNode;
47
+ };
48
+ export type WidgetStylesheet = {
49
+ styleId?: string;
50
+ cssText?: string;
51
+ cssUrl?: string;
52
+ classList?: string[];
53
+ };
54
+ export type AgenticWidget = {
55
+ schema: "agentic.widget.v1";
56
+ widgetId: string;
57
+ template: UiTemplate;
58
+ data?: Record<string, unknown>;
59
+ metadata?: {
60
+ name: string;
61
+ description?: string;
62
+ tags?: string[];
63
+ };
64
+ policy?: {
65
+ allowedTags?: string[];
66
+ allowedProps?: string[];
67
+ allowedActions?: UiActionType[];
68
+ };
69
+ stylesheet?: WidgetStylesheet;
70
+ };
71
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ export const UI_ALLOWED_TAGS = [
2
+ "repeat",
3
+ "a",
4
+ "article",
5
+ "aside",
6
+ "blockquote",
7
+ "br",
8
+ "button",
9
+ "code",
10
+ "div",
11
+ "em",
12
+ "figcaption",
13
+ "figure",
14
+ "fieldset",
15
+ "footer",
16
+ "form",
17
+ "h1",
18
+ "h2",
19
+ "h3",
20
+ "h4",
21
+ "header",
22
+ "hr",
23
+ "img",
24
+ "input",
25
+ "label",
26
+ "li",
27
+ "main",
28
+ "nav",
29
+ "ol",
30
+ "option",
31
+ "p",
32
+ "path",
33
+ "pre",
34
+ "section",
35
+ "select",
36
+ "small",
37
+ "span",
38
+ "strong",
39
+ "svg",
40
+ "table",
41
+ "tbody",
42
+ "td",
43
+ "textarea",
44
+ "tfoot",
45
+ "th",
46
+ "thead",
47
+ "tr",
48
+ "ul",
49
+ ];
50
+ export const UI_ALLOWED_PROPS = [
51
+ "alt",
52
+ "aria-label",
53
+ "aria-controls",
54
+ "aria-current",
55
+ "aria-describedby",
56
+ "aria-disabled",
57
+ "aria-expanded",
58
+ "aria-hidden",
59
+ "aria-invalid",
60
+ "aria-labelledby",
61
+ "aria-live",
62
+ "aria-pressed",
63
+ "aria-required",
64
+ "aria-selected",
65
+ "aria-checked",
66
+ "aria-valuemax",
67
+ "aria-valuemin",
68
+ "aria-valuenow",
69
+ "aria-valuetext",
70
+ "aria-busy",
71
+ "checked",
72
+ "clipRule",
73
+ "cols",
74
+ "cx",
75
+ "cy",
76
+ "d",
77
+ "decoding",
78
+ "disabled",
79
+ "fill",
80
+ "fillRule",
81
+ "height",
82
+ "htmlFor",
83
+ "href",
84
+ "loading",
85
+ "max",
86
+ "maxLength",
87
+ "min",
88
+ "minLength",
89
+ "name",
90
+ "opacity",
91
+ "placeholder",
92
+ "preserveAspectRatio",
93
+ "r",
94
+ "rel",
95
+ "role",
96
+ "rows",
97
+ "src",
98
+ "stroke",
99
+ "strokeLinecap",
100
+ "strokeLinejoin",
101
+ "strokeWidth",
102
+ "step",
103
+ "target",
104
+ "title",
105
+ "type",
106
+ "value",
107
+ "viewBox",
108
+ "width",
109
+ "x",
110
+ "y",
111
+ ];
112
+ export const UI_ACTION_TYPES = [
113
+ "FLOW_EVENT",
114
+ "OPEN_URL",
115
+ "COPY",
116
+ "TOAST",
117
+ "PATCH_STATE",
118
+ ];
119
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ;IACR,GAAG;IACH,SAAS;IACT,OAAO;IACP,YAAY;IACZ,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,KAAK;IACL,IAAI;IACJ,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,OAAO;IACP,OAAO;IACP,IAAI;IACJ,MAAM;IACN,KAAK;IACL,IAAI;IACJ,QAAQ;IACR,GAAG;IACH,MAAM;IACN,KAAK;IACL,SAAS;IACT,QAAQ;IACR,OAAO;IACP,MAAM;IACN,QAAQ;IACR,KAAK;IACL,OAAO;IACP,OAAO;IACP,IAAI;IACJ,UAAU;IACV,OAAO;IACP,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;CACI,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK;IACL,YAAY;IACZ,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,WAAW;IACX,cAAc;IACd,eAAe;IACf,eAAe;IACf,cAAc;IACd,eAAe;IACf,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,SAAS;IACT,UAAU;IACV,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,UAAU;IACV,UAAU;IACV,MAAM;IACN,UAAU;IACV,QAAQ;IACR,SAAS;IACT,MAAM;IACN,SAAS;IACT,KAAK;IACL,WAAW;IACX,KAAK;IACL,WAAW;IACX,MAAM;IACN,SAAS;IACT,aAAa;IACb,qBAAqB;IACrB,GAAG;IACH,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;IACP,GAAG;IACH,GAAG;CACK,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,UAAU;IACV,MAAM;IACN,OAAO;IACP,aAAa;CACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,27 @@
1
- import type { UiRendererProps } from "./UiRenderer";
1
+ import React from "react";
2
+ import type { AgenticWidget, UiTemplate, WidgetStylesheet } from "./contracts";
3
+ import { UiRenderer, type RenderPolicy, type UiRendererProps } from "./UiRenderer";
2
4
  import { ensureAgenticStylesLoaded } from "./autoStyles";
3
- export type { UiRendererProps, RenderPolicy } from "./UiRenderer";
4
- export type { UiRendererProps as ZijusCustomWidgetProps } from "./UiRenderer";
5
- export declare function ZijusCustomWidget(props: UiRendererProps): import("react/jsx-runtime").JSX.Element;
6
- export { ensureAgenticStylesLoaded };
5
+ import { ensureWidgetStyle } from "./styleRegistry";
6
+ export type { RenderPolicy, UiRendererProps };
7
+ export { UiRenderer, ensureAgenticStylesLoaded, ensureWidgetStyle };
8
+ export type { AgenticWidget, UiAction, UiActionType, UiNode, UiTemplate, WidgetStylesheet, } from "./contracts";
9
+ export type AgenticWidgetJson = AgenticWidget | {
10
+ widgetId?: string;
11
+ template: UiTemplate;
12
+ data?: Record<string, unknown>;
13
+ policy?: RenderPolicy;
14
+ stylesheet?: WidgetStylesheet;
15
+ };
16
+ export type AgenticComponentProps = {
17
+ widgetJson: AgenticWidgetJson;
18
+ onFlowEvent?: (name: string, payload?: Record<string, unknown>) => void;
19
+ onToast?: (message: string) => void;
20
+ policy?: RenderPolicy;
21
+ autoInjectStyles?: boolean;
22
+ loadLegacyGlobalStyles?: boolean;
23
+ };
24
+ export declare function AgenticComponent({ widgetJson, onFlowEvent, onToast, policy, autoInjectStyles, loadLegacyGlobalStyles, }: AgenticComponentProps): React.ReactElement;
25
+ export type { UiRendererProps as ZijusCustomWidgetProps };
26
+ export declare function ZijusCustomWidget(props: UiRendererProps): React.ReactElement;
7
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAElE,YAAY,EAAE,eAAe,IAAI,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE9E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,2CAKvD;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAyB,MAAM,iBAAiB,CAAC;AAE3E,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,CAAC;AACpE,YAAY,EACV,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,UAAU,EACV,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb;IACE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAgCN,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,UAAU,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,gBAAuB,EACvB,sBAA8B,GAC/B,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAsB5C;AAED,YAAY,EAAE,eAAe,IAAI,sBAAsB,EAAE,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAM5E"}
package/dist/index.js CHANGED
@@ -2,10 +2,54 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
3
  import { UiRenderer } from "./UiRenderer";
4
4
  import { ensureAgenticStylesLoaded } from "./autoStyles";
5
+ import { ensureWidgetStyle } from "./styleRegistry";
6
+ export { UiRenderer, ensureAgenticStylesLoaded, ensureWidgetStyle };
7
+ function normalizeWidget(widgetJson) {
8
+ if (widgetJson.schema === "agentic.widget.v1") {
9
+ const concrete = widgetJson;
10
+ return {
11
+ widgetId: concrete.widgetId,
12
+ template: concrete.template,
13
+ data: concrete.data,
14
+ policy: concrete.policy,
15
+ stylesheet: concrete.stylesheet,
16
+ };
17
+ }
18
+ return {
19
+ widgetId: widgetJson.widgetId,
20
+ template: widgetJson.template,
21
+ data: widgetJson.data,
22
+ policy: widgetJson.policy,
23
+ stylesheet: widgetJson.stylesheet,
24
+ };
25
+ }
26
+ function normalizeStyleInput(stylesheet) {
27
+ if (!stylesheet)
28
+ return undefined;
29
+ return {
30
+ styleId: stylesheet.styleId,
31
+ cssText: stylesheet.cssText,
32
+ cssUrl: stylesheet.cssUrl,
33
+ };
34
+ }
35
+ export function AgenticComponent({ widgetJson, onFlowEvent, onToast, policy, autoInjectStyles = true, loadLegacyGlobalStyles = false, }) {
36
+ const normalized = React.useMemo(() => normalizeWidget(widgetJson), [widgetJson]);
37
+ React.useEffect(() => {
38
+ if (!autoInjectStyles)
39
+ return;
40
+ ensureWidgetStyle(normalizeStyleInput(normalized.stylesheet));
41
+ }, [autoInjectStyles, normalized.stylesheet]);
42
+ React.useEffect(() => {
43
+ if (!loadLegacyGlobalStyles)
44
+ return;
45
+ ensureAgenticStylesLoaded();
46
+ }, [loadLegacyGlobalStyles]);
47
+ return (_jsx(UiRenderer, { template: normalized.template, data: normalized.data, onFlowEvent: onFlowEvent, onToast: onToast, policy: policy ?? normalized.policy }));
48
+ }
5
49
  export function ZijusCustomWidget(props) {
6
50
  React.useEffect(() => {
7
51
  ensureAgenticStylesLoaded();
8
52
  }, []);
9
53
  return _jsx(UiRenderer, { ...props });
10
54
  }
11
- export { ensureAgenticStylesLoaded };
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAA2C,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAyB,MAAM,iBAAiB,CAAC;AAG3E,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,CAAC;AAoBpE,SAAS,eAAe,CAAC,UAA6B;IACpD,IAAK,UAA4B,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,UAA2B,CAAC;QAC7C,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,UAAU,EAAE,UAAU,CAAC,UAAU;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,UAA6B;IACxD,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,UAAU,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,gBAAgB,GAAG,IAAI,EACvB,sBAAsB,GAAG,KAAK,GACR;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAElF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,iBAAiB,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,gBAAgB,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAE9C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACpC,yBAAyB,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE7B,OAAO,CACL,KAAC,UAAU,IACT,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAC7B,IAAI,EAAE,UAAU,CAAC,IAAI,EACrB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM,GACnC,CACH,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,yBAAyB,EAAE,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,KAAC,UAAU,OAAK,KAAK,GAAI,CAAC;AACnC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type WidgetStyleInput = {
2
+ styleId?: string;
3
+ cssText?: string;
4
+ cssUrl?: string;
5
+ };
6
+ export declare function ensureWidgetStyle(input?: WidgetStyleInput): string | null;
7
+ //# sourceMappingURL=styleRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleRegistry.d.ts","sourceRoot":"","sources":["../src/styleRegistry.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA0DF,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAezE"}
@@ -0,0 +1,63 @@
1
+ const STYLE_DATA_ATTR = "data-agentic-zi-ui-style";
2
+ function isBrowser() {
3
+ return typeof window !== "undefined" && typeof document !== "undefined";
4
+ }
5
+ function normalizeStyleId(input) {
6
+ if (!input)
7
+ return undefined;
8
+ return input.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 120) || undefined;
9
+ }
10
+ function inferStyleId(input) {
11
+ const explicit = normalizeStyleId(input.styleId);
12
+ if (explicit)
13
+ return explicit;
14
+ if (input.cssUrl) {
15
+ try {
16
+ const u = new URL(input.cssUrl, window.location.origin);
17
+ const pathname = u.pathname.replace(/[^a-zA-Z0-9/_-]/g, "_");
18
+ return `url_${pathname.replace(/\//g, "_").slice(-100)}`;
19
+ }
20
+ catch {
21
+ // fall through
22
+ }
23
+ }
24
+ if (input.cssText) {
25
+ const len = String(input.cssText.length);
26
+ return `css_${len}`;
27
+ }
28
+ return undefined;
29
+ }
30
+ function ensureTextStyle(id, cssText) {
31
+ const existing = document.querySelector(`style[${STYLE_DATA_ATTR}="${id}"]`);
32
+ if (existing)
33
+ return;
34
+ const style = document.createElement("style");
35
+ style.setAttribute(STYLE_DATA_ATTR, id);
36
+ style.textContent = cssText;
37
+ document.head.appendChild(style);
38
+ }
39
+ function ensureLinkStyle(id, href) {
40
+ const existing = document.querySelector(`link[${STYLE_DATA_ATTR}="${id}"]`);
41
+ if (existing)
42
+ return;
43
+ const link = document.createElement("link");
44
+ link.rel = "stylesheet";
45
+ link.href = href;
46
+ link.setAttribute(STYLE_DATA_ATTR, id);
47
+ document.head.appendChild(link);
48
+ }
49
+ export function ensureWidgetStyle(input) {
50
+ if (!isBrowser() || !input)
51
+ return null;
52
+ const id = inferStyleId(input);
53
+ if (!id)
54
+ return null;
55
+ if (input.cssText && input.cssText.trim()) {
56
+ ensureTextStyle(id, input.cssText);
57
+ }
58
+ if (input.cssUrl) {
59
+ ensureLinkStyle(id, input.cssUrl);
60
+ }
61
+ return id;
62
+ }
63
+ //# sourceMappingURL=styleRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleRegistry.js","sourceRoot":"","sources":["../src/styleRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAQnD,SAAS,SAAS;IAChB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,CAAC;AAC1E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;AAC1E,CAAC;AAED,SAAS,YAAY,CAAC,KAAuB;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,OAAO,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,OAAe;IAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CACrC,SAAS,eAAe,KAAK,EAAE,IAAI,CACpC,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,EAAU,EAAE,IAAY;IAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CACrC,QAAQ,eAAe,KAAK,EAAE,IAAI,CACnC,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;IACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAErB,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-zi-ui",
3
- "version": "0.0.5",
3
+ "version": "0.1.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "private": false,
@@ -12,27 +12,33 @@
12
12
  }
13
13
  },
14
14
  "bin": {
15
- "agentic-zi-ui-safelist": "./dist/cli.js"
15
+ "agentic-zi-ui-safelist": "dist/cli.js"
16
16
  },
17
+ "files": [
18
+ "dist",
19
+ "CHANGELOG.md",
20
+ "VERSIONING.md",
21
+ "RELEASE.md",
22
+ "README.md"
23
+ ],
17
24
  "scripts": {
18
25
  "dev": "tsc -w",
19
26
  "build": "tsc",
20
- "prepublishOnly": "pnpm -C . build",
27
+ "prepublishOnly": "npm run build",
28
+ "npm:login": "npm login --registry https://registry.npmjs.org/",
21
29
  "release:patch": "npm version patch -m \"chore(release): %s\"",
22
30
  "release:minor": "npm version minor -m \"chore(release): %s\"",
23
31
  "release:major": "npm version major -m \"chore(release): %s\"",
24
- "publish:public": "npm publish --access public",
32
+ "publish:public": "(npm whoami --registry https://registry.npmjs.org/ >/dev/null 2>&1 || npm run npm:login) && npm_config_cache=./.npm-cache npm publish --registry https://registry.npmjs.org/ --access public",
25
33
  "safelist:pull": "agentic-zi-ui-safelist"
26
34
  },
27
35
  "dependencies": {},
28
36
  "peerDependencies": {
29
- "react": "^18 || ^19",
30
- "agentic-zi-ui-schema": "^0.0.3"
37
+ "react": "^18 || ^19"
31
38
  },
32
39
  "devDependencies": {
33
40
  "@types/react": "^19.2.5",
34
41
  "@types/node": "^24.10.1",
35
- "agentic-zi-ui-schema": "^0.0.3",
36
42
  "typescript": "~5.9.3"
37
43
  }
38
44
  }