@fayz-ai/core 0.8.0 → 0.8.2

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.
Files changed (98) hide show
  1. package/dist/access/denial.d.ts +21 -0
  2. package/dist/access/denial.d.ts.map +1 -0
  3. package/dist/access/engine.d.ts +63 -0
  4. package/dist/access/engine.d.ts.map +1 -0
  5. package/dist/access/index.cjs +60 -0
  6. package/dist/access/index.cjs.map +1 -0
  7. package/dist/access/index.d.ts +6 -0
  8. package/dist/access/index.d.ts.map +1 -0
  9. package/dist/access/index.js +51 -0
  10. package/dist/access/index.js.map +1 -0
  11. package/dist/access/limits.d.ts +10 -0
  12. package/dist/access/limits.d.ts.map +1 -0
  13. package/dist/address/index.d.ts +52 -0
  14. package/dist/address/index.d.ts.map +1 -0
  15. package/dist/{chunk-WKZVSKEU.js → chunk-CU64QI4A.js} +2 -2
  16. package/dist/chunk-CU64QI4A.js.map +1 -0
  17. package/dist/{chunk-54SRL7AJ.cjs → chunk-CYAWDW44.cjs} +141 -84
  18. package/dist/chunk-CYAWDW44.cjs.map +1 -0
  19. package/dist/{chunk-KNIVT6XZ.js → chunk-JHGXROKV.js} +230 -2
  20. package/dist/chunk-JHGXROKV.js.map +1 -0
  21. package/dist/{chunk-QR7U2URY.cjs → chunk-SO3VUKGZ.cjs} +230 -2
  22. package/dist/chunk-SO3VUKGZ.cjs.map +1 -0
  23. package/dist/{chunk-2NTHNWEH.cjs → chunk-UKU4RIWM.cjs} +2 -2
  24. package/dist/chunk-UKU4RIWM.cjs.map +1 -0
  25. package/dist/{chunk-ZBIWYDAR.js → chunk-XJKW2JRW.js} +140 -85
  26. package/dist/chunk-XJKW2JRW.js.map +1 -0
  27. package/dist/{chunk-CHGX6UYR.js → chunk-YH25Y4FW.js} +6 -3
  28. package/dist/chunk-YH25Y4FW.js.map +1 -0
  29. package/dist/{chunk-5X2VX3RQ.cjs → chunk-ZOPJB5FN.cjs} +6 -3
  30. package/dist/chunk-ZOPJB5FN.cjs.map +1 -0
  31. package/dist/data/count.d.ts +34 -0
  32. package/dist/data/count.d.ts.map +1 -0
  33. package/dist/data/index.cjs +18 -10
  34. package/dist/data/index.d.ts +2 -0
  35. package/dist/data/index.d.ts.map +1 -1
  36. package/dist/data/index.js +1 -1
  37. package/dist/data/resolve.d.ts.map +1 -1
  38. package/dist/entity/index.cjs +6 -6
  39. package/dist/entity/index.js +1 -1
  40. package/dist/entity/registry.d.ts +9 -0
  41. package/dist/entity/registry.d.ts.map +1 -1
  42. package/dist/i18n/index.cjs +10 -10
  43. package/dist/i18n/index.js +1 -1
  44. package/dist/i18n/shell-translations.d.ts.map +1 -1
  45. package/dist/index.cjs +852 -124
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.ts +10 -4
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +765 -56
  50. package/dist/index.js.map +1 -1
  51. package/dist/manifest/index.d.ts +109 -3
  52. package/dist/manifest/index.d.ts.map +1 -1
  53. package/dist/manifest/serialize.d.ts +14 -0
  54. package/dist/manifest/serialize.d.ts.map +1 -0
  55. package/dist/plugin/index.cjs +7 -7
  56. package/dist/plugin/index.js +1 -1
  57. package/dist/plugin/runtime.d.ts.map +1 -1
  58. package/dist/types/billing.d.ts +20 -0
  59. package/dist/types/billing.d.ts.map +1 -1
  60. package/dist/types/crud.d.ts +48 -2
  61. package/dist/types/crud.d.ts.map +1 -1
  62. package/dist/types/entitlements.d.ts +45 -0
  63. package/dist/types/entitlements.d.ts.map +1 -0
  64. package/dist/types/index.d.ts +4 -3
  65. package/dist/types/index.d.ts.map +1 -1
  66. package/dist/types/plugins.d.ts +84 -0
  67. package/dist/types/plugins.d.ts.map +1 -1
  68. package/package.json +14 -4
  69. package/src/access/denial.ts +33 -0
  70. package/src/access/engine.test.ts +48 -0
  71. package/src/access/engine.ts +121 -0
  72. package/src/access/index.ts +13 -0
  73. package/src/access/limits.ts +18 -0
  74. package/src/address/index.ts +188 -0
  75. package/src/data/count.test.ts +152 -0
  76. package/src/data/count.ts +131 -0
  77. package/src/data/index.ts +2 -0
  78. package/src/data/resolve.ts +7 -1
  79. package/src/entity/registry.ts +7 -0
  80. package/src/i18n/shell-translations.ts +230 -0
  81. package/src/index.ts +18 -3
  82. package/src/manifest/app-manifest.schema.json +618 -45
  83. package/src/manifest/index.ts +127 -3
  84. package/src/manifest/serialize.ts +52 -0
  85. package/src/plugin/runtime.ts +5 -1
  86. package/src/types/billing.ts +22 -0
  87. package/src/types/crud.ts +49 -2
  88. package/src/types/entitlements.ts +45 -0
  89. package/src/types/index.ts +4 -3
  90. package/src/types/plugins.ts +79 -0
  91. package/dist/chunk-2NTHNWEH.cjs.map +0 -1
  92. package/dist/chunk-54SRL7AJ.cjs.map +0 -1
  93. package/dist/chunk-5X2VX3RQ.cjs.map +0 -1
  94. package/dist/chunk-CHGX6UYR.js.map +0 -1
  95. package/dist/chunk-KNIVT6XZ.js.map +0 -1
  96. package/dist/chunk-QR7U2URY.cjs.map +0 -1
  97. package/dist/chunk-WKZVSKEU.js.map +0 -1
  98. package/dist/chunk-ZBIWYDAR.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry/index.ts","../src/plugin/runtime.ts"],"names":["React"],"mappings":"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","file":"chunk-ZOPJB5FN.cjs","sourcesContent":["import type { ComponentType } from 'react'\n\n// ---------------------------------------------------------------------------\n// Uniform registry — the indirection layer that lets a pure-data AppManifest\n// reference code by string id. Generalizes the entity registry pattern to\n// components, blocks, pages, metrics, scaffolds and plugins.\n//\n// Naming convention: SDK/plugin artifacts use a namespaced id\n// (`agenda.week-view`, `crud.detail-header`); app-local custom code uses the\n// reserved `custom:` prefix (`custom:tannat.HarvestBoard`). The platform never\n// generates `custom:` ids — they only come from an app's registry.tsx.\n// ---------------------------------------------------------------------------\n\n/** A JSON Schema object (loosely typed; validated by tooling, not at runtime). */\nexport type JsonSchema = Record<string, unknown>\n\nexport type RegistrySource = 'sdk' | 'plugin' | 'app'\n\nexport interface RegistryMeta {\n /** Human label for the platform editor. */\n label?: string\n description?: string\n /** Where this artifact came from (for introspection / conflict reporting). */\n source?: RegistrySource\n /** Owning plugin id, when source is 'plugin'. */\n pluginId?: string\n /** JSON Schema for this artifact's props/config — drives the visual editor\n * and constrains AI generation. Optional but strongly encouraged. */\n propsSchema?: JsonSchema\n}\n\nexport interface RegistryEntry<T> {\n id: string\n value: T\n meta: RegistryMeta\n}\n\n/** A typed, introspectable id→value map. Last registration wins (so an app's\n * registry.tsx can override an SDK artifact by re-registering its id). */\nexport class Registry<T> {\n private readonly entries = new Map<string, RegistryEntry<T>>()\n\n constructor(readonly kind: string) {}\n\n register(id: string, value: T, meta: RegistryMeta = {}): void {\n this.entries.set(id, { id, value, meta })\n }\n\n get(id: string): T | undefined {\n return this.entries.get(id)?.value\n }\n\n getEntry(id: string): RegistryEntry<T> | undefined {\n return this.entries.get(id)\n }\n\n has(id: string): boolean {\n return this.entries.has(id)\n }\n\n list(): RegistryEntry<T>[] {\n return Array.from(this.entries.values())\n }\n\n ids(): string[] {\n return Array.from(this.entries.keys())\n }\n\n clear(): void {\n this.entries.clear()\n }\n}\n\n/** True for app-local custom artifacts (`custom:*`). */\nexport function isCustomId(id: string): boolean {\n return id.startsWith('custom:')\n}\n\n// ---------------------------------------------------------------------------\n// Metric definitions (consumed by dashboard / reports / KPI panels).\n// ---------------------------------------------------------------------------\n\nexport type MetricFormat = 'number' | 'currency' | 'percent' | 'duration' | 'rating'\n\nexport interface MetricContext {\n tenantId?: string\n /** ISO date range the metric should compute over, when applicable. */\n range?: { from: string; to: string }\n [key: string]: unknown\n}\n\nexport interface MetricValue {\n value: number\n previousValue?: number\n trend?: 'up' | 'down' | 'flat'\n}\n\nexport interface MetricDefinition {\n id: string\n label?: string\n category?: string\n format?: MetricFormat\n compute: (ctx: MetricContext) => Promise<MetricValue> | MetricValue\n}\n\n// ---------------------------------------------------------------------------\n// Concrete registries. Components/blocks/pages/scaffolds hold React component\n// types; metrics hold definitions; plugins hold opaque manifests (typed at the\n// plugin layer to avoid a circular import).\n// ---------------------------------------------------------------------------\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyComponent = ComponentType<any>\n\nexport const componentRegistry = new Registry<AnyComponent>('component')\nexport const blockRegistry = new Registry<AnyComponent>('block')\nexport const pageRegistry = new Registry<AnyComponent>('page')\nexport const scaffoldRegistry = new Registry<AnyComponent>('scaffold')\nexport const metricRegistry = new Registry<MetricDefinition>('metric')\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const pluginRegistry = new Registry<any>('plugin')\n\n// Thin functional facade (the public API surface) -----------------------------\n\nexport const registerComponent = (id: string, c: AnyComponent, meta?: RegistryMeta) =>\n componentRegistry.register(id, c, meta)\nexport const getComponent = (id: string) => componentRegistry.get(id)\n\nexport const registerBlock = (id: string, c: AnyComponent, meta?: RegistryMeta) =>\n blockRegistry.register(id, c, meta)\nexport const getBlock = (id: string) => blockRegistry.get(id)\nexport const listBlocks = () => blockRegistry.list()\n\nexport const registerPage = (id: string, c: AnyComponent, meta?: RegistryMeta) =>\n pageRegistry.register(id, c, meta)\nexport const getPage = (id: string) => pageRegistry.get(id)\n\nexport const registerScaffold = (id: string, c: AnyComponent, meta?: RegistryMeta) =>\n scaffoldRegistry.register(id, c, meta)\nexport const getScaffold = (id: string) => scaffoldRegistry.get(id)\n\nexport const registerMetric = (def: MetricDefinition, meta?: RegistryMeta) =>\n metricRegistry.register(def.id, def, meta)\nexport const getMetric = (id: string) => metricRegistry.get(id)\nexport const listMetrics = () => metricRegistry.list()\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const registerPlugin = (id: string, manifest: any, meta?: RegistryMeta) =>\n pluginRegistry.register(id, manifest, meta)\nexport const getPlugin = (id: string) => pluginRegistry.get(id)\nexport const listPlugins = () => pluginRegistry.list()\n\n// Plugin factories — a generated app registers each installed @fayz-ai/plugin-*\n// factory by id (src/plugins.generated.ts), so a scaffold can resolve a\n// manifest's PluginRef (id + JSON config) to a live PluginManifest:\n// getPluginFactory(ref.id)?.(ref.config)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PluginFactory = (config?: Record<string, unknown>) => any\nexport const pluginFactoryRegistry = new Registry<PluginFactory>('plugin-factory')\nexport const registerPluginFactory = (id: string, factory: PluginFactory, meta?: RegistryMeta) =>\n pluginFactoryRegistry.register(id, factory, meta)\nexport const getPluginFactory = (id: string) => pluginFactoryRegistry.get(id)\nexport const listPluginFactories = () => pluginFactoryRegistry.list()\n","import * as React from 'react'\nimport type {\n PluginManifest,\n PluginRuntime,\n PluginRuntimeContext,\n PluginRuntimeIssue,\n PluginRuntimeRoute,\n PluginSettingsTab,\n PluginWidgetDefinition,\n PluginWidgetZone,\n ResolvedPluginManifest,\n ResolvedPluginWidget,\n TenantPluginBinding,\n PluginRegistryDef,\n PluginAITool,\n PluginNavigationEntry,\n PluginCapability,\n PluginWidgetVisibility,\n ResolvedDashboardWidget,\n DashboardSurface,\n} from '../types/plugins'\nimport type { FeatureDeclaration } from '../types/permissions'\nimport type { LimitDeclaration } from '../types/entitlements'\nimport type { ConnectorDefinition } from '../integrations'\nimport { getComponent } from '../registry'\n\n/** The plugin contract version this runtime understands. A plugin declaring a\n * higher apiVersion is rejected rather than mis-rendered. */\nexport const PLUGIN_API_VERSION = 1\n\n/** Resolve a plugin route/widget/settings/onboarding target to a component,\n * whether it provided the component directly or a registered component id. */\nexport function resolvePluginComponent(\n def: { component?: React.ComponentType<unknown>; componentId?: string },\n): React.ComponentType<unknown> | undefined {\n if (def.component) return def.component\n if (def.componentId) return getComponent(def.componentId) as React.ComponentType<unknown> | undefined\n return undefined\n}\n\ninterface ResolvePluginRuntimeOptions {\n plugins?: PluginManifest[]\n tenantPlugins?: TenantPluginBinding[]\n hasTenantBindings?: boolean\n context: PluginRuntimeContext\n}\n\nconst EMPTY_CONTEXT: PluginRuntimeContext = {\n tenant: null,\n user: null,\n currentPath: '/',\n matchedPath: '/',\n layout: 'sidebar',\n}\n\nfunction slugify(input: string): string {\n return input.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')\n}\n\nfunction matchesRoutePattern(pattern: string, currentPath: string): boolean {\n if (pattern === currentPath) return true\n if (pattern.endsWith('/*')) {\n const base = pattern.slice(0, -2)\n return currentPath === base || currentPath.startsWith(`${base}/`)\n }\n if (pattern.endsWith('*')) return currentPath.startsWith(pattern.slice(0, -1))\n return false\n}\n\nfunction isWidgetVisible(widget: ResolvedPluginWidget, context: PluginRuntimeContext): boolean {\n if (widget.permission && context.hasPermission && !context.hasPermission(widget.permission)) return false\n const visibility: PluginWidgetVisibility | undefined = widget.visibility\n if (!visibility) return true\n\n if (visibility.layouts && !visibility.layouts.includes(context.layout)) return false\n if (visibility.roles && context.user?.role && !visibility.roles.includes(context.user.role)) return false\n if (visibility.roles && !context.user?.role) return false\n if (visibility.plans && context.tenant?.plan && !visibility.plans.includes(context.tenant.plan)) return false\n if (visibility.plans && !context.tenant?.plan) return false\n if (visibility.routes && !visibility.routes.some((p) => matchesRoutePattern(p, context.currentPath))) return false\n if (visibility.excludeRoutes?.some((p) => matchesRoutePattern(p, context.currentPath))) return false\n if (visibility.permissions?.length) {\n if (!context.hasPermission) return false\n if (!visibility.permissions.every((req) => context.hasPermission?.(req))) return false\n }\n if (visibility.when && !visibility.when(context)) return false\n return true\n}\n\nfunction normalizeSettingsTabs(plugin: PluginManifest): PluginSettingsTab[] {\n return (plugin.settings ?? []).map((entry, index) => ({\n ...entry,\n pluginId: entry.pluginId ?? plugin.id,\n order: entry.order ?? index,\n id: entry.id ?? `${plugin.id}-${slugify(entry.label)}`,\n }))\n}\n\nfunction createEmptyRuntime(context: PluginRuntimeContext = EMPTY_CONTEXT): PluginRuntime {\n return {\n context,\n plugins: [],\n activePlugins: [],\n routes: [],\n navigation: [],\n settingsTabs: [],\n widgets: [],\n dashboardWidgets: [],\n capabilities: [],\n aiTools: [],\n registries: new Map(),\n connectorsByHost: new Map(),\n pluginFeatures: [],\n pluginLimits: [],\n issues: [],\n }\n}\n\nexport function definePlugin<T extends PluginManifest>(plugin: T): T {\n return plugin\n}\n\nexport function resolvePluginRuntime({\n plugins = [],\n tenantPlugins = [],\n hasTenantBindings,\n context,\n}: ResolvePluginRuntimeOptions): PluginRuntime {\n if (plugins.length === 0) return createEmptyRuntime(context)\n\n const issues: PluginRuntimeIssue[] = []\n const normalizedPlugins = new Map<string, PluginManifest>()\n\n for (const plugin of plugins) {\n if (normalizedPlugins.has(plugin.id)) {\n issues.push({ type: 'duplicate_plugin', pluginId: plugin.id, message: `Plugin \"${plugin.id}\" registered more than once.` })\n continue\n }\n if (plugin.apiVersion != null && plugin.apiVersion > PLUGIN_API_VERSION) {\n issues.push({\n type: 'incompatible_api_version',\n pluginId: plugin.id,\n message: `Plugin \"${plugin.id}\" requires plugin API v${plugin.apiVersion}, but this runtime supports v${PLUGIN_API_VERSION}. Upgrade @fayz-ai/core.`,\n })\n continue\n }\n normalizedPlugins.set(plugin.id, plugin)\n }\n\n const bindings = new Map<string, TenantPluginBinding>()\n for (const b of tenantPlugins) bindings.set(b.pluginId, b)\n const bindingsAreManaged = hasTenantBindings ?? tenantPlugins.length > 0\n\n const requested = new Set<string>()\n const activationReason = new Map<string, ResolvedPluginManifest['activationReason']>()\n\n for (const plugin of normalizedPlugins.values()) {\n const binding = bindings.get(plugin.id)\n if (binding?.status === 'active') {\n requested.add(plugin.id)\n activationReason.set(plugin.id, 'tenant')\n continue\n }\n if (plugin.defaultEnabled === true || (!bindingsAreManaged && plugin.defaultEnabled !== false)) {\n requested.add(plugin.id)\n activationReason.set(plugin.id, 'default')\n }\n }\n\n const orderedIds: string[] = []\n const visiting = new Set<string>()\n const visited = new Set<string>()\n\n function visit(pluginId: string, ancestry: string[] = []): void {\n if (visited.has(pluginId)) return\n const plugin = normalizedPlugins.get(pluginId)\n if (!plugin) return\n if (visiting.has(pluginId)) {\n issues.push({ type: 'circular_dependency', pluginId, message: `Circular dependency: ${[...ancestry, pluginId].join(' -> ')}.` })\n return\n }\n visiting.add(pluginId)\n for (const depId of plugin.dependencies ?? []) {\n if (!normalizedPlugins.has(depId)) {\n issues.push({ type: 'missing_dependency', pluginId, dependencyId: depId, message: `Plugin \"${plugin.id}\" depends on missing plugin \"${depId}\".` })\n continue\n }\n if (requested.has(pluginId) && !requested.has(depId)) {\n requested.add(depId)\n activationReason.set(depId, 'dependency')\n }\n visit(depId, [...ancestry, pluginId])\n }\n visiting.delete(pluginId)\n visited.add(pluginId)\n orderedIds.push(pluginId)\n }\n\n for (const id of normalizedPlugins.keys()) visit(id)\n\n const resolvedById = new Map<string, ResolvedPluginManifest>()\n\n for (const pluginId of orderedIds) {\n const plugin = normalizedPlugins.get(pluginId)\n if (!plugin) continue\n const binding = bindings.get(plugin.id)\n const missing = (plugin.dependencies ?? []).filter((id) => !normalizedPlugins.has(id))\n const compatible = !plugin.verticalId || plugin.verticalId === context.tenant?.verticalId\n if (!compatible) {\n issues.push({ type: 'vertical_mismatch', pluginId: plugin.id, message: `Plugin \"${plugin.id}\" requires vertical \"${plugin.verticalId}\".` })\n }\n const reason = activationReason.get(plugin.id) ?? 'inactive'\n const depsReady = (plugin.dependencies ?? []).every((id) => resolvedById.get(id)?.isActive)\n const explicitlyDisabled = binding?.status === 'disabled' || binding?.status === 'removed'\n const shouldActivate = reason === 'dependency' ? true : requested.has(plugin.id) && !explicitlyDisabled\n const isActive = shouldActivate && compatible && missing.length === 0 && depsReady\n\n resolvedById.set(plugin.id, {\n ...plugin,\n status: isActive ? 'active' : (binding?.status ?? 'disabled'),\n isActive,\n activationReason: isActive ? reason : 'inactive',\n config: binding?.config ?? {},\n missingDependencies: missing,\n settingsTabs: normalizeSettingsTabs(plugin),\n widgets: plugin.widgets ?? [],\n resolvedRegistries: plugin.registries ?? [],\n resolvedAITools: plugin.aiTools ?? [],\n })\n }\n\n const resolvedPlugins = orderedIds\n .map((id) => resolvedById.get(id))\n .filter((p): p is ResolvedPluginManifest => Boolean(p))\n\n const activePlugins = resolvedPlugins.filter((p) => p.isActive)\n const routes: PluginRuntimeRoute[] = []\n const navigation: PluginNavigationEntry[] = []\n const settingsTabs: PluginSettingsTab[] = []\n const widgets: ResolvedPluginWidget[] = []\n const dashboardWidgets: ResolvedDashboardWidget[] = []\n const capabilities: PluginCapability[] = []\n const aiTools: PluginAITool[] = []\n const registries = new Map<string, PluginRegistryDef[]>()\n const connectorsByHost = new Map<string, ConnectorDefinition[]>()\n const pluginFeatures: FeatureDeclaration[] = []\n const pluginLimits: LimitDeclaration[] = []\n\n for (const plugin of activePlugins) {\n routes.push(...plugin.routes.map((r) => ({ ...r, plugin })))\n navigation.push(...plugin.navigation.map((entry, i) => ({\n ...entry,\n id: entry.id ?? `${plugin.id}:${entry.route}:${i}`,\n icon: entry.icon ?? plugin.icon,\n })))\n settingsTabs.push(...plugin.settingsTabs)\n capabilities.push(...(plugin.capabilities ?? []))\n aiTools.push(...plugin.resolvedAITools)\n if (plugin.resolvedRegistries.length > 0) registries.set(plugin.id, plugin.resolvedRegistries)\n // Group each addon's connectors under the host plugin they extend.\n for (const connector of plugin.connectors ?? []) {\n const list = connectorsByHost.get(connector.hostPluginId) ?? []\n list.push(connector)\n connectorsByHost.set(connector.hostPluginId, list)\n }\n if (plugin.declaredFeatures) pluginFeatures.push(...plugin.declaredFeatures)\n if (plugin.declaredLimits) pluginLimits.push(...plugin.declaredLimits)\n widgets.push(...plugin.widgets.map((w, i) => ({\n ...w,\n order: w.order ?? i,\n config: { ...plugin.config, ...(w.props ?? {}) },\n plugin,\n })))\n dashboardWidgets.push(...(plugin.dashboardWidgets ?? []).map((w, i) => ({\n ...w,\n domain: w.domain ?? plugin.id,\n order: w.defaultOrder ?? i,\n plugin,\n })))\n }\n\n navigation.sort((a, b) => {\n const order = { main: 0, secondary: 1, settings: 2 }\n return (order[a.section] ?? 99) - (order[b.section] ?? 99) || a.position - b.position\n })\n settingsTabs.sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n widgets.sort((a, b) => a.zone !== b.zone ? a.zone.localeCompare(b.zone) : a.order - b.order)\n dashboardWidgets.sort((a, b) => a.order - b.order)\n\n return { context, plugins: resolvedPlugins, activePlugins, routes, navigation, settingsTabs, widgets, dashboardWidgets, capabilities, aiTools, issues, registries, connectorsByHost, pluginFeatures, pluginLimits }\n}\n\nexport function getWidgetsForZone(\n runtime: PluginRuntime,\n zone: PluginWidgetZone,\n contextOverrides?: Partial<PluginRuntimeContext>,\n): ResolvedPluginWidget[] {\n const ctx = { ...runtime.context, ...contextOverrides }\n return runtime.widgets.filter((w) => w.zone === zone && isWidgetVisible(w, ctx))\n}\n\nexport function getDashboardWidgets(\n runtime: PluginRuntime,\n options: { surface: DashboardSurface; domain?: string; contextOverrides?: Partial<PluginRuntimeContext> },\n): ResolvedDashboardWidget[] {\n const ctx = { ...runtime.context, ...options.contextOverrides }\n return runtime.dashboardWidgets.filter((w) => {\n const surfaces = w.surfaces ?? ['home', 'plugin-home']\n if (!surfaces.includes(options.surface)) return false\n if (options.domain && w.domain !== options.domain) return false\n if (w.verticalId && ctx.tenant?.verticalId && w.verticalId !== ctx.tenant.verticalId) return false\n if (w.permission && ctx.hasPermission && !ctx.hasPermission(w.permission)) return false\n return true\n })\n}\n\nconst PluginRuntimeContext = React.createContext<PluginRuntime | null>(null)\nexport const PluginRuntimeProvider = PluginRuntimeContext.Provider\n\nexport function usePluginRuntime(): PluginRuntime {\n return React.useContext(PluginRuntimeContext) ?? createEmptyRuntime()\n}\n\nexport function usePluginRuntimeOptional(): PluginRuntime | null {\n return React.useContext(PluginRuntimeContext)\n}\n\n/** Connectors contributed by addon plugins that extend the given host plugin. */\nexport function useConnectorsForPlugin(hostPluginId: string): ConnectorDefinition[] {\n return usePluginRuntime().connectorsByHost.get(hostPluginId) ?? []\n}\n"]}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Tenant-scoped row counter — the single cheap `count(*)` helper the access
3
+ * engine uses to resolve quantity limits. Uses Supabase's `head:true` count so
4
+ * no rows are transferred. Results are cached briefly per tenant+table+filter to
5
+ * survive the burst of reads a page does (nav badge + gate + list), and can be
6
+ * force-invalidated by creates via {@link invalidateCount}.
7
+ *
8
+ * MOCK MODE NEVER BLOCKS: with no global Supabase client the count is `0`, so
9
+ * limits always read as "well under cap" — offline/demo apps stay fully usable.
10
+ */
11
+ export interface CountByTenantOptions {
12
+ /** Optional `kind` column filter for multi-kind tables. */
13
+ kind?: string;
14
+ /** `'month'` counts rows created since the 1st of the current month; `'total'` (default) counts all. */
15
+ period?: 'month' | 'total';
16
+ /** Tenant override; defaults to the active tenant (getActiveTenantId). */
17
+ tenantId?: string;
18
+ /** Skip the short-lived cache and hit the DB (used by fresh guard checks). */
19
+ fresh?: boolean;
20
+ }
21
+ /**
22
+ * Count rows in `table` for the given (or active) tenant.
23
+ * Returns 0 when no Supabase client is registered (mock mode).
24
+ */
25
+ export declare function countByTenant(table: string, options?: CountByTenantOptions): Promise<number>;
26
+ /**
27
+ * Drop cached counts. Called by create handlers (via invalidateLimit) so the
28
+ * next read reflects the row they just added.
29
+ *
30
+ * @param tenantOrKey Substring matched against cache keys (a tenant id, a table
31
+ * name, or any fragment). Omit to clear the entire cache.
32
+ */
33
+ export declare function invalidateCount(tenantOrKey?: string): void;
34
+ //# sourceMappingURL=count.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../../src/data/count.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wGAAwG;IACxG,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AA6BD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDtG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ1D"}
@@ -1,44 +1,52 @@
1
1
  'use strict';
2
2
 
3
- var chunk54SRL7AJ_cjs = require('../chunk-54SRL7AJ.cjs');
3
+ var chunkCYAWDW44_cjs = require('../chunk-CYAWDW44.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "FAYZ_CLOUD_PUBLISHABLE_KEY", {
8
8
  enumerable: true,
9
- get: function () { return chunk54SRL7AJ_cjs.FAYZ_CLOUD_PUBLISHABLE_KEY; }
9
+ get: function () { return chunkCYAWDW44_cjs.FAYZ_CLOUD_PUBLISHABLE_KEY; }
10
10
  });
11
11
  Object.defineProperty(exports, "FAYZ_CLOUD_URL", {
12
12
  enumerable: true,
13
- get: function () { return chunk54SRL7AJ_cjs.FAYZ_CLOUD_URL; }
13
+ get: function () { return chunkCYAWDW44_cjs.FAYZ_CLOUD_URL; }
14
+ });
15
+ Object.defineProperty(exports, "countByTenant", {
16
+ enumerable: true,
17
+ get: function () { return chunkCYAWDW44_cjs.countByTenant; }
14
18
  });
15
19
  Object.defineProperty(exports, "createFayzApiProvider", {
16
20
  enumerable: true,
17
- get: function () { return chunk54SRL7AJ_cjs.createFayzApiProvider; }
21
+ get: function () { return chunkCYAWDW44_cjs.createFayzApiProvider; }
18
22
  });
19
23
  Object.defineProperty(exports, "createMockProvider", {
20
24
  enumerable: true,
21
- get: function () { return chunk54SRL7AJ_cjs.createMockProvider; }
25
+ get: function () { return chunkCYAWDW44_cjs.createMockProvider; }
22
26
  });
23
27
  Object.defineProperty(exports, "createSupabaseProvider", {
24
28
  enumerable: true,
25
- get: function () { return chunk54SRL7AJ_cjs.createSupabaseProvider; }
29
+ get: function () { return chunkCYAWDW44_cjs.createSupabaseProvider; }
26
30
  });
27
31
  Object.defineProperty(exports, "getFayzCloudClient", {
28
32
  enumerable: true,
29
- get: function () { return chunk54SRL7AJ_cjs.getFayzCloudClient; }
33
+ get: function () { return chunkCYAWDW44_cjs.getFayzCloudClient; }
30
34
  });
31
35
  Object.defineProperty(exports, "getSupabaseClientOptional", {
32
36
  enumerable: true,
33
- get: function () { return chunk54SRL7AJ_cjs.getSupabaseClientOptional; }
37
+ get: function () { return chunkCYAWDW44_cjs.getSupabaseClientOptional; }
38
+ });
39
+ Object.defineProperty(exports, "invalidateCount", {
40
+ enumerable: true,
41
+ get: function () { return chunkCYAWDW44_cjs.invalidateCount; }
34
42
  });
35
43
  Object.defineProperty(exports, "resolveDataProvider", {
36
44
  enumerable: true,
37
- get: function () { return chunk54SRL7AJ_cjs.resolveDataProvider; }
45
+ get: function () { return chunkCYAWDW44_cjs.resolveDataProvider; }
38
46
  });
39
47
  Object.defineProperty(exports, "setGlobalSupabaseClient", {
40
48
  enumerable: true,
41
- get: function () { return chunk54SRL7AJ_cjs.setGlobalSupabaseClient; }
49
+ get: function () { return chunkCYAWDW44_cjs.setGlobalSupabaseClient; }
42
50
  });
43
51
  //# sourceMappingURL=index.cjs.map
44
52
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,6 @@
1
1
  export { createSupabaseProvider, setGlobalSupabaseClient, getSupabaseClientOptional } from './supabase';
2
+ export { countByTenant, invalidateCount } from './count';
3
+ export type { CountByTenantOptions } from './count';
2
4
  export { getFayzCloudClient, FAYZ_CLOUD_URL, FAYZ_CLOUD_PUBLISHABLE_KEY } from './cloud';
3
5
  export { createFayzApiProvider } from './platform-api';
4
6
  export { createMockProvider } from './mock';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACvG,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,YAAY,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACvG,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,YAAY,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA"}
@@ -1,3 +1,3 @@
1
- export { FAYZ_CLOUD_PUBLISHABLE_KEY, FAYZ_CLOUD_URL, createFayzApiProvider, createMockProvider, createSupabaseProvider, getFayzCloudClient, getSupabaseClientOptional, resolveDataProvider, setGlobalSupabaseClient } from '../chunk-ZBIWYDAR.js';
1
+ export { FAYZ_CLOUD_PUBLISHABLE_KEY, FAYZ_CLOUD_URL, countByTenant, createFayzApiProvider, createMockProvider, createSupabaseProvider, getFayzCloudClient, getSupabaseClientOptional, invalidateCount, resolveDataProvider, setGlobalSupabaseClient } from '../chunk-XJKW2JRW.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/data/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAK3C,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAIlF;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,WAAW,GAAG,OAAO,CAAC,CAAA;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;CACzH;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC1D,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,EACd,OAAO,GAAE,0BAA+B,GACvC,YAAY,CAAC,CAAC,CAAC,CA+EjB"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/data/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAK3C,OAAO,EAAyB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAIlF;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,WAAW,GAAG,OAAO,CAAC,CAAA;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;CACzH;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC1D,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,EACd,OAAO,GAAE,0BAA+B,GACvC,YAAY,CAAC,CAAC,CAAC,CAqFjB"}
@@ -1,28 +1,28 @@
1
1
  'use strict';
2
2
 
3
- var chunk2NTHNWEH_cjs = require('../chunk-2NTHNWEH.cjs');
3
+ var chunkUKU4RIWM_cjs = require('../chunk-UKU4RIWM.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "clearEntityRegistry", {
8
8
  enumerable: true,
9
- get: function () { return chunk2NTHNWEH_cjs.clearEntityRegistry; }
9
+ get: function () { return chunkUKU4RIWM_cjs.clearEntityRegistry; }
10
10
  });
11
11
  Object.defineProperty(exports, "deriveEntityKey", {
12
12
  enumerable: true,
13
- get: function () { return chunk2NTHNWEH_cjs.deriveEntityKey; }
13
+ get: function () { return chunkUKU4RIWM_cjs.deriveEntityKey; }
14
14
  });
15
15
  Object.defineProperty(exports, "getAllEntities", {
16
16
  enumerable: true,
17
- get: function () { return chunk2NTHNWEH_cjs.getAllEntities; }
17
+ get: function () { return chunkUKU4RIWM_cjs.getAllEntities; }
18
18
  });
19
19
  Object.defineProperty(exports, "getEntityByKey", {
20
20
  enumerable: true,
21
- get: function () { return chunk2NTHNWEH_cjs.getEntityByKey; }
21
+ get: function () { return chunkUKU4RIWM_cjs.getEntityByKey; }
22
22
  });
23
23
  Object.defineProperty(exports, "registerEntity", {
24
24
  enumerable: true,
25
- get: function () { return chunk2NTHNWEH_cjs.registerEntity; }
25
+ get: function () { return chunkUKU4RIWM_cjs.registerEntity; }
26
26
  });
27
27
  //# sourceMappingURL=index.cjs.map
28
28
  //# sourceMappingURL=index.cjs.map
@@ -1,3 +1,3 @@
1
- export { clearEntityRegistry, deriveEntityKey, getAllEntities, getEntityByKey, registerEntity } from '../chunk-WKZVSKEU.js';
1
+ export { clearEntityRegistry, deriveEntityKey, getAllEntities, getEntityByKey, registerEntity } from '../chunk-CU64QI4A.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -7,6 +7,15 @@ export interface RegisteredEntity {
7
7
  icon?: string;
8
8
  fields: EntityDef['fields'];
9
9
  source: 'app' | 'plugin';
10
+ /**
11
+ * The definition itself, so consumers that need to *read* the entity — the AI
12
+ * tool executor resolving a data provider — are not limited to the display
13
+ * metadata. Optional: registrations made before this existed omit it.
14
+ */
15
+ entityDef?: EntityDef;
16
+ mockData?: Array<{
17
+ id: string;
18
+ }>;
10
19
  archetype?: EntityArchetype;
11
20
  pluginId?: string;
12
21
  pluginName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/entity/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3B,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAA;IACxB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAE5D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAExE;AAED,wBAAgB,cAAc,IAAI,gBAAgB,EAAE,CAEnD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAO5D"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/entity/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3B,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAA;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAE5D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAExE;AAED,wBAAgB,cAAc,IAAI,gBAAgB,EAAE,CAEnD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAO5D"}
@@ -1,44 +1,44 @@
1
1
  'use strict';
2
2
 
3
- var chunkQR7U2URY_cjs = require('../chunk-QR7U2URY.cjs');
3
+ var chunkSO3VUKGZ_cjs = require('../chunk-SO3VUKGZ.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "I18nProvider", {
8
8
  enumerable: true,
9
- get: function () { return chunkQR7U2URY_cjs.I18nProvider; }
9
+ get: function () { return chunkSO3VUKGZ_cjs.I18nProvider; }
10
10
  });
11
11
  Object.defineProperty(exports, "coreTranslations", {
12
12
  enumerable: true,
13
- get: function () { return chunkQR7U2URY_cjs.coreTranslations; }
13
+ get: function () { return chunkSO3VUKGZ_cjs.coreTranslations; }
14
14
  });
15
15
  Object.defineProperty(exports, "getCurrentLocale", {
16
16
  enumerable: true,
17
- get: function () { return chunkQR7U2URY_cjs.getCurrentLocale; }
17
+ get: function () { return chunkSO3VUKGZ_cjs.getCurrentLocale; }
18
18
  });
19
19
  Object.defineProperty(exports, "mergeTranslations", {
20
20
  enumerable: true,
21
- get: function () { return chunkQR7U2URY_cjs.mergeTranslations; }
21
+ get: function () { return chunkSO3VUKGZ_cjs.mergeTranslations; }
22
22
  });
23
23
  Object.defineProperty(exports, "registerTranslations", {
24
24
  enumerable: true,
25
- get: function () { return chunkQR7U2URY_cjs.registerTranslations; }
25
+ get: function () { return chunkSO3VUKGZ_cjs.registerTranslations; }
26
26
  });
27
27
  Object.defineProperty(exports, "setCurrentLocale", {
28
28
  enumerable: true,
29
- get: function () { return chunkQR7U2URY_cjs.setCurrentLocale; }
29
+ get: function () { return chunkSO3VUKGZ_cjs.setCurrentLocale; }
30
30
  });
31
31
  Object.defineProperty(exports, "setLocaleStore", {
32
32
  enumerable: true,
33
- get: function () { return chunkQR7U2URY_cjs.setLocaleStore; }
33
+ get: function () { return chunkSO3VUKGZ_cjs.setLocaleStore; }
34
34
  });
35
35
  Object.defineProperty(exports, "useI18nConfig", {
36
36
  enumerable: true,
37
- get: function () { return chunkQR7U2URY_cjs.useI18nConfig; }
37
+ get: function () { return chunkSO3VUKGZ_cjs.useI18nConfig; }
38
38
  });
39
39
  Object.defineProperty(exports, "useTranslation", {
40
40
  enumerable: true,
41
- get: function () { return chunkQR7U2URY_cjs.useTranslation; }
41
+ get: function () { return chunkSO3VUKGZ_cjs.useTranslation; }
42
42
  });
43
43
  //# sourceMappingURL=index.cjs.map
44
44
  //# sourceMappingURL=index.cjs.map
@@ -1,3 +1,3 @@
1
- export { I18nProvider, coreTranslations, getCurrentLocale, mergeTranslations, registerTranslations, setCurrentLocale, setLocaleStore, useI18nConfig, useTranslation } from '../chunk-KNIVT6XZ.js';
1
+ export { I18nProvider, coreTranslations, getCurrentLocale, mergeTranslations, registerTranslations, setCurrentLocale, setLocaleStore, useI18nConfig, useTranslation } from '../chunk-JHGXROKV.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell-translations.d.ts","sourceRoot":"","sources":["../../src/i18n/shell-translations.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAy3CpE,CAAA"}
1
+ {"version":3,"file":"shell-translations.d.ts","sourceRoot":"","sources":["../../src/i18n/shell-translations.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA+lDpE,CAAA"}