@duke333/builder-ui 0.2.1 → 0.2.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.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +59 -51
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ready/BuilderProvider.tsx","../src/api/createBuilderApiClient.ts","../src/hooks/createBuilderHooks.ts","../src/ready/BuilderRuntimeComponents.tsx","../src/runtime/runtimeUtils.ts","../src/ready/ReadyFields.tsx","../src/ready/ReadyOverlay.tsx","../src/ready/ReadySubform.tsx","../src/ready/ReadyTable.tsx","../src/admin/editorState.ts","../src/admin/BuilderDefaultEditorBodies.tsx","../src/admin/BuilderDefaultEntityManager.tsx","../src/admin/BuilderDefaultViewEditorPage.tsx","../src/admin/BuilderEditorPage.tsx","../src/admin/BuilderAdminPages.tsx","../src/admin/BuilderEntityManager.tsx","../src/admin/BuilderViewDialog.tsx","../src/admin/formLayoutEditorState.ts","../src/components/DynamicForm.tsx","../src/components/DynamicList.tsx","../src/components/DynamicView.tsx","../src/components/RuntimeEntryDialog.tsx","../src/integration/createBuilderIntegration.ts","../src/index.ts"],"sourcesContent":["\"use client\";\n\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n type BuilderApiClient,\n type BuilderApiTransport,\n createBuilderApiClient,\n} from \"../api\";\nimport { type BuilderHooks, createBuilderHooks } from \"../hooks\";\nimport type { ReadyBuilderContracts } from \"./contracts\";\n\nexport type BuilderNotification = {\n type: \"success\" | \"error\" | \"info\" | \"warning\";\n message: string;\n};\n\nexport type BuilderClient = BuilderApiClient<ReadyBuilderContracts>;\n\nexport type CreateBuilderClientOptions = {\n transport: BuilderApiTransport;\n apiBasePath?: string;\n};\n\nexport function createBuilderClient({ transport, apiBasePath }: CreateBuilderClientOptions) {\n return createBuilderApiClient<ReadyBuilderContracts>(transport, { apiBasePath });\n}\n\ntype BuilderContextValue = {\n client: BuilderClient;\n hooks: BuilderHooks<ReadyBuilderContracts>;\n notify(notification: BuilderNotification): void;\n};\n\nconst BuilderContext = createContext<BuilderContextValue | null>(null);\n\nexport type BuilderProviderProps = {\n children: ReactNode;\n client?: BuilderClient;\n transport?: BuilderApiTransport;\n apiBasePath?: string;\n queryClient?: QueryClient;\n onNotify?(notification: BuilderNotification): void;\n};\n\nexport function BuilderProvider({\n children,\n client: configuredClient,\n transport,\n apiBasePath,\n queryClient,\n onNotify,\n}: BuilderProviderProps) {\n if (!configuredClient && !transport) {\n throw new Error(\"BuilderProvider-д client эсвэл transport өгнө үү.\");\n }\n\n const internalClient = useMemo(\n () => configuredClient ?? createBuilderClient({ transport: transport as BuilderApiTransport, apiBasePath }),\n [apiBasePath, configuredClient, transport],\n );\n const hooks = useMemo(() => createBuilderHooks<ReadyBuilderContracts>(internalClient), [internalClient]);\n const [notifications, setNotifications] = useState<Array<BuilderNotification & { id: number }>>([]);\n const notificationId = useRef(0);\n const notify = useCallback((notification: BuilderNotification) => {\n const id = ++notificationId.current;\n setNotifications((current) => [...current.slice(-2), { ...notification, id }]);\n onNotify?.(notification);\n }, [onNotify]);\n const internalQueryClient = useRef<QueryClient | null>(null);\n if (!internalQueryClient.current) internalQueryClient.current = queryClient ?? new QueryClient();\n\n const value = useMemo<BuilderContextValue>(\n () => ({ client: internalClient, hooks, notify }),\n [hooks, internalClient, notify],\n );\n\n return (\n <QueryClientProvider client={internalQueryClient.current}>\n <BuilderContext.Provider value={value}>\n {children}\n <div className=\"builder-notifications\" aria-live=\"polite\" aria-atomic=\"true\">\n {notifications.map((notification) => (\n <div key={notification.id} className={`builder-notification builder-notification--${notification.type}`}>\n <span>{notification.message}</span>\n <button type=\"button\" aria-label=\"Мэдэгдэл хаах\" onClick={() => setNotifications((current) => current.filter((item) => item.id !== notification.id))}>×</button>\n </div>\n ))}\n </div>\n </BuilderContext.Provider>\n </QueryClientProvider>\n );\n}\n\nexport function useBuilderRuntime() {\n const context = useContext(BuilderContext);\n if (!context) throw new Error(\"Builder component-ийг BuilderProvider дотор render хийнэ үү.\");\n return context;\n}\n\nexport function builderErrorMessage(error: unknown, fallback: string) {\n if (error instanceof Error && error.message.trim()) return error.message;\n return fallback;\n}\n","export type BuilderApiQueryValue = string | number | boolean | null | undefined;\nexport type BuilderApiQuery = Record<string, BuilderApiQueryValue>;\n\nexport type BuilderApiTransport = {\n get<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n post<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n patch<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n delete<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n};\n\nexport type BuilderFieldOptionsQuery = {\n search?: string;\n depends?: Record<string, string | undefined>;\n};\n\nexport type BuilderApiClientOptions = {\n apiBasePath?: string;\n};\n\nexport type BuilderApiContracts = {\n BuilderDbTable: unknown;\n BuilderForm: { id: string };\n BuilderList: { id: string };\n BuilderView: { id: string };\n BuilderViewEntry: { id: string };\n ListBuilderFormsQuery: object;\n ListBuilderFormsResponse: unknown;\n CreateBuilderFormInput: unknown;\n UpdateBuilderFormInput: unknown;\n ListBuilderListsQuery: object;\n ListBuilderListsResponse: unknown;\n CreateBuilderListInput: unknown;\n UpdateBuilderListInput: unknown;\n ListBuilderViewsQuery: object;\n ListBuilderViewsResponse: unknown;\n CreateBuilderViewInput: unknown;\n UpdateBuilderViewInput: unknown;\n ReplicateBuilderEntityInput: unknown;\n CreateBuilderViewEntryInput: unknown;\n CreateCompositeBuilderViewEntryInput: unknown;\n UpdateCompositeBuilderViewEntryInput: unknown;\n UpdateBuilderViewEntryInput: unknown;\n ListBuilderFieldOptionsQuery: BuilderFieldOptionsQuery;\n ListBuilderFieldOptionsResponse: unknown;\n RunBuilderFieldTriggerInput: unknown;\n BuilderFieldTriggerEvent: string;\n BuilderFieldTriggerResponse: unknown;\n ListBuilderViewEntriesQuery: object;\n ListBuilderViewEntriesResponse: unknown;\n};\n\nfunction queryParams(query: object): BuilderApiQuery {\n return { ...query } as BuilderApiQuery;\n}\n\nfunction fieldOptionsQueryParams(query: BuilderFieldOptionsQuery): BuilderApiQuery {\n const flatQuery: BuilderApiQuery = { search: query.search };\n for (const [key, value] of Object.entries(query.depends ?? {})) {\n flatQuery[`depends.${key}`] = value;\n }\n return flatQuery;\n}\n\nexport function createBuilderApiClient<C extends BuilderApiContracts>(\n rootTransport: BuilderApiTransport,\n options: BuilderApiClientOptions = {},\n) {\n const basePath = options.apiBasePath?.trim().replace(/\\/+$/g, \"\") ?? \"\";\n const path = (value: string) => `${basePath}${value}`;\n const transport: BuilderApiTransport = {\n get: (value, requestOptions) => rootTransport.get(path(value), requestOptions),\n post: (value, body, requestOptions) => rootTransport.post(path(value), body, requestOptions),\n patch: (value, body, requestOptions) => rootTransport.patch(path(value), body, requestOptions),\n delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions),\n };\n\n return {\n listBuilderForms: (query: C[\"ListBuilderFormsQuery\"]) =>\n transport.get<C[\"ListBuilderFormsResponse\"]>(\"/builder/forms\", {\n query: queryParams(query),\n }),\n\n listBuilderDbTables: () =>\n transport.get<C[\"BuilderDbTable\"][]>(\"/builder/datasources/tables\"),\n\n listBuilderFormOptions: () =>\n transport.get<C[\"BuilderForm\"][]>(\"/builder/forms/options\"),\n\n getBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`),\n\n createBuilderForm: (input: C[\"CreateBuilderFormInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(\"/builder/forms\", input),\n\n updateBuilderForm: (id: string, input: C[\"UpdateBuilderFormInput\"]) =>\n transport.patch<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`, input),\n\n replicateBuilderForm: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderForm: (id: string) =>\n transport.delete<void>(`/builder/forms/${encodeURIComponent(id)}`),\n\n listBuilderLists: (query: C[\"ListBuilderListsQuery\"]) =>\n transport.get<C[\"ListBuilderListsResponse\"]>(\"/builder/lists\", {\n query: queryParams(query),\n }),\n\n listBuilderListOptions: () => transport.get<C[\"BuilderList\"][]>(\"/builder/lists/options\"),\n\n getBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`),\n\n createBuilderList: (input: C[\"CreateBuilderListInput\"]) =>\n transport.post<C[\"BuilderList\"]>(\"/builder/lists\", input),\n\n updateBuilderList: (id: string, input: C[\"UpdateBuilderListInput\"]) =>\n transport.patch<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`, input),\n\n replicateBuilderList: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderList: (id: string) =>\n transport.delete<void>(`/builder/lists/${encodeURIComponent(id)}`),\n\n listBuilderViews: (query: C[\"ListBuilderViewsQuery\"]) =>\n transport.get<C[\"ListBuilderViewsResponse\"]>(\"/builder/views\", {\n query: queryParams(query),\n }),\n\n getBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`),\n\n createBuilderView: (input: C[\"CreateBuilderViewInput\"]) =>\n transport.post<C[\"BuilderView\"]>(\"/builder/views\", input),\n\n updateBuilderView: (id: string, input: C[\"UpdateBuilderViewInput\"]) =>\n transport.patch<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`, input),\n\n replicateBuilderView: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderView: (id: string) =>\n transport.delete<void>(`/builder/views/${encodeURIComponent(id)}`),\n\n getRuntimeBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/runtime/forms/${encodeURIComponent(id)}`),\n\n createRuntimeBuilderFormEntry: (formId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/entries`,\n input,\n ),\n\n listRuntimeBuilderFormFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) =>\n transport.get<C[\"ListBuilderFieldOptionsResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/options`,\n { query: fieldOptionsQueryParams(query) },\n ),\n\n runRuntimeBuilderFormFieldTrigger: (\n formId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n getRuntimeBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/runtime/lists/${encodeURIComponent(id)}`),\n\n listRuntimeBuilderListEntries: (listId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/lists/${encodeURIComponent(listId)}/entries`,\n { query: queryParams(query) },\n ),\n\n getRuntimeBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/runtime/views/${encodeURIComponent(id)}`),\n\n runRuntimeBuilderViewFieldTrigger: (\n viewId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n listBuilderViewEntries: (viewId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n { query: queryParams(query) },\n ),\n\n createBuilderViewEntry: (viewId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n input,\n ),\n\n createCompositeBuilderViewEntry: (\n viewId: string,\n input: C[\"CreateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries`,\n input,\n ),\n\n updateCompositeBuilderViewEntry: (\n viewId: string,\n id: string,\n input: C[\"UpdateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n updateBuilderViewEntry: (viewId: string, id: string, input: C[\"UpdateBuilderViewEntryInput\"]) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n deleteBuilderViewEntry: (viewId: string, id: string) =>\n transport.delete<void>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n ),\n };\n}\n\nexport type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<\n typeof createBuilderApiClient<C>\n>;\n","\"use client\";\n\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { BuilderApiClient, BuilderApiContracts } from \"../api\";\n\nexport function createBuilderKeys<C extends BuilderApiContracts>() {\n const builderKeys = {\n forms: [\"builder\", \"forms\"] as const,\n dbTables: () => [\"builder\", \"datasources\", \"tables\"] as const,\n formList: (query: C[\"ListBuilderFormsQuery\"]) => [...builderKeys.forms, \"list\", query] as const,\n form: (id: string) => [...builderKeys.forms, \"detail\", id] as const,\n formOptions: () => [...builderKeys.forms, \"options\"] as const,\n lists: [\"builder\", \"lists\"] as const,\n listList: (query: C[\"ListBuilderListsQuery\"]) => [...builderKeys.lists, \"list\", query] as const,\n list: (id: string) => [...builderKeys.lists, \"detail\", id] as const,\n listOptions: () => [...builderKeys.lists, \"options\"] as const,\n views: [\"builder\", \"views\"] as const,\n viewList: (query: C[\"ListBuilderViewsQuery\"]) => [...builderKeys.views, \"list\", query] as const,\n view: (id: string) => [...builderKeys.views, \"detail\", id] as const,\n runtimeForm: (id: string) => [\"builder\", \"runtime\", \"form\", id] as const,\n runtimeFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) => [...builderKeys.runtimeForm(formId), \"fields\", fieldKey, \"options\", query] as const,\n runtimeFormEntries: (id: string) => [...builderKeys.runtimeForm(id), \"entries\"] as const,\n runtimeList: (id: string) => [\"builder\", \"runtime\", \"list\", id] as const,\n runtimeListEntries: (id: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n [...builderKeys.runtimeList(id), \"entries\", query] as const,\n runtimeView: (id: string) => [\"builder\", \"runtime\", \"view\", id] as const,\n entries: (id: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n [...builderKeys.runtimeView(id), \"entries\", query] as const,\n };\n\n return builderKeys;\n}\n\nexport function createBuilderHooks<C extends BuilderApiContracts>(client: BuilderApiClient<C>) {\n const builderKeys = createBuilderKeys<C>();\n\n function invalidateRuntimeViewEntries(\n queryClient: ReturnType<typeof useQueryClient>,\n viewId: string,\n ) {\n return Promise.all([\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeView(viewId) }),\n queryClient.invalidateQueries({ queryKey: [...builderKeys.runtimeView(viewId), \"entries\"] }),\n ]);\n }\n\n function useBuilderDbTables() {\n return useQuery({ queryKey: builderKeys.dbTables(), queryFn: client.listBuilderDbTables });\n }\n\n function useBuilderForms(query: C[\"ListBuilderFormsQuery\"]) {\n return useQuery({\n queryKey: builderKeys.formList(query),\n queryFn: () => client.listBuilderForms(query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useBuilderFormOptions() {\n return useQuery({\n queryKey: builderKeys.formOptions(),\n queryFn: client.listBuilderFormOptions,\n });\n }\n\n function useBuilderForm(id?: string) {\n return useQuery({\n queryKey: builderKeys.form(id ?? \"\"),\n queryFn: () => client.getBuilderForm(id ?? \"\"),\n enabled: Boolean(id),\n });\n }\n\n function useSaveBuilderForm() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderFormInput\"] }) =>\n id\n ? client.updateBuilderForm(id, input)\n : client.createBuilderForm(input as unknown as C[\"CreateBuilderFormInput\"]),\n onSuccess: (form) => {\n queryClient.invalidateQueries({ queryKey: builderKeys.forms });\n queryClient.invalidateQueries({ queryKey: builderKeys.form(form.id) });\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeForm(form.id) });\n },\n });\n }\n\n function useReplicateBuilderForm() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id: string; input: C[\"ReplicateBuilderEntityInput\"] }) =>\n client.replicateBuilderForm(id, input),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.forms }),\n });\n }\n\n function useDeleteBuilderForm() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: client.deleteBuilderForm,\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.forms }),\n });\n }\n\n function useBuilderLists(query: C[\"ListBuilderListsQuery\"]) {\n return useQuery({\n queryKey: builderKeys.listList(query),\n queryFn: () => client.listBuilderLists(query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useBuilderListOptions() {\n return useQuery({\n queryKey: builderKeys.listOptions(),\n queryFn: client.listBuilderListOptions,\n });\n }\n\n function useBuilderList(id?: string) {\n return useQuery({\n queryKey: builderKeys.list(id ?? \"\"),\n queryFn: () => client.getBuilderList(id ?? \"\"),\n enabled: Boolean(id),\n });\n }\n\n function useSaveBuilderList() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderListInput\"] }) =>\n id\n ? client.updateBuilderList(id, input)\n : client.createBuilderList(input as unknown as C[\"CreateBuilderListInput\"]),\n onSuccess: (list) => {\n queryClient.invalidateQueries({ queryKey: builderKeys.lists });\n queryClient.invalidateQueries({ queryKey: builderKeys.list(list.id) });\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeList(list.id) });\n },\n });\n }\n\n function useReplicateBuilderList() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id: string; input: C[\"ReplicateBuilderEntityInput\"] }) =>\n client.replicateBuilderList(id, input),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.lists }),\n });\n }\n\n function useDeleteBuilderList() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: client.deleteBuilderList,\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.lists }),\n });\n }\n\n function useBuilderViews(query: C[\"ListBuilderViewsQuery\"]) {\n return useQuery({\n queryKey: builderKeys.viewList(query),\n queryFn: () => client.listBuilderViews(query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useBuilderView(id?: string) {\n return useQuery({\n queryKey: builderKeys.view(id ?? \"\"),\n queryFn: () => client.getBuilderView(id ?? \"\"),\n enabled: Boolean(id),\n });\n }\n\n function useSaveBuilderView() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderViewInput\"] }) =>\n id\n ? client.updateBuilderView(id, input)\n : client.createBuilderView(input as unknown as C[\"CreateBuilderViewInput\"]),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.views }),\n });\n }\n\n function useReplicateBuilderView() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id: string; input: C[\"ReplicateBuilderEntityInput\"] }) =>\n client.replicateBuilderView(id, input),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.views }),\n });\n }\n\n function useDeleteBuilderView() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: client.deleteBuilderView,\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.views }),\n });\n }\n\n function useRuntimeBuilderForm(id: string) {\n return useQuery({\n queryKey: builderKeys.runtimeForm(id),\n queryFn: () => client.getRuntimeBuilderForm(id),\n });\n }\n\n function useRuntimeBuilderFormFieldOptions(\n formId: string | undefined,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n enabled = true,\n ) {\n return useQuery({\n queryKey: builderKeys.runtimeFieldOptions(formId ?? \"\", fieldKey, query),\n queryFn: () => client.listRuntimeBuilderFormFieldOptions(formId ?? \"\", fieldKey, query),\n enabled: Boolean(formId) && enabled,\n });\n }\n\n function useRunRuntimeBuilderFieldTrigger() {\n return useMutation({\n mutationFn: (args: {\n formId?: string;\n viewId?: string;\n fieldKey: string;\n event: C[\"BuilderFieldTriggerEvent\"];\n input: C[\"RunBuilderFieldTriggerInput\"];\n }) => {\n if (args.viewId) {\n return client.runRuntimeBuilderViewFieldTrigger(\n args.viewId,\n args.fieldKey,\n args.event,\n args.input,\n );\n }\n if (args.formId) {\n return client.runRuntimeBuilderFormFieldTrigger(\n args.formId,\n args.fieldKey,\n args.event,\n args.input,\n );\n }\n throw new Error(\"formId эсвэл viewId шаардлагатай\");\n },\n });\n }\n\n function useRuntimeBuilderList(id: string) {\n return useQuery({\n queryKey: builderKeys.runtimeList(id),\n queryFn: () => client.getRuntimeBuilderList(id),\n });\n }\n\n function useRuntimeBuilderListEntries(id: string, query: C[\"ListBuilderViewEntriesQuery\"]) {\n return useQuery({\n queryKey: builderKeys.runtimeListEntries(id, query),\n queryFn: () => client.listRuntimeBuilderListEntries(id, query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useSaveRuntimeBuilderFormEntry(formId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (input: C[\"CreateBuilderViewEntryInput\"]) =>\n client.createRuntimeBuilderFormEntry(formId, input),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeFormEntries(formId) });\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeForm(formId) });\n queryClient.invalidateQueries({ queryKey: [\"builder\", \"runtime\", \"list\"] });\n },\n });\n }\n\n function useRuntimeBuilderView(id: string, enabled = true) {\n return useQuery({\n queryKey: builderKeys.runtimeView(id),\n queryFn: () => client.getRuntimeBuilderView(id),\n enabled: Boolean(id) && enabled,\n });\n }\n\n function useBuilderViewEntries(\n id: string,\n query: C[\"ListBuilderViewEntriesQuery\"],\n enabled = true,\n ) {\n return useQuery({\n queryKey: builderKeys.entries(id, query),\n queryFn: () => client.listBuilderViewEntries(id, query),\n placeholderData: keepPreviousData,\n enabled: Boolean(id) && enabled,\n });\n }\n\n function useSaveBuilderViewEntry(viewId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderViewEntryInput\"] }) =>\n id\n ? client.updateBuilderViewEntry(viewId, id, input)\n : client.createBuilderViewEntry(\n viewId,\n input as unknown as C[\"CreateBuilderViewEntryInput\"],\n ),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, viewId),\n });\n }\n\n function useCreateCompositeBuilderViewEntry(viewId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (input: C[\"CreateCompositeBuilderViewEntryInput\"]) =>\n client.createCompositeBuilderViewEntry(viewId, input),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, viewId),\n });\n }\n\n function useUpdateCompositeBuilderViewEntry(viewId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n input,\n }: {\n id: string;\n input: C[\"UpdateCompositeBuilderViewEntryInput\"];\n }) => client.updateCompositeBuilderViewEntry(viewId, id, input),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, viewId),\n });\n }\n\n function useDeleteBuilderViewEntry(id: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (entryId: string) => client.deleteBuilderViewEntry(id, entryId),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, id),\n });\n }\n\n return {\n builderKeys,\n useBuilderDbTables,\n useBuilderForm,\n useBuilderFormOptions,\n useBuilderForms,\n useBuilderList,\n useBuilderListOptions,\n useBuilderLists,\n useBuilderViewEntries,\n useBuilderView,\n useBuilderViews,\n useDeleteBuilderForm,\n useDeleteBuilderList,\n useDeleteBuilderView,\n useDeleteBuilderViewEntry,\n useCreateCompositeBuilderViewEntry,\n useReplicateBuilderForm,\n useReplicateBuilderList,\n useReplicateBuilderView,\n useRuntimeBuilderForm,\n useRuntimeBuilderFormFieldOptions,\n useRuntimeBuilderList,\n useRuntimeBuilderListEntries,\n useRuntimeBuilderView,\n useRunRuntimeBuilderFieldTrigger,\n useSaveBuilderForm,\n useSaveBuilderList,\n useSaveBuilderView,\n useSaveBuilderViewEntry,\n useSaveRuntimeBuilderFormEntry,\n useUpdateCompositeBuilderViewEntry,\n };\n}\n\nexport type BuilderHooks<C extends BuilderApiContracts> = ReturnType<typeof createBuilderHooks<C>>;\n","\"use client\";\n\nimport type { BuilderFormSubform, BuilderView, BuilderViewEntry } from \"@duke333/builder-contracts\";\nimport { useMemo, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport {\n createBuilderEntryDefaultValues,\n createBuilderFormDefaultValues,\n type BuilderRuntimeEntryValues,\n type BuilderRuntimeFormValues,\n} from \"../runtime\";\nimport { builderErrorMessage, useBuilderRuntime } from \"./BuilderProvider\";\nimport { ReadyFields } from \"./ReadyFields\";\nimport { ReadyConfirmDialog, ReadyErrorState, ReadyOverlay } from \"./ReadyOverlay\";\nimport { ReadySubform, type ReadySubformRowsChange } from \"./ReadySubform\";\nimport {\n ReadyDataGrid,\n type ReadyColumn,\n readyColumns,\n useReadyTable,\n useReadyTableState,\n} from \"./ReadyTable\";\n\nexport type BuilderFormProps = { formId: string };\nexport type BuilderGridProps = { listId: string };\nexport type BuilderViewProps = { viewId: string };\n\nexport function BuilderForm({ formId }: BuilderFormProps) {\n const { hooks, notify } = useBuilderRuntime();\n const query = hooks.useRuntimeBuilderForm(formId);\n const save = hooks.useSaveRuntimeBuilderFormEntry(formId);\n const defaults = useMemo(() => createBuilderFormDefaultValues(query.data?.schema), [query.data]);\n const form = useForm<BuilderRuntimeFormValues>({ defaultValues: defaults, values: query.data ? defaults : undefined });\n\n if (query.isError) return <ReadyErrorState title=\"Form нээгдсэнгүй\" description={builderErrorMessage(query.error, `«${formId}» form олдсонгүй`)} />;\n if (!query.data) return <div className=\"builder-state\">Form уншиж байна…</div>;\n\n const submit = form.handleSubmit(async (input) => {\n try {\n await save.mutateAsync(input);\n form.reset(defaults);\n notify({ type: \"success\", message: \"Form хадгалагдлаа\" });\n } catch (error) {\n notify({ type: \"error\", message: builderErrorMessage(error, \"Хадгалахад алдаа гарлаа\") });\n }\n });\n\n return (\n <section className=\"builder-card\">\n <h2 className=\"builder-title\">{query.data.title}</h2>\n {query.data.description ? <p className=\"builder-description\">{query.data.description}</p> : null}\n <FormProvider {...form}>\n <form className=\"builder-form\" onSubmit={submit} noValidate>\n <ReadyFields formId={formId} schema={query.data.schema} />\n <div className=\"builder-actions\">\n <button className=\"builder-button builder-button--primary\" type=\"submit\" disabled={save.isPending}>\n {save.isPending ? \"Хадгалж байна…\" : \"Хадгалах\"}\n </button>\n </div>\n </form>\n </FormProvider>\n </section>\n );\n}\n\nexport function BuilderGrid({ listId }: BuilderGridProps) {\n const { hooks } = useBuilderRuntime();\n const listQuery = hooks.useRuntimeBuilderList(listId);\n const state = useReadyTableState();\n const entriesQuery = hooks.useRuntimeBuilderListEntries(listId, state.query);\n const table = useReadyTable({\n columns: readyColumns(listQuery.data?.schema.columns ?? []),\n data: entriesQuery.data?.items ?? [],\n rowCount: entriesQuery.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n if (listQuery.isError) return <ReadyErrorState title=\"Grid нээгдсэнгүй\" description={builderErrorMessage(listQuery.error, `«${listId}» list олдсонгүй`)} />;\n return <ReadyDataGrid title={listQuery.data?.title ?? \"Grid\"} description={listQuery.data?.description} controller={table} isLoading={listQuery.isPending || entriesQuery.isPending} />;\n}\n\ntype DraftSubform = { dataKey: string; rows: BuilderViewEntry[] };\n\nfunction dbTableName(view: BuilderView) {\n if (view.list?.source?.type === \"dbTable\") return view.list.source.tableName;\n if (view.form?.source?.type === \"dbTable\") return view.form.source.tableName;\n return undefined;\n}\n\nfunction childPayload(row: BuilderViewEntry, includeIdentity: boolean) {\n const values = Object.fromEntries(Object.entries(row.values).filter(([key]) => key === \"_delete\" || !key.startsWith(\"_\")));\n return includeIdentity && row.values._draftNew !== true ? { id: row.id, version: row.version, ...values } : values;\n}\n\nfunction BuilderEntryEditor({ view, editing, open, onClose }: { view: BuilderView; editing: BuilderViewEntry | null; open: boolean; onClose(): void }) {\n const { hooks, notify } = useBuilderRuntime();\n const [subforms, setSubforms] = useState<Record<string, DraftSubform>>({});\n const save = hooks.useSaveBuilderViewEntry(view.id);\n const createComposite = hooks.useCreateCompositeBuilderViewEntry(view.id);\n const updateComposite = hooks.useUpdateCompositeBuilderViewEntry(view.id);\n const defaults = useMemo(() => createBuilderEntryDefaultValues(view, editing), [editing, view]);\n const form = useForm<BuilderRuntimeEntryValues>({ defaultValues: defaults, values: open ? defaults : undefined });\n\n const close = () => { setSubforms({}); onClose(); };\n const submit = form.handleSubmit(async (input) => {\n try {\n const mainKey = dbTableName(view);\n const hasSubformRows = Object.values(subforms).some((item) => item.rows.length > 0);\n if (hasSubformRows && mainKey) {\n const children = Object.fromEntries(Object.values(subforms).map((item) => [item.dataKey, item.rows.map((row) => childPayload(row, Boolean(editing)))]));\n if (editing) {\n await updateComposite.mutateAsync({ id: editing.id, input: { data: { [mainKey]: { id: editing.id, version: input.version, ...input.values }, ...children } } });\n } else {\n await createComposite.mutateAsync({ data: { [mainKey]: input.values, ...children } });\n }\n } else {\n await save.mutateAsync({ id: editing?.id, input });\n }\n notify({ type: \"success\", message: editing ? \"Мөр хадгалагдлаа\" : \"Мөр нэмэгдлээ\" });\n close();\n } catch (error) {\n notify({ type: \"error\", message: builderErrorMessage(error, \"Хадгалахад алдаа гарлаа\") });\n }\n });\n const saving = save.isPending || createComposite.isPending || updateComposite.isPending;\n const updateRows = ({ key, dataKey, rows }: ReadySubformRowsChange) => setSubforms((current) => ({ ...current, [key]: { dataKey, rows } }));\n\n return (\n <ReadyOverlay open={open} presentation={view.form?.schema.presentation} title={editing ? \"Мөр засах\" : \"Мөр нэмэх\"} description={view.title} onClose={close}>\n {view.form ? (\n <FormProvider {...form}>\n <form className=\"builder-form\" onSubmit={submit} noValidate>\n <ReadyFields formId={view.form.id} viewId={view.id} schema={view.form.schema} />\n {view.form.schema.subforms.map((subform: BuilderFormSubform) => (\n <ReadySubform key={subform.key} subform={subform} parentEntry={editing} rows={subforms[subform.key]?.rows ?? []} onRowsChange={updateRows} />\n ))}\n <div className=\"builder-actions builder-actions--sticky\">\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={close}>Болих</button>\n <button type=\"submit\" className=\"builder-button builder-button--primary\" disabled={saving}>{saving ? \"Хадгалж байна…\" : \"Хадгалах\"}</button>\n </div>\n </form>\n </FormProvider>\n ) : <ReadyErrorState title=\"Form холбоогүй\" description=\"Энэ view-д form тохируулаагүй байна.\" />}\n </ReadyOverlay>\n );\n}\n\nexport function BuilderView({ viewId }: BuilderViewProps) {\n const { hooks, notify } = useBuilderRuntime();\n const [editing, setEditing] = useState<BuilderViewEntry | null>(null);\n const [editorOpen, setEditorOpen] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<BuilderViewEntry | null>(null);\n const viewQuery = hooks.useRuntimeBuilderView(viewId);\n const state = useReadyTableState();\n const entriesQuery = hooks.useBuilderViewEntries(viewId, state.query);\n const remove = hooks.useDeleteBuilderViewEntry(viewId);\n const view = viewQuery.data;\n const columns = useMemo<ReadyColumn[]>(() => {\n const result = readyColumns(view?.list?.schema.columns ?? []);\n if (!view) return result;\n result.push({\n key: \"_actions\",\n label: \"Үйлдэл\",\n sortable: false,\n align: \"right\",\n render: (entry) => (\n <div className=\"builder-row-actions\" data-builder-row-action>\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={(event) => { event.stopPropagation(); setEditing(entry); setEditorOpen(true); }}>Засах</button>\n <button type=\"button\" className=\"builder-button builder-button--danger\" onClick={(event) => { event.stopPropagation(); setPendingDelete(entry); }}>Устгах</button>\n </div>\n ),\n });\n return result;\n }, [view]);\n const table = useReadyTable({ columns, data: entriesQuery.data?.items ?? [], rowCount: entriesQuery.data?.total ?? 0, state, getRowId: (row) => row.id });\n\n if (viewQuery.isError) return <ReadyErrorState title=\"View нээгдсэнгүй\" description={builderErrorMessage(viewQuery.error, `«${viewId}» view олдсонгүй`)} />;\n\n return (\n <div className=\"builder-runtime\">\n <ReadyDataGrid\n title={view?.title ?? \"View\"}\n description={view?.description}\n controller={table}\n isLoading={viewQuery.isPending || entriesQuery.isPending}\n onRowClick={(entry) => { setEditing(entry); setEditorOpen(true); }}\n toolbarExtra={<button type=\"button\" className=\"builder-button builder-button--primary\" disabled={!view?.form} onClick={() => { setEditing(null); setEditorOpen(true); }}>+ Нэмэх</button>}\n />\n {view ? <BuilderEntryEditor view={view} editing={editing} open={editorOpen} onClose={() => setEditorOpen(false)} /> : null}\n <ReadyConfirmDialog\n open={Boolean(pendingDelete)}\n title=\"Мөр устгах уу?\"\n description=\"Энэ үйлдлийг буцаах боломжгүй.\"\n isPending={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={() => {\n if (!pendingDelete) return;\n remove.mutate(pendingDelete.id, {\n onSuccess: () => { setPendingDelete(null); notify({ type: \"success\", message: \"Мөр устгагдлаа\" }); },\n onError: (error) => notify({ type: \"error\", message: builderErrorMessage(error, \"Устгахад алдаа гарлаа\") }),\n });\n }}\n />\n </div>\n );\n}\n","export type BuilderRuntimeFieldLike = {\n key: string;\n type: string;\n};\n\nexport type BuilderRuntimePresentation = \"dialog\" | \"drawer\";\n\nexport type BuilderRuntimeFormSchemaLike = {\n presentation?: BuilderRuntimePresentation;\n fields: readonly BuilderRuntimeFieldLike[];\n};\n\nexport type BuilderRuntimeViewLike = {\n form?: {\n schema: BuilderRuntimeFormSchemaLike;\n } | null;\n};\n\nexport type BuilderRuntimeEntryLike = {\n id: string;\n values: Record<string, unknown>;\n version: number;\n};\n\nexport type BuilderRuntimeFormValues = {\n values: Record<string, unknown>;\n};\n\nexport type BuilderRuntimeEntryValues = BuilderRuntimeFormValues & {\n version: number;\n};\n\nfunction emptyFieldValue(field: BuilderRuntimeFieldLike) {\n return field.type === \"checkbox\" ? false : \"\";\n}\n\nexport function createBuilderFormDefaultValues(\n schema?: BuilderRuntimeFormSchemaLike,\n): BuilderRuntimeFormValues {\n const values: Record<string, unknown> = {};\n for (const field of schema?.fields ?? []) {\n values[field.key] = emptyFieldValue(field);\n }\n return { values };\n}\n\nexport function createBuilderEntryDefaultValues(\n view: BuilderRuntimeViewLike,\n editing: BuilderRuntimeEntryLike | null,\n): BuilderRuntimeEntryValues {\n const values: Record<string, unknown> = {};\n for (const field of view.form?.schema.fields ?? []) {\n const existing = editing?.values[field.key];\n values[field.key] = existing === undefined ? emptyFieldValue(field) : existing;\n }\n return { values, version: editing?.version ?? 0 };\n}\n\nexport function formatBuilderRuntimeValue(value: unknown, locale = \"mn-MN\") {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if (typeof value === \"boolean\") return value ? \"Тийм\" : \"Үгүй\";\n if (typeof value === \"number\") return new Intl.NumberFormat(locale).format(value);\n return String(value);\n}\n","\"use client\";\n\nimport type { BuilderField, BuilderFormSchema } from \"@duke333/builder-contracts\";\nimport { useRef } from \"react\";\nimport { useFormContext, useWatch } from \"react-hook-form\";\nimport type { BuilderRuntimeEntryValues, BuilderRuntimeFormValues } from \"../runtime\";\nimport { builderErrorMessage, useBuilderRuntime } from \"./BuilderProvider\";\n\ntype ReadyFieldsProps = {\n formId: string;\n viewId?: string;\n schema: BuilderFormSchema;\n extraItems?: Array<{ key: string; render(): React.ReactNode }>;\n};\n\nfunction inputType(field: BuilderField) {\n if (field.type === \"date\") return \"date\";\n if (field.type === \"number\" || field.type === \"money\") return \"number\";\n return \"text\";\n}\n\nfunction ReadyField({ field, formId, viewId }: { field: BuilderField; formId: string; viewId?: string }) {\n const { hooks, notify } = useBuilderRuntime();\n const form = useFormContext<BuilderRuntimeFormValues | BuilderRuntimeEntryValues>();\n const values = useWatch({ control: form.control, name: \"values\" }) ?? {};\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const source = field.optionsSource;\n const dependencyValue = source?.filterBy ? values[source.filterBy.valueFromField] : undefined;\n const depends = source?.filterBy && dependencyValue != null\n ? { [source.filterBy.valueFromField]: String(dependencyValue) }\n : undefined;\n const optionsQuery = hooks.useRuntimeBuilderFormFieldOptions(\n formId,\n field.key,\n { depends },\n Boolean(source),\n );\n const trigger = hooks.useRunRuntimeBuilderFieldTrigger();\n const name = `values.${field.key}` as const;\n\n if (field.hidden) return null;\n\n const runTrigger = (event: \"onChange\" | \"onBlur\", value: unknown) => {\n const definition = field.triggers.find((item) => item.enabled && item.event === event);\n if (!definition) return;\n const execute = async () => {\n try {\n const response = await trigger.mutateAsync({\n formId,\n viewId,\n fieldKey: field.key,\n event,\n input: { value, values: form.getValues(\"values\") },\n });\n for (const [key, patchedValue] of Object.entries(response.valuesPatch)) {\n form.setValue(`values.${key}`, patchedValue, { shouldDirty: true, shouldValidate: true });\n }\n for (const [key, message] of Object.entries(response.fieldErrors)) {\n form.setError(`values.${key}`, { message });\n }\n if (response.toast?.message) notify(response.toast);\n } catch (error) {\n notify({ type: \"error\", message: builderErrorMessage(error, \"Field action ажилласангүй\") });\n }\n };\n if (event === \"onChange\" && definition.debounceMs > 0) {\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => void execute(), definition.debounceMs);\n } else {\n void execute();\n }\n };\n\n const registration = form.register(name, {\n required: field.required ? `${field.label} шаардлагатай` : false,\n setValueAs:\n field.type === \"number\" || field.type === \"money\"\n ? (value) => (value === \"\" ? \"\" : Number(value))\n : undefined,\n onChange: (event) => runTrigger(\"onChange\", event.target.type === \"checkbox\" ? event.target.checked : event.target.value),\n onBlur: (event) => runTrigger(\"onBlur\", event.target.value),\n });\n const error = form.formState.errors.values?.[field.key];\n const options = source ? (optionsQuery.data ?? []) : (field.options ?? []);\n\n return (\n <label className=\"builder-field\">\n <span className=\"builder-field__label\">\n {field.label}{field.required ? <span aria-hidden=\"true\"> *</span> : null}\n </span>\n {field.type === \"textarea\" ? (\n <textarea className=\"builder-input builder-textarea\" placeholder={field.placeholder} disabled={field.disabled} {...registration} />\n ) : field.type === \"select\" ? (\n <select className=\"builder-input\" disabled={field.disabled || optionsQuery.isPending} {...registration}>\n <option value=\"\">{field.placeholder ?? \"Сонгох\"}</option>\n {options.map((option) => <option key={option.value} value={option.value}>{option.label}</option>)}\n </select>\n ) : field.type === \"checkbox\" ? (\n <input className=\"builder-checkbox\" type=\"checkbox\" disabled={field.disabled} {...registration} />\n ) : (\n <input className=\"builder-input\" type={inputType(field)} placeholder={field.placeholder} disabled={field.disabled} {...registration} />\n )}\n {field.description ? <small className=\"builder-field__description\">{field.description}</small> : null}\n {typeof error?.message === \"string\" ? <small className=\"builder-field__error\">{error.message}</small> : null}\n </label>\n );\n}\n\nexport function ReadyFields({ formId, viewId, schema, extraItems = [] }: ReadyFieldsProps) {\n const fields = new Map(schema.fields.map((field) => [field.key, field]));\n const rendered = new Set<string>();\n\n return (\n <div className=\"builder-form-fields\">\n {schema.layout?.groups.map((group) => (\n <fieldset key={group.id} className=\"builder-fieldset\">\n {group.title ? <legend>{group.title}</legend> : null}\n <div className=\"builder-form-grid\">\n {group.fields.map((item) => {\n const field = fields.get(item.key);\n if (!field) return null;\n rendered.add(field.key);\n return <div key={field.key} style={{ gridColumn: `span ${item.span}` }}><ReadyField field={field} formId={formId} viewId={viewId} /></div>;\n })}\n </div>\n </fieldset>\n ))}\n <div className=\"builder-form-grid\">\n {schema.fields.filter((field) => !rendered.has(field.key)).map((field) => (\n <div key={field.key} style={{ gridColumn: \"span 12\" }}><ReadyField field={field} formId={formId} viewId={viewId} /></div>\n ))}\n </div>\n {extraItems.map((item) => <div key={item.key}>{item.render()}</div>)}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, useEffect, useId, useRef } from \"react\";\nimport type { BuilderRuntimePresentation } from \"../runtime\";\n\nexport type ReadyOverlayProps = {\n open: boolean;\n presentation?: BuilderRuntimePresentation;\n title: string;\n description?: string;\n onClose(): void;\n children: ReactNode;\n};\n\nexport function ReadyOverlay({\n open,\n presentation = \"dialog\",\n title,\n description,\n onClose,\n children,\n}: ReadyOverlayProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const titleId = useId();\n\n useEffect(() => {\n if (!open) return;\n const previous = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onCloseRef.current();\n if (event.key === \"Tab\") {\n const focusable = Array.from(\n panelRef.current?.querySelectorAll<HTMLElement>(\n \"button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex='-1'])\",\n ) ?? [],\n );\n const first = focusable[0];\n const last = focusable.at(-1);\n if (event.shiftKey && document.activeElement === first && last) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last && first) {\n event.preventDefault();\n first.focus();\n }\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n const overflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.body.style.overflow = overflow;\n previous?.focus();\n };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div className=\"builder-overlay\" role=\"presentation\" onMouseDown={(event) => event.target === event.currentTarget && onClose()}>\n <div\n ref={panelRef}\n className={`builder-overlay__panel builder-overlay__panel--${presentation}`}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n tabIndex={-1}\n >\n <header className=\"builder-overlay__header\">\n <div>\n <h2 id={titleId} className=\"builder-title\">{title}</h2>\n {description ? <p className=\"builder-description\">{description}</p> : null}\n </div>\n <button type=\"button\" className=\"builder-icon-button\" aria-label=\"Хаах\" onClick={onClose}>×</button>\n </header>\n <div className=\"builder-overlay__body\">{children}</div>\n </div>\n </div>\n );\n}\n\nexport type ReadyConfirmDialogProps = {\n open: boolean;\n title: string;\n description?: string;\n confirmLabel?: string;\n isPending?: boolean;\n onClose(): void;\n onConfirm(): void;\n};\n\nexport function ReadyConfirmDialog({\n open,\n title,\n description,\n confirmLabel = \"Устгах\",\n isPending,\n onClose,\n onConfirm,\n}: ReadyConfirmDialogProps) {\n return (\n <ReadyOverlay open={open} title={title} description={description} onClose={onClose}>\n <div className=\"builder-actions\">\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={onClose}>Болих</button>\n <button type=\"button\" className=\"builder-button builder-button--danger\" disabled={isPending} onClick={onConfirm}>\n {isPending ? \"Түр хүлээнэ үү…\" : confirmLabel}\n </button>\n </div>\n </ReadyOverlay>\n );\n}\n\nexport function ReadyErrorState({ title, description }: { title: string; description: string }) {\n return (\n <div className=\"builder-state builder-state--error\" role=\"alert\">\n <strong>{title}</strong>\n <span>{description}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport type { BuilderFormSubform, BuilderViewEntry } from \"@duke333/builder-contracts\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { createBuilderEntryDefaultValues, type BuilderRuntimeEntryValues } from \"../runtime\";\nimport { builderErrorMessage, useBuilderRuntime } from \"./BuilderProvider\";\nimport { ReadyFields } from \"./ReadyFields\";\nimport { ReadyOverlay } from \"./ReadyOverlay\";\nimport { ReadyDataGrid, readyColumns, useReadyTable, useReadyTableState } from \"./ReadyTable\";\n\nexport type ReadySubformRowsChange = {\n key: string;\n dataKey: string;\n rows: BuilderViewEntry[];\n};\n\ntype ReadySubformProps = {\n subform: BuilderFormSubform;\n parentEntry: BuilderViewEntry | null;\n rows: BuilderViewEntry[];\n onRowsChange(change: ReadySubformRowsChange): void;\n};\n\nfunction linkedValue(entry: BuilderViewEntry | null, field: string) {\n if (!entry) return undefined;\n const value = field === \"id\" ? entry.id : entry.values[field];\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : undefined;\n}\n\nfunction dataKey(viewId: string, tableName?: string) {\n return tableName?.trim() || viewId;\n}\n\nfunction makeDraftEntry(viewId: string, values: BuilderRuntimeEntryValues, editing: BuilderViewEntry | null) {\n const now = new Date().toISOString();\n return {\n id: editing?.id ?? (globalThis.crypto?.randomUUID?.() ?? `draft-${Date.now()}`),\n viewId,\n values: editing ? values.values : { ...values.values, _draftNew: true },\n version: editing?.version ?? 0,\n createdAt: editing?.createdAt ?? now,\n updatedAt: now,\n } satisfies BuilderViewEntry;\n}\n\nexport function ReadySubform({ subform, parentEntry, rows, onRowsChange }: ReadySubformProps) {\n const { hooks, notify } = useBuilderRuntime();\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState<BuilderViewEntry | null>(null);\n const initialized = useRef(false);\n const parentValue = linkedValue(parentEntry, subform.parentField);\n const viewQuery = hooks.useRuntimeBuilderView(subform.viewId, Boolean(subform.viewId));\n const tableState = useReadyTableState({ pageSize: 100 });\n const filterQuery = useMemo(\n () => ({ ...tableState.query, filterField: subform.childField, filterValue: parentValue ?? \"\" }),\n [parentValue, subform.childField, tableState.query],\n );\n const entriesQuery = hooks.useBuilderViewEntries(subform.viewId, filterQuery, Boolean(parentValue));\n const view = viewQuery.data;\n const source = view?.list?.source?.type === \"dbTable\" ? view.list.source.tableName : undefined;\n\n useEffect(() => {\n if (initialized.current || !view || !entriesQuery.data || !parentValue) return;\n initialized.current = true;\n onRowsChange({ key: subform.key, dataKey: dataKey(view.id, source), rows: entriesQuery.data.items });\n }, [entriesQuery.data, onRowsChange, parentValue, source, subform.key, view]);\n\n const visibleRows = rows.filter((row) => row.values._delete !== true);\n const removeRow = (row: BuilderViewEntry) => {\n initialized.current = true;\n const nextRows = row.values._draftNew === true\n ? rows.filter((item) => item.id !== row.id)\n : rows.map((item) => item.id === row.id ? { ...item, values: { ...item.values, _delete: true } } : item);\n onRowsChange({ key: subform.key, dataKey: dataKey(view?.id ?? subform.viewId, source), rows: nextRows });\n notify({ type: \"info\", message: \"Subform мөр устгахаар тэмдэглэгдлээ\" });\n };\n const columns = useMemo(() => [\n ...readyColumns(view?.list?.schema.columns ?? []),\n {\n key: \"_actions\",\n label: \"Үйлдэл\",\n sortable: false,\n align: \"right\" as const,\n render: (row: BuilderViewEntry) => (\n <button type=\"button\" className=\"builder-link builder-link--danger\" onClick={(event) => { event.stopPropagation(); removeRow(row); }}>\n Устгах\n </button>\n ),\n },\n ], [rows, source, subform.key, subform.viewId, view]);\n const table = useReadyTable({\n columns,\n data: visibleRows,\n rowCount: visibleRows.length,\n state: tableState,\n getRowId: (row) => row.id,\n });\n const form = useForm<BuilderRuntimeEntryValues>({\n defaultValues: createBuilderEntryDefaultValues(view ?? {}, editing),\n values: open ? createBuilderEntryDefaultValues(view ?? {}, editing) : undefined,\n });\n\n const close = () => {\n setOpen(false);\n setEditing(null);\n };\n const save = form.handleSubmit((values) => {\n if (!view) return;\n if (parentValue) values.values[subform.childField] = parentValue;\n const next = makeDraftEntry(view.id, values, editing);\n initialized.current = true;\n onRowsChange({\n key: subform.key,\n dataKey: dataKey(view.id, source),\n rows: editing ? rows.map((row) => (row.id === editing.id ? next : row)) : [...rows, next],\n });\n close();\n });\n\n if (viewQuery.isError) {\n return <div className=\"builder-state builder-state--error\">{builderErrorMessage(viewQuery.error, `${subform.label} нээгдсэнгүй`)}</div>;\n }\n\n return (\n <section className=\"builder-subform\">\n <div className=\"builder-subform__header\">\n <strong>{subform.label}</strong>\n <button type=\"button\" className=\"builder-button builder-button--secondary\" disabled={!view?.form} onClick={() => { setEditing(null); setOpen(true); }}>\n + {subform.buttonLabel ?? \"Нэмэх\"}\n </button>\n </div>\n {visibleRows.length > 0 || (Boolean(parentValue) && entriesQuery.isPending) ? (\n <ReadyDataGrid\n controller={table}\n isLoading={Boolean(parentValue) && entriesQuery.isPending}\n onRowClick={(row) => { setEditing(row); setOpen(true); }}\n emptyTitle=\"Мөр алга\"\n />\n ) : null}\n {view?.form ? (\n <ReadyOverlay open={open} presentation={subform.presentation} title={subform.label} description={view.title} onClose={close}>\n <FormProvider {...form}>\n <form className=\"builder-form\" onSubmit={save} noValidate>\n <ReadyFields formId={view.form.id} viewId={view.id} schema={view.form.schema} />\n <div className=\"builder-actions\">\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={close}>Болих</button>\n <button type=\"submit\" className=\"builder-button builder-button--primary\">Хадгалах</button>\n </div>\n </form>\n </FormProvider>\n </ReadyOverlay>\n ) : null}\n </section>\n );\n}\n","\"use client\";\n\nimport type { BuilderColumn, BuilderViewEntry, ListBuilderViewEntriesQuery } from \"@duke333/builder-contracts\";\nimport { type ReactNode, useMemo, useState } from \"react\";\nimport { formatBuilderRuntimeValue } from \"../runtime\";\n\nexport type ReadyColumn = BuilderColumn & {\n render?(entry: BuilderViewEntry): ReactNode;\n};\n\nexport type ReadyTableState = {\n query: ListBuilderViewEntriesQuery;\n page: number;\n pageSize: number;\n search: string;\n sort?: string;\n setPage(page: number): void;\n setSearch(search: string): void;\n toggleSort(key: string): void;\n};\n\nexport function useReadyTableState({ pageSize = 20 }: { pageSize?: number } = {}): ReadyTableState {\n const [page, setPage] = useState(1);\n const [search, setSearchValue] = useState(\"\");\n const [sort, setSort] = useState<string>();\n\n return {\n query: { page, pageSize, search: search || undefined, sort },\n page,\n pageSize,\n search,\n sort,\n setPage,\n setSearch(searchValue) {\n setSearchValue(searchValue);\n setPage(1);\n },\n toggleSort(key) {\n setSort((current) => (current === key ? `-${key}` : key));\n setPage(1);\n },\n };\n}\n\nexport type ReadyTableController = {\n columns: ReadyColumn[];\n data: BuilderViewEntry[];\n rowCount: number;\n state: ReadyTableState;\n selectedIds: string[];\n toggleSelected(id: string): void;\n clearSelection(): void;\n};\n\nexport function useReadyTable(args: {\n columns: ReadyColumn[];\n data: BuilderViewEntry[];\n rowCount: number;\n state: ReadyTableState;\n getRowId(row: BuilderViewEntry): string;\n}): ReadyTableController {\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\n return useMemo(\n () => ({\n ...args,\n selectedIds,\n toggleSelected(id: string) {\n setSelectedIds((current) =>\n current.includes(id) ? current.filter((value) => value !== id) : [...current, id],\n );\n },\n clearSelection() {\n setSelectedIds([]);\n },\n }),\n [args.columns, args.data, args.rowCount, args.state, selectedIds],\n );\n}\n\nexport type ReadyDataGridProps = {\n title?: string;\n description?: string | null;\n controller: ReadyTableController;\n isLoading?: boolean;\n searchPlaceholder?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n onRowClick?(row: BuilderViewEntry, event: React.MouseEvent<HTMLTableRowElement>): void;\n toolbarExtra?: ReactNode;\n selectable?: boolean;\n};\n\nfunction cellValue(entry: BuilderViewEntry, column: ReadyColumn) {\n if (column.render) return column.render(entry);\n return formatBuilderRuntimeValue(entry.values[column.key]);\n}\n\nexport function ReadyDataGrid({\n title,\n description,\n controller,\n isLoading,\n searchPlaceholder = \"Хайх...\",\n emptyTitle = \"Мэдээлэл алга\",\n emptyDescription,\n onRowClick,\n toolbarExtra,\n selectable = false,\n}: ReadyDataGridProps) {\n const totalPages = Math.max(1, Math.ceil(controller.rowCount / controller.state.pageSize));\n\n return (\n <section className=\"builder-card builder-grid\" aria-busy={isLoading || undefined}>\n <header className=\"builder-grid__header\">\n <div>\n {title ? <h2 className=\"builder-title\">{title}</h2> : null}\n {description ? <p className=\"builder-description\">{description}</p> : null}\n </div>\n <div className=\"builder-grid__toolbar\">\n <input\n className=\"builder-input builder-grid__search\"\n type=\"search\"\n value={controller.state.search}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n onChange={(event) => controller.state.setSearch(event.target.value)}\n />\n {toolbarExtra}\n </div>\n </header>\n\n <div className=\"builder-table-wrap\">\n <table className=\"builder-table\">\n <thead>\n <tr>\n {selectable ? <th aria-label=\"Сонголт\" /> : null}\n {controller.columns.map((column) => (\n <th key={column.key} className={`builder-align-${column.align}`}>\n {column.sortable ? (\n <button type=\"button\" className=\"builder-sort\" onClick={() => controller.state.toggleSort(column.key)}>\n {column.label}\n </button>\n ) : (\n column.label\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {controller.data.map((entry) => (\n <tr\n key={entry.id}\n className={onRowClick ? \"builder-row-clickable\" : undefined}\n onClick={(event) => onRowClick?.(entry, event)}\n >\n {selectable ? (\n <td>\n <input\n type=\"checkbox\"\n checked={controller.selectedIds.includes(entry.id)}\n aria-label=\"Мөр сонгох\"\n onClick={(event) => event.stopPropagation()}\n onChange={() => controller.toggleSelected(entry.id)}\n />\n </td>\n ) : null}\n {controller.columns.map((column) => (\n <td key={column.key} className={`builder-align-${column.align}`}>\n {cellValue(entry, column)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {isLoading ? <div className=\"builder-state\">Уншиж байна…</div> : null}\n {!isLoading && controller.data.length === 0 ? (\n <div className=\"builder-state\">\n <strong>{emptyTitle}</strong>\n {emptyDescription ? <span>{emptyDescription}</span> : null}\n </div>\n ) : null}\n </div>\n\n <footer className=\"builder-pagination\">\n <span>{controller.rowCount} мөр</span>\n <div>\n <button type=\"button\" className=\"builder-button builder-button--ghost\" disabled={controller.state.page <= 1} onClick={() => controller.state.setPage(controller.state.page - 1)}>\n Өмнөх\n </button>\n <span>{controller.state.page} / {totalPages}</span>\n <button type=\"button\" className=\"builder-button builder-button--ghost\" disabled={controller.state.page >= totalPages} onClick={() => controller.state.setPage(controller.state.page + 1)}>\n Дараах\n </button>\n </div>\n </footer>\n </section>\n );\n}\n\nexport function readyColumns(columns: readonly BuilderColumn[]): ReadyColumn[] {\n return columns.map((column) => ({ ...column }));\n}\n","export const BUILDER_EDITOR_NONE_VALUE = \"__none\";\n\nexport type BuilderEditorSelectOption = {\n label: string;\n value: string;\n};\n\nexport type BuilderEditorDbTable<TFieldType extends string = string> = {\n name: string;\n label?: string;\n lookupColumns?: Array<{\n name: string;\n label: string;\n }>;\n columns: Array<{\n name: string;\n label: string;\n fieldType: TFieldType;\n nullable: boolean;\n dataType: string;\n sortable: boolean;\n }>;\n};\n\ntype BuilderEditorSource =\n | { type: \"dbTable\"; tableName: string }\n | { type: \"apiEndpoint\"; basePath: string }\n | null;\n\ntype BuilderEditorTrigger<TEvent extends string> = {\n event: TEvent;\n action: string;\n enabled: boolean;\n blocking: boolean;\n config: Record<string, unknown>;\n};\n\ntype BuilderEditorField<TFieldType extends string> = {\n key: string;\n label: string;\n type: TFieldType;\n required: boolean;\n hidden?: boolean;\n disabled?: boolean;\n placeholder?: string;\n description?: string;\n options?: BuilderEditorSelectOption[];\n optionsSource?:\n | {\n type: \"dbTable\";\n tableName: string;\n valueField: string;\n labelField: string;\n searchFields?: string[];\n filterBy?: {\n field: string;\n valueFromField: string;\n };\n }\n | undefined;\n triggers?: BuilderEditorFieldTrigger[];\n};\n\nexport type BuilderEditorSubform = {\n key: string;\n label: string;\n viewId: string;\n parentField: string;\n childField: string;\n buttonLabel?: string;\n icon?: string;\n presentation?: \"dialog\" | \"drawer\";\n};\n\ntype BuilderEditorFormLayoutField = {\n key: string;\n span?: number;\n};\n\ntype BuilderEditorFormLayoutGroup = {\n id: string;\n title?: string | null;\n columns?: 6 | 8 | 12;\n fields?: BuilderEditorFormLayoutField[];\n};\n\ntype BuilderEditorFormLayout = {\n groups?: BuilderEditorFormLayoutGroup[];\n};\n\ntype BuilderEditorColumn = {\n key: string;\n label: string;\n sortable: boolean;\n align: \"left\" | \"right\";\n};\n\nexport type BuilderFormEditorEntity<\n TFieldType extends string = string,\n TTriggerEvent extends string = string,\n> = {\n title: string;\n description: string | null;\n version: number;\n source: BuilderEditorSource;\n schema: {\n presentation?: \"dialog\" | \"drawer\";\n fields: BuilderEditorField<TFieldType>[];\n layout?: BuilderEditorFormLayout;\n subforms?: BuilderEditorSubform[];\n };\n triggers: BuilderEditorTrigger<TTriggerEvent>[];\n};\n\nexport type BuilderListEditorEntity<TTriggerEvent extends string = string> = {\n title: string;\n description: string | null;\n version: number;\n source: BuilderEditorSource;\n schema: { columns: BuilderEditorColumn[] };\n triggers: BuilderEditorTrigger<TTriggerEvent>[];\n};\n\nexport type BuilderFormEditorFieldValues<TFieldType extends string = string> = {\n key: string;\n label: string;\n type: TFieldType;\n required: boolean;\n hidden: boolean;\n disabled: boolean;\n placeholder?: string;\n optionsText?: string;\n optionsMode: \"static\" | \"table\";\n optionsTable: string;\n optionsValueField: string;\n optionsLabelField: string;\n optionsSearchFieldsText?: string;\n optionsDependsOn?: string;\n optionsFilterField?: string;\n triggers: BuilderEditorFieldTriggerValues[];\n};\n\nexport type BuilderFormEditorSubformValues = {\n key: string;\n label: string;\n viewId: string;\n parentField: string;\n childField: string;\n buttonLabel?: string;\n icon?: string;\n presentation?: \"dialog\" | \"drawer\";\n};\n\nexport type BuilderFormEditorLayoutFieldValues = {\n key: string;\n span: number;\n};\n\nexport type BuilderFormEditorLayoutGroupValues = {\n id: string;\n title: string;\n columns: 6 | 8 | 12;\n fields: BuilderFormEditorLayoutFieldValues[];\n};\n\nexport type BuilderEditorTriggerValues<TEvent extends string = string> = {\n event: TEvent;\n route: string;\n enabled: boolean;\n blocking: boolean;\n};\n\nexport type BuilderEditorFieldTrigger = {\n event: string;\n action: string;\n enabled: boolean;\n debounceMs: number;\n config: Record<string, unknown>;\n};\n\nexport type BuilderEditorFieldTriggerValues = {\n event: string;\n action: string;\n enabled: boolean;\n debounceMs: number;\n};\n\nexport type BuilderFormEditorValues<\n TFieldType extends string = string,\n TTriggerEvent extends string = string,\n> = {\n title: string;\n description?: string;\n presentation?: \"dialog\" | \"drawer\";\n sourceType: \"none\" | \"dbTable\" | \"apiEndpoint\";\n sourceTable: string;\n apiBasePath?: string;\n fields: BuilderFormEditorFieldValues<TFieldType>[];\n layoutGroups: BuilderFormEditorLayoutGroupValues[];\n subforms?: BuilderFormEditorSubformValues[];\n triggers: BuilderEditorTriggerValues<TTriggerEvent>[];\n version: number;\n};\n\nexport type BuilderListEditorColumnValues = {\n key: string;\n label: string;\n sortable: boolean;\n align: \"left\" | \"right\";\n};\n\nexport type BuilderListEditorValues<TTriggerEvent extends string = string> = {\n title: string;\n description?: string;\n sourceType: \"none\" | \"dbTable\" | \"apiEndpoint\";\n sourceTable: string;\n apiBasePath?: string;\n columns: BuilderListEditorColumnValues[];\n triggers: BuilderEditorTriggerValues<TTriggerEvent>[];\n version: number;\n};\n\nexport type BuilderViewEditorEntity<TTrigger = unknown> = {\n title: string;\n description: string | null;\n formId: string | null;\n listId: string | null;\n permissionRead?: string | null;\n permissionWrite?: string | null;\n triggers: TTrigger[];\n version: number;\n};\n\nexport type BuilderViewEditorValues = {\n title: string;\n description?: string;\n formId: string;\n listId: string;\n permissionRead: string;\n permissionWrite: string;\n triggersText?: string;\n version: number;\n};\n\nexport function builderEditorOptionsToText(options?: BuilderEditorSelectOption[]) {\n return (options ?? []).map((option) => `${option.label}:${option.value}`).join(\"\\n\");\n}\n\nexport function builderEditorTextToOptions(\n value?: string,\n): BuilderEditorSelectOption[] | undefined {\n const rows = (value ?? \"\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n if (rows.length === 0) return undefined;\n return rows.map((line) => {\n const [label, ...rest] = line.split(\":\");\n return { label: label.trim(), value: rest.join(\":\").trim() || label.trim() };\n });\n}\n\nexport function builderEditorSearchFieldsToText(fields?: string[]) {\n return (fields ?? []).join(\"\\n\");\n}\n\nexport function builderEditorTextToSearchFields(value?: string): string[] | undefined {\n const fields = (value ?? \"\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n return fields.length > 0 ? fields : undefined;\n}\n\nexport function getBuilderEditorTriggerRoute(config: Record<string, unknown>) {\n const route = config.route ?? config.path ?? config.url;\n return typeof route === \"string\" ? route : \"\";\n}\n\nfunction valuesFromTriggers<TEvent extends string>(\n triggers: BuilderEditorTrigger<TEvent>[],\n): BuilderEditorTriggerValues<TEvent>[] {\n return triggers\n .filter((trigger) => trigger.action === \"callApi\" || trigger.action === \"webhook\")\n .map((trigger) => ({\n event: trigger.event,\n route: getBuilderEditorTriggerRoute(trigger.config),\n enabled: trigger.enabled,\n blocking: trigger.blocking,\n }))\n .filter((trigger) => trigger.route);\n}\n\nfunction valuesFromFieldTriggers(\n triggers?: BuilderEditorFieldTrigger[],\n): BuilderEditorFieldTriggerValues[] {\n return (triggers ?? []).map((trigger) => ({\n event: trigger.event,\n action: trigger.action,\n enabled: trigger.enabled,\n debounceMs: trigger.debounceMs,\n }));\n}\n\nfunction clampLayoutSpan(span: number | undefined, columns: 6 | 8 | 12) {\n if (!span || Number.isNaN(span)) return columns;\n return Math.max(1, Math.min(columns, Math.trunc(span)));\n}\n\nexport function builderFormEditorDefaultSpan<TFieldType extends string>(\n field: BuilderFormEditorFieldValues<TFieldType>,\n) {\n if (field.type === \"textarea\" || field.type === \"checkbox\") return 12;\n return 6;\n}\n\nexport function builderFormEditorDefaultLayoutGroups<TFieldType extends string>(\n fields: BuilderFormEditorFieldValues<TFieldType>[],\n subforms: BuilderFormEditorSubformValues[] = [],\n): BuilderFormEditorLayoutGroupValues[] {\n return [\n {\n id: \"main\",\n title: \"Үндсэн\",\n columns: 12,\n fields: [\n ...fields.map((field) => ({\n key: field.key,\n span: builderFormEditorDefaultSpan(field),\n })),\n ...subforms.map((subform) => ({ key: subform.key, span: 12 })),\n ],\n },\n ];\n}\n\nexport function normalizeBuilderFormEditorLayoutGroups<TFieldType extends string>(\n groups: BuilderEditorFormLayoutGroup[] | undefined,\n fields: BuilderFormEditorFieldValues<TFieldType>[],\n subforms: BuilderFormEditorSubformValues[] = [],\n): BuilderFormEditorLayoutGroupValues[] {\n if (fields.length === 0 && subforms.length === 0) return [];\n\n const layoutItems = [\n ...fields.map((field) => ({\n key: field.key,\n span: builderFormEditorDefaultSpan(field),\n })),\n ...subforms.map((subform) => ({ key: subform.key, span: 12 })),\n ];\n const itemKeys = new Set(layoutItems.map((item) => item.key));\n const usedKeys = new Set<string>();\n const normalized = (groups ?? [])\n .map((group, index) => {\n const columns: 6 | 8 | 12 = group.columns === 6 || group.columns === 8 ? group.columns : 12;\n const groupFields = (group.fields ?? [])\n .filter((field) => itemKeys.has(field.key) && !usedKeys.has(field.key))\n .map((field) => {\n usedKeys.add(field.key);\n return { key: field.key, span: clampLayoutSpan(field.span, columns) };\n });\n\n return {\n id: group.id || `group${index + 1}`,\n title: group.title || `Group ${index + 1}`,\n columns,\n fields: groupFields,\n };\n })\n .filter((group) => group.fields.length > 0 || group.title.trim());\n\n const missingFields = layoutItems.filter((item) => !usedKeys.has(item.key));\n\n if (normalized.length === 0) {\n return builderFormEditorDefaultLayoutGroups(fields, subforms);\n }\n\n if (missingFields.length > 0) {\n normalized.push({\n id: \"ungrouped\",\n title: \"Бусад\",\n columns: 12,\n fields: missingFields,\n });\n }\n\n return normalized;\n}\n\nexport function builderFormEditorValuesFromEntity<\n TFieldType extends string,\n TTriggerEvent extends string,\n>(\n form: BuilderFormEditorEntity<TFieldType, TTriggerEvent> | null,\n emptyValues: BuilderFormEditorValues<TFieldType, TTriggerEvent>,\n): BuilderFormEditorValues<TFieldType, TTriggerEvent> {\n if (!form) return emptyValues;\n const source = form.source;\n const fields: BuilderFormEditorFieldValues<TFieldType>[] = form.schema.fields.map((field) => ({\n key: field.key,\n label: field.label,\n type: field.type,\n required: field.required,\n hidden: field.hidden ?? false,\n disabled: field.disabled ?? false,\n placeholder: field.placeholder ?? \"\",\n optionsText: builderEditorOptionsToText(field.options),\n optionsMode: field.optionsSource?.type === \"dbTable\" ? \"table\" : \"static\",\n optionsTable:\n field.optionsSource?.type === \"dbTable\"\n ? field.optionsSource.tableName\n : BUILDER_EDITOR_NONE_VALUE,\n optionsValueField:\n field.optionsSource?.type === \"dbTable\"\n ? field.optionsSource.valueField\n : BUILDER_EDITOR_NONE_VALUE,\n optionsLabelField:\n field.optionsSource?.type === \"dbTable\"\n ? field.optionsSource.labelField\n : BUILDER_EDITOR_NONE_VALUE,\n optionsSearchFieldsText:\n field.optionsSource?.type === \"dbTable\"\n ? builderEditorSearchFieldsToText(field.optionsSource.searchFields)\n : \"\",\n optionsDependsOn:\n field.optionsSource?.type === \"dbTable\"\n ? (field.optionsSource.filterBy?.valueFromField ?? \"\")\n : \"\",\n optionsFilterField:\n field.optionsSource?.type === \"dbTable\" ? (field.optionsSource.filterBy?.field ?? \"\") : \"\",\n triggers: valuesFromFieldTriggers(field.triggers),\n }));\n const subforms = (form.schema.subforms ?? []).map((subform) => ({\n key: subform.key,\n label: subform.label,\n viewId: subform.viewId,\n parentField: subform.parentField,\n childField: subform.childField,\n buttonLabel: subform.buttonLabel ?? \"\",\n icon: subform.icon ?? \"\",\n presentation: subform.presentation ?? \"dialog\",\n }));\n return {\n title: form.title,\n description: form.description ?? \"\",\n presentation: form.schema.presentation ?? \"dialog\",\n sourceType: source?.type ?? \"none\",\n sourceTable: source?.type === \"dbTable\" ? source.tableName : BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: source?.type === \"apiEndpoint\" ? source.basePath : \"\",\n fields,\n layoutGroups: normalizeBuilderFormEditorLayoutGroups(\n form.schema.layout?.groups,\n fields,\n subforms,\n ),\n subforms,\n triggers: valuesFromTriggers(form.triggers),\n version: form.version,\n };\n}\n\nexport function builderListEditorValuesFromEntity<TTriggerEvent extends string>(\n list: BuilderListEditorEntity<TTriggerEvent> | null,\n emptyValues: BuilderListEditorValues<TTriggerEvent>,\n): BuilderListEditorValues<TTriggerEvent> {\n if (!list) return emptyValues;\n const source = list.source;\n return {\n title: list.title,\n description: list.description ?? \"\",\n sourceType: source?.type ?? \"none\",\n sourceTable: source?.type === \"dbTable\" ? source.tableName : BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: source?.type === \"apiEndpoint\" ? source.basePath : \"\",\n columns: list.schema.columns.map((column) => ({\n key: column.key,\n label: column.label,\n sortable: column.sortable,\n align: column.align,\n })),\n triggers: valuesFromTriggers(list.triggers),\n version: list.version,\n };\n}\n\nexport function builderViewEditorValuesFromEntity<TTrigger>(\n view: BuilderViewEditorEntity<TTrigger> | null,\n emptyValues: BuilderViewEditorValues,\n defaultPermission = \"\",\n): BuilderViewEditorValues {\n if (!view) return emptyValues;\n return {\n title: view.title,\n description: view.description ?? \"\",\n formId: view.formId ?? BUILDER_EDITOR_NONE_VALUE,\n listId: view.listId ?? BUILDER_EDITOR_NONE_VALUE,\n permissionRead: view.permissionRead || defaultPermission,\n permissionWrite: view.permissionWrite || defaultPermission,\n triggersText: JSON.stringify(view.triggers ?? [], null, 2),\n version: view.version,\n };\n}\n\nexport function builderFormEditorFieldsFromTable<TFieldType extends string>(\n table: BuilderEditorDbTable<TFieldType>,\n): BuilderFormEditorFieldValues<TFieldType>[] {\n return table.columns.map((column) => ({\n key: column.name,\n label: column.label,\n type: column.fieldType,\n required: !column.nullable,\n hidden: false,\n disabled: false,\n placeholder: column.label,\n optionsText: \"\",\n optionsMode: \"static\",\n optionsTable: BUILDER_EDITOR_NONE_VALUE,\n optionsValueField: BUILDER_EDITOR_NONE_VALUE,\n optionsLabelField: BUILDER_EDITOR_NONE_VALUE,\n optionsSearchFieldsText: \"\",\n optionsDependsOn: \"\",\n optionsFilterField: \"\",\n triggers: [],\n }));\n}\n\nexport function builderListEditorColumnsFromTable<TFieldType extends string>(\n table: BuilderEditorDbTable<TFieldType>,\n): BuilderListEditorColumnValues[] {\n return table.columns.map((column) => ({\n key: column.name,\n label: column.label,\n sortable: column.sortable,\n align: column.fieldType === \"number\" || column.fieldType === \"money\" ? \"right\" : \"left\",\n }));\n}\n\nexport function builderFormEditorInputFromValues<\n TFieldType extends string,\n TTriggerEvent extends string,\n>(values: BuilderFormEditorValues<TFieldType, TTriggerEvent>) {\n const source =\n values.sourceType === \"dbTable\" && values.sourceTable !== BUILDER_EDITOR_NONE_VALUE\n ? { type: \"dbTable\" as const, tableName: values.sourceTable }\n : values.sourceType === \"apiEndpoint\" && values.apiBasePath\n ? { type: \"apiEndpoint\" as const, basePath: values.apiBasePath }\n : null;\n\n return {\n title: values.title,\n description: values.description || null,\n source,\n schema: {\n presentation: values.presentation ?? \"dialog\",\n fields: values.fields.map((field) => ({\n key: field.key,\n label: field.label,\n type: field.type,\n required: field.required,\n hidden: field.hidden,\n disabled: field.disabled,\n placeholder: field.placeholder?.trim() || field.label,\n options:\n field.type === \"select\" && field.optionsMode === \"static\"\n ? builderEditorTextToOptions(field.optionsText)\n : undefined,\n optionsSource:\n field.type === \"select\" &&\n field.optionsMode === \"table\" &&\n field.optionsTable !== BUILDER_EDITOR_NONE_VALUE &&\n field.optionsValueField !== BUILDER_EDITOR_NONE_VALUE &&\n field.optionsLabelField !== BUILDER_EDITOR_NONE_VALUE\n ? {\n type: \"dbTable\" as const,\n tableName: field.optionsTable,\n valueField: field.optionsValueField,\n labelField: field.optionsLabelField,\n searchFields: builderEditorTextToSearchFields(field.optionsSearchFieldsText),\n filterBy:\n field.optionsDependsOn && field.optionsFilterField\n ? {\n field: field.optionsFilterField,\n valueFromField: field.optionsDependsOn,\n }\n : undefined,\n }\n : undefined,\n triggers: field.triggers.map((trigger) => ({\n event: trigger.event,\n action: trigger.action,\n enabled: trigger.enabled,\n debounceMs: trigger.debounceMs,\n config: {},\n })),\n })),\n layout: {\n groups: normalizeBuilderFormEditorLayoutGroups(\n values.layoutGroups,\n values.fields,\n values.subforms ?? [],\n ),\n },\n subforms: (values.subforms ?? [])\n .filter(\n (subform) =>\n subform.key &&\n subform.label &&\n subform.viewId !== BUILDER_EDITOR_NONE_VALUE &&\n subform.parentField &&\n subform.childField,\n )\n .map((subform) => ({\n key: subform.key,\n label: subform.label,\n viewId: subform.viewId,\n parentField: subform.parentField,\n childField: subform.childField,\n buttonLabel: subform.buttonLabel?.trim() || undefined,\n icon: subform.icon?.trim() || undefined,\n presentation: subform.presentation ?? \"dialog\",\n })),\n },\n triggers: values.triggers.map((trigger) => ({\n event: trigger.event,\n action: \"callApi\" as const,\n enabled: trigger.enabled,\n blocking: trigger.blocking,\n config: { route: trigger.route },\n })),\n version: values.version,\n };\n}\n\nexport function builderListEditorInputFromValues<TTriggerEvent extends string>(\n values: BuilderListEditorValues<TTriggerEvent>,\n) {\n const source =\n values.sourceType === \"dbTable\" && values.sourceTable !== BUILDER_EDITOR_NONE_VALUE\n ? { type: \"dbTable\" as const, tableName: values.sourceTable }\n : values.sourceType === \"apiEndpoint\" && values.apiBasePath\n ? { type: \"apiEndpoint\" as const, basePath: values.apiBasePath }\n : null;\n\n return {\n title: values.title,\n description: values.description || null,\n source,\n schema: { columns: values.columns },\n triggers: values.triggers.map((trigger) => ({\n event: trigger.event,\n action: \"callApi\" as const,\n enabled: trigger.enabled,\n blocking: trigger.blocking,\n config: { route: trigger.route },\n })),\n version: values.version,\n };\n}\n\nexport function builderViewEditorInputFromValues<TTrigger>(\n values: BuilderViewEditorValues,\n parseTriggers: (value: string) => TTrigger[],\n) {\n return {\n title: values.title,\n description: values.description || null,\n formId: values.formId === BUILDER_EDITOR_NONE_VALUE ? null : values.formId,\n listId: values.listId === BUILDER_EDITOR_NONE_VALUE ? null : values.listId,\n permissionRead: values.permissionRead || null,\n permissionWrite: values.permissionWrite || null,\n triggers: values.triggersText?.trim() ? parseTriggers(values.triggersText) : [],\n version: values.version,\n };\n}\n","\"use client\";\n\nimport type {\n BuilderFormEditorBodyProps,\n BuilderListEditorBodyProps,\n} from \"./BuilderEditorPage\";\nimport { BUILDER_EDITOR_NONE_VALUE, builderFormEditorDefaultLayoutGroups } from \"./editorState\";\n\nexport type BuilderDefaultOption = {\n value: string;\n label: string;\n};\n\nexport type BuilderDefaultFormEditorBodyOptions = {\n backHref: string;\n fieldTypeOptions: BuilderDefaultOption[];\n formTriggerEventOptions: BuilderDefaultOption[];\n fieldTriggerEventOptions: BuilderDefaultOption[];\n};\n\nexport type BuilderDefaultListEditorBodyOptions = {\n backHref: string;\n listTriggerEventOptions: BuilderDefaultOption[];\n};\n\nconst styles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\" as const,\n },\n title: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n actions: {\n display: \"flex\",\n gap: \"0.5rem\",\n flexWrap: \"wrap\" as const,\n },\n section: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n background: \"var(--background, #fff)\",\n overflow: \"hidden\",\n },\n sectionHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"center\",\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n flexWrap: \"wrap\" as const,\n },\n sectionTitle: {\n margin: 0,\n fontSize: \"1rem\",\n fontWeight: 650,\n },\n grid: {\n display: \"grid\",\n gap: \"0.75rem\",\n padding: \"0.75rem\",\n },\n twoColumn: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(14rem, 1fr))\",\n gap: \"0.75rem\",\n },\n row: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(10rem, 1fr))\",\n gap: \"0.5rem\",\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n },\n field: {\n display: \"grid\",\n gap: \"0.25rem\",\n fontSize: \"0.875rem\",\n },\n label: {\n color: \"var(--muted-foreground, #64748b)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n },\n input: {\n minWidth: 0,\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n },\n textarea: {\n minWidth: 0,\n minHeight: \"5rem\",\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n resize: \"vertical\" as const,\n },\n checkboxField: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n fontSize: \"0.875rem\",\n minHeight: \"2.25rem\",\n },\n button: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n primaryButton: {\n border: \"1px solid var(--primary, #18181b)\",\n borderRadius: \"0.375rem\",\n background: \"var(--primary, #18181b)\",\n color: \"var(--primary-foreground, #fff)\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n};\n\nfunction optionItems(options: BuilderDefaultOption[]) {\n return options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ));\n}\n\nexport function createBuilderDefaultFormEditorBody<\n TFieldType extends string,\n TTriggerEvent extends string,\n>(options: BuilderDefaultFormEditorBodyOptions) {\n return function BuilderDefaultFormEditorBody({\n formId,\n form,\n fieldArray,\n subformArray,\n triggerArray,\n fields,\n sourceType,\n sourceTable,\n tables,\n emptyField,\n emptyTrigger,\n isSaving,\n importFieldsFromTable,\n }: BuilderFormEditorBodyProps<TFieldType, TTriggerEvent>) {\n return (\n <div style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{formId ? \"Edit Dynamic Form\" : \"New Dynamic Form\"}</h1>\n <p style={styles.description}>Configure fields, source mapping, layout, and triggers.</p>\n </div>\n <div style={styles.actions}>\n <a href={options.backHref} style={styles.button}>\n Cancel\n </a>\n <button type=\"submit\" disabled={isSaving} style={styles.primaryButton}>\n {isSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <h2 style={styles.sectionTitle}>Details</h2>\n </div>\n <div style={{ ...styles.grid, ...styles.twoColumn }}>\n <label style={styles.field}>\n <span style={styles.label}>Title</span>\n <input style={styles.input} {...form.register(\"title\", { required: true })} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Description</span>\n <input style={styles.input} {...form.register(\"description\")} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Presentation</span>\n <select style={styles.input} {...form.register(\"presentation\")}>\n <option value=\"dialog\">Dialog</option>\n <option value=\"drawer\">Drawer</option>\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Datasource</span>\n <select style={styles.input} {...form.register(\"sourceType\")}>\n <option value=\"none\">None</option>\n <option value=\"dbTable\">DB table</option>\n <option value=\"apiEndpoint\">API endpoint</option>\n </select>\n </label>\n {sourceType === \"dbTable\" ? (\n <label style={styles.field}>\n <span style={styles.label}>Table</span>\n <select style={styles.input} {...form.register(\"sourceTable\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>Select table</option>\n {tables.map((table) => (\n <option key={table.name} value={table.name}>\n {table.label ?? table.name}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n {sourceType === \"apiEndpoint\" ? (\n <label style={styles.field}>\n <span style={styles.label}>API base path</span>\n <input style={styles.input} {...form.register(\"apiBasePath\")} />\n </label>\n ) : null}\n {sourceType === \"dbTable\" ? (\n <div style={{ ...styles.field, justifyContent: \"end\" }}>\n <button\n type=\"button\"\n style={styles.button}\n disabled={sourceTable === BUILDER_EDITOR_NONE_VALUE}\n onClick={importFieldsFromTable}\n >\n Import fields\n </button>\n </div>\n ) : null}\n </div>\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Fields</h2>\n <p style={styles.description}>Runtime form inputs.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => {\n const key = `field${fieldArray.fields.length + 1}`;\n fieldArray.append({\n ...emptyField,\n key,\n label: `Field ${fieldArray.fields.length + 1}`,\n type: options.fieldTypeOptions[0]?.value as TFieldType,\n });\n }}\n >\n Add field\n </button>\n </div>\n {fieldArray.fields.map((field, index) => (\n <div key={field.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Key</span>\n <input style={styles.input} {...form.register(`fields.${index}.key`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Label</span>\n <input style={styles.input} {...form.register(`fields.${index}.label`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Type</span>\n <select\n style={styles.input}\n {...form.register(`fields.${index}.type` as Parameters<typeof form.register>[0])}\n >\n {optionItems(options.fieldTypeOptions)}\n </select>\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`fields.${index}.required`)} />\n Required\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`fields.${index}.hidden`)} />\n Hidden\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`fields.${index}.disabled`)} />\n Disabled\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Placeholder</span>\n <input style={styles.input} {...form.register(`fields.${index}.placeholder`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Static options</span>\n <textarea style={styles.textarea} {...form.register(`fields.${index}.optionsText`)} />\n </label>\n <div style={styles.actions}>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => fieldArray.remove(index)}\n disabled={fieldArray.fields.length <= 1}\n >\n Remove\n </button>\n </div>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Layout</h2>\n <p style={styles.description}>Default layout can be regenerated from current fields.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() =>\n form.setValue(\"layoutGroups\", builderFormEditorDefaultLayoutGroups(fields), {\n shouldDirty: true,\n })\n }\n >\n Reset layout\n </button>\n </div>\n {form.watch(\"layoutGroups\").map((group, groupIndex) => (\n <div key={group.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Group title</span>\n <input style={styles.input} {...form.register(`layoutGroups.${groupIndex}.title`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Columns</span>\n <select\n style={styles.input}\n value={group.columns}\n onChange={(event) =>\n form.setValue(\n `layoutGroups.${groupIndex}.columns`,\n Number(event.target.value) as 6 | 8 | 12,\n { shouldDirty: true },\n )\n }\n >\n <option value={6}>6</option>\n <option value={8}>8</option>\n <option value={12}>12</option>\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Fields</span>\n <input\n style={styles.input}\n value={group.fields.map((item) => item.key).join(\", \")}\n readOnly\n />\n </label>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Subforms</h2>\n <p style={styles.description}>Optional nested runtime view bindings.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() =>\n subformArray.append({\n key: `subform${subformArray.fields.length + 1}`,\n label: `Subform ${subformArray.fields.length + 1}`,\n viewId: BUILDER_EDITOR_NONE_VALUE,\n parentField: \"id\",\n childField: \"parentId\",\n buttonLabel: \"\",\n icon: \"\",\n presentation: \"dialog\",\n })\n }\n >\n Add subform\n </button>\n </div>\n {subformArray.fields.map((subform, index) => (\n <div key={subform.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Key</span>\n <input style={styles.input} {...form.register(`subforms.${index}.key`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Label</span>\n <input style={styles.input} {...form.register(`subforms.${index}.label`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>View ID</span>\n <input style={styles.input} {...form.register(`subforms.${index}.viewId`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Parent field</span>\n <input style={styles.input} {...form.register(`subforms.${index}.parentField`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Child field</span>\n <input style={styles.input} {...form.register(`subforms.${index}.childField`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Presentation</span>\n <select\n style={styles.input}\n {...form.register(`subforms.${index}.presentation`)}\n >\n <option value=\"dialog\">Dialog</option>\n <option value=\"drawer\">Drawer</option>\n </select>\n </label>\n <button type=\"button\" style={styles.button} onClick={() => subformArray.remove(index)}>\n Remove\n </button>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Form Triggers</h2>\n <p style={styles.description}>Optional API callbacks for lifecycle events.</p>\n </div>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.append(emptyTrigger)}>\n Add trigger\n </button>\n </div>\n {triggerArray.fields.map((trigger, index) => (\n <div key={trigger.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Event</span>\n <select\n style={styles.input}\n {...form.register(\n `triggers.${index}.event` as Parameters<typeof form.register>[0],\n )}\n >\n {optionItems(options.formTriggerEventOptions)}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Route</span>\n <input style={styles.input} {...form.register(`triggers.${index}.route`)} />\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.enabled`)} />\n Enabled\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.blocking`)} />\n Blocking\n </label>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.remove(index)}>\n Remove\n </button>\n </div>\n ))}\n </section>\n </div>\n );\n };\n}\n\nexport function createBuilderDefaultListEditorBody<TTriggerEvent extends string>(\n options: BuilderDefaultListEditorBodyOptions,\n) {\n return function BuilderDefaultListEditorBody({\n listId,\n form,\n columnArray,\n triggerArray,\n sourceType,\n sourceTable,\n tables,\n emptyColumn,\n emptyTrigger,\n isSaving,\n importColumnsFromTable,\n }: BuilderListEditorBodyProps<TTriggerEvent>) {\n return (\n <div style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{listId ? \"Edit Dynamic List\" : \"New Dynamic List\"}</h1>\n <p style={styles.description}>Configure list columns, source mapping, and triggers.</p>\n </div>\n <div style={styles.actions}>\n <a href={options.backHref} style={styles.button}>\n Cancel\n </a>\n <button type=\"submit\" disabled={isSaving} style={styles.primaryButton}>\n {isSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <h2 style={styles.sectionTitle}>Details</h2>\n </div>\n <div style={{ ...styles.grid, ...styles.twoColumn }}>\n <label style={styles.field}>\n <span style={styles.label}>Title</span>\n <input style={styles.input} {...form.register(\"title\", { required: true })} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Description</span>\n <input style={styles.input} {...form.register(\"description\")} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Datasource</span>\n <select style={styles.input} {...form.register(\"sourceType\")}>\n <option value=\"none\">None</option>\n <option value=\"dbTable\">DB table</option>\n <option value=\"apiEndpoint\">API endpoint</option>\n </select>\n </label>\n {sourceType === \"dbTable\" ? (\n <label style={styles.field}>\n <span style={styles.label}>Table</span>\n <select style={styles.input} {...form.register(\"sourceTable\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>Select table</option>\n {tables.map((table) => (\n <option key={table.name} value={table.name}>\n {table.label ?? table.name}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n {sourceType === \"apiEndpoint\" ? (\n <label style={styles.field}>\n <span style={styles.label}>API base path</span>\n <input style={styles.input} {...form.register(\"apiBasePath\")} />\n </label>\n ) : null}\n {sourceType === \"dbTable\" ? (\n <div style={{ ...styles.field, justifyContent: \"end\" }}>\n <button\n type=\"button\"\n style={styles.button}\n disabled={sourceTable === BUILDER_EDITOR_NONE_VALUE}\n onClick={importColumnsFromTable}\n >\n Import columns\n </button>\n </div>\n ) : null}\n </div>\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Columns</h2>\n <p style={styles.description}>Runtime list columns.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() =>\n columnArray.append({\n ...emptyColumn,\n key: `field${columnArray.fields.length + 1}`,\n label: `Column ${columnArray.fields.length + 1}`,\n })\n }\n >\n Add column\n </button>\n </div>\n {columnArray.fields.map((column, index) => (\n <div key={column.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Key</span>\n <input style={styles.input} {...form.register(`columns.${index}.key`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Label</span>\n <input style={styles.input} {...form.register(`columns.${index}.label`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Align</span>\n <select style={styles.input} {...form.register(`columns.${index}.align`)}>\n <option value=\"left\">Left</option>\n <option value=\"right\">Right</option>\n </select>\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`columns.${index}.sortable`)} />\n Sortable\n </label>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => columnArray.remove(index)}\n disabled={columnArray.fields.length <= 1}\n >\n Remove\n </button>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>List Triggers</h2>\n <p style={styles.description}>Optional API callbacks for list lifecycle events.</p>\n </div>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.append(emptyTrigger)}>\n Add trigger\n </button>\n </div>\n {triggerArray.fields.map((trigger, index) => (\n <div key={trigger.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Event</span>\n <select\n style={styles.input}\n {...form.register(\n `triggers.${index}.event` as Parameters<typeof form.register>[0],\n )}\n >\n {optionItems(options.listTriggerEventOptions)}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Route</span>\n <input style={styles.input} {...form.register(`triggers.${index}.route`)} />\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.enabled`)} />\n Enabled\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.blocking`)} />\n Blocking\n </label>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.remove(index)}>\n Remove\n </button>\n </div>\n ))}\n </section>\n </div>\n );\n };\n}\n","\"use client\";\n\nimport { useMemo, useState } from \"react\";\n\nexport type BuilderDefaultEntity = {\n id: string;\n title: string;\n description?: string | null;\n};\n\nexport type BuilderDefaultEntityManagerLabels<TEntity extends BuilderDefaultEntity> = {\n title: string;\n description: string;\n searchPlaceholder: string;\n emptyTitle: string;\n emptyDescription: string;\n addLabel: string;\n editLabel: string;\n replicateLabel: string;\n deleteLabel: string;\n runtimeLabel: string;\n deleteConfirm(entity: TEntity): string;\n replicatePrompt(entity: TEntity): string;\n replicateDefaultTitle(entity: TEntity): string;\n};\n\nexport type BuilderDefaultEntityListResult<TEntity> = {\n items: TEntity[];\n total: number;\n};\n\nexport type BuilderDefaultEntityQueryResult<TEntity> = {\n data?: BuilderDefaultEntityListResult<TEntity>;\n isPending: boolean;\n isError?: boolean;\n};\n\nexport type BuilderDefaultEntityMutation<TInput> = {\n mutateAsync(input: TInput): Promise<unknown>;\n isPending?: boolean;\n};\n\nexport type BuilderDefaultEntityManagerState = {\n page: number;\n pageSize: number;\n search: string;\n};\n\nexport type BuilderDefaultEntityManagerDependencies<TEntity extends BuilderDefaultEntity, TQuery> = {\n labels: BuilderDefaultEntityManagerLabels<TEntity>;\n createHref?: string;\n editHref(entity: TEntity): string;\n runtimeHref?: (entity: TEntity) => string;\n getDetail?: (entity: TEntity) => string;\n buildQuery(state: BuilderDefaultEntityManagerState): TQuery;\n hooks: {\n useEntities(query: TQuery): BuilderDefaultEntityQueryResult<TEntity>;\n useDelete(): BuilderDefaultEntityMutation<string>;\n useReplicate(): BuilderDefaultEntityMutation<{ id: string; input: { title?: string } }>;\n };\n};\n\nconst styles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\" as const,\n },\n title: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n button: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n primaryButton: {\n border: \"1px solid var(--primary, #18181b)\",\n borderRadius: \"0.375rem\",\n background: \"var(--primary, #18181b)\",\n color: \"var(--primary-foreground, #fff)\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n card: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n overflow: \"hidden\",\n background: \"var(--background, #fff)\",\n },\n toolbar: {\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n },\n input: {\n width: \"100%\",\n maxWidth: \"24rem\",\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.75rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n },\n tableWrap: {\n overflowX: \"auto\" as const,\n },\n table: {\n width: \"100%\",\n borderCollapse: \"collapse\" as const,\n fontSize: \"0.875rem\",\n },\n th: {\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n textAlign: \"left\" as const,\n color: \"var(--muted-foreground, #64748b)\",\n fontWeight: 600,\n whiteSpace: \"nowrap\" as const,\n },\n td: {\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n verticalAlign: \"top\" as const,\n },\n actions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n gap: \"0.5rem\",\n flexWrap: \"wrap\" as const,\n },\n empty: {\n padding: \"2rem\",\n textAlign: \"center\" as const,\n color: \"var(--muted-foreground, #64748b)\",\n },\n};\n\nexport function createBuilderDefaultEntityManagerComponent<\n TEntity extends BuilderDefaultEntity,\n TQuery,\n>(deps: BuilderDefaultEntityManagerDependencies<TEntity, TQuery>) {\n return function BuilderDefaultEntityManager() {\n const [state, setState] = useState<BuilderDefaultEntityManagerState>({\n page: 1,\n pageSize: 20,\n search: \"\",\n });\n const query = deps.hooks.useEntities(useMemo(() => deps.buildQuery(state), [state]));\n const remove = deps.hooks.useDelete();\n const replicate = deps.hooks.useReplicate();\n const items = query.data?.items ?? [];\n\n const onReplicate = async (entity: TEntity) => {\n const title = window.prompt(\n deps.labels.replicatePrompt(entity),\n deps.labels.replicateDefaultTitle(entity),\n );\n if (!title) return;\n await replicate.mutateAsync({ id: entity.id, input: { title } });\n };\n\n const onDelete = async (entity: TEntity) => {\n if (!window.confirm(deps.labels.deleteConfirm(entity))) return;\n await remove.mutateAsync(entity.id);\n };\n\n return (\n <section style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{deps.labels.title}</h1>\n <p style={styles.description}>{deps.labels.description}</p>\n </div>\n {deps.createHref ? (\n <a href={deps.createHref} style={styles.primaryButton}>\n {deps.labels.addLabel}\n </a>\n ) : null}\n </div>\n\n <div style={styles.card}>\n <div style={styles.toolbar}>\n <input\n style={styles.input}\n placeholder={deps.labels.searchPlaceholder}\n value={state.search}\n onChange={(event) =>\n setState((current) => ({ ...current, page: 1, search: event.target.value }))\n }\n />\n </div>\n <div style={styles.tableWrap}>\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>{deps.labels.title}</th>\n <th style={styles.th}>Detail</th>\n <th style={styles.th}>Description</th>\n <th style={{ ...styles.th, textAlign: \"right\" }}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {items.map((entity) => (\n <tr key={entity.id}>\n <td style={styles.td}>\n <a href={deps.editHref(entity)}>{entity.title}</a>\n </td>\n <td style={styles.td}>{deps.getDetail?.(entity) ?? \"-\"}</td>\n <td style={styles.td}>{entity.description || \"-\"}</td>\n <td style={styles.td}>\n <div style={styles.actions}>\n {deps.runtimeHref ? (\n <a href={deps.runtimeHref(entity)} style={styles.button}>\n {deps.labels.runtimeLabel}\n </a>\n ) : null}\n <a href={deps.editHref(entity)} style={styles.button}>\n {deps.labels.editLabel}\n </a>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => void onReplicate(entity)}\n >\n {deps.labels.replicateLabel}\n </button>\n <button\n type=\"button\"\n style={styles.button}\n disabled={remove.isPending}\n onClick={() => void onDelete(entity)}\n >\n {deps.labels.deleteLabel}\n </button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {query.isPending ? <div style={styles.empty}>Loading...</div> : null}\n {query.isError ? <div style={styles.empty}>Failed to load.</div> : null}\n {!query.isPending && !query.isError && items.length === 0 ? (\n <div style={styles.empty}>\n <strong>{deps.labels.emptyTitle}</strong>\n <div>{deps.labels.emptyDescription}</div>\n </div>\n ) : null}\n </div>\n </section>\n );\n };\n}\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport {\n BUILDER_EDITOR_NONE_VALUE,\n type BuilderViewEditorEntity,\n type BuilderViewEditorValues,\n builderViewEditorInputFromValues,\n builderViewEditorValuesFromEntity,\n} from \"./editorState\";\n\ntype BuilderOptionEntity = {\n id: string;\n title: string;\n};\n\nexport type BuilderDefaultViewEditorContracts = BuilderApiContracts & {\n BuilderForm: BuilderOptionEntity;\n BuilderList: BuilderOptionEntity;\n BuilderView: BuilderViewEditorEntity & { id: string; title: string };\n};\n\nexport type BuilderDefaultViewEditorPageOptions<C extends BuilderDefaultViewEditorContracts> = {\n hooks: BuilderHooks<C>;\n backHref: string;\n editHref(id: string): string;\n permissionOptions: Array<{ value: string; label: string }>;\n defaultPermission?: string;\n parseTriggers(value: string): unknown[];\n notifySuccess?(message: string): void;\n notifyError?(error: unknown): void;\n};\n\nconst styles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\" as const,\n },\n title: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n actions: {\n display: \"flex\",\n gap: \"0.5rem\",\n flexWrap: \"wrap\" as const,\n },\n section: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n background: \"var(--background, #fff)\",\n overflow: \"hidden\",\n },\n grid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(14rem, 1fr))\",\n gap: \"0.75rem\",\n padding: \"0.75rem\",\n },\n field: {\n display: \"grid\",\n gap: \"0.25rem\",\n fontSize: \"0.875rem\",\n },\n label: {\n color: \"var(--muted-foreground, #64748b)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n },\n input: {\n minWidth: 0,\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n },\n textarea: {\n minWidth: 0,\n minHeight: \"8rem\",\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n resize: \"vertical\" as const,\n },\n button: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n primaryButton: {\n border: \"1px solid var(--primary, #18181b)\",\n borderRadius: \"0.375rem\",\n background: \"var(--primary, #18181b)\",\n color: \"var(--primary-foreground, #fff)\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n state: {\n color: \"var(--muted-foreground, #64748b)\",\n fontSize: \"0.875rem\",\n },\n};\n\nconst defaultEmptyValues: BuilderViewEditorValues = {\n title: \"\",\n description: \"\",\n formId: BUILDER_EDITOR_NONE_VALUE,\n listId: BUILDER_EDITOR_NONE_VALUE,\n permissionRead: \"\",\n permissionWrite: \"\",\n triggersText: \"[]\",\n version: 0,\n};\n\nexport function createBuilderDefaultViewEditorPage<C extends BuilderDefaultViewEditorContracts>(\n options: BuilderDefaultViewEditorPageOptions<C>,\n) {\n const defaultPermission = options.defaultPermission ?? \"\";\n const showPermissions = options.permissionOptions.length > 0;\n\n return function BuilderDefaultViewEditorPage({ viewId }: { viewId?: string }) {\n const view = options.hooks.useBuilderView(viewId);\n const forms = options.hooks.useBuilderFormOptions();\n const lists = options.hooks.useBuilderListOptions();\n const save = options.hooks.useSaveBuilderView();\n const form = useForm<BuilderViewEditorValues>({\n defaultValues: {\n ...defaultEmptyValues,\n permissionRead: defaultPermission,\n permissionWrite: defaultPermission,\n },\n });\n\n useEffect(() => {\n if (viewId && !view.data) return;\n form.reset(\n builderViewEditorValuesFromEntity(\n (view.data ?? null) as C[\"BuilderView\"] | null,\n {\n ...defaultEmptyValues,\n permissionRead: defaultPermission,\n permissionWrite: defaultPermission,\n },\n defaultPermission,\n ),\n );\n }, [form, view.data, viewId]);\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n const input = builderViewEditorInputFromValues(values, options.parseTriggers);\n const saved = await save.mutateAsync({\n id: viewId,\n input: input as C[\"UpdateBuilderViewInput\"],\n });\n options.notifySuccess?.(viewId ? \"View saved\" : \"View created\");\n if (!viewId) {\n window.location.assign(options.editHref(saved.id));\n }\n } catch (error) {\n if (options.notifyError) options.notifyError(error);\n else throw error;\n }\n });\n\n if (viewId && view.isPending) {\n return <div style={styles.state}>Loading...</div>;\n }\n\n if (viewId && view.isError) {\n return <div style={styles.state}>Failed to load view.</div>;\n }\n\n return (\n <form onSubmit={onSubmit} noValidate style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{viewId ? \"Edit Dynamic View\" : \"New Dynamic View\"}</h1>\n <p style={styles.description}>Connect a form and list into a runtime screen.</p>\n </div>\n <div style={styles.actions}>\n <a href={options.backHref} style={styles.button}>\n Cancel\n </a>\n <button type=\"submit\" disabled={save.isPending} style={styles.primaryButton}>\n {save.isPending ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n\n <section style={styles.section}>\n <div style={styles.grid}>\n <label style={styles.field}>\n <span style={styles.label}>Title</span>\n <input style={styles.input} {...form.register(\"title\", { required: true })} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Description</span>\n <input style={styles.input} {...form.register(\"description\")} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Form</span>\n <select style={styles.input} {...form.register(\"formId\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>No form</option>\n {(forms.data ?? []).map((item) => (\n <option key={item.id} value={item.id}>\n {item.title}\n </option>\n ))}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>List</span>\n <select style={styles.input} {...form.register(\"listId\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>No list</option>\n {(lists.data ?? []).map((item) => (\n <option key={item.id} value={item.id}>\n {item.title}\n </option>\n ))}\n </select>\n </label>\n {showPermissions ? (\n <>\n <label style={styles.field}>\n <span style={styles.label}>Read permission</span>\n <select style={styles.input} {...form.register(\"permissionRead\")}>\n <option value=\"\">Authenticated users</option>\n {options.permissionOptions.map((permission) => (\n <option key={permission.value} value={permission.value}>\n {permission.label}\n </option>\n ))}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Write permission</span>\n <select style={styles.input} {...form.register(\"permissionWrite\")}>\n <option value=\"\">Authenticated users</option>\n {options.permissionOptions.map((permission) => (\n <option key={permission.value} value={permission.value}>\n {permission.label}\n </option>\n ))}\n </select>\n </label>\n </>\n ) : null}\n <label style={{ ...styles.field, gridColumn: \"1 / -1\" }}>\n <span style={styles.label}>Triggers JSON</span>\n <textarea style={styles.textarea} {...form.register(\"triggersText\")} />\n </label>\n </div>\n </section>\n </form>\n );\n };\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport {\n FormProvider,\n type Resolver,\n type UseFieldArrayReturn,\n type UseFormReturn,\n useFieldArray,\n useForm,\n useWatch,\n} from \"react-hook-form\";\nimport {\n type BuilderEditorDbTable,\n type BuilderEditorTriggerValues,\n type BuilderFormEditorEntity,\n type BuilderFormEditorFieldValues,\n type BuilderFormEditorSubformValues,\n type BuilderFormEditorValues,\n type BuilderListEditorColumnValues,\n type BuilderListEditorEntity,\n type BuilderListEditorValues,\n builderFormEditorDefaultLayoutGroups,\n builderFormEditorFieldsFromTable,\n builderFormEditorValuesFromEntity,\n builderListEditorColumnsFromTable,\n builderListEditorValuesFromEntity,\n} from \"./editorState\";\n\ntype BuilderEditorEntity = {\n id: string;\n};\n\ntype BuilderEditorQuery<TEntity> = {\n data?: TEntity;\n isPending: boolean;\n isError: boolean;\n};\n\ntype BuilderEditorListQuery<TItem> = {\n data?: TItem[];\n};\n\ntype BuilderEditorSaveMutation<TInput, TEntity> = {\n mutateAsync(args: { id?: string; input: TInput }): Promise<TEntity>;\n isPending: boolean;\n};\n\ntype BuilderEditorNotifications = {\n success(message: string): void;\n error(error: unknown): void;\n};\n\ntype BuilderEditorLabels = {\n created: string;\n saved: string;\n};\n\ntype BuilderEditorStateLabels = {\n loading: string;\n error: string;\n};\n\nexport type BuilderFormEditorBodyProps<TFieldType extends string, TTriggerEvent extends string> = {\n formId?: string;\n form: UseFormReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>>;\n fieldArray: UseFieldArrayReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>, \"fields\">;\n subformArray: UseFieldArrayReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>, \"subforms\">;\n triggerArray: UseFieldArrayReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>, \"triggers\">;\n fields: BuilderFormEditorFieldValues<TFieldType>[];\n subforms: BuilderFormEditorSubformValues[];\n sourceType: BuilderFormEditorValues<TFieldType, TTriggerEvent>[\"sourceType\"];\n sourceTable: string;\n tables: BuilderEditorDbTable<TFieldType>[];\n emptyField: BuilderFormEditorFieldValues<TFieldType>;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n isSaving: boolean;\n importFieldsFromTable(): void;\n};\n\nexport type BuilderListEditorBodyProps<TTriggerEvent extends string> = {\n listId?: string;\n form: UseFormReturn<BuilderListEditorValues<TTriggerEvent>>;\n columnArray: UseFieldArrayReturn<BuilderListEditorValues<TTriggerEvent>, \"columns\">;\n triggerArray: UseFieldArrayReturn<BuilderListEditorValues<TTriggerEvent>, \"triggers\">;\n sourceType: BuilderListEditorValues<TTriggerEvent>[\"sourceType\"];\n sourceTable: string;\n tables: BuilderEditorDbTable[];\n emptyColumn: BuilderListEditorColumnValues;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n isSaving: boolean;\n importColumnsFromTable(): void;\n};\n\nexport type BuilderFormEditorPageDependencies<\n TEntity extends BuilderEditorEntity & BuilderFormEditorEntity<TFieldType, TTriggerEvent>,\n TInput,\n TFieldType extends string,\n TTriggerEvent extends string,\n> = {\n emptyValues: BuilderFormEditorValues<TFieldType, TTriggerEvent>;\n emptyField: BuilderFormEditorFieldValues<TFieldType>;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n resolver?: Resolver<BuilderFormEditorValues<TFieldType, TTriggerEvent>>;\n labels: BuilderEditorLabels;\n states: BuilderEditorStateLabels;\n hooks: {\n useEntity(id?: string): BuilderEditorQuery<TEntity>;\n useTables(): BuilderEditorListQuery<BuilderEditorDbTable<TFieldType>>;\n useSave(): BuilderEditorSaveMutation<TInput, TEntity>;\n };\n buildInput(values: BuilderFormEditorValues<TFieldType, TTriggerEvent>): TInput;\n navigateAfterCreate(entity: TEntity): void;\n notifications: BuilderEditorNotifications;\n Body(props: BuilderFormEditorBodyProps<TFieldType, TTriggerEvent>): ReactNode;\n};\n\nexport type BuilderListEditorPageDependencies<\n TEntity extends BuilderEditorEntity & BuilderListEditorEntity<TTriggerEvent>,\n TInput,\n TTriggerEvent extends string,\n> = {\n emptyValues: BuilderListEditorValues<TTriggerEvent>;\n emptyColumn: BuilderListEditorColumnValues;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n resolver?: Resolver<BuilderListEditorValues<TTriggerEvent>>;\n labels: BuilderEditorLabels;\n states: BuilderEditorStateLabels;\n hooks: {\n useEntity(id?: string): BuilderEditorQuery<TEntity>;\n useTables(): BuilderEditorListQuery<BuilderEditorDbTable>;\n useSave(): BuilderEditorSaveMutation<TInput, TEntity>;\n };\n buildInput(values: BuilderListEditorValues<TTriggerEvent>): TInput;\n navigateAfterCreate(entity: TEntity): void;\n notifications: BuilderEditorNotifications;\n Body(props: BuilderListEditorBodyProps<TTriggerEvent>): ReactNode;\n};\n\nexport function createBuilderFormEditorPageComponent<\n TEntity extends BuilderEditorEntity & BuilderFormEditorEntity<TFieldType, TTriggerEvent>,\n TInput,\n TFieldType extends string,\n TTriggerEvent extends string,\n>(deps: BuilderFormEditorPageDependencies<TEntity, TInput, TFieldType, TTriggerEvent>) {\n return function BuilderFormEditorPage({ formId }: { formId?: string }) {\n const Body = deps.Body;\n const entityQuery = deps.hooks.useEntity(formId);\n const tables = deps.hooks.useTables();\n const save = deps.hooks.useSave();\n const form = useForm<BuilderFormEditorValues<TFieldType, TTriggerEvent>>({\n resolver: deps.resolver,\n defaultValues: deps.emptyValues,\n });\n const fieldArray = useFieldArray({ control: form.control, name: \"fields\" });\n const subformArray = useFieldArray({ control: form.control, name: \"subforms\" });\n const triggerArray = useFieldArray({ control: form.control, name: \"triggers\" });\n const fields = useWatch({ control: form.control, name: \"fields\" }) ?? [];\n const subforms = useWatch({ control: form.control, name: \"subforms\" }) ?? [];\n const sourceType = useWatch({ control: form.control, name: \"sourceType\" });\n const sourceTable = useWatch({ control: form.control, name: \"sourceTable\" });\n\n useEffect(() => {\n if (formId && !entityQuery.data) return;\n form.reset(builderFormEditorValuesFromEntity(entityQuery.data ?? null, deps.emptyValues));\n }, [entityQuery.data, form, formId]);\n\n const importFieldsFromTable = () => {\n const table = tables.data?.find((item) => item.name === sourceTable);\n if (!table) return;\n const nextFields = builderFormEditorFieldsFromTable(table);\n fieldArray.replace(nextFields);\n form.setValue(\"layoutGroups\", builderFormEditorDefaultLayoutGroups(nextFields), {\n shouldDirty: true,\n });\n };\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n const saved = await save.mutateAsync({ id: formId, input: deps.buildInput(values) });\n deps.notifications.success(formId ? deps.labels.saved : deps.labels.created);\n if (!formId) deps.navigateAfterCreate(saved);\n } catch (error) {\n deps.notifications.error(error);\n }\n });\n\n if (formId && entityQuery.isPending) {\n return <div className=\"text-muted-foreground text-sm\">{deps.states.loading}</div>;\n }\n\n if (formId && entityQuery.isError) {\n return <div className=\"text-destructive text-sm\">{deps.states.error}</div>;\n }\n\n return (\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className=\"space-y-6\">\n <Body\n formId={formId}\n form={form}\n fieldArray={fieldArray}\n subformArray={subformArray}\n triggerArray={triggerArray}\n fields={fields}\n subforms={subforms}\n sourceType={sourceType}\n sourceTable={sourceTable}\n tables={tables.data ?? []}\n emptyField={deps.emptyField}\n emptyTrigger={deps.emptyTrigger}\n isSaving={save.isPending}\n importFieldsFromTable={importFieldsFromTable}\n />\n </form>\n </FormProvider>\n );\n };\n}\n\nexport function createBuilderListEditorPageComponent<\n TEntity extends BuilderEditorEntity & BuilderListEditorEntity<TTriggerEvent>,\n TInput,\n TTriggerEvent extends string,\n>(deps: BuilderListEditorPageDependencies<TEntity, TInput, TTriggerEvent>) {\n return function BuilderListEditorPage({ listId }: { listId?: string }) {\n const Body = deps.Body;\n const entityQuery = deps.hooks.useEntity(listId);\n const tables = deps.hooks.useTables();\n const save = deps.hooks.useSave();\n const form = useForm<BuilderListEditorValues<TTriggerEvent>>({\n resolver: deps.resolver,\n defaultValues: deps.emptyValues,\n });\n const columnArray = useFieldArray({ control: form.control, name: \"columns\" });\n const triggerArray = useFieldArray({ control: form.control, name: \"triggers\" });\n const sourceType = useWatch({ control: form.control, name: \"sourceType\" });\n const sourceTable = useWatch({ control: form.control, name: \"sourceTable\" });\n\n useEffect(() => {\n if (listId && !entityQuery.data) return;\n form.reset(builderListEditorValuesFromEntity(entityQuery.data ?? null, deps.emptyValues));\n }, [entityQuery.data, form, listId]);\n\n const importColumnsFromTable = () => {\n const table = tables.data?.find((item) => item.name === sourceTable);\n if (!table) return;\n columnArray.replace(builderListEditorColumnsFromTable(table));\n };\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n const saved = await save.mutateAsync({ id: listId, input: deps.buildInput(values) });\n deps.notifications.success(listId ? deps.labels.saved : deps.labels.created);\n if (!listId) deps.navigateAfterCreate(saved);\n } catch (error) {\n deps.notifications.error(error);\n }\n });\n\n if (listId && entityQuery.isPending) {\n return <div className=\"text-muted-foreground text-sm\">{deps.states.loading}</div>;\n }\n\n if (listId && entityQuery.isError) {\n return <div className=\"text-destructive text-sm\">{deps.states.error}</div>;\n }\n\n return (\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className=\"space-y-6\">\n <Body\n listId={listId}\n form={form}\n columnArray={columnArray}\n triggerArray={triggerArray}\n sourceType={sourceType}\n sourceTable={sourceTable}\n tables={tables.data ?? []}\n emptyColumn={deps.emptyColumn}\n emptyTrigger={deps.emptyTrigger}\n isSaving={save.isPending}\n importColumnsFromTable={importColumnsFromTable}\n />\n </form>\n </FormProvider>\n );\n };\n}\n","\"use client\";\n\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport {\n createBuilderDefaultFormEditorBody,\n createBuilderDefaultListEditorBody,\n type BuilderDefaultOption,\n} from \"./BuilderDefaultEditorBodies\";\nimport {\n type BuilderDefaultEntity,\n type BuilderDefaultEntityQueryResult,\n type BuilderDefaultEntityManagerState,\n createBuilderDefaultEntityManagerComponent,\n} from \"./BuilderDefaultEntityManager\";\nimport { createBuilderDefaultViewEditorPage } from \"./BuilderDefaultViewEditorPage\";\nimport {\n createBuilderFormEditorPageComponent,\n createBuilderListEditorPageComponent,\n} from \"./BuilderEditorPage\";\nimport {\n BUILDER_EDITOR_NONE_VALUE,\n type BuilderEditorDbTable,\n type BuilderEditorTriggerValues,\n type BuilderFormEditorEntity,\n type BuilderFormEditorFieldValues,\n type BuilderFormEditorValues,\n type BuilderListEditorColumnValues,\n type BuilderListEditorEntity,\n type BuilderListEditorValues,\n type BuilderViewEditorEntity,\n builderFormEditorDefaultLayoutGroups,\n builderFormEditorInputFromValues,\n builderListEditorInputFromValues,\n} from \"./editorState\";\n\ntype BuilderAdminEntity = BuilderDefaultEntity & {\n key?: string;\n};\n\ntype BuilderAdminListResponse<TEntity extends BuilderAdminEntity> = {\n items: TEntity[];\n total: number;\n};\n\ntype BuilderAdminListQuery = {\n page?: number;\n pageSize?: number;\n search?: string;\n};\n\nexport type BuilderAdminPageContracts = BuilderApiContracts & {\n BuilderDbTable: BuilderEditorDbTable<string>;\n BuilderForm: BuilderAdminEntity & BuilderFormEditorEntity<string, string>;\n BuilderList: BuilderAdminEntity & BuilderListEditorEntity<string>;\n BuilderView: BuilderAdminEntity & BuilderViewEditorEntity<unknown>;\n ListBuilderFormsQuery: BuilderAdminListQuery;\n ListBuilderListsQuery: BuilderAdminListQuery;\n ListBuilderViewsQuery: BuilderAdminListQuery;\n ListBuilderFormsResponse: BuilderAdminListResponse<BuilderAdminEntity>;\n ListBuilderListsResponse: BuilderAdminListResponse<BuilderAdminEntity>;\n ListBuilderViewsResponse: BuilderAdminListResponse<BuilderAdminEntity>;\n};\n\nexport type BuilderAdminPagesRoutes = {\n adminBasePath?: string;\n runtimeBasePath?: string;\n formsPath?: string;\n newFormPath?: string;\n editFormPath?: (id: string) => string;\n runtimeFormPath?: (id: string) => string;\n listsPath?: string;\n newListPath?: string;\n editListPath?: (id: string) => string;\n runtimeListPath?: (id: string) => string;\n viewsPath?: string;\n newViewPath?: string;\n editViewPath?: (id: string) => string;\n runtimeViewPath?: (id: string) => string;\n};\n\nexport type BuilderAdminPagesOptions<C extends BuilderAdminPageContracts> = {\n hooks: BuilderHooks<C>;\n routes?: BuilderAdminPagesRoutes;\n fieldTypeOptions?: BuilderDefaultOption[];\n formTriggerEventOptions?: BuilderDefaultOption[];\n listTriggerEventOptions?: BuilderDefaultOption[];\n fieldTriggerEventOptions?: BuilderDefaultOption[];\n permissionOptions?: BuilderDefaultOption[];\n defaultPermission?: string;\n notifySuccess?(message: string): void;\n notifyError?(error: unknown): void;\n parseViewTriggers?(value: string): unknown[];\n};\n\nconst defaultFieldTypeOptions: BuilderDefaultOption[] = [\n { value: \"text\", label: \"Text\" },\n { value: \"textarea\", label: \"Textarea\" },\n { value: \"number\", label: \"Number\" },\n { value: \"money\", label: \"Money\" },\n { value: \"select\", label: \"Select\" },\n { value: \"checkbox\", label: \"Checkbox\" },\n { value: \"date\", label: \"Date\" },\n];\n\nconst defaultFormTriggerEventOptions: BuilderDefaultOption[] = [\n { value: \"beforeCreate\", label: \"Before create\" },\n { value: \"afterCreate\", label: \"After create\" },\n { value: \"beforeUpdate\", label: \"Before update\" },\n { value: \"afterUpdate\", label: \"After update\" },\n];\n\nconst defaultListTriggerEventOptions: BuilderDefaultOption[] = [\n { value: \"beforeRead\", label: \"Before read\" },\n { value: \"afterRead\", label: \"After read\" },\n { value: \"beforeDelete\", label: \"Before delete\" },\n { value: \"afterDelete\", label: \"After delete\" },\n];\n\nconst defaultFieldTriggerEventOptions: BuilderDefaultOption[] = [\n { value: \"onChange\", label: \"On change\" },\n { value: \"onBlur\", label: \"On blur\" },\n];\n\nconst defaultPermissionOptions: BuilderDefaultOption[] = [];\n\nfunction parseJsonArray(value: string): unknown[] {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed : [];\n}\n\nfunction joinPath(base: string, path: string) {\n return `${base.replace(/\\/$/, \"\")}/${path.replace(/^\\//, \"\")}`;\n}\n\nfunction defaultQuery(state: BuilderDefaultEntityManagerState): BuilderAdminListQuery {\n return {\n page: state.page,\n pageSize: state.pageSize,\n search: state.search || undefined,\n };\n}\n\nfunction detail(entity: BuilderAdminEntity) {\n return entity.key ?? entity.id;\n}\n\nconst homeStyles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n headerTitle: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n grid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(13rem, 1fr))\",\n gap: \"0.75rem\",\n },\n card: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n padding: \"1rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n textDecoration: \"none\",\n },\n cardTitle: {\n margin: 0,\n fontSize: \"1rem\",\n fontWeight: 650,\n },\n};\n\nexport function createBuilderAdminPages<C extends BuilderAdminPageContracts>({\n hooks,\n routes = {},\n fieldTypeOptions = defaultFieldTypeOptions,\n formTriggerEventOptions = defaultFormTriggerEventOptions,\n listTriggerEventOptions = defaultListTriggerEventOptions,\n fieldTriggerEventOptions = defaultFieldTriggerEventOptions,\n permissionOptions = defaultPermissionOptions,\n defaultPermission = \"\",\n notifySuccess,\n notifyError,\n parseViewTriggers = parseJsonArray,\n}: BuilderAdminPagesOptions<C>) {\n const adminBasePath = routes.adminBasePath ?? \"/admin/dev/builder\";\n const runtimeBasePath = routes.runtimeBasePath ?? \"/admin/winu\";\n\n const formsPath = routes.formsPath ?? joinPath(adminBasePath, \"forms\");\n const newFormPath = routes.newFormPath ?? joinPath(formsPath, \"new\");\n const editFormPath =\n routes.editFormPath ?? ((id: string) => `${joinPath(formsPath, \"edit\")}?id=${encodeURIComponent(id)}`);\n const runtimeFormPath =\n routes.runtimeFormPath ??\n ((id: string) => `${joinPath(runtimeBasePath, \"form\")}?id=${encodeURIComponent(id)}`);\n\n const listsPath = routes.listsPath ?? joinPath(adminBasePath, \"lists\");\n const newListPath = routes.newListPath ?? joinPath(listsPath, \"new\");\n const editListPath =\n routes.editListPath ?? ((id: string) => `${joinPath(listsPath, \"edit\")}?id=${encodeURIComponent(id)}`);\n const runtimeListPath =\n routes.runtimeListPath ??\n ((id: string) => `${joinPath(runtimeBasePath, \"list\")}?id=${encodeURIComponent(id)}`);\n\n const viewsPath = routes.viewsPath ?? joinPath(adminBasePath, \"views\");\n const newViewPath = routes.newViewPath ?? joinPath(viewsPath, \"new\");\n const editViewPath =\n routes.editViewPath ?? ((id: string) => `${joinPath(viewsPath, \"edit\")}?id=${encodeURIComponent(id)}`);\n const runtimeViewPath =\n routes.runtimeViewPath ??\n ((id: string) => `${joinPath(runtimeBasePath, \"view\")}?id=${encodeURIComponent(id)}`);\n\n const formFieldType = (fieldTypeOptions[0]?.value ?? \"text\") as string;\n const formTriggerEvent = (formTriggerEventOptions[0]?.value ?? \"beforeCreate\") as string;\n const listTriggerEvent = (listTriggerEventOptions[0]?.value ?? \"beforeRead\") as string;\n\n const emptyField: BuilderFormEditorFieldValues<string> = {\n key: \"name\",\n label: \"Name\",\n type: formFieldType,\n required: true,\n hidden: false,\n disabled: false,\n placeholder: \"\",\n optionsText: \"\",\n optionsMode: \"static\",\n optionsTable: BUILDER_EDITOR_NONE_VALUE,\n optionsValueField: BUILDER_EDITOR_NONE_VALUE,\n optionsLabelField: BUILDER_EDITOR_NONE_VALUE,\n optionsSearchFieldsText: \"\",\n optionsDependsOn: \"\",\n optionsFilterField: \"\",\n triggers: [],\n };\n\n const emptyFormValues: BuilderFormEditorValues<string, string> = {\n title: \"\",\n description: \"\",\n presentation: \"dialog\",\n sourceType: \"none\",\n sourceTable: BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: \"\",\n fields: [emptyField],\n layoutGroups: builderFormEditorDefaultLayoutGroups([emptyField]),\n subforms: [],\n triggers: [],\n version: 0,\n };\n\n const emptyFormTrigger: BuilderEditorTriggerValues<string> = {\n event: formTriggerEvent,\n route: \"/api/v1/\",\n enabled: false,\n blocking: true,\n };\n\n const emptyColumn: BuilderListEditorColumnValues = {\n key: \"name\",\n label: \"Name\",\n sortable: true,\n align: \"left\",\n };\n\n const emptyListValues: BuilderListEditorValues<string> = {\n title: \"\",\n description: \"\",\n sourceType: \"none\",\n sourceTable: BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: \"\",\n columns: [emptyColumn],\n triggers: [],\n version: 0,\n };\n\n const emptyListTrigger: BuilderEditorTriggerValues<string> = {\n event: listTriggerEvent,\n route: \"/api/v1/\",\n enabled: false,\n blocking: true,\n };\n\n const FormEditorPage = createBuilderFormEditorPageComponent<\n C[\"BuilderForm\"],\n C[\"UpdateBuilderFormInput\"],\n string,\n string\n >({\n emptyValues: emptyFormValues,\n emptyField,\n emptyTrigger: emptyFormTrigger,\n labels: {\n created: \"Form created\",\n saved: \"Form saved\",\n },\n states: {\n loading: \"Loading...\",\n error: \"Failed to load form.\",\n },\n hooks: {\n useEntity: hooks.useBuilderForm,\n useTables: hooks.useBuilderDbTables,\n useSave: hooks.useSaveBuilderForm,\n },\n buildInput: (values) => builderFormEditorInputFromValues(values) as C[\"UpdateBuilderFormInput\"],\n navigateAfterCreate: (entity) => window.location.assign(editFormPath(entity.id)),\n notifications: {\n success: (message) => notifySuccess?.(message),\n error: (error) => {\n if (notifyError) notifyError(error);\n else throw error;\n },\n },\n Body: createBuilderDefaultFormEditorBody({\n backHref: formsPath,\n fieldTypeOptions,\n formTriggerEventOptions,\n fieldTriggerEventOptions,\n }),\n });\n\n const ListEditorPage = createBuilderListEditorPageComponent<\n C[\"BuilderList\"],\n C[\"UpdateBuilderListInput\"],\n string\n >({\n emptyValues: emptyListValues,\n emptyColumn,\n emptyTrigger: emptyListTrigger,\n labels: {\n created: \"List created\",\n saved: \"List saved\",\n },\n states: {\n loading: \"Loading...\",\n error: \"Failed to load list.\",\n },\n hooks: {\n useEntity: hooks.useBuilderList,\n useTables: hooks.useBuilderDbTables,\n useSave: hooks.useSaveBuilderList,\n },\n buildInput: (values) => builderListEditorInputFromValues(values) as C[\"UpdateBuilderListInput\"],\n navigateAfterCreate: (entity) => window.location.assign(editListPath(entity.id)),\n notifications: {\n success: (message) => notifySuccess?.(message),\n error: (error) => {\n if (notifyError) notifyError(error);\n else throw error;\n },\n },\n Body: createBuilderDefaultListEditorBody({\n backHref: listsPath,\n listTriggerEventOptions,\n }),\n });\n\n const ViewEditorPage = createBuilderDefaultViewEditorPage<C>({\n hooks,\n backHref: viewsPath,\n editHref: editViewPath,\n permissionOptions,\n defaultPermission,\n parseTriggers: parseViewTriggers,\n notifySuccess,\n notifyError,\n });\n\n const AdminHomePage = function BuilderAdminHomePage() {\n const items = [\n {\n title: \"Dynamic Forms\",\n description: \"Reusable form schemas.\",\n href: formsPath,\n },\n {\n title: \"Dynamic Lists\",\n description: \"Reusable list and grid schemas.\",\n href: listsPath,\n },\n {\n title: \"Dynamic Views\",\n description: \"Runtime screens composed from form and list schemas.\",\n href: viewsPath,\n },\n ];\n\n return (\n <section style={homeStyles.page}>\n <div>\n <h1 style={homeStyles.headerTitle}>Builder</h1>\n <p style={homeStyles.description}>Manage dynamic forms, lists, and views.</p>\n </div>\n <div style={homeStyles.grid}>\n {items.map((item) => (\n <a key={item.href} href={item.href} style={homeStyles.card}>\n <h2 style={homeStyles.cardTitle}>{item.title}</h2>\n <p style={homeStyles.description}>{item.description}</p>\n </a>\n ))}\n </div>\n </section>\n );\n };\n\n const AdminFormsPage = createBuilderDefaultEntityManagerComponent<\n C[\"BuilderForm\"] & BuilderAdminEntity,\n C[\"ListBuilderFormsQuery\"]\n >({\n labels: {\n title: \"Dynamic Forms\",\n description: \"Reusable form schemas.\",\n searchPlaceholder: \"Search forms...\",\n emptyTitle: \"No forms\",\n emptyDescription: \"Create your first dynamic form.\",\n addLabel: \"Add form\",\n editLabel: \"Edit\",\n replicateLabel: \"Replicate\",\n deleteLabel: \"Delete\",\n runtimeLabel: \"Open\",\n deleteConfirm: (entity) => `Delete ${entity.title}?`,\n replicatePrompt: () => \"New form title\",\n replicateDefaultTitle: (entity) => `${entity.title} copy`,\n },\n createHref: newFormPath,\n editHref: (entity) => editFormPath(entity.id),\n runtimeHref: (entity) => runtimeFormPath(entity.id),\n getDetail: detail,\n buildQuery: (state) => defaultQuery(state) as C[\"ListBuilderFormsQuery\"],\n hooks: {\n useEntities: (query) =>\n hooks.useBuilderForms(query) as unknown as BuilderDefaultEntityQueryResult<\n C[\"BuilderForm\"] & BuilderAdminEntity\n >,\n useDelete: hooks.useDeleteBuilderForm,\n useReplicate: hooks.useReplicateBuilderForm,\n },\n });\n\n const AdminListsPage = createBuilderDefaultEntityManagerComponent<\n C[\"BuilderList\"] & BuilderAdminEntity,\n C[\"ListBuilderListsQuery\"]\n >({\n labels: {\n title: \"Dynamic Lists\",\n description: \"Reusable list and grid schemas.\",\n searchPlaceholder: \"Search lists...\",\n emptyTitle: \"No lists\",\n emptyDescription: \"Create your first dynamic list.\",\n addLabel: \"Add list\",\n editLabel: \"Edit\",\n replicateLabel: \"Replicate\",\n deleteLabel: \"Delete\",\n runtimeLabel: \"Open\",\n deleteConfirm: (entity) => `Delete ${entity.title}?`,\n replicatePrompt: () => \"New list title\",\n replicateDefaultTitle: (entity) => `${entity.title} copy`,\n },\n createHref: newListPath,\n editHref: (entity) => editListPath(entity.id),\n runtimeHref: (entity) => runtimeListPath(entity.id),\n getDetail: detail,\n buildQuery: (state) => defaultQuery(state) as C[\"ListBuilderListsQuery\"],\n hooks: {\n useEntities: (query) =>\n hooks.useBuilderLists(query) as unknown as BuilderDefaultEntityQueryResult<\n C[\"BuilderList\"] & BuilderAdminEntity\n >,\n useDelete: hooks.useDeleteBuilderList,\n useReplicate: hooks.useReplicateBuilderList,\n },\n });\n\n const AdminViewsPage = createBuilderDefaultEntityManagerComponent<\n C[\"BuilderView\"] & BuilderAdminEntity,\n C[\"ListBuilderViewsQuery\"]\n >({\n labels: {\n title: \"Dynamic Views\",\n description: \"Runtime screens composed from form and list schemas.\",\n searchPlaceholder: \"Search views...\",\n emptyTitle: \"No views\",\n emptyDescription: \"Create a dynamic view after preparing a form and list.\",\n addLabel: \"Add view\",\n editLabel: \"Edit\",\n replicateLabel: \"Replicate\",\n deleteLabel: \"Delete\",\n runtimeLabel: \"Open\",\n deleteConfirm: (entity) => `Delete ${entity.title}?`,\n replicatePrompt: () => \"New view title\",\n replicateDefaultTitle: (entity) => `${entity.title} copy`,\n },\n createHref: newViewPath,\n editHref: (entity) => editViewPath(entity.id),\n runtimeHref: (entity) => runtimeViewPath(entity.id),\n getDetail: detail,\n buildQuery: (state) => defaultQuery(state) as C[\"ListBuilderViewsQuery\"],\n hooks: {\n useEntities: (query) =>\n hooks.useBuilderViews(query) as unknown as BuilderDefaultEntityQueryResult<\n C[\"BuilderView\"] & BuilderAdminEntity\n >,\n useDelete: hooks.useDeleteBuilderView,\n useReplicate: hooks.useReplicateBuilderView,\n },\n });\n\n return {\n AdminHomePage,\n AdminFormsPage,\n AdminNewFormPage: function BuilderAdminNewFormPage() {\n return <FormEditorPage />;\n },\n AdminEditFormPage: function BuilderAdminEditFormPage({ formId }: { formId?: string }) {\n return <FormEditorPage formId={formId} />;\n },\n AdminListsPage,\n AdminNewListPage: function BuilderAdminNewListPage() {\n return <ListEditorPage />;\n },\n AdminEditListPage: function BuilderAdminEditListPage({ listId }: { listId?: string }) {\n return <ListEditorPage listId={listId} />;\n },\n AdminViewsPage,\n AdminNewViewPage: function BuilderAdminNewViewPage() {\n return <ViewEditorPage />;\n },\n AdminEditViewPage: function BuilderAdminEditViewPage({ viewId }: { viewId?: string }) {\n return <ViewEditorPage viewId={viewId} />;\n },\n routes: {\n adminBasePath,\n formsPath,\n newFormPath,\n editFormPath,\n listsPath,\n newListPath,\n editListPath,\n viewsPath,\n newViewPath,\n editViewPath,\n },\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport type BuilderEntityManagerEntity = {\n id: string;\n title: string;\n};\n\nexport type BuilderEntityManagerActions<TEntity extends BuilderEntityManagerEntity> = {\n onEdit(entity: TEntity): void;\n onReplicate(entity: TEntity): void | Promise<void>;\n onDelete(entity: TEntity): void;\n runtimeHref?: (entity: TEntity) => string;\n};\n\nexport type BuilderEntityManagerDataGridProps<TController, TEntity> = {\n title: string;\n description: string;\n controller: TController;\n isLoading?: boolean;\n searchPlaceholder: string;\n emptyTitle: string;\n emptyDescription: string;\n onRowClick(entity: TEntity): void;\n toolbarExtra: ReactNode;\n};\n\nexport type BuilderEntityManagerAddButtonProps = {\n href: string;\n label: string;\n};\n\nexport type BuilderEntityManagerDialogAddButtonProps = {\n label: string;\n onAdd(): void;\n};\n\nexport type BuilderEntityManagerDeleteDialogProps<TEntity> = {\n entity: TEntity | null;\n title: string;\n description: string;\n isDeleting: boolean;\n onClose(): void;\n onConfirm(): Promise<void>;\n};\n\nexport type BuilderEntityManagerEditorDialogProps<TEntity> = {\n open: boolean;\n editing: TEntity | null;\n onClose(): void;\n};\n\nexport type BuilderEntityManagerHookResult<TEntity> = {\n data?: {\n items: TEntity[];\n total: number;\n };\n isPending: boolean;\n};\n\nexport type BuilderEntityManagerMutation<TInput> = {\n mutateAsync(input: TInput): Promise<unknown>;\n isPending: boolean;\n};\n\nexport type BuilderEntityManagerLabels = {\n title: string;\n description: string;\n searchPlaceholder: string;\n emptyTitle: string;\n emptyDescription: string;\n addLabel: string;\n deleteTitle: string;\n deleteDescription(entity: BuilderEntityManagerEntity | null): string;\n};\n\nexport type BuilderEntityManagerDependencies<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n> = {\n labels: BuilderEntityManagerLabels;\n createHref: string;\n runtimeHref(entity: TEntity): string;\n navigateToEdit(entity: TEntity): void;\n requestReplicateTitle(entity: TEntity): string | null | Promise<string | null>;\n hooks: {\n useEntities(query: TQuery): BuilderEntityManagerHookResult<TEntity>;\n useDelete(): BuilderEntityManagerMutation<string>;\n useReplicate(): BuilderEntityManagerMutation<{ id: string; input: { title?: string } }>;\n };\n buildColumns(actions: BuilderEntityManagerActions<TEntity>): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: TEntity[];\n rowCount: number;\n state: TState;\n getRowId(row: TEntity): string;\n }): TController;\n DataGrid: ComponentType<BuilderEntityManagerDataGridProps<TController, TEntity>>;\n AddButton: ComponentType<BuilderEntityManagerAddButtonProps>;\n DeleteDialog: ComponentType<BuilderEntityManagerDeleteDialogProps<TEntity>>;\n};\n\nexport type BuilderEntityDialogManagerDependencies<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n> = {\n labels: BuilderEntityManagerLabels;\n runtimeHref(entity: TEntity): string;\n requestReplicateTitle(entity: TEntity): string | null | Promise<string | null>;\n hooks: {\n useEntities(query: TQuery): BuilderEntityManagerHookResult<TEntity>;\n useDelete(): BuilderEntityManagerMutation<string>;\n useReplicate(): BuilderEntityManagerMutation<{ id: string; input: { title?: string } }>;\n };\n buildColumns(actions: BuilderEntityManagerActions<TEntity>): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: TEntity[];\n rowCount: number;\n state: TState;\n getRowId(row: TEntity): string;\n }): TController;\n DataGrid: ComponentType<BuilderEntityManagerDataGridProps<TController, TEntity>>;\n AddButton: ComponentType<BuilderEntityManagerDialogAddButtonProps>;\n EditorDialog: ComponentType<BuilderEntityManagerEditorDialogProps<TEntity>>;\n DeleteDialog: ComponentType<BuilderEntityManagerDeleteDialogProps<TEntity>>;\n};\n\nexport function createBuilderEntityManagerComponent<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n>(deps: BuilderEntityManagerDependencies<TEntity, TColumn, TState, TQuery, TController>) {\n return function BuilderEntityManager() {\n const [pendingDelete, setPendingDelete] = useState<TEntity | null>(null);\n const state = deps.useDataTableState({ pageSize: 20 });\n const query = deps.hooks.useEntities(state.query);\n const remove = deps.hooks.useDelete();\n const replicate = deps.hooks.useReplicate();\n\n const columns = useMemo(\n () =>\n deps.buildColumns({\n onEdit: deps.navigateToEdit,\n onReplicate: async (entity) => {\n const title = await deps.requestReplicateTitle(entity);\n if (!title) return;\n await replicate.mutateAsync({ id: entity.id, input: { title } });\n },\n onDelete: setPendingDelete,\n runtimeHref: deps.runtimeHref,\n }),\n [replicate],\n );\n\n const controller = deps.useDataTable({\n columns,\n data: query.data?.items ?? [],\n rowCount: query.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n return (\n <div className=\"space-y-6\">\n <deps.DataGrid\n title={deps.labels.title}\n description={deps.labels.description}\n controller={controller}\n isLoading={query.isPending}\n searchPlaceholder={deps.labels.searchPlaceholder}\n emptyTitle={deps.labels.emptyTitle}\n emptyDescription={deps.labels.emptyDescription}\n onRowClick={deps.navigateToEdit}\n toolbarExtra={<deps.AddButton href={deps.createHref} label={deps.labels.addLabel} />}\n />\n\n <deps.DeleteDialog\n entity={pendingDelete}\n title={deps.labels.deleteTitle}\n description={deps.labels.deleteDescription(pendingDelete)}\n isDeleting={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={async () => {\n if (!pendingDelete) return;\n await remove.mutateAsync(pendingDelete.id);\n setPendingDelete(null);\n }}\n />\n </div>\n );\n };\n}\n\nexport function createBuilderEntityDialogManagerComponent<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n>(deps: BuilderEntityDialogManagerDependencies<TEntity, TColumn, TState, TQuery, TController>) {\n return function BuilderEntityDialogManager() {\n const [editing, setEditing] = useState<TEntity | null>(null);\n const [isEditorOpen, setEditorOpen] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<TEntity | null>(null);\n const state = deps.useDataTableState({ pageSize: 20 });\n const query = deps.hooks.useEntities(state.query);\n const remove = deps.hooks.useDelete();\n const replicate = deps.hooks.useReplicate();\n\n const openEditor = useCallback((entity: TEntity | null) => {\n setEditing(entity);\n setEditorOpen(true);\n }, []);\n\n const columns = useMemo(\n () =>\n deps.buildColumns({\n onEdit: (entity) => openEditor(entity),\n onReplicate: async (entity) => {\n const title = await deps.requestReplicateTitle(entity);\n if (!title) return;\n await replicate.mutateAsync({ id: entity.id, input: { title } });\n },\n onDelete: setPendingDelete,\n runtimeHref: deps.runtimeHref,\n }),\n [replicate, openEditor],\n );\n\n const controller = deps.useDataTable({\n columns,\n data: query.data?.items ?? [],\n rowCount: query.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n return (\n <div className=\"space-y-6\">\n <deps.DataGrid\n title={deps.labels.title}\n description={deps.labels.description}\n controller={controller}\n isLoading={query.isPending}\n searchPlaceholder={deps.labels.searchPlaceholder}\n emptyTitle={deps.labels.emptyTitle}\n emptyDescription={deps.labels.emptyDescription}\n onRowClick={openEditor}\n toolbarExtra={\n <deps.AddButton label={deps.labels.addLabel} onAdd={() => openEditor(null)} />\n }\n />\n\n <deps.EditorDialog\n open={isEditorOpen}\n editing={editing}\n onClose={() => setEditorOpen(false)}\n />\n\n <deps.DeleteDialog\n entity={pendingDelete}\n title={deps.labels.deleteTitle}\n description={deps.labels.deleteDescription(pendingDelete)}\n isDeleting={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={async () => {\n if (!pendingDelete) return;\n await remove.mutateAsync(pendingDelete.id);\n setPendingDelete(null);\n }}\n />\n </div>\n );\n };\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport { FormProvider, type Resolver, type UseFormReturn, useForm } from \"react-hook-form\";\nimport {\n type BuilderViewEditorEntity,\n type BuilderViewEditorValues,\n builderViewEditorValuesFromEntity,\n} from \"./editorState\";\n\ntype BuilderOptionEntity = {\n id: string;\n title: string;\n};\n\ntype BuilderViewDialogSaveMutation<TInput> = (args: {\n id?: string;\n input: TInput;\n}) => Promise<unknown>;\n\ntype BuilderViewDialogNotifications = {\n success(message: string): void;\n error(error: unknown): void;\n};\n\ntype BuilderViewDialogLabels = {\n created: string;\n saved: string;\n};\n\nexport type BuilderViewDialogProps<TView, TForm, TList, TInput> = {\n open: boolean;\n editing: TView | null;\n forms: TForm[];\n lists: TList[];\n onClose(): void;\n onSave: BuilderViewDialogSaveMutation<TInput>;\n isSaving: boolean;\n};\n\nexport type BuilderViewDialogShellProps<TView> = {\n open: boolean;\n editing: TView | null;\n onClose(): void;\n children: ReactNode;\n};\n\nexport type BuilderViewDialogBodyProps<TForm, TList> = {\n form: UseFormReturn<BuilderViewEditorValues>;\n editing: BuilderViewEditorEntity | null;\n forms: TForm[];\n lists: TList[];\n permissionOptions: Array<{ value: string; label: string }>;\n noneValue: string;\n isSaving: boolean;\n onClose(): void;\n};\n\nexport type BuilderViewDialogDependencies<\n TView extends BuilderViewEditorEntity & { id: string },\n TForm extends BuilderOptionEntity,\n TList extends BuilderOptionEntity,\n TInput,\n> = {\n emptyValues: BuilderViewEditorValues;\n defaultPermission?: string;\n permissionOptions: Array<{ value: string; label: string }>;\n noneValue: string;\n resolver?: Resolver<BuilderViewEditorValues>;\n labels: BuilderViewDialogLabels;\n buildInput(values: BuilderViewEditorValues): TInput;\n notifications: BuilderViewDialogNotifications;\n Shell(props: BuilderViewDialogShellProps<TView>): ReactNode;\n Body(props: BuilderViewDialogBodyProps<TForm, TList>): ReactNode;\n};\n\nexport function createBuilderViewDialogComponent<\n TView extends BuilderViewEditorEntity & { id: string },\n TForm extends BuilderOptionEntity,\n TList extends BuilderOptionEntity,\n TInput,\n>(deps: BuilderViewDialogDependencies<TView, TForm, TList, TInput>) {\n return function BuilderViewDialog({\n open,\n editing,\n forms,\n lists,\n onClose,\n onSave,\n isSaving,\n }: BuilderViewDialogProps<TView, TForm, TList, TInput>) {\n const form = useForm<BuilderViewEditorValues>({\n resolver: deps.resolver,\n defaultValues: deps.emptyValues,\n });\n\n useEffect(() => {\n if (!open) return;\n form.reset(\n builderViewEditorValuesFromEntity(editing, deps.emptyValues, deps.defaultPermission),\n );\n }, [editing, form, open]);\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n await onSave({ id: editing?.id, input: deps.buildInput(values) });\n onClose();\n deps.notifications.success(editing ? deps.labels.saved : deps.labels.created);\n } catch (error) {\n deps.notifications.error(error);\n }\n });\n\n return (\n <deps.Shell open={open} editing={editing} onClose={onClose}>\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate>\n {deps.Body({\n form,\n editing,\n forms,\n lists,\n permissionOptions: deps.permissionOptions,\n noneValue: deps.noneValue,\n isSaving,\n onClose,\n })}\n </form>\n </FormProvider>\n </deps.Shell>\n );\n };\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { useWatch } from \"react-hook-form\";\nimport {\n type BuilderFormEditorFieldValues,\n type BuilderFormEditorLayoutGroupValues,\n type BuilderFormEditorSubformValues,\n type BuilderFormEditorValues,\n builderFormEditorDefaultLayoutGroups,\n builderFormEditorDefaultSpan,\n} from \"./editorState\";\n\nexport const builderFormLayoutDragDataType = \"application/x-winu-builder-layout-field\";\n\nexport type BuilderFormLayoutItem = {\n key: string;\n kind: \"field\" | \"subform\";\n meta: string;\n span: number;\n};\n\nexport type BuilderFormLayoutDragPayload =\n | { type: \"palette\"; key: string }\n | { type: \"layout\"; groupIndex: number; fieldIndex: number; key: string };\n\nexport function clampBuilderFormLayoutSpan(span: number, columns: 6 | 8 | 12) {\n return Math.max(1, Math.min(columns, span));\n}\n\nexport function swapBuilderFormLayoutItems<T>(items: T[], from: number, to: number) {\n if (from < 0 || from >= items.length || to < 0 || to >= items.length) return items;\n const next = [...items];\n const item = next[from];\n next[from] = next[to];\n next[to] = item;\n return next;\n}\n\nexport function nextBuilderFormLayoutGroupId(groups: BuilderFormEditorLayoutGroupValues[]) {\n let index = groups.length + 1;\n let id = `group${index}`;\n const ids = new Set(groups.map((group) => group.id));\n while (ids.has(id)) {\n index += 1;\n id = `group${index}`;\n }\n return id;\n}\n\nexport function serializeBuilderFormLayoutDragPayload(payload: BuilderFormLayoutDragPayload) {\n return JSON.stringify(payload);\n}\n\nexport function parseBuilderFormLayoutDragPayload(raw: string) {\n if (!raw) return null;\n try {\n const value = JSON.parse(raw) as Partial<BuilderFormLayoutDragPayload>;\n if (value.type === \"palette\" && typeof value.key === \"string\" && value.key) {\n return { type: value.type, key: value.key };\n }\n if (\n value.type === \"layout\" &&\n typeof value.key === \"string\" &&\n value.key &&\n Number.isInteger(value.groupIndex) &&\n Number.isInteger(value.fieldIndex) &&\n (value.groupIndex ?? -1) >= 0 &&\n (value.fieldIndex ?? -1) >= 0\n ) {\n return {\n type: value.type,\n groupIndex: value.groupIndex,\n fieldIndex: value.fieldIndex,\n key: value.key,\n };\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport type UseBuilderFormLayoutEditorArgs<\n TFieldType extends string,\n TTriggerEvent extends string,\n> = {\n form: UseFormReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>>;\n fields: BuilderFormEditorFieldValues<TFieldType>[];\n subforms?: BuilderFormEditorSubformValues[];\n};\n\nexport function useBuilderFormLayoutEditor<\n TFieldType extends string,\n TTriggerEvent extends string,\n>({ form, fields, subforms = [] }: UseBuilderFormLayoutEditorArgs<TFieldType, TTriggerEvent>) {\n const layoutGroups = useWatch({ control: form.control, name: \"layoutGroups\" }) ?? [];\n const layoutItems = useMemo<BuilderFormLayoutItem[]>(\n () => [\n ...fields.map((field) => ({\n key: field.key,\n kind: \"field\" as const,\n meta: field.type,\n span: builderFormEditorDefaultSpan(field),\n })),\n ...subforms.map((subform) => ({\n key: subform.key,\n kind: \"subform\" as const,\n meta: \"subform\",\n span: 12,\n })),\n ],\n [fields, subforms],\n );\n const assignedKeys = useMemo(\n () => new Set(layoutGroups.flatMap((group) => group.fields.map((field) => field.key))),\n [layoutGroups],\n );\n const unassignedItems = useMemo(\n () => layoutItems.filter((item) => !assignedKeys.has(item.key)),\n [assignedKeys, layoutItems],\n );\n\n const setGroups = (groups: BuilderFormEditorLayoutGroupValues[]) => {\n form.setValue(\"layoutGroups\", groups, { shouldDirty: true, shouldValidate: true });\n };\n\n const updateGroup = (groupIndex: number, group: BuilderFormEditorLayoutGroupValues) => {\n setGroups(layoutGroups.map((item, index) => (index === groupIndex ? group : item)));\n };\n\n const updateGroupFields = (\n groupIndex: number,\n updater: (\n fields: BuilderFormEditorLayoutGroupValues[\"fields\"],\n ) => BuilderFormEditorLayoutGroupValues[\"fields\"],\n ) => {\n const group = layoutGroups[groupIndex];\n if (!group) return;\n updateGroup(groupIndex, { ...group, fields: updater(group.fields) });\n };\n\n const addGroup = () => {\n setGroups([\n ...layoutGroups,\n {\n id: nextBuilderFormLayoutGroupId(layoutGroups),\n title: `Group ${layoutGroups.length + 1}`,\n columns: 12,\n fields: [],\n },\n ]);\n };\n\n const addItemToNewGroup = (itemKey: string) => {\n if (assignedKeys.has(itemKey)) return;\n const item = layoutItems.find((candidate) => candidate.key === itemKey);\n if (!item) return;\n setGroups([\n ...layoutGroups,\n {\n id: nextBuilderFormLayoutGroupId(layoutGroups),\n title: layoutGroups.length === 0 ? \"Үндсэн\" : `Group ${layoutGroups.length + 1}`,\n columns: 12,\n fields: [{ key: itemKey, span: item.span }],\n },\n ]);\n };\n\n const addItemToGroup = (groupIndex: number, itemKey: string, insertAt?: number) => {\n if (assignedKeys.has(itemKey)) return;\n const item = layoutItems.find((candidate) => candidate.key === itemKey);\n const group = layoutGroups[groupIndex];\n if (!item || !group) return;\n const nextField = {\n key: itemKey,\n span: clampBuilderFormLayoutSpan(item.span, group.columns),\n };\n updateGroupFields(groupIndex, (groupFields) => {\n const next = [...groupFields];\n next.splice(insertAt ?? next.length, 0, nextField);\n return next;\n });\n };\n\n const moveLayoutField = (\n payload: Extract<BuilderFormLayoutDragPayload, { type: \"layout\" }>,\n targetGroupIndex: number,\n targetFieldIndex?: number,\n ) => {\n const sourceGroup = layoutGroups[payload.groupIndex];\n const targetGroup = layoutGroups[targetGroupIndex];\n if (!sourceGroup || !targetGroup) return;\n const movingField = sourceGroup.fields[payload.fieldIndex];\n if (!movingField) return;\n\n const nextGroups = layoutGroups.map((group) => ({ ...group, fields: [...group.fields] }));\n nextGroups[payload.groupIndex].fields.splice(payload.fieldIndex, 1);\n\n let insertAt = targetFieldIndex ?? nextGroups[targetGroupIndex].fields.length;\n if (payload.groupIndex === targetGroupIndex && payload.fieldIndex < insertAt) {\n insertAt -= 1;\n }\n\n nextGroups[targetGroupIndex].fields.splice(insertAt, 0, {\n ...movingField,\n span: clampBuilderFormLayoutSpan(movingField.span, targetGroup.columns),\n });\n setGroups(nextGroups);\n };\n\n const applyDragPayload = (\n payload: BuilderFormLayoutDragPayload | null,\n targetGroupIndex: number,\n targetFieldIndex?: number,\n ) => {\n if (!payload) return;\n if (payload.type === \"palette\") {\n addItemToGroup(targetGroupIndex, payload.key, targetFieldIndex);\n return;\n }\n moveLayoutField(payload, targetGroupIndex, targetFieldIndex);\n };\n\n const resetDefaultLayout = () => setGroups(builderFormEditorDefaultLayoutGroups(fields, subforms));\n\n return {\n assignedKeys,\n layoutGroups,\n layoutItems,\n unassignedItems,\n addGroup,\n addItemToGroup,\n addItemToNewGroup,\n applyDragPayload,\n resetDefaultLayout,\n setGroups,\n updateGroup,\n updateGroupFields,\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport {\n type BuilderRuntimeFormSchemaLike,\n type BuilderRuntimeFormValues,\n createBuilderFormDefaultValues,\n} from \"../runtime\";\n\nexport type DynamicFormContracts = BuilderApiContracts & {\n BuilderForm: {\n id: string;\n title: string;\n schema: BuilderRuntimeFormSchemaLike;\n };\n CreateBuilderViewEntryInput: BuilderRuntimeFormValues;\n};\n\nexport type DynamicFormProps = {\n formId: string;\n};\n\nexport type DynamicFormShellProps = {\n title: string;\n children: ReactNode;\n};\n\nexport type DynamicFormFieldsProps<TSchema> = {\n formId: string;\n schema: TSchema;\n namePrefix: \"values\";\n};\n\nexport type DynamicFormSubmitProps = {\n isSaving: boolean;\n};\n\nexport type DynamicFormErrorStateProps = {\n title: string;\n description: string;\n};\n\nexport type DynamicFormNotifications = {\n success(message: string): void;\n error(message: string): void;\n errorMessage(error: unknown, fallback: string): string;\n};\n\nexport type DynamicFormDependencies<C extends DynamicFormContracts> = {\n hooks: Pick<BuilderHooks<C>, \"useRuntimeBuilderForm\" | \"useSaveRuntimeBuilderFormEntry\">;\n FormShell: ComponentType<DynamicFormShellProps>;\n FormFields: ComponentType<DynamicFormFieldsProps<C[\"BuilderForm\"][\"schema\"]>>;\n SubmitButton: ComponentType<DynamicFormSubmitProps>;\n ErrorState: ComponentType<DynamicFormErrorStateProps>;\n notifications: DynamicFormNotifications;\n};\n\nexport function createDynamicFormComponent<C extends DynamicFormContracts>(\n deps: DynamicFormDependencies<C>,\n) {\n return function DynamicForm({ formId }: DynamicFormProps) {\n const query = deps.hooks.useRuntimeBuilderForm(formId);\n const save = deps.hooks.useSaveRuntimeBuilderFormEntry(formId);\n const formValues = useMemo(\n () => (query.data ? createBuilderFormDefaultValues(query.data.schema) : undefined),\n [query.data],\n );\n const form = useForm<BuilderRuntimeFormValues>({\n defaultValues: createBuilderFormDefaultValues(query.data?.schema),\n values: formValues,\n });\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n await save.mutateAsync(values as C[\"CreateBuilderViewEntryInput\"]);\n form.reset(createBuilderFormDefaultValues(query.data?.schema));\n deps.notifications.success(\"Form хадгалагдлаа\");\n } catch (error) {\n deps.notifications.error(deps.notifications.errorMessage(error, \"Хадгалахад алдаа гарлаа\"));\n }\n });\n\n if (query.isError) {\n return (\n <deps.ErrorState\n title=\"Form нээгдсэнгүй\"\n description={`«${formId}» id-тай form олдсонгүй.`}\n />\n );\n }\n\n if (!query.data) return null;\n\n return (\n <deps.FormShell title={query.data.title}>\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className=\"space-y-6\">\n <deps.FormFields formId={formId} schema={query.data.schema} namePrefix=\"values\" />\n <deps.SubmitButton isSaving={save.isPending} />\n </form>\n </FormProvider>\n </deps.FormShell>\n );\n };\n}\n","\"use client\";\n\nimport type { ComponentType } from \"react\";\nimport { useMemo } from \"react\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\n\nexport type DynamicListContracts = BuilderApiContracts & {\n BuilderList: {\n id: string;\n title: string;\n description?: string | null;\n };\n BuilderViewEntry: {\n id: string;\n };\n ListBuilderViewEntriesResponse: {\n items: Array<BuilderApiContracts[\"BuilderViewEntry\"]>;\n total: number;\n };\n};\n\nexport type DynamicListProps = {\n listId: string;\n};\n\nexport type DynamicListDataGridProps<TController> = {\n title?: string;\n description?: string;\n controller: TController;\n isLoading?: boolean;\n searchPlaceholder?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n};\n\nexport type DynamicListErrorStateProps = {\n title: string;\n description: string;\n};\n\nexport type DynamicListDependencies<\n C extends DynamicListContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n> = {\n hooks: Pick<BuilderHooks<C>, \"useRuntimeBuilderList\" | \"useRuntimeBuilderListEntries\">;\n buildColumns(list: C[\"BuilderList\"]): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: C[\"BuilderViewEntry\"][];\n rowCount: number;\n state: TState;\n getRowId(row: C[\"BuilderViewEntry\"]): string;\n }): TController;\n DataGrid: ComponentType<DynamicListDataGridProps<TController>>;\n ErrorState: ComponentType<DynamicListErrorStateProps>;\n};\n\nexport function createDynamicListComponent<\n C extends DynamicListContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n>(deps: DynamicListDependencies<C, TColumn, TState, TController>) {\n return function DynamicList({ listId }: DynamicListProps) {\n const query = deps.hooks.useRuntimeBuilderList(listId);\n const state = deps.useDataTableState({ pageSize: 20 });\n const entriesQuery = deps.hooks.useRuntimeBuilderListEntries(listId, state.query);\n const columns = useMemo(() => (query.data ? deps.buildColumns(query.data) : []), [query.data]);\n const entries = entriesQuery.data?.items ?? [];\n const controller = deps.useDataTable({\n columns,\n data: entries as C[\"BuilderViewEntry\"][],\n rowCount: entriesQuery.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n if (query.isError) {\n return (\n <deps.ErrorState\n title=\"List нээгдсэнгүй\"\n description={`«${listId}» id-тай list олдсонгүй.`}\n />\n );\n }\n\n return (\n <deps.DataGrid\n title={query.data?.title ?? \"Dynamic List\"}\n description={query.data?.description ?? `/winu/list?id=${listId}`}\n controller={controller}\n isLoading={query.isPending || entriesQuery.isPending}\n searchPlaceholder=\"Мөр хайх...\"\n emptyTitle=\"Мөр алга\"\n emptyDescription=\"Энэ list-ийн datasource дээр мөр алга.\"\n />\n );\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useMemo, useState } from \"react\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport type { BuilderRuntimeEntryLike } from \"../runtime\";\n\nexport type DynamicViewContracts = BuilderApiContracts & {\n BuilderView: {\n id: string;\n title: string;\n description?: string | null;\n form?: unknown | null;\n };\n BuilderViewEntry: BuilderRuntimeEntryLike;\n ListBuilderViewEntriesResponse: {\n items: Array<BuilderApiContracts[\"BuilderViewEntry\"]>;\n total: number;\n };\n};\n\nexport type DynamicViewProps = {\n viewId: string;\n};\n\nexport type DynamicViewInteractionEvent = {\n defaultPrevented?: boolean;\n target?: unknown;\n stopPropagation?(): void;\n};\n\nexport type DynamicViewColumnActions<TEntry> = {\n onEdit(entry: TEntry, event?: DynamicViewInteractionEvent): void;\n onDelete(entry: TEntry, event?: DynamicViewInteractionEvent): void;\n};\n\nexport type DynamicViewDataGridProps<TController> = {\n title?: string;\n description?: string;\n controller: TController;\n isLoading?: boolean;\n searchPlaceholder?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n onRowClick?: (row: unknown, event?: DynamicViewInteractionEvent) => void;\n toolbarExtra?: ReactNode;\n};\n\nexport type DynamicViewAddButtonProps = {\n disabled: boolean;\n onAdd(): void;\n};\n\nexport type DynamicViewEntryDialogProps<TView, TEntry, TInput> = {\n open: boolean;\n view: TView;\n editing: TEntry | null;\n onClose(): void;\n onSave(args: { id?: string; input: TInput }): Promise<unknown>;\n isSaving: boolean;\n};\n\nexport type DynamicViewDeleteDialogProps<TEntry> = {\n entry: TEntry | null;\n isDeleting: boolean;\n onClose(): void;\n onConfirm(): Promise<void>;\n};\n\nexport type DynamicViewErrorStateProps = {\n title: string;\n description: string;\n};\n\ntype ClosestTarget = {\n closest(selector: string): unknown;\n};\n\nconst interactiveRowTargetSelector =\n \"button,a,input,select,textarea,[role='button'],[role='menuitem'],[data-builder-row-action]\";\n\nfunction hasClosest(target: unknown): target is ClosestTarget {\n return (\n typeof target === \"object\" &&\n target !== null &&\n \"closest\" in target &&\n typeof target.closest === \"function\"\n );\n}\n\nexport function shouldHandleDynamicViewRowClick(event?: DynamicViewInteractionEvent) {\n if (!event) return true;\n if (event.defaultPrevented) return false;\n return !hasClosest(event.target) || !event.target.closest(interactiveRowTargetSelector);\n}\n\nexport type DynamicViewDependencies<\n C extends DynamicViewContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n> = {\n hooks: Pick<\n BuilderHooks<C>,\n | \"useBuilderViewEntries\"\n | \"useDeleteBuilderViewEntry\"\n | \"useRuntimeBuilderView\"\n | \"useSaveBuilderViewEntry\"\n >;\n buildColumns(\n view: C[\"BuilderView\"],\n actions: DynamicViewColumnActions<C[\"BuilderViewEntry\"]>,\n ): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: C[\"BuilderViewEntry\"][];\n rowCount: number;\n state: TState;\n getRowId(row: C[\"BuilderViewEntry\"]): string;\n }): TController;\n DataGrid: ComponentType<DynamicViewDataGridProps<TController>>;\n AddButton: ComponentType<DynamicViewAddButtonProps>;\n EntryDialog: ComponentType<\n DynamicViewEntryDialogProps<\n C[\"BuilderView\"],\n C[\"BuilderViewEntry\"],\n C[\"UpdateBuilderViewEntryInput\"]\n >\n >;\n DeleteDialog: ComponentType<DynamicViewDeleteDialogProps<C[\"BuilderViewEntry\"]>>;\n ErrorState: ComponentType<DynamicViewErrorStateProps>;\n};\n\nexport function createDynamicViewComponent<\n C extends DynamicViewContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n>(deps: DynamicViewDependencies<C, TColumn, TState, TController>) {\n return function DynamicView({ viewId }: DynamicViewProps) {\n const [editing, setEditing] = useState<C[\"BuilderViewEntry\"] | null>(null);\n const [isDialogOpen, setDialogOpen] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<C[\"BuilderViewEntry\"] | null>(null);\n\n const viewQuery = deps.hooks.useRuntimeBuilderView(viewId);\n const state = deps.useDataTableState({ pageSize: 20 });\n const entriesQuery = deps.hooks.useBuilderViewEntries(viewId, state.query);\n const save = deps.hooks.useSaveBuilderViewEntry(viewId);\n const remove = deps.hooks.useDeleteBuilderViewEntry(viewId);\n const view = viewQuery.data;\n\n const columns = useMemo(\n () =>\n view\n ? deps.buildColumns(view, {\n onEdit: (entry, event) => {\n event?.stopPropagation?.();\n setEditing(entry);\n setDialogOpen(true);\n },\n onDelete: (entry, event) => {\n event?.stopPropagation?.();\n setPendingDelete(entry);\n },\n })\n : [],\n [view],\n );\n\n const controller = deps.useDataTable({\n columns,\n data: (entriesQuery.data?.items ?? []) as C[\"BuilderViewEntry\"][],\n rowCount: entriesQuery.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n if (viewQuery.isError) {\n return (\n <deps.ErrorState\n title=\"View нээгдсэнгүй\"\n description={`«${viewId}» id-тай view олдсонгүй.`}\n />\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <deps.DataGrid\n title={view?.title ?? \"Dynamic View\"}\n description={view?.description ?? `/winu/view?id=${viewId}`}\n controller={controller}\n isLoading={viewQuery.isPending || entriesQuery.isPending}\n searchPlaceholder=\"Мөр хайх...\"\n emptyTitle=\"Мөр алга\"\n emptyDescription=\"Энэ view дээр эхний мөрөө нэмээрэй.\"\n onRowClick={(entry, event) => {\n if (!shouldHandleDynamicViewRowClick(event)) return;\n setEditing(entry as C[\"BuilderViewEntry\"]);\n setDialogOpen(true);\n }}\n toolbarExtra={\n <deps.AddButton\n disabled={!view?.form}\n onAdd={() => {\n setEditing(null);\n setDialogOpen(true);\n }}\n />\n }\n />\n\n {view ? (\n <deps.EntryDialog\n open={isDialogOpen}\n view={view}\n editing={editing}\n onClose={() => setDialogOpen(false)}\n onSave={save.mutateAsync}\n isSaving={save.isPending}\n />\n ) : null}\n\n <deps.DeleteDialog\n entry={pendingDelete}\n isDeleting={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={async () => {\n if (!pendingDelete) return;\n await remove.mutateAsync(pendingDelete.id);\n setPendingDelete(null);\n }}\n />\n </div>\n );\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport {\n type BuilderRuntimeEntryLike,\n type BuilderRuntimeEntryValues,\n type BuilderRuntimeFormSchemaLike,\n type BuilderRuntimePresentation,\n type BuilderRuntimeViewLike,\n createBuilderEntryDefaultValues,\n} from \"../runtime\";\n\ntype BuilderRuntimeDatasourceLike =\n | {\n type: \"dbTable\";\n tableName: string;\n }\n | {\n type: string;\n }\n | null;\n\nexport type RuntimeEntryDialogSubformLike = {\n key: string;\n};\n\nexport type RuntimeEntryDialogViewLike = BuilderRuntimeViewLike & {\n id: string;\n title: string;\n list?: {\n source?: BuilderRuntimeDatasourceLike;\n } | null;\n form?: {\n id: string;\n source?: BuilderRuntimeDatasourceLike;\n schema: BuilderRuntimeFormSchemaLike & {\n subforms?: readonly RuntimeEntryDialogSubformLike[];\n };\n } | null;\n};\n\nexport type RuntimeEntryDialogSaveArgs<TInput> = {\n id?: string;\n input: TInput;\n};\n\nexport type RuntimeEntryDialogProps<TView, TEntry, TInput> = {\n open: boolean;\n view: TView;\n editing: TEntry | null;\n onClose: () => void;\n onSave: (args: RuntimeEntryDialogSaveArgs<TInput>) => Promise<unknown>;\n isSaving: boolean;\n};\n\nexport type RuntimeEntryDialogShellProps = {\n open: boolean;\n presentation: BuilderRuntimePresentation;\n title: string;\n description: string;\n onClose: () => void;\n children: ReactNode;\n};\n\nexport type RuntimeEntryDialogExtraItem = {\n key: string;\n render: () => ReactNode;\n};\n\nexport type RuntimeEntryDialogFieldsProps<TSchema> = {\n formId: string;\n viewId: string;\n entry?: BuilderRuntimeEntryLike | null;\n schema: TSchema;\n namePrefix: \"values\";\n extraItems?: RuntimeEntryDialogExtraItem[];\n};\n\nexport type RuntimeEntryDialogActionsProps = {\n isSaving: boolean;\n onClose: () => void;\n};\n\nexport type RuntimeEntryDialogNotifications = {\n success(message: string): void;\n error(message: string): void;\n errorMessage(error: unknown, fallback: string): string;\n};\n\nexport type RuntimeEntryDialogDraftRowsChange<TEntry> = {\n subformKey: string;\n dataKey: string;\n rows: TEntry[];\n};\n\nexport type RuntimeEntryDialogSubformFieldProps<TSubform, TEntry> = {\n subform: TSubform;\n parentEntry?: TEntry | null;\n draftRows?: TEntry[];\n onDraftRowsChange?(args: RuntimeEntryDialogDraftRowsChange<TEntry>): void;\n};\n\ntype RuntimeEntryDialogDraftSubform<TEntry> = {\n dataKey: string;\n rows: TEntry[];\n};\n\ntype RuntimeCompositeData = Record<\n string,\n Record<string, unknown> | Array<Record<string, unknown>>\n>;\n\ntype RuntimeCompositeCreateInput = {\n data: RuntimeCompositeData;\n};\n\ntype RuntimeCompositeUpdateInput = {\n data: RuntimeCompositeData;\n};\n\ntype RuntimeMutation<TInput> = {\n mutateAsync(input: TInput): Promise<unknown>;\n isPending: boolean;\n};\n\nexport type RuntimeEntryDialogDependencies<\n TView extends RuntimeEntryDialogViewLike,\n TEntry extends BuilderRuntimeEntryLike = BuilderRuntimeEntryLike,\n> = {\n DialogShell: ComponentType<RuntimeEntryDialogShellProps>;\n FormFields: ComponentType<RuntimeEntryDialogFieldsProps<NonNullable<TView[\"form\"]>[\"schema\"]>>;\n Actions: ComponentType<RuntimeEntryDialogActionsProps>;\n formClassName?: string;\n SubformField?: ComponentType<\n RuntimeEntryDialogSubformFieldProps<\n NonNullable<NonNullable<TView[\"form\"]>[\"schema\"][\"subforms\"]>[number],\n TEntry\n >\n >;\n useCreateCompositeEntry?(viewId: string): RuntimeMutation<RuntimeCompositeCreateInput>;\n useUpdateCompositeEntry?(\n viewId: string,\n ): RuntimeMutation<{ id: string; input: RuntimeCompositeUpdateInput }>;\n notifications: RuntimeEntryDialogNotifications;\n};\n\nfunction isDbTableSource(\n source: BuilderRuntimeDatasourceLike | undefined,\n): source is { type: \"dbTable\"; tableName: string } {\n return source?.type === \"dbTable\" && \"tableName\" in source;\n}\n\nfunction runtimeViewTableName(view: RuntimeEntryDialogViewLike) {\n const listSource = view.list?.source;\n if (isDbTableSource(listSource)) return listSource.tableName;\n const formSource = view.form?.source;\n return isDbTableSource(formSource) ? formSource.tableName : undefined;\n}\n\nfunction cleanRowValues(values: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(values).filter(([key]) => key === \"_delete\" || !key.startsWith(\"_\")),\n );\n}\n\nfunction childRowPayload(row: BuilderRuntimeEntryLike, includeIdentity: boolean) {\n const values = cleanRowValues(row.values);\n if (!includeIdentity || row.values._draftNew === true) return values;\n return {\n id: row.id,\n version: row.version,\n ...values,\n };\n}\n\nexport function createRuntimeEntryDialogComponent<\n TView extends RuntimeEntryDialogViewLike,\n TEntry extends BuilderRuntimeEntryLike,\n TInput extends BuilderRuntimeEntryValues,\n>(deps: RuntimeEntryDialogDependencies<TView, TEntry>) {\n return function RuntimeEntryDialog({\n open,\n view,\n editing,\n onClose,\n onSave,\n isSaving,\n }: RuntimeEntryDialogProps<TView, TEntry, TInput>) {\n const [draftSubforms, setDraftSubforms] = useState<\n Record<string, RuntimeEntryDialogDraftSubform<TEntry>>\n >({});\n const compositeCreate = deps.useCreateCompositeEntry?.(view.id);\n const compositeUpdate = deps.useUpdateCompositeEntry?.(view.id);\n const form = useForm<BuilderRuntimeEntryValues>({\n defaultValues: createBuilderEntryDefaultValues(view, editing),\n values: open ? createBuilderEntryDefaultValues(view, editing) : undefined,\n });\n const mainTableName = runtimeViewTableName(view);\n const hasDraftRows = useMemo(\n () => Object.values(draftSubforms).some((draft) => draft.rows.length > 0),\n [draftSubforms],\n );\n\n useEffect(() => {\n if (open) setDraftSubforms({});\n }, [open]);\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n if (!editing && hasDraftRows) {\n if (!mainTableName) throw new Error(\"Main form datasource table олдсонгүй\");\n if (!compositeCreate) throw new Error(\"Composite create handler тохируулагдаагүй байна\");\n await compositeCreate.mutateAsync({\n data: {\n [mainTableName]: values.values,\n ...Object.fromEntries(\n Object.values(draftSubforms).map((draft) => [\n draft.dataKey,\n draft.rows\n .filter((row) => row.values._delete !== true)\n .map((row) => childRowPayload(row, false)),\n ]),\n ),\n },\n });\n } else if (editing && hasDraftRows) {\n if (!mainTableName) throw new Error(\"Main form datasource table олдсонгүй\");\n if (!compositeUpdate) throw new Error(\"Composite update handler тохируулагдаагүй байна\");\n await compositeUpdate.mutateAsync({\n id: editing.id,\n input: {\n data: {\n [mainTableName]: {\n id: editing.id,\n version: values.version,\n ...values.values,\n },\n ...Object.fromEntries(\n Object.values(draftSubforms).map((draft) => [\n draft.dataKey,\n draft.rows.map((row) => childRowPayload(row, true)),\n ]),\n ),\n },\n },\n });\n } else {\n await onSave({ id: editing?.id, input: values as TInput });\n }\n onClose();\n deps.notifications.success(editing ? \"Мөр хадгалагдлаа\" : \"Мөр нэмэгдлээ\");\n } catch (error) {\n deps.notifications.error(deps.notifications.errorMessage(error, \"Хадгалахад алдаа гарлаа\"));\n }\n });\n\n const saving = isSaving || Boolean(compositeCreate?.isPending || compositeUpdate?.isPending);\n const extraItems: RuntimeEntryDialogExtraItem[] | undefined =\n deps.SubformField && view.form?.schema.subforms?.length\n ? view.form.schema.subforms.map((subform) => ({\n key: subform.key,\n render: () =>\n deps.SubformField ? (\n <deps.SubformField\n subform={subform}\n parentEntry={editing}\n draftRows={draftSubforms[subform.key]?.rows ?? []}\n onDraftRowsChange={({ subformKey, dataKey, rows }) => {\n setDraftSubforms((current) => ({\n ...current,\n [subformKey]: { dataKey, rows: rows as TEntry[] },\n }));\n }}\n />\n ) : null,\n }))\n : undefined;\n\n return (\n <deps.DialogShell\n open={open}\n presentation={view.form?.schema.presentation ?? \"dialog\"}\n title={editing ? \"Мөр засах\" : \"Мөр нэмэх\"}\n description={view.title}\n onClose={onClose}\n >\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className={deps.formClassName}>\n {view.form ? (\n <deps.FormFields\n formId={view.form.id}\n viewId={view.id}\n entry={editing}\n schema={view.form.schema}\n namePrefix=\"values\"\n extraItems={extraItems}\n />\n ) : null}\n <deps.Actions isSaving={saving} onClose={onClose} />\n </form>\n </FormProvider>\n </deps.DialogShell>\n );\n };\n}\n","\"use client\";\n\nimport {\n type BuilderApiClient,\n type BuilderApiContracts,\n type BuilderApiTransport,\n createBuilderApiClient,\n} from \"../api\";\nimport {\n type BuilderAdminPageContracts,\n type BuilderAdminPagesOptions,\n createBuilderAdminPages,\n} from \"../admin\";\nimport { type BuilderHooks, createBuilderHooks } from \"../hooks\";\n\nexport type BuilderIntegrationRoutes = {\n adminBasePath: string;\n adminHomePath: string;\n formsPath: string;\n newFormPath: string;\n editFormPath(id?: string): string;\n listsPath: string;\n newListPath: string;\n editListPath(id?: string): string;\n viewsPath: string;\n};\n\nexport type BuilderIntegrationConfig = {\n transport: BuilderApiTransport;\n adminBasePath?: string;\n runtimeBasePath?: string;\n apiBasePath?: string;\n adminPages?: Omit<BuilderAdminPagesOptions<BuilderAdminPageContracts>, \"hooks\" | \"routes\">;\n permissions?: unknown;\n triggers?: unknown;\n toast?: unknown;\n};\n\nexport type BuilderIntegration<C extends BuilderApiContracts> = {\n api: BuilderApiClient<C>;\n hooks: BuilderHooks<C>;\n routes: BuilderIntegrationRoutes & { runtimeBasePath: string };\n adminPages?: ReturnType<typeof createBuilderAdminPages<BuilderAdminPageContracts>>;\n};\n\nexport type BuilderFrontendSetupValidation = {\n ok: boolean;\n checks: Array<{ name: string; ok: boolean; message?: string }>;\n};\n\nfunction normalizeBasePath(path: string) {\n const trimmed = path.trim().replace(/\\/+$/g, \"\");\n if (!trimmed) return \"/builder\";\n return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n}\n\nfunction withQuery(path: string, query: Record<string, string | undefined>) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value) params.set(key, value);\n }\n const queryString = params.toString();\n return queryString ? `${path}?${queryString}` : path;\n}\n\nexport function createBuilderIntegration<C extends BuilderApiContracts>(\n config: BuilderIntegrationConfig,\n): BuilderIntegration<C> {\n const adminBasePath = normalizeBasePath(config.adminBasePath ?? \"/admin/dev/builder\");\n const runtimeBasePath = normalizeBasePath(config.runtimeBasePath ?? \"/admin/winu\");\n const api = createBuilderApiClient<C>(config.transport, { apiBasePath: config.apiBasePath });\n const hooks = createBuilderHooks<C>(api);\n\n const formsPath = `${adminBasePath}/forms`;\n const listsPath = `${adminBasePath}/lists`;\n\n const routes: BuilderIntegrationRoutes & { runtimeBasePath: string } = {\n adminBasePath,\n runtimeBasePath,\n adminHomePath: adminBasePath,\n formsPath,\n newFormPath: `${formsPath}/new`,\n editFormPath: (id) => withQuery(`${formsPath}/edit`, { id }),\n listsPath,\n newListPath: `${listsPath}/new`,\n editListPath: (id) => withQuery(`${listsPath}/edit`, { id }),\n viewsPath: `${adminBasePath}/views`,\n };\n const adminPages = config.adminPages\n ? createBuilderAdminPages<BuilderAdminPageContracts>({\n ...config.adminPages,\n hooks: hooks as unknown as Parameters<\n typeof createBuilderAdminPages<BuilderAdminPageContracts>\n >[0][\"hooks\"],\n routes: {\n adminBasePath,\n runtimeBasePath,\n },\n })\n : undefined;\n\n return {\n api,\n hooks,\n routes,\n adminPages,\n };\n}\n\nexport function createBuilderPortalIntegration<C extends BuilderApiContracts>(\n config: BuilderIntegrationConfig,\n): BuilderIntegration<C> {\n return createBuilderIntegration<C>(config);\n}\n\nexport function validateBuilderFrontendSetup(config: {\n adminBasePath?: string;\n runtimeBasePath?: string;\n apiBasePath?: string;\n transport?: unknown;\n}): BuilderFrontendSetupValidation {\n const checks = [\n {\n name: \"adminBasePath\",\n ok: Boolean(config.adminBasePath && normalizeBasePath(config.adminBasePath).startsWith(\"/\")),\n message: \"adminBasePath must be an absolute route path.\",\n },\n {\n name: \"runtimeBasePath\",\n ok: Boolean(config.runtimeBasePath && normalizeBasePath(config.runtimeBasePath).startsWith(\"/\")),\n message: \"runtimeBasePath must be an absolute route path.\",\n },\n {\n name: \"transport\",\n ok: Boolean(config.transport),\n message: \"API transport is required.\",\n },\n {\n name: \"apiBasePath\",\n ok: config.apiBasePath === undefined || normalizeBasePath(config.apiBasePath).startsWith(\"/\"),\n message: \"apiBasePath must be an absolute API path.\",\n },\n ].map((check) => (check.ok ? { name: check.name, ok: true } : check));\n\n return { ok: checks.every((check) => check.ok), checks };\n}\n","\"use client\";\n\nexport const builderUiPackage = {\n name: \"@duke333/builder-ui\",\n version: \"0.2.1\",\n} as const;\n\nexport {\n type BuilderClient,\n type BuilderFormProps,\n type BuilderGridProps,\n type BuilderNotification,\n type BuilderProviderProps,\n type BuilderViewProps,\n BuilderForm,\n BuilderGrid,\n BuilderProvider,\n BuilderView,\n type CreateBuilderClientOptions,\n type ReadyBuilderContracts,\n builderErrorMessage,\n createBuilderClient,\n useBuilderRuntime,\n} from \"./ready\";\n\nexport {\n BUILDER_EDITOR_NONE_VALUE,\n type BuilderEditorDbTable,\n type BuilderEditorSelectOption,\n type BuilderEditorTriggerValues,\n type BuilderAdminPageContracts,\n type BuilderAdminPagesOptions,\n type BuilderAdminPagesRoutes,\n type BuilderDefaultFormEditorBodyOptions,\n type BuilderDefaultListEditorBodyOptions,\n type BuilderDefaultOption,\n type BuilderDefaultEntity,\n type BuilderDefaultEntityListResult,\n type BuilderDefaultEntityManagerDependencies,\n type BuilderDefaultEntityManagerLabels,\n type BuilderDefaultEntityManagerState,\n type BuilderDefaultEntityMutation,\n type BuilderDefaultEntityQueryResult,\n type BuilderDefaultViewEditorContracts,\n type BuilderDefaultViewEditorPageOptions,\n type BuilderEntityDialogManagerDependencies,\n type BuilderEntityManagerActions,\n type BuilderEntityManagerAddButtonProps,\n type BuilderEntityManagerDataGridProps,\n type BuilderEntityManagerDeleteDialogProps,\n type BuilderEntityManagerDependencies,\n type BuilderEntityManagerDialogAddButtonProps,\n type BuilderEntityManagerEditorDialogProps,\n type BuilderEntityManagerEntity,\n type BuilderEntityManagerHookResult,\n type BuilderEntityManagerLabels,\n type BuilderEntityManagerMutation,\n type BuilderFormEditorBodyProps,\n type BuilderFormEditorEntity,\n type BuilderFormEditorFieldValues,\n type BuilderFormLayoutDragPayload,\n type BuilderFormLayoutItem,\n type BuilderFormEditorPageDependencies,\n type BuilderFormEditorValues,\n type BuilderListEditorBodyProps,\n type BuilderListEditorColumnValues,\n type BuilderListEditorEntity,\n type BuilderListEditorPageDependencies,\n type BuilderListEditorValues,\n type BuilderViewDialogBodyProps,\n type BuilderViewDialogDependencies,\n type BuilderViewDialogProps,\n type BuilderViewDialogShellProps,\n type BuilderViewEditorEntity,\n type BuilderViewEditorValues,\n builderEditorOptionsToText,\n builderEditorSearchFieldsToText,\n builderEditorTextToOptions,\n builderEditorTextToSearchFields,\n builderFormLayoutDragDataType,\n builderFormEditorFieldsFromTable,\n builderFormEditorInputFromValues,\n builderFormEditorValuesFromEntity,\n builderListEditorColumnsFromTable,\n builderListEditorInputFromValues,\n builderListEditorValuesFromEntity,\n builderViewEditorInputFromValues,\n builderViewEditorValuesFromEntity,\n clampBuilderFormLayoutSpan,\n createBuilderAdminPages,\n createBuilderDefaultEntityManagerComponent,\n createBuilderDefaultFormEditorBody,\n createBuilderDefaultListEditorBody,\n createBuilderDefaultViewEditorPage,\n createBuilderEntityDialogManagerComponent,\n createBuilderEntityManagerComponent,\n createBuilderFormEditorPageComponent,\n createBuilderListEditorPageComponent,\n createBuilderViewDialogComponent,\n getBuilderEditorTriggerRoute,\n nextBuilderFormLayoutGroupId,\n parseBuilderFormLayoutDragPayload,\n serializeBuilderFormLayoutDragPayload,\n swapBuilderFormLayoutItems,\n useBuilderFormLayoutEditor,\n} from \"./admin\";\nexport {\n type BuilderApiClient,\n type BuilderApiClientOptions,\n type BuilderApiContracts,\n type BuilderApiQuery,\n type BuilderApiQueryValue,\n type BuilderApiTransport,\n type BuilderFieldOptionsQuery,\n createBuilderApiClient,\n} from \"./api\";\nexport {\n createDynamicFormComponent,\n createDynamicListComponent,\n createDynamicViewComponent,\n createRuntimeEntryDialogComponent,\n type DynamicFormContracts,\n type DynamicFormDependencies,\n type DynamicFormErrorStateProps,\n type DynamicFormFieldsProps,\n type DynamicFormNotifications,\n type DynamicFormProps,\n type DynamicFormShellProps,\n type DynamicFormSubmitProps,\n type DynamicListContracts,\n type DynamicListDataGridProps,\n type DynamicListDependencies,\n type DynamicListErrorStateProps,\n type DynamicListProps,\n type DynamicViewAddButtonProps,\n type DynamicViewColumnActions,\n type DynamicViewContracts,\n type DynamicViewDataGridProps,\n type DynamicViewDeleteDialogProps,\n type DynamicViewDependencies,\n type DynamicViewEntryDialogProps,\n type DynamicViewErrorStateProps,\n type DynamicViewInteractionEvent,\n type DynamicViewProps,\n shouldHandleDynamicViewRowClick,\n type RuntimeEntryDialogActionsProps,\n type RuntimeEntryDialogDependencies,\n type RuntimeEntryDialogFieldsProps,\n type RuntimeEntryDialogNotifications,\n type RuntimeEntryDialogProps,\n type RuntimeEntryDialogSaveArgs,\n type RuntimeEntryDialogShellProps,\n type RuntimeEntryDialogViewLike,\n} from \"./components\";\nexport { type BuilderHooks, createBuilderHooks, createBuilderKeys } from \"./hooks\";\nexport {\n type BuilderIntegration,\n type BuilderIntegrationConfig,\n type BuilderIntegrationRoutes,\n type BuilderFrontendSetupValidation,\n createBuilderIntegration,\n createBuilderPortalIntegration,\n validateBuilderFrontendSetup,\n} from \"./integration\";\nexport {\n type BuilderRuntimeEntryLike,\n type BuilderRuntimeEntryValues,\n type BuilderRuntimeFieldLike,\n type BuilderRuntimeFormSchemaLike,\n type BuilderRuntimeFormValues,\n type BuilderRuntimePresentation,\n type BuilderRuntimeViewLike,\n createBuilderEntryDefaultValues,\n createBuilderFormDefaultValues,\n formatBuilderRuntimeValue,\n} from \"./runtime\";\n"],"mappings":"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","names":["useMemo","useState","FormProvider","useForm","useRef","jsx","jsxs","useRef","error","useRef","jsx","jsxs","useEffect","useMemo","useRef","useState","useMemo","useState","jsx","jsxs","useState","useMemo","jsx","jsxs","useState","useRef","useMemo","useEffect","jsx","jsxs","useMemo","useForm","FormProvider","useState","dataKey","jsx","jsxs","useMemo","useState","jsx","jsxs","styles","useEffect","useForm","jsx","jsxs","styles","useForm","useEffect","useEffect","FormProvider","useForm","useWatch","jsx","useForm","useWatch","useEffect","FormProvider","jsx","jsxs","useCallback","useMemo","useState","jsx","jsxs","useEffect","FormProvider","useForm","jsx","useForm","useEffect","FormProvider","useMemo","useWatch","useWatch","useMemo","useMemo","FormProvider","useForm","jsx","jsxs","useMemo","useForm","FormProvider","useMemo","jsx","useMemo","useState","jsx","jsxs","useEffect","useMemo","useState","FormProvider","useForm","jsx","jsxs","useState","useForm","useMemo","useEffect","dataKey","FormProvider"]}
|
|
1
|
+
{"version":3,"sources":["../src/ready/BuilderProvider.tsx","../src/api/createBuilderApiClient.ts","../src/hooks/createBuilderHooks.ts","../src/ready/BuilderRuntimeComponents.tsx","../src/runtime/runtimeUtils.ts","../src/ready/ReadyFields.tsx","../src/ready/ReadyOverlay.tsx","../src/ready/ReadySubform.tsx","../src/ready/ReadyTable.tsx","../src/admin/editorState.ts","../src/admin/BuilderDefaultEditorBodies.tsx","../src/admin/BuilderDefaultEntityManager.tsx","../src/admin/BuilderDefaultViewEditorPage.tsx","../src/admin/BuilderEditorPage.tsx","../src/admin/BuilderAdminPages.tsx","../src/admin/BuilderEntityManager.tsx","../src/admin/BuilderViewDialog.tsx","../src/admin/formLayoutEditorState.ts","../src/components/DynamicForm.tsx","../src/components/DynamicList.tsx","../src/components/DynamicView.tsx","../src/components/RuntimeEntryDialog.tsx","../src/integration/createBuilderIntegration.ts","../src/index.ts"],"sourcesContent":["\"use client\";\n\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n type BuilderApiClient,\n type BuilderApiTransport,\n createBuilderApiClient,\n} from \"../api\";\nimport { type BuilderHooks, createBuilderHooks } from \"../hooks\";\nimport type { ReadyBuilderContracts } from \"./contracts\";\n\nexport type BuilderNotification = {\n type: \"success\" | \"error\" | \"info\" | \"warning\";\n message: string;\n};\n\nexport type BuilderClient = BuilderApiClient<ReadyBuilderContracts>;\n\nexport type CreateBuilderClientOptions = {\n transport: BuilderApiTransport;\n apiBasePath?: string;\n};\n\nexport function createBuilderClient({ transport, apiBasePath }: CreateBuilderClientOptions) {\n return createBuilderApiClient<ReadyBuilderContracts>(transport, { apiBasePath });\n}\n\ntype BuilderContextValue = {\n client: BuilderClient;\n hooks: BuilderHooks<ReadyBuilderContracts>;\n notify(notification: BuilderNotification): void;\n};\n\nconst BuilderContext = createContext<BuilderContextValue | null>(null);\n\nexport type BuilderProviderProps = {\n children: ReactNode;\n client?: BuilderClient;\n transport?: BuilderApiTransport;\n apiBasePath?: string;\n queryClient?: QueryClient;\n onNotify?(notification: BuilderNotification): void;\n};\n\nexport function BuilderProvider({\n children,\n client: configuredClient,\n transport,\n apiBasePath,\n queryClient,\n onNotify,\n}: BuilderProviderProps) {\n if (!configuredClient && !transport) {\n throw new Error(\"BuilderProvider-д client эсвэл transport өгнө үү.\");\n }\n\n const internalClient = useMemo(\n () => configuredClient ?? createBuilderClient({ transport: transport as BuilderApiTransport, apiBasePath }),\n [apiBasePath, configuredClient, transport],\n );\n const hooks = useMemo(() => createBuilderHooks<ReadyBuilderContracts>(internalClient), [internalClient]);\n const [notifications, setNotifications] = useState<Array<BuilderNotification & { id: number }>>([]);\n const notificationId = useRef(0);\n const notify = useCallback((notification: BuilderNotification) => {\n const id = ++notificationId.current;\n setNotifications((current) => [...current.slice(-2), { ...notification, id }]);\n onNotify?.(notification);\n }, [onNotify]);\n const internalQueryClient = useRef<QueryClient | null>(null);\n if (!internalQueryClient.current) internalQueryClient.current = queryClient ?? new QueryClient();\n\n const value = useMemo<BuilderContextValue>(\n () => ({ client: internalClient, hooks, notify }),\n [hooks, internalClient, notify],\n );\n\n return (\n <QueryClientProvider client={internalQueryClient.current}>\n <BuilderContext.Provider value={value}>\n {children}\n <div className=\"builder-notifications\" aria-live=\"polite\" aria-atomic=\"true\">\n {notifications.map((notification) => (\n <div key={notification.id} className={`builder-notification builder-notification--${notification.type}`}>\n <span>{notification.message}</span>\n <button type=\"button\" aria-label=\"Мэдэгдэл хаах\" onClick={() => setNotifications((current) => current.filter((item) => item.id !== notification.id))}>×</button>\n </div>\n ))}\n </div>\n </BuilderContext.Provider>\n </QueryClientProvider>\n );\n}\n\nexport function useBuilderRuntime() {\n const context = useContext(BuilderContext);\n if (!context) throw new Error(\"Builder component-ийг BuilderProvider дотор render хийнэ үү.\");\n return context;\n}\n\nexport function builderErrorMessage(error: unknown, fallback: string) {\n if (error instanceof Error && error.message.trim()) return error.message;\n return fallback;\n}\n","export type BuilderApiQueryValue = string | number | boolean | null | undefined;\nexport type BuilderApiQuery = Record<string, BuilderApiQueryValue>;\n\nexport type BuilderApiTransport = {\n get<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n post<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n patch<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n delete<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n};\n\nexport type BuilderFieldOptionsQuery = {\n search?: string;\n depends?: Record<string, string | undefined>;\n};\n\nexport type BuilderApiClientOptions = {\n apiBasePath?: string;\n};\n\nexport type BuilderApiContracts = {\n BuilderDbTable: unknown;\n BuilderForm: { id: string };\n BuilderList: { id: string };\n BuilderView: { id: string };\n BuilderViewEntry: { id: string };\n ListBuilderFormsQuery: object;\n ListBuilderFormsResponse: unknown;\n CreateBuilderFormInput: unknown;\n UpdateBuilderFormInput: unknown;\n ListBuilderListsQuery: object;\n ListBuilderListsResponse: unknown;\n CreateBuilderListInput: unknown;\n UpdateBuilderListInput: unknown;\n ListBuilderViewsQuery: object;\n ListBuilderViewsResponse: unknown;\n CreateBuilderViewInput: unknown;\n UpdateBuilderViewInput: unknown;\n ReplicateBuilderEntityInput: unknown;\n CreateBuilderViewEntryInput: unknown;\n CreateCompositeBuilderViewEntryInput: unknown;\n UpdateCompositeBuilderViewEntryInput: unknown;\n UpdateBuilderViewEntryInput: unknown;\n ListBuilderFieldOptionsQuery: BuilderFieldOptionsQuery;\n ListBuilderFieldOptionsResponse: unknown;\n RunBuilderFieldTriggerInput: unknown;\n BuilderFieldTriggerEvent: string;\n BuilderFieldTriggerResponse: unknown;\n ListBuilderViewEntriesQuery: object;\n ListBuilderViewEntriesResponse: unknown;\n};\n\nfunction queryParams(query: object): BuilderApiQuery {\n return { ...query } as BuilderApiQuery;\n}\n\nfunction fieldOptionsQueryParams(query: BuilderFieldOptionsQuery): BuilderApiQuery {\n const flatQuery: BuilderApiQuery = { search: query.search };\n for (const [key, value] of Object.entries(query.depends ?? {})) {\n flatQuery[`depends.${key}`] = value;\n }\n return flatQuery;\n}\n\nexport function createBuilderApiClient<C extends BuilderApiContracts>(\n rootTransport: BuilderApiTransport,\n options: BuilderApiClientOptions = {},\n) {\n const basePath = options.apiBasePath?.trim().replace(/\\/+$/g, \"\") ?? \"\";\n const path = (value: string) => `${basePath}${value}`;\n const transport: BuilderApiTransport = {\n get: (value, requestOptions) => rootTransport.get(path(value), requestOptions),\n post: (value, body, requestOptions) => rootTransport.post(path(value), body, requestOptions),\n patch: (value, body, requestOptions) => rootTransport.patch(path(value), body, requestOptions),\n delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions),\n };\n\n return {\n listBuilderForms: (query: C[\"ListBuilderFormsQuery\"]) =>\n transport.get<C[\"ListBuilderFormsResponse\"]>(\"/builder/forms\", {\n query: queryParams(query),\n }),\n\n listBuilderDbTables: () =>\n transport.get<C[\"BuilderDbTable\"][]>(\"/builder/datasources/tables\"),\n\n listBuilderFormOptions: () =>\n transport.get<C[\"BuilderForm\"][]>(\"/builder/forms/options\"),\n\n getBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`),\n\n createBuilderForm: (input: C[\"CreateBuilderFormInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(\"/builder/forms\", input),\n\n updateBuilderForm: (id: string, input: C[\"UpdateBuilderFormInput\"]) =>\n transport.patch<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`, input),\n\n replicateBuilderForm: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderForm: (id: string) =>\n transport.delete<void>(`/builder/forms/${encodeURIComponent(id)}`),\n\n listBuilderLists: (query: C[\"ListBuilderListsQuery\"]) =>\n transport.get<C[\"ListBuilderListsResponse\"]>(\"/builder/lists\", {\n query: queryParams(query),\n }),\n\n listBuilderListOptions: () => transport.get<C[\"BuilderList\"][]>(\"/builder/lists/options\"),\n\n getBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`),\n\n createBuilderList: (input: C[\"CreateBuilderListInput\"]) =>\n transport.post<C[\"BuilderList\"]>(\"/builder/lists\", input),\n\n updateBuilderList: (id: string, input: C[\"UpdateBuilderListInput\"]) =>\n transport.patch<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`, input),\n\n replicateBuilderList: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderList: (id: string) =>\n transport.delete<void>(`/builder/lists/${encodeURIComponent(id)}`),\n\n listBuilderViews: (query: C[\"ListBuilderViewsQuery\"]) =>\n transport.get<C[\"ListBuilderViewsResponse\"]>(\"/builder/views\", {\n query: queryParams(query),\n }),\n\n getBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`),\n\n createBuilderView: (input: C[\"CreateBuilderViewInput\"]) =>\n transport.post<C[\"BuilderView\"]>(\"/builder/views\", input),\n\n updateBuilderView: (id: string, input: C[\"UpdateBuilderViewInput\"]) =>\n transport.patch<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`, input),\n\n replicateBuilderView: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderView: (id: string) =>\n transport.delete<void>(`/builder/views/${encodeURIComponent(id)}`),\n\n getRuntimeBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/runtime/forms/${encodeURIComponent(id)}`),\n\n createRuntimeBuilderFormEntry: (formId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/entries`,\n input,\n ),\n\n listRuntimeBuilderFormFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) =>\n transport.get<C[\"ListBuilderFieldOptionsResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/options`,\n { query: fieldOptionsQueryParams(query) },\n ),\n\n runRuntimeBuilderFormFieldTrigger: (\n formId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n getRuntimeBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/runtime/lists/${encodeURIComponent(id)}`),\n\n listRuntimeBuilderListEntries: (listId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/lists/${encodeURIComponent(listId)}/entries`,\n { query: queryParams(query) },\n ),\n\n getRuntimeBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/runtime/views/${encodeURIComponent(id)}`),\n\n runRuntimeBuilderViewFieldTrigger: (\n viewId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n listBuilderViewEntries: (viewId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n { query: queryParams(query) },\n ),\n\n createBuilderViewEntry: (viewId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n input,\n ),\n\n createCompositeBuilderViewEntry: (\n viewId: string,\n input: C[\"CreateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries`,\n input,\n ),\n\n updateCompositeBuilderViewEntry: (\n viewId: string,\n id: string,\n input: C[\"UpdateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n updateBuilderViewEntry: (viewId: string, id: string, input: C[\"UpdateBuilderViewEntryInput\"]) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n deleteBuilderViewEntry: (viewId: string, id: string) =>\n transport.delete<void>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n ),\n };\n}\n\nexport type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<\n typeof createBuilderApiClient<C>\n>;\n","\"use client\";\n\nimport { keepPreviousData, useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { BuilderApiClient, BuilderApiContracts } from \"../api\";\n\nexport function createBuilderKeys<C extends BuilderApiContracts>() {\n const builderKeys = {\n forms: [\"builder\", \"forms\"] as const,\n dbTables: () => [\"builder\", \"datasources\", \"tables\"] as const,\n formList: (query: C[\"ListBuilderFormsQuery\"]) => [...builderKeys.forms, \"list\", query] as const,\n form: (id: string) => [...builderKeys.forms, \"detail\", id] as const,\n formOptions: () => [...builderKeys.forms, \"options\"] as const,\n lists: [\"builder\", \"lists\"] as const,\n listList: (query: C[\"ListBuilderListsQuery\"]) => [...builderKeys.lists, \"list\", query] as const,\n list: (id: string) => [...builderKeys.lists, \"detail\", id] as const,\n listOptions: () => [...builderKeys.lists, \"options\"] as const,\n views: [\"builder\", \"views\"] as const,\n viewList: (query: C[\"ListBuilderViewsQuery\"]) => [...builderKeys.views, \"list\", query] as const,\n view: (id: string) => [...builderKeys.views, \"detail\", id] as const,\n runtimeForm: (id: string) => [\"builder\", \"runtime\", \"form\", id] as const,\n runtimeFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) => [...builderKeys.runtimeForm(formId), \"fields\", fieldKey, \"options\", query] as const,\n runtimeFormEntries: (id: string) => [...builderKeys.runtimeForm(id), \"entries\"] as const,\n runtimeList: (id: string) => [\"builder\", \"runtime\", \"list\", id] as const,\n runtimeListEntries: (id: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n [...builderKeys.runtimeList(id), \"entries\", query] as const,\n runtimeView: (id: string) => [\"builder\", \"runtime\", \"view\", id] as const,\n entries: (id: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n [...builderKeys.runtimeView(id), \"entries\", query] as const,\n };\n\n return builderKeys;\n}\n\nexport function createBuilderHooks<C extends BuilderApiContracts>(client: BuilderApiClient<C>) {\n const builderKeys = createBuilderKeys<C>();\n\n function invalidateRuntimeViewEntries(\n queryClient: ReturnType<typeof useQueryClient>,\n viewId: string,\n ) {\n return Promise.all([\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeView(viewId) }),\n queryClient.invalidateQueries({ queryKey: [...builderKeys.runtimeView(viewId), \"entries\"] }),\n ]);\n }\n\n function useBuilderDbTables() {\n return useQuery({ queryKey: builderKeys.dbTables(), queryFn: client.listBuilderDbTables });\n }\n\n function useBuilderForms(query: C[\"ListBuilderFormsQuery\"]) {\n return useQuery({\n queryKey: builderKeys.formList(query),\n queryFn: () => client.listBuilderForms(query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useBuilderFormOptions() {\n return useQuery({\n queryKey: builderKeys.formOptions(),\n queryFn: client.listBuilderFormOptions,\n });\n }\n\n function useBuilderForm(id?: string) {\n return useQuery({\n queryKey: builderKeys.form(id ?? \"\"),\n queryFn: () => client.getBuilderForm(id ?? \"\"),\n enabled: Boolean(id),\n });\n }\n\n function useSaveBuilderForm() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderFormInput\"] }) =>\n id\n ? client.updateBuilderForm(id, input)\n : client.createBuilderForm(input as unknown as C[\"CreateBuilderFormInput\"]),\n onSuccess: (form) => {\n queryClient.invalidateQueries({ queryKey: builderKeys.forms });\n queryClient.invalidateQueries({ queryKey: builderKeys.form(form.id) });\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeForm(form.id) });\n },\n });\n }\n\n function useReplicateBuilderForm() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id: string; input: C[\"ReplicateBuilderEntityInput\"] }) =>\n client.replicateBuilderForm(id, input),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.forms }),\n });\n }\n\n function useDeleteBuilderForm() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: client.deleteBuilderForm,\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.forms }),\n });\n }\n\n function useBuilderLists(query: C[\"ListBuilderListsQuery\"]) {\n return useQuery({\n queryKey: builderKeys.listList(query),\n queryFn: () => client.listBuilderLists(query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useBuilderListOptions() {\n return useQuery({\n queryKey: builderKeys.listOptions(),\n queryFn: client.listBuilderListOptions,\n });\n }\n\n function useBuilderList(id?: string) {\n return useQuery({\n queryKey: builderKeys.list(id ?? \"\"),\n queryFn: () => client.getBuilderList(id ?? \"\"),\n enabled: Boolean(id),\n });\n }\n\n function useSaveBuilderList() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderListInput\"] }) =>\n id\n ? client.updateBuilderList(id, input)\n : client.createBuilderList(input as unknown as C[\"CreateBuilderListInput\"]),\n onSuccess: (list) => {\n queryClient.invalidateQueries({ queryKey: builderKeys.lists });\n queryClient.invalidateQueries({ queryKey: builderKeys.list(list.id) });\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeList(list.id) });\n },\n });\n }\n\n function useReplicateBuilderList() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id: string; input: C[\"ReplicateBuilderEntityInput\"] }) =>\n client.replicateBuilderList(id, input),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.lists }),\n });\n }\n\n function useDeleteBuilderList() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: client.deleteBuilderList,\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.lists }),\n });\n }\n\n function useBuilderViews(query: C[\"ListBuilderViewsQuery\"]) {\n return useQuery({\n queryKey: builderKeys.viewList(query),\n queryFn: () => client.listBuilderViews(query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useBuilderView(id?: string) {\n return useQuery({\n queryKey: builderKeys.view(id ?? \"\"),\n queryFn: () => client.getBuilderView(id ?? \"\"),\n enabled: Boolean(id),\n });\n }\n\n function useSaveBuilderView() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderViewInput\"] }) =>\n id\n ? client.updateBuilderView(id, input)\n : client.createBuilderView(input as unknown as C[\"CreateBuilderViewInput\"]),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.views }),\n });\n }\n\n function useReplicateBuilderView() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id: string; input: C[\"ReplicateBuilderEntityInput\"] }) =>\n client.replicateBuilderView(id, input),\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.views }),\n });\n }\n\n function useDeleteBuilderView() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: client.deleteBuilderView,\n onSuccess: () => queryClient.invalidateQueries({ queryKey: builderKeys.views }),\n });\n }\n\n function useRuntimeBuilderForm(id: string) {\n return useQuery({\n queryKey: builderKeys.runtimeForm(id),\n queryFn: () => client.getRuntimeBuilderForm(id),\n });\n }\n\n function useRuntimeBuilderFormFieldOptions(\n formId: string | undefined,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n enabled = true,\n ) {\n return useQuery({\n queryKey: builderKeys.runtimeFieldOptions(formId ?? \"\", fieldKey, query),\n queryFn: () => client.listRuntimeBuilderFormFieldOptions(formId ?? \"\", fieldKey, query),\n enabled: Boolean(formId) && enabled,\n });\n }\n\n function useRunRuntimeBuilderFieldTrigger() {\n return useMutation({\n mutationFn: (args: {\n formId?: string;\n viewId?: string;\n fieldKey: string;\n event: C[\"BuilderFieldTriggerEvent\"];\n input: C[\"RunBuilderFieldTriggerInput\"];\n }) => {\n if (args.viewId) {\n return client.runRuntimeBuilderViewFieldTrigger(\n args.viewId,\n args.fieldKey,\n args.event,\n args.input,\n );\n }\n if (args.formId) {\n return client.runRuntimeBuilderFormFieldTrigger(\n args.formId,\n args.fieldKey,\n args.event,\n args.input,\n );\n }\n throw new Error(\"formId эсвэл viewId шаардлагатай\");\n },\n });\n }\n\n function useRuntimeBuilderList(id: string) {\n return useQuery({\n queryKey: builderKeys.runtimeList(id),\n queryFn: () => client.getRuntimeBuilderList(id),\n });\n }\n\n function useRuntimeBuilderListEntries(id: string, query: C[\"ListBuilderViewEntriesQuery\"]) {\n return useQuery({\n queryKey: builderKeys.runtimeListEntries(id, query),\n queryFn: () => client.listRuntimeBuilderListEntries(id, query),\n placeholderData: keepPreviousData,\n });\n }\n\n function useSaveRuntimeBuilderFormEntry(formId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (input: C[\"CreateBuilderViewEntryInput\"]) =>\n client.createRuntimeBuilderFormEntry(formId, input),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeFormEntries(formId) });\n queryClient.invalidateQueries({ queryKey: builderKeys.runtimeForm(formId) });\n queryClient.invalidateQueries({ queryKey: [\"builder\", \"runtime\", \"list\"] });\n },\n });\n }\n\n function useRuntimeBuilderView(id: string, enabled = true) {\n return useQuery({\n queryKey: builderKeys.runtimeView(id),\n queryFn: () => client.getRuntimeBuilderView(id),\n enabled: Boolean(id) && enabled,\n });\n }\n\n function useBuilderViewEntries(\n id: string,\n query: C[\"ListBuilderViewEntriesQuery\"],\n enabled = true,\n ) {\n return useQuery({\n queryKey: builderKeys.entries(id, query),\n queryFn: () => client.listBuilderViewEntries(id, query),\n placeholderData: keepPreviousData,\n enabled: Boolean(id) && enabled,\n });\n }\n\n function useSaveBuilderViewEntry(viewId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, input }: { id?: string; input: C[\"UpdateBuilderViewEntryInput\"] }) =>\n id\n ? client.updateBuilderViewEntry(viewId, id, input)\n : client.createBuilderViewEntry(\n viewId,\n input as unknown as C[\"CreateBuilderViewEntryInput\"],\n ),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, viewId),\n });\n }\n\n function useCreateCompositeBuilderViewEntry(viewId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (input: C[\"CreateCompositeBuilderViewEntryInput\"]) =>\n client.createCompositeBuilderViewEntry(viewId, input),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, viewId),\n });\n }\n\n function useUpdateCompositeBuilderViewEntry(viewId: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n input,\n }: {\n id: string;\n input: C[\"UpdateCompositeBuilderViewEntryInput\"];\n }) => client.updateCompositeBuilderViewEntry(viewId, id, input),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, viewId),\n });\n }\n\n function useDeleteBuilderViewEntry(id: string) {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (entryId: string) => client.deleteBuilderViewEntry(id, entryId),\n onSuccess: () => invalidateRuntimeViewEntries(queryClient, id),\n });\n }\n\n return {\n builderKeys,\n useBuilderDbTables,\n useBuilderForm,\n useBuilderFormOptions,\n useBuilderForms,\n useBuilderList,\n useBuilderListOptions,\n useBuilderLists,\n useBuilderViewEntries,\n useBuilderView,\n useBuilderViews,\n useDeleteBuilderForm,\n useDeleteBuilderList,\n useDeleteBuilderView,\n useDeleteBuilderViewEntry,\n useCreateCompositeBuilderViewEntry,\n useReplicateBuilderForm,\n useReplicateBuilderList,\n useReplicateBuilderView,\n useRuntimeBuilderForm,\n useRuntimeBuilderFormFieldOptions,\n useRuntimeBuilderList,\n useRuntimeBuilderListEntries,\n useRuntimeBuilderView,\n useRunRuntimeBuilderFieldTrigger,\n useSaveBuilderForm,\n useSaveBuilderList,\n useSaveBuilderView,\n useSaveBuilderViewEntry,\n useSaveRuntimeBuilderFormEntry,\n useUpdateCompositeBuilderViewEntry,\n };\n}\n\nexport type BuilderHooks<C extends BuilderApiContracts> = ReturnType<typeof createBuilderHooks<C>>;\n","\"use client\";\n\nimport type { BuilderFormSubform, BuilderView, BuilderViewEntry } from \"@duke333/builder-contracts\";\nimport { useMemo, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport {\n createBuilderEntryDefaultValues,\n createBuilderFormDefaultValues,\n type BuilderRuntimeEntryValues,\n type BuilderRuntimeFormValues,\n} from \"../runtime\";\nimport { builderErrorMessage, useBuilderRuntime } from \"./BuilderProvider\";\nimport { ReadyFields } from \"./ReadyFields\";\nimport { ReadyConfirmDialog, ReadyErrorState, ReadyOverlay } from \"./ReadyOverlay\";\nimport { ReadySubform, type ReadySubformRowsChange } from \"./ReadySubform\";\nimport {\n ReadyDataGrid,\n type ReadyColumn,\n readyColumns,\n useReadyTable,\n useReadyTableState,\n} from \"./ReadyTable\";\n\nexport type BuilderFormProps = { formId: string };\nexport type BuilderGridProps = { listId: string };\nexport type BuilderViewProps = { viewId: string };\n\nexport function BuilderForm({ formId }: BuilderFormProps) {\n const { hooks, notify } = useBuilderRuntime();\n const query = hooks.useRuntimeBuilderForm(formId);\n const save = hooks.useSaveRuntimeBuilderFormEntry(formId);\n const defaults = useMemo(() => createBuilderFormDefaultValues(query.data?.schema), [query.data]);\n const form = useForm<BuilderRuntimeFormValues>({ defaultValues: defaults, values: query.data ? defaults : undefined });\n\n if (query.isError) return <ReadyErrorState title=\"Form нээгдсэнгүй\" description={builderErrorMessage(query.error, `«${formId}» form олдсонгүй`)} />;\n if (!query.data) return <div className=\"builder-state\">Form уншиж байна…</div>;\n\n const submit = form.handleSubmit(async (input) => {\n try {\n await save.mutateAsync(input);\n form.reset(defaults);\n notify({ type: \"success\", message: \"Form хадгалагдлаа\" });\n } catch (error) {\n notify({ type: \"error\", message: builderErrorMessage(error, \"Хадгалахад алдаа гарлаа\") });\n }\n });\n\n return (\n <section className=\"builder-card\">\n <h2 className=\"builder-title\">{query.data.title}</h2>\n {query.data.description ? <p className=\"builder-description\">{query.data.description}</p> : null}\n <FormProvider {...form}>\n <form className=\"builder-form\" onSubmit={submit} noValidate>\n <ReadyFields formId={formId} schema={query.data.schema} />\n <div className=\"builder-actions\">\n <button className=\"builder-button builder-button--primary\" type=\"submit\" disabled={save.isPending}>\n {save.isPending ? \"Хадгалж байна…\" : \"Хадгалах\"}\n </button>\n </div>\n </form>\n </FormProvider>\n </section>\n );\n}\n\nexport function BuilderGrid({ listId }: BuilderGridProps) {\n const { hooks } = useBuilderRuntime();\n const listQuery = hooks.useRuntimeBuilderList(listId);\n const state = useReadyTableState();\n const entriesQuery = hooks.useRuntimeBuilderListEntries(listId, state.query);\n const table = useReadyTable({\n columns: readyColumns(listQuery.data?.schema.columns ?? []),\n data: entriesQuery.data?.items ?? [],\n rowCount: entriesQuery.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n if (listQuery.isError) return <ReadyErrorState title=\"Grid нээгдсэнгүй\" description={builderErrorMessage(listQuery.error, `«${listId}» list олдсонгүй`)} />;\n return <ReadyDataGrid title={listQuery.data?.title ?? \"Grid\"} description={listQuery.data?.description} controller={table} isLoading={listQuery.isPending || entriesQuery.isPending} />;\n}\n\ntype DraftSubform = { dataKey: string; rows: BuilderViewEntry[] };\n\nfunction dbTableName(view: BuilderView) {\n if (view.list?.source?.type === \"dbTable\") return view.list.source.tableName;\n if (view.form?.source?.type === \"dbTable\") return view.form.source.tableName;\n return undefined;\n}\n\nfunction childPayload(row: BuilderViewEntry, includeIdentity: boolean) {\n const values = Object.fromEntries(Object.entries(row.values).filter(([key]) => key === \"_delete\" || !key.startsWith(\"_\")));\n return includeIdentity && row.values._draftNew !== true ? { id: row.id, version: row.version, ...values } : values;\n}\n\nfunction BuilderEntryEditor({ view, editing, open, onClose }: { view: BuilderView; editing: BuilderViewEntry | null; open: boolean; onClose(): void }) {\n const { hooks, notify } = useBuilderRuntime();\n const [subforms, setSubforms] = useState<Record<string, DraftSubform>>({});\n const save = hooks.useSaveBuilderViewEntry(view.id);\n const createComposite = hooks.useCreateCompositeBuilderViewEntry(view.id);\n const updateComposite = hooks.useUpdateCompositeBuilderViewEntry(view.id);\n const defaults = useMemo(() => createBuilderEntryDefaultValues(view, editing), [editing, view]);\n const form = useForm<BuilderRuntimeEntryValues>({ defaultValues: defaults, values: open ? defaults : undefined });\n\n const close = () => { setSubforms({}); onClose(); };\n const submit = form.handleSubmit(async (input) => {\n try {\n const mainKey = dbTableName(view);\n const hasSubformRows = Object.values(subforms).some((item) => item.rows.length > 0);\n if (hasSubformRows && mainKey) {\n const children = Object.fromEntries(Object.values(subforms).map((item) => [item.dataKey, item.rows.map((row) => childPayload(row, Boolean(editing)))]));\n if (editing) {\n await updateComposite.mutateAsync({ id: editing.id, input: { data: { [mainKey]: { id: editing.id, version: input.version, ...input.values }, ...children } } });\n } else {\n await createComposite.mutateAsync({ data: { [mainKey]: input.values, ...children } });\n }\n } else {\n await save.mutateAsync({ id: editing?.id, input });\n }\n notify({ type: \"success\", message: editing ? \"Мөр хадгалагдлаа\" : \"Мөр нэмэгдлээ\" });\n close();\n } catch (error) {\n notify({ type: \"error\", message: builderErrorMessage(error, \"Хадгалахад алдаа гарлаа\") });\n }\n });\n const saving = save.isPending || createComposite.isPending || updateComposite.isPending;\n const updateRows = ({ key, dataKey, rows }: ReadySubformRowsChange) => setSubforms((current) => ({ ...current, [key]: { dataKey, rows } }));\n\n return (\n <ReadyOverlay open={open} presentation={view.form?.schema.presentation} title={editing ? \"Мөр засах\" : \"Мөр нэмэх\"} description={view.title} onClose={close}>\n {view.form ? (\n <FormProvider {...form}>\n <form className=\"builder-form\" onSubmit={submit} noValidate>\n <ReadyFields formId={view.form.id} viewId={view.id} schema={view.form.schema} />\n {view.form.schema.subforms.map((subform: BuilderFormSubform) => (\n <ReadySubform key={subform.key} subform={subform} parentEntry={editing} rows={subforms[subform.key]?.rows ?? []} onRowsChange={updateRows} />\n ))}\n <div className=\"builder-actions builder-actions--sticky\">\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={close}>Болих</button>\n <button type=\"submit\" className=\"builder-button builder-button--primary\" disabled={saving}>{saving ? \"Хадгалж байна…\" : \"Хадгалах\"}</button>\n </div>\n </form>\n </FormProvider>\n ) : <ReadyErrorState title=\"Form холбоогүй\" description=\"Энэ view-д form тохируулаагүй байна.\" />}\n </ReadyOverlay>\n );\n}\n\nexport function BuilderView({ viewId }: BuilderViewProps) {\n const { hooks, notify } = useBuilderRuntime();\n const [editing, setEditing] = useState<BuilderViewEntry | null>(null);\n const [editorOpen, setEditorOpen] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<BuilderViewEntry | null>(null);\n const viewQuery = hooks.useRuntimeBuilderView(viewId);\n const state = useReadyTableState();\n const entriesQuery = hooks.useBuilderViewEntries(viewId, state.query);\n const remove = hooks.useDeleteBuilderViewEntry(viewId);\n const view = viewQuery.data;\n const columns = useMemo<ReadyColumn[]>(() => {\n const result = readyColumns(view?.list?.schema.columns ?? []);\n if (!view) return result;\n result.push({\n key: \"_actions\",\n label: \"Үйлдэл\",\n sortable: false,\n align: \"right\",\n render: (entry) => (\n <div className=\"builder-row-actions\" data-builder-row-action>\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={(event) => { event.stopPropagation(); setEditing(entry); setEditorOpen(true); }}>Засах</button>\n <button type=\"button\" className=\"builder-button builder-button--danger\" onClick={(event) => { event.stopPropagation(); setPendingDelete(entry); }}>Устгах</button>\n </div>\n ),\n });\n return result;\n }, [view]);\n const table = useReadyTable({ columns, data: entriesQuery.data?.items ?? [], rowCount: entriesQuery.data?.total ?? 0, state, getRowId: (row) => row.id });\n\n if (viewQuery.isError) return <ReadyErrorState title=\"View нээгдсэнгүй\" description={builderErrorMessage(viewQuery.error, `«${viewId}» view олдсонгүй`)} />;\n\n return (\n <div className=\"builder-runtime\">\n <ReadyDataGrid\n title={view?.title ?? \"View\"}\n description={view?.description}\n controller={table}\n isLoading={viewQuery.isPending || entriesQuery.isPending}\n onRowClick={(entry) => { setEditing(entry); setEditorOpen(true); }}\n toolbarExtra={<button type=\"button\" className=\"builder-button builder-button--primary\" disabled={!view?.form} onClick={() => { setEditing(null); setEditorOpen(true); }}>+ Нэмэх</button>}\n />\n {view ? <BuilderEntryEditor view={view} editing={editing} open={editorOpen} onClose={() => setEditorOpen(false)} /> : null}\n <ReadyConfirmDialog\n open={Boolean(pendingDelete)}\n title=\"Мөр устгах уу?\"\n description=\"Энэ үйлдлийг буцаах боломжгүй.\"\n isPending={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={() => {\n if (!pendingDelete) return;\n remove.mutate(pendingDelete.id, {\n onSuccess: () => { setPendingDelete(null); notify({ type: \"success\", message: \"Мөр устгагдлаа\" }); },\n onError: (error) => notify({ type: \"error\", message: builderErrorMessage(error, \"Устгахад алдаа гарлаа\") }),\n });\n }}\n />\n </div>\n );\n}\n","export type BuilderRuntimeFieldLike = {\n key: string;\n type: string;\n};\n\nexport type BuilderRuntimePresentation = \"dialog\" | \"drawer\";\n\nexport type BuilderRuntimeFormSchemaLike = {\n presentation?: BuilderRuntimePresentation;\n fields: readonly BuilderRuntimeFieldLike[];\n};\n\nexport type BuilderRuntimeViewLike = {\n form?: {\n schema: BuilderRuntimeFormSchemaLike;\n } | null;\n};\n\nexport type BuilderRuntimeEntryLike = {\n id: string;\n values: Record<string, unknown>;\n version: number;\n};\n\nexport type BuilderRuntimeFormValues = {\n values: Record<string, unknown>;\n};\n\nexport type BuilderRuntimeEntryValues = BuilderRuntimeFormValues & {\n version: number;\n};\n\nfunction emptyFieldValue(field: BuilderRuntimeFieldLike) {\n return field.type === \"checkbox\" ? false : \"\";\n}\n\nexport function createBuilderFormDefaultValues(\n schema?: BuilderRuntimeFormSchemaLike,\n): BuilderRuntimeFormValues {\n const values: Record<string, unknown> = {};\n for (const field of schema?.fields ?? []) {\n values[field.key] = emptyFieldValue(field);\n }\n return { values };\n}\n\nexport function createBuilderEntryDefaultValues(\n view: BuilderRuntimeViewLike,\n editing: BuilderRuntimeEntryLike | null,\n): BuilderRuntimeEntryValues {\n const values: Record<string, unknown> = {};\n for (const field of view.form?.schema.fields ?? []) {\n const existing = editing?.values[field.key];\n values[field.key] = existing === undefined ? emptyFieldValue(field) : existing;\n }\n return { values, version: editing?.version ?? 0 };\n}\n\nexport function formatBuilderRuntimeValue(value: unknown, locale = \"mn-MN\") {\n if (value === null || value === undefined || value === \"\") return \"—\";\n if (typeof value === \"boolean\") return value ? \"Тийм\" : \"Үгүй\";\n if (typeof value === \"number\") return new Intl.NumberFormat(locale).format(value);\n return String(value);\n}\n","\"use client\";\n\nimport type { BuilderField, BuilderFormSchema } from \"@duke333/builder-contracts\";\nimport { useRef } from \"react\";\nimport { useFormContext, useWatch } from \"react-hook-form\";\nimport type { BuilderRuntimeEntryValues, BuilderRuntimeFormValues } from \"../runtime\";\nimport { builderErrorMessage, useBuilderRuntime } from \"./BuilderProvider\";\n\ntype ReadyFieldsProps = {\n formId: string;\n viewId?: string;\n schema: BuilderFormSchema;\n extraItems?: Array<{ key: string; render(): React.ReactNode }>;\n};\n\nfunction inputType(field: BuilderField) {\n if (field.type === \"date\") return \"date\";\n if (field.type === \"number\" || field.type === \"money\") return \"number\";\n return \"text\";\n}\n\nfunction ReadyField({ field, formId, viewId }: { field: BuilderField; formId: string; viewId?: string }) {\n const { hooks, notify } = useBuilderRuntime();\n const form = useFormContext<BuilderRuntimeFormValues | BuilderRuntimeEntryValues>();\n const values = useWatch({ control: form.control, name: \"values\" }) ?? {};\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const source = field.optionsSource;\n const dependencyValue = source?.filterBy ? values[source.filterBy.valueFromField] : undefined;\n const depends = source?.filterBy && dependencyValue != null\n ? { [source.filterBy.valueFromField]: String(dependencyValue) }\n : undefined;\n const optionsQuery = hooks.useRuntimeBuilderFormFieldOptions(\n formId,\n field.key,\n { depends },\n Boolean(source),\n );\n const trigger = hooks.useRunRuntimeBuilderFieldTrigger();\n const name = `values.${field.key}` as const;\n\n if (field.hidden) return null;\n\n const runTrigger = (event: \"onChange\" | \"onBlur\", value: unknown) => {\n const definition = field.triggers.find((item) => item.enabled && item.event === event);\n if (!definition) return;\n const execute = async () => {\n try {\n const response = await trigger.mutateAsync({\n formId,\n viewId,\n fieldKey: field.key,\n event,\n input: { value, values: form.getValues(\"values\") },\n });\n for (const [key, patchedValue] of Object.entries(response.valuesPatch)) {\n form.setValue(`values.${key}`, patchedValue, { shouldDirty: true, shouldValidate: true });\n }\n for (const [key, message] of Object.entries(response.fieldErrors)) {\n form.setError(`values.${key}`, { message });\n }\n if (response.toast?.message) notify(response.toast);\n } catch (error) {\n notify({ type: \"error\", message: builderErrorMessage(error, \"Field action ажилласангүй\") });\n }\n };\n if (event === \"onChange\" && definition.debounceMs > 0) {\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => void execute(), definition.debounceMs);\n } else {\n void execute();\n }\n };\n\n const registration = form.register(name, {\n required: field.required ? `${field.label} шаардлагатай` : false,\n setValueAs:\n field.type === \"number\" || field.type === \"money\"\n ? (value) => (value === \"\" ? \"\" : Number(value))\n : undefined,\n onChange: (event) => runTrigger(\"onChange\", event.target.type === \"checkbox\" ? event.target.checked : event.target.value),\n onBlur: (event) => runTrigger(\"onBlur\", event.target.value),\n });\n const error = form.formState.errors.values?.[field.key];\n const options = source ? (optionsQuery.data ?? []) : (field.options ?? []);\n\n return (\n <label className=\"builder-field\">\n <span className=\"builder-field__label\">\n {field.label}{field.required ? <span aria-hidden=\"true\"> *</span> : null}\n </span>\n {field.type === \"textarea\" ? (\n <textarea className=\"builder-input builder-textarea\" placeholder={field.placeholder} disabled={field.disabled} {...registration} />\n ) : field.type === \"select\" ? (\n <select className=\"builder-input\" disabled={field.disabled || optionsQuery.isPending} {...registration}>\n <option value=\"\">{field.placeholder ?? \"Сонгох\"}</option>\n {options.map((option) => <option key={option.value} value={option.value}>{option.label}</option>)}\n </select>\n ) : field.type === \"checkbox\" ? (\n <input className=\"builder-checkbox\" type=\"checkbox\" disabled={field.disabled} {...registration} />\n ) : (\n <input className=\"builder-input\" type={inputType(field)} placeholder={field.placeholder} disabled={field.disabled} {...registration} />\n )}\n {field.description ? <small className=\"builder-field__description\">{field.description}</small> : null}\n {typeof error?.message === \"string\" ? <small className=\"builder-field__error\">{error.message}</small> : null}\n </label>\n );\n}\n\nexport function ReadyFields({ formId, viewId, schema, extraItems = [] }: ReadyFieldsProps) {\n const fields = new Map(schema.fields.map((field) => [field.key, field]));\n const rendered = new Set<string>();\n\n return (\n <div className=\"builder-form-fields\">\n {schema.layout?.groups.map((group) => (\n <fieldset key={group.id} className=\"builder-fieldset\">\n {group.title ? <legend>{group.title}</legend> : null}\n <div className=\"builder-form-grid\">\n {group.fields.map((item) => {\n const field = fields.get(item.key);\n if (!field) return null;\n rendered.add(field.key);\n return <div key={field.key} style={{ gridColumn: `span ${item.span}` }}><ReadyField field={field} formId={formId} viewId={viewId} /></div>;\n })}\n </div>\n </fieldset>\n ))}\n <div className=\"builder-form-grid\">\n {schema.fields.filter((field) => !rendered.has(field.key)).map((field) => (\n <div key={field.key} style={{ gridColumn: \"span 12\" }}><ReadyField field={field} formId={formId} viewId={viewId} /></div>\n ))}\n </div>\n {extraItems.map((item) => <div key={item.key}>{item.render()}</div>)}\n </div>\n );\n}\n","\"use client\";\n\nimport { type ReactNode, useEffect, useId, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { BuilderRuntimePresentation } from \"../runtime\";\n\nexport type ReadyOverlayProps = {\n open: boolean;\n presentation?: BuilderRuntimePresentation;\n title: string;\n description?: string;\n onClose(): void;\n children: ReactNode;\n};\n\nexport function ReadyOverlay({\n open,\n presentation = \"dialog\",\n title,\n description,\n onClose,\n children,\n}: ReadyOverlayProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n const onCloseRef = useRef(onClose);\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\n onCloseRef.current = onClose;\n const titleId = useId();\n\n useEffect(() => {\n setPortalRoot(document.body);\n }, []);\n\n useEffect(() => {\n if (!open || !portalRoot) return;\n const previous = document.activeElement as HTMLElement | null;\n panelRef.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onCloseRef.current();\n if (event.key === \"Tab\") {\n const focusable = Array.from(\n panelRef.current?.querySelectorAll<HTMLElement>(\n \"button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex='-1'])\",\n ) ?? [],\n );\n const first = focusable[0];\n const last = focusable.at(-1);\n if (event.shiftKey && document.activeElement === first && last) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last && first) {\n event.preventDefault();\n first.focus();\n }\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n const overflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.body.style.overflow = overflow;\n previous?.focus();\n };\n }, [open, portalRoot]);\n\n if (!open || !portalRoot) return null;\n\n return createPortal(\n <div className=\"builder-overlay\" role=\"presentation\" onMouseDown={(event) => event.target === event.currentTarget && onClose()}>\n <div\n ref={panelRef}\n className={`builder-overlay__panel builder-overlay__panel--${presentation}`}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n tabIndex={-1}\n >\n <header className=\"builder-overlay__header\">\n <div>\n <h2 id={titleId} className=\"builder-title\">{title}</h2>\n {description ? <p className=\"builder-description\">{description}</p> : null}\n </div>\n <button type=\"button\" className=\"builder-icon-button\" aria-label=\"Хаах\" onClick={onClose}>×</button>\n </header>\n <div className=\"builder-overlay__body\">{children}</div>\n </div>\n </div>,\n portalRoot,\n );\n}\n\nexport type ReadyConfirmDialogProps = {\n open: boolean;\n title: string;\n description?: string;\n confirmLabel?: string;\n isPending?: boolean;\n onClose(): void;\n onConfirm(): void;\n};\n\nexport function ReadyConfirmDialog({\n open,\n title,\n description,\n confirmLabel = \"Устгах\",\n isPending,\n onClose,\n onConfirm,\n}: ReadyConfirmDialogProps) {\n return (\n <ReadyOverlay open={open} title={title} description={description} onClose={onClose}>\n <div className=\"builder-actions\">\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={onClose}>Болих</button>\n <button type=\"button\" className=\"builder-button builder-button--danger\" disabled={isPending} onClick={onConfirm}>\n {isPending ? \"Түр хүлээнэ үү…\" : confirmLabel}\n </button>\n </div>\n </ReadyOverlay>\n );\n}\n\nexport function ReadyErrorState({ title, description }: { title: string; description: string }) {\n return (\n <div className=\"builder-state builder-state--error\" role=\"alert\">\n <strong>{title}</strong>\n <span>{description}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport type { BuilderFormSubform, BuilderViewEntry } from \"@duke333/builder-contracts\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { createBuilderEntryDefaultValues, type BuilderRuntimeEntryValues } from \"../runtime\";\nimport { builderErrorMessage, useBuilderRuntime } from \"./BuilderProvider\";\nimport { ReadyFields } from \"./ReadyFields\";\nimport { ReadyOverlay } from \"./ReadyOverlay\";\nimport { ReadyDataGrid, readyColumns, useReadyTable, useReadyTableState } from \"./ReadyTable\";\n\nexport type ReadySubformRowsChange = {\n key: string;\n dataKey: string;\n rows: BuilderViewEntry[];\n};\n\ntype ReadySubformProps = {\n subform: BuilderFormSubform;\n parentEntry: BuilderViewEntry | null;\n rows: BuilderViewEntry[];\n onRowsChange(change: ReadySubformRowsChange): void;\n};\n\nfunction linkedValue(entry: BuilderViewEntry | null, field: string) {\n if (!entry) return undefined;\n const value = field === \"id\" ? entry.id : entry.values[field];\n return typeof value === \"string\" || typeof value === \"number\" ? String(value) : undefined;\n}\n\nfunction dataKey(viewId: string, tableName?: string) {\n return tableName?.trim() || viewId;\n}\n\nfunction makeDraftEntry(viewId: string, values: BuilderRuntimeEntryValues, editing: BuilderViewEntry | null) {\n const now = new Date().toISOString();\n return {\n id: editing?.id ?? (globalThis.crypto?.randomUUID?.() ?? `draft-${Date.now()}`),\n viewId,\n values: editing ? values.values : { ...values.values, _draftNew: true },\n version: editing?.version ?? 0,\n createdAt: editing?.createdAt ?? now,\n updatedAt: now,\n } satisfies BuilderViewEntry;\n}\n\nexport function ReadySubform({ subform, parentEntry, rows, onRowsChange }: ReadySubformProps) {\n const { hooks, notify } = useBuilderRuntime();\n const [open, setOpen] = useState(false);\n const [editing, setEditing] = useState<BuilderViewEntry | null>(null);\n const initialized = useRef(false);\n const parentValue = linkedValue(parentEntry, subform.parentField);\n const viewQuery = hooks.useRuntimeBuilderView(subform.viewId, Boolean(subform.viewId));\n const tableState = useReadyTableState({ pageSize: 100 });\n const filterQuery = useMemo(\n () => ({ ...tableState.query, filterField: subform.childField, filterValue: parentValue ?? \"\" }),\n [parentValue, subform.childField, tableState.query],\n );\n const entriesQuery = hooks.useBuilderViewEntries(subform.viewId, filterQuery, Boolean(parentValue));\n const view = viewQuery.data;\n const source = view?.list?.source?.type === \"dbTable\" ? view.list.source.tableName : undefined;\n\n useEffect(() => {\n if (initialized.current || !view || !entriesQuery.data || !parentValue) return;\n initialized.current = true;\n onRowsChange({ key: subform.key, dataKey: dataKey(view.id, source), rows: entriesQuery.data.items });\n }, [entriesQuery.data, onRowsChange, parentValue, source, subform.key, view]);\n\n const visibleRows = rows.filter((row) => row.values._delete !== true);\n const removeRow = (row: BuilderViewEntry) => {\n initialized.current = true;\n const nextRows = row.values._draftNew === true\n ? rows.filter((item) => item.id !== row.id)\n : rows.map((item) => item.id === row.id ? { ...item, values: { ...item.values, _delete: true } } : item);\n onRowsChange({ key: subform.key, dataKey: dataKey(view?.id ?? subform.viewId, source), rows: nextRows });\n notify({ type: \"info\", message: \"Subform мөр устгахаар тэмдэглэгдлээ\" });\n };\n const columns = useMemo(() => [\n ...readyColumns(view?.list?.schema.columns ?? []),\n {\n key: \"_actions\",\n label: \"Үйлдэл\",\n sortable: false,\n align: \"right\" as const,\n render: (row: BuilderViewEntry) => (\n <button type=\"button\" className=\"builder-link builder-link--danger\" onClick={(event) => { event.stopPropagation(); removeRow(row); }}>\n Устгах\n </button>\n ),\n },\n ], [rows, source, subform.key, subform.viewId, view]);\n const table = useReadyTable({\n columns,\n data: visibleRows,\n rowCount: visibleRows.length,\n state: tableState,\n getRowId: (row) => row.id,\n });\n const form = useForm<BuilderRuntimeEntryValues>({\n defaultValues: createBuilderEntryDefaultValues(view ?? {}, editing),\n values: open ? createBuilderEntryDefaultValues(view ?? {}, editing) : undefined,\n });\n\n const close = () => {\n setOpen(false);\n setEditing(null);\n };\n const save = form.handleSubmit((values) => {\n if (!view) return;\n if (parentValue) values.values[subform.childField] = parentValue;\n const next = makeDraftEntry(view.id, values, editing);\n initialized.current = true;\n onRowsChange({\n key: subform.key,\n dataKey: dataKey(view.id, source),\n rows: editing ? rows.map((row) => (row.id === editing.id ? next : row)) : [...rows, next],\n });\n close();\n });\n\n if (viewQuery.isError) {\n return <div className=\"builder-state builder-state--error\">{builderErrorMessage(viewQuery.error, `${subform.label} нээгдсэнгүй`)}</div>;\n }\n\n return (\n <section className=\"builder-subform\">\n <div className=\"builder-subform__header\">\n <strong>{subform.label}</strong>\n <button type=\"button\" className=\"builder-button builder-button--secondary\" disabled={!view?.form} onClick={() => { setEditing(null); setOpen(true); }}>\n + {subform.buttonLabel ?? \"Нэмэх\"}\n </button>\n </div>\n {visibleRows.length > 0 || (Boolean(parentValue) && entriesQuery.isPending) ? (\n <ReadyDataGrid\n controller={table}\n isLoading={Boolean(parentValue) && entriesQuery.isPending}\n onRowClick={(row) => { setEditing(row); setOpen(true); }}\n emptyTitle=\"Мөр алга\"\n />\n ) : null}\n {view?.form ? (\n <ReadyOverlay open={open} presentation={subform.presentation} title={subform.label} description={view.title} onClose={close}>\n <FormProvider {...form}>\n <form className=\"builder-form\" onSubmit={save} noValidate>\n <ReadyFields formId={view.form.id} viewId={view.id} schema={view.form.schema} />\n <div className=\"builder-actions\">\n <button type=\"button\" className=\"builder-button builder-button--ghost\" onClick={close}>Болих</button>\n <button type=\"submit\" className=\"builder-button builder-button--primary\">Хадгалах</button>\n </div>\n </form>\n </FormProvider>\n </ReadyOverlay>\n ) : null}\n </section>\n );\n}\n","\"use client\";\n\nimport type { BuilderColumn, BuilderViewEntry, ListBuilderViewEntriesQuery } from \"@duke333/builder-contracts\";\nimport { type ReactNode, useMemo, useState } from \"react\";\nimport { formatBuilderRuntimeValue } from \"../runtime\";\n\nexport type ReadyColumn = BuilderColumn & {\n render?(entry: BuilderViewEntry): ReactNode;\n};\n\nexport type ReadyTableState = {\n query: ListBuilderViewEntriesQuery;\n page: number;\n pageSize: number;\n search: string;\n sort?: string;\n setPage(page: number): void;\n setSearch(search: string): void;\n toggleSort(key: string): void;\n};\n\nexport function useReadyTableState({ pageSize = 20 }: { pageSize?: number } = {}): ReadyTableState {\n const [page, setPage] = useState(1);\n const [search, setSearchValue] = useState(\"\");\n const [sort, setSort] = useState<string>();\n\n return {\n query: { page, pageSize, search: search || undefined, sort },\n page,\n pageSize,\n search,\n sort,\n setPage,\n setSearch(searchValue) {\n setSearchValue(searchValue);\n setPage(1);\n },\n toggleSort(key) {\n setSort((current) => (current === key ? `-${key}` : key));\n setPage(1);\n },\n };\n}\n\nexport type ReadyTableController = {\n columns: ReadyColumn[];\n data: BuilderViewEntry[];\n rowCount: number;\n state: ReadyTableState;\n selectedIds: string[];\n toggleSelected(id: string): void;\n clearSelection(): void;\n};\n\nexport function useReadyTable(args: {\n columns: ReadyColumn[];\n data: BuilderViewEntry[];\n rowCount: number;\n state: ReadyTableState;\n getRowId(row: BuilderViewEntry): string;\n}): ReadyTableController {\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\n return useMemo(\n () => ({\n ...args,\n selectedIds,\n toggleSelected(id: string) {\n setSelectedIds((current) =>\n current.includes(id) ? current.filter((value) => value !== id) : [...current, id],\n );\n },\n clearSelection() {\n setSelectedIds([]);\n },\n }),\n [args.columns, args.data, args.rowCount, args.state, selectedIds],\n );\n}\n\nexport type ReadyDataGridProps = {\n title?: string;\n description?: string | null;\n controller: ReadyTableController;\n isLoading?: boolean;\n searchPlaceholder?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n onRowClick?(row: BuilderViewEntry, event: React.MouseEvent<HTMLTableRowElement>): void;\n toolbarExtra?: ReactNode;\n selectable?: boolean;\n};\n\nfunction cellValue(entry: BuilderViewEntry, column: ReadyColumn) {\n if (column.render) return column.render(entry);\n return formatBuilderRuntimeValue(entry.values[column.key]);\n}\n\nexport function ReadyDataGrid({\n title,\n description,\n controller,\n isLoading,\n searchPlaceholder = \"Хайх...\",\n emptyTitle = \"Мэдээлэл алга\",\n emptyDescription,\n onRowClick,\n toolbarExtra,\n selectable = false,\n}: ReadyDataGridProps) {\n const totalPages = Math.max(1, Math.ceil(controller.rowCount / controller.state.pageSize));\n\n return (\n <section className=\"builder-card builder-grid\" aria-busy={isLoading || undefined}>\n <header className=\"builder-grid__header\">\n <div>\n {title ? <h2 className=\"builder-title\">{title}</h2> : null}\n {description ? <p className=\"builder-description\">{description}</p> : null}\n </div>\n <div className=\"builder-grid__toolbar\">\n <input\n className=\"builder-input builder-grid__search\"\n type=\"search\"\n value={controller.state.search}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n onChange={(event) => controller.state.setSearch(event.target.value)}\n />\n {toolbarExtra}\n </div>\n </header>\n\n <div className=\"builder-table-wrap\">\n <table className=\"builder-table\">\n <thead>\n <tr>\n {selectable ? <th aria-label=\"Сонголт\" /> : null}\n {controller.columns.map((column) => (\n <th key={column.key} className={`builder-align-${column.align}`}>\n {column.sortable ? (\n <button type=\"button\" className=\"builder-sort\" onClick={() => controller.state.toggleSort(column.key)}>\n {column.label}\n </button>\n ) : (\n column.label\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {controller.data.map((entry) => (\n <tr\n key={entry.id}\n className={onRowClick ? \"builder-row-clickable\" : undefined}\n onClick={(event) => onRowClick?.(entry, event)}\n >\n {selectable ? (\n <td>\n <input\n type=\"checkbox\"\n checked={controller.selectedIds.includes(entry.id)}\n aria-label=\"Мөр сонгох\"\n onClick={(event) => event.stopPropagation()}\n onChange={() => controller.toggleSelected(entry.id)}\n />\n </td>\n ) : null}\n {controller.columns.map((column) => (\n <td key={column.key} className={`builder-align-${column.align}`}>\n {cellValue(entry, column)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {isLoading ? <div className=\"builder-state\">Уншиж байна…</div> : null}\n {!isLoading && controller.data.length === 0 ? (\n <div className=\"builder-state\">\n <strong>{emptyTitle}</strong>\n {emptyDescription ? <span>{emptyDescription}</span> : null}\n </div>\n ) : null}\n </div>\n\n <footer className=\"builder-pagination\">\n <span>{controller.rowCount} мөр</span>\n <div>\n <button type=\"button\" className=\"builder-button builder-button--ghost\" disabled={controller.state.page <= 1} onClick={() => controller.state.setPage(controller.state.page - 1)}>\n Өмнөх\n </button>\n <span>{controller.state.page} / {totalPages}</span>\n <button type=\"button\" className=\"builder-button builder-button--ghost\" disabled={controller.state.page >= totalPages} onClick={() => controller.state.setPage(controller.state.page + 1)}>\n Дараах\n </button>\n </div>\n </footer>\n </section>\n );\n}\n\nexport function readyColumns(columns: readonly BuilderColumn[]): ReadyColumn[] {\n return columns.map((column) => ({ ...column }));\n}\n","export const BUILDER_EDITOR_NONE_VALUE = \"__none\";\n\nexport type BuilderEditorSelectOption = {\n label: string;\n value: string;\n};\n\nexport type BuilderEditorDbTable<TFieldType extends string = string> = {\n name: string;\n label?: string;\n lookupColumns?: Array<{\n name: string;\n label: string;\n }>;\n columns: Array<{\n name: string;\n label: string;\n fieldType: TFieldType;\n nullable: boolean;\n dataType: string;\n sortable: boolean;\n }>;\n};\n\ntype BuilderEditorSource =\n | { type: \"dbTable\"; tableName: string }\n | { type: \"apiEndpoint\"; basePath: string }\n | null;\n\ntype BuilderEditorTrigger<TEvent extends string> = {\n event: TEvent;\n action: string;\n enabled: boolean;\n blocking: boolean;\n config: Record<string, unknown>;\n};\n\ntype BuilderEditorField<TFieldType extends string> = {\n key: string;\n label: string;\n type: TFieldType;\n required: boolean;\n hidden?: boolean;\n disabled?: boolean;\n placeholder?: string;\n description?: string;\n options?: BuilderEditorSelectOption[];\n optionsSource?:\n | {\n type: \"dbTable\";\n tableName: string;\n valueField: string;\n labelField: string;\n searchFields?: string[];\n filterBy?: {\n field: string;\n valueFromField: string;\n };\n }\n | undefined;\n triggers?: BuilderEditorFieldTrigger[];\n};\n\nexport type BuilderEditorSubform = {\n key: string;\n label: string;\n viewId: string;\n parentField: string;\n childField: string;\n buttonLabel?: string;\n icon?: string;\n presentation?: \"dialog\" | \"drawer\";\n};\n\ntype BuilderEditorFormLayoutField = {\n key: string;\n span?: number;\n};\n\ntype BuilderEditorFormLayoutGroup = {\n id: string;\n title?: string | null;\n columns?: 6 | 8 | 12;\n fields?: BuilderEditorFormLayoutField[];\n};\n\ntype BuilderEditorFormLayout = {\n groups?: BuilderEditorFormLayoutGroup[];\n};\n\ntype BuilderEditorColumn = {\n key: string;\n label: string;\n sortable: boolean;\n align: \"left\" | \"right\";\n};\n\nexport type BuilderFormEditorEntity<\n TFieldType extends string = string,\n TTriggerEvent extends string = string,\n> = {\n title: string;\n description: string | null;\n version: number;\n source: BuilderEditorSource;\n schema: {\n presentation?: \"dialog\" | \"drawer\";\n fields: BuilderEditorField<TFieldType>[];\n layout?: BuilderEditorFormLayout;\n subforms?: BuilderEditorSubform[];\n };\n triggers: BuilderEditorTrigger<TTriggerEvent>[];\n};\n\nexport type BuilderListEditorEntity<TTriggerEvent extends string = string> = {\n title: string;\n description: string | null;\n version: number;\n source: BuilderEditorSource;\n schema: { columns: BuilderEditorColumn[] };\n triggers: BuilderEditorTrigger<TTriggerEvent>[];\n};\n\nexport type BuilderFormEditorFieldValues<TFieldType extends string = string> = {\n key: string;\n label: string;\n type: TFieldType;\n required: boolean;\n hidden: boolean;\n disabled: boolean;\n placeholder?: string;\n optionsText?: string;\n optionsMode: \"static\" | \"table\";\n optionsTable: string;\n optionsValueField: string;\n optionsLabelField: string;\n optionsSearchFieldsText?: string;\n optionsDependsOn?: string;\n optionsFilterField?: string;\n triggers: BuilderEditorFieldTriggerValues[];\n};\n\nexport type BuilderFormEditorSubformValues = {\n key: string;\n label: string;\n viewId: string;\n parentField: string;\n childField: string;\n buttonLabel?: string;\n icon?: string;\n presentation?: \"dialog\" | \"drawer\";\n};\n\nexport type BuilderFormEditorLayoutFieldValues = {\n key: string;\n span: number;\n};\n\nexport type BuilderFormEditorLayoutGroupValues = {\n id: string;\n title: string;\n columns: 6 | 8 | 12;\n fields: BuilderFormEditorLayoutFieldValues[];\n};\n\nexport type BuilderEditorTriggerValues<TEvent extends string = string> = {\n event: TEvent;\n route: string;\n enabled: boolean;\n blocking: boolean;\n};\n\nexport type BuilderEditorFieldTrigger = {\n event: string;\n action: string;\n enabled: boolean;\n debounceMs: number;\n config: Record<string, unknown>;\n};\n\nexport type BuilderEditorFieldTriggerValues = {\n event: string;\n action: string;\n enabled: boolean;\n debounceMs: number;\n};\n\nexport type BuilderFormEditorValues<\n TFieldType extends string = string,\n TTriggerEvent extends string = string,\n> = {\n title: string;\n description?: string;\n presentation?: \"dialog\" | \"drawer\";\n sourceType: \"none\" | \"dbTable\" | \"apiEndpoint\";\n sourceTable: string;\n apiBasePath?: string;\n fields: BuilderFormEditorFieldValues<TFieldType>[];\n layoutGroups: BuilderFormEditorLayoutGroupValues[];\n subforms?: BuilderFormEditorSubformValues[];\n triggers: BuilderEditorTriggerValues<TTriggerEvent>[];\n version: number;\n};\n\nexport type BuilderListEditorColumnValues = {\n key: string;\n label: string;\n sortable: boolean;\n align: \"left\" | \"right\";\n};\n\nexport type BuilderListEditorValues<TTriggerEvent extends string = string> = {\n title: string;\n description?: string;\n sourceType: \"none\" | \"dbTable\" | \"apiEndpoint\";\n sourceTable: string;\n apiBasePath?: string;\n columns: BuilderListEditorColumnValues[];\n triggers: BuilderEditorTriggerValues<TTriggerEvent>[];\n version: number;\n};\n\nexport type BuilderViewEditorEntity<TTrigger = unknown> = {\n title: string;\n description: string | null;\n formId: string | null;\n listId: string | null;\n permissionRead?: string | null;\n permissionWrite?: string | null;\n triggers: TTrigger[];\n version: number;\n};\n\nexport type BuilderViewEditorValues = {\n title: string;\n description?: string;\n formId: string;\n listId: string;\n permissionRead: string;\n permissionWrite: string;\n triggersText?: string;\n version: number;\n};\n\nexport function builderEditorOptionsToText(options?: BuilderEditorSelectOption[]) {\n return (options ?? []).map((option) => `${option.label}:${option.value}`).join(\"\\n\");\n}\n\nexport function builderEditorTextToOptions(\n value?: string,\n): BuilderEditorSelectOption[] | undefined {\n const rows = (value ?? \"\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n if (rows.length === 0) return undefined;\n return rows.map((line) => {\n const [label, ...rest] = line.split(\":\");\n return { label: label.trim(), value: rest.join(\":\").trim() || label.trim() };\n });\n}\n\nexport function builderEditorSearchFieldsToText(fields?: string[]) {\n return (fields ?? []).join(\"\\n\");\n}\n\nexport function builderEditorTextToSearchFields(value?: string): string[] | undefined {\n const fields = (value ?? \"\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n return fields.length > 0 ? fields : undefined;\n}\n\nexport function getBuilderEditorTriggerRoute(config: Record<string, unknown>) {\n const route = config.route ?? config.path ?? config.url;\n return typeof route === \"string\" ? route : \"\";\n}\n\nfunction valuesFromTriggers<TEvent extends string>(\n triggers: BuilderEditorTrigger<TEvent>[],\n): BuilderEditorTriggerValues<TEvent>[] {\n return triggers\n .filter((trigger) => trigger.action === \"callApi\" || trigger.action === \"webhook\")\n .map((trigger) => ({\n event: trigger.event,\n route: getBuilderEditorTriggerRoute(trigger.config),\n enabled: trigger.enabled,\n blocking: trigger.blocking,\n }))\n .filter((trigger) => trigger.route);\n}\n\nfunction valuesFromFieldTriggers(\n triggers?: BuilderEditorFieldTrigger[],\n): BuilderEditorFieldTriggerValues[] {\n return (triggers ?? []).map((trigger) => ({\n event: trigger.event,\n action: trigger.action,\n enabled: trigger.enabled,\n debounceMs: trigger.debounceMs,\n }));\n}\n\nfunction clampLayoutSpan(span: number | undefined, columns: 6 | 8 | 12) {\n if (!span || Number.isNaN(span)) return columns;\n return Math.max(1, Math.min(columns, Math.trunc(span)));\n}\n\nexport function builderFormEditorDefaultSpan<TFieldType extends string>(\n field: BuilderFormEditorFieldValues<TFieldType>,\n) {\n if (field.type === \"textarea\" || field.type === \"checkbox\") return 12;\n return 6;\n}\n\nexport function builderFormEditorDefaultLayoutGroups<TFieldType extends string>(\n fields: BuilderFormEditorFieldValues<TFieldType>[],\n subforms: BuilderFormEditorSubformValues[] = [],\n): BuilderFormEditorLayoutGroupValues[] {\n return [\n {\n id: \"main\",\n title: \"Үндсэн\",\n columns: 12,\n fields: [\n ...fields.map((field) => ({\n key: field.key,\n span: builderFormEditorDefaultSpan(field),\n })),\n ...subforms.map((subform) => ({ key: subform.key, span: 12 })),\n ],\n },\n ];\n}\n\nexport function normalizeBuilderFormEditorLayoutGroups<TFieldType extends string>(\n groups: BuilderEditorFormLayoutGroup[] | undefined,\n fields: BuilderFormEditorFieldValues<TFieldType>[],\n subforms: BuilderFormEditorSubformValues[] = [],\n): BuilderFormEditorLayoutGroupValues[] {\n if (fields.length === 0 && subforms.length === 0) return [];\n\n const layoutItems = [\n ...fields.map((field) => ({\n key: field.key,\n span: builderFormEditorDefaultSpan(field),\n })),\n ...subforms.map((subform) => ({ key: subform.key, span: 12 })),\n ];\n const itemKeys = new Set(layoutItems.map((item) => item.key));\n const usedKeys = new Set<string>();\n const normalized = (groups ?? [])\n .map((group, index) => {\n const columns: 6 | 8 | 12 = group.columns === 6 || group.columns === 8 ? group.columns : 12;\n const groupFields = (group.fields ?? [])\n .filter((field) => itemKeys.has(field.key) && !usedKeys.has(field.key))\n .map((field) => {\n usedKeys.add(field.key);\n return { key: field.key, span: clampLayoutSpan(field.span, columns) };\n });\n\n return {\n id: group.id || `group${index + 1}`,\n title: group.title || `Group ${index + 1}`,\n columns,\n fields: groupFields,\n };\n })\n .filter((group) => group.fields.length > 0 || group.title.trim());\n\n const missingFields = layoutItems.filter((item) => !usedKeys.has(item.key));\n\n if (normalized.length === 0) {\n return builderFormEditorDefaultLayoutGroups(fields, subforms);\n }\n\n if (missingFields.length > 0) {\n normalized.push({\n id: \"ungrouped\",\n title: \"Бусад\",\n columns: 12,\n fields: missingFields,\n });\n }\n\n return normalized;\n}\n\nexport function builderFormEditorValuesFromEntity<\n TFieldType extends string,\n TTriggerEvent extends string,\n>(\n form: BuilderFormEditorEntity<TFieldType, TTriggerEvent> | null,\n emptyValues: BuilderFormEditorValues<TFieldType, TTriggerEvent>,\n): BuilderFormEditorValues<TFieldType, TTriggerEvent> {\n if (!form) return emptyValues;\n const source = form.source;\n const fields: BuilderFormEditorFieldValues<TFieldType>[] = form.schema.fields.map((field) => ({\n key: field.key,\n label: field.label,\n type: field.type,\n required: field.required,\n hidden: field.hidden ?? false,\n disabled: field.disabled ?? false,\n placeholder: field.placeholder ?? \"\",\n optionsText: builderEditorOptionsToText(field.options),\n optionsMode: field.optionsSource?.type === \"dbTable\" ? \"table\" : \"static\",\n optionsTable:\n field.optionsSource?.type === \"dbTable\"\n ? field.optionsSource.tableName\n : BUILDER_EDITOR_NONE_VALUE,\n optionsValueField:\n field.optionsSource?.type === \"dbTable\"\n ? field.optionsSource.valueField\n : BUILDER_EDITOR_NONE_VALUE,\n optionsLabelField:\n field.optionsSource?.type === \"dbTable\"\n ? field.optionsSource.labelField\n : BUILDER_EDITOR_NONE_VALUE,\n optionsSearchFieldsText:\n field.optionsSource?.type === \"dbTable\"\n ? builderEditorSearchFieldsToText(field.optionsSource.searchFields)\n : \"\",\n optionsDependsOn:\n field.optionsSource?.type === \"dbTable\"\n ? (field.optionsSource.filterBy?.valueFromField ?? \"\")\n : \"\",\n optionsFilterField:\n field.optionsSource?.type === \"dbTable\" ? (field.optionsSource.filterBy?.field ?? \"\") : \"\",\n triggers: valuesFromFieldTriggers(field.triggers),\n }));\n const subforms = (form.schema.subforms ?? []).map((subform) => ({\n key: subform.key,\n label: subform.label,\n viewId: subform.viewId,\n parentField: subform.parentField,\n childField: subform.childField,\n buttonLabel: subform.buttonLabel ?? \"\",\n icon: subform.icon ?? \"\",\n presentation: subform.presentation ?? \"dialog\",\n }));\n return {\n title: form.title,\n description: form.description ?? \"\",\n presentation: form.schema.presentation ?? \"dialog\",\n sourceType: source?.type ?? \"none\",\n sourceTable: source?.type === \"dbTable\" ? source.tableName : BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: source?.type === \"apiEndpoint\" ? source.basePath : \"\",\n fields,\n layoutGroups: normalizeBuilderFormEditorLayoutGroups(\n form.schema.layout?.groups,\n fields,\n subforms,\n ),\n subforms,\n triggers: valuesFromTriggers(form.triggers),\n version: form.version,\n };\n}\n\nexport function builderListEditorValuesFromEntity<TTriggerEvent extends string>(\n list: BuilderListEditorEntity<TTriggerEvent> | null,\n emptyValues: BuilderListEditorValues<TTriggerEvent>,\n): BuilderListEditorValues<TTriggerEvent> {\n if (!list) return emptyValues;\n const source = list.source;\n return {\n title: list.title,\n description: list.description ?? \"\",\n sourceType: source?.type ?? \"none\",\n sourceTable: source?.type === \"dbTable\" ? source.tableName : BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: source?.type === \"apiEndpoint\" ? source.basePath : \"\",\n columns: list.schema.columns.map((column) => ({\n key: column.key,\n label: column.label,\n sortable: column.sortable,\n align: column.align,\n })),\n triggers: valuesFromTriggers(list.triggers),\n version: list.version,\n };\n}\n\nexport function builderViewEditorValuesFromEntity<TTrigger>(\n view: BuilderViewEditorEntity<TTrigger> | null,\n emptyValues: BuilderViewEditorValues,\n defaultPermission = \"\",\n): BuilderViewEditorValues {\n if (!view) return emptyValues;\n return {\n title: view.title,\n description: view.description ?? \"\",\n formId: view.formId ?? BUILDER_EDITOR_NONE_VALUE,\n listId: view.listId ?? BUILDER_EDITOR_NONE_VALUE,\n permissionRead: view.permissionRead || defaultPermission,\n permissionWrite: view.permissionWrite || defaultPermission,\n triggersText: JSON.stringify(view.triggers ?? [], null, 2),\n version: view.version,\n };\n}\n\nexport function builderFormEditorFieldsFromTable<TFieldType extends string>(\n table: BuilderEditorDbTable<TFieldType>,\n): BuilderFormEditorFieldValues<TFieldType>[] {\n return table.columns.map((column) => ({\n key: column.name,\n label: column.label,\n type: column.fieldType,\n required: !column.nullable,\n hidden: false,\n disabled: false,\n placeholder: column.label,\n optionsText: \"\",\n optionsMode: \"static\",\n optionsTable: BUILDER_EDITOR_NONE_VALUE,\n optionsValueField: BUILDER_EDITOR_NONE_VALUE,\n optionsLabelField: BUILDER_EDITOR_NONE_VALUE,\n optionsSearchFieldsText: \"\",\n optionsDependsOn: \"\",\n optionsFilterField: \"\",\n triggers: [],\n }));\n}\n\nexport function builderListEditorColumnsFromTable<TFieldType extends string>(\n table: BuilderEditorDbTable<TFieldType>,\n): BuilderListEditorColumnValues[] {\n return table.columns.map((column) => ({\n key: column.name,\n label: column.label,\n sortable: column.sortable,\n align: column.fieldType === \"number\" || column.fieldType === \"money\" ? \"right\" : \"left\",\n }));\n}\n\nexport function builderFormEditorInputFromValues<\n TFieldType extends string,\n TTriggerEvent extends string,\n>(values: BuilderFormEditorValues<TFieldType, TTriggerEvent>) {\n const source =\n values.sourceType === \"dbTable\" && values.sourceTable !== BUILDER_EDITOR_NONE_VALUE\n ? { type: \"dbTable\" as const, tableName: values.sourceTable }\n : values.sourceType === \"apiEndpoint\" && values.apiBasePath\n ? { type: \"apiEndpoint\" as const, basePath: values.apiBasePath }\n : null;\n\n return {\n title: values.title,\n description: values.description || null,\n source,\n schema: {\n presentation: values.presentation ?? \"dialog\",\n fields: values.fields.map((field) => ({\n key: field.key,\n label: field.label,\n type: field.type,\n required: field.required,\n hidden: field.hidden,\n disabled: field.disabled,\n placeholder: field.placeholder?.trim() || field.label,\n options:\n field.type === \"select\" && field.optionsMode === \"static\"\n ? builderEditorTextToOptions(field.optionsText)\n : undefined,\n optionsSource:\n field.type === \"select\" &&\n field.optionsMode === \"table\" &&\n field.optionsTable !== BUILDER_EDITOR_NONE_VALUE &&\n field.optionsValueField !== BUILDER_EDITOR_NONE_VALUE &&\n field.optionsLabelField !== BUILDER_EDITOR_NONE_VALUE\n ? {\n type: \"dbTable\" as const,\n tableName: field.optionsTable,\n valueField: field.optionsValueField,\n labelField: field.optionsLabelField,\n searchFields: builderEditorTextToSearchFields(field.optionsSearchFieldsText),\n filterBy:\n field.optionsDependsOn && field.optionsFilterField\n ? {\n field: field.optionsFilterField,\n valueFromField: field.optionsDependsOn,\n }\n : undefined,\n }\n : undefined,\n triggers: field.triggers.map((trigger) => ({\n event: trigger.event,\n action: trigger.action,\n enabled: trigger.enabled,\n debounceMs: trigger.debounceMs,\n config: {},\n })),\n })),\n layout: {\n groups: normalizeBuilderFormEditorLayoutGroups(\n values.layoutGroups,\n values.fields,\n values.subforms ?? [],\n ),\n },\n subforms: (values.subforms ?? [])\n .filter(\n (subform) =>\n subform.key &&\n subform.label &&\n subform.viewId !== BUILDER_EDITOR_NONE_VALUE &&\n subform.parentField &&\n subform.childField,\n )\n .map((subform) => ({\n key: subform.key,\n label: subform.label,\n viewId: subform.viewId,\n parentField: subform.parentField,\n childField: subform.childField,\n buttonLabel: subform.buttonLabel?.trim() || undefined,\n icon: subform.icon?.trim() || undefined,\n presentation: subform.presentation ?? \"dialog\",\n })),\n },\n triggers: values.triggers.map((trigger) => ({\n event: trigger.event,\n action: \"callApi\" as const,\n enabled: trigger.enabled,\n blocking: trigger.blocking,\n config: { route: trigger.route },\n })),\n version: values.version,\n };\n}\n\nexport function builderListEditorInputFromValues<TTriggerEvent extends string>(\n values: BuilderListEditorValues<TTriggerEvent>,\n) {\n const source =\n values.sourceType === \"dbTable\" && values.sourceTable !== BUILDER_EDITOR_NONE_VALUE\n ? { type: \"dbTable\" as const, tableName: values.sourceTable }\n : values.sourceType === \"apiEndpoint\" && values.apiBasePath\n ? { type: \"apiEndpoint\" as const, basePath: values.apiBasePath }\n : null;\n\n return {\n title: values.title,\n description: values.description || null,\n source,\n schema: { columns: values.columns },\n triggers: values.triggers.map((trigger) => ({\n event: trigger.event,\n action: \"callApi\" as const,\n enabled: trigger.enabled,\n blocking: trigger.blocking,\n config: { route: trigger.route },\n })),\n version: values.version,\n };\n}\n\nexport function builderViewEditorInputFromValues<TTrigger>(\n values: BuilderViewEditorValues,\n parseTriggers: (value: string) => TTrigger[],\n) {\n return {\n title: values.title,\n description: values.description || null,\n formId: values.formId === BUILDER_EDITOR_NONE_VALUE ? null : values.formId,\n listId: values.listId === BUILDER_EDITOR_NONE_VALUE ? null : values.listId,\n permissionRead: values.permissionRead || null,\n permissionWrite: values.permissionWrite || null,\n triggers: values.triggersText?.trim() ? parseTriggers(values.triggersText) : [],\n version: values.version,\n };\n}\n","\"use client\";\n\nimport type {\n BuilderFormEditorBodyProps,\n BuilderListEditorBodyProps,\n} from \"./BuilderEditorPage\";\nimport { BUILDER_EDITOR_NONE_VALUE, builderFormEditorDefaultLayoutGroups } from \"./editorState\";\n\nexport type BuilderDefaultOption = {\n value: string;\n label: string;\n};\n\nexport type BuilderDefaultFormEditorBodyOptions = {\n backHref: string;\n fieldTypeOptions: BuilderDefaultOption[];\n formTriggerEventOptions: BuilderDefaultOption[];\n fieldTriggerEventOptions: BuilderDefaultOption[];\n};\n\nexport type BuilderDefaultListEditorBodyOptions = {\n backHref: string;\n listTriggerEventOptions: BuilderDefaultOption[];\n};\n\nconst styles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\" as const,\n },\n title: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n actions: {\n display: \"flex\",\n gap: \"0.5rem\",\n flexWrap: \"wrap\" as const,\n },\n section: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n background: \"var(--background, #fff)\",\n overflow: \"hidden\",\n },\n sectionHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"center\",\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n flexWrap: \"wrap\" as const,\n },\n sectionTitle: {\n margin: 0,\n fontSize: \"1rem\",\n fontWeight: 650,\n },\n grid: {\n display: \"grid\",\n gap: \"0.75rem\",\n padding: \"0.75rem\",\n },\n twoColumn: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(14rem, 1fr))\",\n gap: \"0.75rem\",\n },\n row: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(10rem, 1fr))\",\n gap: \"0.5rem\",\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n },\n field: {\n display: \"grid\",\n gap: \"0.25rem\",\n fontSize: \"0.875rem\",\n },\n label: {\n color: \"var(--muted-foreground, #64748b)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n },\n input: {\n minWidth: 0,\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n },\n textarea: {\n minWidth: 0,\n minHeight: \"5rem\",\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n resize: \"vertical\" as const,\n },\n checkboxField: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n fontSize: \"0.875rem\",\n minHeight: \"2.25rem\",\n },\n button: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n primaryButton: {\n border: \"1px solid var(--primary, #18181b)\",\n borderRadius: \"0.375rem\",\n background: \"var(--primary, #18181b)\",\n color: \"var(--primary-foreground, #fff)\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n};\n\nfunction optionItems(options: BuilderDefaultOption[]) {\n return options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ));\n}\n\nexport function createBuilderDefaultFormEditorBody<\n TFieldType extends string,\n TTriggerEvent extends string,\n>(options: BuilderDefaultFormEditorBodyOptions) {\n return function BuilderDefaultFormEditorBody({\n formId,\n form,\n fieldArray,\n subformArray,\n triggerArray,\n fields,\n sourceType,\n sourceTable,\n tables,\n emptyField,\n emptyTrigger,\n isSaving,\n importFieldsFromTable,\n }: BuilderFormEditorBodyProps<TFieldType, TTriggerEvent>) {\n return (\n <div style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{formId ? \"Edit Dynamic Form\" : \"New Dynamic Form\"}</h1>\n <p style={styles.description}>Configure fields, source mapping, layout, and triggers.</p>\n </div>\n <div style={styles.actions}>\n <a href={options.backHref} style={styles.button}>\n Cancel\n </a>\n <button type=\"submit\" disabled={isSaving} style={styles.primaryButton}>\n {isSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <h2 style={styles.sectionTitle}>Details</h2>\n </div>\n <div style={{ ...styles.grid, ...styles.twoColumn }}>\n <label style={styles.field}>\n <span style={styles.label}>Title</span>\n <input style={styles.input} {...form.register(\"title\", { required: true })} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Description</span>\n <input style={styles.input} {...form.register(\"description\")} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Presentation</span>\n <select style={styles.input} {...form.register(\"presentation\")}>\n <option value=\"dialog\">Dialog</option>\n <option value=\"drawer\">Drawer</option>\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Datasource</span>\n <select style={styles.input} {...form.register(\"sourceType\")}>\n <option value=\"none\">None</option>\n <option value=\"dbTable\">DB table</option>\n <option value=\"apiEndpoint\">API endpoint</option>\n </select>\n </label>\n {sourceType === \"dbTable\" ? (\n <label style={styles.field}>\n <span style={styles.label}>Table</span>\n <select style={styles.input} {...form.register(\"sourceTable\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>Select table</option>\n {tables.map((table) => (\n <option key={table.name} value={table.name}>\n {table.label ?? table.name}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n {sourceType === \"apiEndpoint\" ? (\n <label style={styles.field}>\n <span style={styles.label}>API base path</span>\n <input style={styles.input} {...form.register(\"apiBasePath\")} />\n </label>\n ) : null}\n {sourceType === \"dbTable\" ? (\n <div style={{ ...styles.field, justifyContent: \"end\" }}>\n <button\n type=\"button\"\n style={styles.button}\n disabled={sourceTable === BUILDER_EDITOR_NONE_VALUE}\n onClick={importFieldsFromTable}\n >\n Import fields\n </button>\n </div>\n ) : null}\n </div>\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Fields</h2>\n <p style={styles.description}>Runtime form inputs.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => {\n const key = `field${fieldArray.fields.length + 1}`;\n fieldArray.append({\n ...emptyField,\n key,\n label: `Field ${fieldArray.fields.length + 1}`,\n type: options.fieldTypeOptions[0]?.value as TFieldType,\n });\n }}\n >\n Add field\n </button>\n </div>\n {fieldArray.fields.map((field, index) => (\n <div key={field.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Key</span>\n <input style={styles.input} {...form.register(`fields.${index}.key`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Label</span>\n <input style={styles.input} {...form.register(`fields.${index}.label`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Type</span>\n <select\n style={styles.input}\n {...form.register(`fields.${index}.type` as Parameters<typeof form.register>[0])}\n >\n {optionItems(options.fieldTypeOptions)}\n </select>\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`fields.${index}.required`)} />\n Required\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`fields.${index}.hidden`)} />\n Hidden\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`fields.${index}.disabled`)} />\n Disabled\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Placeholder</span>\n <input style={styles.input} {...form.register(`fields.${index}.placeholder`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Static options</span>\n <textarea style={styles.textarea} {...form.register(`fields.${index}.optionsText`)} />\n </label>\n <div style={styles.actions}>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => fieldArray.remove(index)}\n disabled={fieldArray.fields.length <= 1}\n >\n Remove\n </button>\n </div>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Layout</h2>\n <p style={styles.description}>Default layout can be regenerated from current fields.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() =>\n form.setValue(\"layoutGroups\", builderFormEditorDefaultLayoutGroups(fields), {\n shouldDirty: true,\n })\n }\n >\n Reset layout\n </button>\n </div>\n {form.watch(\"layoutGroups\").map((group, groupIndex) => (\n <div key={group.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Group title</span>\n <input style={styles.input} {...form.register(`layoutGroups.${groupIndex}.title`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Columns</span>\n <select\n style={styles.input}\n value={group.columns}\n onChange={(event) =>\n form.setValue(\n `layoutGroups.${groupIndex}.columns`,\n Number(event.target.value) as 6 | 8 | 12,\n { shouldDirty: true },\n )\n }\n >\n <option value={6}>6</option>\n <option value={8}>8</option>\n <option value={12}>12</option>\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Fields</span>\n <input\n style={styles.input}\n value={group.fields.map((item) => item.key).join(\", \")}\n readOnly\n />\n </label>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Subforms</h2>\n <p style={styles.description}>Optional nested runtime view bindings.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() =>\n subformArray.append({\n key: `subform${subformArray.fields.length + 1}`,\n label: `Subform ${subformArray.fields.length + 1}`,\n viewId: BUILDER_EDITOR_NONE_VALUE,\n parentField: \"id\",\n childField: \"parentId\",\n buttonLabel: \"\",\n icon: \"\",\n presentation: \"dialog\",\n })\n }\n >\n Add subform\n </button>\n </div>\n {subformArray.fields.map((subform, index) => (\n <div key={subform.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Key</span>\n <input style={styles.input} {...form.register(`subforms.${index}.key`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Label</span>\n <input style={styles.input} {...form.register(`subforms.${index}.label`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>View ID</span>\n <input style={styles.input} {...form.register(`subforms.${index}.viewId`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Parent field</span>\n <input style={styles.input} {...form.register(`subforms.${index}.parentField`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Child field</span>\n <input style={styles.input} {...form.register(`subforms.${index}.childField`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Presentation</span>\n <select\n style={styles.input}\n {...form.register(`subforms.${index}.presentation`)}\n >\n <option value=\"dialog\">Dialog</option>\n <option value=\"drawer\">Drawer</option>\n </select>\n </label>\n <button type=\"button\" style={styles.button} onClick={() => subformArray.remove(index)}>\n Remove\n </button>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Form Triggers</h2>\n <p style={styles.description}>Optional API callbacks for lifecycle events.</p>\n </div>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.append(emptyTrigger)}>\n Add trigger\n </button>\n </div>\n {triggerArray.fields.map((trigger, index) => (\n <div key={trigger.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Event</span>\n <select\n style={styles.input}\n {...form.register(\n `triggers.${index}.event` as Parameters<typeof form.register>[0],\n )}\n >\n {optionItems(options.formTriggerEventOptions)}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Route</span>\n <input style={styles.input} {...form.register(`triggers.${index}.route`)} />\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.enabled`)} />\n Enabled\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.blocking`)} />\n Blocking\n </label>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.remove(index)}>\n Remove\n </button>\n </div>\n ))}\n </section>\n </div>\n );\n };\n}\n\nexport function createBuilderDefaultListEditorBody<TTriggerEvent extends string>(\n options: BuilderDefaultListEditorBodyOptions,\n) {\n return function BuilderDefaultListEditorBody({\n listId,\n form,\n columnArray,\n triggerArray,\n sourceType,\n sourceTable,\n tables,\n emptyColumn,\n emptyTrigger,\n isSaving,\n importColumnsFromTable,\n }: BuilderListEditorBodyProps<TTriggerEvent>) {\n return (\n <div style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{listId ? \"Edit Dynamic List\" : \"New Dynamic List\"}</h1>\n <p style={styles.description}>Configure list columns, source mapping, and triggers.</p>\n </div>\n <div style={styles.actions}>\n <a href={options.backHref} style={styles.button}>\n Cancel\n </a>\n <button type=\"submit\" disabled={isSaving} style={styles.primaryButton}>\n {isSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <h2 style={styles.sectionTitle}>Details</h2>\n </div>\n <div style={{ ...styles.grid, ...styles.twoColumn }}>\n <label style={styles.field}>\n <span style={styles.label}>Title</span>\n <input style={styles.input} {...form.register(\"title\", { required: true })} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Description</span>\n <input style={styles.input} {...form.register(\"description\")} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Datasource</span>\n <select style={styles.input} {...form.register(\"sourceType\")}>\n <option value=\"none\">None</option>\n <option value=\"dbTable\">DB table</option>\n <option value=\"apiEndpoint\">API endpoint</option>\n </select>\n </label>\n {sourceType === \"dbTable\" ? (\n <label style={styles.field}>\n <span style={styles.label}>Table</span>\n <select style={styles.input} {...form.register(\"sourceTable\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>Select table</option>\n {tables.map((table) => (\n <option key={table.name} value={table.name}>\n {table.label ?? table.name}\n </option>\n ))}\n </select>\n </label>\n ) : null}\n {sourceType === \"apiEndpoint\" ? (\n <label style={styles.field}>\n <span style={styles.label}>API base path</span>\n <input style={styles.input} {...form.register(\"apiBasePath\")} />\n </label>\n ) : null}\n {sourceType === \"dbTable\" ? (\n <div style={{ ...styles.field, justifyContent: \"end\" }}>\n <button\n type=\"button\"\n style={styles.button}\n disabled={sourceTable === BUILDER_EDITOR_NONE_VALUE}\n onClick={importColumnsFromTable}\n >\n Import columns\n </button>\n </div>\n ) : null}\n </div>\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>Columns</h2>\n <p style={styles.description}>Runtime list columns.</p>\n </div>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() =>\n columnArray.append({\n ...emptyColumn,\n key: `field${columnArray.fields.length + 1}`,\n label: `Column ${columnArray.fields.length + 1}`,\n })\n }\n >\n Add column\n </button>\n </div>\n {columnArray.fields.map((column, index) => (\n <div key={column.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Key</span>\n <input style={styles.input} {...form.register(`columns.${index}.key`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Label</span>\n <input style={styles.input} {...form.register(`columns.${index}.label`)} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Align</span>\n <select style={styles.input} {...form.register(`columns.${index}.align`)}>\n <option value=\"left\">Left</option>\n <option value=\"right\">Right</option>\n </select>\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`columns.${index}.sortable`)} />\n Sortable\n </label>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => columnArray.remove(index)}\n disabled={columnArray.fields.length <= 1}\n >\n Remove\n </button>\n </div>\n ))}\n </section>\n\n <section style={styles.section}>\n <div style={styles.sectionHeader}>\n <div>\n <h2 style={styles.sectionTitle}>List Triggers</h2>\n <p style={styles.description}>Optional API callbacks for list lifecycle events.</p>\n </div>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.append(emptyTrigger)}>\n Add trigger\n </button>\n </div>\n {triggerArray.fields.map((trigger, index) => (\n <div key={trigger.id} style={styles.row}>\n <label style={styles.field}>\n <span style={styles.label}>Event</span>\n <select\n style={styles.input}\n {...form.register(\n `triggers.${index}.event` as Parameters<typeof form.register>[0],\n )}\n >\n {optionItems(options.listTriggerEventOptions)}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Route</span>\n <input style={styles.input} {...form.register(`triggers.${index}.route`)} />\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.enabled`)} />\n Enabled\n </label>\n <label style={styles.checkboxField}>\n <input type=\"checkbox\" {...form.register(`triggers.${index}.blocking`)} />\n Blocking\n </label>\n <button type=\"button\" style={styles.button} onClick={() => triggerArray.remove(index)}>\n Remove\n </button>\n </div>\n ))}\n </section>\n </div>\n );\n };\n}\n","\"use client\";\n\nimport { useMemo, useState } from \"react\";\n\nexport type BuilderDefaultEntity = {\n id: string;\n title: string;\n description?: string | null;\n};\n\nexport type BuilderDefaultEntityManagerLabels<TEntity extends BuilderDefaultEntity> = {\n title: string;\n description: string;\n searchPlaceholder: string;\n emptyTitle: string;\n emptyDescription: string;\n addLabel: string;\n editLabel: string;\n replicateLabel: string;\n deleteLabel: string;\n runtimeLabel: string;\n deleteConfirm(entity: TEntity): string;\n replicatePrompt(entity: TEntity): string;\n replicateDefaultTitle(entity: TEntity): string;\n};\n\nexport type BuilderDefaultEntityListResult<TEntity> = {\n items: TEntity[];\n total: number;\n};\n\nexport type BuilderDefaultEntityQueryResult<TEntity> = {\n data?: BuilderDefaultEntityListResult<TEntity>;\n isPending: boolean;\n isError?: boolean;\n};\n\nexport type BuilderDefaultEntityMutation<TInput> = {\n mutateAsync(input: TInput): Promise<unknown>;\n isPending?: boolean;\n};\n\nexport type BuilderDefaultEntityManagerState = {\n page: number;\n pageSize: number;\n search: string;\n};\n\nexport type BuilderDefaultEntityManagerDependencies<TEntity extends BuilderDefaultEntity, TQuery> = {\n labels: BuilderDefaultEntityManagerLabels<TEntity>;\n createHref?: string;\n editHref(entity: TEntity): string;\n runtimeHref?: (entity: TEntity) => string;\n getDetail?: (entity: TEntity) => string;\n buildQuery(state: BuilderDefaultEntityManagerState): TQuery;\n hooks: {\n useEntities(query: TQuery): BuilderDefaultEntityQueryResult<TEntity>;\n useDelete(): BuilderDefaultEntityMutation<string>;\n useReplicate(): BuilderDefaultEntityMutation<{ id: string; input: { title?: string } }>;\n };\n};\n\nconst styles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\" as const,\n },\n title: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n button: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n primaryButton: {\n border: \"1px solid var(--primary, #18181b)\",\n borderRadius: \"0.375rem\",\n background: \"var(--primary, #18181b)\",\n color: \"var(--primary-foreground, #fff)\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n card: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n overflow: \"hidden\",\n background: \"var(--background, #fff)\",\n },\n toolbar: {\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n },\n input: {\n width: \"100%\",\n maxWidth: \"24rem\",\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.75rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n },\n tableWrap: {\n overflowX: \"auto\" as const,\n },\n table: {\n width: \"100%\",\n borderCollapse: \"collapse\" as const,\n fontSize: \"0.875rem\",\n },\n th: {\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n textAlign: \"left\" as const,\n color: \"var(--muted-foreground, #64748b)\",\n fontWeight: 600,\n whiteSpace: \"nowrap\" as const,\n },\n td: {\n padding: \"0.75rem\",\n borderBottom: \"1px solid var(--border, #d4d4d8)\",\n verticalAlign: \"top\" as const,\n },\n actions: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n gap: \"0.5rem\",\n flexWrap: \"wrap\" as const,\n },\n empty: {\n padding: \"2rem\",\n textAlign: \"center\" as const,\n color: \"var(--muted-foreground, #64748b)\",\n },\n};\n\nexport function createBuilderDefaultEntityManagerComponent<\n TEntity extends BuilderDefaultEntity,\n TQuery,\n>(deps: BuilderDefaultEntityManagerDependencies<TEntity, TQuery>) {\n return function BuilderDefaultEntityManager() {\n const [state, setState] = useState<BuilderDefaultEntityManagerState>({\n page: 1,\n pageSize: 20,\n search: \"\",\n });\n const query = deps.hooks.useEntities(useMemo(() => deps.buildQuery(state), [state]));\n const remove = deps.hooks.useDelete();\n const replicate = deps.hooks.useReplicate();\n const items = query.data?.items ?? [];\n\n const onReplicate = async (entity: TEntity) => {\n const title = window.prompt(\n deps.labels.replicatePrompt(entity),\n deps.labels.replicateDefaultTitle(entity),\n );\n if (!title) return;\n await replicate.mutateAsync({ id: entity.id, input: { title } });\n };\n\n const onDelete = async (entity: TEntity) => {\n if (!window.confirm(deps.labels.deleteConfirm(entity))) return;\n await remove.mutateAsync(entity.id);\n };\n\n return (\n <section style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{deps.labels.title}</h1>\n <p style={styles.description}>{deps.labels.description}</p>\n </div>\n {deps.createHref ? (\n <a href={deps.createHref} style={styles.primaryButton}>\n {deps.labels.addLabel}\n </a>\n ) : null}\n </div>\n\n <div style={styles.card}>\n <div style={styles.toolbar}>\n <input\n style={styles.input}\n placeholder={deps.labels.searchPlaceholder}\n value={state.search}\n onChange={(event) =>\n setState((current) => ({ ...current, page: 1, search: event.target.value }))\n }\n />\n </div>\n <div style={styles.tableWrap}>\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={styles.th}>{deps.labels.title}</th>\n <th style={styles.th}>Detail</th>\n <th style={styles.th}>Description</th>\n <th style={{ ...styles.th, textAlign: \"right\" }}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {items.map((entity) => (\n <tr key={entity.id}>\n <td style={styles.td}>\n <a href={deps.editHref(entity)}>{entity.title}</a>\n </td>\n <td style={styles.td}>{deps.getDetail?.(entity) ?? \"-\"}</td>\n <td style={styles.td}>{entity.description || \"-\"}</td>\n <td style={styles.td}>\n <div style={styles.actions}>\n {deps.runtimeHref ? (\n <a href={deps.runtimeHref(entity)} style={styles.button}>\n {deps.labels.runtimeLabel}\n </a>\n ) : null}\n <a href={deps.editHref(entity)} style={styles.button}>\n {deps.labels.editLabel}\n </a>\n <button\n type=\"button\"\n style={styles.button}\n onClick={() => void onReplicate(entity)}\n >\n {deps.labels.replicateLabel}\n </button>\n <button\n type=\"button\"\n style={styles.button}\n disabled={remove.isPending}\n onClick={() => void onDelete(entity)}\n >\n {deps.labels.deleteLabel}\n </button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {query.isPending ? <div style={styles.empty}>Loading...</div> : null}\n {query.isError ? <div style={styles.empty}>Failed to load.</div> : null}\n {!query.isPending && !query.isError && items.length === 0 ? (\n <div style={styles.empty}>\n <strong>{deps.labels.emptyTitle}</strong>\n <div>{deps.labels.emptyDescription}</div>\n </div>\n ) : null}\n </div>\n </section>\n );\n };\n}\n","\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport {\n BUILDER_EDITOR_NONE_VALUE,\n type BuilderViewEditorEntity,\n type BuilderViewEditorValues,\n builderViewEditorInputFromValues,\n builderViewEditorValuesFromEntity,\n} from \"./editorState\";\n\ntype BuilderOptionEntity = {\n id: string;\n title: string;\n};\n\nexport type BuilderDefaultViewEditorContracts = BuilderApiContracts & {\n BuilderForm: BuilderOptionEntity;\n BuilderList: BuilderOptionEntity;\n BuilderView: BuilderViewEditorEntity & { id: string; title: string };\n};\n\nexport type BuilderDefaultViewEditorPageOptions<C extends BuilderDefaultViewEditorContracts> = {\n hooks: BuilderHooks<C>;\n backHref: string;\n editHref(id: string): string;\n permissionOptions: Array<{ value: string; label: string }>;\n defaultPermission?: string;\n parseTriggers(value: string): unknown[];\n notifySuccess?(message: string): void;\n notifyError?(error: unknown): void;\n};\n\nconst styles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n header: {\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: \"1rem\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\" as const,\n },\n title: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n actions: {\n display: \"flex\",\n gap: \"0.5rem\",\n flexWrap: \"wrap\" as const,\n },\n section: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n background: \"var(--background, #fff)\",\n overflow: \"hidden\",\n },\n grid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(14rem, 1fr))\",\n gap: \"0.75rem\",\n padding: \"0.75rem\",\n },\n field: {\n display: \"grid\",\n gap: \"0.25rem\",\n fontSize: \"0.875rem\",\n },\n label: {\n color: \"var(--muted-foreground, #64748b)\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n },\n input: {\n minWidth: 0,\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n },\n textarea: {\n minWidth: 0,\n minHeight: \"8rem\",\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n padding: \"0.5rem 0.625rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n resize: \"vertical\" as const,\n },\n button: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.375rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n primaryButton: {\n border: \"1px solid var(--primary, #18181b)\",\n borderRadius: \"0.375rem\",\n background: \"var(--primary, #18181b)\",\n color: \"var(--primary-foreground, #fff)\",\n cursor: \"pointer\",\n padding: \"0.5rem 0.75rem\",\n textDecoration: \"none\",\n fontSize: \"0.875rem\",\n },\n state: {\n color: \"var(--muted-foreground, #64748b)\",\n fontSize: \"0.875rem\",\n },\n};\n\nconst defaultEmptyValues: BuilderViewEditorValues = {\n title: \"\",\n description: \"\",\n formId: BUILDER_EDITOR_NONE_VALUE,\n listId: BUILDER_EDITOR_NONE_VALUE,\n permissionRead: \"\",\n permissionWrite: \"\",\n triggersText: \"[]\",\n version: 0,\n};\n\nexport function createBuilderDefaultViewEditorPage<C extends BuilderDefaultViewEditorContracts>(\n options: BuilderDefaultViewEditorPageOptions<C>,\n) {\n const defaultPermission = options.defaultPermission ?? \"\";\n const showPermissions = options.permissionOptions.length > 0;\n\n return function BuilderDefaultViewEditorPage({ viewId }: { viewId?: string }) {\n const view = options.hooks.useBuilderView(viewId);\n const forms = options.hooks.useBuilderFormOptions();\n const lists = options.hooks.useBuilderListOptions();\n const save = options.hooks.useSaveBuilderView();\n const form = useForm<BuilderViewEditorValues>({\n defaultValues: {\n ...defaultEmptyValues,\n permissionRead: defaultPermission,\n permissionWrite: defaultPermission,\n },\n });\n\n useEffect(() => {\n if (viewId && !view.data) return;\n form.reset(\n builderViewEditorValuesFromEntity(\n (view.data ?? null) as C[\"BuilderView\"] | null,\n {\n ...defaultEmptyValues,\n permissionRead: defaultPermission,\n permissionWrite: defaultPermission,\n },\n defaultPermission,\n ),\n );\n }, [form, view.data, viewId]);\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n const input = builderViewEditorInputFromValues(values, options.parseTriggers);\n const saved = await save.mutateAsync({\n id: viewId,\n input: input as C[\"UpdateBuilderViewInput\"],\n });\n options.notifySuccess?.(viewId ? \"View saved\" : \"View created\");\n if (!viewId) {\n window.location.assign(options.editHref(saved.id));\n }\n } catch (error) {\n if (options.notifyError) options.notifyError(error);\n else throw error;\n }\n });\n\n if (viewId && view.isPending) {\n return <div style={styles.state}>Loading...</div>;\n }\n\n if (viewId && view.isError) {\n return <div style={styles.state}>Failed to load view.</div>;\n }\n\n return (\n <form onSubmit={onSubmit} noValidate style={styles.page}>\n <div style={styles.header}>\n <div>\n <h1 style={styles.title}>{viewId ? \"Edit Dynamic View\" : \"New Dynamic View\"}</h1>\n <p style={styles.description}>Connect a form and list into a runtime screen.</p>\n </div>\n <div style={styles.actions}>\n <a href={options.backHref} style={styles.button}>\n Cancel\n </a>\n <button type=\"submit\" disabled={save.isPending} style={styles.primaryButton}>\n {save.isPending ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n\n <section style={styles.section}>\n <div style={styles.grid}>\n <label style={styles.field}>\n <span style={styles.label}>Title</span>\n <input style={styles.input} {...form.register(\"title\", { required: true })} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Description</span>\n <input style={styles.input} {...form.register(\"description\")} />\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Form</span>\n <select style={styles.input} {...form.register(\"formId\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>No form</option>\n {(forms.data ?? []).map((item) => (\n <option key={item.id} value={item.id}>\n {item.title}\n </option>\n ))}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>List</span>\n <select style={styles.input} {...form.register(\"listId\")}>\n <option value={BUILDER_EDITOR_NONE_VALUE}>No list</option>\n {(lists.data ?? []).map((item) => (\n <option key={item.id} value={item.id}>\n {item.title}\n </option>\n ))}\n </select>\n </label>\n {showPermissions ? (\n <>\n <label style={styles.field}>\n <span style={styles.label}>Read permission</span>\n <select style={styles.input} {...form.register(\"permissionRead\")}>\n <option value=\"\">Authenticated users</option>\n {options.permissionOptions.map((permission) => (\n <option key={permission.value} value={permission.value}>\n {permission.label}\n </option>\n ))}\n </select>\n </label>\n <label style={styles.field}>\n <span style={styles.label}>Write permission</span>\n <select style={styles.input} {...form.register(\"permissionWrite\")}>\n <option value=\"\">Authenticated users</option>\n {options.permissionOptions.map((permission) => (\n <option key={permission.value} value={permission.value}>\n {permission.label}\n </option>\n ))}\n </select>\n </label>\n </>\n ) : null}\n <label style={{ ...styles.field, gridColumn: \"1 / -1\" }}>\n <span style={styles.label}>Triggers JSON</span>\n <textarea style={styles.textarea} {...form.register(\"triggersText\")} />\n </label>\n </div>\n </section>\n </form>\n );\n };\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport {\n FormProvider,\n type Resolver,\n type UseFieldArrayReturn,\n type UseFormReturn,\n useFieldArray,\n useForm,\n useWatch,\n} from \"react-hook-form\";\nimport {\n type BuilderEditorDbTable,\n type BuilderEditorTriggerValues,\n type BuilderFormEditorEntity,\n type BuilderFormEditorFieldValues,\n type BuilderFormEditorSubformValues,\n type BuilderFormEditorValues,\n type BuilderListEditorColumnValues,\n type BuilderListEditorEntity,\n type BuilderListEditorValues,\n builderFormEditorDefaultLayoutGroups,\n builderFormEditorFieldsFromTable,\n builderFormEditorValuesFromEntity,\n builderListEditorColumnsFromTable,\n builderListEditorValuesFromEntity,\n} from \"./editorState\";\n\ntype BuilderEditorEntity = {\n id: string;\n};\n\ntype BuilderEditorQuery<TEntity> = {\n data?: TEntity;\n isPending: boolean;\n isError: boolean;\n};\n\ntype BuilderEditorListQuery<TItem> = {\n data?: TItem[];\n};\n\ntype BuilderEditorSaveMutation<TInput, TEntity> = {\n mutateAsync(args: { id?: string; input: TInput }): Promise<TEntity>;\n isPending: boolean;\n};\n\ntype BuilderEditorNotifications = {\n success(message: string): void;\n error(error: unknown): void;\n};\n\ntype BuilderEditorLabels = {\n created: string;\n saved: string;\n};\n\ntype BuilderEditorStateLabels = {\n loading: string;\n error: string;\n};\n\nexport type BuilderFormEditorBodyProps<TFieldType extends string, TTriggerEvent extends string> = {\n formId?: string;\n form: UseFormReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>>;\n fieldArray: UseFieldArrayReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>, \"fields\">;\n subformArray: UseFieldArrayReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>, \"subforms\">;\n triggerArray: UseFieldArrayReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>, \"triggers\">;\n fields: BuilderFormEditorFieldValues<TFieldType>[];\n subforms: BuilderFormEditorSubformValues[];\n sourceType: BuilderFormEditorValues<TFieldType, TTriggerEvent>[\"sourceType\"];\n sourceTable: string;\n tables: BuilderEditorDbTable<TFieldType>[];\n emptyField: BuilderFormEditorFieldValues<TFieldType>;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n isSaving: boolean;\n importFieldsFromTable(): void;\n};\n\nexport type BuilderListEditorBodyProps<TTriggerEvent extends string> = {\n listId?: string;\n form: UseFormReturn<BuilderListEditorValues<TTriggerEvent>>;\n columnArray: UseFieldArrayReturn<BuilderListEditorValues<TTriggerEvent>, \"columns\">;\n triggerArray: UseFieldArrayReturn<BuilderListEditorValues<TTriggerEvent>, \"triggers\">;\n sourceType: BuilderListEditorValues<TTriggerEvent>[\"sourceType\"];\n sourceTable: string;\n tables: BuilderEditorDbTable[];\n emptyColumn: BuilderListEditorColumnValues;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n isSaving: boolean;\n importColumnsFromTable(): void;\n};\n\nexport type BuilderFormEditorPageDependencies<\n TEntity extends BuilderEditorEntity & BuilderFormEditorEntity<TFieldType, TTriggerEvent>,\n TInput,\n TFieldType extends string,\n TTriggerEvent extends string,\n> = {\n emptyValues: BuilderFormEditorValues<TFieldType, TTriggerEvent>;\n emptyField: BuilderFormEditorFieldValues<TFieldType>;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n resolver?: Resolver<BuilderFormEditorValues<TFieldType, TTriggerEvent>>;\n labels: BuilderEditorLabels;\n states: BuilderEditorStateLabels;\n hooks: {\n useEntity(id?: string): BuilderEditorQuery<TEntity>;\n useTables(): BuilderEditorListQuery<BuilderEditorDbTable<TFieldType>>;\n useSave(): BuilderEditorSaveMutation<TInput, TEntity>;\n };\n buildInput(values: BuilderFormEditorValues<TFieldType, TTriggerEvent>): TInput;\n navigateAfterCreate(entity: TEntity): void;\n notifications: BuilderEditorNotifications;\n Body(props: BuilderFormEditorBodyProps<TFieldType, TTriggerEvent>): ReactNode;\n};\n\nexport type BuilderListEditorPageDependencies<\n TEntity extends BuilderEditorEntity & BuilderListEditorEntity<TTriggerEvent>,\n TInput,\n TTriggerEvent extends string,\n> = {\n emptyValues: BuilderListEditorValues<TTriggerEvent>;\n emptyColumn: BuilderListEditorColumnValues;\n emptyTrigger: BuilderEditorTriggerValues<TTriggerEvent>;\n resolver?: Resolver<BuilderListEditorValues<TTriggerEvent>>;\n labels: BuilderEditorLabels;\n states: BuilderEditorStateLabels;\n hooks: {\n useEntity(id?: string): BuilderEditorQuery<TEntity>;\n useTables(): BuilderEditorListQuery<BuilderEditorDbTable>;\n useSave(): BuilderEditorSaveMutation<TInput, TEntity>;\n };\n buildInput(values: BuilderListEditorValues<TTriggerEvent>): TInput;\n navigateAfterCreate(entity: TEntity): void;\n notifications: BuilderEditorNotifications;\n Body(props: BuilderListEditorBodyProps<TTriggerEvent>): ReactNode;\n};\n\nexport function createBuilderFormEditorPageComponent<\n TEntity extends BuilderEditorEntity & BuilderFormEditorEntity<TFieldType, TTriggerEvent>,\n TInput,\n TFieldType extends string,\n TTriggerEvent extends string,\n>(deps: BuilderFormEditorPageDependencies<TEntity, TInput, TFieldType, TTriggerEvent>) {\n return function BuilderFormEditorPage({ formId }: { formId?: string }) {\n const Body = deps.Body;\n const entityQuery = deps.hooks.useEntity(formId);\n const tables = deps.hooks.useTables();\n const save = deps.hooks.useSave();\n const form = useForm<BuilderFormEditorValues<TFieldType, TTriggerEvent>>({\n resolver: deps.resolver,\n defaultValues: deps.emptyValues,\n });\n const fieldArray = useFieldArray({ control: form.control, name: \"fields\" });\n const subformArray = useFieldArray({ control: form.control, name: \"subforms\" });\n const triggerArray = useFieldArray({ control: form.control, name: \"triggers\" });\n const fields = useWatch({ control: form.control, name: \"fields\" }) ?? [];\n const subforms = useWatch({ control: form.control, name: \"subforms\" }) ?? [];\n const sourceType = useWatch({ control: form.control, name: \"sourceType\" });\n const sourceTable = useWatch({ control: form.control, name: \"sourceTable\" });\n\n useEffect(() => {\n if (formId && !entityQuery.data) return;\n form.reset(builderFormEditorValuesFromEntity(entityQuery.data ?? null, deps.emptyValues));\n }, [entityQuery.data, form, formId]);\n\n const importFieldsFromTable = () => {\n const table = tables.data?.find((item) => item.name === sourceTable);\n if (!table) return;\n const nextFields = builderFormEditorFieldsFromTable(table);\n fieldArray.replace(nextFields);\n form.setValue(\"layoutGroups\", builderFormEditorDefaultLayoutGroups(nextFields), {\n shouldDirty: true,\n });\n };\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n const saved = await save.mutateAsync({ id: formId, input: deps.buildInput(values) });\n deps.notifications.success(formId ? deps.labels.saved : deps.labels.created);\n if (!formId) deps.navigateAfterCreate(saved);\n } catch (error) {\n deps.notifications.error(error);\n }\n });\n\n if (formId && entityQuery.isPending) {\n return <div className=\"text-muted-foreground text-sm\">{deps.states.loading}</div>;\n }\n\n if (formId && entityQuery.isError) {\n return <div className=\"text-destructive text-sm\">{deps.states.error}</div>;\n }\n\n return (\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className=\"space-y-6\">\n <Body\n formId={formId}\n form={form}\n fieldArray={fieldArray}\n subformArray={subformArray}\n triggerArray={triggerArray}\n fields={fields}\n subforms={subforms}\n sourceType={sourceType}\n sourceTable={sourceTable}\n tables={tables.data ?? []}\n emptyField={deps.emptyField}\n emptyTrigger={deps.emptyTrigger}\n isSaving={save.isPending}\n importFieldsFromTable={importFieldsFromTable}\n />\n </form>\n </FormProvider>\n );\n };\n}\n\nexport function createBuilderListEditorPageComponent<\n TEntity extends BuilderEditorEntity & BuilderListEditorEntity<TTriggerEvent>,\n TInput,\n TTriggerEvent extends string,\n>(deps: BuilderListEditorPageDependencies<TEntity, TInput, TTriggerEvent>) {\n return function BuilderListEditorPage({ listId }: { listId?: string }) {\n const Body = deps.Body;\n const entityQuery = deps.hooks.useEntity(listId);\n const tables = deps.hooks.useTables();\n const save = deps.hooks.useSave();\n const form = useForm<BuilderListEditorValues<TTriggerEvent>>({\n resolver: deps.resolver,\n defaultValues: deps.emptyValues,\n });\n const columnArray = useFieldArray({ control: form.control, name: \"columns\" });\n const triggerArray = useFieldArray({ control: form.control, name: \"triggers\" });\n const sourceType = useWatch({ control: form.control, name: \"sourceType\" });\n const sourceTable = useWatch({ control: form.control, name: \"sourceTable\" });\n\n useEffect(() => {\n if (listId && !entityQuery.data) return;\n form.reset(builderListEditorValuesFromEntity(entityQuery.data ?? null, deps.emptyValues));\n }, [entityQuery.data, form, listId]);\n\n const importColumnsFromTable = () => {\n const table = tables.data?.find((item) => item.name === sourceTable);\n if (!table) return;\n columnArray.replace(builderListEditorColumnsFromTable(table));\n };\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n const saved = await save.mutateAsync({ id: listId, input: deps.buildInput(values) });\n deps.notifications.success(listId ? deps.labels.saved : deps.labels.created);\n if (!listId) deps.navigateAfterCreate(saved);\n } catch (error) {\n deps.notifications.error(error);\n }\n });\n\n if (listId && entityQuery.isPending) {\n return <div className=\"text-muted-foreground text-sm\">{deps.states.loading}</div>;\n }\n\n if (listId && entityQuery.isError) {\n return <div className=\"text-destructive text-sm\">{deps.states.error}</div>;\n }\n\n return (\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className=\"space-y-6\">\n <Body\n listId={listId}\n form={form}\n columnArray={columnArray}\n triggerArray={triggerArray}\n sourceType={sourceType}\n sourceTable={sourceTable}\n tables={tables.data ?? []}\n emptyColumn={deps.emptyColumn}\n emptyTrigger={deps.emptyTrigger}\n isSaving={save.isPending}\n importColumnsFromTable={importColumnsFromTable}\n />\n </form>\n </FormProvider>\n );\n };\n}\n","\"use client\";\n\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport {\n createBuilderDefaultFormEditorBody,\n createBuilderDefaultListEditorBody,\n type BuilderDefaultOption,\n} from \"./BuilderDefaultEditorBodies\";\nimport {\n type BuilderDefaultEntity,\n type BuilderDefaultEntityQueryResult,\n type BuilderDefaultEntityManagerState,\n createBuilderDefaultEntityManagerComponent,\n} from \"./BuilderDefaultEntityManager\";\nimport { createBuilderDefaultViewEditorPage } from \"./BuilderDefaultViewEditorPage\";\nimport {\n createBuilderFormEditorPageComponent,\n createBuilderListEditorPageComponent,\n} from \"./BuilderEditorPage\";\nimport {\n BUILDER_EDITOR_NONE_VALUE,\n type BuilderEditorDbTable,\n type BuilderEditorTriggerValues,\n type BuilderFormEditorEntity,\n type BuilderFormEditorFieldValues,\n type BuilderFormEditorValues,\n type BuilderListEditorColumnValues,\n type BuilderListEditorEntity,\n type BuilderListEditorValues,\n type BuilderViewEditorEntity,\n builderFormEditorDefaultLayoutGroups,\n builderFormEditorInputFromValues,\n builderListEditorInputFromValues,\n} from \"./editorState\";\n\ntype BuilderAdminEntity = BuilderDefaultEntity & {\n key?: string;\n};\n\ntype BuilderAdminListResponse<TEntity extends BuilderAdminEntity> = {\n items: TEntity[];\n total: number;\n};\n\ntype BuilderAdminListQuery = {\n page?: number;\n pageSize?: number;\n search?: string;\n};\n\nexport type BuilderAdminPageContracts = BuilderApiContracts & {\n BuilderDbTable: BuilderEditorDbTable<string>;\n BuilderForm: BuilderAdminEntity & BuilderFormEditorEntity<string, string>;\n BuilderList: BuilderAdminEntity & BuilderListEditorEntity<string>;\n BuilderView: BuilderAdminEntity & BuilderViewEditorEntity<unknown>;\n ListBuilderFormsQuery: BuilderAdminListQuery;\n ListBuilderListsQuery: BuilderAdminListQuery;\n ListBuilderViewsQuery: BuilderAdminListQuery;\n ListBuilderFormsResponse: BuilderAdminListResponse<BuilderAdminEntity>;\n ListBuilderListsResponse: BuilderAdminListResponse<BuilderAdminEntity>;\n ListBuilderViewsResponse: BuilderAdminListResponse<BuilderAdminEntity>;\n};\n\nexport type BuilderAdminPagesRoutes = {\n adminBasePath?: string;\n runtimeBasePath?: string;\n formsPath?: string;\n newFormPath?: string;\n editFormPath?: (id: string) => string;\n runtimeFormPath?: (id: string) => string;\n listsPath?: string;\n newListPath?: string;\n editListPath?: (id: string) => string;\n runtimeListPath?: (id: string) => string;\n viewsPath?: string;\n newViewPath?: string;\n editViewPath?: (id: string) => string;\n runtimeViewPath?: (id: string) => string;\n};\n\nexport type BuilderAdminPagesOptions<C extends BuilderAdminPageContracts> = {\n hooks: BuilderHooks<C>;\n routes?: BuilderAdminPagesRoutes;\n fieldTypeOptions?: BuilderDefaultOption[];\n formTriggerEventOptions?: BuilderDefaultOption[];\n listTriggerEventOptions?: BuilderDefaultOption[];\n fieldTriggerEventOptions?: BuilderDefaultOption[];\n permissionOptions?: BuilderDefaultOption[];\n defaultPermission?: string;\n notifySuccess?(message: string): void;\n notifyError?(error: unknown): void;\n parseViewTriggers?(value: string): unknown[];\n};\n\nconst defaultFieldTypeOptions: BuilderDefaultOption[] = [\n { value: \"text\", label: \"Text\" },\n { value: \"textarea\", label: \"Textarea\" },\n { value: \"number\", label: \"Number\" },\n { value: \"money\", label: \"Money\" },\n { value: \"select\", label: \"Select\" },\n { value: \"checkbox\", label: \"Checkbox\" },\n { value: \"date\", label: \"Date\" },\n];\n\nconst defaultFormTriggerEventOptions: BuilderDefaultOption[] = [\n { value: \"beforeCreate\", label: \"Before create\" },\n { value: \"afterCreate\", label: \"After create\" },\n { value: \"beforeUpdate\", label: \"Before update\" },\n { value: \"afterUpdate\", label: \"After update\" },\n];\n\nconst defaultListTriggerEventOptions: BuilderDefaultOption[] = [\n { value: \"beforeRead\", label: \"Before read\" },\n { value: \"afterRead\", label: \"After read\" },\n { value: \"beforeDelete\", label: \"Before delete\" },\n { value: \"afterDelete\", label: \"After delete\" },\n];\n\nconst defaultFieldTriggerEventOptions: BuilderDefaultOption[] = [\n { value: \"onChange\", label: \"On change\" },\n { value: \"onBlur\", label: \"On blur\" },\n];\n\nconst defaultPermissionOptions: BuilderDefaultOption[] = [];\n\nfunction parseJsonArray(value: string): unknown[] {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed : [];\n}\n\nfunction joinPath(base: string, path: string) {\n return `${base.replace(/\\/$/, \"\")}/${path.replace(/^\\//, \"\")}`;\n}\n\nfunction defaultQuery(state: BuilderDefaultEntityManagerState): BuilderAdminListQuery {\n return {\n page: state.page,\n pageSize: state.pageSize,\n search: state.search || undefined,\n };\n}\n\nfunction detail(entity: BuilderAdminEntity) {\n return entity.key ?? entity.id;\n}\n\nconst homeStyles = {\n page: {\n display: \"grid\",\n gap: \"1rem\",\n },\n headerTitle: {\n margin: 0,\n fontSize: \"1.5rem\",\n fontWeight: 650,\n },\n description: {\n margin: \"0.25rem 0 0\",\n color: \"var(--muted-foreground, #64748b)\",\n },\n grid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(13rem, 1fr))\",\n gap: \"0.75rem\",\n },\n card: {\n border: \"1px solid var(--border, #d4d4d8)\",\n borderRadius: \"0.5rem\",\n padding: \"1rem\",\n background: \"var(--background, #fff)\",\n color: \"inherit\",\n textDecoration: \"none\",\n },\n cardTitle: {\n margin: 0,\n fontSize: \"1rem\",\n fontWeight: 650,\n },\n};\n\nexport function createBuilderAdminPages<C extends BuilderAdminPageContracts>({\n hooks,\n routes = {},\n fieldTypeOptions = defaultFieldTypeOptions,\n formTriggerEventOptions = defaultFormTriggerEventOptions,\n listTriggerEventOptions = defaultListTriggerEventOptions,\n fieldTriggerEventOptions = defaultFieldTriggerEventOptions,\n permissionOptions = defaultPermissionOptions,\n defaultPermission = \"\",\n notifySuccess,\n notifyError,\n parseViewTriggers = parseJsonArray,\n}: BuilderAdminPagesOptions<C>) {\n const adminBasePath = routes.adminBasePath ?? \"/admin/dev/builder\";\n const runtimeBasePath = routes.runtimeBasePath ?? \"/admin/winu\";\n\n const formsPath = routes.formsPath ?? joinPath(adminBasePath, \"forms\");\n const newFormPath = routes.newFormPath ?? joinPath(formsPath, \"new\");\n const editFormPath =\n routes.editFormPath ?? ((id: string) => `${joinPath(formsPath, \"edit\")}?id=${encodeURIComponent(id)}`);\n const runtimeFormPath =\n routes.runtimeFormPath ??\n ((id: string) => `${joinPath(runtimeBasePath, \"form\")}?id=${encodeURIComponent(id)}`);\n\n const listsPath = routes.listsPath ?? joinPath(adminBasePath, \"lists\");\n const newListPath = routes.newListPath ?? joinPath(listsPath, \"new\");\n const editListPath =\n routes.editListPath ?? ((id: string) => `${joinPath(listsPath, \"edit\")}?id=${encodeURIComponent(id)}`);\n const runtimeListPath =\n routes.runtimeListPath ??\n ((id: string) => `${joinPath(runtimeBasePath, \"list\")}?id=${encodeURIComponent(id)}`);\n\n const viewsPath = routes.viewsPath ?? joinPath(adminBasePath, \"views\");\n const newViewPath = routes.newViewPath ?? joinPath(viewsPath, \"new\");\n const editViewPath =\n routes.editViewPath ?? ((id: string) => `${joinPath(viewsPath, \"edit\")}?id=${encodeURIComponent(id)}`);\n const runtimeViewPath =\n routes.runtimeViewPath ??\n ((id: string) => `${joinPath(runtimeBasePath, \"view\")}?id=${encodeURIComponent(id)}`);\n\n const formFieldType = (fieldTypeOptions[0]?.value ?? \"text\") as string;\n const formTriggerEvent = (formTriggerEventOptions[0]?.value ?? \"beforeCreate\") as string;\n const listTriggerEvent = (listTriggerEventOptions[0]?.value ?? \"beforeRead\") as string;\n\n const emptyField: BuilderFormEditorFieldValues<string> = {\n key: \"name\",\n label: \"Name\",\n type: formFieldType,\n required: true,\n hidden: false,\n disabled: false,\n placeholder: \"\",\n optionsText: \"\",\n optionsMode: \"static\",\n optionsTable: BUILDER_EDITOR_NONE_VALUE,\n optionsValueField: BUILDER_EDITOR_NONE_VALUE,\n optionsLabelField: BUILDER_EDITOR_NONE_VALUE,\n optionsSearchFieldsText: \"\",\n optionsDependsOn: \"\",\n optionsFilterField: \"\",\n triggers: [],\n };\n\n const emptyFormValues: BuilderFormEditorValues<string, string> = {\n title: \"\",\n description: \"\",\n presentation: \"dialog\",\n sourceType: \"none\",\n sourceTable: BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: \"\",\n fields: [emptyField],\n layoutGroups: builderFormEditorDefaultLayoutGroups([emptyField]),\n subforms: [],\n triggers: [],\n version: 0,\n };\n\n const emptyFormTrigger: BuilderEditorTriggerValues<string> = {\n event: formTriggerEvent,\n route: \"/api/v1/\",\n enabled: false,\n blocking: true,\n };\n\n const emptyColumn: BuilderListEditorColumnValues = {\n key: \"name\",\n label: \"Name\",\n sortable: true,\n align: \"left\",\n };\n\n const emptyListValues: BuilderListEditorValues<string> = {\n title: \"\",\n description: \"\",\n sourceType: \"none\",\n sourceTable: BUILDER_EDITOR_NONE_VALUE,\n apiBasePath: \"\",\n columns: [emptyColumn],\n triggers: [],\n version: 0,\n };\n\n const emptyListTrigger: BuilderEditorTriggerValues<string> = {\n event: listTriggerEvent,\n route: \"/api/v1/\",\n enabled: false,\n blocking: true,\n };\n\n const FormEditorPage = createBuilderFormEditorPageComponent<\n C[\"BuilderForm\"],\n C[\"UpdateBuilderFormInput\"],\n string,\n string\n >({\n emptyValues: emptyFormValues,\n emptyField,\n emptyTrigger: emptyFormTrigger,\n labels: {\n created: \"Form created\",\n saved: \"Form saved\",\n },\n states: {\n loading: \"Loading...\",\n error: \"Failed to load form.\",\n },\n hooks: {\n useEntity: hooks.useBuilderForm,\n useTables: hooks.useBuilderDbTables,\n useSave: hooks.useSaveBuilderForm,\n },\n buildInput: (values) => builderFormEditorInputFromValues(values) as C[\"UpdateBuilderFormInput\"],\n navigateAfterCreate: (entity) => window.location.assign(editFormPath(entity.id)),\n notifications: {\n success: (message) => notifySuccess?.(message),\n error: (error) => {\n if (notifyError) notifyError(error);\n else throw error;\n },\n },\n Body: createBuilderDefaultFormEditorBody({\n backHref: formsPath,\n fieldTypeOptions,\n formTriggerEventOptions,\n fieldTriggerEventOptions,\n }),\n });\n\n const ListEditorPage = createBuilderListEditorPageComponent<\n C[\"BuilderList\"],\n C[\"UpdateBuilderListInput\"],\n string\n >({\n emptyValues: emptyListValues,\n emptyColumn,\n emptyTrigger: emptyListTrigger,\n labels: {\n created: \"List created\",\n saved: \"List saved\",\n },\n states: {\n loading: \"Loading...\",\n error: \"Failed to load list.\",\n },\n hooks: {\n useEntity: hooks.useBuilderList,\n useTables: hooks.useBuilderDbTables,\n useSave: hooks.useSaveBuilderList,\n },\n buildInput: (values) => builderListEditorInputFromValues(values) as C[\"UpdateBuilderListInput\"],\n navigateAfterCreate: (entity) => window.location.assign(editListPath(entity.id)),\n notifications: {\n success: (message) => notifySuccess?.(message),\n error: (error) => {\n if (notifyError) notifyError(error);\n else throw error;\n },\n },\n Body: createBuilderDefaultListEditorBody({\n backHref: listsPath,\n listTriggerEventOptions,\n }),\n });\n\n const ViewEditorPage = createBuilderDefaultViewEditorPage<C>({\n hooks,\n backHref: viewsPath,\n editHref: editViewPath,\n permissionOptions,\n defaultPermission,\n parseTriggers: parseViewTriggers,\n notifySuccess,\n notifyError,\n });\n\n const AdminHomePage = function BuilderAdminHomePage() {\n const items = [\n {\n title: \"Dynamic Forms\",\n description: \"Reusable form schemas.\",\n href: formsPath,\n },\n {\n title: \"Dynamic Lists\",\n description: \"Reusable list and grid schemas.\",\n href: listsPath,\n },\n {\n title: \"Dynamic Views\",\n description: \"Runtime screens composed from form and list schemas.\",\n href: viewsPath,\n },\n ];\n\n return (\n <section style={homeStyles.page}>\n <div>\n <h1 style={homeStyles.headerTitle}>Builder</h1>\n <p style={homeStyles.description}>Manage dynamic forms, lists, and views.</p>\n </div>\n <div style={homeStyles.grid}>\n {items.map((item) => (\n <a key={item.href} href={item.href} style={homeStyles.card}>\n <h2 style={homeStyles.cardTitle}>{item.title}</h2>\n <p style={homeStyles.description}>{item.description}</p>\n </a>\n ))}\n </div>\n </section>\n );\n };\n\n const AdminFormsPage = createBuilderDefaultEntityManagerComponent<\n C[\"BuilderForm\"] & BuilderAdminEntity,\n C[\"ListBuilderFormsQuery\"]\n >({\n labels: {\n title: \"Dynamic Forms\",\n description: \"Reusable form schemas.\",\n searchPlaceholder: \"Search forms...\",\n emptyTitle: \"No forms\",\n emptyDescription: \"Create your first dynamic form.\",\n addLabel: \"Add form\",\n editLabel: \"Edit\",\n replicateLabel: \"Replicate\",\n deleteLabel: \"Delete\",\n runtimeLabel: \"Open\",\n deleteConfirm: (entity) => `Delete ${entity.title}?`,\n replicatePrompt: () => \"New form title\",\n replicateDefaultTitle: (entity) => `${entity.title} copy`,\n },\n createHref: newFormPath,\n editHref: (entity) => editFormPath(entity.id),\n runtimeHref: (entity) => runtimeFormPath(entity.id),\n getDetail: detail,\n buildQuery: (state) => defaultQuery(state) as C[\"ListBuilderFormsQuery\"],\n hooks: {\n useEntities: (query) =>\n hooks.useBuilderForms(query) as unknown as BuilderDefaultEntityQueryResult<\n C[\"BuilderForm\"] & BuilderAdminEntity\n >,\n useDelete: hooks.useDeleteBuilderForm,\n useReplicate: hooks.useReplicateBuilderForm,\n },\n });\n\n const AdminListsPage = createBuilderDefaultEntityManagerComponent<\n C[\"BuilderList\"] & BuilderAdminEntity,\n C[\"ListBuilderListsQuery\"]\n >({\n labels: {\n title: \"Dynamic Lists\",\n description: \"Reusable list and grid schemas.\",\n searchPlaceholder: \"Search lists...\",\n emptyTitle: \"No lists\",\n emptyDescription: \"Create your first dynamic list.\",\n addLabel: \"Add list\",\n editLabel: \"Edit\",\n replicateLabel: \"Replicate\",\n deleteLabel: \"Delete\",\n runtimeLabel: \"Open\",\n deleteConfirm: (entity) => `Delete ${entity.title}?`,\n replicatePrompt: () => \"New list title\",\n replicateDefaultTitle: (entity) => `${entity.title} copy`,\n },\n createHref: newListPath,\n editHref: (entity) => editListPath(entity.id),\n runtimeHref: (entity) => runtimeListPath(entity.id),\n getDetail: detail,\n buildQuery: (state) => defaultQuery(state) as C[\"ListBuilderListsQuery\"],\n hooks: {\n useEntities: (query) =>\n hooks.useBuilderLists(query) as unknown as BuilderDefaultEntityQueryResult<\n C[\"BuilderList\"] & BuilderAdminEntity\n >,\n useDelete: hooks.useDeleteBuilderList,\n useReplicate: hooks.useReplicateBuilderList,\n },\n });\n\n const AdminViewsPage = createBuilderDefaultEntityManagerComponent<\n C[\"BuilderView\"] & BuilderAdminEntity,\n C[\"ListBuilderViewsQuery\"]\n >({\n labels: {\n title: \"Dynamic Views\",\n description: \"Runtime screens composed from form and list schemas.\",\n searchPlaceholder: \"Search views...\",\n emptyTitle: \"No views\",\n emptyDescription: \"Create a dynamic view after preparing a form and list.\",\n addLabel: \"Add view\",\n editLabel: \"Edit\",\n replicateLabel: \"Replicate\",\n deleteLabel: \"Delete\",\n runtimeLabel: \"Open\",\n deleteConfirm: (entity) => `Delete ${entity.title}?`,\n replicatePrompt: () => \"New view title\",\n replicateDefaultTitle: (entity) => `${entity.title} copy`,\n },\n createHref: newViewPath,\n editHref: (entity) => editViewPath(entity.id),\n runtimeHref: (entity) => runtimeViewPath(entity.id),\n getDetail: detail,\n buildQuery: (state) => defaultQuery(state) as C[\"ListBuilderViewsQuery\"],\n hooks: {\n useEntities: (query) =>\n hooks.useBuilderViews(query) as unknown as BuilderDefaultEntityQueryResult<\n C[\"BuilderView\"] & BuilderAdminEntity\n >,\n useDelete: hooks.useDeleteBuilderView,\n useReplicate: hooks.useReplicateBuilderView,\n },\n });\n\n return {\n AdminHomePage,\n AdminFormsPage,\n AdminNewFormPage: function BuilderAdminNewFormPage() {\n return <FormEditorPage />;\n },\n AdminEditFormPage: function BuilderAdminEditFormPage({ formId }: { formId?: string }) {\n return <FormEditorPage formId={formId} />;\n },\n AdminListsPage,\n AdminNewListPage: function BuilderAdminNewListPage() {\n return <ListEditorPage />;\n },\n AdminEditListPage: function BuilderAdminEditListPage({ listId }: { listId?: string }) {\n return <ListEditorPage listId={listId} />;\n },\n AdminViewsPage,\n AdminNewViewPage: function BuilderAdminNewViewPage() {\n return <ViewEditorPage />;\n },\n AdminEditViewPage: function BuilderAdminEditViewPage({ viewId }: { viewId?: string }) {\n return <ViewEditorPage viewId={viewId} />;\n },\n routes: {\n adminBasePath,\n formsPath,\n newFormPath,\n editFormPath,\n listsPath,\n newListPath,\n editListPath,\n viewsPath,\n newViewPath,\n editViewPath,\n },\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport type BuilderEntityManagerEntity = {\n id: string;\n title: string;\n};\n\nexport type BuilderEntityManagerActions<TEntity extends BuilderEntityManagerEntity> = {\n onEdit(entity: TEntity): void;\n onReplicate(entity: TEntity): void | Promise<void>;\n onDelete(entity: TEntity): void;\n runtimeHref?: (entity: TEntity) => string;\n};\n\nexport type BuilderEntityManagerDataGridProps<TController, TEntity> = {\n title: string;\n description: string;\n controller: TController;\n isLoading?: boolean;\n searchPlaceholder: string;\n emptyTitle: string;\n emptyDescription: string;\n onRowClick(entity: TEntity): void;\n toolbarExtra: ReactNode;\n};\n\nexport type BuilderEntityManagerAddButtonProps = {\n href: string;\n label: string;\n};\n\nexport type BuilderEntityManagerDialogAddButtonProps = {\n label: string;\n onAdd(): void;\n};\n\nexport type BuilderEntityManagerDeleteDialogProps<TEntity> = {\n entity: TEntity | null;\n title: string;\n description: string;\n isDeleting: boolean;\n onClose(): void;\n onConfirm(): Promise<void>;\n};\n\nexport type BuilderEntityManagerEditorDialogProps<TEntity> = {\n open: boolean;\n editing: TEntity | null;\n onClose(): void;\n};\n\nexport type BuilderEntityManagerHookResult<TEntity> = {\n data?: {\n items: TEntity[];\n total: number;\n };\n isPending: boolean;\n};\n\nexport type BuilderEntityManagerMutation<TInput> = {\n mutateAsync(input: TInput): Promise<unknown>;\n isPending: boolean;\n};\n\nexport type BuilderEntityManagerLabels = {\n title: string;\n description: string;\n searchPlaceholder: string;\n emptyTitle: string;\n emptyDescription: string;\n addLabel: string;\n deleteTitle: string;\n deleteDescription(entity: BuilderEntityManagerEntity | null): string;\n};\n\nexport type BuilderEntityManagerDependencies<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n> = {\n labels: BuilderEntityManagerLabels;\n createHref: string;\n runtimeHref(entity: TEntity): string;\n navigateToEdit(entity: TEntity): void;\n requestReplicateTitle(entity: TEntity): string | null | Promise<string | null>;\n hooks: {\n useEntities(query: TQuery): BuilderEntityManagerHookResult<TEntity>;\n useDelete(): BuilderEntityManagerMutation<string>;\n useReplicate(): BuilderEntityManagerMutation<{ id: string; input: { title?: string } }>;\n };\n buildColumns(actions: BuilderEntityManagerActions<TEntity>): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: TEntity[];\n rowCount: number;\n state: TState;\n getRowId(row: TEntity): string;\n }): TController;\n DataGrid: ComponentType<BuilderEntityManagerDataGridProps<TController, TEntity>>;\n AddButton: ComponentType<BuilderEntityManagerAddButtonProps>;\n DeleteDialog: ComponentType<BuilderEntityManagerDeleteDialogProps<TEntity>>;\n};\n\nexport type BuilderEntityDialogManagerDependencies<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n> = {\n labels: BuilderEntityManagerLabels;\n runtimeHref(entity: TEntity): string;\n requestReplicateTitle(entity: TEntity): string | null | Promise<string | null>;\n hooks: {\n useEntities(query: TQuery): BuilderEntityManagerHookResult<TEntity>;\n useDelete(): BuilderEntityManagerMutation<string>;\n useReplicate(): BuilderEntityManagerMutation<{ id: string; input: { title?: string } }>;\n };\n buildColumns(actions: BuilderEntityManagerActions<TEntity>): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: TEntity[];\n rowCount: number;\n state: TState;\n getRowId(row: TEntity): string;\n }): TController;\n DataGrid: ComponentType<BuilderEntityManagerDataGridProps<TController, TEntity>>;\n AddButton: ComponentType<BuilderEntityManagerDialogAddButtonProps>;\n EditorDialog: ComponentType<BuilderEntityManagerEditorDialogProps<TEntity>>;\n DeleteDialog: ComponentType<BuilderEntityManagerDeleteDialogProps<TEntity>>;\n};\n\nexport function createBuilderEntityManagerComponent<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n>(deps: BuilderEntityManagerDependencies<TEntity, TColumn, TState, TQuery, TController>) {\n return function BuilderEntityManager() {\n const [pendingDelete, setPendingDelete] = useState<TEntity | null>(null);\n const state = deps.useDataTableState({ pageSize: 20 });\n const query = deps.hooks.useEntities(state.query);\n const remove = deps.hooks.useDelete();\n const replicate = deps.hooks.useReplicate();\n\n const columns = useMemo(\n () =>\n deps.buildColumns({\n onEdit: deps.navigateToEdit,\n onReplicate: async (entity) => {\n const title = await deps.requestReplicateTitle(entity);\n if (!title) return;\n await replicate.mutateAsync({ id: entity.id, input: { title } });\n },\n onDelete: setPendingDelete,\n runtimeHref: deps.runtimeHref,\n }),\n [replicate],\n );\n\n const controller = deps.useDataTable({\n columns,\n data: query.data?.items ?? [],\n rowCount: query.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n return (\n <div className=\"space-y-6\">\n <deps.DataGrid\n title={deps.labels.title}\n description={deps.labels.description}\n controller={controller}\n isLoading={query.isPending}\n searchPlaceholder={deps.labels.searchPlaceholder}\n emptyTitle={deps.labels.emptyTitle}\n emptyDescription={deps.labels.emptyDescription}\n onRowClick={deps.navigateToEdit}\n toolbarExtra={<deps.AddButton href={deps.createHref} label={deps.labels.addLabel} />}\n />\n\n <deps.DeleteDialog\n entity={pendingDelete}\n title={deps.labels.deleteTitle}\n description={deps.labels.deleteDescription(pendingDelete)}\n isDeleting={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={async () => {\n if (!pendingDelete) return;\n await remove.mutateAsync(pendingDelete.id);\n setPendingDelete(null);\n }}\n />\n </div>\n );\n };\n}\n\nexport function createBuilderEntityDialogManagerComponent<\n TEntity extends BuilderEntityManagerEntity,\n TColumn,\n TState extends { query: TQuery },\n TQuery,\n TController,\n>(deps: BuilderEntityDialogManagerDependencies<TEntity, TColumn, TState, TQuery, TController>) {\n return function BuilderEntityDialogManager() {\n const [editing, setEditing] = useState<TEntity | null>(null);\n const [isEditorOpen, setEditorOpen] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<TEntity | null>(null);\n const state = deps.useDataTableState({ pageSize: 20 });\n const query = deps.hooks.useEntities(state.query);\n const remove = deps.hooks.useDelete();\n const replicate = deps.hooks.useReplicate();\n\n const openEditor = useCallback((entity: TEntity | null) => {\n setEditing(entity);\n setEditorOpen(true);\n }, []);\n\n const columns = useMemo(\n () =>\n deps.buildColumns({\n onEdit: (entity) => openEditor(entity),\n onReplicate: async (entity) => {\n const title = await deps.requestReplicateTitle(entity);\n if (!title) return;\n await replicate.mutateAsync({ id: entity.id, input: { title } });\n },\n onDelete: setPendingDelete,\n runtimeHref: deps.runtimeHref,\n }),\n [replicate, openEditor],\n );\n\n const controller = deps.useDataTable({\n columns,\n data: query.data?.items ?? [],\n rowCount: query.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n return (\n <div className=\"space-y-6\">\n <deps.DataGrid\n title={deps.labels.title}\n description={deps.labels.description}\n controller={controller}\n isLoading={query.isPending}\n searchPlaceholder={deps.labels.searchPlaceholder}\n emptyTitle={deps.labels.emptyTitle}\n emptyDescription={deps.labels.emptyDescription}\n onRowClick={openEditor}\n toolbarExtra={\n <deps.AddButton label={deps.labels.addLabel} onAdd={() => openEditor(null)} />\n }\n />\n\n <deps.EditorDialog\n open={isEditorOpen}\n editing={editing}\n onClose={() => setEditorOpen(false)}\n />\n\n <deps.DeleteDialog\n entity={pendingDelete}\n title={deps.labels.deleteTitle}\n description={deps.labels.deleteDescription(pendingDelete)}\n isDeleting={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={async () => {\n if (!pendingDelete) return;\n await remove.mutateAsync(pendingDelete.id);\n setPendingDelete(null);\n }}\n />\n </div>\n );\n };\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useEffect } from \"react\";\nimport { FormProvider, type Resolver, type UseFormReturn, useForm } from \"react-hook-form\";\nimport {\n type BuilderViewEditorEntity,\n type BuilderViewEditorValues,\n builderViewEditorValuesFromEntity,\n} from \"./editorState\";\n\ntype BuilderOptionEntity = {\n id: string;\n title: string;\n};\n\ntype BuilderViewDialogSaveMutation<TInput> = (args: {\n id?: string;\n input: TInput;\n}) => Promise<unknown>;\n\ntype BuilderViewDialogNotifications = {\n success(message: string): void;\n error(error: unknown): void;\n};\n\ntype BuilderViewDialogLabels = {\n created: string;\n saved: string;\n};\n\nexport type BuilderViewDialogProps<TView, TForm, TList, TInput> = {\n open: boolean;\n editing: TView | null;\n forms: TForm[];\n lists: TList[];\n onClose(): void;\n onSave: BuilderViewDialogSaveMutation<TInput>;\n isSaving: boolean;\n};\n\nexport type BuilderViewDialogShellProps<TView> = {\n open: boolean;\n editing: TView | null;\n onClose(): void;\n children: ReactNode;\n};\n\nexport type BuilderViewDialogBodyProps<TForm, TList> = {\n form: UseFormReturn<BuilderViewEditorValues>;\n editing: BuilderViewEditorEntity | null;\n forms: TForm[];\n lists: TList[];\n permissionOptions: Array<{ value: string; label: string }>;\n noneValue: string;\n isSaving: boolean;\n onClose(): void;\n};\n\nexport type BuilderViewDialogDependencies<\n TView extends BuilderViewEditorEntity & { id: string },\n TForm extends BuilderOptionEntity,\n TList extends BuilderOptionEntity,\n TInput,\n> = {\n emptyValues: BuilderViewEditorValues;\n defaultPermission?: string;\n permissionOptions: Array<{ value: string; label: string }>;\n noneValue: string;\n resolver?: Resolver<BuilderViewEditorValues>;\n labels: BuilderViewDialogLabels;\n buildInput(values: BuilderViewEditorValues): TInput;\n notifications: BuilderViewDialogNotifications;\n Shell(props: BuilderViewDialogShellProps<TView>): ReactNode;\n Body(props: BuilderViewDialogBodyProps<TForm, TList>): ReactNode;\n};\n\nexport function createBuilderViewDialogComponent<\n TView extends BuilderViewEditorEntity & { id: string },\n TForm extends BuilderOptionEntity,\n TList extends BuilderOptionEntity,\n TInput,\n>(deps: BuilderViewDialogDependencies<TView, TForm, TList, TInput>) {\n return function BuilderViewDialog({\n open,\n editing,\n forms,\n lists,\n onClose,\n onSave,\n isSaving,\n }: BuilderViewDialogProps<TView, TForm, TList, TInput>) {\n const form = useForm<BuilderViewEditorValues>({\n resolver: deps.resolver,\n defaultValues: deps.emptyValues,\n });\n\n useEffect(() => {\n if (!open) return;\n form.reset(\n builderViewEditorValuesFromEntity(editing, deps.emptyValues, deps.defaultPermission),\n );\n }, [editing, form, open]);\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n await onSave({ id: editing?.id, input: deps.buildInput(values) });\n onClose();\n deps.notifications.success(editing ? deps.labels.saved : deps.labels.created);\n } catch (error) {\n deps.notifications.error(error);\n }\n });\n\n return (\n <deps.Shell open={open} editing={editing} onClose={onClose}>\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate>\n {deps.Body({\n form,\n editing,\n forms,\n lists,\n permissionOptions: deps.permissionOptions,\n noneValue: deps.noneValue,\n isSaving,\n onClose,\n })}\n </form>\n </FormProvider>\n </deps.Shell>\n );\n };\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { useWatch } from \"react-hook-form\";\nimport {\n type BuilderFormEditorFieldValues,\n type BuilderFormEditorLayoutGroupValues,\n type BuilderFormEditorSubformValues,\n type BuilderFormEditorValues,\n builderFormEditorDefaultLayoutGroups,\n builderFormEditorDefaultSpan,\n} from \"./editorState\";\n\nexport const builderFormLayoutDragDataType = \"application/x-winu-builder-layout-field\";\n\nexport type BuilderFormLayoutItem = {\n key: string;\n kind: \"field\" | \"subform\";\n meta: string;\n span: number;\n};\n\nexport type BuilderFormLayoutDragPayload =\n | { type: \"palette\"; key: string }\n | { type: \"layout\"; groupIndex: number; fieldIndex: number; key: string };\n\nexport function clampBuilderFormLayoutSpan(span: number, columns: 6 | 8 | 12) {\n return Math.max(1, Math.min(columns, span));\n}\n\nexport function swapBuilderFormLayoutItems<T>(items: T[], from: number, to: number) {\n if (from < 0 || from >= items.length || to < 0 || to >= items.length) return items;\n const next = [...items];\n const item = next[from];\n next[from] = next[to];\n next[to] = item;\n return next;\n}\n\nexport function nextBuilderFormLayoutGroupId(groups: BuilderFormEditorLayoutGroupValues[]) {\n let index = groups.length + 1;\n let id = `group${index}`;\n const ids = new Set(groups.map((group) => group.id));\n while (ids.has(id)) {\n index += 1;\n id = `group${index}`;\n }\n return id;\n}\n\nexport function serializeBuilderFormLayoutDragPayload(payload: BuilderFormLayoutDragPayload) {\n return JSON.stringify(payload);\n}\n\nexport function parseBuilderFormLayoutDragPayload(raw: string) {\n if (!raw) return null;\n try {\n const value = JSON.parse(raw) as Partial<BuilderFormLayoutDragPayload>;\n if (value.type === \"palette\" && typeof value.key === \"string\" && value.key) {\n return { type: value.type, key: value.key };\n }\n if (\n value.type === \"layout\" &&\n typeof value.key === \"string\" &&\n value.key &&\n Number.isInteger(value.groupIndex) &&\n Number.isInteger(value.fieldIndex) &&\n (value.groupIndex ?? -1) >= 0 &&\n (value.fieldIndex ?? -1) >= 0\n ) {\n return {\n type: value.type,\n groupIndex: value.groupIndex,\n fieldIndex: value.fieldIndex,\n key: value.key,\n };\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport type UseBuilderFormLayoutEditorArgs<\n TFieldType extends string,\n TTriggerEvent extends string,\n> = {\n form: UseFormReturn<BuilderFormEditorValues<TFieldType, TTriggerEvent>>;\n fields: BuilderFormEditorFieldValues<TFieldType>[];\n subforms?: BuilderFormEditorSubformValues[];\n};\n\nexport function useBuilderFormLayoutEditor<\n TFieldType extends string,\n TTriggerEvent extends string,\n>({ form, fields, subforms = [] }: UseBuilderFormLayoutEditorArgs<TFieldType, TTriggerEvent>) {\n const layoutGroups = useWatch({ control: form.control, name: \"layoutGroups\" }) ?? [];\n const layoutItems = useMemo<BuilderFormLayoutItem[]>(\n () => [\n ...fields.map((field) => ({\n key: field.key,\n kind: \"field\" as const,\n meta: field.type,\n span: builderFormEditorDefaultSpan(field),\n })),\n ...subforms.map((subform) => ({\n key: subform.key,\n kind: \"subform\" as const,\n meta: \"subform\",\n span: 12,\n })),\n ],\n [fields, subforms],\n );\n const assignedKeys = useMemo(\n () => new Set(layoutGroups.flatMap((group) => group.fields.map((field) => field.key))),\n [layoutGroups],\n );\n const unassignedItems = useMemo(\n () => layoutItems.filter((item) => !assignedKeys.has(item.key)),\n [assignedKeys, layoutItems],\n );\n\n const setGroups = (groups: BuilderFormEditorLayoutGroupValues[]) => {\n form.setValue(\"layoutGroups\", groups, { shouldDirty: true, shouldValidate: true });\n };\n\n const updateGroup = (groupIndex: number, group: BuilderFormEditorLayoutGroupValues) => {\n setGroups(layoutGroups.map((item, index) => (index === groupIndex ? group : item)));\n };\n\n const updateGroupFields = (\n groupIndex: number,\n updater: (\n fields: BuilderFormEditorLayoutGroupValues[\"fields\"],\n ) => BuilderFormEditorLayoutGroupValues[\"fields\"],\n ) => {\n const group = layoutGroups[groupIndex];\n if (!group) return;\n updateGroup(groupIndex, { ...group, fields: updater(group.fields) });\n };\n\n const addGroup = () => {\n setGroups([\n ...layoutGroups,\n {\n id: nextBuilderFormLayoutGroupId(layoutGroups),\n title: `Group ${layoutGroups.length + 1}`,\n columns: 12,\n fields: [],\n },\n ]);\n };\n\n const addItemToNewGroup = (itemKey: string) => {\n if (assignedKeys.has(itemKey)) return;\n const item = layoutItems.find((candidate) => candidate.key === itemKey);\n if (!item) return;\n setGroups([\n ...layoutGroups,\n {\n id: nextBuilderFormLayoutGroupId(layoutGroups),\n title: layoutGroups.length === 0 ? \"Үндсэн\" : `Group ${layoutGroups.length + 1}`,\n columns: 12,\n fields: [{ key: itemKey, span: item.span }],\n },\n ]);\n };\n\n const addItemToGroup = (groupIndex: number, itemKey: string, insertAt?: number) => {\n if (assignedKeys.has(itemKey)) return;\n const item = layoutItems.find((candidate) => candidate.key === itemKey);\n const group = layoutGroups[groupIndex];\n if (!item || !group) return;\n const nextField = {\n key: itemKey,\n span: clampBuilderFormLayoutSpan(item.span, group.columns),\n };\n updateGroupFields(groupIndex, (groupFields) => {\n const next = [...groupFields];\n next.splice(insertAt ?? next.length, 0, nextField);\n return next;\n });\n };\n\n const moveLayoutField = (\n payload: Extract<BuilderFormLayoutDragPayload, { type: \"layout\" }>,\n targetGroupIndex: number,\n targetFieldIndex?: number,\n ) => {\n const sourceGroup = layoutGroups[payload.groupIndex];\n const targetGroup = layoutGroups[targetGroupIndex];\n if (!sourceGroup || !targetGroup) return;\n const movingField = sourceGroup.fields[payload.fieldIndex];\n if (!movingField) return;\n\n const nextGroups = layoutGroups.map((group) => ({ ...group, fields: [...group.fields] }));\n nextGroups[payload.groupIndex].fields.splice(payload.fieldIndex, 1);\n\n let insertAt = targetFieldIndex ?? nextGroups[targetGroupIndex].fields.length;\n if (payload.groupIndex === targetGroupIndex && payload.fieldIndex < insertAt) {\n insertAt -= 1;\n }\n\n nextGroups[targetGroupIndex].fields.splice(insertAt, 0, {\n ...movingField,\n span: clampBuilderFormLayoutSpan(movingField.span, targetGroup.columns),\n });\n setGroups(nextGroups);\n };\n\n const applyDragPayload = (\n payload: BuilderFormLayoutDragPayload | null,\n targetGroupIndex: number,\n targetFieldIndex?: number,\n ) => {\n if (!payload) return;\n if (payload.type === \"palette\") {\n addItemToGroup(targetGroupIndex, payload.key, targetFieldIndex);\n return;\n }\n moveLayoutField(payload, targetGroupIndex, targetFieldIndex);\n };\n\n const resetDefaultLayout = () => setGroups(builderFormEditorDefaultLayoutGroups(fields, subforms));\n\n return {\n assignedKeys,\n layoutGroups,\n layoutItems,\n unassignedItems,\n addGroup,\n addItemToGroup,\n addItemToNewGroup,\n applyDragPayload,\n resetDefaultLayout,\n setGroups,\n updateGroup,\n updateGroupFields,\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport {\n type BuilderRuntimeFormSchemaLike,\n type BuilderRuntimeFormValues,\n createBuilderFormDefaultValues,\n} from \"../runtime\";\n\nexport type DynamicFormContracts = BuilderApiContracts & {\n BuilderForm: {\n id: string;\n title: string;\n schema: BuilderRuntimeFormSchemaLike;\n };\n CreateBuilderViewEntryInput: BuilderRuntimeFormValues;\n};\n\nexport type DynamicFormProps = {\n formId: string;\n};\n\nexport type DynamicFormShellProps = {\n title: string;\n children: ReactNode;\n};\n\nexport type DynamicFormFieldsProps<TSchema> = {\n formId: string;\n schema: TSchema;\n namePrefix: \"values\";\n};\n\nexport type DynamicFormSubmitProps = {\n isSaving: boolean;\n};\n\nexport type DynamicFormErrorStateProps = {\n title: string;\n description: string;\n};\n\nexport type DynamicFormNotifications = {\n success(message: string): void;\n error(message: string): void;\n errorMessage(error: unknown, fallback: string): string;\n};\n\nexport type DynamicFormDependencies<C extends DynamicFormContracts> = {\n hooks: Pick<BuilderHooks<C>, \"useRuntimeBuilderForm\" | \"useSaveRuntimeBuilderFormEntry\">;\n FormShell: ComponentType<DynamicFormShellProps>;\n FormFields: ComponentType<DynamicFormFieldsProps<C[\"BuilderForm\"][\"schema\"]>>;\n SubmitButton: ComponentType<DynamicFormSubmitProps>;\n ErrorState: ComponentType<DynamicFormErrorStateProps>;\n notifications: DynamicFormNotifications;\n};\n\nexport function createDynamicFormComponent<C extends DynamicFormContracts>(\n deps: DynamicFormDependencies<C>,\n) {\n return function DynamicForm({ formId }: DynamicFormProps) {\n const query = deps.hooks.useRuntimeBuilderForm(formId);\n const save = deps.hooks.useSaveRuntimeBuilderFormEntry(formId);\n const formValues = useMemo(\n () => (query.data ? createBuilderFormDefaultValues(query.data.schema) : undefined),\n [query.data],\n );\n const form = useForm<BuilderRuntimeFormValues>({\n defaultValues: createBuilderFormDefaultValues(query.data?.schema),\n values: formValues,\n });\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n await save.mutateAsync(values as C[\"CreateBuilderViewEntryInput\"]);\n form.reset(createBuilderFormDefaultValues(query.data?.schema));\n deps.notifications.success(\"Form хадгалагдлаа\");\n } catch (error) {\n deps.notifications.error(deps.notifications.errorMessage(error, \"Хадгалахад алдаа гарлаа\"));\n }\n });\n\n if (query.isError) {\n return (\n <deps.ErrorState\n title=\"Form нээгдсэнгүй\"\n description={`«${formId}» id-тай form олдсонгүй.`}\n />\n );\n }\n\n if (!query.data) return null;\n\n return (\n <deps.FormShell title={query.data.title}>\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className=\"space-y-6\">\n <deps.FormFields formId={formId} schema={query.data.schema} namePrefix=\"values\" />\n <deps.SubmitButton isSaving={save.isPending} />\n </form>\n </FormProvider>\n </deps.FormShell>\n );\n };\n}\n","\"use client\";\n\nimport type { ComponentType } from \"react\";\nimport { useMemo } from \"react\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\n\nexport type DynamicListContracts = BuilderApiContracts & {\n BuilderList: {\n id: string;\n title: string;\n description?: string | null;\n };\n BuilderViewEntry: {\n id: string;\n };\n ListBuilderViewEntriesResponse: {\n items: Array<BuilderApiContracts[\"BuilderViewEntry\"]>;\n total: number;\n };\n};\n\nexport type DynamicListProps = {\n listId: string;\n};\n\nexport type DynamicListDataGridProps<TController> = {\n title?: string;\n description?: string;\n controller: TController;\n isLoading?: boolean;\n searchPlaceholder?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n};\n\nexport type DynamicListErrorStateProps = {\n title: string;\n description: string;\n};\n\nexport type DynamicListDependencies<\n C extends DynamicListContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n> = {\n hooks: Pick<BuilderHooks<C>, \"useRuntimeBuilderList\" | \"useRuntimeBuilderListEntries\">;\n buildColumns(list: C[\"BuilderList\"]): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: C[\"BuilderViewEntry\"][];\n rowCount: number;\n state: TState;\n getRowId(row: C[\"BuilderViewEntry\"]): string;\n }): TController;\n DataGrid: ComponentType<DynamicListDataGridProps<TController>>;\n ErrorState: ComponentType<DynamicListErrorStateProps>;\n};\n\nexport function createDynamicListComponent<\n C extends DynamicListContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n>(deps: DynamicListDependencies<C, TColumn, TState, TController>) {\n return function DynamicList({ listId }: DynamicListProps) {\n const query = deps.hooks.useRuntimeBuilderList(listId);\n const state = deps.useDataTableState({ pageSize: 20 });\n const entriesQuery = deps.hooks.useRuntimeBuilderListEntries(listId, state.query);\n const columns = useMemo(() => (query.data ? deps.buildColumns(query.data) : []), [query.data]);\n const entries = entriesQuery.data?.items ?? [];\n const controller = deps.useDataTable({\n columns,\n data: entries as C[\"BuilderViewEntry\"][],\n rowCount: entriesQuery.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n if (query.isError) {\n return (\n <deps.ErrorState\n title=\"List нээгдсэнгүй\"\n description={`«${listId}» id-тай list олдсонгүй.`}\n />\n );\n }\n\n return (\n <deps.DataGrid\n title={query.data?.title ?? \"Dynamic List\"}\n description={query.data?.description ?? `/winu/list?id=${listId}`}\n controller={controller}\n isLoading={query.isPending || entriesQuery.isPending}\n searchPlaceholder=\"Мөр хайх...\"\n emptyTitle=\"Мөр алга\"\n emptyDescription=\"Энэ list-ийн datasource дээр мөр алга.\"\n />\n );\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useMemo, useState } from \"react\";\nimport type { BuilderApiContracts } from \"../api\";\nimport type { BuilderHooks } from \"../hooks\";\nimport type { BuilderRuntimeEntryLike } from \"../runtime\";\n\nexport type DynamicViewContracts = BuilderApiContracts & {\n BuilderView: {\n id: string;\n title: string;\n description?: string | null;\n form?: unknown | null;\n };\n BuilderViewEntry: BuilderRuntimeEntryLike;\n ListBuilderViewEntriesResponse: {\n items: Array<BuilderApiContracts[\"BuilderViewEntry\"]>;\n total: number;\n };\n};\n\nexport type DynamicViewProps = {\n viewId: string;\n};\n\nexport type DynamicViewInteractionEvent = {\n defaultPrevented?: boolean;\n target?: unknown;\n stopPropagation?(): void;\n};\n\nexport type DynamicViewColumnActions<TEntry> = {\n onEdit(entry: TEntry, event?: DynamicViewInteractionEvent): void;\n onDelete(entry: TEntry, event?: DynamicViewInteractionEvent): void;\n};\n\nexport type DynamicViewDataGridProps<TController> = {\n title?: string;\n description?: string;\n controller: TController;\n isLoading?: boolean;\n searchPlaceholder?: string;\n emptyTitle?: string;\n emptyDescription?: string;\n onRowClick?: (row: unknown, event?: DynamicViewInteractionEvent) => void;\n toolbarExtra?: ReactNode;\n};\n\nexport type DynamicViewAddButtonProps = {\n disabled: boolean;\n onAdd(): void;\n};\n\nexport type DynamicViewEntryDialogProps<TView, TEntry, TInput> = {\n open: boolean;\n view: TView;\n editing: TEntry | null;\n onClose(): void;\n onSave(args: { id?: string; input: TInput }): Promise<unknown>;\n isSaving: boolean;\n};\n\nexport type DynamicViewDeleteDialogProps<TEntry> = {\n entry: TEntry | null;\n isDeleting: boolean;\n onClose(): void;\n onConfirm(): Promise<void>;\n};\n\nexport type DynamicViewErrorStateProps = {\n title: string;\n description: string;\n};\n\ntype ClosestTarget = {\n closest(selector: string): unknown;\n};\n\nconst interactiveRowTargetSelector =\n \"button,a,input,select,textarea,[role='button'],[role='menuitem'],[data-builder-row-action]\";\n\nfunction hasClosest(target: unknown): target is ClosestTarget {\n return (\n typeof target === \"object\" &&\n target !== null &&\n \"closest\" in target &&\n typeof target.closest === \"function\"\n );\n}\n\nexport function shouldHandleDynamicViewRowClick(event?: DynamicViewInteractionEvent) {\n if (!event) return true;\n if (event.defaultPrevented) return false;\n return !hasClosest(event.target) || !event.target.closest(interactiveRowTargetSelector);\n}\n\nexport type DynamicViewDependencies<\n C extends DynamicViewContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n> = {\n hooks: Pick<\n BuilderHooks<C>,\n | \"useBuilderViewEntries\"\n | \"useDeleteBuilderViewEntry\"\n | \"useRuntimeBuilderView\"\n | \"useSaveBuilderViewEntry\"\n >;\n buildColumns(\n view: C[\"BuilderView\"],\n actions: DynamicViewColumnActions<C[\"BuilderViewEntry\"]>,\n ): TColumn[];\n useDataTableState(args?: { pageSize?: number }): TState;\n useDataTable(args: {\n columns: TColumn[];\n data: C[\"BuilderViewEntry\"][];\n rowCount: number;\n state: TState;\n getRowId(row: C[\"BuilderViewEntry\"]): string;\n }): TController;\n DataGrid: ComponentType<DynamicViewDataGridProps<TController>>;\n AddButton: ComponentType<DynamicViewAddButtonProps>;\n EntryDialog: ComponentType<\n DynamicViewEntryDialogProps<\n C[\"BuilderView\"],\n C[\"BuilderViewEntry\"],\n C[\"UpdateBuilderViewEntryInput\"]\n >\n >;\n DeleteDialog: ComponentType<DynamicViewDeleteDialogProps<C[\"BuilderViewEntry\"]>>;\n ErrorState: ComponentType<DynamicViewErrorStateProps>;\n};\n\nexport function createDynamicViewComponent<\n C extends DynamicViewContracts,\n TColumn,\n TState extends { query: C[\"ListBuilderViewEntriesQuery\"] },\n TController,\n>(deps: DynamicViewDependencies<C, TColumn, TState, TController>) {\n return function DynamicView({ viewId }: DynamicViewProps) {\n const [editing, setEditing] = useState<C[\"BuilderViewEntry\"] | null>(null);\n const [isDialogOpen, setDialogOpen] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<C[\"BuilderViewEntry\"] | null>(null);\n\n const viewQuery = deps.hooks.useRuntimeBuilderView(viewId);\n const state = deps.useDataTableState({ pageSize: 20 });\n const entriesQuery = deps.hooks.useBuilderViewEntries(viewId, state.query);\n const save = deps.hooks.useSaveBuilderViewEntry(viewId);\n const remove = deps.hooks.useDeleteBuilderViewEntry(viewId);\n const view = viewQuery.data;\n\n const columns = useMemo(\n () =>\n view\n ? deps.buildColumns(view, {\n onEdit: (entry, event) => {\n event?.stopPropagation?.();\n setEditing(entry);\n setDialogOpen(true);\n },\n onDelete: (entry, event) => {\n event?.stopPropagation?.();\n setPendingDelete(entry);\n },\n })\n : [],\n [view],\n );\n\n const controller = deps.useDataTable({\n columns,\n data: (entriesQuery.data?.items ?? []) as C[\"BuilderViewEntry\"][],\n rowCount: entriesQuery.data?.total ?? 0,\n state,\n getRowId: (row) => row.id,\n });\n\n if (viewQuery.isError) {\n return (\n <deps.ErrorState\n title=\"View нээгдсэнгүй\"\n description={`«${viewId}» id-тай view олдсонгүй.`}\n />\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <deps.DataGrid\n title={view?.title ?? \"Dynamic View\"}\n description={view?.description ?? `/winu/view?id=${viewId}`}\n controller={controller}\n isLoading={viewQuery.isPending || entriesQuery.isPending}\n searchPlaceholder=\"Мөр хайх...\"\n emptyTitle=\"Мөр алга\"\n emptyDescription=\"Энэ view дээр эхний мөрөө нэмээрэй.\"\n onRowClick={(entry, event) => {\n if (!shouldHandleDynamicViewRowClick(event)) return;\n setEditing(entry as C[\"BuilderViewEntry\"]);\n setDialogOpen(true);\n }}\n toolbarExtra={\n <deps.AddButton\n disabled={!view?.form}\n onAdd={() => {\n setEditing(null);\n setDialogOpen(true);\n }}\n />\n }\n />\n\n {view ? (\n <deps.EntryDialog\n open={isDialogOpen}\n view={view}\n editing={editing}\n onClose={() => setDialogOpen(false)}\n onSave={save.mutateAsync}\n isSaving={save.isPending}\n />\n ) : null}\n\n <deps.DeleteDialog\n entry={pendingDelete}\n isDeleting={remove.isPending}\n onClose={() => setPendingDelete(null)}\n onConfirm={async () => {\n if (!pendingDelete) return;\n await remove.mutateAsync(pendingDelete.id);\n setPendingDelete(null);\n }}\n />\n </div>\n );\n };\n}\n","\"use client\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport {\n type BuilderRuntimeEntryLike,\n type BuilderRuntimeEntryValues,\n type BuilderRuntimeFormSchemaLike,\n type BuilderRuntimePresentation,\n type BuilderRuntimeViewLike,\n createBuilderEntryDefaultValues,\n} from \"../runtime\";\n\ntype BuilderRuntimeDatasourceLike =\n | {\n type: \"dbTable\";\n tableName: string;\n }\n | {\n type: string;\n }\n | null;\n\nexport type RuntimeEntryDialogSubformLike = {\n key: string;\n};\n\nexport type RuntimeEntryDialogViewLike = BuilderRuntimeViewLike & {\n id: string;\n title: string;\n list?: {\n source?: BuilderRuntimeDatasourceLike;\n } | null;\n form?: {\n id: string;\n source?: BuilderRuntimeDatasourceLike;\n schema: BuilderRuntimeFormSchemaLike & {\n subforms?: readonly RuntimeEntryDialogSubformLike[];\n };\n } | null;\n};\n\nexport type RuntimeEntryDialogSaveArgs<TInput> = {\n id?: string;\n input: TInput;\n};\n\nexport type RuntimeEntryDialogProps<TView, TEntry, TInput> = {\n open: boolean;\n view: TView;\n editing: TEntry | null;\n onClose: () => void;\n onSave: (args: RuntimeEntryDialogSaveArgs<TInput>) => Promise<unknown>;\n isSaving: boolean;\n};\n\nexport type RuntimeEntryDialogShellProps = {\n open: boolean;\n presentation: BuilderRuntimePresentation;\n title: string;\n description: string;\n onClose: () => void;\n children: ReactNode;\n};\n\nexport type RuntimeEntryDialogExtraItem = {\n key: string;\n render: () => ReactNode;\n};\n\nexport type RuntimeEntryDialogFieldsProps<TSchema> = {\n formId: string;\n viewId: string;\n entry?: BuilderRuntimeEntryLike | null;\n schema: TSchema;\n namePrefix: \"values\";\n extraItems?: RuntimeEntryDialogExtraItem[];\n};\n\nexport type RuntimeEntryDialogActionsProps = {\n isSaving: boolean;\n onClose: () => void;\n};\n\nexport type RuntimeEntryDialogNotifications = {\n success(message: string): void;\n error(message: string): void;\n errorMessage(error: unknown, fallback: string): string;\n};\n\nexport type RuntimeEntryDialogDraftRowsChange<TEntry> = {\n subformKey: string;\n dataKey: string;\n rows: TEntry[];\n};\n\nexport type RuntimeEntryDialogSubformFieldProps<TSubform, TEntry> = {\n subform: TSubform;\n parentEntry?: TEntry | null;\n draftRows?: TEntry[];\n onDraftRowsChange?(args: RuntimeEntryDialogDraftRowsChange<TEntry>): void;\n};\n\ntype RuntimeEntryDialogDraftSubform<TEntry> = {\n dataKey: string;\n rows: TEntry[];\n};\n\ntype RuntimeCompositeData = Record<\n string,\n Record<string, unknown> | Array<Record<string, unknown>>\n>;\n\ntype RuntimeCompositeCreateInput = {\n data: RuntimeCompositeData;\n};\n\ntype RuntimeCompositeUpdateInput = {\n data: RuntimeCompositeData;\n};\n\ntype RuntimeMutation<TInput> = {\n mutateAsync(input: TInput): Promise<unknown>;\n isPending: boolean;\n};\n\nexport type RuntimeEntryDialogDependencies<\n TView extends RuntimeEntryDialogViewLike,\n TEntry extends BuilderRuntimeEntryLike = BuilderRuntimeEntryLike,\n> = {\n DialogShell: ComponentType<RuntimeEntryDialogShellProps>;\n FormFields: ComponentType<RuntimeEntryDialogFieldsProps<NonNullable<TView[\"form\"]>[\"schema\"]>>;\n Actions: ComponentType<RuntimeEntryDialogActionsProps>;\n formClassName?: string;\n SubformField?: ComponentType<\n RuntimeEntryDialogSubformFieldProps<\n NonNullable<NonNullable<TView[\"form\"]>[\"schema\"][\"subforms\"]>[number],\n TEntry\n >\n >;\n useCreateCompositeEntry?(viewId: string): RuntimeMutation<RuntimeCompositeCreateInput>;\n useUpdateCompositeEntry?(\n viewId: string,\n ): RuntimeMutation<{ id: string; input: RuntimeCompositeUpdateInput }>;\n notifications: RuntimeEntryDialogNotifications;\n};\n\nfunction isDbTableSource(\n source: BuilderRuntimeDatasourceLike | undefined,\n): source is { type: \"dbTable\"; tableName: string } {\n return source?.type === \"dbTable\" && \"tableName\" in source;\n}\n\nfunction runtimeViewTableName(view: RuntimeEntryDialogViewLike) {\n const listSource = view.list?.source;\n if (isDbTableSource(listSource)) return listSource.tableName;\n const formSource = view.form?.source;\n return isDbTableSource(formSource) ? formSource.tableName : undefined;\n}\n\nfunction cleanRowValues(values: Record<string, unknown>) {\n return Object.fromEntries(\n Object.entries(values).filter(([key]) => key === \"_delete\" || !key.startsWith(\"_\")),\n );\n}\n\nfunction childRowPayload(row: BuilderRuntimeEntryLike, includeIdentity: boolean) {\n const values = cleanRowValues(row.values);\n if (!includeIdentity || row.values._draftNew === true) return values;\n return {\n id: row.id,\n version: row.version,\n ...values,\n };\n}\n\nexport function createRuntimeEntryDialogComponent<\n TView extends RuntimeEntryDialogViewLike,\n TEntry extends BuilderRuntimeEntryLike,\n TInput extends BuilderRuntimeEntryValues,\n>(deps: RuntimeEntryDialogDependencies<TView, TEntry>) {\n return function RuntimeEntryDialog({\n open,\n view,\n editing,\n onClose,\n onSave,\n isSaving,\n }: RuntimeEntryDialogProps<TView, TEntry, TInput>) {\n const [draftSubforms, setDraftSubforms] = useState<\n Record<string, RuntimeEntryDialogDraftSubform<TEntry>>\n >({});\n const compositeCreate = deps.useCreateCompositeEntry?.(view.id);\n const compositeUpdate = deps.useUpdateCompositeEntry?.(view.id);\n const form = useForm<BuilderRuntimeEntryValues>({\n defaultValues: createBuilderEntryDefaultValues(view, editing),\n values: open ? createBuilderEntryDefaultValues(view, editing) : undefined,\n });\n const mainTableName = runtimeViewTableName(view);\n const hasDraftRows = useMemo(\n () => Object.values(draftSubforms).some((draft) => draft.rows.length > 0),\n [draftSubforms],\n );\n\n useEffect(() => {\n if (open) setDraftSubforms({});\n }, [open]);\n\n const onSubmit = form.handleSubmit(async (values) => {\n try {\n if (!editing && hasDraftRows) {\n if (!mainTableName) throw new Error(\"Main form datasource table олдсонгүй\");\n if (!compositeCreate) throw new Error(\"Composite create handler тохируулагдаагүй байна\");\n await compositeCreate.mutateAsync({\n data: {\n [mainTableName]: values.values,\n ...Object.fromEntries(\n Object.values(draftSubforms).map((draft) => [\n draft.dataKey,\n draft.rows\n .filter((row) => row.values._delete !== true)\n .map((row) => childRowPayload(row, false)),\n ]),\n ),\n },\n });\n } else if (editing && hasDraftRows) {\n if (!mainTableName) throw new Error(\"Main form datasource table олдсонгүй\");\n if (!compositeUpdate) throw new Error(\"Composite update handler тохируулагдаагүй байна\");\n await compositeUpdate.mutateAsync({\n id: editing.id,\n input: {\n data: {\n [mainTableName]: {\n id: editing.id,\n version: values.version,\n ...values.values,\n },\n ...Object.fromEntries(\n Object.values(draftSubforms).map((draft) => [\n draft.dataKey,\n draft.rows.map((row) => childRowPayload(row, true)),\n ]),\n ),\n },\n },\n });\n } else {\n await onSave({ id: editing?.id, input: values as TInput });\n }\n onClose();\n deps.notifications.success(editing ? \"Мөр хадгалагдлаа\" : \"Мөр нэмэгдлээ\");\n } catch (error) {\n deps.notifications.error(deps.notifications.errorMessage(error, \"Хадгалахад алдаа гарлаа\"));\n }\n });\n\n const saving = isSaving || Boolean(compositeCreate?.isPending || compositeUpdate?.isPending);\n const extraItems: RuntimeEntryDialogExtraItem[] | undefined =\n deps.SubformField && view.form?.schema.subforms?.length\n ? view.form.schema.subforms.map((subform) => ({\n key: subform.key,\n render: () =>\n deps.SubformField ? (\n <deps.SubformField\n subform={subform}\n parentEntry={editing}\n draftRows={draftSubforms[subform.key]?.rows ?? []}\n onDraftRowsChange={({ subformKey, dataKey, rows }) => {\n setDraftSubforms((current) => ({\n ...current,\n [subformKey]: { dataKey, rows: rows as TEntry[] },\n }));\n }}\n />\n ) : null,\n }))\n : undefined;\n\n return (\n <deps.DialogShell\n open={open}\n presentation={view.form?.schema.presentation ?? \"dialog\"}\n title={editing ? \"Мөр засах\" : \"Мөр нэмэх\"}\n description={view.title}\n onClose={onClose}\n >\n <FormProvider {...form}>\n <form onSubmit={onSubmit} noValidate className={deps.formClassName}>\n {view.form ? (\n <deps.FormFields\n formId={view.form.id}\n viewId={view.id}\n entry={editing}\n schema={view.form.schema}\n namePrefix=\"values\"\n extraItems={extraItems}\n />\n ) : null}\n <deps.Actions isSaving={saving} onClose={onClose} />\n </form>\n </FormProvider>\n </deps.DialogShell>\n );\n };\n}\n","\"use client\";\n\nimport {\n type BuilderApiClient,\n type BuilderApiContracts,\n type BuilderApiTransport,\n createBuilderApiClient,\n} from \"../api\";\nimport {\n type BuilderAdminPageContracts,\n type BuilderAdminPagesOptions,\n createBuilderAdminPages,\n} from \"../admin\";\nimport { type BuilderHooks, createBuilderHooks } from \"../hooks\";\n\nexport type BuilderIntegrationRoutes = {\n adminBasePath: string;\n adminHomePath: string;\n formsPath: string;\n newFormPath: string;\n editFormPath(id?: string): string;\n listsPath: string;\n newListPath: string;\n editListPath(id?: string): string;\n viewsPath: string;\n};\n\nexport type BuilderIntegrationConfig = {\n transport: BuilderApiTransport;\n adminBasePath?: string;\n runtimeBasePath?: string;\n apiBasePath?: string;\n adminPages?: Omit<BuilderAdminPagesOptions<BuilderAdminPageContracts>, \"hooks\" | \"routes\">;\n permissions?: unknown;\n triggers?: unknown;\n toast?: unknown;\n};\n\nexport type BuilderIntegration<C extends BuilderApiContracts> = {\n api: BuilderApiClient<C>;\n hooks: BuilderHooks<C>;\n routes: BuilderIntegrationRoutes & { runtimeBasePath: string };\n adminPages?: ReturnType<typeof createBuilderAdminPages<BuilderAdminPageContracts>>;\n};\n\nexport type BuilderFrontendSetupValidation = {\n ok: boolean;\n checks: Array<{ name: string; ok: boolean; message?: string }>;\n};\n\nfunction normalizeBasePath(path: string) {\n const trimmed = path.trim().replace(/\\/+$/g, \"\");\n if (!trimmed) return \"/builder\";\n return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n}\n\nfunction withQuery(path: string, query: Record<string, string | undefined>) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value) params.set(key, value);\n }\n const queryString = params.toString();\n return queryString ? `${path}?${queryString}` : path;\n}\n\nexport function createBuilderIntegration<C extends BuilderApiContracts>(\n config: BuilderIntegrationConfig,\n): BuilderIntegration<C> {\n const adminBasePath = normalizeBasePath(config.adminBasePath ?? \"/admin/dev/builder\");\n const runtimeBasePath = normalizeBasePath(config.runtimeBasePath ?? \"/admin/winu\");\n const api = createBuilderApiClient<C>(config.transport, { apiBasePath: config.apiBasePath });\n const hooks = createBuilderHooks<C>(api);\n\n const formsPath = `${adminBasePath}/forms`;\n const listsPath = `${adminBasePath}/lists`;\n\n const routes: BuilderIntegrationRoutes & { runtimeBasePath: string } = {\n adminBasePath,\n runtimeBasePath,\n adminHomePath: adminBasePath,\n formsPath,\n newFormPath: `${formsPath}/new`,\n editFormPath: (id) => withQuery(`${formsPath}/edit`, { id }),\n listsPath,\n newListPath: `${listsPath}/new`,\n editListPath: (id) => withQuery(`${listsPath}/edit`, { id }),\n viewsPath: `${adminBasePath}/views`,\n };\n const adminPages = config.adminPages\n ? createBuilderAdminPages<BuilderAdminPageContracts>({\n ...config.adminPages,\n hooks: hooks as unknown as Parameters<\n typeof createBuilderAdminPages<BuilderAdminPageContracts>\n >[0][\"hooks\"],\n routes: {\n adminBasePath,\n runtimeBasePath,\n },\n })\n : undefined;\n\n return {\n api,\n hooks,\n routes,\n adminPages,\n };\n}\n\nexport function createBuilderPortalIntegration<C extends BuilderApiContracts>(\n config: BuilderIntegrationConfig,\n): BuilderIntegration<C> {\n return createBuilderIntegration<C>(config);\n}\n\nexport function validateBuilderFrontendSetup(config: {\n adminBasePath?: string;\n runtimeBasePath?: string;\n apiBasePath?: string;\n transport?: unknown;\n}): BuilderFrontendSetupValidation {\n const checks = [\n {\n name: \"adminBasePath\",\n ok: Boolean(config.adminBasePath && normalizeBasePath(config.adminBasePath).startsWith(\"/\")),\n message: \"adminBasePath must be an absolute route path.\",\n },\n {\n name: \"runtimeBasePath\",\n ok: Boolean(config.runtimeBasePath && normalizeBasePath(config.runtimeBasePath).startsWith(\"/\")),\n message: \"runtimeBasePath must be an absolute route path.\",\n },\n {\n name: \"transport\",\n ok: Boolean(config.transport),\n message: \"API transport is required.\",\n },\n {\n name: \"apiBasePath\",\n ok: config.apiBasePath === undefined || normalizeBasePath(config.apiBasePath).startsWith(\"/\"),\n message: \"apiBasePath must be an absolute API path.\",\n },\n ].map((check) => (check.ok ? { name: check.name, ok: true } : check));\n\n return { ok: checks.every((check) => check.ok), checks };\n}\n","\"use client\";\n\nexport const builderUiPackage = {\n name: \"@duke333/builder-ui\",\n version: \"0.2.2\",\n} as const;\n\nexport {\n type BuilderClient,\n type BuilderFormProps,\n type BuilderGridProps,\n type BuilderNotification,\n type BuilderProviderProps,\n type BuilderViewProps,\n BuilderForm,\n BuilderGrid,\n BuilderProvider,\n BuilderView,\n type CreateBuilderClientOptions,\n type ReadyBuilderContracts,\n builderErrorMessage,\n createBuilderClient,\n useBuilderRuntime,\n} from \"./ready\";\n\nexport {\n BUILDER_EDITOR_NONE_VALUE,\n type BuilderEditorDbTable,\n type BuilderEditorSelectOption,\n type BuilderEditorTriggerValues,\n type BuilderAdminPageContracts,\n type BuilderAdminPagesOptions,\n type BuilderAdminPagesRoutes,\n type BuilderDefaultFormEditorBodyOptions,\n type BuilderDefaultListEditorBodyOptions,\n type BuilderDefaultOption,\n type BuilderDefaultEntity,\n type BuilderDefaultEntityListResult,\n type BuilderDefaultEntityManagerDependencies,\n type BuilderDefaultEntityManagerLabels,\n type BuilderDefaultEntityManagerState,\n type BuilderDefaultEntityMutation,\n type BuilderDefaultEntityQueryResult,\n type BuilderDefaultViewEditorContracts,\n type BuilderDefaultViewEditorPageOptions,\n type BuilderEntityDialogManagerDependencies,\n type BuilderEntityManagerActions,\n type BuilderEntityManagerAddButtonProps,\n type BuilderEntityManagerDataGridProps,\n type BuilderEntityManagerDeleteDialogProps,\n type BuilderEntityManagerDependencies,\n type BuilderEntityManagerDialogAddButtonProps,\n type BuilderEntityManagerEditorDialogProps,\n type BuilderEntityManagerEntity,\n type BuilderEntityManagerHookResult,\n type BuilderEntityManagerLabels,\n type BuilderEntityManagerMutation,\n type BuilderFormEditorBodyProps,\n type BuilderFormEditorEntity,\n type BuilderFormEditorFieldValues,\n type BuilderFormLayoutDragPayload,\n type BuilderFormLayoutItem,\n type BuilderFormEditorPageDependencies,\n type BuilderFormEditorValues,\n type BuilderListEditorBodyProps,\n type BuilderListEditorColumnValues,\n type BuilderListEditorEntity,\n type BuilderListEditorPageDependencies,\n type BuilderListEditorValues,\n type BuilderViewDialogBodyProps,\n type BuilderViewDialogDependencies,\n type BuilderViewDialogProps,\n type BuilderViewDialogShellProps,\n type BuilderViewEditorEntity,\n type BuilderViewEditorValues,\n builderEditorOptionsToText,\n builderEditorSearchFieldsToText,\n builderEditorTextToOptions,\n builderEditorTextToSearchFields,\n builderFormLayoutDragDataType,\n builderFormEditorFieldsFromTable,\n builderFormEditorInputFromValues,\n builderFormEditorValuesFromEntity,\n builderListEditorColumnsFromTable,\n builderListEditorInputFromValues,\n builderListEditorValuesFromEntity,\n builderViewEditorInputFromValues,\n builderViewEditorValuesFromEntity,\n clampBuilderFormLayoutSpan,\n createBuilderAdminPages,\n createBuilderDefaultEntityManagerComponent,\n createBuilderDefaultFormEditorBody,\n createBuilderDefaultListEditorBody,\n createBuilderDefaultViewEditorPage,\n createBuilderEntityDialogManagerComponent,\n createBuilderEntityManagerComponent,\n createBuilderFormEditorPageComponent,\n createBuilderListEditorPageComponent,\n createBuilderViewDialogComponent,\n getBuilderEditorTriggerRoute,\n nextBuilderFormLayoutGroupId,\n parseBuilderFormLayoutDragPayload,\n serializeBuilderFormLayoutDragPayload,\n swapBuilderFormLayoutItems,\n useBuilderFormLayoutEditor,\n} from \"./admin\";\nexport {\n type BuilderApiClient,\n type BuilderApiClientOptions,\n type BuilderApiContracts,\n type BuilderApiQuery,\n type BuilderApiQueryValue,\n type BuilderApiTransport,\n type BuilderFieldOptionsQuery,\n createBuilderApiClient,\n} from \"./api\";\nexport {\n createDynamicFormComponent,\n createDynamicListComponent,\n createDynamicViewComponent,\n createRuntimeEntryDialogComponent,\n type DynamicFormContracts,\n type DynamicFormDependencies,\n type DynamicFormErrorStateProps,\n type DynamicFormFieldsProps,\n type DynamicFormNotifications,\n type DynamicFormProps,\n type DynamicFormShellProps,\n type DynamicFormSubmitProps,\n type DynamicListContracts,\n type DynamicListDataGridProps,\n type DynamicListDependencies,\n type DynamicListErrorStateProps,\n type DynamicListProps,\n type DynamicViewAddButtonProps,\n type DynamicViewColumnActions,\n type DynamicViewContracts,\n type DynamicViewDataGridProps,\n type DynamicViewDeleteDialogProps,\n type DynamicViewDependencies,\n type DynamicViewEntryDialogProps,\n type DynamicViewErrorStateProps,\n type DynamicViewInteractionEvent,\n type DynamicViewProps,\n shouldHandleDynamicViewRowClick,\n type RuntimeEntryDialogActionsProps,\n type RuntimeEntryDialogDependencies,\n type RuntimeEntryDialogFieldsProps,\n type RuntimeEntryDialogNotifications,\n type RuntimeEntryDialogProps,\n type RuntimeEntryDialogSaveArgs,\n type RuntimeEntryDialogShellProps,\n type RuntimeEntryDialogViewLike,\n} from \"./components\";\nexport { type BuilderHooks, createBuilderHooks, createBuilderKeys } from \"./hooks\";\nexport {\n type BuilderIntegration,\n type BuilderIntegrationConfig,\n type BuilderIntegrationRoutes,\n type BuilderFrontendSetupValidation,\n createBuilderIntegration,\n createBuilderPortalIntegration,\n validateBuilderFrontendSetup,\n} from \"./integration\";\nexport {\n type BuilderRuntimeEntryLike,\n type BuilderRuntimeEntryValues,\n type BuilderRuntimeFieldLike,\n type BuilderRuntimeFormSchemaLike,\n type BuilderRuntimeFormValues,\n type BuilderRuntimePresentation,\n type BuilderRuntimeViewLike,\n createBuilderEntryDefaultValues,\n createBuilderFormDefaultValues,\n formatBuilderRuntimeValue,\n} from \"./runtime\";\n"],"mappings":";;;AAEA,SAAS,aAAa,2BAA2B;AACjD;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACwCP,SAAS,YAAY,OAAgC;AACnD,SAAO,EAAE,GAAG,MAAM;AACpB;AAEA,SAAS,wBAAwB,OAAkD;AACjF,QAAM,YAA6B,EAAE,QAAQ,MAAM,OAAO;AAC1D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,WAAW,CAAC,CAAC,GAAG;AAC9D,cAAU,WAAW,GAAG,EAAE,IAAI;AAAA,EAChC;AACA,SAAO;AACT;AAEO,SAAS,uBACd,eACA,UAAmC,CAAC,GACpC;AACA,QAAM,WAAW,QAAQ,aAAa,KAAK,EAAE,QAAQ,SAAS,EAAE,KAAK;AACrE,QAAM,OAAO,CAAC,UAAkB,GAAG,QAAQ,GAAG,KAAK;AACnD,QAAM,YAAiC;AAAA,IACrC,KAAK,CAAC,OAAO,mBAAmB,cAAc,IAAI,KAAK,KAAK,GAAG,cAAc;AAAA,IAC7E,MAAM,CAAC,OAAO,MAAM,mBAAmB,cAAc,KAAK,KAAK,KAAK,GAAG,MAAM,cAAc;AAAA,IAC3F,OAAO,CAAC,OAAO,MAAM,mBAAmB,cAAc,MAAM,KAAK,KAAK,GAAG,MAAM,cAAc;AAAA,IAC7F,QAAQ,CAAC,OAAO,mBAAmB,cAAc,OAAO,KAAK,KAAK,GAAG,cAAc;AAAA,EACrF;AAEA,SAAO;AAAA,IACL,kBAAkB,CAAC,UACjB,UAAU,IAAmC,kBAAkB;AAAA,MAC7D,OAAO,YAAY,KAAK;AAAA,IAC1B,CAAC;AAAA,IAEH,qBAAqB,MACnB,UAAU,IAA2B,6BAA6B;AAAA,IAEpE,wBAAwB,MACtB,UAAU,IAAwB,wBAAwB;AAAA,IAE5D,gBAAgB,CAAC,OACf,UAAU,IAAsB,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAE5E,mBAAmB,CAAC,UAClB,UAAU,KAAuB,kBAAkB,KAAK;AAAA,IAE1D,mBAAmB,CAAC,IAAY,UAC9B,UAAU,MAAwB,kBAAkB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,IAErF,sBAAsB,CAAC,IAAY,UACjC,UAAU,KAAuB,kBAAkB,mBAAmB,EAAE,CAAC,cAAc,KAAK;AAAA,IAE9F,mBAAmB,CAAC,OAClB,UAAU,OAAa,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEnE,kBAAkB,CAAC,UACjB,UAAU,IAAmC,kBAAkB;AAAA,MAC7D,OAAO,YAAY,KAAK;AAAA,IAC1B,CAAC;AAAA,IAEH,wBAAwB,MAAM,UAAU,IAAwB,wBAAwB;AAAA,IAExF,gBAAgB,CAAC,OACf,UAAU,IAAsB,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAE5E,mBAAmB,CAAC,UAClB,UAAU,KAAuB,kBAAkB,KAAK;AAAA,IAE1D,mBAAmB,CAAC,IAAY,UAC9B,UAAU,MAAwB,kBAAkB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,IAErF,sBAAsB,CAAC,IAAY,UACjC,UAAU,KAAuB,kBAAkB,mBAAmB,EAAE,CAAC,cAAc,KAAK;AAAA,IAE9F,mBAAmB,CAAC,OAClB,UAAU,OAAa,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEnE,kBAAkB,CAAC,UACjB,UAAU,IAAmC,kBAAkB;AAAA,MAC7D,OAAO,YAAY,KAAK;AAAA,IAC1B,CAAC;AAAA,IAEH,gBAAgB,CAAC,OACf,UAAU,IAAsB,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAE5E,mBAAmB,CAAC,UAClB,UAAU,KAAuB,kBAAkB,KAAK;AAAA,IAE1D,mBAAmB,CAAC,IAAY,UAC9B,UAAU,MAAwB,kBAAkB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,IAErF,sBAAsB,CAAC,IAAY,UACjC,UAAU,KAAuB,kBAAkB,mBAAmB,EAAE,CAAC,cAAc,KAAK;AAAA,IAE9F,mBAAmB,CAAC,OAClB,UAAU,OAAa,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEnE,uBAAuB,CAAC,OACtB,UAAU,IAAsB,0BAA0B,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEpF,+BAA+B,CAAC,QAAgB,UAC9C,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAEF,oCAAoC,CAClC,QACA,UACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,WAAW,mBAAmB,QAAQ,CAAC;AAAA,MAC3F,EAAE,OAAO,wBAAwB,KAAK,EAAE;AAAA,IAC1C;AAAA,IAEF,mCAAmC,CACjC,QACA,UACA,OACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,WAAW,mBAAmB,QAAQ,CAAC,aAAa,mBAAmB,KAAK,CAAC;AAAA,MACjI;AAAA,IACF;AAAA,IAEF,uBAAuB,CAAC,OACtB,UAAU,IAAsB,0BAA0B,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEpF,+BAA+B,CAAC,QAAgB,UAC9C,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD,EAAE,OAAO,YAAY,KAAK,EAAE;AAAA,IAC9B;AAAA,IAEF,uBAAuB,CAAC,OACtB,UAAU,IAAsB,0BAA0B,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEpF,mCAAmC,CACjC,QACA,UACA,OACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,WAAW,mBAAmB,QAAQ,CAAC,aAAa,mBAAmB,KAAK,CAAC;AAAA,MACjI;AAAA,IACF;AAAA,IAEF,wBAAwB,CAAC,QAAgB,UACvC,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD,EAAE,OAAO,YAAY,KAAK,EAAE;AAAA,IAC9B;AAAA,IAEF,wBAAwB,CAAC,QAAgB,UACvC,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAEF,iCAAiC,CAC/B,QACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAEF,iCAAiC,CAC/B,QACA,IACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,sBAAsB,mBAAmB,EAAE,CAAC;AAAA,MAChG;AAAA,IACF;AAAA,IAEF,wBAAwB,CAAC,QAAgB,IAAY,UACnD,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,YAAY,mBAAmB,EAAE,CAAC;AAAA,MACtF;AAAA,IACF;AAAA,IAEF,wBAAwB,CAAC,QAAgB,OACvC,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,YAAY,mBAAmB,EAAE,CAAC;AAAA,IACxF;AAAA,EACJ;AACF;;;AC9OA,SAAS,kBAAkB,aAAa,UAAU,sBAAsB;AAGjE,SAAS,oBAAmD;AACjE,QAAM,cAAc;AAAA,IAClB,OAAO,CAAC,WAAW,OAAO;AAAA,IAC1B,UAAU,MAAM,CAAC,WAAW,eAAe,QAAQ;AAAA,IACnD,UAAU,CAAC,UAAsC,CAAC,GAAG,YAAY,OAAO,QAAQ,KAAK;AAAA,IACrF,MAAM,CAAC,OAAe,CAAC,GAAG,YAAY,OAAO,UAAU,EAAE;AAAA,IACzD,aAAa,MAAM,CAAC,GAAG,YAAY,OAAO,SAAS;AAAA,IACnD,OAAO,CAAC,WAAW,OAAO;AAAA,IAC1B,UAAU,CAAC,UAAsC,CAAC,GAAG,YAAY,OAAO,QAAQ,KAAK;AAAA,IACrF,MAAM,CAAC,OAAe,CAAC,GAAG,YAAY,OAAO,UAAU,EAAE;AAAA,IACzD,aAAa,MAAM,CAAC,GAAG,YAAY,OAAO,SAAS;AAAA,IACnD,OAAO,CAAC,WAAW,OAAO;AAAA,IAC1B,UAAU,CAAC,UAAsC,CAAC,GAAG,YAAY,OAAO,QAAQ,KAAK;AAAA,IACrF,MAAM,CAAC,OAAe,CAAC,GAAG,YAAY,OAAO,UAAU,EAAE;AAAA,IACzD,aAAa,CAAC,OAAe,CAAC,WAAW,WAAW,QAAQ,EAAE;AAAA,IAC9D,qBAAqB,CACnB,QACA,UACA,UACG,CAAC,GAAG,YAAY,YAAY,MAAM,GAAG,UAAU,UAAU,WAAW,KAAK;AAAA,IAC9E,oBAAoB,CAAC,OAAe,CAAC,GAAG,YAAY,YAAY,EAAE,GAAG,SAAS;AAAA,IAC9E,aAAa,CAAC,OAAe,CAAC,WAAW,WAAW,QAAQ,EAAE;AAAA,IAC9D,oBAAoB,CAAC,IAAY,UAC/B,CAAC,GAAG,YAAY,YAAY,EAAE,GAAG,WAAW,KAAK;AAAA,IACnD,aAAa,CAAC,OAAe,CAAC,WAAW,WAAW,QAAQ,EAAE;AAAA,IAC9D,SAAS,CAAC,IAAY,UACpB,CAAC,GAAG,YAAY,YAAY,EAAE,GAAG,WAAW,KAAK;AAAA,EACrD;AAEA,SAAO;AACT;AAEO,SAAS,mBAAkD,QAA6B;AAC7F,QAAM,cAAc,kBAAqB;AAEzC,WAAS,6BACP,aACA,QACA;AACA,WAAO,QAAQ,IAAI;AAAA,MACjB,YAAY,kBAAkB,EAAE,UAAU,YAAY,YAAY,MAAM,EAAE,CAAC;AAAA,MAC3E,YAAY,kBAAkB,EAAE,UAAU,CAAC,GAAG,YAAY,YAAY,MAAM,GAAG,SAAS,EAAE,CAAC;AAAA,IAC7F,CAAC;AAAA,EACH;AAEA,WAAS,qBAAqB;AAC5B,WAAO,SAAS,EAAE,UAAU,YAAY,SAAS,GAAG,SAAS,OAAO,oBAAoB,CAAC;AAAA,EAC3F;AAEA,WAAS,gBAAgB,OAAmC;AAC1D,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,SAAS,KAAK;AAAA,MACpC,SAAS,MAAM,OAAO,iBAAiB,KAAK;AAAA,MAC5C,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,WAAS,wBAAwB;AAC/B,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,YAAY;AAAA,MAClC,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,WAAS,eAAe,IAAa;AACnC,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,KAAK,MAAM,EAAE;AAAA,MACnC,SAAS,MAAM,OAAO,eAAe,MAAM,EAAE;AAAA,MAC7C,SAAS,QAAQ,EAAE;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,WAAS,qBAAqB;AAC5B,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,EAAE,IAAI,MAAM,MACvB,KACI,OAAO,kBAAkB,IAAI,KAAK,IAClC,OAAO,kBAAkB,KAA+C;AAAA,MAC9E,WAAW,CAAC,SAAS;AACnB,oBAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAC7D,oBAAY,kBAAkB,EAAE,UAAU,YAAY,KAAK,KAAK,EAAE,EAAE,CAAC;AACrE,oBAAY,kBAAkB,EAAE,UAAU,YAAY,YAAY,KAAK,EAAE,EAAE,CAAC;AAAA,MAC9E;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,0BAA0B;AACjC,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,EAAE,IAAI,MAAM,MACvB,OAAO,qBAAqB,IAAI,KAAK;AAAA,MACvC,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AAEA,WAAS,uBAAuB;AAC9B,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AAEA,WAAS,gBAAgB,OAAmC;AAC1D,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,SAAS,KAAK;AAAA,MACpC,SAAS,MAAM,OAAO,iBAAiB,KAAK;AAAA,MAC5C,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,WAAS,wBAAwB;AAC/B,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,YAAY;AAAA,MAClC,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,WAAS,eAAe,IAAa;AACnC,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,KAAK,MAAM,EAAE;AAAA,MACnC,SAAS,MAAM,OAAO,eAAe,MAAM,EAAE;AAAA,MAC7C,SAAS,QAAQ,EAAE;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,WAAS,qBAAqB;AAC5B,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,EAAE,IAAI,MAAM,MACvB,KACI,OAAO,kBAAkB,IAAI,KAAK,IAClC,OAAO,kBAAkB,KAA+C;AAAA,MAC9E,WAAW,CAAC,SAAS;AACnB,oBAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAC7D,oBAAY,kBAAkB,EAAE,UAAU,YAAY,KAAK,KAAK,EAAE,EAAE,CAAC;AACrE,oBAAY,kBAAkB,EAAE,UAAU,YAAY,YAAY,KAAK,EAAE,EAAE,CAAC;AAAA,MAC9E;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,0BAA0B;AACjC,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,EAAE,IAAI,MAAM,MACvB,OAAO,qBAAqB,IAAI,KAAK;AAAA,MACvC,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AAEA,WAAS,uBAAuB;AAC9B,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AAEA,WAAS,gBAAgB,OAAmC;AAC1D,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,SAAS,KAAK;AAAA,MACpC,SAAS,MAAM,OAAO,iBAAiB,KAAK;AAAA,MAC5C,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,WAAS,eAAe,IAAa;AACnC,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,KAAK,MAAM,EAAE;AAAA,MACnC,SAAS,MAAM,OAAO,eAAe,MAAM,EAAE;AAAA,MAC7C,SAAS,QAAQ,EAAE;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,WAAS,qBAAqB;AAC5B,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,EAAE,IAAI,MAAM,MACvB,KACI,OAAO,kBAAkB,IAAI,KAAK,IAClC,OAAO,kBAAkB,KAA+C;AAAA,MAC9E,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AAEA,WAAS,0BAA0B;AACjC,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,EAAE,IAAI,MAAM,MACvB,OAAO,qBAAqB,IAAI,KAAK;AAAA,MACvC,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AAEA,WAAS,uBAAuB;AAC9B,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,WAAW,MAAM,YAAY,kBAAkB,EAAE,UAAU,YAAY,MAAM,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AAEA,WAAS,sBAAsB,IAAY;AACzC,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,YAAY,EAAE;AAAA,MACpC,SAAS,MAAM,OAAO,sBAAsB,EAAE;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,WAAS,kCACP,QACA,UACA,OACA,UAAU,MACV;AACA,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,oBAAoB,UAAU,IAAI,UAAU,KAAK;AAAA,MACvE,SAAS,MAAM,OAAO,mCAAmC,UAAU,IAAI,UAAU,KAAK;AAAA,MACtF,SAAS,QAAQ,MAAM,KAAK;AAAA,IAC9B,CAAC;AAAA,EACH;AAEA,WAAS,mCAAmC;AAC1C,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,SAMP;AACJ,YAAI,KAAK,QAAQ;AACf,iBAAO,OAAO;AAAA,YACZ,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AACA,YAAI,KAAK,QAAQ;AACf,iBAAO,OAAO;AAAA,YACZ,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AACA,cAAM,IAAI,MAAM,uHAAkC;AAAA,MACpD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,sBAAsB,IAAY;AACzC,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,YAAY,EAAE;AAAA,MACpC,SAAS,MAAM,OAAO,sBAAsB,EAAE;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,WAAS,6BAA6B,IAAY,OAAyC;AACzF,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,mBAAmB,IAAI,KAAK;AAAA,MAClD,SAAS,MAAM,OAAO,8BAA8B,IAAI,KAAK;AAAA,MAC7D,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,WAAS,+BAA+B,QAAgB;AACtD,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,UACX,OAAO,8BAA8B,QAAQ,KAAK;AAAA,MACpD,WAAW,MAAM;AACf,oBAAY,kBAAkB,EAAE,UAAU,YAAY,mBAAmB,MAAM,EAAE,CAAC;AAClF,oBAAY,kBAAkB,EAAE,UAAU,YAAY,YAAY,MAAM,EAAE,CAAC;AAC3E,oBAAY,kBAAkB,EAAE,UAAU,CAAC,WAAW,WAAW,MAAM,EAAE,CAAC;AAAA,MAC5E;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,sBAAsB,IAAY,UAAU,MAAM;AACzD,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,YAAY,EAAE;AAAA,MACpC,SAAS,MAAM,OAAO,sBAAsB,EAAE;AAAA,MAC9C,SAAS,QAAQ,EAAE,KAAK;AAAA,IAC1B,CAAC;AAAA,EACH;AAEA,WAAS,sBACP,IACA,OACA,UAAU,MACV;AACA,WAAO,SAAS;AAAA,MACd,UAAU,YAAY,QAAQ,IAAI,KAAK;AAAA,MACvC,SAAS,MAAM,OAAO,uBAAuB,IAAI,KAAK;AAAA,MACtD,iBAAiB;AAAA,MACjB,SAAS,QAAQ,EAAE,KAAK;AAAA,IAC1B,CAAC;AAAA,EACH;AAEA,WAAS,wBAAwB,QAAgB;AAC/C,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,EAAE,IAAI,MAAM,MACvB,KACI,OAAO,uBAAuB,QAAQ,IAAI,KAAK,IAC/C,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MACN,WAAW,MAAM,6BAA6B,aAAa,MAAM;AAAA,IACnE,CAAC;AAAA,EACH;AAEA,WAAS,mCAAmC,QAAgB;AAC1D,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,UACX,OAAO,gCAAgC,QAAQ,KAAK;AAAA,MACtD,WAAW,MAAM,6BAA6B,aAAa,MAAM;AAAA,IACnE,CAAC;AAAA,EACH;AAEA,WAAS,mCAAmC,QAAgB;AAC1D,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC;AAAA,QACX;AAAA,QACA;AAAA,MACF,MAGM,OAAO,gCAAgC,QAAQ,IAAI,KAAK;AAAA,MAC9D,WAAW,MAAM,6BAA6B,aAAa,MAAM;AAAA,IACnE,CAAC;AAAA,EACH;AAEA,WAAS,0BAA0B,IAAY;AAC7C,UAAM,cAAc,eAAe;AACnC,WAAO,YAAY;AAAA,MACjB,YAAY,CAAC,YAAoB,OAAO,uBAAuB,IAAI,OAAO;AAAA,MAC1E,WAAW,MAAM,6BAA6B,aAAa,EAAE;AAAA,IAC/D,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AFtSY,SACE,KADF;AA3DL,SAAS,oBAAoB,EAAE,WAAW,YAAY,GAA+B;AAC1F,SAAO,uBAA8C,WAAW,EAAE,YAAY,CAAC;AACjF;AAQA,IAAM,iBAAiB,cAA0C,IAAI;AAW9D,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,MAAI,CAAC,oBAAoB,CAAC,WAAW;AACnC,UAAM,IAAI,MAAM,+GAAmD;AAAA,EACrE;AAEA,QAAM,iBAAiB;AAAA,IACrB,MAAM,oBAAoB,oBAAoB,EAAE,WAA6C,YAAY,CAAC;AAAA,IAC1G,CAAC,aAAa,kBAAkB,SAAS;AAAA,EAC3C;AACA,QAAM,QAAQ,QAAQ,MAAM,mBAA0C,cAAc,GAAG,CAAC,cAAc,CAAC;AACvG,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAsD,CAAC,CAAC;AAClG,QAAM,iBAAiB,OAAO,CAAC;AAC/B,QAAM,SAAS,YAAY,CAAC,iBAAsC;AAChE,UAAM,KAAK,EAAE,eAAe;AAC5B,qBAAiB,CAAC,YAAY,CAAC,GAAG,QAAQ,MAAM,EAAE,GAAG,EAAE,GAAG,cAAc,GAAG,CAAC,CAAC;AAC7E,eAAW,YAAY;AAAA,EACzB,GAAG,CAAC,QAAQ,CAAC;AACb,QAAM,sBAAsB,OAA2B,IAAI;AAC3D,MAAI,CAAC,oBAAoB,QAAS,qBAAoB,UAAU,eAAe,IAAI,YAAY;AAE/F,QAAM,QAAQ;AAAA,IACZ,OAAO,EAAE,QAAQ,gBAAgB,OAAO,OAAO;AAAA,IAC/C,CAAC,OAAO,gBAAgB,MAAM;AAAA,EAChC;AAEA,SACE,oBAAC,uBAAoB,QAAQ,oBAAoB,SAC/C,+BAAC,eAAe,UAAf,EAAwB,OACtB;AAAA;AAAA,IACD,oBAAC,SAAI,WAAU,yBAAwB,aAAU,UAAS,eAAY,QACnE,wBAAc,IAAI,CAAC,iBAClB,qBAAC,SAA0B,WAAW,8CAA8C,aAAa,IAAI,IACnG;AAAA,0BAAC,UAAM,uBAAa,SAAQ;AAAA,MAC5B,oBAAC,YAAO,MAAK,UAAS,cAAW,6EAAgB,SAAS,MAAM,iBAAiB,CAAC,YAAY,QAAQ,OAAO,CAAC,SAAS,KAAK,OAAO,aAAa,EAAE,CAAC,GAAG,kBAAC;AAAA,SAF/I,aAAa,EAGvB,CACD,GACH;AAAA,KACF,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,QAAM,UAAU,WAAW,cAAc;AACzC,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,yIAA8D;AAC5F,SAAO;AACT;AAEO,SAAS,oBAAoB,OAAgB,UAAkB;AACpE,MAAI,iBAAiB,SAAS,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM;AACjE,SAAO;AACT;;;AG5GA,SAAS,WAAAA,UAAS,YAAAC,iBAAgB;AAClC,SAAS,gBAAAC,eAAc,WAAAC,gBAAe;;;AC4BtC,SAAS,gBAAgB,OAAgC;AACvD,SAAO,MAAM,SAAS,aAAa,QAAQ;AAC7C;AAEO,SAAS,+BACd,QAC0B;AAC1B,QAAM,SAAkC,CAAC;AACzC,aAAW,SAAS,QAAQ,UAAU,CAAC,GAAG;AACxC,WAAO,MAAM,GAAG,IAAI,gBAAgB,KAAK;AAAA,EAC3C;AACA,SAAO,EAAE,OAAO;AAClB;AAEO,SAAS,gCACd,MACA,SAC2B;AAC3B,QAAM,SAAkC,CAAC;AACzC,aAAW,SAAS,KAAK,MAAM,OAAO,UAAU,CAAC,GAAG;AAClD,UAAM,WAAW,SAAS,OAAO,MAAM,GAAG;AAC1C,WAAO,MAAM,GAAG,IAAI,aAAa,SAAY,gBAAgB,KAAK,IAAI;AAAA,EACxE;AACA,SAAO,EAAE,QAAQ,SAAS,SAAS,WAAW,EAAE;AAClD;AAEO,SAAS,0BAA0B,OAAgB,SAAS,SAAS;AAC1E,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,GAAI,QAAO;AAClE,MAAI,OAAO,UAAU,UAAW,QAAO,QAAQ,6BAAS;AACxD,MAAI,OAAO,UAAU,SAAU,QAAO,IAAI,KAAK,aAAa,MAAM,EAAE,OAAO,KAAK;AAChF,SAAO,OAAO,KAAK;AACrB;;;AC5DA,SAAS,UAAAC,eAAc;AACvB,SAAS,gBAAgB,gBAAgB;AAmFnC,SACiC,OAAAC,MADjC,QAAAC,aAAA;AAxEN,SAAS,UAAU,OAAqB;AACtC,MAAI,MAAM,SAAS,OAAQ,QAAO;AAClC,MAAI,MAAM,SAAS,YAAY,MAAM,SAAS,QAAS,QAAO;AAC9D,SAAO;AACT;AAEA,SAAS,WAAW,EAAE,OAAO,QAAQ,OAAO,GAA6D;AACvG,QAAM,EAAE,OAAO,OAAO,IAAI,kBAAkB;AAC5C,QAAM,OAAO,eAAqE;AAClF,QAAM,SAAS,SAAS,EAAE,SAAS,KAAK,SAAS,MAAM,SAAS,CAAC,KAAK,CAAC;AACvE,QAAM,QAAQC,QAA6C,IAAI;AAC/D,QAAM,SAAS,MAAM;AACrB,QAAM,kBAAkB,QAAQ,WAAW,OAAO,OAAO,SAAS,cAAc,IAAI;AACpF,QAAM,UAAU,QAAQ,YAAY,mBAAmB,OACnD,EAAE,CAAC,OAAO,SAAS,cAAc,GAAG,OAAO,eAAe,EAAE,IAC5D;AACJ,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACA,MAAM;AAAA,IACN,EAAE,QAAQ;AAAA,IACV,QAAQ,MAAM;AAAA,EAChB;AACA,QAAM,UAAU,MAAM,iCAAiC;AACvD,QAAM,OAAO,UAAU,MAAM,GAAG;AAEhC,MAAI,MAAM,OAAQ,QAAO;AAEzB,QAAM,aAAa,CAAC,OAA8B,UAAmB;AACnE,UAAM,aAAa,MAAM,SAAS,KAAK,CAAC,SAAS,KAAK,WAAW,KAAK,UAAU,KAAK;AACrF,QAAI,CAAC,WAAY;AACjB,UAAM,UAAU,YAAY;AAC1B,UAAI;AACF,cAAM,WAAW,MAAM,QAAQ,YAAY;AAAA,UACzC;AAAA,UACA;AAAA,UACA,UAAU,MAAM;AAAA,UAChB;AAAA,UACA,OAAO,EAAE,OAAO,QAAQ,KAAK,UAAU,QAAQ,EAAE;AAAA,QACnD,CAAC;AACD,mBAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,SAAS,WAAW,GAAG;AACtE,eAAK,SAAS,UAAU,GAAG,IAAI,cAAc,EAAE,aAAa,MAAM,gBAAgB,KAAK,CAAC;AAAA,QAC1F;AACA,mBAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,SAAS,WAAW,GAAG;AACjE,eAAK,SAAS,UAAU,GAAG,IAAI,EAAE,QAAQ,CAAC;AAAA,QAC5C;AACA,YAAI,SAAS,OAAO,QAAS,QAAO,SAAS,KAAK;AAAA,MACpD,SAASC,QAAO;AACd,eAAO,EAAE,MAAM,SAAS,SAAS,oBAAoBA,QAAO,uFAA2B,EAAE,CAAC;AAAA,MAC5F;AAAA,IACF;AACA,QAAI,UAAU,cAAc,WAAW,aAAa,GAAG;AACrD,UAAI,MAAM,QAAS,cAAa,MAAM,OAAO;AAC7C,YAAM,UAAU,WAAW,MAAM,KAAK,QAAQ,GAAG,WAAW,UAAU;AAAA,IACxE,OAAO;AACL,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAEA,QAAM,eAAe,KAAK,SAAS,MAAM;AAAA,IACvC,UAAU,MAAM,WAAW,GAAG,MAAM,KAAK,8EAAkB;AAAA,IAC3D,YACE,MAAM,SAAS,YAAY,MAAM,SAAS,UACtC,CAAC,UAAW,UAAU,KAAK,KAAK,OAAO,KAAK,IAC5C;AAAA,IACN,UAAU,CAAC,UAAU,WAAW,YAAY,MAAM,OAAO,SAAS,aAAa,MAAM,OAAO,UAAU,MAAM,OAAO,KAAK;AAAA,IACxH,QAAQ,CAAC,UAAU,WAAW,UAAU,MAAM,OAAO,KAAK;AAAA,EAC5D,CAAC;AACD,QAAM,QAAQ,KAAK,UAAU,OAAO,SAAS,MAAM,GAAG;AACtD,QAAM,UAAU,SAAU,aAAa,QAAQ,CAAC,IAAM,MAAM,WAAW,CAAC;AAExE,SACE,gBAAAF,MAAC,WAAM,WAAU,iBACf;AAAA,oBAAAA,MAAC,UAAK,WAAU,wBACb;AAAA,YAAM;AAAA,MAAO,MAAM,WAAW,gBAAAD,KAAC,UAAK,eAAY,QAAO,gBAAE,IAAU;AAAA,OACtE;AAAA,IACC,MAAM,SAAS,aACd,gBAAAA,KAAC,cAAS,WAAU,kCAAiC,aAAa,MAAM,aAAa,UAAU,MAAM,UAAW,GAAG,cAAc,IAC/H,MAAM,SAAS,WACjB,gBAAAC,MAAC,YAAO,WAAU,iBAAgB,UAAU,MAAM,YAAY,aAAa,WAAY,GAAG,cACxF;AAAA,sBAAAD,KAAC,YAAO,OAAM,IAAI,gBAAM,eAAe,wCAAS;AAAA,MAC/C,QAAQ,IAAI,CAAC,WAAW,gBAAAA,KAAC,YAA0B,OAAO,OAAO,OAAQ,iBAAO,SAA3C,OAAO,KAA0C,CAAS;AAAA,OAClG,IACE,MAAM,SAAS,aACjB,gBAAAA,KAAC,WAAM,WAAU,oBAAmB,MAAK,YAAW,UAAU,MAAM,UAAW,GAAG,cAAc,IAEhG,gBAAAA,KAAC,WAAM,WAAU,iBAAgB,MAAM,UAAU,KAAK,GAAG,aAAa,MAAM,aAAa,UAAU,MAAM,UAAW,GAAG,cAAc;AAAA,IAEtI,MAAM,cAAc,gBAAAA,KAAC,WAAM,WAAU,8BAA8B,gBAAM,aAAY,IAAW;AAAA,IAChG,OAAO,OAAO,YAAY,WAAW,gBAAAA,KAAC,WAAM,WAAU,wBAAwB,gBAAM,SAAQ,IAAW;AAAA,KAC1G;AAEJ;AAEO,SAAS,YAAY,EAAE,QAAQ,QAAQ,QAAQ,aAAa,CAAC,EAAE,GAAqB;AACzF,QAAM,SAAS,IAAI,IAAI,OAAO,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AACvE,QAAM,WAAW,oBAAI,IAAY;AAEjC,SACE,gBAAAC,MAAC,SAAI,WAAU,uBACZ;AAAA,WAAO,QAAQ,OAAO,IAAI,CAAC,UAC1B,gBAAAA,MAAC,cAAwB,WAAU,oBAChC;AAAA,YAAM,QAAQ,gBAAAD,KAAC,YAAQ,gBAAM,OAAM,IAAY;AAAA,MAChD,gBAAAA,KAAC,SAAI,WAAU,qBACZ,gBAAM,OAAO,IAAI,CAAC,SAAS;AAC1B,cAAM,QAAQ,OAAO,IAAI,KAAK,GAAG;AACjC,YAAI,CAAC,MAAO,QAAO;AACnB,iBAAS,IAAI,MAAM,GAAG;AACtB,eAAO,gBAAAA,KAAC,SAAoB,OAAO,EAAE,YAAY,QAAQ,KAAK,IAAI,GAAG,GAAG,0BAAAA,KAAC,cAAW,OAAc,QAAgB,QAAgB,KAAjH,MAAM,GAA6G;AAAA,MACtI,CAAC,GACH;AAAA,SATa,MAAM,EAUrB,CACD;AAAA,IACD,gBAAAA,KAAC,SAAI,WAAU,qBACZ,iBAAO,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,UAC9D,gBAAAA,KAAC,SAAoB,OAAO,EAAE,YAAY,UAAU,GAAG,0BAAAA,KAAC,cAAW,OAAc,QAAgB,QAAgB,KAAvG,MAAM,GAAmG,CACpH,GACH;AAAA,IACC,WAAW,IAAI,CAAC,SAAS,gBAAAA,KAAC,SAAoB,eAAK,OAAO,KAAvB,KAAK,GAAoB,CAAM;AAAA,KACrE;AAEJ;;;ACrIA,SAAyB,WAAW,OAAO,UAAAI,SAAQ,YAAAC,iBAAgB;AACnE,SAAS,oBAAoB;AA4EnB,SACE,OAAAC,MADF,QAAAC,aAAA;AAhEH,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,QAAM,WAAWH,QAAuB,IAAI;AAC5C,QAAM,aAAaA,QAAO,OAAO;AACjC,QAAM,CAAC,YAAY,aAAa,IAAIC,UAA6B,IAAI;AACrE,aAAW,UAAU;AACrB,QAAM,UAAU,MAAM;AAEtB,YAAU,MAAM;AACd,kBAAc,SAAS,IAAI;AAAA,EAC7B,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ,CAAC,WAAY;AAC1B,UAAM,WAAW,SAAS;AAC1B,aAAS,SAAS,MAAM;AACxB,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,SAAU,YAAW,QAAQ;AAC/C,UAAI,MAAM,QAAQ,OAAO;AACvB,cAAM,YAAY,MAAM;AAAA,UACtB,SAAS,SAAS;AAAA,YAChB;AAAA,UACF,KAAK,CAAC;AAAA,QACR;AACA,cAAM,QAAQ,UAAU,CAAC;AACzB,cAAM,OAAO,UAAU,GAAG,EAAE;AAC5B,YAAI,MAAM,YAAY,SAAS,kBAAkB,SAAS,MAAM;AAC9D,gBAAM,eAAe;AACrB,eAAK,MAAM;AAAA,QACb,WAAW,CAAC,MAAM,YAAY,SAAS,kBAAkB,QAAQ,OAAO;AACtE,gBAAM,eAAe;AACrB,gBAAM,MAAM;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,aAAS,iBAAiB,WAAW,SAAS;AAC9C,UAAM,WAAW,SAAS,KAAK,MAAM;AACrC,aAAS,KAAK,MAAM,WAAW;AAC/B,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,SAAS;AACjD,eAAS,KAAK,MAAM,WAAW;AAC/B,gBAAU,MAAM;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,CAAC;AAErB,MAAI,CAAC,QAAQ,CAAC,WAAY,QAAO;AAEjC,SAAO;AAAA,IACL,gBAAAC,KAAC,SAAI,WAAU,mBAAkB,MAAK,gBAAe,aAAa,CAAC,UAAU,MAAM,WAAW,MAAM,iBAAiB,QAAQ,GAC3H,0BAAAC;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAW,kDAAkD,YAAY;AAAA,QACzE,MAAK;AAAA,QACL,cAAW;AAAA,QACX,mBAAiB;AAAA,QACjB,UAAU;AAAA,QAEV;AAAA,0BAAAA,MAAC,YAAO,WAAU,2BAChB;AAAA,4BAAAA,MAAC,SACC;AAAA,8BAAAD,KAAC,QAAG,IAAI,SAAS,WAAU,iBAAiB,iBAAM;AAAA,cACjD,cAAc,gBAAAA,KAAC,OAAE,WAAU,uBAAuB,uBAAY,IAAO;AAAA,eACxE;AAAA,YACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,uBAAsB,cAAW,4BAAO,SAAS,SAAS,kBAAC;AAAA,aAC7F;AAAA,UACA,gBAAAA,KAAC,SAAI,WAAU,yBAAyB,UAAS;AAAA;AAAA;AAAA,IACnD,GACF;AAAA,IACA;AAAA,EACF;AACF;AAYO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,SACE,gBAAAA,KAAC,gBAAa,MAAY,OAAc,aAA0B,SAChE,0BAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,oBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,wCAAuC,SAAS,SAAS,4CAAK;AAAA,IAC9F,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,yCAAwC,UAAU,WAAW,SAAS,WACnG,sBAAY,qFAAoB,cACnC;AAAA,KACF,GACF;AAEJ;AAEO,SAAS,gBAAgB,EAAE,OAAO,YAAY,GAA2C;AAC9F,SACE,gBAAAC,MAAC,SAAI,WAAU,sCAAqC,MAAK,SACvD;AAAA,oBAAAD,KAAC,YAAQ,iBAAM;AAAA,IACf,gBAAAA,KAAC,UAAM,uBAAY;AAAA,KACrB;AAEJ;;;AC/HA,SAAS,aAAAE,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AACrD,SAAS,cAAc,eAAe;;;ACDtC,SAAyB,WAAAC,UAAS,YAAAC,iBAAgB;AA+G1C,SACW,OAAAC,MADX,QAAAC,aAAA;AA7FD,SAAS,mBAAmB,EAAE,WAAW,GAAG,IAA2B,CAAC,GAAoB;AACjG,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAS,CAAC;AAClC,QAAM,CAAC,QAAQ,cAAc,IAAIA,UAAS,EAAE;AAC5C,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAiB;AAEzC,SAAO;AAAA,IACL,OAAO,EAAE,MAAM,UAAU,QAAQ,UAAU,QAAW,KAAK;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,aAAa;AACrB,qBAAe,WAAW;AAC1B,cAAQ,CAAC;AAAA,IACX;AAAA,IACA,WAAW,KAAK;AACd,cAAQ,CAAC,YAAa,YAAY,MAAM,IAAI,GAAG,KAAK,GAAI;AACxD,cAAQ,CAAC;AAAA,IACX;AAAA,EACF;AACF;AAYO,SAAS,cAAc,MAML;AACvB,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAmB,CAAC,CAAC;AAC3D,SAAOC;AAAA,IACL,OAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,eAAe,IAAY;AACzB;AAAA,UAAe,CAAC,YACd,QAAQ,SAAS,EAAE,IAAI,QAAQ,OAAO,CAAC,UAAU,UAAU,EAAE,IAAI,CAAC,GAAG,SAAS,EAAE;AAAA,QAClF;AAAA,MACF;AAAA,MACA,iBAAiB;AACf,uBAAe,CAAC,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,KAAK,SAAS,KAAK,MAAM,KAAK,UAAU,KAAK,OAAO,WAAW;AAAA,EAClE;AACF;AAeA,SAAS,UAAU,OAAyB,QAAqB;AAC/D,MAAI,OAAO,OAAQ,QAAO,OAAO,OAAO,KAAK;AAC7C,SAAO,0BAA0B,MAAM,OAAO,OAAO,GAAG,CAAC;AAC3D;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AACf,GAAuB;AACrB,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,WAAW,WAAW,WAAW,MAAM,QAAQ,CAAC;AAEzF,SACE,gBAAAF,MAAC,aAAQ,WAAU,6BAA4B,aAAW,aAAa,QACrE;AAAA,oBAAAA,MAAC,YAAO,WAAU,wBAChB;AAAA,sBAAAA,MAAC,SACE;AAAA,gBAAQ,gBAAAD,KAAC,QAAG,WAAU,iBAAiB,iBAAM,IAAQ;AAAA,QACrD,cAAc,gBAAAA,KAAC,OAAE,WAAU,uBAAuB,uBAAY,IAAO;AAAA,SACxE;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,yBACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,OAAO,WAAW,MAAM;AAAA,YACxB,aAAa;AAAA,YACb,cAAY;AAAA,YACZ,UAAU,CAAC,UAAU,WAAW,MAAM,UAAU,MAAM,OAAO,KAAK;AAAA;AAAA,QACpE;AAAA,QACC;AAAA,SACH;AAAA,OACF;AAAA,IAEA,gBAAAC,MAAC,SAAI,WAAU,sBACb;AAAA,sBAAAA,MAAC,WAAM,WAAU,iBACf;AAAA,wBAAAD,KAAC,WACC,0BAAAC,MAAC,QACE;AAAA,uBAAa,gBAAAD,KAAC,QAAG,cAAW,8CAAU,IAAK;AAAA,UAC3C,WAAW,QAAQ,IAAI,CAAC,WACvB,gBAAAA,KAAC,QAAoB,WAAW,iBAAiB,OAAO,KAAK,IAC1D,iBAAO,WACN,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,gBAAe,SAAS,MAAM,WAAW,MAAM,WAAW,OAAO,GAAG,GACjG,iBAAO,OACV,IAEA,OAAO,SANF,OAAO,GAQhB,CACD;AAAA,WACH,GACF;AAAA,QACA,gBAAAA,KAAC,WACE,qBAAW,KAAK,IAAI,CAAC,UACpB,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW,aAAa,0BAA0B;AAAA,YAClD,SAAS,CAAC,UAAU,aAAa,OAAO,KAAK;AAAA,YAE5C;AAAA,2BACC,gBAAAD,KAAC,QACC,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS,WAAW,YAAY,SAAS,MAAM,EAAE;AAAA,kBACjD,cAAW;AAAA,kBACX,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,kBAC1C,UAAU,MAAM,WAAW,eAAe,MAAM,EAAE;AAAA;AAAA,cACpD,GACF,IACE;AAAA,cACH,WAAW,QAAQ,IAAI,CAAC,WACvB,gBAAAA,KAAC,QAAoB,WAAW,iBAAiB,OAAO,KAAK,IAC1D,oBAAU,OAAO,MAAM,KADjB,OAAO,GAEhB,CACD;AAAA;AAAA;AAAA,UAnBI,MAAM;AAAA,QAoBb,CACD,GACH;AAAA,SACF;AAAA,MACC,YAAY,gBAAAA,KAAC,SAAI,WAAU,iBAAgB,iFAAY,IAAS;AAAA,MAChE,CAAC,aAAa,WAAW,KAAK,WAAW,IACxC,gBAAAC,MAAC,SAAI,WAAU,iBACb;AAAA,wBAAAD,KAAC,YAAQ,sBAAW;AAAA,QACnB,mBAAmB,gBAAAA,KAAC,UAAM,4BAAiB,IAAU;AAAA,SACxD,IACE;AAAA,OACN;AAAA,IAEA,gBAAAC,MAAC,YAAO,WAAU,sBAChB;AAAA,sBAAAA,MAAC,UAAM;AAAA,mBAAW;AAAA,QAAS;AAAA,SAAI;AAAA,MAC/B,gBAAAA,MAAC,SACC;AAAA,wBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,wCAAuC,UAAU,WAAW,MAAM,QAAQ,GAAG,SAAS,MAAM,WAAW,MAAM,QAAQ,WAAW,MAAM,OAAO,CAAC,GAAG,4CAEjL;AAAA,QACA,gBAAAC,MAAC,UAAM;AAAA,qBAAW,MAAM;AAAA,UAAK;AAAA,UAAI;AAAA,WAAW;AAAA,QAC5C,gBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,wCAAuC,UAAU,WAAW,MAAM,QAAQ,YAAY,SAAS,MAAM,WAAW,MAAM,QAAQ,WAAW,MAAM,OAAO,CAAC,GAAG,kDAE1L;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEJ;AAEO,SAAS,aAAa,SAAkD;AAC7E,SAAO,QAAQ,IAAI,CAAC,YAAY,EAAE,GAAG,OAAO,EAAE;AAChD;;;ADtHQ,gBAAAI,MA2CA,QAAAC,aA3CA;AA7DR,SAAS,YAAY,OAAgC,OAAe;AAClE,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,UAAU,OAAO,MAAM,KAAK,MAAM,OAAO,KAAK;AAC5D,SAAO,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAClF;AAEA,SAAS,QAAQ,QAAgB,WAAoB;AACnD,SAAO,WAAW,KAAK,KAAK;AAC9B;AAEA,SAAS,eAAe,QAAgB,QAAmC,SAAkC;AAC3G,QAAM,OAAM,oBAAI,KAAK,GAAE,YAAY;AACnC,SAAO;AAAA,IACL,IAAI,SAAS,OAAO,WAAW,QAAQ,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,IAC5E;AAAA,IACA,QAAQ,UAAU,OAAO,SAAS,EAAE,GAAG,OAAO,QAAQ,WAAW,KAAK;AAAA,IACtE,SAAS,SAAS,WAAW;AAAA,IAC7B,WAAW,SAAS,aAAa;AAAA,IACjC,WAAW;AAAA,EACb;AACF;AAEO,SAAS,aAAa,EAAE,SAAS,aAAa,MAAM,aAAa,GAAsB;AAC5F,QAAM,EAAE,OAAO,OAAO,IAAI,kBAAkB;AAC5C,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAS,KAAK;AACtC,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAkC,IAAI;AACpE,QAAM,cAAcC,QAAO,KAAK;AAChC,QAAM,cAAc,YAAY,aAAa,QAAQ,WAAW;AAChE,QAAM,YAAY,MAAM,sBAAsB,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,CAAC;AACrF,QAAM,aAAa,mBAAmB,EAAE,UAAU,IAAI,CAAC;AACvD,QAAM,cAAcC;AAAA,IAClB,OAAO,EAAE,GAAG,WAAW,OAAO,aAAa,QAAQ,YAAY,aAAa,eAAe,GAAG;AAAA,IAC9F,CAAC,aAAa,QAAQ,YAAY,WAAW,KAAK;AAAA,EACpD;AACA,QAAM,eAAe,MAAM,sBAAsB,QAAQ,QAAQ,aAAa,QAAQ,WAAW,CAAC;AAClG,QAAM,OAAO,UAAU;AACvB,QAAM,SAAS,MAAM,MAAM,QAAQ,SAAS,YAAY,KAAK,KAAK,OAAO,YAAY;AAErF,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY,WAAW,CAAC,QAAQ,CAAC,aAAa,QAAQ,CAAC,YAAa;AACxE,gBAAY,UAAU;AACtB,iBAAa,EAAE,KAAK,QAAQ,KAAK,SAAS,QAAQ,KAAK,IAAI,MAAM,GAAG,MAAM,aAAa,KAAK,MAAM,CAAC;AAAA,EACrG,GAAG,CAAC,aAAa,MAAM,cAAc,aAAa,QAAQ,QAAQ,KAAK,IAAI,CAAC;AAE5E,QAAM,cAAc,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,YAAY,IAAI;AACpE,QAAM,YAAY,CAAC,QAA0B;AAC3C,gBAAY,UAAU;AACtB,UAAM,WAAW,IAAI,OAAO,cAAc,OACtC,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,IAAI,EAAE,IACxC,KAAK,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,KAAK,EAAE,GAAG,MAAM,QAAQ,EAAE,GAAG,KAAK,QAAQ,SAAS,KAAK,EAAE,IAAI,IAAI;AACzG,iBAAa,EAAE,KAAK,QAAQ,KAAK,SAAS,QAAQ,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,MAAM,SAAS,CAAC;AACvG,WAAO,EAAE,MAAM,QAAQ,SAAS,mKAAsC,CAAC;AAAA,EACzE;AACA,QAAM,UAAUD,SAAQ,MAAM;AAAA,IAC5B,GAAG,aAAa,MAAM,MAAM,OAAO,WAAW,CAAC,CAAC;AAAA,IAChD;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ,CAAC,QACP,gBAAAJ,KAAC,YAAO,MAAK,UAAS,WAAU,qCAAoC,SAAS,CAAC,UAAU;AAAE,cAAM,gBAAgB;AAAG,kBAAU,GAAG;AAAA,MAAG,GAAG,kDAEtI;AAAA,IAEJ;AAAA,EACF,GAAG,CAAC,MAAM,QAAQ,QAAQ,KAAK,QAAQ,QAAQ,IAAI,CAAC;AACpD,QAAM,QAAQ,cAAc;AAAA,IAC1B;AAAA,IACA,MAAM;AAAA,IACN,UAAU,YAAY;AAAA,IACtB,OAAO;AAAA,IACP,UAAU,CAAC,QAAQ,IAAI;AAAA,EACzB,CAAC;AACD,QAAM,OAAO,QAAmC;AAAA,IAC9C,eAAe,gCAAgC,QAAQ,CAAC,GAAG,OAAO;AAAA,IAClE,QAAQ,OAAO,gCAAgC,QAAQ,CAAC,GAAG,OAAO,IAAI;AAAA,EACxE,CAAC;AAED,QAAM,QAAQ,MAAM;AAClB,YAAQ,KAAK;AACb,eAAW,IAAI;AAAA,EACjB;AACA,QAAM,OAAO,KAAK,aAAa,CAAC,WAAW;AACzC,QAAI,CAAC,KAAM;AACX,QAAI,YAAa,QAAO,OAAO,QAAQ,UAAU,IAAI;AACrD,UAAM,OAAO,eAAe,KAAK,IAAI,QAAQ,OAAO;AACpD,gBAAY,UAAU;AACtB,iBAAa;AAAA,MACX,KAAK,QAAQ;AAAA,MACb,SAAS,QAAQ,KAAK,IAAI,MAAM;AAAA,MAChC,MAAM,UAAU,KAAK,IAAI,CAAC,QAAS,IAAI,OAAO,QAAQ,KAAK,OAAO,GAAI,IAAI,CAAC,GAAG,MAAM,IAAI;AAAA,IAC1F,CAAC;AACD,UAAM;AAAA,EACR,CAAC;AAED,MAAI,UAAU,SAAS;AACrB,WAAO,gBAAAA,KAAC,SAAI,WAAU,sCAAsC,8BAAoB,UAAU,OAAO,GAAG,QAAQ,KAAK,qEAAc,GAAE;AAAA,EACnI;AAEA,SACE,gBAAAC,MAAC,aAAQ,WAAU,mBACjB;AAAA,oBAAAA,MAAC,SAAI,WAAU,2BACb;AAAA,sBAAAD,KAAC,YAAQ,kBAAQ,OAAM;AAAA,MACvB,gBAAAC,MAAC,YAAO,MAAK,UAAS,WAAU,4CAA2C,UAAU,CAAC,MAAM,MAAM,SAAS,MAAM;AAAE,mBAAW,IAAI;AAAG,gBAAQ,IAAI;AAAA,MAAG,GAAG;AAAA;AAAA,QAClJ,QAAQ,eAAe;AAAA,SAC5B;AAAA,OACF;AAAA,IACC,YAAY,SAAS,KAAM,QAAQ,WAAW,KAAK,aAAa,YAC/D,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QACZ,WAAW,QAAQ,WAAW,KAAK,aAAa;AAAA,QAChD,YAAY,CAAC,QAAQ;AAAE,qBAAW,GAAG;AAAG,kBAAQ,IAAI;AAAA,QAAG;AAAA,QACvD,YAAW;AAAA;AAAA,IACb,IACE;AAAA,IACH,MAAM,OACL,gBAAAA,KAAC,gBAAa,MAAY,cAAc,QAAQ,cAAc,OAAO,QAAQ,OAAO,aAAa,KAAK,OAAO,SAAS,OACpH,0BAAAA,KAAC,gBAAc,GAAG,MAChB,0BAAAC,MAAC,UAAK,WAAU,gBAAe,UAAU,MAAM,YAAU,MACvD;AAAA,sBAAAD,KAAC,eAAY,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,KAAK,QAAQ;AAAA,MAC9E,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,wBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,wCAAuC,SAAS,OAAO,4CAAK;AAAA,QAC5F,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,0CAAyC,8DAAQ;AAAA,SACnF;AAAA,OACF,GACF,GACF,IACE;AAAA,KACN;AAEJ;;;AJzH4B,gBAAAM,MAkBpB,QAAAC,aAlBoB;AAPrB,SAAS,YAAY,EAAE,OAAO,GAAqB;AACxD,QAAM,EAAE,OAAO,OAAO,IAAI,kBAAkB;AAC5C,QAAM,QAAQ,MAAM,sBAAsB,MAAM;AAChD,QAAM,OAAO,MAAM,+BAA+B,MAAM;AACxD,QAAM,WAAWC,SAAQ,MAAM,+BAA+B,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC;AAC/F,QAAM,OAAOC,SAAkC,EAAE,eAAe,UAAU,QAAQ,MAAM,OAAO,WAAW,OAAU,CAAC;AAErH,MAAI,MAAM,QAAS,QAAO,gBAAAH,KAAC,mBAAgB,OAAM,2EAAmB,aAAa,oBAAoB,MAAM,OAAO,OAAI,MAAM,kEAAkB,GAAG;AACjJ,MAAI,CAAC,MAAM,KAAM,QAAO,gBAAAA,KAAC,SAAI,WAAU,iBAAgB,sFAAiB;AAExE,QAAM,SAAS,KAAK,aAAa,OAAO,UAAU;AAChD,QAAI;AACF,YAAM,KAAK,YAAY,KAAK;AAC5B,WAAK,MAAM,QAAQ;AACnB,aAAO,EAAE,MAAM,WAAW,SAAS,gFAAoB,CAAC;AAAA,IAC1D,SAAS,OAAO;AACd,aAAO,EAAE,MAAM,SAAS,SAAS,oBAAoB,OAAO,kIAAyB,EAAE,CAAC;AAAA,IAC1F;AAAA,EACF,CAAC;AAED,SACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,oBAAAD,KAAC,QAAG,WAAU,iBAAiB,gBAAM,KAAK,OAAM;AAAA,IAC/C,MAAM,KAAK,cAAc,gBAAAA,KAAC,OAAE,WAAU,uBAAuB,gBAAM,KAAK,aAAY,IAAO;AAAA,IAC5F,gBAAAA,KAACI,eAAA,EAAc,GAAG,MAChB,0BAAAH,MAAC,UAAK,WAAU,gBAAe,UAAU,QAAQ,YAAU,MACzD;AAAA,sBAAAD,KAAC,eAAY,QAAgB,QAAQ,MAAM,KAAK,QAAQ;AAAA,MACxD,gBAAAA,KAAC,SAAI,WAAU,mBACb,0BAAAA,KAAC,YAAO,WAAU,0CAAyC,MAAK,UAAS,UAAU,KAAK,WACrF,eAAK,YAAY,oFAAmB,oDACvC,GACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEO,SAAS,YAAY,EAAE,OAAO,GAAqB;AACxD,QAAM,EAAE,MAAM,IAAI,kBAAkB;AACpC,QAAM,YAAY,MAAM,sBAAsB,MAAM;AACpD,QAAM,QAAQ,mBAAmB;AACjC,QAAM,eAAe,MAAM,6BAA6B,QAAQ,MAAM,KAAK;AAC3E,QAAM,QAAQ,cAAc;AAAA,IAC1B,SAAS,aAAa,UAAU,MAAM,OAAO,WAAW,CAAC,CAAC;AAAA,IAC1D,MAAM,aAAa,MAAM,SAAS,CAAC;AAAA,IACnC,UAAU,aAAa,MAAM,SAAS;AAAA,IACtC;AAAA,IACA,UAAU,CAAC,QAAQ,IAAI;AAAA,EACzB,CAAC;AAED,MAAI,UAAU,QAAS,QAAO,gBAAAA,KAAC,mBAAgB,OAAM,2EAAmB,aAAa,oBAAoB,UAAU,OAAO,OAAI,MAAM,kEAAkB,GAAG;AACzJ,SAAO,gBAAAA,KAAC,iBAAc,OAAO,UAAU,MAAM,SAAS,QAAQ,aAAa,UAAU,MAAM,aAAa,YAAY,OAAO,WAAW,UAAU,aAAa,aAAa,WAAW;AACvL;AAIA,SAAS,YAAY,MAAmB;AACtC,MAAI,KAAK,MAAM,QAAQ,SAAS,UAAW,QAAO,KAAK,KAAK,OAAO;AACnE,MAAI,KAAK,MAAM,QAAQ,SAAS,UAAW,QAAO,KAAK,KAAK,OAAO;AACnE,SAAO;AACT;AAEA,SAAS,aAAa,KAAuB,iBAA0B;AACrE,QAAM,SAAS,OAAO,YAAY,OAAO,QAAQ,IAAI,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,QAAQ,aAAa,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC;AACzH,SAAO,mBAAmB,IAAI,OAAO,cAAc,OAAO,EAAE,IAAI,IAAI,IAAI,SAAS,IAAI,SAAS,GAAG,OAAO,IAAI;AAC9G;AAEA,SAAS,mBAAmB,EAAE,MAAM,SAAS,MAAM,QAAQ,GAA4F;AACrJ,QAAM,EAAE,OAAO,OAAO,IAAI,kBAAkB;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAIK,UAAuC,CAAC,CAAC;AACzE,QAAM,OAAO,MAAM,wBAAwB,KAAK,EAAE;AAClD,QAAM,kBAAkB,MAAM,mCAAmC,KAAK,EAAE;AACxE,QAAM,kBAAkB,MAAM,mCAAmC,KAAK,EAAE;AACxE,QAAM,WAAWH,SAAQ,MAAM,gCAAgC,MAAM,OAAO,GAAG,CAAC,SAAS,IAAI,CAAC;AAC9F,QAAM,OAAOC,SAAmC,EAAE,eAAe,UAAU,QAAQ,OAAO,WAAW,OAAU,CAAC;AAEhH,QAAM,QAAQ,MAAM;AAAE,gBAAY,CAAC,CAAC;AAAG,YAAQ;AAAA,EAAG;AAClD,QAAM,SAAS,KAAK,aAAa,OAAO,UAAU;AAChD,QAAI;AACF,YAAM,UAAU,YAAY,IAAI;AAChC,YAAM,iBAAiB,OAAO,OAAO,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,SAAS,CAAC;AAClF,UAAI,kBAAkB,SAAS;AAC7B,cAAM,WAAW,OAAO,YAAY,OAAO,OAAO,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,KAAK,KAAK,IAAI,CAAC,QAAQ,aAAa,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACtJ,YAAI,SAAS;AACX,gBAAM,gBAAgB,YAAY,EAAE,IAAI,QAAQ,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,GAAG,EAAE,IAAI,QAAQ,IAAI,SAAS,MAAM,SAAS,GAAG,MAAM,OAAO,GAAG,GAAG,SAAS,EAAE,EAAE,CAAC;AAAA,QAChK,OAAO;AACL,gBAAM,gBAAgB,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,GAAG,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;AAAA,QACtF;AAAA,MACF,OAAO;AACL,cAAM,KAAK,YAAY,EAAE,IAAI,SAAS,IAAI,MAAM,CAAC;AAAA,MACnD;AACA,aAAO,EAAE,MAAM,WAAW,SAAS,UAAU,gGAAqB,4EAAgB,CAAC;AACnF,YAAM;AAAA,IACR,SAAS,OAAO;AACd,aAAO,EAAE,MAAM,SAAS,SAAS,oBAAoB,OAAO,kIAAyB,EAAE,CAAC;AAAA,IAC1F;AAAA,EACF,CAAC;AACD,QAAM,SAAS,KAAK,aAAa,gBAAgB,aAAa,gBAAgB;AAC9E,QAAM,aAAa,CAAC,EAAE,KAAK,SAAAG,UAAS,KAAK,MAA8B,YAAY,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,EAAE,SAAAA,UAAS,KAAK,EAAE,EAAE;AAE1I,SACE,gBAAAN,KAAC,gBAAa,MAAY,cAAc,KAAK,MAAM,OAAO,cAAc,OAAO,UAAU,sDAAc,qDAAa,aAAa,KAAK,OAAO,SAAS,OACnJ,eAAK,OACJ,gBAAAA,KAACI,eAAA,EAAc,GAAG,MAChB,0BAAAH,MAAC,UAAK,WAAU,gBAAe,UAAU,QAAQ,YAAU,MACzD;AAAA,oBAAAD,KAAC,eAAY,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,KAAK,QAAQ;AAAA,IAC7E,KAAK,KAAK,OAAO,SAAS,IAAI,CAAC,YAC9B,gBAAAA,KAAC,gBAA+B,SAAkB,aAAa,SAAS,MAAM,SAAS,QAAQ,GAAG,GAAG,QAAQ,CAAC,GAAG,cAAc,cAA5G,QAAQ,GAAgH,CAC5I;AAAA,IACD,gBAAAC,MAAC,SAAI,WAAU,2CACb;AAAA,sBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,wCAAuC,SAAS,OAAO,4CAAK;AAAA,MAC5F,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,0CAAyC,UAAU,QAAS,mBAAS,oFAAmB,oDAAW;AAAA,OACrI;AAAA,KACF,GACF,IACE,gBAAAA,KAAC,mBAAgB,OAAM,+DAAiB,aAAY,sJAAuC,GACjG;AAEJ;AAEO,SAAS,YAAY,EAAE,OAAO,GAAqB;AACxD,QAAM,EAAE,OAAO,OAAO,IAAI,kBAAkB;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAIK,UAAkC,IAAI;AACpE,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAClD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAkC,IAAI;AAChF,QAAM,YAAY,MAAM,sBAAsB,MAAM;AACpD,QAAM,QAAQ,mBAAmB;AACjC,QAAM,eAAe,MAAM,sBAAsB,QAAQ,MAAM,KAAK;AACpE,QAAM,SAAS,MAAM,0BAA0B,MAAM;AACrD,QAAM,OAAO,UAAU;AACvB,QAAM,UAAUH,SAAuB,MAAM;AAC3C,UAAM,SAAS,aAAa,MAAM,MAAM,OAAO,WAAW,CAAC,CAAC;AAC5D,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO,KAAK;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ,CAAC,UACP,gBAAAD,MAAC,SAAI,WAAU,uBAAsB,2BAAuB,MAC1D;AAAA,wBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,wCAAuC,SAAS,CAAC,UAAU;AAAE,gBAAM,gBAAgB;AAAG,qBAAW,KAAK;AAAG,wBAAc,IAAI;AAAA,QAAG,GAAG,4CAAK;AAAA,QACtK,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,yCAAwC,SAAS,CAAC,UAAU;AAAE,gBAAM,gBAAgB;AAAG,2BAAiB,KAAK;AAAA,QAAG,GAAG,kDAAM;AAAA,SAC3J;AAAA,IAEJ,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,IAAI,CAAC;AACT,QAAM,QAAQ,cAAc,EAAE,SAAS,MAAM,aAAa,MAAM,SAAS,CAAC,GAAG,UAAU,aAAa,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,QAAQ,IAAI,GAAG,CAAC;AAExJ,MAAI,UAAU,QAAS,QAAO,gBAAAA,KAAC,mBAAgB,OAAM,2EAAmB,aAAa,oBAAoB,UAAU,OAAO,OAAI,MAAM,kEAAkB,GAAG;AAEzJ,SACE,gBAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,MAAM,SAAS;AAAA,QACtB,aAAa,MAAM;AAAA,QACnB,YAAY;AAAA,QACZ,WAAW,UAAU,aAAa,aAAa;AAAA,QAC/C,YAAY,CAAC,UAAU;AAAE,qBAAW,KAAK;AAAG,wBAAc,IAAI;AAAA,QAAG;AAAA,QACjE,cAAc,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,0CAAyC,UAAU,CAAC,MAAM,MAAM,SAAS,MAAM;AAAE,qBAAW,IAAI;AAAG,wBAAc,IAAI;AAAA,QAAG,GAAG,8CAAO;AAAA;AAAA,IAClL;AAAA,IACC,OAAO,gBAAAA,KAAC,sBAAmB,MAAY,SAAkB,MAAM,YAAY,SAAS,MAAM,cAAc,KAAK,GAAG,IAAK;AAAA,IACtH,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,QAAQ,aAAa;AAAA,QAC3B,OAAM;AAAA,QACN,aAAY;AAAA,QACZ,WAAW,OAAO;AAAA,QAClB,SAAS,MAAM,iBAAiB,IAAI;AAAA,QACpC,WAAW,MAAM;AACf,cAAI,CAAC,cAAe;AACpB,iBAAO,OAAO,cAAc,IAAI;AAAA,YAC9B,WAAW,MAAM;AAAE,+BAAiB,IAAI;AAAG,qBAAO,EAAE,MAAM,WAAW,SAAS,kFAAiB,CAAC;AAAA,YAAG;AAAA,YACnG,SAAS,CAAC,UAAU,OAAO,EAAE,MAAM,SAAS,SAAS,oBAAoB,OAAO,sHAAuB,EAAE,CAAC;AAAA,UAC5G,CAAC;AAAA,QACH;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AM9MO,IAAM,4BAA4B;AAoPlC,SAAS,2BAA2B,SAAuC;AAChF,UAAQ,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO,KAAK,IAAI,OAAO,KAAK,EAAE,EAAE,KAAK,IAAI;AACrF;AAEO,SAAS,2BACd,OACyC;AACzC,QAAM,QAAQ,SAAS,IACpB,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AACjB,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,SAAO,KAAK,IAAI,CAAC,SAAS;AACxB,UAAM,CAAC,OAAO,GAAG,IAAI,IAAI,KAAK,MAAM,GAAG;AACvC,WAAO,EAAE,OAAO,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,GAAG,EAAE,KAAK,KAAK,MAAM,KAAK,EAAE;AAAA,EAC7E,CAAC;AACH;AAEO,SAAS,gCAAgC,QAAmB;AACjE,UAAQ,UAAU,CAAC,GAAG,KAAK,IAAI;AACjC;AAEO,SAAS,gCAAgC,OAAsC;AACpF,QAAM,UAAU,SAAS,IACtB,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AACjB,SAAO,OAAO,SAAS,IAAI,SAAS;AACtC;AAEO,SAAS,6BAA6B,QAAiC;AAC5E,QAAM,QAAQ,OAAO,SAAS,OAAO,QAAQ,OAAO;AACpD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,mBACP,UACsC;AACtC,SAAO,SACJ,OAAO,CAAC,YAAY,QAAQ,WAAW,aAAa,QAAQ,WAAW,SAAS,EAChF,IAAI,CAAC,aAAa;AAAA,IACjB,OAAO,QAAQ;AAAA,IACf,OAAO,6BAA6B,QAAQ,MAAM;AAAA,IAClD,SAAS,QAAQ;AAAA,IACjB,UAAU,QAAQ;AAAA,EACpB,EAAE,EACD,OAAO,CAAC,YAAY,QAAQ,KAAK;AACtC;AAEA,SAAS,wBACP,UACmC;AACnC,UAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,aAAa;AAAA,IACxC,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,IAChB,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,EACtB,EAAE;AACJ;AAEA,SAAS,gBAAgB,MAA0B,SAAqB;AACtE,MAAI,CAAC,QAAQ,OAAO,MAAM,IAAI,EAAG,QAAO;AACxC,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC;AACxD;AAEO,SAAS,6BACd,OACA;AACA,MAAI,MAAM,SAAS,cAAc,MAAM,SAAS,WAAY,QAAO;AACnE,SAAO;AACT;AAEO,SAAS,qCACd,QACA,WAA6C,CAAC,GACR;AACtC,SAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,GAAG,OAAO,IAAI,CAAC,WAAW;AAAA,UACxB,KAAK,MAAM;AAAA,UACX,MAAM,6BAA6B,KAAK;AAAA,QAC1C,EAAE;AAAA,QACF,GAAG,SAAS,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,KAAK,MAAM,GAAG,EAAE;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,uCACd,QACA,QACA,WAA6C,CAAC,GACR;AACtC,MAAI,OAAO,WAAW,KAAK,SAAS,WAAW,EAAG,QAAO,CAAC;AAE1D,QAAM,cAAc;AAAA,IAClB,GAAG,OAAO,IAAI,CAAC,WAAW;AAAA,MACxB,KAAK,MAAM;AAAA,MACX,MAAM,6BAA6B,KAAK;AAAA,IAC1C,EAAE;AAAA,IACF,GAAG,SAAS,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,KAAK,MAAM,GAAG,EAAE;AAAA,EAC/D;AACA,QAAM,WAAW,IAAI,IAAI,YAAY,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC;AAC5D,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,cAAc,UAAU,CAAC,GAC5B,IAAI,CAAC,OAAO,UAAU;AACrB,UAAM,UAAsB,MAAM,YAAY,KAAK,MAAM,YAAY,IAAI,MAAM,UAAU;AACzF,UAAM,eAAe,MAAM,UAAU,CAAC,GACnC,OAAO,CAAC,UAAU,SAAS,IAAI,MAAM,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,GAAG,CAAC,EACrE,IAAI,CAAC,UAAU;AACd,eAAS,IAAI,MAAM,GAAG;AACtB,aAAO,EAAE,KAAK,MAAM,KAAK,MAAM,gBAAgB,MAAM,MAAM,OAAO,EAAE;AAAA,IACtE,CAAC;AAEH,WAAO;AAAA,MACL,IAAI,MAAM,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACjC,OAAO,MAAM,SAAS,SAAS,QAAQ,CAAC;AAAA,MACxC;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF,CAAC,EACA,OAAO,CAAC,UAAU,MAAM,OAAO,SAAS,KAAK,MAAM,MAAM,KAAK,CAAC;AAElE,QAAM,gBAAgB,YAAY,OAAO,CAAC,SAAS,CAAC,SAAS,IAAI,KAAK,GAAG,CAAC;AAE1E,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO,qCAAqC,QAAQ,QAAQ;AAAA,EAC9D;AAEA,MAAI,cAAc,SAAS,GAAG;AAC5B,eAAW,KAAK;AAAA,MACd,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,kCAId,MACA,aACoD;AACpD,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,SAAS,KAAK;AACpB,QAAM,SAAqD,KAAK,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5F,KAAK,MAAM;AAAA,IACX,OAAO,MAAM;AAAA,IACb,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU;AAAA,IACxB,UAAU,MAAM,YAAY;AAAA,IAC5B,aAAa,MAAM,eAAe;AAAA,IAClC,aAAa,2BAA2B,MAAM,OAAO;AAAA,IACrD,aAAa,MAAM,eAAe,SAAS,YAAY,UAAU;AAAA,IACjE,cACE,MAAM,eAAe,SAAS,YAC1B,MAAM,cAAc,YACpB;AAAA,IACN,mBACE,MAAM,eAAe,SAAS,YAC1B,MAAM,cAAc,aACpB;AAAA,IACN,mBACE,MAAM,eAAe,SAAS,YAC1B,MAAM,cAAc,aACpB;AAAA,IACN,yBACE,MAAM,eAAe,SAAS,YAC1B,gCAAgC,MAAM,cAAc,YAAY,IAChE;AAAA,IACN,kBACE,MAAM,eAAe,SAAS,YACzB,MAAM,cAAc,UAAU,kBAAkB,KACjD;AAAA,IACN,oBACE,MAAM,eAAe,SAAS,YAAa,MAAM,cAAc,UAAU,SAAS,KAAM;AAAA,IAC1F,UAAU,wBAAwB,MAAM,QAAQ;AAAA,EAClD,EAAE;AACF,QAAM,YAAY,KAAK,OAAO,YAAY,CAAC,GAAG,IAAI,CAAC,aAAa;AAAA,IAC9D,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,IAChB,aAAa,QAAQ;AAAA,IACrB,YAAY,QAAQ;AAAA,IACpB,aAAa,QAAQ,eAAe;AAAA,IACpC,MAAM,QAAQ,QAAQ;AAAA,IACtB,cAAc,QAAQ,gBAAgB;AAAA,EACxC,EAAE;AACF,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK,eAAe;AAAA,IACjC,cAAc,KAAK,OAAO,gBAAgB;AAAA,IAC1C,YAAY,QAAQ,QAAQ;AAAA,IAC5B,aAAa,QAAQ,SAAS,YAAY,OAAO,YAAY;AAAA,IAC7D,aAAa,QAAQ,SAAS,gBAAgB,OAAO,WAAW;AAAA,IAChE;AAAA,IACA,cAAc;AAAA,MACZ,KAAK,OAAO,QAAQ;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA,UAAU,mBAAmB,KAAK,QAAQ;AAAA,IAC1C,SAAS,KAAK;AAAA,EAChB;AACF;AAEO,SAAS,kCACd,MACA,aACwC;AACxC,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,SAAS,KAAK;AACpB,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK,eAAe;AAAA,IACjC,YAAY,QAAQ,QAAQ;AAAA,IAC5B,aAAa,QAAQ,SAAS,YAAY,OAAO,YAAY;AAAA,IAC7D,aAAa,QAAQ,SAAS,gBAAgB,OAAO,WAAW;AAAA,IAChE,SAAS,KAAK,OAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC5C,KAAK,OAAO;AAAA,MACZ,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,OAAO,OAAO;AAAA,IAChB,EAAE;AAAA,IACF,UAAU,mBAAmB,KAAK,QAAQ;AAAA,IAC1C,SAAS,KAAK;AAAA,EAChB;AACF;AAEO,SAAS,kCACd,MACA,aACA,oBAAoB,IACK;AACzB,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK,eAAe;AAAA,IACjC,QAAQ,KAAK,UAAU;AAAA,IACvB,QAAQ,KAAK,UAAU;AAAA,IACvB,gBAAgB,KAAK,kBAAkB;AAAA,IACvC,iBAAiB,KAAK,mBAAmB;AAAA,IACzC,cAAc,KAAK,UAAU,KAAK,YAAY,CAAC,GAAG,MAAM,CAAC;AAAA,IACzD,SAAS,KAAK;AAAA,EAChB;AACF;AAEO,SAAS,iCACd,OAC4C;AAC5C,SAAO,MAAM,QAAQ,IAAI,CAAC,YAAY;AAAA,IACpC,KAAK,OAAO;AAAA,IACZ,OAAO,OAAO;AAAA,IACd,MAAM,OAAO;AAAA,IACb,UAAU,CAAC,OAAO;AAAA,IAClB,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,aAAa,OAAO;AAAA,IACpB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,UAAU,CAAC;AAAA,EACb,EAAE;AACJ;AAEO,SAAS,kCACd,OACiC;AACjC,SAAO,MAAM,QAAQ,IAAI,CAAC,YAAY;AAAA,IACpC,KAAK,OAAO;AAAA,IACZ,OAAO,OAAO;AAAA,IACd,UAAU,OAAO;AAAA,IACjB,OAAO,OAAO,cAAc,YAAY,OAAO,cAAc,UAAU,UAAU;AAAA,EACnF,EAAE;AACJ;AAEO,SAAS,iCAGd,QAA4D;AAC5D,QAAM,SACJ,OAAO,eAAe,aAAa,OAAO,gBAAgB,4BACtD,EAAE,MAAM,WAAoB,WAAW,OAAO,YAAY,IAC1D,OAAO,eAAe,iBAAiB,OAAO,cAC5C,EAAE,MAAM,eAAwB,UAAU,OAAO,YAAY,IAC7D;AAER,SAAO;AAAA,IACL,OAAO,OAAO;AAAA,IACd,aAAa,OAAO,eAAe;AAAA,IACnC;AAAA,IACA,QAAQ;AAAA,MACN,cAAc,OAAO,gBAAgB;AAAA,MACrC,QAAQ,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,QACpC,KAAK,MAAM;AAAA,QACX,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,UAAU,MAAM;AAAA,QAChB,QAAQ,MAAM;AAAA,QACd,UAAU,MAAM;AAAA,QAChB,aAAa,MAAM,aAAa,KAAK,KAAK,MAAM;AAAA,QAChD,SACE,MAAM,SAAS,YAAY,MAAM,gBAAgB,WAC7C,2BAA2B,MAAM,WAAW,IAC5C;AAAA,QACN,eACE,MAAM,SAAS,YACf,MAAM,gBAAgB,WACtB,MAAM,iBAAiB,6BACvB,MAAM,sBAAsB,6BAC5B,MAAM,sBAAsB,4BACxB;AAAA,UACE,MAAM;AAAA,UACN,WAAW,MAAM;AAAA,UACjB,YAAY,MAAM;AAAA,UAClB,YAAY,MAAM;AAAA,UAClB,cAAc,gCAAgC,MAAM,uBAAuB;AAAA,UAC3E,UACE,MAAM,oBAAoB,MAAM,qBAC5B;AAAA,YACE,OAAO,MAAM;AAAA,YACb,gBAAgB,MAAM;AAAA,UACxB,IACA;AAAA,QACR,IACA;AAAA,QACN,UAAU,MAAM,SAAS,IAAI,CAAC,aAAa;AAAA,UACzC,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,UAChB,SAAS,QAAQ;AAAA,UACjB,YAAY,QAAQ;AAAA,UACpB,QAAQ,CAAC;AAAA,QACX,EAAE;AAAA,MACJ,EAAE;AAAA,MACF,QAAQ;AAAA,QACN,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO,YAAY,CAAC;AAAA,QACtB;AAAA,MACF;AAAA,MACA,WAAW,OAAO,YAAY,CAAC,GAC5B;AAAA,QACC,CAAC,YACC,QAAQ,OACR,QAAQ,SACR,QAAQ,WAAW,6BACnB,QAAQ,eACR,QAAQ;AAAA,MACZ,EACC,IAAI,CAAC,aAAa;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,OAAO,QAAQ;AAAA,QACf,QAAQ,QAAQ;AAAA,QAChB,aAAa,QAAQ;AAAA,QACrB,YAAY,QAAQ;AAAA,QACpB,aAAa,QAAQ,aAAa,KAAK,KAAK;AAAA,QAC5C,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,QAC9B,cAAc,QAAQ,gBAAgB;AAAA,MACxC,EAAE;AAAA,IACN;AAAA,IACA,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAC1C,OAAO,QAAQ;AAAA,MACf,QAAQ;AAAA,MACR,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,QAAQ,EAAE,OAAO,QAAQ,MAAM;AAAA,IACjC,EAAE;AAAA,IACF,SAAS,OAAO;AAAA,EAClB;AACF;AAEO,SAAS,iCACd,QACA;AACA,QAAM,SACJ,OAAO,eAAe,aAAa,OAAO,gBAAgB,4BACtD,EAAE,MAAM,WAAoB,WAAW,OAAO,YAAY,IAC1D,OAAO,eAAe,iBAAiB,OAAO,cAC5C,EAAE,MAAM,eAAwB,UAAU,OAAO,YAAY,IAC7D;AAER,SAAO;AAAA,IACL,OAAO,OAAO;AAAA,IACd,aAAa,OAAO,eAAe;AAAA,IACnC;AAAA,IACA,QAAQ,EAAE,SAAS,OAAO,QAAQ;AAAA,IAClC,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAC1C,OAAO,QAAQ;AAAA,MACf,QAAQ;AAAA,MACR,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,QAAQ,EAAE,OAAO,QAAQ,MAAM;AAAA,IACjC,EAAE;AAAA,IACF,SAAS,OAAO;AAAA,EAClB;AACF;AAEO,SAAS,iCACd,QACA,eACA;AACA,SAAO;AAAA,IACL,OAAO,OAAO;AAAA,IACd,aAAa,OAAO,eAAe;AAAA,IACnC,QAAQ,OAAO,WAAW,4BAA4B,OAAO,OAAO;AAAA,IACpE,QAAQ,OAAO,WAAW,4BAA4B,OAAO,OAAO;AAAA,IACpE,gBAAgB,OAAO,kBAAkB;AAAA,IACzC,iBAAiB,OAAO,mBAAmB;AAAA,IAC3C,UAAU,OAAO,cAAc,KAAK,IAAI,cAAc,OAAO,YAAY,IAAI,CAAC;AAAA,IAC9E,SAAS,OAAO;AAAA,EAClB;AACF;;;AC7gBI,gBAAAO,MA4BM,QAAAC,aA5BN;AA1HJ,IAAM,SAAS;AAAA,EACb,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,KAAK;AAAA,IACL,SAAS;AAAA,EACX;AAAA,EACA,WAAW;AAAA,IACT,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,KAAK;AAAA,EACP;AAAA,EACA,KAAK;AAAA,IACH,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,KAAK;AAAA,IACL,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,eAAe;AAAA,IACb,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AACF;AAEA,SAAS,YAAY,SAAiC;AACpD,SAAO,QAAQ,IAAI,CAAC,WAClB,gBAAAD,KAAC,YAA0B,OAAO,OAAO,OACtC,iBAAO,SADG,OAAO,KAEpB,CACD;AACH;AAEO,SAAS,mCAGd,SAA8C;AAC9C,SAAO,SAAS,6BAA6B;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA0D;AACxD,WACE,gBAAAC,MAAC,SAAI,OAAO,OAAO,MACjB;AAAA,sBAAAA,MAAC,SAAI,OAAO,OAAO,QACjB;AAAA,wBAAAA,MAAC,SACC;AAAA,0BAAAD,KAAC,QAAG,OAAO,OAAO,OAAQ,mBAAS,sBAAsB,oBAAmB;AAAA,UAC5E,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,qEAAuD;AAAA,WACvF;AAAA,QACA,gBAAAC,MAAC,SAAI,OAAO,OAAO,SACjB;AAAA,0BAAAD,KAAC,OAAE,MAAM,QAAQ,UAAU,OAAO,OAAO,QAAQ,oBAEjD;AAAA,UACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,UAAU,UAAU,OAAO,OAAO,eACrD,qBAAW,cAAc,QAC5B;AAAA,WACF;AAAA,SACF;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAD,KAAC,SAAI,OAAO,OAAO,eACjB,0BAAAA,KAAC,QAAG,OAAO,OAAO,cAAc,qBAAO,GACzC;AAAA,QACA,gBAAAC,MAAC,SAAI,OAAO,EAAE,GAAG,OAAO,MAAM,GAAG,OAAO,UAAU,GAChD;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,SAAS,EAAE,UAAU,KAAK,CAAC,GAAG;AAAA,aAC9E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,yBAAW;AAAA,YACtC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,aAAa,GAAG;AAAA,aAChE;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,0BAAY;AAAA,YACvC,gBAAAC,MAAC,YAAO,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,cAAc,GAC3D;AAAA,8BAAAD,KAAC,YAAO,OAAM,UAAS,oBAAM;AAAA,cAC7B,gBAAAA,KAAC,YAAO,OAAM,UAAS,oBAAM;AAAA,eAC/B;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,wBAAU;AAAA,YACrC,gBAAAC,MAAC,YAAO,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,GACzD;AAAA,8BAAAD,KAAC,YAAO,OAAM,QAAO,kBAAI;AAAA,cACzB,gBAAAA,KAAC,YAAO,OAAM,WAAU,sBAAQ;AAAA,cAChC,gBAAAA,KAAC,YAAO,OAAM,eAAc,0BAAY;AAAA,eAC1C;AAAA,aACF;AAAA,UACC,eAAe,YACd,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAC,MAAC,YAAO,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,aAAa,GAC1D;AAAA,8BAAAD,KAAC,YAAO,OAAO,2BAA2B,0BAAY;AAAA,cACrD,OAAO,IAAI,CAAC,UACX,gBAAAA,KAAC,YAAwB,OAAO,MAAM,MACnC,gBAAM,SAAS,MAAM,QADX,MAAM,IAEnB,CACD;AAAA,eACH;AAAA,aACF,IACE;AAAA,UACH,eAAe,gBACd,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,2BAAa;AAAA,YACxC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,aAAa,GAAG;AAAA,aAChE,IACE;AAAA,UACH,eAAe,YACd,gBAAAA,KAAC,SAAI,OAAO,EAAE,GAAG,OAAO,OAAO,gBAAgB,MAAM,GACnD,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,UAAU,gBAAgB;AAAA,cAC1B,SAAS;AAAA,cACV;AAAA;AAAA,UAED,GACF,IACE;AAAA,WACN;AAAA,SACF;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAA,MAAC,SAAI,OAAO,OAAO,eACjB;AAAA,0BAAAA,MAAC,SACC;AAAA,4BAAAD,KAAC,QAAG,OAAO,OAAO,cAAc,oBAAM;AAAA,YACtC,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,kCAAoB;AAAA,aACpD;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,SAAS,MAAM;AACb,sBAAM,MAAM,QAAQ,WAAW,OAAO,SAAS,CAAC;AAChD,2BAAW,OAAO;AAAA,kBAChB,GAAG;AAAA,kBACH;AAAA,kBACA,OAAO,SAAS,WAAW,OAAO,SAAS,CAAC;AAAA,kBAC5C,MAAM,QAAQ,iBAAiB,CAAC,GAAG;AAAA,gBACrC,CAAC;AAAA,cACH;AAAA,cACD;AAAA;AAAA,UAED;AAAA,WACF;AAAA,QACC,WAAW,OAAO,IAAI,CAAC,OAAO,UAC7B,gBAAAC,MAAC,SAAmB,OAAO,OAAO,KAChC;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,iBAAG;AAAA,YAC9B,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,UAAU,KAAK,MAAM,GAAG;AAAA,aACxE;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,UAAU,KAAK,QAAQ,GAAG;AAAA,aAC1E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,kBAAI;AAAA,YAC/B,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACb,GAAG,KAAK,SAAS,UAAU,KAAK,OAA8C;AAAA,gBAE9E,sBAAY,QAAQ,gBAAgB;AAAA;AAAA,YACvC;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,UAAU,KAAK,WAAW,GAAG;AAAA,YAAE;AAAA,aAE1E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,UAAU,KAAK,SAAS,GAAG;AAAA,YAAE;AAAA,aAExE;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,UAAU,KAAK,WAAW,GAAG;AAAA,YAAE;AAAA,aAE1E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,yBAAW;AAAA,YACtC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,UAAU,KAAK,cAAc,GAAG;AAAA,aAChF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,4BAAc;AAAA,YACzC,gBAAAA,KAAC,cAAS,OAAO,OAAO,UAAW,GAAG,KAAK,SAAS,UAAU,KAAK,cAAc,GAAG;AAAA,aACtF;AAAA,UACA,gBAAAA,KAAC,SAAI,OAAO,OAAO,SACjB,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,SAAS,MAAM,WAAW,OAAO,KAAK;AAAA,cACtC,UAAU,WAAW,OAAO,UAAU;AAAA,cACvC;AAAA;AAAA,UAED,GACF;AAAA,aA/CQ,MAAM,EAgDhB,CACD;AAAA,SACH;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAA,MAAC,SAAI,OAAO,OAAO,eACjB;AAAA,0BAAAA,MAAC,SACC;AAAA,4BAAAD,KAAC,QAAG,OAAO,OAAO,cAAc,oBAAM;AAAA,YACtC,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,oEAAsD;AAAA,aACtF;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,SAAS,MACP,KAAK,SAAS,gBAAgB,qCAAqC,MAAM,GAAG;AAAA,gBAC1E,aAAa;AAAA,cACf,CAAC;AAAA,cAEJ;AAAA;AAAA,UAED;AAAA,WACF;AAAA,QACC,KAAK,MAAM,cAAc,EAAE,IAAI,CAAC,OAAO,eACtC,gBAAAC,MAAC,SAAmB,OAAO,OAAO,KAChC;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,yBAAW;AAAA,YACtC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,gBAAgB,UAAU,QAAQ,GAAG;AAAA,aACrF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,qBAAO;AAAA,YAClC,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACd,OAAO,MAAM;AAAA,gBACb,UAAU,CAAC,UACT,KAAK;AAAA,kBACH,gBAAgB,UAAU;AAAA,kBAC1B,OAAO,MAAM,OAAO,KAAK;AAAA,kBACzB,EAAE,aAAa,KAAK;AAAA,gBACtB;AAAA,gBAGF;AAAA,kCAAAD,KAAC,YAAO,OAAO,GAAG,eAAC;AAAA,kBACnB,gBAAAA,KAAC,YAAO,OAAO,GAAG,eAAC;AAAA,kBACnB,gBAAAA,KAAC,YAAO,OAAO,IAAI,gBAAE;AAAA;AAAA;AAAA,YACvB;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,oBAAM;AAAA,YACjC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACd,OAAO,MAAM,OAAO,IAAI,CAAC,SAAS,KAAK,GAAG,EAAE,KAAK,IAAI;AAAA,gBACrD,UAAQ;AAAA;AAAA,YACV;AAAA,aACF;AAAA,aA9BQ,MAAM,EA+BhB,CACD;AAAA,SACH;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAA,MAAC,SAAI,OAAO,OAAO,eACjB;AAAA,0BAAAA,MAAC,SACC;AAAA,4BAAAD,KAAC,QAAG,OAAO,OAAO,cAAc,sBAAQ;AAAA,YACxC,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,oDAAsC;AAAA,aACtE;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,SAAS,MACP,aAAa,OAAO;AAAA,gBAClB,KAAK,UAAU,aAAa,OAAO,SAAS,CAAC;AAAA,gBAC7C,OAAO,WAAW,aAAa,OAAO,SAAS,CAAC;AAAA,gBAChD,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,YAAY;AAAA,gBACZ,aAAa;AAAA,gBACb,MAAM;AAAA,gBACN,cAAc;AAAA,cAChB,CAAC;AAAA,cAEJ;AAAA;AAAA,UAED;AAAA,WACF;AAAA,QACC,aAAa,OAAO,IAAI,CAAC,SAAS,UACjC,gBAAAC,MAAC,SAAqB,OAAO,OAAO,KAClC;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,iBAAG;AAAA,YAC9B,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,KAAK,MAAM,GAAG;AAAA,aAC1E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,KAAK,QAAQ,GAAG;AAAA,aAC5E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,qBAAO;AAAA,YAClC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,KAAK,SAAS,GAAG;AAAA,aAC7E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,0BAAY;AAAA,YACvC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,KAAK,cAAc,GAAG;AAAA,aAClF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,yBAAW;AAAA,YACtC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,KAAK,aAAa,GAAG;AAAA,aACjF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,0BAAY;AAAA,YACvC,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACb,GAAG,KAAK,SAAS,YAAY,KAAK,eAAe;AAAA,gBAElD;AAAA,kCAAAD,KAAC,YAAO,OAAM,UAAS,oBAAM;AAAA,kBAC7B,gBAAAA,KAAC,YAAO,OAAM,UAAS,oBAAM;AAAA;AAAA;AAAA,YAC/B;AAAA,aACF;AAAA,UACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,OAAO,OAAO,QAAQ,SAAS,MAAM,aAAa,OAAO,KAAK,GAAG,oBAEvF;AAAA,aAjCQ,QAAQ,EAkClB,CACD;AAAA,SACH;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAA,MAAC,SAAI,OAAO,OAAO,eACjB;AAAA,0BAAAA,MAAC,SACC;AAAA,4BAAAD,KAAC,QAAG,OAAO,OAAO,cAAc,2BAAa;AAAA,YAC7C,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,0DAA4C;AAAA,aAC5E;AAAA,UACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,OAAO,OAAO,QAAQ,SAAS,MAAM,aAAa,OAAO,YAAY,GAAG,yBAE9F;AAAA,WACF;AAAA,QACC,aAAa,OAAO,IAAI,CAAC,SAAS,UACjC,gBAAAC,MAAC,SAAqB,OAAO,OAAO,KAClC;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACb,GAAG,KAAK;AAAA,kBACP,YAAY,KAAK;AAAA,gBACnB;AAAA,gBAEC,sBAAY,QAAQ,uBAAuB;AAAA;AAAA,YAC9C;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,KAAK,QAAQ,GAAG;AAAA,aAC5E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,YAAY,KAAK,UAAU,GAAG;AAAA,YAAE;AAAA,aAE3E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,YAAY,KAAK,WAAW,GAAG;AAAA,YAAE;AAAA,aAE5E;AAAA,UACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,OAAO,OAAO,QAAQ,SAAS,MAAM,aAAa,OAAO,KAAK,GAAG,oBAEvF;AAAA,aA1BQ,QAAQ,EA2BlB,CACD;AAAA,SACH;AAAA,OACF;AAAA,EAEJ;AACF;AAEO,SAAS,mCACd,SACA;AACA,SAAO,SAAS,6BAA6B;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA8C;AAC5C,WACE,gBAAAC,MAAC,SAAI,OAAO,OAAO,MACjB;AAAA,sBAAAA,MAAC,SAAI,OAAO,OAAO,QACjB;AAAA,wBAAAA,MAAC,SACC;AAAA,0BAAAD,KAAC,QAAG,OAAO,OAAO,OAAQ,mBAAS,sBAAsB,oBAAmB;AAAA,UAC5E,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,mEAAqD;AAAA,WACrF;AAAA,QACA,gBAAAC,MAAC,SAAI,OAAO,OAAO,SACjB;AAAA,0BAAAD,KAAC,OAAE,MAAM,QAAQ,UAAU,OAAO,OAAO,QAAQ,oBAEjD;AAAA,UACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,UAAU,UAAU,OAAO,OAAO,eACrD,qBAAW,cAAc,QAC5B;AAAA,WACF;AAAA,SACF;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAD,KAAC,SAAI,OAAO,OAAO,eACjB,0BAAAA,KAAC,QAAG,OAAO,OAAO,cAAc,qBAAO,GACzC;AAAA,QACA,gBAAAC,MAAC,SAAI,OAAO,EAAE,GAAG,OAAO,MAAM,GAAG,OAAO,UAAU,GAChD;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,SAAS,EAAE,UAAU,KAAK,CAAC,GAAG;AAAA,aAC9E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,yBAAW;AAAA,YACtC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,aAAa,GAAG;AAAA,aAChE;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,wBAAU;AAAA,YACrC,gBAAAC,MAAC,YAAO,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,GACzD;AAAA,8BAAAD,KAAC,YAAO,OAAM,QAAO,kBAAI;AAAA,cACzB,gBAAAA,KAAC,YAAO,OAAM,WAAU,sBAAQ;AAAA,cAChC,gBAAAA,KAAC,YAAO,OAAM,eAAc,0BAAY;AAAA,eAC1C;AAAA,aACF;AAAA,UACC,eAAe,YACd,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAC,MAAC,YAAO,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,aAAa,GAC1D;AAAA,8BAAAD,KAAC,YAAO,OAAO,2BAA2B,0BAAY;AAAA,cACrD,OAAO,IAAI,CAAC,UACX,gBAAAA,KAAC,YAAwB,OAAO,MAAM,MACnC,gBAAM,SAAS,MAAM,QADX,MAAM,IAEnB,CACD;AAAA,eACH;AAAA,aACF,IACE;AAAA,UACH,eAAe,gBACd,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,2BAAa;AAAA,YACxC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,aAAa,GAAG;AAAA,aAChE,IACE;AAAA,UACH,eAAe,YACd,gBAAAA,KAAC,SAAI,OAAO,EAAE,GAAG,OAAO,OAAO,gBAAgB,MAAM,GACnD,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,UAAU,gBAAgB;AAAA,cAC1B,SAAS;AAAA,cACV;AAAA;AAAA,UAED,GACF,IACE;AAAA,WACN;AAAA,SACF;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAA,MAAC,SAAI,OAAO,OAAO,eACjB;AAAA,0BAAAA,MAAC,SACC;AAAA,4BAAAD,KAAC,QAAG,OAAO,OAAO,cAAc,qBAAO;AAAA,YACvC,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,mCAAqB;AAAA,aACrD;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,SAAS,MACP,YAAY,OAAO;AAAA,gBACjB,GAAG;AAAA,gBACH,KAAK,QAAQ,YAAY,OAAO,SAAS,CAAC;AAAA,gBAC1C,OAAO,UAAU,YAAY,OAAO,SAAS,CAAC;AAAA,cAChD,CAAC;AAAA,cAEJ;AAAA;AAAA,UAED;AAAA,WACF;AAAA,QACC,YAAY,OAAO,IAAI,CAAC,QAAQ,UAC/B,gBAAAC,MAAC,SAAoB,OAAO,OAAO,KACjC;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,iBAAG;AAAA,YAC9B,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,WAAW,KAAK,MAAM,GAAG;AAAA,aACzE;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,WAAW,KAAK,QAAQ,GAAG;AAAA,aAC3E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAC,MAAC,YAAO,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,WAAW,KAAK,QAAQ,GACrE;AAAA,8BAAAD,KAAC,YAAO,OAAM,QAAO,kBAAI;AAAA,cACzB,gBAAAA,KAAC,YAAO,OAAM,SAAQ,mBAAK;AAAA,eAC7B;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,WAAW,KAAK,WAAW,GAAG;AAAA,YAAE;AAAA,aAE3E;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACd,SAAS,MAAM,YAAY,OAAO,KAAK;AAAA,cACvC,UAAU,YAAY,OAAO,UAAU;AAAA,cACxC;AAAA;AAAA,UAED;AAAA,aA3BQ,OAAO,EA4BjB,CACD;AAAA,SACH;AAAA,MAEA,gBAAAC,MAAC,aAAQ,OAAO,OAAO,SACrB;AAAA,wBAAAA,MAAC,SAAI,OAAO,OAAO,eACjB;AAAA,0BAAAA,MAAC,SACC;AAAA,4BAAAD,KAAC,QAAG,OAAO,OAAO,cAAc,2BAAa;AAAA,YAC7C,gBAAAA,KAAC,OAAE,OAAO,OAAO,aAAa,+DAAiD;AAAA,aACjF;AAAA,UACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,OAAO,OAAO,QAAQ,SAAS,MAAM,aAAa,OAAO,YAAY,GAAG,yBAE9F;AAAA,WACF;AAAA,QACC,aAAa,OAAO,IAAI,CAAC,SAAS,UACjC,gBAAAC,MAAC,SAAqB,OAAO,OAAO,KAClC;AAAA,0BAAAA,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,OAAO;AAAA,gBACb,GAAG,KAAK;AAAA,kBACP,YAAY,KAAK;AAAA,gBACnB;AAAA,gBAEC,sBAAY,QAAQ,uBAAuB;AAAA;AAAA,YAC9C;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,OACnB;AAAA,4BAAAD,KAAC,UAAK,OAAO,OAAO,OAAO,mBAAK;AAAA,YAChC,gBAAAA,KAAC,WAAM,OAAO,OAAO,OAAQ,GAAG,KAAK,SAAS,YAAY,KAAK,QAAQ,GAAG;AAAA,aAC5E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,YAAY,KAAK,UAAU,GAAG;AAAA,YAAE;AAAA,aAE3E;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAO,OAAO,eACnB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAY,GAAG,KAAK,SAAS,YAAY,KAAK,WAAW,GAAG;AAAA,YAAE;AAAA,aAE5E;AAAA,UACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,OAAO,OAAO,QAAQ,SAAS,MAAM,aAAa,OAAO,KAAK,GAAG,oBAEvF;AAAA,aA1BQ,QAAQ,EA2BlB,CACD;AAAA,SACH;AAAA,OACF;AAAA,EAEJ;AACF;;;ACjqBA,SAAS,WAAAE,UAAS,YAAAC,iBAAgB;AA0LxB,SACE,OAAAC,MADF,QAAAC,aAAA;AA9HV,IAAMC,UAAS;AAAA,EACb,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,cAAc;AAAA,EAChB;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,cAAc;AAAA,IACd,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AACF;AAEO,SAAS,2CAGd,MAAgE;AAChE,SAAO,SAAS,8BAA8B;AAC5C,UAAM,CAAC,OAAO,QAAQ,IAAIH,UAA2C;AAAA,MACnE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACV,CAAC;AACD,UAAM,QAAQ,KAAK,MAAM,YAAYD,SAAQ,MAAM,KAAK,WAAW,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACnF,UAAM,SAAS,KAAK,MAAM,UAAU;AACpC,UAAM,YAAY,KAAK,MAAM,aAAa;AAC1C,UAAM,QAAQ,MAAM,MAAM,SAAS,CAAC;AAEpC,UAAM,cAAc,OAAO,WAAoB;AAC7C,YAAM,QAAQ,OAAO;AAAA,QACnB,KAAK,OAAO,gBAAgB,MAAM;AAAA,QAClC,KAAK,OAAO,sBAAsB,MAAM;AAAA,MAC1C;AACA,UAAI,CAAC,MAAO;AACZ,YAAM,UAAU,YAAY,EAAE,IAAI,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;AAAA,IACjE;AAEA,UAAM,WAAW,OAAO,WAAoB;AAC1C,UAAI,CAAC,OAAO,QAAQ,KAAK,OAAO,cAAc,MAAM,CAAC,EAAG;AACxD,YAAM,OAAO,YAAY,OAAO,EAAE;AAAA,IACpC;AAEA,WACE,gBAAAG,MAAC,aAAQ,OAAOC,QAAO,MACrB;AAAA,sBAAAD,MAAC,SAAI,OAAOC,QAAO,QACjB;AAAA,wBAAAD,MAAC,SACC;AAAA,0BAAAD,KAAC,QAAG,OAAOE,QAAO,OAAQ,eAAK,OAAO,OAAM;AAAA,UAC5C,gBAAAF,KAAC,OAAE,OAAOE,QAAO,aAAc,eAAK,OAAO,aAAY;AAAA,WACzD;AAAA,QACC,KAAK,aACJ,gBAAAF,KAAC,OAAE,MAAM,KAAK,YAAY,OAAOE,QAAO,eACrC,eAAK,OAAO,UACf,IACE;AAAA,SACN;AAAA,MAEA,gBAAAD,MAAC,SAAI,OAAOC,QAAO,MACjB;AAAA,wBAAAF,KAAC,SAAI,OAAOE,QAAO,SACjB,0BAAAF;AAAA,UAAC;AAAA;AAAA,YACC,OAAOE,QAAO;AAAA,YACd,aAAa,KAAK,OAAO;AAAA,YACzB,OAAO,MAAM;AAAA,YACb,UAAU,CAAC,UACT,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,MAAM,GAAG,QAAQ,MAAM,OAAO,MAAM,EAAE;AAAA;AAAA,QAE/E,GACF;AAAA,QACA,gBAAAF,KAAC,SAAI,OAAOE,QAAO,WACjB,0BAAAD,MAAC,WAAM,OAAOC,QAAO,OACnB;AAAA,0BAAAF,KAAC,WACC,0BAAAC,MAAC,QACC;AAAA,4BAAAD,KAAC,QAAG,OAAOE,QAAO,IAAK,eAAK,OAAO,OAAM;AAAA,YACzC,gBAAAF,KAAC,QAAG,OAAOE,QAAO,IAAI,oBAAM;AAAA,YAC5B,gBAAAF,KAAC,QAAG,OAAOE,QAAO,IAAI,yBAAW;AAAA,YACjC,gBAAAF,KAAC,QAAG,OAAO,EAAE,GAAGE,QAAO,IAAI,WAAW,QAAQ,GAAG,qBAAO;AAAA,aAC1D,GACF;AAAA,UACA,gBAAAF,KAAC,WACE,gBAAM,IAAI,CAAC,WACV,gBAAAC,MAAC,QACC;AAAA,4BAAAD,KAAC,QAAG,OAAOE,QAAO,IAChB,0BAAAF,KAAC,OAAE,MAAM,KAAK,SAAS,MAAM,GAAI,iBAAO,OAAM,GAChD;AAAA,YACA,gBAAAA,KAAC,QAAG,OAAOE,QAAO,IAAK,eAAK,YAAY,MAAM,KAAK,KAAI;AAAA,YACvD,gBAAAF,KAAC,QAAG,OAAOE,QAAO,IAAK,iBAAO,eAAe,KAAI;AAAA,YACjD,gBAAAF,KAAC,QAAG,OAAOE,QAAO,IAChB,0BAAAD,MAAC,SAAI,OAAOC,QAAO,SAChB;AAAA,mBAAK,cACJ,gBAAAF,KAAC,OAAE,MAAM,KAAK,YAAY,MAAM,GAAG,OAAOE,QAAO,QAC9C,eAAK,OAAO,cACf,IACE;AAAA,cACJ,gBAAAF,KAAC,OAAE,MAAM,KAAK,SAAS,MAAM,GAAG,OAAOE,QAAO,QAC3C,eAAK,OAAO,WACf;AAAA,cACA,gBAAAF;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,OAAOE,QAAO;AAAA,kBACd,SAAS,MAAM,KAAK,YAAY,MAAM;AAAA,kBAErC,eAAK,OAAO;AAAA;AAAA,cACf;AAAA,cACA,gBAAAF;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,OAAOE,QAAO;AAAA,kBACd,UAAU,OAAO;AAAA,kBACjB,SAAS,MAAM,KAAK,SAAS,MAAM;AAAA,kBAElC,eAAK,OAAO;AAAA;AAAA,cACf;AAAA,eACF,GACF;AAAA,eAhCO,OAAO,EAiChB,CACD,GACH;AAAA,WACF,GACF;AAAA,QACC,MAAM,YAAY,gBAAAF,KAAC,SAAI,OAAOE,QAAO,OAAO,wBAAU,IAAS;AAAA,QAC/D,MAAM,UAAU,gBAAAF,KAAC,SAAI,OAAOE,QAAO,OAAO,6BAAe,IAAS;AAAA,QAClE,CAAC,MAAM,aAAa,CAAC,MAAM,WAAW,MAAM,WAAW,IACtD,gBAAAD,MAAC,SAAI,OAAOC,QAAO,OACjB;AAAA,0BAAAF,KAAC,YAAQ,eAAK,OAAO,YAAW;AAAA,UAChC,gBAAAA,KAAC,SAAK,eAAK,OAAO,kBAAiB;AAAA,WACrC,IACE;AAAA,SACN;AAAA,OACF;AAAA,EAEJ;AACF;;;AC9QA,SAAS,aAAAG,kBAAiB;AAC1B,SAAS,WAAAC,gBAAe;AA4LX,SAyDC,UAzDD,OAAAC,MAUH,QAAAC,aAVG;AA3Jb,IAAMC,UAAS;AAAA,EACb,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,KAAK;AAAA,IACL,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,eAAe;AAAA,IACb,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAEA,IAAM,qBAA8C;AAAA,EAClD,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,SAAS;AACX;AAEO,SAAS,mCACd,SACA;AACA,QAAM,oBAAoB,QAAQ,qBAAqB;AACvD,QAAM,kBAAkB,QAAQ,kBAAkB,SAAS;AAE3D,SAAO,SAAS,6BAA6B,EAAE,OAAO,GAAwB;AAC5E,UAAM,OAAO,QAAQ,MAAM,eAAe,MAAM;AAChD,UAAM,QAAQ,QAAQ,MAAM,sBAAsB;AAClD,UAAM,QAAQ,QAAQ,MAAM,sBAAsB;AAClD,UAAM,OAAO,QAAQ,MAAM,mBAAmB;AAC9C,UAAM,OAAOC,SAAiC;AAAA,MAC5C,eAAe;AAAA,QACb,GAAG;AAAA,QACH,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,MACnB;AAAA,IACF,CAAC;AAED,IAAAC,WAAU,MAAM;AACd,UAAI,UAAU,CAAC,KAAK,KAAM;AAC1B,WAAK;AAAA,QACH;AAAA,UACG,KAAK,QAAQ;AAAA,UACd;AAAA,YACE,GAAG;AAAA,YACH,gBAAgB;AAAA,YAChB,iBAAiB;AAAA,UACnB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,CAAC,MAAM,KAAK,MAAM,MAAM,CAAC;AAE5B,UAAM,WAAW,KAAK,aAAa,OAAO,WAAW;AACnD,UAAI;AACF,cAAM,QAAQ,iCAAiC,QAAQ,QAAQ,aAAa;AAC5E,cAAM,QAAQ,MAAM,KAAK,YAAY;AAAA,UACnC,IAAI;AAAA,UACJ;AAAA,QACF,CAAC;AACD,gBAAQ,gBAAgB,SAAS,eAAe,cAAc;AAC9D,YAAI,CAAC,QAAQ;AACX,iBAAO,SAAS,OAAO,QAAQ,SAAS,MAAM,EAAE,CAAC;AAAA,QACnD;AAAA,MACF,SAAS,OAAO;AACd,YAAI,QAAQ,YAAa,SAAQ,YAAY,KAAK;AAAA,YAC7C,OAAM;AAAA,MACb;AAAA,IACF,CAAC;AAED,QAAI,UAAU,KAAK,WAAW;AAC5B,aAAO,gBAAAJ,KAAC,SAAI,OAAOE,QAAO,OAAO,wBAAU;AAAA,IAC7C;AAEA,QAAI,UAAU,KAAK,SAAS;AAC1B,aAAO,gBAAAF,KAAC,SAAI,OAAOE,QAAO,OAAO,kCAAoB;AAAA,IACvD;AAEA,WACE,gBAAAD,MAAC,UAAK,UAAoB,YAAU,MAAC,OAAOC,QAAO,MACjD;AAAA,sBAAAD,MAAC,SAAI,OAAOC,QAAO,QACjB;AAAA,wBAAAD,MAAC,SACC;AAAA,0BAAAD,KAAC,QAAG,OAAOE,QAAO,OAAQ,mBAAS,sBAAsB,oBAAmB;AAAA,UAC5E,gBAAAF,KAAC,OAAE,OAAOE,QAAO,aAAa,4DAA8C;AAAA,WAC9E;AAAA,QACA,gBAAAD,MAAC,SAAI,OAAOC,QAAO,SACjB;AAAA,0BAAAF,KAAC,OAAE,MAAM,QAAQ,UAAU,OAAOE,QAAO,QAAQ,oBAEjD;AAAA,UACA,gBAAAF,KAAC,YAAO,MAAK,UAAS,UAAU,KAAK,WAAW,OAAOE,QAAO,eAC3D,eAAK,YAAY,cAAc,QAClC;AAAA,WACF;AAAA,SACF;AAAA,MAEA,gBAAAF,KAAC,aAAQ,OAAOE,QAAO,SACrB,0BAAAD,MAAC,SAAI,OAAOC,QAAO,MACjB;AAAA,wBAAAD,MAAC,WAAM,OAAOC,QAAO,OACnB;AAAA,0BAAAF,KAAC,UAAK,OAAOE,QAAO,OAAO,mBAAK;AAAA,UAChC,gBAAAF,KAAC,WAAM,OAAOE,QAAO,OAAQ,GAAG,KAAK,SAAS,SAAS,EAAE,UAAU,KAAK,CAAC,GAAG;AAAA,WAC9E;AAAA,QACA,gBAAAD,MAAC,WAAM,OAAOC,QAAO,OACnB;AAAA,0BAAAF,KAAC,UAAK,OAAOE,QAAO,OAAO,yBAAW;AAAA,UACtC,gBAAAF,KAAC,WAAM,OAAOE,QAAO,OAAQ,GAAG,KAAK,SAAS,aAAa,GAAG;AAAA,WAChE;AAAA,QACA,gBAAAD,MAAC,WAAM,OAAOC,QAAO,OACnB;AAAA,0BAAAF,KAAC,UAAK,OAAOE,QAAO,OAAO,kBAAI;AAAA,UAC/B,gBAAAD,MAAC,YAAO,OAAOC,QAAO,OAAQ,GAAG,KAAK,SAAS,QAAQ,GACrD;AAAA,4BAAAF,KAAC,YAAO,OAAO,2BAA2B,qBAAO;AAAA,aAC/C,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,SACvB,gBAAAA,KAAC,YAAqB,OAAO,KAAK,IAC/B,eAAK,SADK,KAAK,EAElB,CACD;AAAA,aACH;AAAA,WACF;AAAA,QACA,gBAAAC,MAAC,WAAM,OAAOC,QAAO,OACnB;AAAA,0BAAAF,KAAC,UAAK,OAAOE,QAAO,OAAO,kBAAI;AAAA,UAC/B,gBAAAD,MAAC,YAAO,OAAOC,QAAO,OAAQ,GAAG,KAAK,SAAS,QAAQ,GACrD;AAAA,4BAAAF,KAAC,YAAO,OAAO,2BAA2B,qBAAO;AAAA,aAC/C,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,SACvB,gBAAAA,KAAC,YAAqB,OAAO,KAAK,IAC/B,eAAK,SADK,KAAK,EAElB,CACD;AAAA,aACH;AAAA,WACF;AAAA,QACC,kBACC,gBAAAC,MAAA,YACE;AAAA,0BAAAA,MAAC,WAAM,OAAOC,QAAO,OACnB;AAAA,4BAAAF,KAAC,UAAK,OAAOE,QAAO,OAAO,6BAAe;AAAA,YAC1C,gBAAAD,MAAC,YAAO,OAAOC,QAAO,OAAQ,GAAG,KAAK,SAAS,gBAAgB,GAC7D;AAAA,8BAAAF,KAAC,YAAO,OAAM,IAAG,iCAAmB;AAAA,cACnC,QAAQ,kBAAkB,IAAI,CAAC,eAC9B,gBAAAA,KAAC,YAA8B,OAAO,WAAW,OAC9C,qBAAW,SADD,WAAW,KAExB,CACD;AAAA,eACH;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,WAAM,OAAOC,QAAO,OACnB;AAAA,4BAAAF,KAAC,UAAK,OAAOE,QAAO,OAAO,8BAAgB;AAAA,YAC3C,gBAAAD,MAAC,YAAO,OAAOC,QAAO,OAAQ,GAAG,KAAK,SAAS,iBAAiB,GAC9D;AAAA,8BAAAF,KAAC,YAAO,OAAM,IAAG,iCAAmB;AAAA,cACnC,QAAQ,kBAAkB,IAAI,CAAC,eAC9B,gBAAAA,KAAC,YAA8B,OAAO,WAAW,OAC9C,qBAAW,SADD,WAAW,KAExB,CACD;AAAA,eACH;AAAA,aACF;AAAA,WACF,IACE;AAAA,QACJ,gBAAAC,MAAC,WAAM,OAAO,EAAE,GAAGC,QAAO,OAAO,YAAY,SAAS,GACpD;AAAA,0BAAAF,KAAC,UAAK,OAAOE,QAAO,OAAO,2BAAa;AAAA,UACxC,gBAAAF,KAAC,cAAS,OAAOE,QAAO,UAAW,GAAG,KAAK,SAAS,cAAc,GAAG;AAAA,WACvE;AAAA,SACF,GACF;AAAA,OACF;AAAA,EAEJ;AACF;;;ACvRA,SAAS,aAAAG,kBAAiB;AAC1B;AAAA,EACE,gBAAAC;AAAA,EAIA;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,OACK;AAiLM,gBAAAC,aAAA;AAjDN,SAAS,qCAKd,MAAqF;AACrF,SAAO,SAAS,sBAAsB,EAAE,OAAO,GAAwB;AACrE,UAAM,OAAO,KAAK;AAClB,UAAM,cAAc,KAAK,MAAM,UAAU,MAAM;AAC/C,UAAM,SAAS,KAAK,MAAM,UAAU;AACpC,UAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,UAAM,OAAOC,SAA4D;AAAA,MACvE,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,IACtB,CAAC;AACD,UAAM,aAAa,cAAc,EAAE,SAAS,KAAK,SAAS,MAAM,SAAS,CAAC;AAC1E,UAAM,eAAe,cAAc,EAAE,SAAS,KAAK,SAAS,MAAM,WAAW,CAAC;AAC9E,UAAM,eAAe,cAAc,EAAE,SAAS,KAAK,SAAS,MAAM,WAAW,CAAC;AAC9E,UAAM,SAASC,UAAS,EAAE,SAAS,KAAK,SAAS,MAAM,SAAS,CAAC,KAAK,CAAC;AACvE,UAAM,WAAWA,UAAS,EAAE,SAAS,KAAK,SAAS,MAAM,WAAW,CAAC,KAAK,CAAC;AAC3E,UAAM,aAAaA,UAAS,EAAE,SAAS,KAAK,SAAS,MAAM,aAAa,CAAC;AACzE,UAAM,cAAcA,UAAS,EAAE,SAAS,KAAK,SAAS,MAAM,cAAc,CAAC;AAE3E,IAAAC,WAAU,MAAM;AACd,UAAI,UAAU,CAAC,YAAY,KAAM;AACjC,WAAK,MAAM,kCAAkC,YAAY,QAAQ,MAAM,KAAK,WAAW,CAAC;AAAA,IAC1F,GAAG,CAAC,YAAY,MAAM,MAAM,MAAM,CAAC;AAEnC,UAAM,wBAAwB,MAAM;AAClC,YAAM,QAAQ,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,WAAW;AACnE,UAAI,CAAC,MAAO;AACZ,YAAM,aAAa,iCAAiC,KAAK;AACzD,iBAAW,QAAQ,UAAU;AAC7B,WAAK,SAAS,gBAAgB,qCAAqC,UAAU,GAAG;AAAA,QAC9E,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,KAAK,aAAa,OAAO,WAAW;AACnD,UAAI;AACF,cAAM,QAAQ,MAAM,KAAK,YAAY,EAAE,IAAI,QAAQ,OAAO,KAAK,WAAW,MAAM,EAAE,CAAC;AACnF,aAAK,cAAc,QAAQ,SAAS,KAAK,OAAO,QAAQ,KAAK,OAAO,OAAO;AAC3E,YAAI,CAAC,OAAQ,MAAK,oBAAoB,KAAK;AAAA,MAC7C,SAAS,OAAO;AACd,aAAK,cAAc,MAAM,KAAK;AAAA,MAChC;AAAA,IACF,CAAC;AAED,QAAI,UAAU,YAAY,WAAW;AACnC,aAAO,gBAAAH,MAAC,SAAI,WAAU,iCAAiC,eAAK,OAAO,SAAQ;AAAA,IAC7E;AAEA,QAAI,UAAU,YAAY,SAAS;AACjC,aAAO,gBAAAA,MAAC,SAAI,WAAU,4BAA4B,eAAK,OAAO,OAAM;AAAA,IACtE;AAEA,WACE,gBAAAA,MAACI,eAAA,EAAc,GAAG,MAChB,0BAAAJ,MAAC,UAAK,UAAoB,YAAU,MAAC,WAAU,aAC7C,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,OAAO,QAAQ,CAAC;AAAA,QACxB,YAAY,KAAK;AAAA,QACjB,cAAc,KAAK;AAAA,QACnB,UAAU,KAAK;AAAA,QACf;AAAA;AAAA,IACF,GACF,GACF;AAAA,EAEJ;AACF;AAEO,SAAS,qCAId,MAAyE;AACzE,SAAO,SAAS,sBAAsB,EAAE,OAAO,GAAwB;AACrE,UAAM,OAAO,KAAK;AAClB,UAAM,cAAc,KAAK,MAAM,UAAU,MAAM;AAC/C,UAAM,SAAS,KAAK,MAAM,UAAU;AACpC,UAAM,OAAO,KAAK,MAAM,QAAQ;AAChC,UAAM,OAAOC,SAAgD;AAAA,MAC3D,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,IACtB,CAAC;AACD,UAAM,cAAc,cAAc,EAAE,SAAS,KAAK,SAAS,MAAM,UAAU,CAAC;AAC5E,UAAM,eAAe,cAAc,EAAE,SAAS,KAAK,SAAS,MAAM,WAAW,CAAC;AAC9E,UAAM,aAAaC,UAAS,EAAE,SAAS,KAAK,SAAS,MAAM,aAAa,CAAC;AACzE,UAAM,cAAcA,UAAS,EAAE,SAAS,KAAK,SAAS,MAAM,cAAc,CAAC;AAE3E,IAAAC,WAAU,MAAM;AACd,UAAI,UAAU,CAAC,YAAY,KAAM;AACjC,WAAK,MAAM,kCAAkC,YAAY,QAAQ,MAAM,KAAK,WAAW,CAAC;AAAA,IAC1F,GAAG,CAAC,YAAY,MAAM,MAAM,MAAM,CAAC;AAEnC,UAAM,yBAAyB,MAAM;AACnC,YAAM,QAAQ,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,WAAW;AACnE,UAAI,CAAC,MAAO;AACZ,kBAAY,QAAQ,kCAAkC,KAAK,CAAC;AAAA,IAC9D;AAEA,UAAM,WAAW,KAAK,aAAa,OAAO,WAAW;AACnD,UAAI;AACF,cAAM,QAAQ,MAAM,KAAK,YAAY,EAAE,IAAI,QAAQ,OAAO,KAAK,WAAW,MAAM,EAAE,CAAC;AACnF,aAAK,cAAc,QAAQ,SAAS,KAAK,OAAO,QAAQ,KAAK,OAAO,OAAO;AAC3E,YAAI,CAAC,OAAQ,MAAK,oBAAoB,KAAK;AAAA,MAC7C,SAAS,OAAO;AACd,aAAK,cAAc,MAAM,KAAK;AAAA,MAChC;AAAA,IACF,CAAC;AAED,QAAI,UAAU,YAAY,WAAW;AACnC,aAAO,gBAAAH,MAAC,SAAI,WAAU,iCAAiC,eAAK,OAAO,SAAQ;AAAA,IAC7E;AAEA,QAAI,UAAU,YAAY,SAAS;AACjC,aAAO,gBAAAA,MAAC,SAAI,WAAU,4BAA4B,eAAK,OAAO,OAAM;AAAA,IACtE;AAEA,WACE,gBAAAA,MAACI,eAAA,EAAc,GAAG,MAChB,0BAAAJ,MAAC,UAAK,UAAoB,YAAU,MAAC,WAAU,aAC7C,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,OAAO,QAAQ,CAAC;AAAA,QACxB,aAAa,KAAK;AAAA,QAClB,cAAc,KAAK;AAAA,QACnB,UAAU,KAAK;AAAA,QACf;AAAA;AAAA,IACF,GACF,GACF;AAAA,EAEJ;AACF;;;AC4GQ,SACE,OAAAK,OADF,QAAAC,cAAA;AA9SR,IAAM,0BAAkD;AAAA,EACtD,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,EAC/B,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,EACnC,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,EACvC,EAAE,OAAO,QAAQ,OAAO,OAAO;AACjC;AAEA,IAAM,iCAAyD;AAAA,EAC7D,EAAE,OAAO,gBAAgB,OAAO,gBAAgB;AAAA,EAChD,EAAE,OAAO,eAAe,OAAO,eAAe;AAAA,EAC9C,EAAE,OAAO,gBAAgB,OAAO,gBAAgB;AAAA,EAChD,EAAE,OAAO,eAAe,OAAO,eAAe;AAChD;AAEA,IAAM,iCAAyD;AAAA,EAC7D,EAAE,OAAO,cAAc,OAAO,cAAc;AAAA,EAC5C,EAAE,OAAO,aAAa,OAAO,aAAa;AAAA,EAC1C,EAAE,OAAO,gBAAgB,OAAO,gBAAgB;AAAA,EAChD,EAAE,OAAO,eAAe,OAAO,eAAe;AAChD;AAEA,IAAM,kCAA0D;AAAA,EAC9D,EAAE,OAAO,YAAY,OAAO,YAAY;AAAA,EACxC,EAAE,OAAO,UAAU,OAAO,UAAU;AACtC;AAEA,IAAM,2BAAmD,CAAC;AAE1D,SAAS,eAAe,OAA0B;AAChD,QAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,SAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC;AAC3C;AAEA,SAAS,SAAS,MAAc,MAAc;AAC5C,SAAO,GAAG,KAAK,QAAQ,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,OAAO,EAAE,CAAC;AAC9D;AAEA,SAAS,aAAa,OAAgE;AACpF,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM,UAAU;AAAA,EAC1B;AACF;AAEA,SAAS,OAAO,QAA4B;AAC1C,SAAO,OAAO,OAAO,OAAO;AAC9B;AAEA,IAAM,aAAa;AAAA,EACjB,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,KAAK;AAAA,EACP;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,gBAAgB;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AACF;AAEO,SAAS,wBAA6D;AAAA,EAC3E;AAAA,EACA,SAAS,CAAC;AAAA,EACV,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,oBAAoB;AACtB,GAAgC;AAC9B,QAAM,gBAAgB,OAAO,iBAAiB;AAC9C,QAAM,kBAAkB,OAAO,mBAAmB;AAElD,QAAM,YAAY,OAAO,aAAa,SAAS,eAAe,OAAO;AACrE,QAAM,cAAc,OAAO,eAAe,SAAS,WAAW,KAAK;AACnE,QAAM,eACJ,OAAO,iBAAiB,CAAC,OAAe,GAAG,SAAS,WAAW,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC;AACrG,QAAM,kBACJ,OAAO,oBACN,CAAC,OAAe,GAAG,SAAS,iBAAiB,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC;AAEpF,QAAM,YAAY,OAAO,aAAa,SAAS,eAAe,OAAO;AACrE,QAAM,cAAc,OAAO,eAAe,SAAS,WAAW,KAAK;AACnE,QAAM,eACJ,OAAO,iBAAiB,CAAC,OAAe,GAAG,SAAS,WAAW,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC;AACrG,QAAM,kBACJ,OAAO,oBACN,CAAC,OAAe,GAAG,SAAS,iBAAiB,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC;AAEpF,QAAM,YAAY,OAAO,aAAa,SAAS,eAAe,OAAO;AACrE,QAAM,cAAc,OAAO,eAAe,SAAS,WAAW,KAAK;AACnE,QAAM,eACJ,OAAO,iBAAiB,CAAC,OAAe,GAAG,SAAS,WAAW,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC;AACrG,QAAM,kBACJ,OAAO,oBACN,CAAC,OAAe,GAAG,SAAS,iBAAiB,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC;AAEpF,QAAM,gBAAiB,iBAAiB,CAAC,GAAG,SAAS;AACrD,QAAM,mBAAoB,wBAAwB,CAAC,GAAG,SAAS;AAC/D,QAAM,mBAAoB,wBAAwB,CAAC,GAAG,SAAS;AAE/D,QAAM,aAAmD;AAAA,IACvD,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,UAAU,CAAC;AAAA,EACb;AAEA,QAAM,kBAA2D;AAAA,IAC/D,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,QAAQ,CAAC,UAAU;AAAA,IACnB,cAAc,qCAAqC,CAAC,UAAU,CAAC;AAAA,IAC/D,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,IACX,SAAS;AAAA,EACX;AAEA,QAAM,mBAAuD;AAAA,IAC3D,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAEA,QAAM,cAA6C;AAAA,IACjD,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AAEA,QAAM,kBAAmD;AAAA,IACvD,OAAO;AAAA,IACP,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SAAS,CAAC,WAAW;AAAA,IACrB,UAAU,CAAC;AAAA,IACX,SAAS;AAAA,EACX;AAEA,QAAM,mBAAuD;AAAA,IAC3D,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AAEA,QAAM,iBAAiB,qCAKrB;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,cAAc;AAAA,IACd,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA,MACL,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,IACjB;AAAA,IACA,YAAY,CAAC,WAAW,iCAAiC,MAAM;AAAA,IAC/D,qBAAqB,CAAC,WAAW,OAAO,SAAS,OAAO,aAAa,OAAO,EAAE,CAAC;AAAA,IAC/E,eAAe;AAAA,MACb,SAAS,CAAC,YAAY,gBAAgB,OAAO;AAAA,MAC7C,OAAO,CAAC,UAAU;AAChB,YAAI,YAAa,aAAY,KAAK;AAAA,YAC7B,OAAM;AAAA,MACb;AAAA,IACF;AAAA,IACA,MAAM,mCAAmC;AAAA,MACvC,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,iBAAiB,qCAIrB;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,cAAc;AAAA,IACd,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA,MACL,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,IACjB;AAAA,IACA,YAAY,CAAC,WAAW,iCAAiC,MAAM;AAAA,IAC/D,qBAAqB,CAAC,WAAW,OAAO,SAAS,OAAO,aAAa,OAAO,EAAE,CAAC;AAAA,IAC/E,eAAe;AAAA,MACb,SAAS,CAAC,YAAY,gBAAgB,OAAO;AAAA,MAC7C,OAAO,CAAC,UAAU;AAChB,YAAI,YAAa,aAAY,KAAK;AAAA,YAC7B,OAAM;AAAA,MACb;AAAA,IACF;AAAA,IACA,MAAM,mCAAmC;AAAA,MACvC,UAAU;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,iBAAiB,mCAAsC;AAAA,IAC3D;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,SAAS,uBAAuB;AACpD,UAAM,QAAQ;AAAA,MACZ;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAEA,WACE,gBAAAA,OAAC,aAAQ,OAAO,WAAW,MACzB;AAAA,sBAAAA,OAAC,SACC;AAAA,wBAAAD,MAAC,QAAG,OAAO,WAAW,aAAa,qBAAO;AAAA,QAC1C,gBAAAA,MAAC,OAAE,OAAO,WAAW,aAAa,qDAAuC;AAAA,SAC3E;AAAA,MACA,gBAAAA,MAAC,SAAI,OAAO,WAAW,MACpB,gBAAM,IAAI,CAAC,SACV,gBAAAC,OAAC,OAAkB,MAAM,KAAK,MAAM,OAAO,WAAW,MACpD;AAAA,wBAAAD,MAAC,QAAG,OAAO,WAAW,WAAY,eAAK,OAAM;AAAA,QAC7C,gBAAAA,MAAC,OAAE,OAAO,WAAW,aAAc,eAAK,aAAY;AAAA,WAF9C,KAAK,IAGb,CACD,GACH;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,iBAAiB,2CAGrB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,eAAe,CAAC,WAAW,UAAU,OAAO,KAAK;AAAA,MACjD,iBAAiB,MAAM;AAAA,MACvB,uBAAuB,CAAC,WAAW,GAAG,OAAO,KAAK;AAAA,IACpD;AAAA,IACA,YAAY;AAAA,IACZ,UAAU,CAAC,WAAW,aAAa,OAAO,EAAE;AAAA,IAC5C,aAAa,CAAC,WAAW,gBAAgB,OAAO,EAAE;AAAA,IAClD,WAAW;AAAA,IACX,YAAY,CAAC,UAAU,aAAa,KAAK;AAAA,IACzC,OAAO;AAAA,MACL,aAAa,CAAC,UACZ,MAAM,gBAAgB,KAAK;AAAA,MAG7B,WAAW,MAAM;AAAA,MACjB,cAAc,MAAM;AAAA,IACtB;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,2CAGrB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,eAAe,CAAC,WAAW,UAAU,OAAO,KAAK;AAAA,MACjD,iBAAiB,MAAM;AAAA,MACvB,uBAAuB,CAAC,WAAW,GAAG,OAAO,KAAK;AAAA,IACpD;AAAA,IACA,YAAY;AAAA,IACZ,UAAU,CAAC,WAAW,aAAa,OAAO,EAAE;AAAA,IAC5C,aAAa,CAAC,WAAW,gBAAgB,OAAO,EAAE;AAAA,IAClD,WAAW;AAAA,IACX,YAAY,CAAC,UAAU,aAAa,KAAK;AAAA,IACzC,OAAO;AAAA,MACL,aAAa,CAAC,UACZ,MAAM,gBAAgB,KAAK;AAAA,MAG7B,WAAW,MAAM;AAAA,MACjB,cAAc,MAAM;AAAA,IACtB;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,2CAGrB;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,eAAe,CAAC,WAAW,UAAU,OAAO,KAAK;AAAA,MACjD,iBAAiB,MAAM;AAAA,MACvB,uBAAuB,CAAC,WAAW,GAAG,OAAO,KAAK;AAAA,IACpD;AAAA,IACA,YAAY;AAAA,IACZ,UAAU,CAAC,WAAW,aAAa,OAAO,EAAE;AAAA,IAC5C,aAAa,CAAC,WAAW,gBAAgB,OAAO,EAAE;AAAA,IAClD,WAAW;AAAA,IACX,YAAY,CAAC,UAAU,aAAa,KAAK;AAAA,IACzC,OAAO;AAAA,MACL,aAAa,CAAC,UACZ,MAAM,gBAAgB,KAAK;AAAA,MAG7B,WAAW,MAAM;AAAA,MACjB,cAAc,MAAM;AAAA,IACtB;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,kBAAkB,SAAS,0BAA0B;AACnD,aAAO,gBAAAA,MAAC,kBAAe;AAAA,IACzB;AAAA,IACA,mBAAmB,SAAS,yBAAyB,EAAE,OAAO,GAAwB;AACpF,aAAO,gBAAAA,MAAC,kBAAe,QAAgB;AAAA,IACzC;AAAA,IACA;AAAA,IACA,kBAAkB,SAAS,0BAA0B;AACnD,aAAO,gBAAAA,MAAC,kBAAe;AAAA,IACzB;AAAA,IACA,mBAAmB,SAAS,yBAAyB,EAAE,OAAO,GAAwB;AACpF,aAAO,gBAAAA,MAAC,kBAAe,QAAgB;AAAA,IACzC;AAAA,IACA;AAAA,IACA,kBAAkB,SAAS,0BAA0B;AACnD,aAAO,gBAAAA,MAAC,kBAAe;AAAA,IACzB;AAAA,IACA,mBAAmB,SAAS,yBAAyB,EAAE,OAAO,GAAwB;AACpF,aAAO,gBAAAA,MAAC,kBAAe,QAAgB;AAAA,IACzC;AAAA,IACA,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACpiBA,SAAS,eAAAE,cAAa,WAAAC,UAAS,YAAAC,iBAAgB;AA8KzC,SAUkB,OAAAC,OAVlB,QAAAC,cAAA;AAtCC,SAAS,oCAMd,MAAuF;AACvF,SAAO,SAAS,uBAAuB;AACrC,UAAM,CAAC,eAAe,gBAAgB,IAAIF,UAAyB,IAAI;AACvE,UAAM,QAAQ,KAAK,kBAAkB,EAAE,UAAU,GAAG,CAAC;AACrD,UAAM,QAAQ,KAAK,MAAM,YAAY,MAAM,KAAK;AAChD,UAAM,SAAS,KAAK,MAAM,UAAU;AACpC,UAAM,YAAY,KAAK,MAAM,aAAa;AAE1C,UAAM,UAAUD;AAAA,MACd,MACE,KAAK,aAAa;AAAA,QAChB,QAAQ,KAAK;AAAA,QACb,aAAa,OAAO,WAAW;AAC7B,gBAAM,QAAQ,MAAM,KAAK,sBAAsB,MAAM;AACrD,cAAI,CAAC,MAAO;AACZ,gBAAM,UAAU,YAAY,EAAE,IAAI,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;AAAA,QACjE;AAAA,QACA,UAAU;AAAA,QACV,aAAa,KAAK;AAAA,MACpB,CAAC;AAAA,MACH,CAAC,SAAS;AAAA,IACZ;AAEA,UAAM,aAAa,KAAK,aAAa;AAAA,MACnC;AAAA,MACA,MAAM,MAAM,MAAM,SAAS,CAAC;AAAA,MAC5B,UAAU,MAAM,MAAM,SAAS;AAAA,MAC/B;AAAA,MACA,UAAU,CAAC,QAAQ,IAAI;AAAA,IACzB,CAAC;AAED,WACE,gBAAAG,OAAC,SAAI,WAAU,aACb;AAAA,sBAAAD;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,OAAO,KAAK,OAAO;AAAA,UACnB,aAAa,KAAK,OAAO;AAAA,UACzB;AAAA,UACA,WAAW,MAAM;AAAA,UACjB,mBAAmB,KAAK,OAAO;AAAA,UAC/B,YAAY,KAAK,OAAO;AAAA,UACxB,kBAAkB,KAAK,OAAO;AAAA,UAC9B,YAAY,KAAK;AAAA,UACjB,cAAc,gBAAAA,MAAC,KAAK,WAAL,EAAe,MAAM,KAAK,YAAY,OAAO,KAAK,OAAO,UAAU;AAAA;AAAA,MACpF;AAAA,MAEA,gBAAAA;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,QAAQ;AAAA,UACR,OAAO,KAAK,OAAO;AAAA,UACnB,aAAa,KAAK,OAAO,kBAAkB,aAAa;AAAA,UACxD,YAAY,OAAO;AAAA,UACnB,SAAS,MAAM,iBAAiB,IAAI;AAAA,UACpC,WAAW,YAAY;AACrB,gBAAI,CAAC,cAAe;AACpB,kBAAM,OAAO,YAAY,cAAc,EAAE;AACzC,6BAAiB,IAAI;AAAA,UACvB;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;AAEO,SAAS,0CAMd,MAA6F;AAC7F,SAAO,SAAS,6BAA6B;AAC3C,UAAM,CAAC,SAAS,UAAU,IAAID,UAAyB,IAAI;AAC3D,UAAM,CAAC,cAAc,aAAa,IAAIA,UAAS,KAAK;AACpD,UAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAyB,IAAI;AACvE,UAAM,QAAQ,KAAK,kBAAkB,EAAE,UAAU,GAAG,CAAC;AACrD,UAAM,QAAQ,KAAK,MAAM,YAAY,MAAM,KAAK;AAChD,UAAM,SAAS,KAAK,MAAM,UAAU;AACpC,UAAM,YAAY,KAAK,MAAM,aAAa;AAE1C,UAAM,aAAaF,aAAY,CAAC,WAA2B;AACzD,iBAAW,MAAM;AACjB,oBAAc,IAAI;AAAA,IACpB,GAAG,CAAC,CAAC;AAEL,UAAM,UAAUC;AAAA,MACd,MACE,KAAK,aAAa;AAAA,QAChB,QAAQ,CAAC,WAAW,WAAW,MAAM;AAAA,QACrC,aAAa,OAAO,WAAW;AAC7B,gBAAM,QAAQ,MAAM,KAAK,sBAAsB,MAAM;AACrD,cAAI,CAAC,MAAO;AACZ,gBAAM,UAAU,YAAY,EAAE,IAAI,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;AAAA,QACjE;AAAA,QACA,UAAU;AAAA,QACV,aAAa,KAAK;AAAA,MACpB,CAAC;AAAA,MACH,CAAC,WAAW,UAAU;AAAA,IACxB;AAEA,UAAM,aAAa,KAAK,aAAa;AAAA,MACnC;AAAA,MACA,MAAM,MAAM,MAAM,SAAS,CAAC;AAAA,MAC5B,UAAU,MAAM,MAAM,SAAS;AAAA,MAC/B;AAAA,MACA,UAAU,CAAC,QAAQ,IAAI;AAAA,IACzB,CAAC;AAED,WACE,gBAAAG,OAAC,SAAI,WAAU,aACb;AAAA,sBAAAD;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,OAAO,KAAK,OAAO;AAAA,UACnB,aAAa,KAAK,OAAO;AAAA,UACzB;AAAA,UACA,WAAW,MAAM;AAAA,UACjB,mBAAmB,KAAK,OAAO;AAAA,UAC/B,YAAY,KAAK,OAAO;AAAA,UACxB,kBAAkB,KAAK,OAAO;AAAA,UAC9B,YAAY;AAAA,UACZ,cACE,gBAAAA,MAAC,KAAK,WAAL,EAAe,OAAO,KAAK,OAAO,UAAU,OAAO,MAAM,WAAW,IAAI,GAAG;AAAA;AAAA,MAEhF;AAAA,MAEA,gBAAAA;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA,SAAS,MAAM,cAAc,KAAK;AAAA;AAAA,MACpC;AAAA,MAEA,gBAAAA;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,QAAQ;AAAA,UACR,OAAO,KAAK,OAAO;AAAA,UACnB,aAAa,KAAK,OAAO,kBAAkB,aAAa;AAAA,UACxD,YAAY,OAAO;AAAA,UACnB,SAAS,MAAM,iBAAiB,IAAI;AAAA,UACpC,WAAW,YAAY;AACrB,gBAAI,CAAC,cAAe;AACpB,kBAAM,OAAO,YAAY,cAAc,EAAE;AACzC,6BAAiB,IAAI;AAAA,UACvB;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;;;AC7RA,SAAS,aAAAE,kBAAiB;AAC1B,SAAS,gBAAAC,eAAiD,WAAAC,gBAAe;AAiH/D,gBAAAC,aAAA;AAxCH,SAAS,iCAKd,MAAkE;AAClE,SAAO,SAAS,kBAAkB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAwD;AACtD,UAAM,OAAOC,SAAiC;AAAA,MAC5C,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,IACtB,CAAC;AAED,IAAAC,WAAU,MAAM;AACd,UAAI,CAAC,KAAM;AACX,WAAK;AAAA,QACH,kCAAkC,SAAS,KAAK,aAAa,KAAK,iBAAiB;AAAA,MACrF;AAAA,IACF,GAAG,CAAC,SAAS,MAAM,IAAI,CAAC;AAExB,UAAM,WAAW,KAAK,aAAa,OAAO,WAAW;AACnD,UAAI;AACF,cAAM,OAAO,EAAE,IAAI,SAAS,IAAI,OAAO,KAAK,WAAW,MAAM,EAAE,CAAC;AAChE,gBAAQ;AACR,aAAK,cAAc,QAAQ,UAAU,KAAK,OAAO,QAAQ,KAAK,OAAO,OAAO;AAAA,MAC9E,SAAS,OAAO;AACd,aAAK,cAAc,MAAM,KAAK;AAAA,MAChC;AAAA,IACF,CAAC;AAED,WACE,gBAAAF,MAAC,KAAK,OAAL,EAAW,MAAY,SAAkB,SACxC,0BAAAA,MAACG,eAAA,EAAc,GAAG,MAChB,0BAAAH,MAAC,UAAK,UAAoB,YAAU,MACjC,eAAK,KAAK;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB,KAAK;AAAA,MACxB,WAAW,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,IACF,CAAC,GACH,GACF,GACF;AAAA,EAEJ;AACF;;;ACnIA,SAAS,WAAAI,gBAAe;AAExB,SAAS,YAAAC,iBAAgB;AAUlB,IAAM,gCAAgC;AAatC,SAAS,2BAA2B,MAAc,SAAqB;AAC5E,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,IAAI,CAAC;AAC5C;AAEO,SAAS,2BAA8B,OAAY,MAAc,IAAY;AAClF,MAAI,OAAO,KAAK,QAAQ,MAAM,UAAU,KAAK,KAAK,MAAM,MAAM,OAAQ,QAAO;AAC7E,QAAM,OAAO,CAAC,GAAG,KAAK;AACtB,QAAM,OAAO,KAAK,IAAI;AACtB,OAAK,IAAI,IAAI,KAAK,EAAE;AACpB,OAAK,EAAE,IAAI;AACX,SAAO;AACT;AAEO,SAAS,6BAA6B,QAA8C;AACzF,MAAI,QAAQ,OAAO,SAAS;AAC5B,MAAI,KAAK,QAAQ,KAAK;AACtB,QAAM,MAAM,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC;AACnD,SAAO,IAAI,IAAI,EAAE,GAAG;AAClB,aAAS;AACT,SAAK,QAAQ,KAAK;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,sCAAsC,SAAuC;AAC3F,SAAO,KAAK,UAAU,OAAO;AAC/B;AAEO,SAAS,kCAAkC,KAAa;AAC7D,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,QAAI,MAAM,SAAS,aAAa,OAAO,MAAM,QAAQ,YAAY,MAAM,KAAK;AAC1E,aAAO,EAAE,MAAM,MAAM,MAAM,KAAK,MAAM,IAAI;AAAA,IAC5C;AACA,QACE,MAAM,SAAS,YACf,OAAO,MAAM,QAAQ,YACrB,MAAM,OACN,OAAO,UAAU,MAAM,UAAU,KACjC,OAAO,UAAU,MAAM,UAAU,MAChC,MAAM,cAAc,OAAO,MAC3B,MAAM,cAAc,OAAO,GAC5B;AACA,aAAO;AAAA,QACL,MAAM,MAAM;AAAA,QACZ,YAAY,MAAM;AAAA,QAClB,YAAY,MAAM;AAAA,QAClB,KAAK,MAAM;AAAA,MACb;AAAA,IACF;AACA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAWO,SAAS,2BAGd,EAAE,MAAM,QAAQ,WAAW,CAAC,EAAE,GAA8D;AAC5F,QAAM,eAAeC,UAAS,EAAE,SAAS,KAAK,SAAS,MAAM,eAAe,CAAC,KAAK,CAAC;AACnF,QAAM,cAAcC;AAAA,IAClB,MAAM;AAAA,MACJ,GAAG,OAAO,IAAI,CAAC,WAAW;AAAA,QACxB,KAAK,MAAM;AAAA,QACX,MAAM;AAAA,QACN,MAAM,MAAM;AAAA,QACZ,MAAM,6BAA6B,KAAK;AAAA,MAC1C,EAAE;AAAA,MACF,GAAG,SAAS,IAAI,CAAC,aAAa;AAAA,QAC5B,KAAK,QAAQ;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR,EAAE;AAAA,IACJ;AAAA,IACA,CAAC,QAAQ,QAAQ;AAAA,EACnB;AACA,QAAM,eAAeA;AAAA,IACnB,MAAM,IAAI,IAAI,aAAa,QAAQ,CAAC,UAAU,MAAM,OAAO,IAAI,CAAC,UAAU,MAAM,GAAG,CAAC,CAAC;AAAA,IACrF,CAAC,YAAY;AAAA,EACf;AACA,QAAM,kBAAkBA;AAAA,IACtB,MAAM,YAAY,OAAO,CAAC,SAAS,CAAC,aAAa,IAAI,KAAK,GAAG,CAAC;AAAA,IAC9D,CAAC,cAAc,WAAW;AAAA,EAC5B;AAEA,QAAM,YAAY,CAAC,WAAiD;AAClE,SAAK,SAAS,gBAAgB,QAAQ,EAAE,aAAa,MAAM,gBAAgB,KAAK,CAAC;AAAA,EACnF;AAEA,QAAM,cAAc,CAAC,YAAoB,UAA8C;AACrF,cAAU,aAAa,IAAI,CAAC,MAAM,UAAW,UAAU,aAAa,QAAQ,IAAK,CAAC;AAAA,EACpF;AAEA,QAAM,oBAAoB,CACxB,YACA,YAGG;AACH,UAAM,QAAQ,aAAa,UAAU;AACrC,QAAI,CAAC,MAAO;AACZ,gBAAY,YAAY,EAAE,GAAG,OAAO,QAAQ,QAAQ,MAAM,MAAM,EAAE,CAAC;AAAA,EACrE;AAEA,QAAM,WAAW,MAAM;AACrB,cAAU;AAAA,MACR,GAAG;AAAA,MACH;AAAA,QACE,IAAI,6BAA6B,YAAY;AAAA,QAC7C,OAAO,SAAS,aAAa,SAAS,CAAC;AAAA,QACvC,SAAS;AAAA,QACT,QAAQ,CAAC;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,CAAC,YAAoB;AAC7C,QAAI,aAAa,IAAI,OAAO,EAAG;AAC/B,UAAM,OAAO,YAAY,KAAK,CAAC,cAAc,UAAU,QAAQ,OAAO;AACtE,QAAI,CAAC,KAAM;AACX,cAAU;AAAA,MACR,GAAG;AAAA,MACH;AAAA,QACE,IAAI,6BAA6B,YAAY;AAAA,QAC7C,OAAO,aAAa,WAAW,IAAI,yCAAW,SAAS,aAAa,SAAS,CAAC;AAAA,QAC9E,SAAS;AAAA,QACT,QAAQ,CAAC,EAAE,KAAK,SAAS,MAAM,KAAK,KAAK,CAAC;AAAA,MAC5C;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiB,CAAC,YAAoB,SAAiB,aAAsB;AACjF,QAAI,aAAa,IAAI,OAAO,EAAG;AAC/B,UAAM,OAAO,YAAY,KAAK,CAAC,cAAc,UAAU,QAAQ,OAAO;AACtE,UAAM,QAAQ,aAAa,UAAU;AACrC,QAAI,CAAC,QAAQ,CAAC,MAAO;AACrB,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,MAAM,2BAA2B,KAAK,MAAM,MAAM,OAAO;AAAA,IAC3D;AACA,sBAAkB,YAAY,CAAC,gBAAgB;AAC7C,YAAM,OAAO,CAAC,GAAG,WAAW;AAC5B,WAAK,OAAO,YAAY,KAAK,QAAQ,GAAG,SAAS;AACjD,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,CACtB,SACA,kBACA,qBACG;AACH,UAAM,cAAc,aAAa,QAAQ,UAAU;AACnD,UAAM,cAAc,aAAa,gBAAgB;AACjD,QAAI,CAAC,eAAe,CAAC,YAAa;AAClC,UAAM,cAAc,YAAY,OAAO,QAAQ,UAAU;AACzD,QAAI,CAAC,YAAa;AAElB,UAAM,aAAa,aAAa,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,QAAQ,CAAC,GAAG,MAAM,MAAM,EAAE,EAAE;AACxF,eAAW,QAAQ,UAAU,EAAE,OAAO,OAAO,QAAQ,YAAY,CAAC;AAElE,QAAI,WAAW,oBAAoB,WAAW,gBAAgB,EAAE,OAAO;AACvE,QAAI,QAAQ,eAAe,oBAAoB,QAAQ,aAAa,UAAU;AAC5E,kBAAY;AAAA,IACd;AAEA,eAAW,gBAAgB,EAAE,OAAO,OAAO,UAAU,GAAG;AAAA,MACtD,GAAG;AAAA,MACH,MAAM,2BAA2B,YAAY,MAAM,YAAY,OAAO;AAAA,IACxE,CAAC;AACD,cAAU,UAAU;AAAA,EACtB;AAEA,QAAM,mBAAmB,CACvB,SACA,kBACA,qBACG;AACH,QAAI,CAAC,QAAS;AACd,QAAI,QAAQ,SAAS,WAAW;AAC9B,qBAAe,kBAAkB,QAAQ,KAAK,gBAAgB;AAC9D;AAAA,IACF;AACA,oBAAgB,SAAS,kBAAkB,gBAAgB;AAAA,EAC7D;AAEA,QAAM,qBAAqB,MAAM,UAAU,qCAAqC,QAAQ,QAAQ,CAAC;AAEjG,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC9OA,SAAS,WAAAC,gBAAe;AACxB,SAAS,gBAAAC,eAAc,WAAAC,gBAAe;AAoF9B,gBAAAC,OAYE,QAAAC,cAZF;AA3BD,SAAS,2BACd,MACA;AACA,SAAO,SAAS,YAAY,EAAE,OAAO,GAAqB;AACxD,UAAM,QAAQ,KAAK,MAAM,sBAAsB,MAAM;AACrD,UAAM,OAAO,KAAK,MAAM,+BAA+B,MAAM;AAC7D,UAAM,aAAaC;AAAA,MACjB,MAAO,MAAM,OAAO,+BAA+B,MAAM,KAAK,MAAM,IAAI;AAAA,MACxE,CAAC,MAAM,IAAI;AAAA,IACb;AACA,UAAM,OAAOC,SAAkC;AAAA,MAC7C,eAAe,+BAA+B,MAAM,MAAM,MAAM;AAAA,MAChE,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,WAAW,KAAK,aAAa,OAAO,WAAW;AACnD,UAAI;AACF,cAAM,KAAK,YAAY,MAA0C;AACjE,aAAK,MAAM,+BAA+B,MAAM,MAAM,MAAM,CAAC;AAC7D,aAAK,cAAc,QAAQ,+EAAmB;AAAA,MAChD,SAAS,OAAO;AACd,aAAK,cAAc,MAAM,KAAK,cAAc,aAAa,OAAO,kIAAyB,CAAC;AAAA,MAC5F;AAAA,IACF,CAAC;AAED,QAAI,MAAM,SAAS;AACjB,aACE,gBAAAH;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,OAAM;AAAA,UACN,aAAa,OAAI,MAAM;AAAA;AAAA,MACzB;AAAA,IAEJ;AAEA,QAAI,CAAC,MAAM,KAAM,QAAO;AAExB,WACE,gBAAAA,MAAC,KAAK,WAAL,EAAe,OAAO,MAAM,KAAK,OAChC,0BAAAA,MAACI,eAAA,EAAc,GAAG,MAChB,0BAAAH,OAAC,UAAK,UAAoB,YAAU,MAAC,WAAU,aAC7C;AAAA,sBAAAD,MAAC,KAAK,YAAL,EAAgB,QAAgB,QAAQ,MAAM,KAAK,QAAQ,YAAW,UAAS;AAAA,MAChF,gBAAAA,MAAC,KAAK,cAAL,EAAkB,UAAU,KAAK,WAAW;AAAA,OAC/C,GACF,GACF;AAAA,EAEJ;AACF;;;ACzGA,SAAS,WAAAK,gBAAe;AAgFhB,gBAAAC,aAAA;AAtBD,SAAS,2BAKd,MAAgE;AAChE,SAAO,SAAS,YAAY,EAAE,OAAO,GAAqB;AACxD,UAAM,QAAQ,KAAK,MAAM,sBAAsB,MAAM;AACrD,UAAM,QAAQ,KAAK,kBAAkB,EAAE,UAAU,GAAG,CAAC;AACrD,UAAM,eAAe,KAAK,MAAM,6BAA6B,QAAQ,MAAM,KAAK;AAChF,UAAM,UAAUD,SAAQ,MAAO,MAAM,OAAO,KAAK,aAAa,MAAM,IAAI,IAAI,CAAC,GAAI,CAAC,MAAM,IAAI,CAAC;AAC7F,UAAM,UAAU,aAAa,MAAM,SAAS,CAAC;AAC7C,UAAM,aAAa,KAAK,aAAa;AAAA,MACnC;AAAA,MACA,MAAM;AAAA,MACN,UAAU,aAAa,MAAM,SAAS;AAAA,MACtC;AAAA,MACA,UAAU,CAAC,QAAQ,IAAI;AAAA,IACzB,CAAC;AAED,QAAI,MAAM,SAAS;AACjB,aACE,gBAAAC;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,OAAM;AAAA,UACN,aAAa,OAAI,MAAM;AAAA;AAAA,MACzB;AAAA,IAEJ;AAEA,WACE,gBAAAA;AAAA,MAAC,KAAK;AAAA,MAAL;AAAA,QACC,OAAO,MAAM,MAAM,SAAS;AAAA,QAC5B,aAAa,MAAM,MAAM,eAAe,iBAAiB,MAAM;AAAA,QAC/D;AAAA,QACA,WAAW,MAAM,aAAa,aAAa;AAAA,QAC3C,mBAAkB;AAAA,QAClB,YAAW;AAAA,QACX,kBAAiB;AAAA;AAAA,IACnB;AAAA,EAEJ;AACF;;;ACnGA,SAAS,WAAAC,WAAS,YAAAC,iBAAgB;AAkL1B,gBAAAC,OAQF,QAAAC,cARE;AAtGR,IAAM,+BACJ;AAEF,SAAS,WAAW,QAA0C;AAC5D,SACE,OAAO,WAAW,YAClB,WAAW,QACX,aAAa,UACb,OAAO,OAAO,YAAY;AAE9B;AAEO,SAAS,gCAAgC,OAAqC;AACnF,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,MAAM,iBAAkB,QAAO;AACnC,SAAO,CAAC,WAAW,MAAM,MAAM,KAAK,CAAC,MAAM,OAAO,QAAQ,4BAA4B;AACxF;AAwCO,SAAS,2BAKd,MAAgE;AAChE,SAAO,SAAS,YAAY,EAAE,OAAO,GAAqB;AACxD,UAAM,CAAC,SAAS,UAAU,IAAIF,UAAuC,IAAI;AACzE,UAAM,CAAC,cAAc,aAAa,IAAIA,UAAS,KAAK;AACpD,UAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAuC,IAAI;AAErF,UAAM,YAAY,KAAK,MAAM,sBAAsB,MAAM;AACzD,UAAM,QAAQ,KAAK,kBAAkB,EAAE,UAAU,GAAG,CAAC;AACrD,UAAM,eAAe,KAAK,MAAM,sBAAsB,QAAQ,MAAM,KAAK;AACzE,UAAM,OAAO,KAAK,MAAM,wBAAwB,MAAM;AACtD,UAAM,SAAS,KAAK,MAAM,0BAA0B,MAAM;AAC1D,UAAM,OAAO,UAAU;AAEvB,UAAM,UAAUD;AAAA,MACd,MACE,OACI,KAAK,aAAa,MAAM;AAAA,QACtB,QAAQ,CAAC,OAAO,UAAU;AACxB,iBAAO,kBAAkB;AACzB,qBAAW,KAAK;AAChB,wBAAc,IAAI;AAAA,QACpB;AAAA,QACA,UAAU,CAAC,OAAO,UAAU;AAC1B,iBAAO,kBAAkB;AACzB,2BAAiB,KAAK;AAAA,QACxB;AAAA,MACF,CAAC,IACD,CAAC;AAAA,MACP,CAAC,IAAI;AAAA,IACP;AAEA,UAAM,aAAa,KAAK,aAAa;AAAA,MACnC;AAAA,MACA,MAAO,aAAa,MAAM,SAAS,CAAC;AAAA,MACpC,UAAU,aAAa,MAAM,SAAS;AAAA,MACtC;AAAA,MACA,UAAU,CAAC,QAAQ,IAAI;AAAA,IACzB,CAAC;AAED,QAAI,UAAU,SAAS;AACrB,aACE,gBAAAE;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,OAAM;AAAA,UACN,aAAa,OAAI,MAAM;AAAA;AAAA,MACzB;AAAA,IAEJ;AAEA,WACE,gBAAAC,OAAC,SAAI,WAAU,aACb;AAAA,sBAAAD;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,OAAO,MAAM,SAAS;AAAA,UACtB,aAAa,MAAM,eAAe,iBAAiB,MAAM;AAAA,UACzD;AAAA,UACA,WAAW,UAAU,aAAa,aAAa;AAAA,UAC/C,mBAAkB;AAAA,UAClB,YAAW;AAAA,UACX,kBAAiB;AAAA,UACjB,YAAY,CAAC,OAAO,UAAU;AAC5B,gBAAI,CAAC,gCAAgC,KAAK,EAAG;AAC7C,uBAAW,KAA8B;AACzC,0BAAc,IAAI;AAAA,UACpB;AAAA,UACA,cACE,gBAAAA;AAAA,YAAC,KAAK;AAAA,YAAL;AAAA,cACC,UAAU,CAAC,MAAM;AAAA,cACjB,OAAO,MAAM;AACX,2BAAW,IAAI;AACf,8BAAc,IAAI;AAAA,cACpB;AAAA;AAAA,UACF;AAAA;AAAA,MAEJ;AAAA,MAEC,OACC,gBAAAA;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,SAAS,MAAM,cAAc,KAAK;AAAA,UAClC,QAAQ,KAAK;AAAA,UACb,UAAU,KAAK;AAAA;AAAA,MACjB,IACE;AAAA,MAEJ,gBAAAA;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC,OAAO;AAAA,UACP,YAAY,OAAO;AAAA,UACnB,SAAS,MAAM,iBAAiB,IAAI;AAAA,UACpC,WAAW,YAAY;AACrB,gBAAI,CAAC,cAAe;AACpB,kBAAM,OAAO,YAAY,cAAc,EAAE;AACzC,6BAAiB,IAAI;AAAA,UACvB;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AACF;;;AC3OA,SAAS,aAAAE,YAAW,WAAAC,WAAS,YAAAC,iBAAgB;AAC7C,SAAS,gBAAAC,eAAc,WAAAC,gBAAe;AAqQtB,gBAAAC,OAwBN,QAAAC,cAxBM;AArHhB,SAAS,gBACP,QACkD;AAClD,SAAO,QAAQ,SAAS,aAAa,eAAe;AACtD;AAEA,SAAS,qBAAqB,MAAkC;AAC9D,QAAM,aAAa,KAAK,MAAM;AAC9B,MAAI,gBAAgB,UAAU,EAAG,QAAO,WAAW;AACnD,QAAM,aAAa,KAAK,MAAM;AAC9B,SAAO,gBAAgB,UAAU,IAAI,WAAW,YAAY;AAC9D;AAEA,SAAS,eAAe,QAAiC;AACvD,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,QAAQ,aAAa,CAAC,IAAI,WAAW,GAAG,CAAC;AAAA,EACpF;AACF;AAEA,SAAS,gBAAgB,KAA8B,iBAA0B;AAC/E,QAAM,SAAS,eAAe,IAAI,MAAM;AACxC,MAAI,CAAC,mBAAmB,IAAI,OAAO,cAAc,KAAM,QAAO;AAC9D,SAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,SAAS,IAAI;AAAA,IACb,GAAG;AAAA,EACL;AACF;AAEO,SAAS,kCAId,MAAqD;AACrD,SAAO,SAAS,mBAAmB;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAmD;AACjD,UAAM,CAAC,eAAe,gBAAgB,IAAIC,UAExC,CAAC,CAAC;AACJ,UAAM,kBAAkB,KAAK,0BAA0B,KAAK,EAAE;AAC9D,UAAM,kBAAkB,KAAK,0BAA0B,KAAK,EAAE;AAC9D,UAAM,OAAOC,SAAmC;AAAA,MAC9C,eAAe,gCAAgC,MAAM,OAAO;AAAA,MAC5D,QAAQ,OAAO,gCAAgC,MAAM,OAAO,IAAI;AAAA,IAClE,CAAC;AACD,UAAM,gBAAgB,qBAAqB,IAAI;AAC/C,UAAM,eAAeC;AAAA,MACnB,MAAM,OAAO,OAAO,aAAa,EAAE,KAAK,CAAC,UAAU,MAAM,KAAK,SAAS,CAAC;AAAA,MACxE,CAAC,aAAa;AAAA,IAChB;AAEA,IAAAC,WAAU,MAAM;AACd,UAAI,KAAM,kBAAiB,CAAC,CAAC;AAAA,IAC/B,GAAG,CAAC,IAAI,CAAC;AAET,UAAM,WAAW,KAAK,aAAa,OAAO,WAAW;AACnD,UAAI;AACF,YAAI,CAAC,WAAW,cAAc;AAC5B,cAAI,CAAC,cAAe,OAAM,IAAI,MAAM,mFAAsC;AAC1E,cAAI,CAAC,gBAAiB,OAAM,IAAI,MAAM,0JAAiD;AACvF,gBAAM,gBAAgB,YAAY;AAAA,YAChC,MAAM;AAAA,cACJ,CAAC,aAAa,GAAG,OAAO;AAAA,cACxB,GAAG,OAAO;AAAA,gBACR,OAAO,OAAO,aAAa,EAAE,IAAI,CAAC,UAAU;AAAA,kBAC1C,MAAM;AAAA,kBACN,MAAM,KACH,OAAO,CAAC,QAAQ,IAAI,OAAO,YAAY,IAAI,EAC3C,IAAI,CAAC,QAAQ,gBAAgB,KAAK,KAAK,CAAC;AAAA,gBAC7C,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,WAAW,WAAW,cAAc;AAClC,cAAI,CAAC,cAAe,OAAM,IAAI,MAAM,mFAAsC;AAC1E,cAAI,CAAC,gBAAiB,OAAM,IAAI,MAAM,0JAAiD;AACvF,gBAAM,gBAAgB,YAAY;AAAA,YAChC,IAAI,QAAQ;AAAA,YACZ,OAAO;AAAA,cACL,MAAM;AAAA,gBACJ,CAAC,aAAa,GAAG;AAAA,kBACf,IAAI,QAAQ;AAAA,kBACZ,SAAS,OAAO;AAAA,kBAChB,GAAG,OAAO;AAAA,gBACZ;AAAA,gBACA,GAAG,OAAO;AAAA,kBACR,OAAO,OAAO,aAAa,EAAE,IAAI,CAAC,UAAU;AAAA,oBAC1C,MAAM;AAAA,oBACN,MAAM,KAAK,IAAI,CAAC,QAAQ,gBAAgB,KAAK,IAAI,CAAC;AAAA,kBACpD,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,gBAAM,OAAO,EAAE,IAAI,SAAS,IAAI,OAAO,OAAiB,CAAC;AAAA,QAC3D;AACA,gBAAQ;AACR,aAAK,cAAc,QAAQ,UAAU,gGAAqB,2EAAe;AAAA,MAC3E,SAAS,OAAO;AACd,aAAK,cAAc,MAAM,KAAK,cAAc,aAAa,OAAO,kIAAyB,CAAC;AAAA,MAC5F;AAAA,IACF,CAAC;AAED,UAAM,SAAS,YAAY,QAAQ,iBAAiB,aAAa,iBAAiB,SAAS;AAC3F,UAAM,aACJ,KAAK,gBAAgB,KAAK,MAAM,OAAO,UAAU,SAC7C,KAAK,KAAK,OAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAC1C,KAAK,QAAQ;AAAA,MACb,QAAQ,MACN,KAAK,eACH,gBAAAL;AAAA,QAAC,KAAK;AAAA,QAAL;AAAA,UACC;AAAA,UACA,aAAa;AAAA,UACb,WAAW,cAAc,QAAQ,GAAG,GAAG,QAAQ,CAAC;AAAA,UAChD,mBAAmB,CAAC,EAAE,YAAY,SAAAM,UAAS,KAAK,MAAM;AACpD,6BAAiB,CAAC,aAAa;AAAA,cAC7B,GAAG;AAAA,cACH,CAAC,UAAU,GAAG,EAAE,SAAAA,UAAS,KAAuB;AAAA,YAClD,EAAE;AAAA,UACJ;AAAA;AAAA,MACF,IACE;AAAA,IACR,EAAE,IACF;AAEN,WACE,gBAAAN;AAAA,MAAC,KAAK;AAAA,MAAL;AAAA,QACC;AAAA,QACA,cAAc,KAAK,MAAM,OAAO,gBAAgB;AAAA,QAChD,OAAO,UAAU,sDAAc;AAAA,QAC/B,aAAa,KAAK;AAAA,QAClB;AAAA,QAEA,0BAAAA,MAACO,eAAA,EAAc,GAAG,MAChB,0BAAAN,OAAC,UAAK,UAAoB,YAAU,MAAC,WAAW,KAAK,eAClD;AAAA,eAAK,OACJ,gBAAAD;AAAA,YAAC,KAAK;AAAA,YAAL;AAAA,cACC,QAAQ,KAAK,KAAK;AAAA,cAClB,QAAQ,KAAK;AAAA,cACb,OAAO;AAAA,cACP,QAAQ,KAAK,KAAK;AAAA,cAClB,YAAW;AAAA,cACX;AAAA;AAAA,UACF,IACE;AAAA,UACJ,gBAAAA,MAAC,KAAK,SAAL,EAAa,UAAU,QAAQ,SAAkB;AAAA,WACpD,GACF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;;;AChQA,SAAS,kBAAkB,MAAc;AACvC,QAAM,UAAU,KAAK,KAAK,EAAE,QAAQ,SAAS,EAAE;AAC/C,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,QAAQ,WAAW,GAAG,IAAI,UAAU,IAAI,OAAO;AACxD;AAEA,SAAS,UAAU,MAAc,OAA2C;AAC1E,QAAM,SAAS,IAAI,gBAAgB;AACnC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,MAAO,QAAO,IAAI,KAAK,KAAK;AAAA,EAClC;AACA,QAAM,cAAc,OAAO,SAAS;AACpC,SAAO,cAAc,GAAG,IAAI,IAAI,WAAW,KAAK;AAClD;AAEO,SAAS,yBACd,QACuB;AACvB,QAAM,gBAAgB,kBAAkB,OAAO,iBAAiB,oBAAoB;AACpF,QAAM,kBAAkB,kBAAkB,OAAO,mBAAmB,aAAa;AACjF,QAAM,MAAM,uBAA0B,OAAO,WAAW,EAAE,aAAa,OAAO,YAAY,CAAC;AAC3F,QAAM,QAAQ,mBAAsB,GAAG;AAEvC,QAAM,YAAY,GAAG,aAAa;AAClC,QAAM,YAAY,GAAG,aAAa;AAElC,QAAM,SAAiE;AAAA,IACrE;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,aAAa,GAAG,SAAS;AAAA,IACzB,cAAc,CAAC,OAAO,UAAU,GAAG,SAAS,SAAS,EAAE,GAAG,CAAC;AAAA,IAC3D;AAAA,IACA,aAAa,GAAG,SAAS;AAAA,IACzB,cAAc,CAAC,OAAO,UAAU,GAAG,SAAS,SAAS,EAAE,GAAG,CAAC;AAAA,IAC3D,WAAW,GAAG,aAAa;AAAA,EAC7B;AACA,QAAM,aAAa,OAAO,aACtB,wBAAmD;AAAA,IACjD,GAAG,OAAO;AAAA,IACV;AAAA,IAGA,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC,IACD;AAEJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,+BACd,QACuB;AACvB,SAAO,yBAA4B,MAAM;AAC3C;AAEO,SAAS,6BAA6B,QAKV;AACjC,QAAM,SAAS;AAAA,IACb;AAAA,MACE,MAAM;AAAA,MACN,IAAI,QAAQ,OAAO,iBAAiB,kBAAkB,OAAO,aAAa,EAAE,WAAW,GAAG,CAAC;AAAA,MAC3F,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,IAAI,QAAQ,OAAO,mBAAmB,kBAAkB,OAAO,eAAe,EAAE,WAAW,GAAG,CAAC;AAAA,MAC/F,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,IAAI,QAAQ,OAAO,SAAS;AAAA,MAC5B,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,IAAI,OAAO,gBAAgB,UAAa,kBAAkB,OAAO,WAAW,EAAE,WAAW,GAAG;AAAA,MAC5F,SAAS;AAAA,IACX;AAAA,EACF,EAAE,IAAI,CAAC,UAAW,MAAM,KAAK,EAAE,MAAM,MAAM,MAAM,IAAI,KAAK,IAAI,KAAM;AAEpE,SAAO,EAAE,IAAI,OAAO,MAAM,CAAC,UAAU,MAAM,EAAE,GAAG,OAAO;AACzD;;;AC/IO,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,SAAS;AACX;","names":["useMemo","useState","FormProvider","useForm","useRef","jsx","jsxs","useRef","error","useRef","useState","jsx","jsxs","useEffect","useMemo","useRef","useState","useMemo","useState","jsx","jsxs","useState","useMemo","jsx","jsxs","useState","useRef","useMemo","useEffect","jsx","jsxs","useMemo","useForm","FormProvider","useState","dataKey","jsx","jsxs","useMemo","useState","jsx","jsxs","styles","useEffect","useForm","jsx","jsxs","styles","useForm","useEffect","useEffect","FormProvider","useForm","useWatch","jsx","useForm","useWatch","useEffect","FormProvider","jsx","jsxs","useCallback","useMemo","useState","jsx","jsxs","useEffect","FormProvider","useForm","jsx","useForm","useEffect","FormProvider","useMemo","useWatch","useWatch","useMemo","useMemo","FormProvider","useForm","jsx","jsxs","useMemo","useForm","FormProvider","useMemo","jsx","useMemo","useState","jsx","jsxs","useEffect","useMemo","useState","FormProvider","useForm","jsx","jsxs","useState","useForm","useMemo","useEffect","dataKey","FormProvider"]}
|