@zentto/studio-core 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -21,4 +21,6 @@ export { resolveFlavor, applyFlavor, applyFlavorToSchema, } from './persistence/
21
21
  export type { NavItem, NavItemKind, PageConfig, PageContentType, GridPageConfig, GridColumnDef, CrudConfig, ReportPageConfig, CardsPageConfig, CardItem, TabsPageConfig, SplitPageConfig, ChartPageConfig, BrandingConfig, UserContext, AppConfig, NotificationConfig, } from './app-types.js';
22
22
  export { TEMPLATE_BLANK, TEMPLATE_CRM, TEMPLATE_ECOMMERCE, TEMPLATE_HR, APP_TEMPLATES, getAppTemplate, listAppTemplates, } from './templates/app-templates.js';
23
23
  export type { AppTemplateId } from './templates/app-templates.js';
24
+ export type { IconResolver, ComponentResolver, PageRenderer, ActionHandler, DataFetcher, NotificationHandler, ConfirmHandler, StudioProvider, } from './providers.js';
25
+ export { DEFAULT_PROVIDER, mergeProviders, resolveIcon } from './providers.js';
24
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,EACzD,WAAW,EAAE,YAAY,EAAE,YAAY,EACvC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAClD,UAAU,EAAE,YAAY,EACxB,cAAc,EAAE,UAAU,EAAE,IAAI,EAChC,OAAO,EACP,cAAc,EAAE,MAAM,EAAE,gBAAgB,EACxC,WAAW,EAAE,UAAU,EACvB,YAAY,EACZ,UAAU,EAAE,SAAS,EACrB,cAAc,EAAE,oBAAoB,EACpC,aAAa,EAAE,iBAAiB,GACjC,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EACL,eAAe,EACf,aAAa,GACd,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGzE,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,GACX,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EACL,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EACV,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,eAAe,EAC3B,cAAc,EAAE,aAAa,EAAE,UAAU,EACzC,gBAAgB,EAChB,eAAe,EAAE,QAAQ,EACzB,cAAc,EAAE,eAAe,EAAE,eAAe,EAChD,cAAc,EAAE,WAAW,EAC3B,SAAS,EAAE,kBAAkB,GAC9B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAC7D,aAAa,EAAE,cAAc,EAAE,gBAAgB,GAChD,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -28,4 +28,5 @@ export { saveSchemaLocal, loadSchemaLocal, deleteSchemaLocal, listSchemasLocal,
28
28
  export { resolveFlavor, applyFlavor, applyFlavorToSchema, } from './persistence/flavor-manager.js';
29
29
  // App templates
30
30
  export { TEMPLATE_BLANK, TEMPLATE_CRM, TEMPLATE_ECOMMERCE, TEMPLATE_HR, APP_TEMPLATES, getAppTemplate, listAppTemplates, } from './templates/app-templates.js';
31
+ export { DEFAULT_PROVIDER, mergeProviders, resolveIcon } from './providers.js';
31
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAmBnC,oBAAoB;AACpB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC,eAAe;AACf,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,aAAa;AACb,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,cAAc;AACd,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,aAAa,GACd,MAAM,2BAA2B,CAAC;AAGnC,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,SAAS;AACT,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,OAAO;AACP,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEzE,eAAe;AACf,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,GACX,MAAM,4BAA4B,CAAC;AAEpC,cAAc;AACd,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAGvC,UAAU;AACV,OAAO,EACL,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAczC,gBAAgB;AAChB,OAAO,EACL,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAC7D,aAAa,EAAE,cAAc,EAAE,gBAAgB,GAChD,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAmBnC,oBAAoB;AACpB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC,eAAe;AACf,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,aAAa;AACb,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,cAAc;AACd,OAAO,EACL,aAAa,EACb,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,aAAa,GACd,MAAM,2BAA2B,CAAC;AAGnC,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,SAAS;AACT,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,OAAO;AACP,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEzE,eAAe;AACf,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,GACX,MAAM,4BAA4B,CAAC;AAEpC,cAAc;AACd,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAGvC,UAAU;AACV,OAAO,EACL,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAczC,gBAAgB;AAChB,OAAO,EACL,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAC7D,aAAa,EAAE,cAAc,EAAE,gBAAgB,GAChD,MAAM,8BAA8B,CAAC;AAStC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Icon resolver function.
3
+ * Host app maps icon names to rendered HTML strings.
4
+ *
5
+ * @example
6
+ * // In React host app:
7
+ * import { renderToString } from 'react-dom/server';
8
+ * import * as MuiIcons from '@mui/icons-material';
9
+ *
10
+ * const iconResolver = (name: string, props?: Record<string, unknown>) => {
11
+ * const Icon = (MuiIcons as any)[name];
12
+ * if (Icon) return renderToString(<Icon {...props} />);
13
+ * return name; // fallback to text/emoji
14
+ * };
15
+ */
16
+ export type IconResolver = (name: string, props?: {
17
+ size?: number;
18
+ color?: string;
19
+ className?: string;
20
+ }) => string;
21
+ /**
22
+ * Component resolver function.
23
+ * Host app maps component names to rendered HTML strings.
24
+ * Used for custom field types the studio doesn't know about.
25
+ *
26
+ * @example
27
+ * const componentResolver = (name: string, props: Record<string, unknown>) => {
28
+ * if (name === 'MyCustomChart') return '<my-chart ...>';
29
+ * if (name === 'GoogleMap') return '<iframe src="...">';
30
+ * return null; // not handled
31
+ * };
32
+ */
33
+ export type ComponentResolver = (name: string, props: Record<string, unknown>) => string | null;
34
+ /**
35
+ * Page renderer function.
36
+ * Host app renders a full page given a page ID and data.
37
+ * Returns HTML string to inject into the content area.
38
+ */
39
+ export type PageRenderer = (pageId: string, data: Record<string, unknown>) => string | null;
40
+ /**
41
+ * Action handler function.
42
+ * Host app handles custom actions (API calls, navigation, etc.)
43
+ */
44
+ export type ActionHandler = (actionId: string, actionType: string, data: Record<string, unknown>) => Promise<{
45
+ success: boolean;
46
+ data?: unknown;
47
+ error?: string;
48
+ }>;
49
+ /**
50
+ * Data fetcher function.
51
+ * Host app fetches data (can use its own auth tokens, interceptors, etc.)
52
+ */
53
+ export type DataFetcher = (url: string, options: {
54
+ method: string;
55
+ headers?: Record<string, string>;
56
+ body?: unknown;
57
+ }) => Promise<unknown>;
58
+ /**
59
+ * Toast/notification handler.
60
+ * Host app shows notifications in its own style.
61
+ */
62
+ export type NotificationHandler = (type: 'success' | 'error' | 'warning' | 'info', title: string, message?: string) => void;
63
+ /**
64
+ * Confirmation handler.
65
+ * Host app shows its own confirmation dialog.
66
+ */
67
+ export type ConfirmHandler = (title: string, message: string, options?: {
68
+ variant?: string;
69
+ okText?: string;
70
+ cancelText?: string;
71
+ }) => Promise<boolean>;
72
+ /**
73
+ * StudioProvider — the bridge between studio and the host app.
74
+ * Host app creates this and passes it to <zentto-studio-app> or <zentto-studio-renderer>.
75
+ * Every function is optional — studio falls back to built-in behavior.
76
+ */
77
+ export interface StudioProvider {
78
+ /** Resolve icon names to HTML (MUI icons, FontAwesome, custom SVGs) */
79
+ resolveIcon?: IconResolver;
80
+ /** Resolve custom components to HTML */
81
+ resolveComponent?: ComponentResolver;
82
+ /** Render custom pages */
83
+ renderPage?: PageRenderer;
84
+ /** Handle actions (submit, apiCall, custom) */
85
+ handleAction?: ActionHandler;
86
+ /** Fetch data with host app's auth/interceptors */
87
+ fetchData?: DataFetcher;
88
+ /** Show notifications in host app's style */
89
+ notify?: NotificationHandler;
90
+ /** Show confirmation dialogs in host app's style */
91
+ confirm?: ConfirmHandler;
92
+ /** Navigate in the host app's router */
93
+ navigate?: (path: string) => void;
94
+ /** Open a URL in a new tab or modal */
95
+ openUrl?: (url: string, target?: '_blank' | '_self' | 'modal') => void;
96
+ /** Get the current user (may change over time) */
97
+ getUser?: () => {
98
+ id?: string;
99
+ name?: string;
100
+ email?: string;
101
+ roles?: string[];
102
+ avatar?: string;
103
+ } | null;
104
+ /** Get auth headers for API calls */
105
+ getAuthHeaders?: () => Record<string, string>;
106
+ /** Register a custom field type with a web component tag */
107
+ customFields?: Record<string, {
108
+ tagName: string;
109
+ label: string;
110
+ icon: string;
111
+ category?: string;
112
+ defaultProps?: Record<string, unknown>;
113
+ }>;
114
+ /** CSS class mappings (e.g., MUI class names the host uses) */
115
+ cssClasses?: Record<string, string>;
116
+ /** Additional config the host app wants to pass through */
117
+ extra?: Record<string, unknown>;
118
+ }
119
+ export declare const DEFAULT_PROVIDER: StudioProvider;
120
+ export declare function mergeProviders(...providers: (StudioProvider | undefined)[]): StudioProvider;
121
+ /**
122
+ * Resolve an icon name using the provider chain:
123
+ * 1. Provider's resolveIcon (MUI, FontAwesome, etc.)
124
+ * 2. Built-in emoji map
125
+ * 3. Raw string (emoji/text passthrough)
126
+ */
127
+ export declare function resolveIcon(name: string | undefined, provider?: StudioProvider, props?: {
128
+ size?: number;
129
+ color?: string;
130
+ }): string;
131
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ // @zentto/studio-core — Provider system
2
+ // Allows host apps to inject their own icons, components, and renderers
3
+ // The studio doesn't know what MUI, FontAwesome, or any library is —
4
+ // it just calls the provider and the host resolves it.
5
+ // ─── Default (no-op) provider ─────────────────────────────────────
6
+ export const DEFAULT_PROVIDER = {};
7
+ // ─── Helper to merge providers ────────────────────────────────────
8
+ export function mergeProviders(...providers) {
9
+ const merged = {};
10
+ for (const p of providers) {
11
+ if (!p)
12
+ continue;
13
+ Object.assign(merged, p);
14
+ // Merge customFields deeply
15
+ if (p.customFields) {
16
+ merged.customFields = { ...merged.customFields, ...p.customFields };
17
+ }
18
+ }
19
+ return merged;
20
+ }
21
+ // ─── Icon resolution with fallback chain ──────────────────────────
22
+ const BUILTIN_ICONS = {
23
+ // Navigation
24
+ home: '🏠', dashboard: '📊', settings: '⚙️', search: '🔍', menu: '☰',
25
+ // Actions
26
+ add: '➕', edit: '✏️', delete: '🗑️', save: '💾', cancel: '✕', refresh: '🔄',
27
+ close: '✕', check: '✓', copy: '📋', download: '⬇️', upload: '⬆️', print: '🖨️',
28
+ // Status
29
+ success: '✅', error: '❌', warning: '⚠️', info: 'ℹ️', loading: '⏳',
30
+ // Content
31
+ user: '👤', users: '👥', company: '🏢', email: '📧', phone: '📱',
32
+ calendar: '📅', clock: '🕐', map: '🗺️', location: '📍',
33
+ // Business
34
+ invoice: '📄', order: '📋', product: '📦', cart: '🛒', money: '💰',
35
+ bank: '🏦', chart: '📈', report: '📊', file: '📁', folder: '📂',
36
+ // UI
37
+ star: '⭐', heart: '❤️', flag: '🚩', tag: '🏷️', lock: '🔒', unlock: '🔓',
38
+ eye: '👁️', notification: '🔔', link: '🔗', code: '💻',
39
+ // Arrows
40
+ arrowUp: '↑', arrowDown: '↓', arrowLeft: '←', arrowRight: '→',
41
+ chevronRight: '▶', chevronDown: '▼', chevronUp: '▲', chevronLeft: '◀',
42
+ };
43
+ /**
44
+ * Resolve an icon name using the provider chain:
45
+ * 1. Provider's resolveIcon (MUI, FontAwesome, etc.)
46
+ * 2. Built-in emoji map
47
+ * 3. Raw string (emoji/text passthrough)
48
+ */
49
+ export function resolveIcon(name, provider, props) {
50
+ if (!name)
51
+ return '';
52
+ // 1. Try provider
53
+ if (provider?.resolveIcon) {
54
+ const result = provider.resolveIcon(name, props);
55
+ if (result)
56
+ return result;
57
+ }
58
+ // 2. Built-in emoji map
59
+ if (name in BUILTIN_ICONS)
60
+ return BUILTIN_ICONS[name];
61
+ // 3. Passthrough (emoji, SVG string, or text)
62
+ return name;
63
+ }
64
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,wEAAwE;AACxE,qEAAqE;AACrE,uDAAuD;AA+IvD,qEAAqE;AAErE,MAAM,CAAC,MAAM,gBAAgB,GAAmB,EAAE,CAAC;AAEnD,qEAAqE;AAErE,MAAM,UAAU,cAAc,CAAC,GAAG,SAAyC;IACzE,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzB,4BAA4B;QAC5B,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM,CAAC,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qEAAqE;AAErE,MAAM,aAAa,GAA2B;IAC5C,aAAa;IACb,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;IACpE,UAAU;IACV,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI;IAC3E,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;IAC9E,SAAS;IACT,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG;IACjE,UAAU;IACV,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IAChE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI;IACvD,WAAW;IACX,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IAClE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;IAC/D,KAAK;IACL,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;IACxE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IACtD,SAAS;IACT,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;IAC7D,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG;CACtE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,IAAwB,EACxB,QAAyB,EACzB,KAAyC;IAEzC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,kBAAkB;IAClB,IAAI,QAAQ,EAAE,WAAW,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAI,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAEtD,8CAA8C;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zentto/studio-core",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Core logic engine for Zentto Studio — runtime UI builder. Schema validation, expression engine, data binding, and rule evaluation.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,7 +11,10 @@
11
11
  "import": "./dist/index.js"
12
12
  }
13
13
  },
14
- "files": ["dist", "README.md"],
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
15
18
  "scripts": {
16
19
  "build": "tsc",
17
20
  "dev": "tsc --watch",