@omnitron-dev/prism 0.3.1 → 0.3.3
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/README.md +68 -2
- package/THIRD-PARTY-NOTICES.txt +26 -0
- package/dist/accessibility/index.js +2 -0
- package/dist/accessibility/index.js.map +1 -1
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/blocks/auth-block/guards.d.ts +3 -2
- package/dist/blocks/auth-block/guards.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/types.d.ts +4 -2
- package/dist/blocks/dashboard-block/types.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +2 -2
- package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -1
- package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -1
- package/dist/blocks/data-grid-block/types.d.ts +3 -0
- package/dist/blocks/data-grid-block/types.d.ts.map +1 -1
- package/dist/blocks/index.js +80 -255
- package/dist/blocks/index.js.map +1 -1
- package/dist/chunk-2AB7VGPW.js +447 -0
- package/dist/chunk-2AB7VGPW.js.map +1 -0
- package/dist/{chunk-LOY2NPCO.js → chunk-2E67PQ4T.js} +3 -3
- package/dist/{chunk-LOY2NPCO.js.map → chunk-2E67PQ4T.js.map} +1 -1
- package/dist/chunk-2KG2NI73.js +84 -0
- package/dist/chunk-2KG2NI73.js.map +1 -0
- package/dist/chunk-2UYRW6X3.js +44 -0
- package/dist/chunk-2UYRW6X3.js.map +1 -0
- package/dist/chunk-36C5H56C.js +208 -0
- package/dist/chunk-36C5H56C.js.map +1 -0
- package/dist/chunk-36FOXX25.js +73 -0
- package/dist/chunk-36FOXX25.js.map +1 -0
- package/dist/{chunk-52PQL67Q.js → chunk-3VSM7NZG.js} +18 -15
- package/dist/chunk-3VSM7NZG.js.map +1 -0
- package/dist/{chunk-GUGTDURV.js → chunk-4B2LTPK2.js} +2 -2
- package/dist/{chunk-GUGTDURV.js.map → chunk-4B2LTPK2.js.map} +1 -1
- package/dist/chunk-4HUGZJKU.js +108 -0
- package/dist/chunk-4HUGZJKU.js.map +1 -0
- package/dist/{chunk-PXXPLHIY.js → chunk-4Q5L7LDG.js} +3 -3
- package/dist/{chunk-PXXPLHIY.js.map → chunk-4Q5L7LDG.js.map} +1 -1
- package/dist/{chunk-BRDWQVRT.js → chunk-4R7EZ7GQ.js} +3 -2
- package/dist/chunk-4R7EZ7GQ.js.map +1 -0
- package/dist/chunk-6IANOSMD.js +185 -0
- package/dist/chunk-6IANOSMD.js.map +1 -0
- package/dist/{chunk-YHE7HXSG.js → chunk-7ATBURW2.js} +3 -3
- package/dist/{chunk-YHE7HXSG.js.map → chunk-7ATBURW2.js.map} +1 -1
- package/dist/{chunk-7G5D5PTC.js → chunk-AATAOOSF.js} +4 -4
- package/dist/{chunk-7G5D5PTC.js.map → chunk-AATAOOSF.js.map} +1 -1
- package/dist/chunk-AKLRKCYH.js +128 -0
- package/dist/chunk-AKLRKCYH.js.map +1 -0
- package/dist/chunk-CT46KJOR.js +133 -0
- package/dist/chunk-CT46KJOR.js.map +1 -0
- package/dist/{chunk-LSPFFEJT.js → chunk-D4GFAJAZ.js} +298 -3900
- package/dist/chunk-D4GFAJAZ.js.map +1 -0
- package/dist/{chunk-BJE2AKD4.js → chunk-D5J3KW6Q.js} +3 -2
- package/dist/chunk-D5J3KW6Q.js.map +1 -0
- package/dist/chunk-DEPJRTVT.js +3 -0
- package/dist/{chunk-FU52GL2E.js.map → chunk-DEPJRTVT.js.map} +1 -1
- package/dist/{chunk-472SOF76.js → chunk-DHTYHUYI.js} +85 -107
- package/dist/chunk-DHTYHUYI.js.map +1 -0
- package/dist/{chunk-FF5RF32O.js → chunk-E7WM2RXA.js} +3 -2
- package/dist/chunk-E7WM2RXA.js.map +1 -0
- package/dist/chunk-F6RZ7LW6.js +1271 -0
- package/dist/chunk-F6RZ7LW6.js.map +1 -0
- package/dist/chunk-FOGY3HA4.js +217 -0
- package/dist/chunk-FOGY3HA4.js.map +1 -0
- package/dist/chunk-G2GANYMW.js +139 -0
- package/dist/chunk-G2GANYMW.js.map +1 -0
- package/dist/chunk-I6DILPFE.js +293 -0
- package/dist/chunk-I6DILPFE.js.map +1 -0
- package/dist/{chunk-HOXFSQUV.js → chunk-IRYU3NTG.js} +2 -2
- package/dist/{chunk-HOXFSQUV.js.map → chunk-IRYU3NTG.js.map} +1 -1
- package/dist/chunk-JTIUGPW5.js +284 -0
- package/dist/chunk-JTIUGPW5.js.map +1 -0
- package/dist/{chunk-GUFHFEPZ.js → chunk-JZBSPDED.js} +2 -2
- package/dist/{chunk-GUFHFEPZ.js.map → chunk-JZBSPDED.js.map} +1 -1
- package/dist/{chunk-PFT2BNYO.js → chunk-KPY7TA4D.js} +5 -5
- package/dist/{chunk-PFT2BNYO.js.map → chunk-KPY7TA4D.js.map} +1 -1
- package/dist/{chunk-GMIE6III.js → chunk-LFWKGNCX.js} +50 -623
- package/dist/chunk-LFWKGNCX.js.map +1 -0
- package/dist/chunk-LH4ZZZYB.js +37 -0
- package/dist/chunk-LH4ZZZYB.js.map +1 -0
- package/dist/chunk-NFJ7CPG3.js +13 -0
- package/dist/chunk-NFJ7CPG3.js.map +1 -0
- package/dist/chunk-NFPOIHD4.js +3 -0
- package/dist/{chunk-JSQTYDPG.js.map → chunk-NFPOIHD4.js.map} +1 -1
- package/dist/{chunk-XIXSSI3B.js → chunk-NJM5AVBM.js} +3 -2
- package/dist/chunk-NJM5AVBM.js.map +1 -0
- package/dist/{chunk-4Z5DE5GK.js → chunk-NSNM53WI.js} +133 -115
- package/dist/chunk-NSNM53WI.js.map +1 -0
- package/dist/chunk-NTREGTG7.js +31 -0
- package/dist/chunk-NTREGTG7.js.map +1 -0
- package/dist/{chunk-ADG4HZEP.js → chunk-OKJA6SJM.js} +4 -4
- package/dist/chunk-OKJA6SJM.js.map +1 -0
- package/dist/{chunk-SU3LVQ7N.js → chunk-Q6JDNFSG.js} +11 -226
- package/dist/chunk-Q6JDNFSG.js.map +1 -0
- package/dist/chunk-RPOGINR5.js +115 -0
- package/dist/chunk-RPOGINR5.js.map +1 -0
- package/dist/{chunk-KQ67XB6T.js → chunk-RSWVYIXK.js} +151 -114
- package/dist/chunk-RSWVYIXK.js.map +1 -0
- package/dist/chunk-SSEHL5VP.js +110 -0
- package/dist/chunk-SSEHL5VP.js.map +1 -0
- package/dist/chunk-TEIGUOWN.js +523 -0
- package/dist/chunk-TEIGUOWN.js.map +1 -0
- package/dist/{chunk-AYYFMTMI.js → chunk-TJ7DHXUX.js} +2 -2
- package/dist/{chunk-AYYFMTMI.js.map → chunk-TJ7DHXUX.js.map} +1 -1
- package/dist/{chunk-75FQ5IW3.js → chunk-TZHWYT34.js} +3 -3
- package/dist/{chunk-75FQ5IW3.js.map → chunk-TZHWYT34.js.map} +1 -1
- package/dist/chunk-TZWHELY4.js +45 -0
- package/dist/chunk-TZWHELY4.js.map +1 -0
- package/dist/{chunk-OKTLA23Q.js → chunk-UEINJFLS.js} +6 -6
- package/dist/chunk-UEINJFLS.js.map +1 -0
- package/dist/chunk-URFQX3I6.js +129 -0
- package/dist/chunk-URFQX3I6.js.map +1 -0
- package/dist/chunk-VG6FOMOH.js +187 -0
- package/dist/chunk-VG6FOMOH.js.map +1 -0
- package/dist/{chunk-PGHEP4JD.js → chunk-VQVVHMPG.js} +3 -3
- package/dist/{chunk-PGHEP4JD.js.map → chunk-VQVVHMPG.js.map} +1 -1
- package/dist/{chunk-DRFNMZLG.js → chunk-VUKOT432.js} +3 -2
- package/dist/chunk-VUKOT432.js.map +1 -0
- package/dist/chunk-WD4N72DL.js +315 -0
- package/dist/chunk-WD4N72DL.js.map +1 -0
- package/dist/chunk-XBYMG4QK.js +119 -0
- package/dist/chunk-XBYMG4QK.js.map +1 -0
- package/dist/chunk-YHM6GIHV.js +3 -0
- package/dist/chunk-YHM6GIHV.js.map +1 -0
- package/dist/{chunk-SNZK5X6F.js → chunk-Z2AN43YU.js} +4 -2
- package/dist/chunk-Z2AN43YU.js.map +1 -0
- package/dist/chunk-ZNWHMQRM.js +171 -0
- package/dist/chunk-ZNWHMQRM.js.map +1 -0
- package/dist/{chunk-YSIG2XYH.js → chunk-ZRJYQN6Y.js} +2 -2
- package/dist/{chunk-YSIG2XYH.js.map → chunk-ZRJYQN6Y.js.map} +1 -1
- package/dist/{chunk-AD4W7HYC.js → chunk-ZYI3MHLE.js} +3 -2
- package/dist/chunk-ZYI3MHLE.js.map +1 -0
- package/dist/cli/index.js +59 -421
- package/dist/cli/index.js.map +1 -1
- package/dist/components/admin-filters/admin-data-table.d.ts +7 -1
- package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
- package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
- package/dist/components/admin-filters/index.js +8 -0
- package/dist/components/admin-filters/index.js.map +1 -0
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/index.js +5 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/animate/index.js +5 -0
- package/dist/components/animate/index.js.map +1 -0
- package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/components/breadcrumbs/index.js +4 -0
- package/dist/components/breadcrumbs/index.js.map +1 -0
- package/dist/components/card/index.js +4 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.css +52 -0
- package/dist/components/chart/index.css.map +1 -0
- package/dist/components/chart/index.js +5 -0
- package/dist/components/chart/index.js.map +1 -0
- package/dist/components/chart/types.d.ts +3 -1
- package/dist/components/chart/types.d.ts.map +1 -1
- package/dist/components/chart/use-chart.d.ts.map +1 -1
- package/dist/components/command-palette/command-palette.d.ts +3 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +4 -0
- package/dist/components/command-palette/index.js.map +1 -0
- package/dist/components/confirm-dialog/index.js +4 -0
- package/dist/components/confirm-dialog/index.js.map +1 -0
- package/dist/components/date-input/date-input.d.ts +1 -0
- package/dist/components/date-input/date-input.d.ts.map +1 -1
- package/dist/components/date-input/index.d.ts +0 -1
- package/dist/components/date-input/index.d.ts.map +1 -1
- package/dist/components/doc-layout/index.js +5 -4
- package/dist/components/doc-layout/index.js.map +1 -1
- package/dist/components/editor/index.js +4 -3
- package/dist/components/editor/index.js.map +1 -1
- package/dist/components/emoji-picker/index.js +2 -1
- package/dist/components/emoji-picker/index.js.map +1 -1
- package/dist/components/empty-content/empty-content.d.ts.map +1 -1
- package/dist/components/empty-content/index.js +4 -0
- package/dist/components/empty-content/index.js.map +1 -0
- package/dist/components/error-boundary/index.js +6 -0
- package/dist/components/error-boundary/index.js.map +1 -0
- package/dist/components/index.css +13 -10
- package/dist/components/index.css.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -21
- package/dist/components/index.js.map +1 -1
- package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -1
- package/dist/components/knowledge-graph/index.js +18 -16
- package/dist/components/knowledge-graph/index.js.map +1 -1
- package/dist/components/label/index.js +5 -0
- package/dist/components/label/index.js.map +1 -0
- package/dist/components/label/label.d.ts.map +1 -1
- package/dist/components/loading-screen/index.js +4 -0
- package/dist/components/loading-screen/index.js.map +1 -0
- package/dist/components/map/MapPointPicker.d.ts.map +1 -1
- package/dist/components/map/index.js +2 -1
- package/dist/components/map/index.js.map +1 -1
- package/dist/components/navigation-progress/index.js +4 -0
- package/dist/components/navigation-progress/index.js.map +1 -0
- package/dist/components/page-content/index.js +4 -0
- package/dist/components/page-content/index.js.map +1 -0
- package/dist/components/popover/index.js +4 -0
- package/dist/components/popover/index.js.map +1 -0
- package/dist/components/research/diagram.d.ts.map +1 -1
- package/dist/components/research/index.js +6 -4
- package/dist/components/research/index.js.map +1 -1
- package/dist/components/research-editor/extensions.d.ts +1 -1
- package/dist/components/research-editor/index.js +11 -10
- package/dist/components/research-editor/index.js.map +1 -1
- package/dist/components/research-editor/math-navigation.d.ts +2 -2
- package/dist/components/research-editor/math-navigation.d.ts.map +1 -1
- package/dist/components/scroll-to-top/index.js +4 -0
- package/dist/components/scroll-to-top/index.js.map +1 -0
- package/dist/components/search-input/index.js +7 -0
- package/dist/components/search-input/index.js.map +1 -0
- package/dist/components/search-input/search-input.d.ts +3 -1
- package/dist/components/search-input/search-input.d.ts.map +1 -1
- package/dist/components/skeleton/index.js +4 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/snackbar/index.js +6 -0
- package/dist/components/snackbar/index.js.map +1 -0
- package/dist/components/stepper/index.js +4 -0
- package/dist/components/stepper/index.js.map +1 -0
- package/dist/components/table/index.d.ts +1 -0
- package/dist/components/table/index.d.ts.map +1 -1
- package/dist/components/table/index.js +5 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/table-viewport.d.ts +13 -0
- package/dist/components/table/table-viewport.d.ts.map +1 -0
- package/dist/components/table/table.d.ts +3 -1
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/tabs/index.js +6 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tabs/tabs.d.ts +12 -1
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/core/index.js +12 -10
- package/dist/core/index.js.map +1 -1
- package/dist/forms/index.js +2 -0
- package/dist/forms/index.js.map +1 -1
- package/dist/hooks/index.js +14 -12
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-config-from-query.d.ts +2 -0
- package/dist/hooks/use-config-from-query.d.ts.map +1 -1
- package/dist/hooks/use-image-dimensions.d.ts.map +1 -1
- package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -1
- package/dist/hooks/use-scroll-position.d.ts.map +1 -1
- package/dist/hooks/use-window-size.d.ts.map +1 -1
- package/dist/icons/context.d.ts.map +1 -1
- package/dist/icons/index.js +3 -2
- package/dist/icons/index.js.map +1 -1
- package/dist/index.css +13 -10
- package/dist/index.css.map +1 -1
- package/dist/index.js +57 -31
- package/dist/index.js.map +1 -1
- package/dist/internal/research-parser.js +3 -0
- package/dist/internal/research-parser.js.map +1 -0
- package/dist/layouts/core/header-section.d.ts +1 -0
- package/dist/layouts/core/header-section.d.ts.map +1 -1
- package/dist/layouts/dashboard/layout.d.ts +3 -1
- package/dist/layouts/dashboard/layout.d.ts.map +1 -1
- package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
- package/dist/layouts/index.js +9 -8
- package/dist/layouts/index.js.map +1 -1
- package/dist/netron/index.js +2 -1
- package/dist/netron/index.js.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/state/create-store.d.ts.map +1 -1
- package/dist/state/index.js +3 -2
- package/dist/state/index.js.map +1 -1
- package/dist/state/settings-version.d.ts.map +1 -1
- package/dist/theme/components/Chip.d.ts.map +1 -1
- package/dist/theme/components/Dialog.d.ts.map +1 -1
- package/dist/theme/components/TextField.d.ts.map +1 -1
- package/dist/theme/components/index.d.ts.map +1 -1
- package/dist/theme/components/theme-utils.d.ts +2 -2
- package/dist/theme/components/theme-utils.d.ts.map +1 -1
- package/dist/theme/index.js +8 -6
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/palette/overrides.d.ts +1 -0
- package/dist/theme/palette/overrides.d.ts.map +1 -1
- package/dist/theme/semantic-surface.d.ts +8 -0
- package/dist/theme/semantic-surface.d.ts.map +1 -0
- package/dist/types/index.js +2 -2
- package/dist/ui/index.js +6 -5
- package/dist/ui/index.js.map +1 -1
- package/dist/utils/async-lock.d.ts.map +1 -1
- package/package.json +143 -37
- package/dist/chunk-472SOF76.js.map +0 -1
- package/dist/chunk-4Z5DE5GK.js.map +0 -1
- package/dist/chunk-52PQL67Q.js.map +0 -1
- package/dist/chunk-AD4W7HYC.js.map +0 -1
- package/dist/chunk-ADG4HZEP.js.map +0 -1
- package/dist/chunk-BJE2AKD4.js.map +0 -1
- package/dist/chunk-BRDWQVRT.js.map +0 -1
- package/dist/chunk-DRFNMZLG.js.map +0 -1
- package/dist/chunk-FF5RF32O.js.map +0 -1
- package/dist/chunk-FU52GL2E.js +0 -3
- package/dist/chunk-GMIE6III.js.map +0 -1
- package/dist/chunk-JSQTYDPG.js +0 -3
- package/dist/chunk-KQ67XB6T.js.map +0 -1
- package/dist/chunk-LSPFFEJT.js.map +0 -1
- package/dist/chunk-OKTLA23Q.js.map +0 -1
- package/dist/chunk-SNZK5X6F.js.map +0 -1
- package/dist/chunk-SU3LVQ7N.js.map +0 -1
- package/dist/chunk-XIXSSI3B.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/table/table.tsx"],"names":[],"mappings":"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","file":"chunk-JTIUGPW5.js","sourcesContent":["'use client';\n\n/**\n * Table Component\n *\n * Enhanced table component with sorting, selection, and pagination.\n *\n * @module components/table\n */\n\nimport type { ReactNode, ChangeEvent, Ref } from 'react';\nimport { useCallback, useState, useMemo } from 'react';\nimport MuiTable from '@mui/material/Table';\nimport { isRowActionTarget, TableViewport } from './table-viewport.js';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport TablePagination from '@mui/material/TablePagination';\nimport Checkbox from '@mui/material/Checkbox';\nimport Skeleton from '@mui/material/Skeleton';\nimport Paper from '@mui/material/Paper';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { styled, alpha } from '@mui/material/styles';\nimport type { TableProps as MuiTableProps } from '@mui/material/Table';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type SortOrder = 'asc' | 'desc';\n\nexport interface TableColumn<T> {\n /** Unique column identifier */\n id: keyof T | string;\n /** Column header label */\n label: string;\n /** Column width */\n width?: number | string;\n /** Minimum width */\n minWidth?: number;\n /** Alignment */\n align?: 'left' | 'center' | 'right';\n /** Whether column is sortable */\n sortable?: boolean;\n /** Custom render function */\n render?: (row: T, index: number) => ReactNode;\n /** Format value for display */\n format?: (value: unknown) => string;\n}\n\nexport interface TableProps<T> extends Omit<MuiTableProps, 'children'> {\n /** Table columns configuration */\n columns: TableColumn<T>[];\n /** Data rows */\n data: T[];\n /** Row key accessor */\n rowKey?: keyof T | ((row: T) => string | number);\n /** Enable row selection */\n selectable?: boolean;\n /** Selected row keys */\n selected?: (string | number)[];\n /** Selection change handler */\n onSelectChange?: (selected: (string | number)[]) => void;\n /** Enable sorting */\n sortable?: boolean;\n /** Current sort column */\n sortBy?: string;\n /** Current sort order */\n sortOrder?: SortOrder;\n /** Sort change handler */\n onSortChange?: (column: string, order: SortOrder) => void;\n /** Enable pagination */\n paginated?: boolean;\n /** Current page (0-indexed) */\n page?: number;\n /** Rows per page */\n rowsPerPage?: number;\n /** Total row count (for server-side pagination) */\n totalRows?: number;\n /** Page change handler */\n onPageChange?: (page: number) => void;\n /** Rows per page change handler */\n onRowsPerPageChange?: (rowsPerPage: number) => void;\n /** Rows per page options */\n rowsPerPageOptions?: number[];\n /** Empty state content */\n emptyContent?: ReactNode;\n /**\n * Loading state. Renders placeholder rows in the body and suppresses the\n * empty state, so the header and column widths stay put while data arrives.\n */\n loading?: boolean;\n /** Placeholder rows drawn while `loading`. */\n loadingRows?: number;\n /** Dense padding */\n dense?: boolean;\n /** Sticky header */\n stickyHeader?: boolean;\n /** Container max height */\n maxHeight?: number | string;\n /** Row click handler */\n onRowClick?: (row: T, index: number) => void;\n /** Accessible name of the scrollable table region. */\n scrollLabel?: string;\n /** Container styles */\n containerSx?: SxProps<Theme>;\n}\n\n// =============================================================================\n// STYLED COMPONENTS\n// =============================================================================\n\nconst StyledTableContainer = styled(Paper)(({ theme }) => ({\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n overflow: 'hidden',\n minWidth: 0,\n maxWidth: '100%',\n}));\n\nconst StyledTableHead = styled(TableHead)(({ theme }) => ({\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n '& .MuiTableCell-head': {\n fontWeight: 600,\n backgroundColor: theme.vars?.palette.background.paper ?? theme.palette.background.paper,\n },\n}));\n\nconst StyledTableRow = styled(TableRow)(({ theme }) => ({\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.04),\n },\n '&.Mui-selected': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n },\n },\n}));\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\n/**\n * Table - Enhanced data table with sorting, selection, and pagination.\n *\n * @example\n * ```tsx\n * const columns: TableColumn<User>[] = [\n * { id: 'name', label: 'Name', sortable: true },\n * { id: 'email', label: 'Email' },\n * { id: 'status', label: 'Status', render: (row) => <Label>{row.status}</Label> },\n * ];\n *\n * <Table\n * columns={columns}\n * data={users}\n * rowKey=\"id\"\n * selectable\n * paginated\n * />\n * ```\n */\n// React 19 forwards `ref` through props, so a generic component\n// no longer needs the `forwardRef(...) as <T>(...)` cast workaround\n// that earlier React versions required to preserve `T`. We declare\n// `ref` on the props (typed against the rendered MUI Table element)\n// and call it a day.\nexport function Table<T>({\n columns,\n data,\n rowKey = 'id' as keyof T,\n selectable = false,\n selected = [],\n onSelectChange,\n sortable = false,\n sortBy,\n sortOrder = 'asc',\n onSortChange,\n paginated = false,\n page = 0,\n rowsPerPage = 10,\n totalRows,\n onPageChange,\n onRowsPerPageChange,\n rowsPerPageOptions = [5, 10, 25, 50],\n emptyContent,\n loading = false,\n loadingRows = 5,\n dense = false,\n stickyHeader = false,\n maxHeight,\n onRowClick,\n containerSx,\n scrollLabel,\n sx,\n ref,\n ...other\n}: TableProps<T> & { ref?: Ref<HTMLTableElement> }): ReactNode {\n // Get row key\n const getRowKey = useCallback(\n (row: T, index: number): string | number => {\n if (typeof rowKey === 'function') {\n return rowKey(row);\n }\n const keyValue = row[rowKey as keyof T];\n return keyValue !== undefined ? String(keyValue) : index;\n },\n [rowKey]\n );\n\n // Selection handlers\n const isAllSelected = useMemo(\n () => data.length > 0 && selected.length === data.length,\n [data.length, selected.length]\n );\n\n const isIndeterminate = useMemo(\n () => selected.length > 0 && selected.length < data.length,\n [data.length, selected.length]\n );\n\n const handleSelectAll = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.checked) {\n const allKeys = data.map((row, index) => getRowKey(row, index));\n onSelectChange?.(allKeys);\n } else {\n onSelectChange?.([]);\n }\n },\n [data, getRowKey, onSelectChange]\n );\n\n const handleSelectRow = useCallback(\n (key: string | number) => {\n const newSelected = selected.includes(key) ? selected.filter((k) => k !== key) : [...selected, key];\n onSelectChange?.(newSelected);\n },\n [selected, onSelectChange]\n );\n\n // Sort handler\n const handleSort = useCallback(\n (columnId: string) => {\n const isAsc = sortBy === columnId && sortOrder === 'asc';\n onSortChange?.(columnId, isAsc ? 'desc' : 'asc');\n },\n [sortBy, sortOrder, onSortChange]\n );\n\n // Pagination handlers\n const handlePageChange = useCallback(\n (_: unknown, newPage: number) => {\n onPageChange?.(newPage);\n },\n [onPageChange]\n );\n\n const handleRowsPerPageChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n onRowsPerPageChange?.(parseInt(event.target.value, 10));\n onPageChange?.(0);\n },\n [onRowsPerPageChange, onPageChange]\n );\n\n // Calculate total rows\n const total = totalRows ?? data.length;\n\n // Slice data for client-side pagination\n const displayData = useMemo(() => {\n if (paginated && totalRows === undefined) {\n return data.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);\n }\n return data;\n }, [data, paginated, page, rowsPerPage, totalRows]);\n\n // Empty state\n if (!loading && data.length === 0) {\n return (\n <StyledTableContainer sx={containerSx}>\n <Box sx={{ p: 4, textAlign: 'center' }}>\n {emptyContent || (\n <Typography\n sx={{\n color: 'text.secondary',\n }}\n >\n No data available\n </Typography>\n )}\n </Box>\n </StyledTableContainer>\n );\n }\n\n return (\n <StyledTableContainer sx={containerSx}>\n <TableViewport label={scrollLabel} maxHeight={maxHeight}>\n <MuiTable ref={ref} stickyHeader={stickyHeader} size={dense ? 'small' : 'medium'} sx={sx} {...other}>\n <StyledTableHead>\n <TableRow>\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Checkbox indeterminate={isIndeterminate} checked={isAllSelected} onChange={handleSelectAll} />\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell\n key={String(column.id)}\n align={column.align || 'left'}\n style={{ width: column.width, minWidth: column.minWidth }}\n sortDirection={sortBy === column.id ? sortOrder : false}\n >\n {sortable && column.sortable !== false ? (\n <TableSortLabel\n active={sortBy === column.id}\n direction={sortBy === column.id ? sortOrder : 'asc'}\n onClick={() => handleSort(String(column.id))}\n >\n {column.label}\n </TableSortLabel>\n ) : (\n column.label\n )}\n </TableCell>\n ))}\n </TableRow>\n </StyledTableHead>\n\n <TableBody>\n {/*\n `loading` used to do one thing — suppress the empty state — which\n left every consumer to hand-roll its own skeleton rows, or to show\n a bare header and call it a loading state. Draw them here, inside\n the real table, so the columns do not jump when the data lands.\n */}\n {loading &&\n Array.from({ length: Math.max(1, loadingRows) }, (_, rowIndex) => (\n <TableRow key={`loading-${rowIndex}`}>\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Skeleton variant=\"rectangular\" width={18} height={18} />\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell key={String(column.id)} align={column.align || 'left'}>\n <Skeleton variant=\"text\" width={column.width ?? '80%'} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n {!loading &&\n displayData.map((row, index) => {\n const key = getRowKey(row, index);\n const isSelected = selected.includes(key);\n\n return (\n <StyledTableRow\n key={key}\n hover\n selected={isSelected}\n tabIndex={onRowClick || selectable ? -1 : undefined}\n data-row-action={onRowClick ? true : undefined}\n onClick={onRowClick ? event => { if (isRowActionTarget(event.target)) onRowClick(row, index); } : undefined}\n sx={{\n cursor: onRowClick ? 'pointer' : 'default',\n '&:focus-visible': { outline: '2px solid', outlineColor: 'primary.main', outlineOffset: -2 },\n }}\n >\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={isSelected}\n onClick={(e) => e.stopPropagation()}\n onChange={() => handleSelectRow(key)}\n />\n </TableCell>\n )}\n {columns.map((column) => {\n const value = row[column.id as keyof T];\n\n return (\n <TableCell key={String(column.id)} align={column.align || 'left'}>\n {column.render\n ? column.render(row, index)\n : column.format\n ? column.format(value)\n : String(value ?? '')}\n </TableCell>\n );\n })}\n </StyledTableRow>\n );\n })}\n </TableBody>\n </MuiTable>\n </TableViewport>\n\n {paginated && (\n <TablePagination\n component=\"div\"\n count={total}\n page={page}\n rowsPerPage={rowsPerPage}\n rowsPerPageOptions={rowsPerPageOptions}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n />\n )}\n </StyledTableContainer>\n );\n}\n\n// =============================================================================\n// USE TABLE HOOK\n// =============================================================================\n\nexport interface UseTableOptions<T> {\n /** Initial data */\n data: T[];\n /** Row key accessor */\n rowKey?: keyof T | ((row: T) => string | number);\n /** Default page */\n defaultPage?: number;\n /** Default rows per page */\n defaultRowsPerPage?: number;\n /** Default sort column */\n defaultSortBy?: string;\n /** Default sort order */\n defaultSortOrder?: SortOrder;\n}\n\nexport interface UseTableReturn<T> {\n /** Current page */\n page: number;\n /** Set page */\n setPage: (page: number) => void;\n /** Rows per page */\n rowsPerPage: number;\n /** Set rows per page */\n setRowsPerPage: (rowsPerPage: number) => void;\n /** Sort column */\n sortBy: string | undefined;\n /** Sort order */\n sortOrder: SortOrder;\n /** Sort handler */\n handleSort: (column: string, order: SortOrder) => void;\n /** Selected keys */\n selected: (string | number)[];\n /** Set selected */\n setSelected: (selected: (string | number)[]) => void;\n /** Sorted and paginated data */\n displayData: T[];\n /** Total row count */\n totalRows: number;\n /** Reset all state */\n reset: () => void;\n}\n\n/**\n * useTable - Hook for managing table state.\n *\n * @example\n * ```tsx\n * function UserTable() {\n * const table = useTable({\n * data: users,\n * rowKey: 'id',\n * defaultSortBy: 'name',\n * });\n *\n * return (\n * <Table\n * columns={columns}\n * data={table.displayData}\n * rowKey=\"id\"\n * selectable\n * selected={table.selected}\n * onSelectChange={table.setSelected}\n * sortable\n * sortBy={table.sortBy}\n * sortOrder={table.sortOrder}\n * onSortChange={table.handleSort}\n * paginated\n * page={table.page}\n * rowsPerPage={table.rowsPerPage}\n * totalRows={table.totalRows}\n * onPageChange={table.setPage}\n * onRowsPerPageChange={table.setRowsPerPage}\n * />\n * );\n * }\n * ```\n */\nexport function useTable<T>({\n data,\n defaultPage = 0,\n defaultRowsPerPage = 10,\n defaultSortBy,\n defaultSortOrder = 'asc',\n}: UseTableOptions<T>): UseTableReturn<T> {\n const [page, setPage] = useState(defaultPage);\n const [rowsPerPage, setRowsPerPage] = useState(defaultRowsPerPage);\n const [sortBy, setSortBy] = useState<string | undefined>(defaultSortBy);\n const [sortOrder, setSortOrder] = useState<SortOrder>(defaultSortOrder);\n const [selected, setSelected] = useState<(string | number)[]>([]);\n\n const handleSort = useCallback((column: string, order: SortOrder) => {\n setSortBy(column);\n setSortOrder(order);\n }, []);\n\n // Sort data\n const sortedData = useMemo(() => {\n if (!sortBy) return data;\n\n return [...data].sort((a, b) => {\n const aValue = a[sortBy as keyof T];\n const bValue = b[sortBy as keyof T];\n\n if (aValue === bValue) return 0;\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n const comparison = aValue < bValue ? -1 : 1;\n return sortOrder === 'asc' ? comparison : -comparison;\n });\n }, [data, sortBy, sortOrder]);\n\n // Paginate data\n const displayData = useMemo(() => {\n const start = page * rowsPerPage;\n return sortedData.slice(start, start + rowsPerPage);\n }, [sortedData, page, rowsPerPage]);\n\n const reset = useCallback(() => {\n setPage(defaultPage);\n setRowsPerPage(defaultRowsPerPage);\n setSortBy(defaultSortBy);\n setSortOrder(defaultSortOrder);\n setSelected([]);\n }, [defaultPage, defaultRowsPerPage, defaultSortBy, defaultSortOrder]);\n\n return {\n page,\n setPage,\n rowsPerPage,\n setRowsPerPage,\n sortBy,\n sortOrder,\n handleSort,\n selected,\n setSelected,\n displayData,\n totalRows: data.length,\n reset,\n };\n}\n"]}
|
|
@@ -1405,5 +1405,5 @@ var defaultRegistrySchema = {
|
|
|
1405
1405
|
};
|
|
1406
1406
|
|
|
1407
1407
|
export { PrismInstaller, RegistryManager, createInstaller, createRegistryManager, defaultRegistrySchema, registry };
|
|
1408
|
-
//# sourceMappingURL=chunk-
|
|
1409
|
-
//# sourceMappingURL=chunk-
|
|
1408
|
+
//# sourceMappingURL=chunk-JZBSPDED.js.map
|
|
1409
|
+
//# sourceMappingURL=chunk-JZBSPDED.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registry/manager.ts","../src/registry/installer.ts","../src/registry/index.ts"],"names":["registry","path","fs"],"mappings":";;;;AA8FO,IAAM,kBAAN,MAAsB;AAAA,EACV,OAAA;AAAA,EACT,UAAA,uBAA8C,GAAA,EAAI;AAAA,EAClD,KAAA,uBAAqD,GAAA,EAAI;AAAA,EACzD,OAAA,uBAA0D,GAAA,EAAI;AAAA,EAEtE,WAAA,CAAY,OAAA,GAAkC,EAAC,EAAG;AAChD,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,OAAA,EAAS,OAAA,CAAQ,OAAA,KAAY,OAAO,OAAA,KAAY,eAAe,OAAA,CAAQ,GAAA,GAAM,OAAA,CAAQ,GAAA,EAAI,GAAI,GAAA,CAAA;AAAA,MAC7F,eAAA,EAAiB,QAAQ,eAAA,IAAmB,OAAA;AAAA,MAC5C,MAAA,EAAQ,QAAQ,MAAA,IAAU,EAAE,SAAS,OAAA,EAAS,UAAA,EAAY,EAAC,EAAE;AAAA,MAC7D,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,CAAA,GAAI,EAAA,GAAK;AAAA;AAAA,KACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAA,CAAe,MAAc,MAAA,EAA6C;AACxE,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,MAAM,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,IAAA,EAAuC;AAExD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAClC,IAAA,IAAI,MAAA,IAAU,KAAK,GAAA,EAAI,GAAI,OAAO,SAAA,GAAY,IAAA,CAAK,QAAQ,QAAA,EAAU;AACnE,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAChB;AAGA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,IAAI,QAAA,IAAY,CAAC,MAAA,EAAQ;AACvB,MAAA,OAAO,QAAA;AAAA,IACT;AAGA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC1C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAMA,SAAAA,GAAW,MAAM,YAAA,EAAa;AACpC,MAAA,IAAA,CAAK,aAAA,CAAc,MAAMA,SAAQ,CAAA;AACjC,MAAA,OAAOA,SAAAA;AAAA,IACT;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,WAAW,IAAI,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,IAAI,CAAA,4BAAA,CAA8B,CAAA;AAAA,IACjE;AAGA,IAAA,MAAMA,SAAAA,GAAW,OAAO,MAAA,KAAW,QAAA,GAAW,MAAM,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA;AAGhH,IAAA,IAAIA,UAAS,OAAA,EAAS;AACpB,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,YAAA,CAAaA,UAAS,OAAO,CAAA;AAC7D,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,YAAA,EAAcA,SAAQ,CAAA;AAC1D,MAAA,IAAA,CAAK,aAAA,CAAc,MAAM,MAAM,CAAA;AAC/B,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,aAAA,CAAc,MAAMA,SAAQ,CAAA;AACjC,IAAA,OAAOA,SAAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAc,aAAaC,KAAAA,EAAuC;AAChE,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAIA,KAAAA,GAAO,CAAA,EAAG,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAA;AAG9E,IAAA,IAAI,OAAO,YAAY,WAAA,KAAgB,OAAA,CAAQ,UAAU,IAAA,IAAQ,OAAA,CAAQ,UAAU,GAAA,CAAA,EAAM;AAEvF,MAAA,MAAMC,GAAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,MAAA,MAAM,OAAA,GAAU,MAAMA,GAAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,MAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B;AAGA,IAAA,IAAID,MAAK,UAAA,CAAW,SAAS,KAAKA,KAAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7D,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAMA,KAAI,CAAA;AACjC,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgCA,KAAI,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MAChF;AACA,MAAA,OAAO,SAAS,IAAA,EAAK;AAAA,IACvB;AAGA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,2BAA2B,QAAQ,CAAA,qGAAA;AAAA,KAErC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAe,MAAA,EAAuD;AAClF,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,CAAO,GAAA,EAAK;AAAA,MACvC,SAAS,MAAA,CAAO;AAAA,KACjB,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,6BAAA,EAAgC,MAAA,CAAO,GAAG,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACtF;AAEA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAAc,MAAcD,SAAAA,EAAgC;AAClE,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAA,EAAMA,SAAQ,CAAA;AAClC,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,IAAA,EAAM;AAAA,MACnB,IAAA,EAAMA,SAAAA;AAAA,MACN,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,CAAgB,MAAsB,SAAA,EAA2C;AACvF,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,GAAG,SAAA;AAAA,MACH,YAAY,EAAE,GAAG,KAAK,UAAA,EAAY,GAAG,UAAU,UAAA,EAAW;AAAA,MAC1D,QAAQ,EAAE,GAAG,KAAK,MAAA,EAAQ,GAAG,UAAU,MAAA,EAAO;AAAA,MAC9C,QAAQ,EAAE,GAAG,KAAK,MAAA,EAAQ,GAAG,UAAU,MAAA;AAAO,KAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAA,EAAqB;AAC9B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,IACxB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAA,CAAa,IAAA,EAAc,YAAA,EAA4D;AAC3F,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,OAAOA,SAAAA,CAAS,UAAA,CAAW,IAAI,CAAA,IAAK,IAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,YAAA,EAAqE;AACvF,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,OAAOA,SAAAA,CAAS,UAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAiB,OAAA,EAAwB,YAAA,EAAuD;AACpG,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,IAAI,OAAA,GAAU,MAAA,CAAO,MAAA,CAAOA,SAAAA,CAAS,UAAU,CAAA;AAG/C,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,QAAQ,QAAQ,CAAA;AAAA,IACjE;AAGA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAY;AACxC,MAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,QAChB,CAAC,MACC,CAAA,CAAE,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,KAAK,CAAA,IACnC,CAAA,CAAE,aAAa,WAAA,EAAY,CAAE,SAAS,KAAK,CAAA,IAC3C,EAAE,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,KAAK;AAAA,OAC/C;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG;AACtC,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,YAAA,EAA0C;AACrE,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,IAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,MAAA,CAAOA,SAAAA,CAAS,UAAU,CAAA,EAAG;AAC1D,MAAA,UAAA,CAAW,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,IACnC;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAE,IAAA,EAAK;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAA,CAAS,IAAA,EAAc,YAAA,EAAwD;AACnF,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,OAAOA,SAAAA,CAAS,MAAA,CAAO,IAAI,CAAA,IAAK,IAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,YAAA,EAAiE;AAC/E,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,OAAOA,SAAAA,CAAS,MAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,OAAA,EAAwB,YAAA,EAAmD;AAC5F,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,IAAI,OAAA,GAAU,MAAA,CAAO,MAAA,CAAOA,SAAAA,CAAS,MAAM,CAAA;AAG3C,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,KAAa,QAAQ,QAAQ,CAAA;AAAA,IACjE;AAGA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAY;AACxC,MAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,QAChB,CAAC,MACC,CAAA,CAAE,IAAA,CAAK,aAAY,CAAE,QAAA,CAAS,KAAK,CAAA,IACnC,CAAA,CAAE,aAAa,WAAA,EAAY,CAAE,SAAS,KAAK,CAAA,IAC3C,EAAE,WAAA,EAAa,WAAA,EAAY,CAAE,QAAA,CAAS,KAAK;AAAA,OAC/C;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,GAAQ,CAAA,EAAG;AACtC,MAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAmB,YAAA,EAA0C;AACjE,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AACrF,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAOA,SAAAA,CAAS,MAAM,CAAA,EAAG;AAClD,MAAA,UAAA,CAAW,GAAA,CAAI,MAAM,QAAQ,CAAA;AAAA,IAC/B;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAE,IAAA,EAAK;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,4BAAA,CAA6B,IAAA,EAAc,YAAA,EAA8C;AAC7F,IAAA,MAAMA,SAAAA,GAAW,YAAA,IAAgB,IAAA,CAAK,OAAA,CAAQ,eAAA;AAC9C,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,CAAa,MAAMA,SAAQ,CAAA;AAExD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,IAAI,CAAA,yBAAA,EAA4BA,SAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IAC3E;AAEA,IAAA,MAAM,eAA+B,EAAC;AAGtC,IAAA,KAAA,MAAW,OAAA,IAAW,SAAA,CAAU,YAAA,CAAa,UAAA,EAAY;AACvD,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,4BAAA,CAA6B,SAASA,SAAQ,CAAA;AAC1E,MAAA,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,SAAA;AAAA,MACZ,QAAA,EAAAA,SAAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAA,CAAyB,IAAA,EAAc,YAAA,EAA8C;AACzF,IAAA,MAAMA,SAAAA,GAAW,YAAA,IAAgB,IAAA,CAAK,OAAA,CAAQ,eAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,MAAMA,SAAQ,CAAA;AAEhD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,yBAAA,EAA4BA,SAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IACvE;AAEA,IAAA,MAAM,eAA+B,EAAC;AAGtC,IAAA,KAAA,MAAW,QAAA,IAAY,KAAA,CAAM,YAAA,CAAa,UAAA,EAAY;AACpD,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,4BAAA,CAA6B,UAAUA,SAAQ,CAAA;AAC3E,MAAA,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,IAC5B;AAGA,IAAA,KAAA,MAAW,SAAA,IAAa,KAAA,CAAM,YAAA,CAAa,MAAA,EAAQ;AACjD,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,wBAAA,CAAyB,WAAWA,SAAQ,CAAA;AACxE,MAAA,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAAA,SAAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,QAAA,EAAkC;AACnD,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAE7B,IAAA,SAAS,YAAY,IAAA,EAA0B;AAE7C,MAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,MAAA,IAAI,kBAAkB,UAAA,EAAY;AAChC,QAAA,KAAA,MAAW,GAAA,IAAO,UAAA,CAAW,YAAA,CAAa,GAAA,EAAK;AAC7C,UAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,QACd;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,YAAA,EAAc;AACrC,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MACnB;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,QAAQ,CAAA;AACpB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,EAAK;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,QAAA,EAAkC;AAC7C,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAE9B,IAAA,SAAS,aAAa,IAAA,EAA0B;AAE9C,MAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,MAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,KAAA,EAAO;AACnC,QAAA,KAAA,CAAM,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,MACrB;AAGA,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,YAAA,EAAc;AACrC,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,EAAK;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,qBAAA,CAAsB,IAAA,EAAc,eAAA,EAAyB,YAAA,EAAyC;AAC1G,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,CAAa,MAAM,YAAY,CAAA;AAC5D,IAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AAEvB,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,SAAA,CAAU,OAAA,EAAS,eAAe,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBAAA,CAAoB,QAAgB,QAAA,EAA2B;AACrE,IAAA,MAAM,CAAC,aAAa,WAAW,CAAA,GAAI,OAAO,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAC/D,IAAA,MAAM,CAAC,eAAe,aAAa,CAAA,GAAI,SAAS,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AAGrE,IAAA,IAAI,WAAA,KAAgB,eAAe,OAAO,KAAA;AAG1C,IAAA,OAAO,WAAA,IAAe,aAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,gBAAgB,YAAA,EAOnB;AACD,IAAA,MAAMA,YAAW,MAAM,IAAA,CAAK,aAAa,YAAA,IAAgB,IAAA,CAAK,QAAQ,eAAe,CAAA;AAErF,IAAA,OAAO;AAAA,MACL,MAAMA,SAAAA,CAAS,IAAA;AAAA,MACf,SAASA,SAAAA,CAAS,OAAA;AAAA,MAClB,aAAaA,SAAAA,CAAS,WAAA;AAAA,MACtB,cAAA,EAAgB,MAAA,CAAO,IAAA,CAAKA,SAAAA,CAAS,UAAU,CAAA,CAAE,MAAA;AAAA,MACjD,UAAA,EAAY,MAAA,CAAO,IAAA,CAAKA,SAAAA,CAAS,MAAM,CAAA,CAAE,MAAA;AAAA,MACzC,UAAA,EAAY,MAAA,CAAO,IAAA,CAAKA,SAAAA,CAAS,MAAM,CAAA,CAAE;AAAA,KAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAgC;AAC9B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA;AAAA,EAC1C;AACF;AASO,IAAM,QAAA,GAAW,IAAI,eAAA;AAKrB,SAAS,sBAAsB,OAAA,EAAmD;AACvF,EAAA,OAAO,IAAI,gBAAgB,OAAO,CAAA;AACpC;ACreO,IAAM,iBAAN,MAAqB;AAAA,EACT,OAAA;AAAA,EACA,eAAA;AAAA,EACT,QAAA,GAAiC,IAAA;AAAA,EACjC,YAAA;AAAA,EAER,WAAA,CAAY,eAAA,EAAkC,OAAA,GAA4B,EAAC,EAAG;AAC5E,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,aAAA,EAAe,QAAQ,aAAA,IAAiB,sBAAA;AAAA,MACxC,SAAA,EAAW,QAAQ,SAAA,IAAa,YAAA;AAAA,MAChC,QAAA,EAAU,QAAQ,QAAA,IAAY,WAAA;AAAA,MAC9B,SAAA,EAAW,QAAQ,SAAA,IAAa,KAAA;AAAA,MAChC,MAAA,EAAQ,QAAQ,MAAA,IAAU,KAAA;AAAA,MAC1B,gBAAA,EAAkB,QAAQ,gBAAA,IAAoB,KAAA;AAAA,MAC9C,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAgB;AAAC,KACzC;AACA,IAAA,IAAA,CAAK,YAAA,GAAoB,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,IAAO,iBAAiB,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,gBAAA,CAAiB,IAAA,EAAc,YAAA,EAA+C;AAClF,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,OAAA,EAAS,KAAA;AAAA,MACT,OAAO,EAAC;AAAA,MACR,iBAAiB,EAAC;AAAA,MAClB,QAAQ,EAAC;AAAA,MACT,UAAU;AAAC,KACb;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,4BAAA,CAA6B,MAAM,YAAY,CAAA;AAG3F,MAAA,MAAM,cAAA,GAAiB,KAAK,OAAA,CAAQ,gBAAA,GAAmB,CAAC,QAAQ,CAAA,GAAI,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAGrG,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,kBAAA,GAAqB,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,KAAK,QAAA,EAAU,UAAA,IAAc,EAAE,CAAC,CAAA;AAG/E,MAAA,MAAM,aAAA,GAAgB,KAAK,OAAA,CAAQ,SAAA,GAC/B,iBACA,cAAA,CAAe,MAAA,CAAO,CAAC,IAAA,KAAS;AAC9B,QAAA,MAAM,MAAM,IAAA,CAAK,UAAA;AACjB,QAAA,IAAI,kBAAA,CAAmB,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AACpC,UAAA,MAAA,CAAO,QAAA,CAAS,IAAA;AAAA,YACd,CAAA,WAAA,EAAc,IAAI,IAAI,CAAA,6DAAA;AAAA,WACxB;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAGL,MAAA,MAAM,aAA8B,EAAC;AACrC,MAAA,MAAM,sBAA4C,EAAC;AAEnD,MAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,QAAA,MAAM,YAAY,IAAA,CAAK,UAAA;AACvB,QAAA,MAAM,eAAe,MAAM,IAAA,CAAK,qBAAA,CAAsB,SAAA,EAAW,KAAK,QAAQ,CAAA;AAC9E,QAAA,UAAA,CAAW,IAAA,CAAK,GAAG,YAAY,CAAA;AAE/B,QAAA,mBAAA,CAAoB,IAAA,CAAK;AAAA,UACvB,MAAM,SAAA,CAAU,IAAA;AAAA,UAChB,SAAS,SAAA,CAAU,OAAA;AAAA,UACnB,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UACpC,KAAA,EAAO,YAAA,CAAa,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,IAAI;AAAA,SAC5E,CAAA;AAAA,MACH;AAGA,MAAA,MAAA,CAAO,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,kBAAA,CAAmB,QAAQ,CAAA;AAGzE,MAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,QAAA,MAAA,CAAO,KAAA,GAAQ,UAAA,CAAW,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,IAAI,CAAA;AACjF,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,MAAM,IAAA,CAAK,kBAAkB,UAAU,CAAA;AACvC,QAAA,MAAA,CAAO,KAAA,GAAQ,UAAA,CAAW,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,IAAI,CAAA;AAGjF,QAAA,KAAA,MAAW,aAAa,mBAAA,EAAqB;AAC3C,UAAA,IAAA,CAAK,QAAA,CAAU,UAAA,CAAW,SAAA,CAAU,IAAI,CAAA,GAAI,SAAA;AAAA,QAC9C;AACA,QAAA,MAAM,KAAK,YAAA,EAAa;AAExB,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,MACnB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAA,CAAO,KAAK,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAA,CAAsB,SAAA,EAAgC,SAAA,EAA6C;AAC/G,IAAA,MAAM,aAA8B,EAAC;AACrC,IAAA,MAAM,eAAoB,IAAA,CAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,UAAU,IAAI,CAAA;AAGzE,IAAA,UAAA,CAAW,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,cAAc,CAAA;AAGrD,IAAA,KAAA,MAAW,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClC,MAAA,MAAM,aAAkB,IAAA,CAAA,IAAA,CAAK,YAAA,EAAmB,IAAA,CAAA,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AACnE,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAK,IAAI,CAAA;AACrD,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AAErD,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAA,CAAa,IAAA,EAAc,YAAA,EAA+C;AAC9E,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,OAAA,EAAS,KAAA;AAAA,MACT,OAAO,EAAC;AAAA,MACR,iBAAiB,EAAC;AAAA,MAClB,QAAQ,EAAC;AAAA,MACT,UAAU;AAAC,KACb;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,wBAAA,CAAyB,MAAM,YAAY,CAAA;AAGvF,MAAA,MAAM,QAAA,GAAW,KAAK,OAAA,CAAQ,gBAAA,GAAmB,CAAC,QAAQ,CAAA,GAAI,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAI/F,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,CAAC,IAAA,KAAS;AACvC,QAAA,MAAM,MAAM,IAAA,CAAK,UAAA;AAEjB,QAAA,OAAO,eAAA,IAAmB,GAAA,IAAO,cAAA,IAAkB,GAAA,IAAO,YAAa,GAAA,CAAwB,YAAA;AAAA,MACjG,CAAC,CAAA;AACD,MAAA,MAAM,UAAA,GAAa,SAAS,MAAA,CAAO,CAAC,SAAS,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAC,CAAA;AAGnE,MAAA,MAAM,KAAK,YAAA,EAAa;AAGxB,MAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,QAAA,MAAM,YAAY,IAAA,CAAK,UAAA;AACvB,QAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,QAAA,EAAU,UAAA,CAAW,UAAU,IAAI,CAAA;AAElE,QAAA,IAAI,iBAAA,IAAqB,CAAC,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW;AAChD,UAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,WAAA,EAAc,SAAA,CAAU,IAAI,CAAA,gCAAA,CAAkC,CAAA;AACnF,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,kBAAkB,MAAM,IAAA,CAAK,iBAAiB,SAAA,CAAU,IAAA,EAAM,KAAK,QAAQ,CAAA;AACjF,QAAA,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,GAAG,eAAA,CAAgB,KAAK,CAAA;AAC1C,QAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAM,CAAA;AAC5C,QAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,GAAG,eAAA,CAAgB,QAAQ,CAAA;AAAA,MAClD;AAGA,MAAA,MAAM,aAA8B,EAAC;AACrC,MAAA,MAAM,kBAAoC,EAAC;AAE3C,MAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,QAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,MAAM,IAAI,CAAA;AAEtD,QAAA,IAAI,aAAA,IAAiB,CAAC,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW;AAC5C,UAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,CAAA,gCAAA,CAAkC,CAAA;AAC3E,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,WAAW,MAAM,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,KAAK,QAAQ,CAAA;AAClE,QAAA,UAAA,CAAW,IAAA,CAAK,GAAG,QAAQ,CAAA;AAE3B,QAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,UACnB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,WAAA,EAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,UACpC,KAAA,EAAO,QAAA,CAAS,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,IAAI,CAAA;AAAA,UACvE,QAAQ,KAAA,CAAM;AAAA,SACf,CAAA;AAAA,MACH;AAGA,MAAA,MAAA,CAAO,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,kBAAA,CAAmB,QAAQ,CAAA;AAGzE,MAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,QAAA,MAAA,CAAO,MAAM,IAAA,CAAK,GAAG,UAAA,CAAW,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS,OAAO,EAAE,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AACxF,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,MAAM,IAAA,CAAK,kBAAkB,UAAU,CAAA;AACvC,QAAA,MAAA,CAAO,MAAM,IAAA,CAAK,GAAG,UAAA,CAAW,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS,OAAO,EAAE,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AAGxF,QAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACnC,UAAA,IAAA,CAAK,QAAA,CAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA,QACtC;AACA,QAAA,MAAM,KAAK,YAAA,EAAa;AAExB,QAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,MACnB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAA,CAAO,KAAK,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAA,CAAkB,KAAA,EAAwB,SAAA,EAA6C;AACnG,IAAA,MAAM,aAA8B,EAAC;AACrC,IAAA,MAAM,WAAgB,IAAA,CAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,MAAM,IAAI,CAAA;AAG7D,IAAA,UAAA,CAAW,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AAGjD,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,UAAA,GAAkB,IAAA,CAAA,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,IAAI,CAAA;AAChD,MAAA,MAAM,SAAA,GAAiB,aAAQ,UAAU,CAAA;AAGzC,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA,UAAA,CAAW,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAW,CAAA;AAAA,MACpD;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,gBAAA,CAAiB,KAAK,IAAI,CAAA;AACrD,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,eAAA,CAAgB,OAAO,CAAA;AAErD,MAAA,UAAA,CAAW,IAAA,CAAK;AAAA,QACd,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBAAmB,IAAA,EAAsC;AAC7D,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,OAAA,EAAS,KAAA;AAAA,MACT,OAAO,EAAC;AAAA,MACR,iBAAiB,EAAC;AAAA,MAClB,QAAQ,EAAC;AAAA,MACT,UAAU;AAAC,KACb;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,EAAU,UAAA,CAAW,IAAI,CAAA;AAEhD,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAA,WAAA,EAAc,IAAI,CAAA,kBAAA,CAAoB,CAAA;AACzD,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,cAAA,CAAe,MAAM,WAAW,CAAA;AAC9D,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,kBAAA,EAAqB,IAAI,4BAA4B,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC/F,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;AACxB,QAAA,KAAA,MAAW,QAAA,IAAY,UAAU,KAAA,EAAO;AACtC,UAAA,MAAME,QAAA,CAAG,MAAA,CAAO,QAAQ,CAAA,CAAE,MAAM,MAAM;AACpC,YAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAE,CAAA;AAAA,UAC3D,CAAC,CAAA;AAAA,QACH;AAGA,QAAA,MAAM,YAAA,GAAoB,IAAA,CAAA,OAAA,CAAQ,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AACpD,QAAA,MAAMA,QAAA,CAAG,KAAA,CAAM,YAAY,CAAA,CAAE,MAAM,MAAM;AAAA,QAEzC,CAAC,CAAA;AAGD,QAAA,OAAO,IAAA,CAAK,QAAA,CAAU,UAAA,CAAW,IAAI,CAAA;AACrC,QAAA,MAAM,KAAK,YAAA,EAAa;AAAA,MAC1B;AAEA,MAAA,MAAA,CAAO,QAAQ,SAAA,CAAU,KAAA;AACzB,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,IACnB,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAA,CAAO,KAAK,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,IAAA,EAAsC;AACzD,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC5B,OAAA,EAAS,KAAA;AAAA,MACT,OAAO,EAAC;AAAA,MACR,iBAAiB,EAAC;AAAA,MAClB,QAAQ,EAAC;AAAA,MACT,UAAU;AAAC,KACb;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,YAAA,EAAa;AACxB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,EAAU,MAAA,CAAO,IAAI,CAAA;AAE5C,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAI,CAAA,kBAAA,CAAoB,CAAA;AACrD,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,cAAA,CAAe,MAAM,OAAO,CAAA;AAC1D,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,kBAAA,EAAqB,IAAI,4BAA4B,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC/F,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;AACxB,QAAA,KAAA,MAAW,QAAA,IAAY,UAAU,KAAA,EAAO;AACtC,UAAA,MAAMA,QAAA,CAAG,MAAA,CAAO,QAAQ,CAAA,CAAE,MAAM,MAAM;AACpC,YAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAE,CAAA;AAAA,UAC3D,CAAC,CAAA;AAAA,QACH;AAGA,QAAA,MAAM,QAAA,GAAgB,IAAA,CAAA,OAAA,CAAQ,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AAChD,QAAA,MAAMA,QAAA,CAAG,GAAG,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,MAAM;AACrD,UAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,4BAAA,EAA+B,QAAQ,CAAA,CAAE,CAAA;AAAA,QAChE,CAAC,CAAA;AAGD,QAAA,OAAO,IAAA,CAAK,QAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AACjC,QAAA,MAAM,KAAK,YAAA,EAAa;AAAA,MAC1B;AAEA,MAAA,MAAA,CAAO,QAAQ,SAAA,CAAU,KAAA;AACzB,MAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AAAA,IACnB,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,MAAA,CAAO,KAAK,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,oBAAoB,QAAA,EAAwC;AAClE,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,MAAM,SAAyB,EAAC;AAEhC,IAAA,SAAS,SAAS,IAAA,EAA0B;AAC1C,MAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AACpD,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAGZ,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,YAAA,EAAc;AACnC,QAAA,QAAA,CAAS,GAAG,CAAA;AAAA,MACd;AAEA,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAClB;AAEA,IAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,iBAAiB,QAAA,EAAmC;AAEhE,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,IAAK,QAAA,CAAS,UAAA,CAAW,GAAG,CAAA,IAAK,YAAA,CAAa,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC7F,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AACjD,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,YAAY,OAAO,CAAA;AACrD,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,2BAAA,EAA8B,UAAU,CAAA,GAAA,EAAM,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,UACpG,EAAE,OAAO,KAAA;AAAM,SACjB;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,SAAS,UAAA,CAAW,SAAS,KAAK,CAAC,QAAA,CAAS,UAAA,CAAW,UAAU,CAAA,EAAG;AACvE,MAAA,MAAM,YAAA,GAAoB,IAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,QAAQ,CAAA;AACzD,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,cAAc,OAAO,CAAA;AACvD,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,qBAAA,EAAwB,YAAY,CAAA,GAAA,EAAM,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,UAChG,EAAE,OAAO,KAAA;AAAM,SACjB;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAQ,CAAA;AACrC,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MACnE;AACA,MAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,6BAAA,EAAgC,QAAQ,CAAA,GAAA,EAAM,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QACpG,EAAE,OAAO,KAAA;AAAM,OACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,OAAA,EAAyB;AAC/C,IAAA,IAAI,MAAA,GAAS,OAAA;AAEb,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,YAAY,CAAA,EAAG;AACpE,MAAA,MAAA,GAAS,MAAA,CAAO,QAAQ,IAAI,MAAA,CAAO,KAAK,GAAG,CAAA,EAAA,CAAA,EAAM,GAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IAC9D;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,UAAA,EAA4C;AAE1E,IAAA,MAAM,MAAA,GAAS,CAAC,GAAG,UAAU,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC5C,MAAA,IAAI,EAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,SAAS,OAAO,EAAA;AACrD,MAAA,IAAI,EAAE,IAAA,KAAS,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,SAAS,OAAO,CAAA;AACrD,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,KAAA,MAAW,MAAM,MAAA,EAAQ;AACvB,MAAA,IAAI,EAAA,CAAG,SAAS,OAAA,EAAS;AACvB,QAAA,MAAMA,SAAG,KAAA,CAAM,EAAA,CAAG,MAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,MAC7C,WAAW,EAAA,CAAG,IAAA,KAAS,OAAA,IAAW,EAAA,CAAG,YAAY,MAAA,EAAW;AAE1D,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW;AAC3B,UAAA,IAAI;AACF,YAAA,MAAMA,QAAA,CAAG,MAAA,CAAO,EAAA,CAAG,IAAI,CAAA;AACvB,YAAA;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AACA,QAAA,MAAMA,SAAG,SAAA,CAAU,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,SAAS,OAAO,CAAA;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAAA,CAAe,IAAA,EAAc,IAAA,EAAgD;AACzF,IAAA,MAAM,aAAuB,EAAC;AAE9B,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,OAAO,UAAA;AAG3B,IAAA,KAAA,MAAW,CAAC,WAAW,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACtE,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,SAAS,SAAS,CAAA;AAC9D,MAAA,IAAI,CAAC,QAAA,EAAU;AAEf,MAAA,IAAI,SAAS,WAAA,IAAe,QAAA,CAAS,aAAa,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,EAAG;AAC3E,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,MAC3B;AACA,MAAA,IAAI,SAAS,OAAA,IAAW,QAAA,CAAS,aAAa,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AACnE,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AAAA,MAC3B;AAAA,IACF;AAGA,IAAA,IAAI,SAAS,WAAA,EAAa;AACxB,MAAA,KAAA,MAAW,CAAC,UAAU,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AACxE,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,eAAA,CAAgB,aAAa,QAAQ,CAAA;AAChE,QAAA,IAAI,CAAC,OAAA,EAAS;AAEd,QAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,EAAG;AAClD,UAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAc,YAAA,GAA8B;AAC1C,IAAA,IAAI,KAAK,QAAA,EAAU;AAEnB,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,IAAA,CAAK,cAAc,OAAO,CAAA;AAC5D,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,IACpC,CAAA,CAAA,MAAQ;AAEN,MAAA,IAAA,CAAK,QAAA,GAAW;AAAA,QACd,OAAA,EAAS,OAAA;AAAA,QACT,YAAY,EAAC;AAAA,QACb,QAAQ,EAAC;AAAA,QACT,QAAQ;AAAC,OACX;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,YAAA,GAA8B;AAC1C,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAEpB,IAAA,MAAMA,QAAA,CAAG,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAAsC;AAC1C,IAAA,MAAM,KAAK,YAAA,EAAa;AACxB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,GAGH;AACD,IAAA,MAAM,KAAK,YAAA,EAAa;AACxB,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,SAAU,UAAU,CAAA;AAAA,MACnD,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,SAAU,MAAM;AAAA,KAC7C;AAAA,EACF;AACF;AASO,SAAS,eAAA,CAAgB,iBAAkC,OAAA,EAA4C;AAC5G,EAAA,OAAO,IAAI,cAAA,CAAe,eAAA,EAAiB,OAAO,CAAA;AACpD;;;ACzoBO,IAAM,qBAAA,GAAwC;AAAA,EACnD,OAAA,EAAS,oDAAA;AAAA,EACT,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,uCAAA;AAAA,EACb,OAAA,EAAS,qCAAA;AAAA,EACT,UAAA,EAAY;AAAA;AAAA,IAEV,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,QAAA;AAAA,MACb,WAAA,EAAa,8CAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,OAAA,EAAQ;AAAA,QACzC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa,IAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACR;AAAA,IACA,aAAA,EAAe;AAAA,MACb,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,aAAA;AAAA,MACb,WAAA,EAAa,sCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC5C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,YAAA;AAAA,MACb,WAAA,EAAa,uCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC3C,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAQ;AAAA,QAC5C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,QAAA;AAAA,MACb,WAAA,EAAa,8BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,OAAA,EAAQ;AAAA,QACzC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,UAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,UAAA;AAAA,MACb,WAAA,EAAa,mCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC1C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,QAAA;AAAA,MACb,WAAA,EAAa,iCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,cAAA;AAAA,MACV,WAAA,EAAa,QAAA;AAAA,MACb,WAAA,EAAa,oCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC7C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,cAAA;AAAA,MACV,WAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAa,oCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,WAAA,EAAY;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,cAAA;AAAA,MACV,WAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAa,yCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,WAAA,EAAY;AAAA,QACtC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,cAAA;AAAA,MACV,WAAA,EAAa,SAAA;AAAA,MACb,WAAA,EAAa,8BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,WAAA,EAAY;AAAA,QACzC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAa,qCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,WAAA,EAAY;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,UAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,UAAA;AAAA,MACb,WAAA,EAAa,6BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC1C,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAY;AAAA,QAClD,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC5C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAA,EAAiB,WAAW,CAAA;AAAA,QAClC,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,QAAA;AAAA,MACb,WAAA,EAAa,2BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC/C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,UAAA,EAAY,CAAC,QAAQ;AAAA,OACvB;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,UAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,UAAA;AAAA,MACb,WAAA,EAAa,2CAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAY;AAAA,QAChD,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAY;AAAA,QAClD,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAa,gDAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,WAAA,EAAY;AAAA,QACtC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,OAAA,EAAQ;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAa,8BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,WAAA,EAAY;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,WAAA;AAAA,MACb,WAAA,EAAa,2BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC3C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAa,6BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,WAAA,EAAY;AAAA,QACtC,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC1C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAa,aAAA;AAAA,MACb,WAAA,EAAa,6BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC7C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,YAAA;AAAA,MACV,WAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAa,2BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,WAAA,EAAY;AAAA,QACtC,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC1C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAa,iCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,WAAA,EAAY;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAa,wBAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,WAAA,EAAY;AAAA,QACtC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,WAAA;AAAA,MACb,WAAA,EAAa,4BAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC3C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,SAAA;AAAA,MACb,WAAA,EAAa,kBAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,WAAA,EAAY;AAAA,QACzC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAGA,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa,YAAA;AAAA,MACb,WAAA,EAAa,8DAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC3C,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,OAAA,EAAQ;AAAA,QAC5C,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAY;AAAA,QAClD,EAAE,IAAA,EAAM,yBAAA,EAA2B,IAAA,EAAM,WAAA,EAAY;AAAA,QACrD,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAA,EAAiB,uBAAuB,CAAA;AAAA,QAC9C,YAAY,CAAC,QAAA,EAAU,YAAA,EAAc,QAAA,EAAU,YAAY,MAAM;AAAA,OACnE;AAAA,MACA,WAAA,EAAa,IAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACR;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAa,uBAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,WAAA,EAAY;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA,KACf;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAa,wBAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,WAAA,EAAY;AAAA,QACtC,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC1C,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAe,CAAA;AAAA,QACrB,YAAY;AAAC,OACf;AAAA,MACA,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,MAAA,EAAQ;AAAA;AAAA,IAEN,kBAAA,EAAoB;AAAA,MAClB,IAAA,EAAM,kBAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,SAAA;AAAA,MACV,WAAA,EAAa,kBAAA;AAAA,MACb,WAAA,EAAa,mDAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAM,WAAA,EAAY;AAAA,QACjD,EAAE,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,MAAA,EAAO;AAAA,QACjD,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,WAAA,EAAY;AAAA,QACzC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,WAAA,EAAY;AAAA,QACxC,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC5C,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,WAAA,EAAY;AAAA,QACzC,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,MAAA,EAAO;AAAA,QACxC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,QACtC,UAAA,EAAY,CAAC,QAAA,EAAU,MAAA,EAAQ,eAAe,SAAS,CAAA;AAAA,QACvD,QAAQ;AAAC,OACX;AAAA,MACA,aAAA,EAAe;AAAA,QACb,YAAA,EAAc,GAAA;AAAA,QACd,YAAA,EAAc,EAAA;AAAA,QACd,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,IAAA,EAAM;AAAA,KACR;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,IAAA,EAAM,YAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa,sBAAA;AAAA,MACb,WAAA,EAAa,oDAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC3C,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC9C,EAAE,IAAA,EAAM,wBAAA,EAA0B,IAAA,EAAM,WAAA,EAAY;AAAA,QACpD,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAY;AAAA,QAChD,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,QAAA,EAAS;AAAA,QACzC,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAA,EAAiB,iBAAA,EAAmB,uBAAuB,KAAK,CAAA;AAAA,QACtE,UAAA,EAAY,CAAC,QAAA,EAAU,YAAA,EAAc,YAAY,OAAO,CAAA;AAAA,QACxD,QAAQ;AAAC,OACX;AAAA,MACA,aAAA,EAAe;AAAA,QACb,eAAA,EAAiB,IAAA;AAAA,QACjB,cAAA,EAAgB;AAAA;AAClB,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,IAAA,EAAM,gBAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,WAAA,EAAa,gBAAA;AAAA,MACb,WAAA,EAAa,wCAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC/C,EAAE,IAAA,EAAM,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAY;AAAA,QAChD,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC9C,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,QACtC,UAAA,EAAY,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,aAAa,CAAA;AAAA,QACxD,QAAQ;AAAC,OACX;AAAA,MACA,aAAA,EAAe;AAAA,QACb,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,IAAA,EAAM,cAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa,cAAA;AAAA,MACb,WAAA,EAAa,mDAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC7C,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC/C,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC7C,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC5C,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC7C,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,WAAA,EAAY;AAAA,QAClD,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,QACtC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAA,EAAiB,iBAAiB,CAAA;AAAA,QACxC,YAAY,CAAC,QAAA,EAAU,UAAU,MAAA,EAAQ,MAAA,EAAQ,cAAc,QAAQ,CAAA;AAAA,QACvE,QAAQ;AAAC,OACX;AAAA,MACA,eAAe;AAAC,KAClB;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa,WAAA;AAAA,MACb,WAAA,EAAa,8CAAA;AAAA,MACb,KAAA,EAAO;AAAA,QACL,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC1C,EAAE,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,MAAA,EAAO;AAAA,QAC1C,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC7C,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC7C,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,WAAA,EAAY;AAAA,QAC5C,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,MAAA,EAAO;AAAA,QACvC,EAAE,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,QAAA;AAAS,OACrC;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,GAAA,EAAK,CAAC,eAAA,EAAiB,uBAAA,EAAyB,yBAAyB,CAAA;AAAA,QACzE,YAAY,CAAC,QAAA,EAAU,cAAc,QAAA,EAAU,UAAA,EAAY,QAAQ,MAAM,CAAA;AAAA,QACzE,QAAQ;AAAC,OACX;AAAA,MACA,aAAA,EAAe;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV,kBAAA,EAAoB,IAAA;AAAA,QACpB,mBAAA,EAAqB;AAAA;AACvB;AACF,GACF;AAAA,EACA,QAAQ;AACV","file":"chunk-GUFHFEPZ.js","sourcesContent":["/**\n * Registry Manager\n *\n * Core registry management for Prism components and blocks.\n * Handles loading, merging, querying, and caching of registry data.\n *\n * Key Features:\n * - Multiple registry sources (local, remote, merged)\n * - Automatic dependency resolution\n * - Version management and compatibility checking\n * - Caching with configurable TTL\n *\n * @module registry/manager\n */\n\nimport type { RegistrySchema, ComponentDefinition, RegistryConfig, RemoteRegistryConfig } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface RegistryManagerOptions {\n /** Base directory for local registries */\n baseDir?: string;\n /** Default registry name */\n defaultRegistry?: string;\n /** Registry configuration */\n config?: RegistryConfig;\n /** Cache TTL in milliseconds (default: 5 minutes) */\n cacheTtl?: number;\n}\n\nexport interface SearchOptions {\n /** Filter by category */\n category?: string;\n /** Search query */\n query?: string;\n /** Include dependencies in results */\n includeDependencies?: boolean;\n /** Limit results */\n limit?: number;\n}\n\nexport interface ResolvedItem {\n /** Item definition */\n definition: ComponentDefinition | BlockDefinition;\n /** Registry source */\n registry: string;\n /** Resolved dependencies */\n dependencies: ResolvedItem[];\n}\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n}\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\n/**\n * Registry manager for Prism design system.\n *\n * Manages component and block registries with support for:\n * - Local and remote registry sources\n * - Registry merging and extension\n * - Dependency resolution\n * - Caching with TTL\n *\n * @example\n * ```typescript\n * const manager = new RegistryManager({\n * baseDir: './prism',\n * config: {\n * default: 'prism',\n * registries: {\n * prism: 'https://registry.prism.dev',\n * custom: './custom-registry.json',\n * },\n * },\n * });\n *\n * // Get a component\n * const button = await manager.getComponent('button');\n *\n * // Search for components\n * const inputs = await manager.searchComponents({ category: 'inputs' });\n *\n * // Resolve dependencies\n * const resolved = await manager.resolveDependencies('data-table');\n * ```\n */\nexport class RegistryManager {\n private readonly options: Required<RegistryManagerOptions>;\n private registries: Map<string, RegistrySchema> = new Map();\n private cache: Map<string, CacheEntry<RegistrySchema>> = new Map();\n private loaders: Map<string, () => Promise<RegistrySchema>> = new Map();\n\n constructor(options: RegistryManagerOptions = {}) {\n this.options = {\n baseDir: options.baseDir ?? (typeof process !== 'undefined' && process.cwd ? process.cwd() : '/'),\n defaultRegistry: options.defaultRegistry ?? 'prism',\n config: options.config ?? { default: 'prism', registries: {} },\n cacheTtl: options.cacheTtl ?? 5 * 60 * 1000, // 5 minutes\n };\n }\n\n // ===========================================================================\n // REGISTRY LOADING\n // ===========================================================================\n\n /**\n * Register a custom loader for a registry.\n */\n registerLoader(name: string, loader: () => Promise<RegistrySchema>): void {\n this.loaders.set(name, loader);\n }\n\n /**\n * Load a registry by name.\n */\n async loadRegistry(name: string): Promise<RegistrySchema> {\n // Check cache first\n const cached = this.cache.get(name);\n if (cached && Date.now() - cached.timestamp < this.options.cacheTtl) {\n return cached.data;\n }\n\n // Check if already loaded\n const existing = this.registries.get(name);\n if (existing && !cached) {\n return existing;\n }\n\n // Use custom loader if registered\n const customLoader = this.loaders.get(name);\n if (customLoader) {\n const registry = await customLoader();\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n // Get registry config\n const config = this.options.config.registries[name];\n if (!config) {\n throw new Error(`Registry \"${name}\" not found in configuration`);\n }\n\n // Load based on config type\n const registry = typeof config === 'string' ? await this.loadFromPath(config) : await this.loadFromRemote(config);\n\n // Handle registry extension\n if (registry.extends) {\n const baseRegistry = await this.loadRegistry(registry.extends);\n const merged = this.mergeRegistries(baseRegistry, registry);\n this.cacheRegistry(name, merged);\n return merged;\n }\n\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n /**\n * Load registry from local file path.\n * Uses dynamic import for ESM compatibility across environments.\n *\n * @param path - Relative or absolute path to registry JSON\n * @returns Loaded registry schema\n */\n private async loadFromPath(path: string): Promise<RegistrySchema> {\n const fullPath = path.startsWith('/') ? path : `${this.options.baseDir}/${path}`;\n\n // Check if running in Node.js-like environment with fs access\n if (typeof process !== 'undefined' && (process.versions?.node || process.versions?.bun)) {\n // Dynamic import for Node.js fs module\n const fs = await import('node:fs/promises');\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content) as RegistrySchema;\n }\n\n // In browser/Deno environment, try to fetch if it's a URL\n if (path.startsWith('http://') || path.startsWith('https://')) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${path}: ${response.statusText}`);\n }\n return response.json();\n }\n\n // For browser environment with bundled registries, use custom loader\n throw new Error(\n `Cannot load local file \"${fullPath}\" in browser environment. ` +\n `Register a custom loader with manager.registerLoader() or use a remote URL.`\n );\n }\n\n /**\n * Load registry from remote URL.\n */\n private async loadFromRemote(config: RemoteRegistryConfig): Promise<RegistrySchema> {\n const response = await fetch(config.url, {\n headers: config.headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${config.url}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Cache a loaded registry.\n */\n private cacheRegistry(name: string, registry: RegistrySchema): void {\n this.registries.set(name, registry);\n this.cache.set(name, {\n data: registry,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Merge two registries (base + extension).\n */\n private mergeRegistries(base: RegistrySchema, extension: RegistrySchema): RegistrySchema {\n return {\n ...base,\n ...extension,\n components: { ...base.components, ...extension.components },\n blocks: { ...base.blocks, ...extension.blocks },\n themes: { ...base.themes, ...extension.themes },\n };\n }\n\n /**\n * Clear registry cache.\n */\n clearCache(name?: string): void {\n if (name) {\n this.cache.delete(name);\n } else {\n this.cache.clear();\n }\n }\n\n // ===========================================================================\n // COMPONENT OPERATIONS\n // ===========================================================================\n\n /**\n * Get a component definition by name.\n */\n async getComponent(name: string, registryName?: string): Promise<ComponentDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components[name] ?? null;\n }\n\n /**\n * Get all components from a registry.\n */\n async getComponents(registryName?: string): Promise<Record<string, ComponentDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components;\n }\n\n /**\n * Search for components.\n */\n async searchComponents(options: SearchOptions, registryName?: string): Promise<ComponentDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.components);\n\n // Filter by category\n if (options.category) {\n results = results.filter((c) => c.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (c) =>\n c.name.toLowerCase().includes(query) ||\n c.displayName?.toLowerCase().includes(query) ||\n c.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get component categories.\n */\n async getComponentCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const component of Object.values(registry.components)) {\n categories.add(component.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // BLOCK OPERATIONS\n // ===========================================================================\n\n /**\n * Get a block definition by name.\n */\n async getBlock(name: string, registryName?: string): Promise<BlockDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks[name] ?? null;\n }\n\n /**\n * Get all blocks from a registry.\n */\n async getBlocks(registryName?: string): Promise<Record<string, BlockDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks;\n }\n\n /**\n * Search for blocks.\n */\n async searchBlocks(options: SearchOptions, registryName?: string): Promise<BlockDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.blocks);\n\n // Filter by category\n if (options.category) {\n results = results.filter((b) => b.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (b) =>\n b.name.toLowerCase().includes(query) ||\n b.displayName?.toLowerCase().includes(query) ||\n b.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get block categories.\n */\n async getBlockCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const block of Object.values(registry.blocks)) {\n categories.add(block.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // DEPENDENCY RESOLUTION\n // ===========================================================================\n\n /**\n * Resolve all dependencies for a component.\n */\n async resolveComponentDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const component = await this.getComponent(name, registry);\n\n if (!component) {\n throw new Error(`Component \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const depName of component.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(depName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: component,\n registry,\n dependencies,\n };\n }\n\n /**\n * Resolve all dependencies for a block.\n */\n async resolveBlockDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const block = await this.getBlock(name, registry);\n\n if (!block) {\n throw new Error(`Block \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const compName of block.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(compName, registry);\n dependencies.push(resolved);\n }\n\n // Resolve block dependencies\n for (const blockName of block.dependencies.blocks) {\n const resolved = await this.resolveBlockDependencies(blockName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: block,\n registry,\n dependencies,\n };\n }\n\n /**\n * Get flat list of all npm dependencies for resolved items.\n */\n getNpmDependencies(resolved: ResolvedItem): string[] {\n const deps = new Set<string>();\n\n function collectDeps(item: ResolvedItem): void {\n // Add direct npm dependencies\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n if ('dependencies' in definition) {\n for (const dep of definition.dependencies.npm) {\n deps.add(dep);\n }\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectDeps(child);\n }\n }\n\n collectDeps(resolved);\n return Array.from(deps).sort();\n }\n\n /**\n * Get flat list of all file paths for resolved items.\n */\n getFilePaths(resolved: ResolvedItem): string[] {\n const paths = new Set<string>();\n\n function collectPaths(item: ResolvedItem): void {\n // Add direct file paths\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n for (const file of definition.files) {\n paths.add(file.path);\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectPaths(child);\n }\n }\n\n collectPaths(resolved);\n return Array.from(paths).sort();\n }\n\n // ===========================================================================\n // VERSION CHECKING\n // ===========================================================================\n\n /**\n * Check if a component version is compatible.\n */\n async checkComponentVersion(name: string, requiredVersion: string, registryName?: string): Promise<boolean> {\n const component = await this.getComponent(name, registryName);\n if (!component) return false;\n\n return this.isVersionCompatible(component.version, requiredVersion);\n }\n\n /**\n * Check semver version compatibility.\n * Simple implementation - considers major.minor compatibility.\n */\n private isVersionCompatible(actual: string, required: string): boolean {\n const [actualMajor, actualMinor] = actual.split('.').map(Number);\n const [requiredMajor, requiredMinor] = required.split('.').map(Number);\n\n // Major version must match\n if (actualMajor !== requiredMajor) return false;\n\n // Minor version must be >= required\n return actualMinor >= requiredMinor;\n }\n\n // ===========================================================================\n // REGISTRY INFO\n // ===========================================================================\n\n /**\n * Get registry metadata.\n */\n async getRegistryInfo(registryName?: string): Promise<{\n name: string;\n version: string;\n description?: string;\n componentCount: number;\n blockCount: number;\n themeCount: number;\n }> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n\n return {\n name: registry.name,\n version: registry.version,\n description: registry.description,\n componentCount: Object.keys(registry.components).length,\n blockCount: Object.keys(registry.blocks).length,\n themeCount: Object.keys(registry.themes).length,\n };\n }\n\n /**\n * Get list of loaded registries.\n */\n getLoadedRegistries(): string[] {\n return Array.from(this.registries.keys());\n }\n}\n\n// =============================================================================\n// DEFAULT INSTANCE\n// =============================================================================\n\n/**\n * Default registry manager instance.\n */\nexport const registry = new RegistryManager();\n\n/**\n * Create a new registry manager with custom options.\n */\nexport function createRegistryManager(options?: RegistryManagerOptions): RegistryManager {\n return new RegistryManager(options);\n}\n","/**\n * Component/Block Installer\n *\n * Handles installation of Prism components and blocks to target projects.\n * Manages file copying, dependency resolution, and lockfile tracking.\n *\n * Key Features:\n * - Atomic installation with rollback on failure\n * - Automatic dependency installation\n * - Template variable substitution\n * - Lockfile tracking for updates\n *\n * @module registry/installer\n */\n\nimport { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\nimport type { ComponentDefinition, InstalledComponent, InstalledBlock, PrismLockfile } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\nimport { RegistryManager, type ResolvedItem } from './manager.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface InstallerOptions {\n /** Target directory for components */\n componentsDir?: string;\n /** Target directory for blocks */\n blocksDir?: string;\n /** Target directory for hooks */\n hooksDir?: string;\n /** Overwrite existing files */\n overwrite?: boolean;\n /** Dry run mode (don't write files) */\n dryRun?: boolean;\n /** Skip dependencies */\n skipDependencies?: boolean;\n /** Template variables for substitution */\n templateVars?: Record<string, string>;\n}\n\nexport interface InstallResult {\n /** Whether installation was successful */\n success: boolean;\n /** Installed files */\n files: string[];\n /** npm dependencies to install */\n npmDependencies: string[];\n /** Errors encountered */\n errors: string[];\n /** Warnings */\n warnings: string[];\n}\n\ninterface FileOperation {\n type: 'write' | 'mkdir';\n path: string;\n content?: string;\n}\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\n/**\n * Prism component and block installer.\n *\n * @example\n * ```typescript\n * const installer = new PrismInstaller({\n * componentsDir: 'src/components',\n * blocksDir: 'src/blocks',\n * });\n *\n * // Install a component\n * const result = await installer.installComponent('button');\n *\n * // Install a block with all dependencies\n * const blockResult = await installer.installBlock('dashboard-layout');\n * ```\n */\nexport class PrismInstaller {\n private readonly options: Required<InstallerOptions>;\n private readonly registryManager: RegistryManager;\n private lockfile: PrismLockfile | null = null;\n private lockfilePath: string;\n\n constructor(registryManager: RegistryManager, options: InstallerOptions = {}) {\n this.registryManager = registryManager;\n this.options = {\n componentsDir: options.componentsDir ?? 'src/components/prism',\n blocksDir: options.blocksDir ?? 'src/blocks',\n hooksDir: options.hooksDir ?? 'src/hooks',\n overwrite: options.overwrite ?? false,\n dryRun: options.dryRun ?? false,\n skipDependencies: options.skipDependencies ?? false,\n templateVars: options.templateVars ?? {},\n };\n this.lockfilePath = path.join(process.cwd(), 'prism.lock.json');\n }\n\n // ===========================================================================\n // COMPONENT INSTALLATION\n // ===========================================================================\n\n /**\n * Install a component and its dependencies.\n */\n async installComponent(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve component and dependencies\n const resolved = await this.registryManager.resolveComponentDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const itemsToInstall = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Check for existing installations\n await this.loadLockfile();\n const existingComponents = new Set(Object.keys(this.lockfile?.components ?? {}));\n\n // Filter out already installed components (unless overwrite is enabled)\n const filteredItems = this.options.overwrite\n ? itemsToInstall\n : itemsToInstall.filter((item) => {\n const def = item.definition as ComponentDefinition;\n if (existingComponents.has(def.name)) {\n result.warnings.push(\n `Component \"${def.name}\" is already installed, skipping (use --overwrite to replace)`\n );\n return false;\n }\n return true;\n });\n\n // Collect all file operations\n const operations: FileOperation[] = [];\n const installedComponents: InstalledComponent[] = [];\n\n for (const item of filteredItems) {\n const component = item.definition as ComponentDefinition;\n const componentOps = await this.prepareComponentFiles(component, item.registry);\n operations.push(...componentOps);\n\n installedComponents.push({\n name: component.name,\n version: component.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: componentOps.filter((op) => op.type === 'write').map((op) => op.path),\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations (or simulate in dry run)\n if (this.options.dryRun) {\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n\n // Update lockfile\n for (const component of installedComponents) {\n this.lockfile!.components[component.name] = component;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a component.\n */\n private async prepareComponentFiles(component: ComponentDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const componentDir = path.join(this.options.componentsDir, component.name);\n\n // Create component directory\n operations.push({ type: 'mkdir', path: componentDir });\n\n // Prepare each file\n for (const file of component.files) {\n const targetPath = path.join(componentDir, path.basename(file.path));\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // BLOCK INSTALLATION\n // ===========================================================================\n\n /**\n * Install a block and its dependencies.\n */\n async installBlock(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve block and dependencies\n const resolved = await this.registryManager.resolveBlockDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const allItems = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Separate blocks and components by checking for block-specific properties\n // BlockDefinition has 'defaultConfig' which ComponentDefinition doesn't have\n const blocks = allItems.filter((item) => {\n const def = item.definition;\n // Block has 'defaultConfig' and 'dependencies.blocks', Component has 'dependencies.components'\n return 'defaultConfig' in def && 'dependencies' in def && 'blocks' in (def as BlockDefinition).dependencies;\n });\n const components = allItems.filter((item) => !blocks.includes(item));\n\n // Check for existing installations\n await this.loadLockfile();\n\n // Install component dependencies first\n for (const item of components) {\n const component = item.definition as ComponentDefinition;\n const existingComponent = this.lockfile?.components[component.name];\n\n if (existingComponent && !this.options.overwrite) {\n result.warnings.push(`Component \"${component.name}\" is already installed, skipping`);\n continue;\n }\n\n const componentResult = await this.installComponent(component.name, item.registry);\n result.files.push(...componentResult.files);\n result.errors.push(...componentResult.errors);\n result.warnings.push(...componentResult.warnings);\n }\n\n // Install blocks\n const operations: FileOperation[] = [];\n const installedBlocks: InstalledBlock[] = [];\n\n for (const item of blocks) {\n const block = item.definition as BlockDefinition;\n const existingBlock = this.lockfile?.blocks[block.name];\n\n if (existingBlock && !this.options.overwrite) {\n result.warnings.push(`Block \"${block.name}\" is already installed, skipping`);\n continue;\n }\n\n const blockOps = await this.prepareBlockFiles(block, item.registry);\n operations.push(...blockOps);\n\n installedBlocks.push({\n name: block.name,\n version: block.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: blockOps.filter((op) => op.type === 'write').map((op) => op.path),\n config: block.defaultConfig,\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations\n if (this.options.dryRun) {\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n\n // Update lockfile\n for (const block of installedBlocks) {\n this.lockfile!.blocks[block.name] = block;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a block.\n */\n private async prepareBlockFiles(block: BlockDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const blockDir = path.join(this.options.blocksDir, block.name);\n\n // Create block directory\n operations.push({ type: 'mkdir', path: blockDir });\n\n // Prepare each file\n for (const file of block.files) {\n const targetPath = path.join(blockDir, file.path);\n const targetDir = path.dirname(targetPath);\n\n // Create subdirectory if needed\n if (targetDir !== blockDir) {\n operations.push({ type: 'mkdir', path: targetDir });\n }\n\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // UNINSTALLATION\n // ===========================================================================\n\n /**\n * Uninstall a component.\n */\n async uninstallComponent(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.components[name];\n\n if (!installed) {\n result.errors.push(`Component \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other components depend on this one\n const dependents = await this.findDependents(name, 'component');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove component directory if empty\n const componentDir = path.dirname(installed.files[0]);\n await fs.rmdir(componentDir).catch(() => {\n // Directory not empty or doesn't exist\n });\n\n // Update lockfile\n delete this.lockfile!.components[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Uninstall a block.\n */\n async uninstallBlock(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.blocks[name];\n\n if (!installed) {\n result.errors.push(`Block \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other blocks depend on this one\n const dependents = await this.findDependents(name, 'block');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove block directory\n const blockDir = path.dirname(installed.files[0]);\n await fs.rm(blockDir, { recursive: true }).catch(() => {\n result.warnings.push(`Could not remove directory: ${blockDir}`);\n });\n\n // Update lockfile\n delete this.lockfile!.blocks[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n // ===========================================================================\n // HELPERS\n // ===========================================================================\n\n /**\n * Flatten dependency tree into unique list.\n */\n private flattenDependencies(resolved: ResolvedItem): ResolvedItem[] {\n const seen = new Set<string>();\n const result: ResolvedItem[] = [];\n\n function traverse(item: ResolvedItem): void {\n const key = `${item.registry}:${item.definition.name}`;\n if (seen.has(key)) return;\n seen.add(key);\n\n // Process dependencies first (for proper install order)\n for (const dep of item.dependencies) {\n traverse(dep);\n }\n\n result.push(item);\n }\n\n traverse(resolved);\n return result;\n }\n\n /**\n * Fetch file content from registry.\n * Supports local files (prefixed with file:// or absolute paths) and remote URLs.\n */\n private async fetchFileContent(filePath: string): Promise<string> {\n // Handle local file paths\n if (filePath.startsWith('file://') || filePath.startsWith('/') || /^[a-zA-Z]:/.test(filePath)) {\n const actualPath = filePath.replace('file://', '');\n try {\n const content = await fs.readFile(actualPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read local file \"${actualPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle relative paths (resolve against baseDir from registry manager options)\n if (!filePath.startsWith('http://') && !filePath.startsWith('https://')) {\n const resolvedPath = path.resolve(process.cwd(), filePath);\n try {\n const content = await fs.readFile(resolvedPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read file \"${resolvedPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle remote URLs\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n return await response.text();\n } catch (error) {\n throw new Error(\n `Failed to fetch remote file \"${filePath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n /**\n * Process template variables in content.\n */\n private processTemplate(content: string): string {\n let result = content;\n\n for (const [key, value] of Object.entries(this.options.templateVars)) {\n result = result.replace(new RegExp(`{{${key}}}`, 'g'), value);\n }\n\n return result;\n }\n\n /**\n * Execute file operations.\n */\n private async executeOperations(operations: FileOperation[]): Promise<void> {\n // Sort operations: directories first, then files\n const sorted = [...operations].sort((a, b) => {\n if (a.type === 'mkdir' && b.type !== 'mkdir') return -1;\n if (a.type !== 'mkdir' && b.type === 'mkdir') return 1;\n return 0;\n });\n\n for (const op of sorted) {\n if (op.type === 'mkdir') {\n await fs.mkdir(op.path, { recursive: true });\n } else if (op.type === 'write' && op.content !== undefined) {\n // Check if file exists and we shouldn't overwrite\n if (!this.options.overwrite) {\n try {\n await fs.access(op.path);\n continue; // File exists, skip\n } catch {\n // File doesn't exist, proceed\n }\n }\n await fs.writeFile(op.path, op.content, 'utf-8');\n }\n }\n }\n\n /**\n * Find items that depend on a given component/block.\n */\n private async findDependents(name: string, type: 'component' | 'block'): Promise<string[]> {\n const dependents: string[] = [];\n\n if (!this.lockfile) return dependents;\n\n // Check all installed blocks for dependencies\n for (const [blockName, _block] of Object.entries(this.lockfile.blocks)) {\n const blockDef = await this.registryManager.getBlock(blockName);\n if (!blockDef) continue;\n\n if (type === 'component' && blockDef.dependencies.components.includes(name)) {\n dependents.push(blockName);\n }\n if (type === 'block' && blockDef.dependencies.blocks.includes(name)) {\n dependents.push(blockName);\n }\n }\n\n // Check components for component dependencies\n if (type === 'component') {\n for (const [compName, _comp] of Object.entries(this.lockfile.components)) {\n const compDef = await this.registryManager.getComponent(compName);\n if (!compDef) continue;\n\n if (compDef.dependencies.components.includes(name)) {\n dependents.push(compName);\n }\n }\n }\n\n return dependents;\n }\n\n // ===========================================================================\n // LOCKFILE MANAGEMENT\n // ===========================================================================\n\n /**\n * Load lockfile from disk.\n */\n private async loadLockfile(): Promise<void> {\n if (this.lockfile) return;\n\n try {\n const content = await fs.readFile(this.lockfilePath, 'utf-8');\n this.lockfile = JSON.parse(content);\n } catch {\n // Create new lockfile if it doesn't exist\n this.lockfile = {\n version: '1.0.0',\n components: {},\n blocks: {},\n themes: [],\n };\n }\n }\n\n /**\n * Save lockfile to disk.\n */\n private async saveLockfile(): Promise<void> {\n if (!this.lockfile) return;\n\n await fs.writeFile(this.lockfilePath, JSON.stringify(this.lockfile, null, 2), 'utf-8');\n }\n\n /**\n * Get current lockfile.\n */\n async getLockfile(): Promise<PrismLockfile> {\n await this.loadLockfile();\n return this.lockfile!;\n }\n\n /**\n * List installed components.\n */\n async listInstalled(): Promise<{\n components: InstalledComponent[];\n blocks: InstalledBlock[];\n }> {\n await this.loadLockfile();\n return {\n components: Object.values(this.lockfile!.components),\n blocks: Object.values(this.lockfile!.blocks),\n };\n }\n}\n\n// =============================================================================\n// FACTORY\n// =============================================================================\n\n/**\n * Create a new installer instance.\n */\nexport function createInstaller(registryManager: RegistryManager, options?: InstallerOptions): PrismInstaller {\n return new PrismInstaller(registryManager, options);\n}\n","/**\n * Prism Registry Module\n *\n * Component and block registry system for the Prism design framework.\n * Enables shadcn/ui-style copy-paste installation with dependency resolution.\n *\n * @module registry\n */\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\nexport { RegistryManager, registry, createRegistryManager } from './manager.js';\n\nexport type { RegistryManagerOptions, SearchOptions, ResolvedItem } from './manager.js';\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\nexport { PrismInstaller, createInstaller } from './installer.js';\n\nexport type { InstallerOptions, InstallResult } from './installer.js';\n\n// =============================================================================\n// DEFAULT REGISTRY SCHEMA\n// =============================================================================\n\nimport type { RegistrySchema } from '../types/registry.js';\n\n/**\n * Default Prism registry schema.\n * Defines the structure for the base component and block registry.\n */\nexport const defaultRegistrySchema: RegistrySchema = {\n $schema: 'https://prism.omnitron.dev/registry/v1/schema.json',\n name: 'prism',\n version: '1.0.0',\n description: 'Official Prism Design System Registry',\n baseUrl: 'https://registry.prism.omnitron.dev',\n components: {\n // Input Components\n button: {\n name: 'button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Button',\n description: 'Primary action button with multiple variants',\n files: [\n { path: 'Button.tsx', type: 'component' },\n { path: 'Button.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/button',\n },\n 'icon-button': {\n name: 'icon-button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Icon Button',\n description: 'Compact button for icon-only actions',\n files: [\n { path: 'IconButton.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n 'text-field': {\n name: 'text-field',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Text Field',\n description: 'Text input with label and helper text',\n files: [\n { path: 'TextField.tsx', type: 'component' },\n { path: 'TextField.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n select: {\n name: 'select',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Select',\n description: 'Dropdown selection component',\n files: [\n { path: 'Select.tsx', type: 'component' },\n { path: 'Select.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n checkbox: {\n name: 'checkbox',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Checkbox',\n description: 'Checkbox input for boolean values',\n files: [\n { path: 'Checkbox.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n switch: {\n name: 'switch',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Switch',\n description: 'Toggle switch for on/off states',\n files: [\n { path: 'Switch.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data Display\n avatar: {\n name: 'avatar',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Avatar',\n description: 'User avatar with image or initials',\n files: [\n { path: 'Avatar.tsx', type: 'component' },\n { path: 'AvatarGroup.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n badge: {\n name: 'badge',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Badge',\n description: 'Badge for notifications and status',\n files: [\n { path: 'Badge.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n chip: {\n name: 'chip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Chip',\n description: 'Compact element for tags and selections',\n files: [\n { path: 'Chip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n tooltip: {\n name: 'tooltip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Tooltip',\n description: 'Informative tooltip on hover',\n files: [\n { path: 'Tooltip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Feedback\n alert: {\n name: 'alert',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Alert',\n description: 'Alert messages with severity levels',\n files: [\n { path: 'Alert.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n snackbar: {\n name: 'snackbar',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Snackbar',\n description: 'Brief notification messages',\n files: [\n { path: 'Snackbar.tsx', type: 'component' },\n { path: 'SnackbarProvider.tsx', type: 'component' },\n { path: 'useSnackbar.ts', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'notistack'],\n components: [],\n },\n hasVariants: false,\n },\n dialog: {\n name: 'dialog',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Dialog',\n description: 'Modal dialog with actions',\n files: [\n { path: 'Dialog.tsx', type: 'component' },\n { path: 'ConfirmDialog.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: ['button'],\n },\n hasVariants: false,\n },\n progress: {\n name: 'progress',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Progress',\n description: 'Progress indicators (linear and circular)',\n files: [\n { path: 'LinearProgress.tsx', type: 'component' },\n { path: 'CircularProgress.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Surfaces\n card: {\n name: 'card',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Card',\n description: 'Content card with header, content, and actions',\n files: [\n { path: 'Card.tsx', type: 'component' },\n { path: 'Card.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n paper: {\n name: 'paper',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Paper',\n description: 'Basic surface with elevation',\n files: [\n { path: 'Paper.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n accordion: {\n name: 'accordion',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Accordion',\n description: 'Expandable content panels',\n files: [\n { path: 'Accordion.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Navigation\n tabs: {\n name: 'tabs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Tabs',\n description: 'Tabbed navigation component',\n files: [\n { path: 'Tabs.tsx', type: 'component' },\n { path: 'TabPanel.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n breadcrumbs: {\n name: 'breadcrumbs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Breadcrumbs',\n description: 'Navigation breadcrumb trail',\n files: [\n { path: 'Breadcrumbs.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n menu: {\n name: 'menu',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Menu',\n description: 'Dropdown menu for actions',\n files: [\n { path: 'Menu.tsx', type: 'component' },\n { path: 'MenuItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Layout\n stack: {\n name: 'stack',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Stack',\n description: 'Vertical/horizontal flex layout',\n files: [\n { path: 'Stack.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n grid: {\n name: 'grid',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Grid',\n description: 'Responsive grid layout',\n files: [\n { path: 'Grid.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n container: {\n name: 'container',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Container',\n description: 'Centered content container',\n files: [\n { path: 'Container.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n divider: {\n name: 'divider',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Divider',\n description: 'Visual separator',\n files: [\n { path: 'Divider.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data\n 'data-table': {\n name: 'data-table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Table',\n description: 'Full-featured data table with sorting, filtering, pagination',\n files: [\n { path: 'DataTable.tsx', type: 'component' },\n { path: 'DataTable.types.ts', type: 'types' },\n { path: 'DataTableToolbar.tsx', type: 'component' },\n { path: 'DataTablePagination.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu'],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/data-table',\n },\n table: {\n name: 'table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Table',\n description: 'Basic table component',\n files: [\n { path: 'Table.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n list: {\n name: 'list',\n version: '1.0.0',\n category: 'data',\n displayName: 'List',\n description: 'Vertical list of items',\n files: [\n { path: 'List.tsx', type: 'component' },\n { path: 'ListItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n },\n blocks: {\n // Dashboard blocks\n 'dashboard-layout': {\n name: 'dashboard-layout',\n version: '1.0.0',\n category: 'layouts',\n displayName: 'Dashboard Layout',\n description: 'Complete dashboard layout with sidebar and header',\n files: [\n { path: 'DashboardLayout.tsx', type: 'component' },\n { path: 'DashboardLayout.types.ts', type: 'type' },\n { path: 'Sidebar.tsx', type: 'component' },\n { path: 'Header.tsx', type: 'component' },\n { path: 'NavSection.tsx', type: 'component' },\n { path: 'NavItem.tsx', type: 'component' },\n { path: 'useDashboard.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['avatar', 'menu', 'icon-button', 'tooltip'],\n blocks: [],\n },\n defaultConfig: {\n sidebarWidth: 280,\n headerHeight: 64,\n collapsedWidth: 72,\n },\n docs: 'https://docs.prism.omnitron.dev/blocks/dashboard-layout',\n },\n 'auth-forms': {\n name: 'auth-forms',\n version: '1.0.0',\n category: 'auth',\n displayName: 'Authentication Forms',\n description: 'Login, register, forgot password, and verify forms',\n files: [\n { path: 'LoginForm.tsx', type: 'component' },\n { path: 'RegisterForm.tsx', type: 'component' },\n { path: 'ForgotPasswordForm.tsx', type: 'component' },\n { path: 'VerifyCodeForm.tsx', type: 'component' },\n { path: 'auth.schema.ts', type: 'schema' },\n { path: 'useAuthForm.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form', '@hookform/resolvers', 'zod'],\n components: ['button', 'text-field', 'checkbox', 'alert'],\n blocks: [],\n },\n defaultConfig: {\n showSocialLogin: true,\n showRememberMe: true,\n },\n },\n 'settings-panel': {\n name: 'settings-panel',\n version: '1.0.0',\n category: 'settings',\n displayName: 'Settings Panel',\n description: 'Theme settings panel with live preview',\n files: [\n { path: 'SettingsPanel.tsx', type: 'component' },\n { path: 'SettingsDrawer.tsx', type: 'component' },\n { path: 'ThemePreview.tsx', type: 'component' },\n { path: 'useSettings.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['button', 'switch', 'select', 'icon-button'],\n blocks: [],\n },\n defaultConfig: {\n position: 'right',\n },\n },\n 'user-profile': {\n name: 'user-profile',\n version: '1.0.0',\n category: 'data',\n displayName: 'User Profile',\n description: 'User profile page with avatar, info, and settings',\n files: [\n { path: 'ProfilePage.tsx', type: 'component' },\n { path: 'ProfileHeader.tsx', type: 'component' },\n { path: 'ProfileTabs.tsx', type: 'component' },\n { path: 'AccountTab.tsx', type: 'component' },\n { path: 'SecurityTab.tsx', type: 'component' },\n { path: 'NotificationsTab.tsx', type: 'component' },\n { path: 'useProfile.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form'],\n components: ['avatar', 'button', 'tabs', 'card', 'text-field', 'switch'],\n blocks: [],\n },\n defaultConfig: {},\n },\n 'data-grid': {\n name: 'data-grid',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Grid',\n description: 'Advanced data grid with server-side features',\n files: [\n { path: 'DataGrid.tsx', type: 'component' },\n { path: 'DataGrid.types.ts', type: 'type' },\n { path: 'GridToolbar.tsx', type: 'component' },\n { path: 'GridFilters.tsx', type: 'component' },\n { path: 'GridExport.tsx', type: 'component' },\n { path: 'useDataGrid.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table', '@tanstack/react-virtual'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu', 'chip'],\n blocks: [],\n },\n defaultConfig: {\n pageSize: 25,\n enableColumnResize: true,\n enableColumnReorder: true,\n },\n },\n },\n themes: {},\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/registry/manager.ts","../src/registry/installer.ts","../src/registry/index.ts"],"names":["registry","path","fs"],"mappings":"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","file":"chunk-JZBSPDED.js","sourcesContent":["/**\n * Registry Manager\n *\n * Core registry management for Prism components and blocks.\n * Handles loading, merging, querying, and caching of registry data.\n *\n * Key Features:\n * - Multiple registry sources (local, remote, merged)\n * - Automatic dependency resolution\n * - Version management and compatibility checking\n * - Caching with configurable TTL\n *\n * @module registry/manager\n */\n\nimport type { RegistrySchema, ComponentDefinition, RegistryConfig, RemoteRegistryConfig } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface RegistryManagerOptions {\n /** Base directory for local registries */\n baseDir?: string;\n /** Default registry name */\n defaultRegistry?: string;\n /** Registry configuration */\n config?: RegistryConfig;\n /** Cache TTL in milliseconds (default: 5 minutes) */\n cacheTtl?: number;\n}\n\nexport interface SearchOptions {\n /** Filter by category */\n category?: string;\n /** Search query */\n query?: string;\n /** Include dependencies in results */\n includeDependencies?: boolean;\n /** Limit results */\n limit?: number;\n}\n\nexport interface ResolvedItem {\n /** Item definition */\n definition: ComponentDefinition | BlockDefinition;\n /** Registry source */\n registry: string;\n /** Resolved dependencies */\n dependencies: ResolvedItem[];\n}\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n}\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\n/**\n * Registry manager for Prism design system.\n *\n * Manages component and block registries with support for:\n * - Local and remote registry sources\n * - Registry merging and extension\n * - Dependency resolution\n * - Caching with TTL\n *\n * @example\n * ```typescript\n * const manager = new RegistryManager({\n * baseDir: './prism',\n * config: {\n * default: 'prism',\n * registries: {\n * prism: 'https://registry.prism.dev',\n * custom: './custom-registry.json',\n * },\n * },\n * });\n *\n * // Get a component\n * const button = await manager.getComponent('button');\n *\n * // Search for components\n * const inputs = await manager.searchComponents({ category: 'inputs' });\n *\n * // Resolve dependencies\n * const resolved = await manager.resolveDependencies('data-table');\n * ```\n */\nexport class RegistryManager {\n private readonly options: Required<RegistryManagerOptions>;\n private registries: Map<string, RegistrySchema> = new Map();\n private cache: Map<string, CacheEntry<RegistrySchema>> = new Map();\n private loaders: Map<string, () => Promise<RegistrySchema>> = new Map();\n\n constructor(options: RegistryManagerOptions = {}) {\n this.options = {\n baseDir: options.baseDir ?? (typeof process !== 'undefined' && process.cwd ? process.cwd() : '/'),\n defaultRegistry: options.defaultRegistry ?? 'prism',\n config: options.config ?? { default: 'prism', registries: {} },\n cacheTtl: options.cacheTtl ?? 5 * 60 * 1000, // 5 minutes\n };\n }\n\n // ===========================================================================\n // REGISTRY LOADING\n // ===========================================================================\n\n /**\n * Register a custom loader for a registry.\n */\n registerLoader(name: string, loader: () => Promise<RegistrySchema>): void {\n this.loaders.set(name, loader);\n }\n\n /**\n * Load a registry by name.\n */\n async loadRegistry(name: string): Promise<RegistrySchema> {\n // Check cache first\n const cached = this.cache.get(name);\n if (cached && Date.now() - cached.timestamp < this.options.cacheTtl) {\n return cached.data;\n }\n\n // Check if already loaded\n const existing = this.registries.get(name);\n if (existing && !cached) {\n return existing;\n }\n\n // Use custom loader if registered\n const customLoader = this.loaders.get(name);\n if (customLoader) {\n const registry = await customLoader();\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n // Get registry config\n const config = this.options.config.registries[name];\n if (!config) {\n throw new Error(`Registry \"${name}\" not found in configuration`);\n }\n\n // Load based on config type\n const registry = typeof config === 'string' ? await this.loadFromPath(config) : await this.loadFromRemote(config);\n\n // Handle registry extension\n if (registry.extends) {\n const baseRegistry = await this.loadRegistry(registry.extends);\n const merged = this.mergeRegistries(baseRegistry, registry);\n this.cacheRegistry(name, merged);\n return merged;\n }\n\n this.cacheRegistry(name, registry);\n return registry;\n }\n\n /**\n * Load registry from local file path.\n * Uses dynamic import for ESM compatibility across environments.\n *\n * @param path - Relative or absolute path to registry JSON\n * @returns Loaded registry schema\n */\n private async loadFromPath(path: string): Promise<RegistrySchema> {\n const fullPath = path.startsWith('/') ? path : `${this.options.baseDir}/${path}`;\n\n // Check if running in Node.js-like environment with fs access\n if (typeof process !== 'undefined' && (process.versions?.node || process.versions?.bun)) {\n // Dynamic import for Node.js fs module\n const fs = await import('node:fs/promises');\n const content = await fs.readFile(fullPath, 'utf-8');\n return JSON.parse(content) as RegistrySchema;\n }\n\n // In browser/Deno environment, try to fetch if it's a URL\n if (path.startsWith('http://') || path.startsWith('https://')) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${path}: ${response.statusText}`);\n }\n return response.json();\n }\n\n // For browser environment with bundled registries, use custom loader\n throw new Error(\n `Cannot load local file \"${fullPath}\" in browser environment. ` +\n `Register a custom loader with manager.registerLoader() or use a remote URL.`\n );\n }\n\n /**\n * Load registry from remote URL.\n */\n private async loadFromRemote(config: RemoteRegistryConfig): Promise<RegistrySchema> {\n const response = await fetch(config.url, {\n headers: config.headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to load registry from ${config.url}: ${response.statusText}`);\n }\n\n return response.json();\n }\n\n /**\n * Cache a loaded registry.\n */\n private cacheRegistry(name: string, registry: RegistrySchema): void {\n this.registries.set(name, registry);\n this.cache.set(name, {\n data: registry,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Merge two registries (base + extension).\n */\n private mergeRegistries(base: RegistrySchema, extension: RegistrySchema): RegistrySchema {\n return {\n ...base,\n ...extension,\n components: { ...base.components, ...extension.components },\n blocks: { ...base.blocks, ...extension.blocks },\n themes: { ...base.themes, ...extension.themes },\n };\n }\n\n /**\n * Clear registry cache.\n */\n clearCache(name?: string): void {\n if (name) {\n this.cache.delete(name);\n } else {\n this.cache.clear();\n }\n }\n\n // ===========================================================================\n // COMPONENT OPERATIONS\n // ===========================================================================\n\n /**\n * Get a component definition by name.\n */\n async getComponent(name: string, registryName?: string): Promise<ComponentDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components[name] ?? null;\n }\n\n /**\n * Get all components from a registry.\n */\n async getComponents(registryName?: string): Promise<Record<string, ComponentDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.components;\n }\n\n /**\n * Search for components.\n */\n async searchComponents(options: SearchOptions, registryName?: string): Promise<ComponentDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.components);\n\n // Filter by category\n if (options.category) {\n results = results.filter((c) => c.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (c) =>\n c.name.toLowerCase().includes(query) ||\n c.displayName?.toLowerCase().includes(query) ||\n c.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get component categories.\n */\n async getComponentCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const component of Object.values(registry.components)) {\n categories.add(component.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // BLOCK OPERATIONS\n // ===========================================================================\n\n /**\n * Get a block definition by name.\n */\n async getBlock(name: string, registryName?: string): Promise<BlockDefinition | null> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks[name] ?? null;\n }\n\n /**\n * Get all blocks from a registry.\n */\n async getBlocks(registryName?: string): Promise<Record<string, BlockDefinition>> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n return registry.blocks;\n }\n\n /**\n * Search for blocks.\n */\n async searchBlocks(options: SearchOptions, registryName?: string): Promise<BlockDefinition[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n let results = Object.values(registry.blocks);\n\n // Filter by category\n if (options.category) {\n results = results.filter((b) => b.category === options.category);\n }\n\n // Filter by query\n if (options.query) {\n const query = options.query.toLowerCase();\n results = results.filter(\n (b) =>\n b.name.toLowerCase().includes(query) ||\n b.displayName?.toLowerCase().includes(query) ||\n b.description?.toLowerCase().includes(query)\n );\n }\n\n // Limit results\n if (options.limit && options.limit > 0) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Get block categories.\n */\n async getBlockCategories(registryName?: string): Promise<string[]> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n const categories = new Set<string>();\n\n for (const block of Object.values(registry.blocks)) {\n categories.add(block.category);\n }\n\n return Array.from(categories).sort();\n }\n\n // ===========================================================================\n // DEPENDENCY RESOLUTION\n // ===========================================================================\n\n /**\n * Resolve all dependencies for a component.\n */\n async resolveComponentDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const component = await this.getComponent(name, registry);\n\n if (!component) {\n throw new Error(`Component \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const depName of component.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(depName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: component,\n registry,\n dependencies,\n };\n }\n\n /**\n * Resolve all dependencies for a block.\n */\n async resolveBlockDependencies(name: string, registryName?: string): Promise<ResolvedItem> {\n const registry = registryName ?? this.options.defaultRegistry;\n const block = await this.getBlock(name, registry);\n\n if (!block) {\n throw new Error(`Block \"${name}\" not found in registry \"${registry}\"`);\n }\n\n const dependencies: ResolvedItem[] = [];\n\n // Resolve component dependencies\n for (const compName of block.dependencies.components) {\n const resolved = await this.resolveComponentDependencies(compName, registry);\n dependencies.push(resolved);\n }\n\n // Resolve block dependencies\n for (const blockName of block.dependencies.blocks) {\n const resolved = await this.resolveBlockDependencies(blockName, registry);\n dependencies.push(resolved);\n }\n\n return {\n definition: block,\n registry,\n dependencies,\n };\n }\n\n /**\n * Get flat list of all npm dependencies for resolved items.\n */\n getNpmDependencies(resolved: ResolvedItem): string[] {\n const deps = new Set<string>();\n\n function collectDeps(item: ResolvedItem): void {\n // Add direct npm dependencies\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n if ('dependencies' in definition) {\n for (const dep of definition.dependencies.npm) {\n deps.add(dep);\n }\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectDeps(child);\n }\n }\n\n collectDeps(resolved);\n return Array.from(deps).sort();\n }\n\n /**\n * Get flat list of all file paths for resolved items.\n */\n getFilePaths(resolved: ResolvedItem): string[] {\n const paths = new Set<string>();\n\n function collectPaths(item: ResolvedItem): void {\n // Add direct file paths\n const definition = item.definition as ComponentDefinition | BlockDefinition;\n for (const file of definition.files) {\n paths.add(file.path);\n }\n\n // Recurse into dependencies\n for (const child of item.dependencies) {\n collectPaths(child);\n }\n }\n\n collectPaths(resolved);\n return Array.from(paths).sort();\n }\n\n // ===========================================================================\n // VERSION CHECKING\n // ===========================================================================\n\n /**\n * Check if a component version is compatible.\n */\n async checkComponentVersion(name: string, requiredVersion: string, registryName?: string): Promise<boolean> {\n const component = await this.getComponent(name, registryName);\n if (!component) return false;\n\n return this.isVersionCompatible(component.version, requiredVersion);\n }\n\n /**\n * Check semver version compatibility.\n * Simple implementation - considers major.minor compatibility.\n */\n private isVersionCompatible(actual: string, required: string): boolean {\n const [actualMajor, actualMinor] = actual.split('.').map(Number);\n const [requiredMajor, requiredMinor] = required.split('.').map(Number);\n\n // Major version must match\n if (actualMajor !== requiredMajor) return false;\n\n // Minor version must be >= required\n return actualMinor >= requiredMinor;\n }\n\n // ===========================================================================\n // REGISTRY INFO\n // ===========================================================================\n\n /**\n * Get registry metadata.\n */\n async getRegistryInfo(registryName?: string): Promise<{\n name: string;\n version: string;\n description?: string;\n componentCount: number;\n blockCount: number;\n themeCount: number;\n }> {\n const registry = await this.loadRegistry(registryName ?? this.options.defaultRegistry);\n\n return {\n name: registry.name,\n version: registry.version,\n description: registry.description,\n componentCount: Object.keys(registry.components).length,\n blockCount: Object.keys(registry.blocks).length,\n themeCount: Object.keys(registry.themes).length,\n };\n }\n\n /**\n * Get list of loaded registries.\n */\n getLoadedRegistries(): string[] {\n return Array.from(this.registries.keys());\n }\n}\n\n// =============================================================================\n// DEFAULT INSTANCE\n// =============================================================================\n\n/**\n * Default registry manager instance.\n */\nexport const registry = new RegistryManager();\n\n/**\n * Create a new registry manager with custom options.\n */\nexport function createRegistryManager(options?: RegistryManagerOptions): RegistryManager {\n return new RegistryManager(options);\n}\n","/**\n * Component/Block Installer\n *\n * Handles installation of Prism components and blocks to target projects.\n * Manages file copying, dependency resolution, and lockfile tracking.\n *\n * Key Features:\n * - Atomic installation with rollback on failure\n * - Automatic dependency installation\n * - Template variable substitution\n * - Lockfile tracking for updates\n *\n * @module registry/installer\n */\n\nimport { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\nimport type { ComponentDefinition, InstalledComponent, InstalledBlock, PrismLockfile } from '../types/registry.js';\nimport type { BlockDefinition } from '../types/blocks.js';\nimport { RegistryManager, type ResolvedItem } from './manager.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface InstallerOptions {\n /** Target directory for components */\n componentsDir?: string;\n /** Target directory for blocks */\n blocksDir?: string;\n /** Target directory for hooks */\n hooksDir?: string;\n /** Overwrite existing files */\n overwrite?: boolean;\n /** Dry run mode (don't write files) */\n dryRun?: boolean;\n /** Skip dependencies */\n skipDependencies?: boolean;\n /** Template variables for substitution */\n templateVars?: Record<string, string>;\n}\n\nexport interface InstallResult {\n /** Whether installation was successful */\n success: boolean;\n /** Installed files */\n files: string[];\n /** npm dependencies to install */\n npmDependencies: string[];\n /** Errors encountered */\n errors: string[];\n /** Warnings */\n warnings: string[];\n}\n\ninterface FileOperation {\n type: 'write' | 'mkdir';\n path: string;\n content?: string;\n}\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\n/**\n * Prism component and block installer.\n *\n * @example\n * ```typescript\n * const installer = new PrismInstaller({\n * componentsDir: 'src/components',\n * blocksDir: 'src/blocks',\n * });\n *\n * // Install a component\n * const result = await installer.installComponent('button');\n *\n * // Install a block with all dependencies\n * const blockResult = await installer.installBlock('dashboard-layout');\n * ```\n */\nexport class PrismInstaller {\n private readonly options: Required<InstallerOptions>;\n private readonly registryManager: RegistryManager;\n private lockfile: PrismLockfile | null = null;\n private lockfilePath: string;\n\n constructor(registryManager: RegistryManager, options: InstallerOptions = {}) {\n this.registryManager = registryManager;\n this.options = {\n componentsDir: options.componentsDir ?? 'src/components/prism',\n blocksDir: options.blocksDir ?? 'src/blocks',\n hooksDir: options.hooksDir ?? 'src/hooks',\n overwrite: options.overwrite ?? false,\n dryRun: options.dryRun ?? false,\n skipDependencies: options.skipDependencies ?? false,\n templateVars: options.templateVars ?? {},\n };\n this.lockfilePath = path.join(process.cwd(), 'prism.lock.json');\n }\n\n // ===========================================================================\n // COMPONENT INSTALLATION\n // ===========================================================================\n\n /**\n * Install a component and its dependencies.\n */\n async installComponent(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve component and dependencies\n const resolved = await this.registryManager.resolveComponentDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const itemsToInstall = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Check for existing installations\n await this.loadLockfile();\n const existingComponents = new Set(Object.keys(this.lockfile?.components ?? {}));\n\n // Filter out already installed components (unless overwrite is enabled)\n const filteredItems = this.options.overwrite\n ? itemsToInstall\n : itemsToInstall.filter((item) => {\n const def = item.definition as ComponentDefinition;\n if (existingComponents.has(def.name)) {\n result.warnings.push(\n `Component \"${def.name}\" is already installed, skipping (use --overwrite to replace)`\n );\n return false;\n }\n return true;\n });\n\n // Collect all file operations\n const operations: FileOperation[] = [];\n const installedComponents: InstalledComponent[] = [];\n\n for (const item of filteredItems) {\n const component = item.definition as ComponentDefinition;\n const componentOps = await this.prepareComponentFiles(component, item.registry);\n operations.push(...componentOps);\n\n installedComponents.push({\n name: component.name,\n version: component.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: componentOps.filter((op) => op.type === 'write').map((op) => op.path),\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations (or simulate in dry run)\n if (this.options.dryRun) {\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files = operations.filter((op) => op.type === 'write').map((op) => op.path);\n\n // Update lockfile\n for (const component of installedComponents) {\n this.lockfile!.components[component.name] = component;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a component.\n */\n private async prepareComponentFiles(component: ComponentDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const componentDir = path.join(this.options.componentsDir, component.name);\n\n // Create component directory\n operations.push({ type: 'mkdir', path: componentDir });\n\n // Prepare each file\n for (const file of component.files) {\n const targetPath = path.join(componentDir, path.basename(file.path));\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // BLOCK INSTALLATION\n // ===========================================================================\n\n /**\n * Install a block and its dependencies.\n */\n async installBlock(name: string, registryName?: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n // Resolve block and dependencies\n const resolved = await this.registryManager.resolveBlockDependencies(name, registryName);\n\n // Get all items to install (flattened)\n const allItems = this.options.skipDependencies ? [resolved] : this.flattenDependencies(resolved);\n\n // Separate blocks and components by checking for block-specific properties\n // BlockDefinition has 'defaultConfig' which ComponentDefinition doesn't have\n const blocks = allItems.filter((item) => {\n const def = item.definition;\n // Block has 'defaultConfig' and 'dependencies.blocks', Component has 'dependencies.components'\n return 'defaultConfig' in def && 'dependencies' in def && 'blocks' in (def as BlockDefinition).dependencies;\n });\n const components = allItems.filter((item) => !blocks.includes(item));\n\n // Check for existing installations\n await this.loadLockfile();\n\n // Install component dependencies first\n for (const item of components) {\n const component = item.definition as ComponentDefinition;\n const existingComponent = this.lockfile?.components[component.name];\n\n if (existingComponent && !this.options.overwrite) {\n result.warnings.push(`Component \"${component.name}\" is already installed, skipping`);\n continue;\n }\n\n const componentResult = await this.installComponent(component.name, item.registry);\n result.files.push(...componentResult.files);\n result.errors.push(...componentResult.errors);\n result.warnings.push(...componentResult.warnings);\n }\n\n // Install blocks\n const operations: FileOperation[] = [];\n const installedBlocks: InstalledBlock[] = [];\n\n for (const item of blocks) {\n const block = item.definition as BlockDefinition;\n const existingBlock = this.lockfile?.blocks[block.name];\n\n if (existingBlock && !this.options.overwrite) {\n result.warnings.push(`Block \"${block.name}\" is already installed, skipping`);\n continue;\n }\n\n const blockOps = await this.prepareBlockFiles(block, item.registry);\n operations.push(...blockOps);\n\n installedBlocks.push({\n name: block.name,\n version: block.version,\n registry: item.registry,\n installedAt: new Date().toISOString(),\n files: blockOps.filter((op) => op.type === 'write').map((op) => op.path),\n config: block.defaultConfig,\n });\n }\n\n // Collect npm dependencies\n result.npmDependencies = this.registryManager.getNpmDependencies(resolved);\n\n // Execute operations\n if (this.options.dryRun) {\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n result.success = true;\n } else {\n await this.executeOperations(operations);\n result.files.push(...operations.filter((op) => op.type === 'write').map((op) => op.path));\n\n // Update lockfile\n for (const block of installedBlocks) {\n this.lockfile!.blocks[block.name] = block;\n }\n await this.saveLockfile();\n\n result.success = true;\n }\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Prepare file operations for a block.\n */\n private async prepareBlockFiles(block: BlockDefinition, _registry: string): Promise<FileOperation[]> {\n const operations: FileOperation[] = [];\n const blockDir = path.join(this.options.blocksDir, block.name);\n\n // Create block directory\n operations.push({ type: 'mkdir', path: blockDir });\n\n // Prepare each file\n for (const file of block.files) {\n const targetPath = path.join(blockDir, file.path);\n const targetDir = path.dirname(targetPath);\n\n // Create subdirectory if needed\n if (targetDir !== blockDir) {\n operations.push({ type: 'mkdir', path: targetDir });\n }\n\n const content = await this.fetchFileContent(file.path);\n const processedContent = this.processTemplate(content);\n\n operations.push({\n type: 'write',\n path: targetPath,\n content: processedContent,\n });\n }\n\n return operations;\n }\n\n // ===========================================================================\n // UNINSTALLATION\n // ===========================================================================\n\n /**\n * Uninstall a component.\n */\n async uninstallComponent(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.components[name];\n\n if (!installed) {\n result.errors.push(`Component \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other components depend on this one\n const dependents = await this.findDependents(name, 'component');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove component directory if empty\n const componentDir = path.dirname(installed.files[0]);\n await fs.rmdir(componentDir).catch(() => {\n // Directory not empty or doesn't exist\n });\n\n // Update lockfile\n delete this.lockfile!.components[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n /**\n * Uninstall a block.\n */\n async uninstallBlock(name: string): Promise<InstallResult> {\n const result: InstallResult = {\n success: false,\n files: [],\n npmDependencies: [],\n errors: [],\n warnings: [],\n };\n\n try {\n await this.loadLockfile();\n const installed = this.lockfile?.blocks[name];\n\n if (!installed) {\n result.errors.push(`Block \"${name}\" is not installed`);\n return result;\n }\n\n // Check if any other blocks depend on this one\n const dependents = await this.findDependents(name, 'block');\n if (dependents.length > 0) {\n result.errors.push(`Cannot uninstall \"${name}\" because it is used by: ${dependents.join(', ')}`);\n return result;\n }\n\n // Delete files\n if (!this.options.dryRun) {\n for (const filePath of installed.files) {\n await fs.unlink(filePath).catch(() => {\n result.warnings.push(`Could not delete file: ${filePath}`);\n });\n }\n\n // Try to remove block directory\n const blockDir = path.dirname(installed.files[0]);\n await fs.rm(blockDir, { recursive: true }).catch(() => {\n result.warnings.push(`Could not remove directory: ${blockDir}`);\n });\n\n // Update lockfile\n delete this.lockfile!.blocks[name];\n await this.saveLockfile();\n }\n\n result.files = installed.files;\n result.success = true;\n } catch (error) {\n result.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return result;\n }\n\n // ===========================================================================\n // HELPERS\n // ===========================================================================\n\n /**\n * Flatten dependency tree into unique list.\n */\n private flattenDependencies(resolved: ResolvedItem): ResolvedItem[] {\n const seen = new Set<string>();\n const result: ResolvedItem[] = [];\n\n function traverse(item: ResolvedItem): void {\n const key = `${item.registry}:${item.definition.name}`;\n if (seen.has(key)) return;\n seen.add(key);\n\n // Process dependencies first (for proper install order)\n for (const dep of item.dependencies) {\n traverse(dep);\n }\n\n result.push(item);\n }\n\n traverse(resolved);\n return result;\n }\n\n /**\n * Fetch file content from registry.\n * Supports local files (prefixed with file:// or absolute paths) and remote URLs.\n */\n private async fetchFileContent(filePath: string): Promise<string> {\n // Handle local file paths\n if (filePath.startsWith('file://') || filePath.startsWith('/') || /^[a-zA-Z]:/.test(filePath)) {\n const actualPath = filePath.replace('file://', '');\n try {\n const content = await fs.readFile(actualPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read local file \"${actualPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle relative paths (resolve against baseDir from registry manager options)\n if (!filePath.startsWith('http://') && !filePath.startsWith('https://')) {\n const resolvedPath = path.resolve(process.cwd(), filePath);\n try {\n const content = await fs.readFile(resolvedPath, 'utf-8');\n return content;\n } catch (error) {\n throw new Error(\n `Failed to read file \"${resolvedPath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n // Handle remote URLs\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n return await response.text();\n } catch (error) {\n throw new Error(\n `Failed to fetch remote file \"${filePath}\": ${error instanceof Error ? error.message : String(error)}`,\n { cause: error }\n );\n }\n }\n\n /**\n * Process template variables in content.\n */\n private processTemplate(content: string): string {\n let result = content;\n\n for (const [key, value] of Object.entries(this.options.templateVars)) {\n result = result.replace(new RegExp(`{{${key}}}`, 'g'), value);\n }\n\n return result;\n }\n\n /**\n * Execute file operations.\n */\n private async executeOperations(operations: FileOperation[]): Promise<void> {\n // Sort operations: directories first, then files\n const sorted = [...operations].sort((a, b) => {\n if (a.type === 'mkdir' && b.type !== 'mkdir') return -1;\n if (a.type !== 'mkdir' && b.type === 'mkdir') return 1;\n return 0;\n });\n\n for (const op of sorted) {\n if (op.type === 'mkdir') {\n await fs.mkdir(op.path, { recursive: true });\n } else if (op.type === 'write' && op.content !== undefined) {\n // Check if file exists and we shouldn't overwrite\n if (!this.options.overwrite) {\n try {\n await fs.access(op.path);\n continue; // File exists, skip\n } catch {\n // File doesn't exist, proceed\n }\n }\n await fs.writeFile(op.path, op.content, 'utf-8');\n }\n }\n }\n\n /**\n * Find items that depend on a given component/block.\n */\n private async findDependents(name: string, type: 'component' | 'block'): Promise<string[]> {\n const dependents: string[] = [];\n\n if (!this.lockfile) return dependents;\n\n // Check all installed blocks for dependencies\n for (const [blockName, _block] of Object.entries(this.lockfile.blocks)) {\n const blockDef = await this.registryManager.getBlock(blockName);\n if (!blockDef) continue;\n\n if (type === 'component' && blockDef.dependencies.components.includes(name)) {\n dependents.push(blockName);\n }\n if (type === 'block' && blockDef.dependencies.blocks.includes(name)) {\n dependents.push(blockName);\n }\n }\n\n // Check components for component dependencies\n if (type === 'component') {\n for (const [compName, _comp] of Object.entries(this.lockfile.components)) {\n const compDef = await this.registryManager.getComponent(compName);\n if (!compDef) continue;\n\n if (compDef.dependencies.components.includes(name)) {\n dependents.push(compName);\n }\n }\n }\n\n return dependents;\n }\n\n // ===========================================================================\n // LOCKFILE MANAGEMENT\n // ===========================================================================\n\n /**\n * Load lockfile from disk.\n */\n private async loadLockfile(): Promise<void> {\n if (this.lockfile) return;\n\n try {\n const content = await fs.readFile(this.lockfilePath, 'utf-8');\n this.lockfile = JSON.parse(content);\n } catch {\n // Create new lockfile if it doesn't exist\n this.lockfile = {\n version: '1.0.0',\n components: {},\n blocks: {},\n themes: [],\n };\n }\n }\n\n /**\n * Save lockfile to disk.\n */\n private async saveLockfile(): Promise<void> {\n if (!this.lockfile) return;\n\n await fs.writeFile(this.lockfilePath, JSON.stringify(this.lockfile, null, 2), 'utf-8');\n }\n\n /**\n * Get current lockfile.\n */\n async getLockfile(): Promise<PrismLockfile> {\n await this.loadLockfile();\n return this.lockfile!;\n }\n\n /**\n * List installed components.\n */\n async listInstalled(): Promise<{\n components: InstalledComponent[];\n blocks: InstalledBlock[];\n }> {\n await this.loadLockfile();\n return {\n components: Object.values(this.lockfile!.components),\n blocks: Object.values(this.lockfile!.blocks),\n };\n }\n}\n\n// =============================================================================\n// FACTORY\n// =============================================================================\n\n/**\n * Create a new installer instance.\n */\nexport function createInstaller(registryManager: RegistryManager, options?: InstallerOptions): PrismInstaller {\n return new PrismInstaller(registryManager, options);\n}\n","/**\n * Prism Registry Module\n *\n * Component and block registry system for the Prism design framework.\n * Enables shadcn/ui-style copy-paste installation with dependency resolution.\n *\n * @module registry\n */\n\n// =============================================================================\n// REGISTRY MANAGER\n// =============================================================================\n\nexport { RegistryManager, registry, createRegistryManager } from './manager.js';\n\nexport type { RegistryManagerOptions, SearchOptions, ResolvedItem } from './manager.js';\n\n// =============================================================================\n// INSTALLER\n// =============================================================================\n\nexport { PrismInstaller, createInstaller } from './installer.js';\n\nexport type { InstallerOptions, InstallResult } from './installer.js';\n\n// =============================================================================\n// DEFAULT REGISTRY SCHEMA\n// =============================================================================\n\nimport type { RegistrySchema } from '../types/registry.js';\n\n/**\n * Default Prism registry schema.\n * Defines the structure for the base component and block registry.\n */\nexport const defaultRegistrySchema: RegistrySchema = {\n $schema: 'https://prism.omnitron.dev/registry/v1/schema.json',\n name: 'prism',\n version: '1.0.0',\n description: 'Official Prism Design System Registry',\n baseUrl: 'https://registry.prism.omnitron.dev',\n components: {\n // Input Components\n button: {\n name: 'button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Button',\n description: 'Primary action button with multiple variants',\n files: [\n { path: 'Button.tsx', type: 'component' },\n { path: 'Button.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/button',\n },\n 'icon-button': {\n name: 'icon-button',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Icon Button',\n description: 'Compact button for icon-only actions',\n files: [\n { path: 'IconButton.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n 'text-field': {\n name: 'text-field',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Text Field',\n description: 'Text input with label and helper text',\n files: [\n { path: 'TextField.tsx', type: 'component' },\n { path: 'TextField.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n select: {\n name: 'select',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Select',\n description: 'Dropdown selection component',\n files: [\n { path: 'Select.tsx', type: 'component' },\n { path: 'Select.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n checkbox: {\n name: 'checkbox',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Checkbox',\n description: 'Checkbox input for boolean values',\n files: [\n { path: 'Checkbox.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n switch: {\n name: 'switch',\n version: '1.0.0',\n category: 'inputs',\n displayName: 'Switch',\n description: 'Toggle switch for on/off states',\n files: [\n { path: 'Switch.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data Display\n avatar: {\n name: 'avatar',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Avatar',\n description: 'User avatar with image or initials',\n files: [\n { path: 'Avatar.tsx', type: 'component' },\n { path: 'AvatarGroup.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n badge: {\n name: 'badge',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Badge',\n description: 'Badge for notifications and status',\n files: [\n { path: 'Badge.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n chip: {\n name: 'chip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Chip',\n description: 'Compact element for tags and selections',\n files: [\n { path: 'Chip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n tooltip: {\n name: 'tooltip',\n version: '1.0.0',\n category: 'data-display',\n displayName: 'Tooltip',\n description: 'Informative tooltip on hover',\n files: [\n { path: 'Tooltip.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Feedback\n alert: {\n name: 'alert',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Alert',\n description: 'Alert messages with severity levels',\n files: [\n { path: 'Alert.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n snackbar: {\n name: 'snackbar',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Snackbar',\n description: 'Brief notification messages',\n files: [\n { path: 'Snackbar.tsx', type: 'component' },\n { path: 'SnackbarProvider.tsx', type: 'component' },\n { path: 'useSnackbar.ts', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'notistack'],\n components: [],\n },\n hasVariants: false,\n },\n dialog: {\n name: 'dialog',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Dialog',\n description: 'Modal dialog with actions',\n files: [\n { path: 'Dialog.tsx', type: 'component' },\n { path: 'ConfirmDialog.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: ['button'],\n },\n hasVariants: false,\n },\n progress: {\n name: 'progress',\n version: '1.0.0',\n category: 'feedback',\n displayName: 'Progress',\n description: 'Progress indicators (linear and circular)',\n files: [\n { path: 'LinearProgress.tsx', type: 'component' },\n { path: 'CircularProgress.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Surfaces\n card: {\n name: 'card',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Card',\n description: 'Content card with header, content, and actions',\n files: [\n { path: 'Card.tsx', type: 'component' },\n { path: 'Card.types.ts', type: 'types' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n paper: {\n name: 'paper',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Paper',\n description: 'Basic surface with elevation',\n files: [\n { path: 'Paper.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n accordion: {\n name: 'accordion',\n version: '1.0.0',\n category: 'surfaces',\n displayName: 'Accordion',\n description: 'Expandable content panels',\n files: [\n { path: 'Accordion.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Navigation\n tabs: {\n name: 'tabs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Tabs',\n description: 'Tabbed navigation component',\n files: [\n { path: 'Tabs.tsx', type: 'component' },\n { path: 'TabPanel.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: true,\n },\n breadcrumbs: {\n name: 'breadcrumbs',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Breadcrumbs',\n description: 'Navigation breadcrumb trail',\n files: [\n { path: 'Breadcrumbs.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n menu: {\n name: 'menu',\n version: '1.0.0',\n category: 'navigation',\n displayName: 'Menu',\n description: 'Dropdown menu for actions',\n files: [\n { path: 'Menu.tsx', type: 'component' },\n { path: 'MenuItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Layout\n stack: {\n name: 'stack',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Stack',\n description: 'Vertical/horizontal flex layout',\n files: [\n { path: 'Stack.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n grid: {\n name: 'grid',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Grid',\n description: 'Responsive grid layout',\n files: [\n { path: 'Grid.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n container: {\n name: 'container',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Container',\n description: 'Centered content container',\n files: [\n { path: 'Container.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n divider: {\n name: 'divider',\n version: '1.0.0',\n category: 'layout',\n displayName: 'Divider',\n description: 'Visual separator',\n files: [\n { path: 'Divider.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n\n // Data\n 'data-table': {\n name: 'data-table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Table',\n description: 'Full-featured data table with sorting, filtering, pagination',\n files: [\n { path: 'DataTable.tsx', type: 'component' },\n { path: 'DataTable.types.ts', type: 'types' },\n { path: 'DataTableToolbar.tsx', type: 'component' },\n { path: 'DataTablePagination.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu'],\n },\n hasVariants: true,\n docs: 'https://docs.prism.omnitron.dev/components/data-table',\n },\n table: {\n name: 'table',\n version: '1.0.0',\n category: 'data',\n displayName: 'Table',\n description: 'Basic table component',\n files: [\n { path: 'Table.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n list: {\n name: 'list',\n version: '1.0.0',\n category: 'data',\n displayName: 'List',\n description: 'Vertical list of items',\n files: [\n { path: 'List.tsx', type: 'component' },\n { path: 'ListItem.tsx', type: 'component' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material'],\n components: [],\n },\n hasVariants: false,\n },\n },\n blocks: {\n // Dashboard blocks\n 'dashboard-layout': {\n name: 'dashboard-layout',\n version: '1.0.0',\n category: 'layouts',\n displayName: 'Dashboard Layout',\n description: 'Complete dashboard layout with sidebar and header',\n files: [\n { path: 'DashboardLayout.tsx', type: 'component' },\n { path: 'DashboardLayout.types.ts', type: 'type' },\n { path: 'Sidebar.tsx', type: 'component' },\n { path: 'Header.tsx', type: 'component' },\n { path: 'NavSection.tsx', type: 'component' },\n { path: 'NavItem.tsx', type: 'component' },\n { path: 'useDashboard.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['avatar', 'menu', 'icon-button', 'tooltip'],\n blocks: [],\n },\n defaultConfig: {\n sidebarWidth: 280,\n headerHeight: 64,\n collapsedWidth: 72,\n },\n docs: 'https://docs.prism.omnitron.dev/blocks/dashboard-layout',\n },\n 'auth-forms': {\n name: 'auth-forms',\n version: '1.0.0',\n category: 'auth',\n displayName: 'Authentication Forms',\n description: 'Login, register, forgot password, and verify forms',\n files: [\n { path: 'LoginForm.tsx', type: 'component' },\n { path: 'RegisterForm.tsx', type: 'component' },\n { path: 'ForgotPasswordForm.tsx', type: 'component' },\n { path: 'VerifyCodeForm.tsx', type: 'component' },\n { path: 'auth.schema.ts', type: 'schema' },\n { path: 'useAuthForm.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form', '@hookform/resolvers', 'zod'],\n components: ['button', 'text-field', 'checkbox', 'alert'],\n blocks: [],\n },\n defaultConfig: {\n showSocialLogin: true,\n showRememberMe: true,\n },\n },\n 'settings-panel': {\n name: 'settings-panel',\n version: '1.0.0',\n category: 'settings',\n displayName: 'Settings Panel',\n description: 'Theme settings panel with live preview',\n files: [\n { path: 'SettingsPanel.tsx', type: 'component' },\n { path: 'SettingsDrawer.tsx', type: 'component' },\n { path: 'ThemePreview.tsx', type: 'component' },\n { path: 'useSettings.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'framer-motion'],\n components: ['button', 'switch', 'select', 'icon-button'],\n blocks: [],\n },\n defaultConfig: {\n position: 'right',\n },\n },\n 'user-profile': {\n name: 'user-profile',\n version: '1.0.0',\n category: 'data',\n displayName: 'User Profile',\n description: 'User profile page with avatar, info, and settings',\n files: [\n { path: 'ProfilePage.tsx', type: 'component' },\n { path: 'ProfileHeader.tsx', type: 'component' },\n { path: 'ProfileTabs.tsx', type: 'component' },\n { path: 'AccountTab.tsx', type: 'component' },\n { path: 'SecurityTab.tsx', type: 'component' },\n { path: 'NotificationsTab.tsx', type: 'component' },\n { path: 'useProfile.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', 'react-hook-form'],\n components: ['avatar', 'button', 'tabs', 'card', 'text-field', 'switch'],\n blocks: [],\n },\n defaultConfig: {},\n },\n 'data-grid': {\n name: 'data-grid',\n version: '1.0.0',\n category: 'data',\n displayName: 'Data Grid',\n description: 'Advanced data grid with server-side features',\n files: [\n { path: 'DataGrid.tsx', type: 'component' },\n { path: 'DataGrid.types.ts', type: 'type' },\n { path: 'GridToolbar.tsx', type: 'component' },\n { path: 'GridFilters.tsx', type: 'component' },\n { path: 'GridExport.tsx', type: 'component' },\n { path: 'useDataGrid.ts', type: 'hook' },\n { path: 'index.ts', type: 'barrel' },\n ],\n dependencies: {\n npm: ['@mui/material', '@tanstack/react-table', '@tanstack/react-virtual'],\n components: ['button', 'text-field', 'select', 'checkbox', 'menu', 'chip'],\n blocks: [],\n },\n defaultConfig: {\n pageSize: 25,\n enableColumnResize: true,\n enableColumnReorder: true,\n },\n },\n },\n themes: {},\n};\n"]}
|