@usesidekick/react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +246 -0
- package/dist/index.d.mts +358 -0
- package/dist/index.d.ts +358 -0
- package/dist/index.js +2470 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2403 -0
- package/dist/index.mjs.map +1 -0
- package/dist/jsx-dev-runtime.d.mts +21 -0
- package/dist/jsx-dev-runtime.d.ts +21 -0
- package/dist/jsx-dev-runtime.js +160 -0
- package/dist/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx-dev-runtime.mjs +122 -0
- package/dist/jsx-dev-runtime.mjs.map +1 -0
- package/dist/jsx-runtime.d.mts +26 -0
- package/dist/jsx-runtime.d.ts +26 -0
- package/dist/jsx-runtime.js +150 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/jsx-runtime.mjs +109 -0
- package/dist/jsx-runtime.mjs.map +1 -0
- package/dist/server/index.d.mts +235 -0
- package/dist/server/index.d.ts +235 -0
- package/dist/server/index.js +642 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +597 -0
- package/dist/server/index.mjs.map +1 -0
- package/package.json +64 -0
- package/src/components/SidekickPanel.tsx +868 -0
- package/src/components/index.ts +1 -0
- package/src/context.tsx +157 -0
- package/src/flags.ts +47 -0
- package/src/index.ts +71 -0
- package/src/jsx-dev-runtime.ts +138 -0
- package/src/jsx-runtime.ts +159 -0
- package/src/loader.ts +35 -0
- package/src/primitives/behavior.ts +70 -0
- package/src/primitives/data.ts +91 -0
- package/src/primitives/index.ts +3 -0
- package/src/primitives/ui.ts +268 -0
- package/src/provider.tsx +1264 -0
- package/src/runtime-loader.ts +106 -0
- package/src/server/drizzle-adapter.ts +53 -0
- package/src/server/drizzle-schema.ts +16 -0
- package/src/server/generate.ts +578 -0
- package/src/server/handler.ts +343 -0
- package/src/server/index.ts +20 -0
- package/src/server/storage.ts +1 -0
- package/src/server/types.ts +49 -0
- package/src/types.ts +295 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/provider.tsx","../src/context.tsx","../src/flags.ts","../src/loader.ts","../src/primitives/ui.ts","../src/primitives/data.ts","../src/primitives/behavior.ts","../src/runtime-loader.ts","../src/jsx-runtime.ts","../src/jsx-dev-runtime.ts","../src/components/SidekickPanel.tsx"],"sourcesContent":["// Provider and Context\nexport { SidekickProvider } from './provider';\nexport {\n useSidekick,\n useSidekickSafe,\n // UI hooks\n useAddedColumns,\n useColumnRenames,\n useHiddenColumns,\n useColumnOrder,\n useMenuItems,\n useTabs,\n useActions,\n useValidations,\n usePropsModifier,\n // Data hooks\n useComputedField,\n useFilter,\n useSortOptions,\n useGroupByOptions,\n // Behavior hooks\n useKeyboardShortcuts,\n useEventEmitter,\n} from './context';\n\n// Components\nexport { SidekickPanel } from './components';\n\n// Override loader\nexport { registerOverride, createOverride, getRegisteredOverrides } from './loader';\n\n// Flags\nexport { loadFlags, saveFlags, getFlag, setFlag, toggleFlag } from './flags';\n\n// JSX runtime configuration (for debugging)\nexport { configureJsxRuntime, getSeenComponentsFromJsx, onConfigChange, isJsxRuntimeConfigured } from './jsx-runtime';\n\n// Types\nexport type {\n SDK,\n UIPrimitives,\n DataPrimitives,\n BehaviorPrimitives,\n Override,\n OverrideManifest,\n OverrideModule,\n WrappedComponent,\n AddedColumn,\n ColumnRename,\n HiddenColumn,\n ColumnOrder,\n RowFilter,\n MenuItem,\n TabItem,\n PropsModifier,\n ActionItem,\n ValidationRule,\n ComputedField,\n DataFilter,\n DataTransform,\n ApiInterceptor,\n SortOption,\n GroupByOption,\n EventHandler,\n KeyboardShortcut,\n RouteModifier,\n DOMModification,\n InjectionPoint,\n DOMEventListener,\n SidekickState,\n} from './types';\n","'use client';\n\nimport React, { ReactNode, useCallback, useEffect, useMemo, useState, useRef, ComponentType } from 'react';\nimport { createPortal } from 'react-dom';\nimport { SidekickContext, SidekickContextValue } from './context';\nimport { SidekickState, Override, SDK, AddedColumn, ColumnRename, ColumnOrder, HiddenColumn, RowFilter, WrappedComponent, InjectionPoint } from './types';\nimport { loadFlags, setFlag as saveFlag, getFlag } from './flags';\nimport { getRegisteredOverrides } from './loader';\nimport { createUIPrimitives } from './primitives/ui';\nimport { createDataPrimitives } from './primitives/data';\nimport { createBehaviorPrimitives } from './primitives/behavior';\nimport { fetchAndCompileOverrides } from './runtime-loader';\nimport { configureJsxRuntime } from './jsx-runtime';\nimport { configureJsxDevRuntime } from './jsx-dev-runtime';\n\ninterface SidekickProviderProps {\n children: ReactNode;\n /** API endpoint to fetch overrides from (for production/DB-backed overrides) */\n overridesEndpoint?: string;\n}\n\n/**\n * Convert a kebab-case table ID to PascalCase component name.\n * e.g., 'task-table' -> 'TaskTable'\n */\nfunction tableIdToComponentName(tableId: string): string {\n return tableId\n .split('-')\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Creates a wrapper component that auto-injects added columns into a table\n * via DOM manipulation + React portals. This allows addColumn() to work\n * without the target component needing any Sidekick awareness.\n */\nfunction createAutoColumnWrapper(\n columns: AddedColumn[],\n renames: ColumnRename[],\n columnOrder?: ColumnOrder,\n hiddenColumns?: HiddenColumn[],\n rowFilters?: RowFilter[]\n): (Original: ComponentType) => ComponentType {\n return (Original: ComponentType) => {\n function AutoColumnInjector(props: Record<string, unknown>) {\n const containerRef = useRef<HTMLDivElement>(null);\n const [cellTargets, setCellTargets] = useState<Array<{ element: HTMLElement; taskIndex: number; colIndex: number }>>([]);\n const allTasks = (props.tasks || []) as Record<string, unknown>[];\n\n // Apply row filters to tasks before rendering\n const tasks = useMemo(() => {\n if (!rowFilters || rowFilters.length === 0) return allTasks;\n return allTasks.filter(row =>\n rowFilters.every(rf => rf.filter(row))\n );\n }, [allTasks]);\n\n // Inject column headers and cell containers into the DOM\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const table = container.querySelector('table');\n if (!table) return;\n\n // Clean up any previously injected elements\n table.querySelectorAll('[data-sidekick-injected]').forEach(el => el.remove());\n // Reset hidden columns from previous runs\n table.querySelectorAll('[data-sidekick-hidden]').forEach(el => {\n (el as HTMLElement).style.display = '';\n el.removeAttribute('data-sidekick-hidden');\n });\n\n // Apply column renames to existing headers\n if (renames.length > 0) {\n const headers = table.querySelectorAll('thead th');\n headers.forEach(th => {\n const text = th.textContent?.trim();\n if (text) {\n const rename = renames.find(r => r.originalHeader === text);\n if (rename) {\n th.textContent = rename.newHeader;\n }\n }\n });\n }\n\n // Reorder columns if a column order is specified\n if (columnOrder) {\n const headerRow = table.querySelector('thead tr');\n if (headerRow) {\n const ths = Array.from(headerRow.querySelectorAll('th'));\n // Build mapping: header text -> original index\n const headerToIndex = new Map<string, number>();\n ths.forEach((th, i) => {\n const text = th.textContent?.trim() ?? '';\n headerToIndex.set(text, i);\n });\n\n // Build sorted index order: ordered headers first, then remaining in original order\n const orderedIndices: number[] = [];\n const usedIndices = new Set<number>();\n for (const headerName of columnOrder.order) {\n const idx = headerToIndex.get(headerName);\n if (idx !== undefined) {\n orderedIndices.push(idx);\n usedIndices.add(idx);\n }\n }\n // Append remaining columns in their original order\n for (let i = 0; i < ths.length; i++) {\n if (!usedIndices.has(i)) {\n orderedIndices.push(i);\n }\n }\n\n // Reorder thead ths\n const sortedThs = orderedIndices.map(i => ths[i]);\n for (const th of sortedThs) {\n headerRow.appendChild(th);\n }\n\n // Reorder tbody tds to match\n const bodyRows = table.querySelectorAll('tbody tr');\n bodyRows.forEach(row => {\n const tds = Array.from(row.querySelectorAll('td'));\n const sortedTds = orderedIndices.map(i => tds[i]).filter(Boolean);\n for (const td of sortedTds) {\n row.appendChild(td);\n }\n });\n }\n }\n\n // Hide columns\n if (hiddenColumns && hiddenColumns.length > 0) {\n const headers = table.querySelectorAll('thead th');\n const hiddenHeaders = new Set(hiddenColumns.map(h => h.header));\n const hiddenIndices = new Set<number>();\n\n headers.forEach((th, i) => {\n const text = th.textContent?.trim() ?? '';\n if (hiddenHeaders.has(text)) {\n (th as HTMLElement).style.display = 'none';\n th.setAttribute('data-sidekick-hidden', 'true');\n hiddenIndices.add(i);\n }\n });\n\n if (hiddenIndices.size > 0) {\n const bodyRows = table.querySelectorAll('tbody tr');\n bodyRows.forEach(row => {\n const tds = row.querySelectorAll('td');\n tds.forEach((td, i) => {\n if (hiddenIndices.has(i)) {\n (td as HTMLElement).style.display = 'none';\n td.setAttribute('data-sidekick-hidden', 'true');\n }\n });\n });\n }\n }\n\n // Add column headers\n const headerRow = table.querySelector('thead tr');\n if (headerRow) {\n for (const col of columns) {\n const th = document.createElement('th');\n th.className = 'px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider';\n th.textContent = col.header;\n th.setAttribute('data-sidekick-injected', 'true');\n headerRow.appendChild(th);\n }\n }\n\n // Add cell containers to each body row\n const bodyRows = table.querySelectorAll('tbody tr');\n const targets: Array<{ element: HTMLElement; taskIndex: number; colIndex: number }> = [];\n bodyRows.forEach((row, rowIndex) => {\n for (let colIndex = 0; colIndex < columns.length; colIndex++) {\n const td = document.createElement('td');\n td.className = 'px-6 py-4 whitespace-nowrap text-sm text-gray-500';\n td.setAttribute('data-sidekick-injected', 'true');\n row.appendChild(td);\n targets.push({ element: td, taskIndex: rowIndex, colIndex });\n }\n });\n\n setCellTargets(targets);\n\n return () => {\n table.querySelectorAll('[data-sidekick-injected]').forEach(el => el.remove());\n table.querySelectorAll('[data-sidekick-hidden]').forEach(el => {\n (el as HTMLElement).style.display = '';\n el.removeAttribute('data-sidekick-hidden');\n });\n setCellTargets([]);\n };\n }, [tasks]);\n\n // Render the original component with filtered tasks, then portal cell content into injected TDs\n const filteredProps = (rowFilters && rowFilters.length > 0)\n ? { ...props, tasks }\n : props;\n return React.createElement(React.Fragment, null,\n React.createElement('div', { ref: containerRef },\n React.createElement(Original, filteredProps as Record<string, unknown>)\n ),\n ...cellTargets.map((target, idx) => {\n const task = tasks[target.taskIndex];\n const col = columns[target.colIndex];\n if (!task || !col) return null;\n\n const accessor = col.accessor;\n const value = typeof accessor === 'function'\n ? accessor(task)\n : task[accessor as string];\n\n const content = col.render\n ? col.render(value, task)\n : React.createElement('span', null, String(value ?? '-'));\n\n return createPortal(content, target.element, `sidekick-col-${idx}`);\n })\n );\n }\n AutoColumnInjector.displayName = `AutoColumnInjector(${(Original as { displayName?: string; name?: string }).displayName || (Original as { name?: string }).name || 'Component'})`;\n return AutoColumnInjector as unknown as ComponentType;\n };\n}\n\n/**\n * Get a component's display name from its type (function, forwardRef, memo, lazy, etc.).\n * Handles React.lazy types used by Next.js for client components referenced from server components.\n */\nfunction getComponentName(type: unknown): string | null {\n if (!type) return null;\n if (typeof type === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = type as any;\n return fn.displayName || fn.name || null;\n }\n if (typeof type === 'object' && type !== null) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const obj = type as any;\n if (obj.displayName) return obj.displayName;\n // React.lazy: { $$typeof: Symbol(react.lazy), _payload, _init }\n // When resolved, _payload.status === 'fulfilled' and _payload.value is the actual component\n if (obj.$$typeof?.toString() === 'Symbol(react.lazy)') {\n const payload = obj._payload;\n if (payload && payload.status === 'fulfilled' && payload.value) {\n return getComponentName(payload.value);\n }\n }\n if (obj.$$typeof) {\n if (obj.type) return getComponentName(obj.type);\n if (obj.render) return getComponentName(obj.render);\n }\n }\n return null;\n}\n\n/**\n * Recursively walk a React element tree and apply wrappers/replacements\n * to any component types that match registered overrides.\n *\n * This handles components whose JSX callsite is in a server component\n * (and therefore bypasses the custom JSX runtime interception).\n * The SidekickProvider is a client component, so it receives the\n * server-rendered element tree as `children` — we transform it here\n * before React renders it.\n */\nfunction transformElementTree(\n node: ReactNode,\n wrappers: Map<string, WrappedComponent[]>,\n replacements: Map<string, ComponentType>,\n wrapCache: Map<unknown, ComponentType>\n): ReactNode {\n if (node == null || typeof node === 'boolean' || typeof node === 'string' || typeof node === 'number') {\n return node;\n }\n\n if (Array.isArray(node)) {\n let changed = false;\n const result = node.map(child => {\n const transformed = transformElementTree(child, wrappers, replacements, wrapCache);\n if (transformed !== child) changed = true;\n return transformed;\n });\n return changed ? result : node;\n }\n\n if (!React.isValidElement(node)) return node;\n\n const element = node;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const originalType = element.type as any;\n let newType = originalType;\n let typeChanged = false;\n\n // Check if this element's type is a component that should be wrapped/replaced\n if (typeof originalType === 'function' || (typeof originalType === 'object' && originalType !== null)) {\n const name = getComponentName(originalType);\n if (name) {\n // Resolve the actual component from lazy types for wrapping\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let resolvedType: ComponentType = originalType as any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const maybeObj = originalType as any;\n if (maybeObj.$$typeof?.toString() === 'Symbol(react.lazy)' &&\n maybeObj._payload?.status === 'fulfilled' && maybeObj._payload?.value) {\n resolvedType = maybeObj._payload.value;\n }\n\n const replacement = replacements.get(name);\n if (replacement) {\n newType = replacement;\n typeChanged = true;\n } else {\n const componentWrappers = wrappers.get(name);\n if (componentWrappers && componentWrappers.length > 0) {\n // Cache wrapped types to keep referential identity stable across renders\n if (!wrapCache.has(resolvedType)) {\n const wrapped = componentWrappers.reduce(\n (comp: ComponentType, { wrapper, where: wherePredicate }) => {\n if (wherePredicate) {\n // Conditional wrapper: only apply when where(props) returns true\n const Wrapped = wrapper(comp);\n const ConditionalWrapper = (props: Record<string, unknown>) => {\n if (wherePredicate(props)) {\n return React.createElement(Wrapped, props);\n }\n return React.createElement(comp, props);\n };\n ConditionalWrapper.displayName = `ConditionalWrap(${(comp as unknown as { displayName?: string; name?: string }).displayName || (comp as unknown as { name?: string }).name || 'Component'})`;\n return ConditionalWrapper as unknown as ComponentType;\n }\n return wrapper(comp);\n },\n resolvedType\n );\n wrapCache.set(resolvedType, wrapped);\n }\n newType = wrapCache.get(resolvedType)!;\n typeChanged = true;\n }\n }\n }\n }\n\n // Recursively transform children prop\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const childrenProp = (element.props as any).children;\n const transformedChildren = childrenProp != null\n ? transformElementTree(childrenProp, wrappers, replacements, wrapCache)\n : childrenProp;\n const childrenChanged = transformedChildren !== childrenProp;\n\n if (!typeChanged && !childrenChanged) return node;\n\n // Rebuild the element with the new type and/or children\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { children: _children, ...restProps } = element.props as any;\n return React.createElement(\n newType,\n { ...restProps, key: element.key },\n transformedChildren\n );\n}\n\nfunction createInitialState(): SidekickState {\n return {\n overrides: [],\n // UI state\n wrappers: new Map(),\n replacements: new Map(),\n styles: [],\n columns: new Map(),\n columnRenames: new Map(),\n hiddenColumns: new Map(),\n columnOrders: new Map(),\n rowFilters: new Map(),\n menuItems: new Map(),\n tabs: new Map(),\n propsModifiers: new Map(),\n actions: new Map(),\n validations: new Map(),\n // Data state\n computedFields: new Map(),\n filters: new Map(),\n transforms: new Map(),\n interceptors: [],\n sortOptions: new Map(),\n groupByOptions: new Map(),\n // Behavior state\n eventHandlers: new Map(),\n keyboardShortcuts: [],\n routeModifiers: [],\n // DOM state\n domModifications: [],\n injections: [],\n domEventListeners: [],\n };\n}\n\nexport function SidekickProvider({ children, overridesEndpoint }: SidekickProviderProps) {\n const [state, setState] = useState<SidekickState>(createInitialState);\n const [overrides, setOverrides] = useState<Override[]>([]);\n const [isReady, setIsReady] = useState(false);\n\n // Store refs for interceptor getters to avoid stale closures\n const stateRef = useRef(state);\n stateRef.current = state;\n\n // Initialize overrides AND configure JSX runtime, then render children\n useEffect(() => {\n const initializeOverrides = async () => {\n const newState = createInitialState();\n const loadedOverrides: Override[] = [];\n\n if (overridesEndpoint) {\n // Load overrides from API\n console.log('[Sidekick] Fetching overrides from:', overridesEndpoint);\n const apiOverrides = await fetchAndCompileOverrides(overridesEndpoint);\n console.log('[Sidekick] Fetched overrides:', apiOverrides.length);\n\n for (const override of apiOverrides) {\n loadedOverrides.push({\n id: override.id,\n name: override.name,\n description: override.description,\n version: '1.0.0',\n enabled: override.enabled,\n });\n\n // Activate if enabled\n if (override.enabled) {\n console.log(`[Sidekick] Activating override: ${override.id}`);\n const sdk: SDK = {\n ui: createUIPrimitives(newState, override.id),\n data: createDataPrimitives(newState, override.id),\n behavior: createBehaviorPrimitives(newState, override.id),\n };\n try {\n override.activate(sdk);\n console.log(`[Sidekick] Activated override: ${override.id}`);\n } catch (error) {\n console.error(`[Sidekick] Failed to activate override ${override.id}:`, error);\n }\n }\n }\n } else {\n // Load overrides from static registry (development mode)\n const registeredOverrides = getRegisteredOverrides();\n const flags = loadFlags();\n\n for (const module of registeredOverrides) {\n loadedOverrides.push({\n id: module.manifest.id,\n name: module.manifest.name,\n description: module.manifest.description,\n version: module.manifest.version,\n enabled: flags[module.manifest.id] ?? false,\n });\n }\n\n // Activate enabled overrides\n for (const module of registeredOverrides) {\n const isEnabled = flags[module.manifest.id] ?? false;\n if (isEnabled) {\n console.log(`[Sidekick] Activating override: ${module.manifest.id}`);\n const sdk: SDK = {\n ui: createUIPrimitives(newState, module.manifest.id),\n data: createDataPrimitives(newState, module.manifest.id),\n behavior: createBehaviorPrimitives(newState, module.manifest.id),\n };\n await module.activate(sdk);\n console.log(`[Sidekick] After activation, wrappers:`, Array.from(newState.wrappers.keys()));\n }\n }\n }\n\n newState.overrides = loadedOverrides;\n\n // Auto-create wrappers for tables with any modifications\n // (added columns, renames, reorders, hidden columns, row filters)\n // This enables addColumn/renameColumn/reorderColumns/hideColumn/filterRows to work\n // without app components being Sidekick-aware\n const tableIdsWithMods = new Set<string>();\n for (const tableId of newState.columns.keys()) tableIdsWithMods.add(tableId);\n for (const tableId of newState.columnRenames.keys()) tableIdsWithMods.add(tableId);\n for (const tableId of newState.columnOrders.keys()) tableIdsWithMods.add(tableId);\n for (const tableId of newState.hiddenColumns.keys()) tableIdsWithMods.add(tableId);\n for (const tableId of newState.rowFilters.keys()) tableIdsWithMods.add(tableId);\n\n for (const tableId of tableIdsWithMods) {\n const cols = newState.columns.get(tableId) ?? [];\n const tableRenames = newState.columnRenames.get(tableId) ?? [];\n const tableOrder = newState.columnOrders.get(tableId);\n const tableHidden = newState.hiddenColumns.get(tableId) ?? [];\n const tableRowFilters = newState.rowFilters.get(tableId) ?? [];\n\n // Skip if there are truly no modifications\n if (cols.length === 0 && tableRenames.length === 0 && !tableOrder && tableHidden.length === 0 && tableRowFilters.length === 0) continue;\n\n const componentName = tableIdToComponentName(tableId);\n console.log(`[Sidekick] Auto-wrapping ${componentName} with ${cols.length} added columns, ${tableRenames.length} renames, ${tableOrder ? 'reorder' : 'no reorder'}, ${tableHidden.length} hidden, ${tableRowFilters.length} row filters`);\n\n const wrapped: WrappedComponent = {\n id: `auto-columns-${tableId}`,\n overrideId: '__sidekick-internal__',\n wrapper: createAutoColumnWrapper(cols, tableRenames, tableOrder, tableHidden, tableRowFilters),\n priority: -1000, // Low priority - runs after user wrappers\n };\n const existing = newState.wrappers.get(componentName) ?? [];\n existing.push(wrapped);\n existing.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n newState.wrappers.set(componentName, existing);\n }\n\n setState(newState);\n stateRef.current = newState;\n setOverrides(loadedOverrides);\n\n // Configure JSX runtime AFTER overrides are loaded and state is set\n const wrapperGetter = (name: string): ((Component: ComponentType) => ComponentType) | undefined => {\n const wrappers = stateRef.current.wrappers.get(name);\n if (!wrappers || wrappers.length === 0) return undefined;\n return (Component: ComponentType) => {\n return wrappers.reduce(\n (wrapped, { wrapper, where: wherePredicate }) => {\n if (wherePredicate) {\n const Wrapped = wrapper(wrapped);\n const ConditionalWrapper = (props: Record<string, unknown>) => {\n if (wherePredicate(props)) {\n return React.createElement(Wrapped, props);\n }\n return React.createElement(wrapped, props);\n };\n ConditionalWrapper.displayName = `ConditionalWrap(${(wrapped as unknown as { displayName?: string; name?: string }).displayName || (wrapped as unknown as { name?: string }).name || 'Component'})`;\n return ConditionalWrapper as unknown as ComponentType;\n }\n return wrapper(wrapped);\n },\n Component\n );\n };\n };\n\n const replacementGetter = (name: string): ComponentType | undefined => {\n return stateRef.current.replacements.get(name);\n };\n\n console.log('[Sidekick] Configuring JSX runtime with', newState.wrappers.size, 'wrappers,', newState.replacements.size, 'replacements,', newState.columns.size, 'column sets');\n configureJsxRuntime(wrapperGetter, replacementGetter);\n configureJsxDevRuntime(wrapperGetter, replacementGetter);\n console.log('[Sidekick] JSX runtime configured');\n\n // NOW allow children to render\n setIsReady(true);\n };\n\n initializeOverrides();\n }, [overridesEndpoint]);\n\n // Inject styles into document\n useEffect(() => {\n if (!isReady || typeof document === 'undefined') return;\n\n const styleId = 'sidekick-injected-styles';\n let styleEl = document.getElementById(styleId) as HTMLStyleElement | null;\n\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = styleId;\n document.head.appendChild(styleEl);\n }\n\n styleEl.textContent = state.styles.map((s) => s.css).join('\\n');\n\n return () => {\n if (styleEl && styleEl.parentNode) {\n styleEl.parentNode.removeChild(styleEl);\n }\n };\n }, [state.styles, isReady]);\n\n // Update JSX runtime getters when state changes (after initial load)\n useEffect(() => {\n if (!isReady) return;\n\n const wrapperGetter = (name: string): ((Component: ComponentType) => ComponentType) | undefined => {\n const wrappers = state.wrappers.get(name);\n if (!wrappers || wrappers.length === 0) return undefined;\n\n return (Component: ComponentType) => {\n return wrappers.reduce(\n (wrapped, { wrapper, where: wherePredicate }) => {\n if (wherePredicate) {\n const Wrapped = wrapper(wrapped);\n const ConditionalWrapper = (props: Record<string, unknown>) => {\n if (wherePredicate(props)) {\n return React.createElement(Wrapped, props);\n }\n return React.createElement(wrapped, props);\n };\n ConditionalWrapper.displayName = `ConditionalWrap(${(wrapped as unknown as { displayName?: string; name?: string }).displayName || (wrapped as unknown as { name?: string }).name || 'Component'})`;\n return ConditionalWrapper as unknown as ComponentType;\n }\n return wrapper(wrapped);\n },\n Component\n );\n };\n };\n\n const replacementGetter = (name: string): ComponentType | undefined => {\n return state.replacements.get(name);\n };\n\n configureJsxRuntime(wrapperGetter, replacementGetter);\n configureJsxDevRuntime(wrapperGetter, replacementGetter);\n }, [state.wrappers, state.replacements, isReady]);\n\n // --- DOM Modifications (MutationObserver) ---\n useEffect(() => {\n if (!isReady || typeof document === 'undefined' || state.domModifications.length === 0) return;\n\n // Track original values for cleanup\n const originals = new Map<Element, { type: string; value: unknown }>();\n\n function applyModifications() {\n for (const mod of state.domModifications) {\n let elements: NodeListOf<Element>;\n try {\n elements = document.querySelectorAll(mod.selector);\n } catch {\n console.warn(`[Sidekick] Invalid CSS selector: \"${mod.selector}\"`);\n continue;\n }\n elements.forEach((el) => {\n const htmlEl = el as HTMLElement;\n // Store original value on first application\n if (!originals.has(el)) {\n switch (mod.type) {\n case 'setText': {\n // Collect original text node values (not textContent, which would lose references)\n const textNodes: { node: Text; value: string }[] = [];\n const tw = document.createTreeWalker(htmlEl, NodeFilter.SHOW_TEXT);\n let tn: Text | null;\n while ((tn = tw.nextNode() as Text | null)) {\n textNodes.push({ node: tn, value: tn.nodeValue || '' });\n }\n originals.set(el, { type: 'setText', value: textNodes });\n break;\n }\n case 'setAttribute': {\n const { attr } = mod.value as { attr: string; value: string };\n originals.set(el, { type: 'setAttribute', value: { attr, value: htmlEl.getAttribute(attr) } });\n break;\n }\n case 'setStyle':\n originals.set(el, { type: 'setStyle', value: htmlEl.style.cssText });\n break;\n case 'addClass':\n originals.set(el, { type: 'addClass', value: mod.value });\n break;\n case 'removeClass':\n originals.set(el, { type: 'removeClass', value: mod.value });\n break;\n }\n }\n // Apply the modification\n switch (mod.type) {\n case 'setText': {\n // Modify existing text nodes in-place to avoid destroying React's DOM references.\n // Using textContent would remove all child nodes, breaking React reconciliation.\n const walker = document.createTreeWalker(htmlEl, NodeFilter.SHOW_TEXT);\n const firstTextNode = walker.nextNode() as Text | null;\n if (firstTextNode) {\n firstTextNode.nodeValue = mod.value as string;\n // Clear any remaining text nodes\n let extra: Text | null;\n while ((extra = walker.nextNode() as Text | null)) {\n extra.nodeValue = '';\n }\n }\n break;\n }\n case 'setAttribute': {\n const { attr, value } = mod.value as { attr: string; value: string };\n htmlEl.setAttribute(attr, value);\n break;\n }\n case 'setStyle':\n Object.assign(htmlEl.style, mod.value as Record<string, string>);\n break;\n case 'addClass':\n htmlEl.classList.add(mod.value as string);\n break;\n case 'removeClass':\n htmlEl.classList.remove(mod.value as string);\n break;\n }\n htmlEl.setAttribute('data-sidekick-dom-mod', 'true');\n });\n }\n }\n\n applyModifications();\n\n const observer = new MutationObserver(() => {\n applyModifications();\n });\n if (document.body) {\n observer.observe(document.body, { childList: true, subtree: true });\n }\n\n return () => {\n observer.disconnect();\n // Restore original values\n originals.forEach((original, el) => {\n const htmlEl = el as HTMLElement;\n switch (original.type) {\n case 'setText': {\n const textNodes = original.value as { node: Text; value: string }[];\n for (const { node, value } of textNodes) {\n try { node.nodeValue = value; } catch { /* node may have been removed by React */ }\n }\n break;\n }\n case 'setAttribute': {\n const { attr, value } = original.value as { attr: string; value: string | null };\n if (value === null) htmlEl.removeAttribute(attr);\n else htmlEl.setAttribute(attr, value);\n break;\n }\n case 'setStyle':\n htmlEl.style.cssText = original.value as string;\n break;\n case 'addClass':\n htmlEl.classList.remove(original.value as string);\n break;\n case 'removeClass':\n htmlEl.classList.add(original.value as string);\n break;\n }\n htmlEl.removeAttribute('data-sidekick-dom-mod');\n });\n };\n }, [state.domModifications, isReady]);\n\n // --- Keyboard Shortcuts (keydown listener) ---\n useEffect(() => {\n if (!isReady || typeof document === 'undefined' || state.keyboardShortcuts.length === 0) return;\n\n function matchesKeys(event: KeyboardEvent, keys: string): boolean {\n const parts = keys.toLowerCase().split('+').map(s => s.trim());\n const keyName = parts[parts.length - 1];\n const modifiers = new Set(parts.slice(0, -1));\n\n const needsCtrl = modifiers.has('ctrl') || modifiers.has('cmd') || modifiers.has('meta');\n const needsShift = modifiers.has('shift');\n const needsAlt = modifiers.has('alt');\n\n if (needsCtrl !== (event.ctrlKey || event.metaKey)) return false;\n if (needsShift !== event.shiftKey) return false;\n if (needsAlt !== event.altKey) return false;\n\n return event.key.toLowerCase() === keyName || event.code.toLowerCase() === keyName;\n }\n\n function handleKeydown(event: KeyboardEvent) {\n for (const shortcut of state.keyboardShortcuts) {\n if (matchesKeys(event, shortcut.keys)) {\n event.preventDefault();\n try {\n shortcut.action();\n } catch (error) {\n console.error(`[Sidekick] Keyboard shortcut error for \"${shortcut.keys}\":`, error);\n }\n return;\n }\n }\n }\n\n document.addEventListener('keydown', handleKeydown);\n return () => {\n document.removeEventListener('keydown', handleKeydown);\n };\n }, [state.keyboardShortcuts, isReady]);\n\n // --- Fetch Interception (monkey-patch window.fetch) ---\n useEffect(() => {\n if (!isReady || typeof window === 'undefined' || state.interceptors.length === 0) return;\n\n const originalFetch = window.fetch;\n\n window.fetch = async function sidekickFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const response = await originalFetch.call(window, input, init);\n const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n const method = init?.method || 'GET';\n\n for (const interceptor of stateRef.current.interceptors) {\n const pattern = interceptor.pathPattern;\n const matches = typeof pattern === 'string'\n ? url.includes(pattern)\n : pattern.test(url);\n\n if (matches) {\n try {\n const cloned = response.clone();\n const json = await cloned.json();\n const modified = interceptor.handler(json, { path: url, method });\n return new Response(JSON.stringify(modified), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n } catch {\n // If JSON parsing fails or handler errors, return original\n return response;\n }\n }\n }\n\n return response;\n };\n\n return () => {\n window.fetch = originalFetch;\n };\n }, [state.interceptors, isReady]);\n\n // --- DOM Injections (MutationObserver + Portals) ---\n const [injectionContainers, setInjectionContainers] = useState<Array<{ injection: InjectionPoint; container: HTMLElement }>>([]);\n\n useEffect(() => {\n if (!isReady || typeof document === 'undefined' || state.injections.length === 0) return;\n\n const containers: Array<{ injection: InjectionPoint; container: HTMLElement }> = [];\n\n function createContainers() {\n // Clean up previous containers\n document.querySelectorAll('[data-sidekick-injection]').forEach(el => el.remove());\n containers.length = 0;\n\n for (const injection of state.injections) {\n let target: Element | null;\n try {\n target = document.querySelector(injection.selector);\n } catch {\n console.warn(`[Sidekick] Invalid CSS selector: \"${injection.selector}\"`);\n continue;\n }\n if (!target) continue;\n\n const container = document.createElement('div');\n container.setAttribute('data-sidekick-injection', injection.id);\n\n switch (injection.position) {\n case 'before':\n target.parentNode?.insertBefore(container, target);\n break;\n case 'after':\n target.parentNode?.insertBefore(container, target.nextSibling);\n break;\n case 'prepend':\n target.insertBefore(container, target.firstChild);\n break;\n case 'append':\n target.appendChild(container);\n break;\n }\n\n containers.push({ injection, container });\n }\n\n setInjectionContainers([...containers]);\n }\n\n createContainers();\n\n const observer = new MutationObserver(() => {\n // Re-check if any targets appeared\n const needsUpdate = state.injections.some(inj => {\n try {\n const existing = document.querySelector(`[data-sidekick-injection=\"${inj.id}\"]`);\n if (existing) return false;\n const target = document.querySelector(inj.selector);\n return !!target;\n } catch {\n return false;\n }\n });\n if (needsUpdate) createContainers();\n });\n if (document.body) {\n observer.observe(document.body, { childList: true, subtree: true });\n }\n\n return () => {\n observer.disconnect();\n document.querySelectorAll('[data-sidekick-injection]').forEach(el => el.remove());\n setInjectionContainers([]);\n };\n }, [state.injections, isReady]);\n\n // --- DOM Event Delegation ---\n useEffect(() => {\n if (!isReady || typeof document === 'undefined' || state.domEventListeners.length === 0) return;\n\n const cleanups: Array<() => void> = [];\n\n for (const listener of state.domEventListeners) {\n const handler = (event: Event) => {\n const target = event.target as Element | null;\n if (!target) return;\n let matched: Element | null;\n try {\n matched = target.matches(listener.selector) ? target : target.closest(listener.selector);\n } catch {\n return; // Invalid selector\n }\n if (matched) {\n try {\n listener.handler(event, matched);\n } catch (error) {\n console.error(`[Sidekick] DOM event handler error for \"${listener.selector}\" ${listener.eventType}:`, error);\n }\n }\n };\n document.addEventListener(listener.eventType, handler);\n cleanups.push(() => document.removeEventListener(listener.eventType, handler));\n }\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [state.domEventListeners, isReady]);\n\n // --- Route Modification (history patch) ---\n useEffect(() => {\n if (!isReady || typeof window === 'undefined' || state.routeModifiers.length === 0) return;\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function interceptNavigation(\n original: typeof history.pushState,\n data: unknown,\n unused: string,\n url?: string | URL | null\n ) {\n let finalUrl = url;\n if (url) {\n const urlStr = url.toString();\n for (const modifier of stateRef.current.routeModifiers) {\n const pattern = modifier.pathPattern;\n const matches = typeof pattern === 'string'\n ? urlStr.includes(pattern)\n : pattern.test(urlStr);\n\n if (matches) {\n try {\n const result = modifier.handler({ path: urlStr, params: {} });\n if (typeof result === 'string') {\n finalUrl = result;\n }\n } catch (error) {\n console.error(`[Sidekick] Route modifier error:`, error);\n }\n }\n }\n }\n original(data, unused, finalUrl);\n }\n\n history.pushState = function(data: unknown, unused: string, url?: string | URL | null) {\n interceptNavigation(originalPushState, data, unused, url);\n };\n\n history.replaceState = function(data: unknown, unused: string, url?: string | URL | null) {\n interceptNavigation(originalReplaceState, data, unused, url);\n };\n\n const handlePopState = () => {\n const currentPath = window.location.pathname;\n for (const modifier of stateRef.current.routeModifiers) {\n const pattern = modifier.pathPattern;\n const matches = typeof pattern === 'string'\n ? currentPath.includes(pattern)\n : pattern.test(currentPath);\n\n if (matches) {\n try {\n modifier.handler({ path: currentPath, params: {} });\n } catch (error) {\n console.error(`[Sidekick] Route modifier error on popstate:`, error);\n }\n }\n }\n };\n\n window.addEventListener('popstate', handlePopState);\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener('popstate', handlePopState);\n };\n }, [state.routeModifiers, isReady]);\n\n const isOverrideEnabled = useCallback(\n (id: string) => {\n // For API-based overrides, check the loaded state\n const override = overrides.find(o => o.id === id);\n if (override) return override.enabled;\n // Fallback to localStorage\n return getFlag(id);\n },\n [overrides]\n );\n\n const toggleOverride = useCallback(\n (id: string) => {\n const currentEnabled = getFlag(id);\n saveFlag(id, !currentEnabled);\n // Trigger re-initialization\n window.location.reload();\n },\n []\n );\n\n const getColumns = useCallback(\n (tableId: string): AddedColumn[] => {\n return state.columns.get(tableId) ?? [];\n },\n [state.columns]\n );\n\n const getColumnRenames = useCallback(\n (tableId: string): ColumnRename[] => {\n return state.columnRenames.get(tableId) ?? [];\n },\n [state.columnRenames]\n );\n\n const getHiddenColumns = useCallback(\n (tableId: string) => {\n return state.hiddenColumns.get(tableId) ?? [];\n },\n [state.hiddenColumns]\n );\n\n const getColumnOrder = useCallback(\n (tableId: string) => {\n return state.columnOrders.get(tableId);\n },\n [state.columnOrders]\n );\n\n const getMenuItems = useCallback(\n (menuId: string) => {\n return state.menuItems.get(menuId) ?? [];\n },\n [state.menuItems]\n );\n\n const getTabs = useCallback(\n (tabGroupId: string) => {\n return state.tabs.get(tabGroupId) ?? [];\n },\n [state.tabs]\n );\n\n const getActions = useCallback(\n (actionBarId: string) => {\n return state.actions.get(actionBarId) ?? [];\n },\n [state.actions]\n );\n\n const getValidations = useCallback(\n (formId: string) => {\n return state.validations.get(formId) ?? [];\n },\n [state.validations]\n );\n\n const applyPropsModifiers = useCallback(\n (componentId: string, props: Record<string, unknown>) => {\n const modifiers = state.propsModifiers.get(componentId) ?? [];\n return modifiers.reduce((acc, { modifier }) => modifier(acc), props);\n },\n [state.propsModifiers]\n );\n\n const getComputedValue = useCallback(\n <T,>(fieldName: string, data: Record<string, unknown>): T | undefined => {\n const field = state.computedFields.get(fieldName);\n if (!field) return undefined;\n return field.compute(data) as T;\n },\n [state.computedFields]\n );\n\n const applyFilters = useCallback(\n <T,>(filterName: string, items: T[]): T[] => {\n const filter = state.filters.get(filterName);\n if (!filter) return items;\n return filter.filter(items as unknown[]) as T[];\n },\n [state.filters]\n );\n\n const applyTransform = useCallback(\n <T,>(dataKey: string, data: T): T => {\n const transform = state.transforms.get(dataKey);\n if (!transform) return data;\n return transform.transform(data) as T;\n },\n [state.transforms]\n );\n\n const getSortOptions = useCallback(\n (tableId: string) => {\n return state.sortOptions.get(tableId) ?? [];\n },\n [state.sortOptions]\n );\n\n const getGroupByOptions = useCallback(\n (tableId: string) => {\n return state.groupByOptions.get(tableId) ?? [];\n },\n [state.groupByOptions]\n );\n\n const getKeyboardShortcuts = useCallback(\n () => {\n return state.keyboardShortcuts;\n },\n [state.keyboardShortcuts]\n );\n\n const emitEvent = useCallback(\n (eventName: string, payload: Record<string, unknown>) => {\n const handlers = state.eventHandlers.get(eventName) ?? [];\n for (const handler of handlers) {\n try {\n handler.handler(payload);\n } catch (error) {\n console.error(`[Sidekick] Event handler error for ${eventName}:`, error);\n }\n }\n },\n [state.eventHandlers]\n );\n\n const getWrapper = useCallback(\n (componentName: string): ((Component: ComponentType) => ComponentType) | undefined => {\n const wrappers = state.wrappers.get(componentName);\n if (!wrappers || wrappers.length === 0) return undefined;\n\n // Compose all wrappers into a single wrapper function\n return (Component: ComponentType) => {\n return wrappers.reduce(\n (wrapped, { wrapper }) => wrapper(wrapped),\n Component\n );\n };\n },\n [state.wrappers]\n );\n\n const getReplacement = useCallback(\n (componentName: string): ComponentType | undefined => {\n return state.replacements.get(componentName);\n },\n [state.replacements]\n );\n\n const contextValue: SidekickContextValue = useMemo(\n () => ({\n state,\n overrides,\n isOverrideEnabled,\n toggleOverride,\n // UI\n getColumns,\n getColumnRenames,\n getHiddenColumns,\n getColumnOrder,\n getMenuItems,\n getTabs,\n getActions,\n getValidations,\n getWrapper,\n getReplacement,\n applyPropsModifiers,\n // Data\n getComputedValue,\n applyFilters,\n applyTransform,\n getSortOptions,\n getGroupByOptions,\n // Behavior\n getKeyboardShortcuts,\n emitEvent,\n }),\n [\n state,\n overrides,\n isOverrideEnabled,\n toggleOverride,\n getColumns,\n getColumnRenames,\n getHiddenColumns,\n getColumnOrder,\n getMenuItems,\n getTabs,\n getActions,\n getValidations,\n getWrapper,\n getReplacement,\n applyPropsModifiers,\n getComputedValue,\n applyFilters,\n applyTransform,\n getSortOptions,\n getGroupByOptions,\n getKeyboardShortcuts,\n emitEvent,\n ]\n );\n\n // Cache for wrapped component types — persisted across renders via ref\n // so React sees stable component identities and doesn't remount\n const wrapCacheRef = useRef(new Map<unknown, ComponentType>());\n\n // Transform the children element tree to apply wrappers/replacements\n // to components whose JSX callsite is in a server component (and therefore\n // bypasses the custom JSX runtime interception).\n const transformedChildren = useMemo(() => {\n if (!isReady) return null;\n if (state.wrappers.size === 0 && state.replacements.size === 0) return children;\n return transformElementTree(children, state.wrappers, state.replacements, wrapCacheRef.current);\n }, [children, isReady, state.wrappers, state.replacements]);\n\n // Don't render children until overrides are loaded and JSX runtime is configured\n return (\n <SidekickContext.Provider value={contextValue}>\n {isReady ? transformedChildren : null}\n {injectionContainers.map(({ injection, container }) =>\n createPortal(\n React.createElement(injection.component, {}),\n container,\n `sidekick-injection-${injection.id}`\n )\n )}\n </SidekickContext.Provider>\n );\n}\n","'use client';\n\nimport { createContext, useContext, ComponentType } from 'react';\nimport {\n SidekickState,\n Override,\n AddedColumn,\n ColumnRename,\n HiddenColumn,\n ColumnOrder,\n MenuItem,\n TabItem,\n ActionItem,\n ValidationRule,\n SortOption,\n GroupByOption,\n KeyboardShortcut,\n} from './types';\n\nexport interface SidekickContextValue {\n state: SidekickState;\n overrides: Override[];\n isOverrideEnabled: (id: string) => boolean;\n toggleOverride: (id: string) => void;\n // UI getters\n getColumns: (tableId: string) => AddedColumn[];\n getColumnRenames: (tableId: string) => ColumnRename[];\n getHiddenColumns: (tableId: string) => HiddenColumn[];\n getColumnOrder: (tableId: string) => ColumnOrder | undefined;\n getMenuItems: (menuId: string) => MenuItem[];\n getTabs: (tabGroupId: string) => TabItem[];\n getActions: (actionBarId: string) => ActionItem[];\n getValidations: (formId: string) => ValidationRule[];\n getWrapper: (componentName: string) => ((Component: ComponentType) => ComponentType) | undefined;\n getReplacement: (componentName: string) => ComponentType | undefined;\n applyPropsModifiers: (componentId: string, props: Record<string, unknown>) => Record<string, unknown>;\n // Data getters\n getComputedValue: <T>(fieldName: string, data: Record<string, unknown>) => T | undefined;\n applyFilters: <T>(filterName: string, items: T[]) => T[];\n applyTransform: <T>(dataKey: string, data: T) => T;\n getSortOptions: (tableId: string) => SortOption[];\n getGroupByOptions: (tableId: string) => GroupByOption[];\n // Behavior getters\n getKeyboardShortcuts: () => KeyboardShortcut[];\n emitEvent: (eventName: string, payload: Record<string, unknown>) => void;\n}\n\nexport const SidekickContext = createContext<SidekickContextValue | null>(null);\n\n// Safe hook that returns null during SSR instead of throwing\nexport function useSidekickSafe(): SidekickContextValue | null {\n return useContext(SidekickContext);\n}\n\nexport function useSidekick(): SidekickContextValue {\n const context = useContext(SidekickContext);\n if (!context) {\n throw new Error('useSidekick must be used within a SidekickProvider');\n }\n return context;\n}\n\n// UI Hooks\n\nexport function useAddedColumns(tableId: string): AddedColumn[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getColumns(tableId);\n}\n\nexport function useColumnRenames(tableId: string): ColumnRename[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getColumnRenames(tableId);\n}\n\nexport function useHiddenColumns(tableId: string): HiddenColumn[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getHiddenColumns(tableId);\n}\n\nexport function useColumnOrder(tableId: string): ColumnOrder | undefined {\n const context = useSidekickSafe();\n if (!context) return undefined;\n return context.getColumnOrder(tableId);\n}\n\nexport function useMenuItems(menuId: string): MenuItem[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getMenuItems(menuId);\n}\n\nexport function useTabs(tabGroupId: string): TabItem[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getTabs(tabGroupId);\n}\n\nexport function useActions(actionBarId: string): ActionItem[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getActions(actionBarId);\n}\n\nexport function useValidations(formId: string): ValidationRule[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getValidations(formId);\n}\n\nexport function usePropsModifier(componentId: string, props: Record<string, unknown>): Record<string, unknown> {\n const context = useSidekickSafe();\n if (!context) return props;\n return context.applyPropsModifiers(componentId, props);\n}\n\n// Data Hooks\n\nexport function useComputedField<T>(fieldName: string, data: Record<string, unknown>): T | undefined {\n const context = useSidekickSafe();\n if (!context) return undefined;\n return context.getComputedValue<T>(fieldName, data);\n}\n\nexport function useFilter<T>(filterName: string, items: T[]): T[] {\n const context = useSidekickSafe();\n if (!context) return items;\n return context.applyFilters(filterName, items);\n}\n\nexport function useSortOptions(tableId: string): SortOption[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getSortOptions(tableId);\n}\n\nexport function useGroupByOptions(tableId: string): GroupByOption[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getGroupByOptions(tableId);\n}\n\n// Behavior Hooks\n\nexport function useKeyboardShortcuts(): KeyboardShortcut[] {\n const context = useSidekickSafe();\n if (!context) return [];\n return context.getKeyboardShortcuts();\n}\n\nexport function useEventEmitter(): (eventName: string, payload: Record<string, unknown>) => void {\n const context = useSidekickSafe();\n if (!context) return () => {};\n return context.emitEvent;\n}\n","const STORAGE_KEY = 'sidekick_flags';\n\nexport interface FlagState {\n [overrideId: string]: boolean;\n}\n\nexport function loadFlags(): FlagState {\n if (typeof window === 'undefined') {\n return {};\n }\n\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch {\n return {};\n }\n}\n\nexport function saveFlags(flags: FlagState): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(flags));\n } catch {\n console.warn('[Sidekick] Failed to save flags to localStorage');\n }\n}\n\nexport function getFlag(overrideId: string): boolean {\n const flags = loadFlags();\n return flags[overrideId] ?? false;\n}\n\nexport function setFlag(overrideId: string, enabled: boolean): void {\n const flags = loadFlags();\n flags[overrideId] = enabled;\n saveFlags(flags);\n}\n\nexport function toggleFlag(overrideId: string): boolean {\n const current = getFlag(overrideId);\n setFlag(overrideId, !current);\n return !current;\n}\n","import { OverrideModule, OverrideManifest } from './types';\n\nexport interface LoadedOverride {\n manifest: OverrideManifest;\n module: OverrideModule;\n}\n\n// In a real implementation, this would dynamically import from the /sidekick/overrides directory\n// For now, we'll use a registry pattern where overrides register themselves\n\nconst overrideRegistry = new Map<string, OverrideModule>();\n\nexport function registerOverride(module: OverrideModule): void {\n overrideRegistry.set(module.manifest.id, module);\n}\n\nexport function getRegisteredOverrides(): OverrideModule[] {\n return Array.from(overrideRegistry.values());\n}\n\nexport function getOverrideById(id: string): OverrideModule | undefined {\n return overrideRegistry.get(id);\n}\n\nexport function clearOverrides(): void {\n overrideRegistry.clear();\n}\n\n// Helper to create an override module\nexport function createOverride(\n manifest: OverrideManifest,\n activate: OverrideModule['activate']\n): OverrideModule {\n return { manifest, activate };\n}\n","import { ComponentType } from 'react';\nimport {\n UIPrimitives,\n SidekickState,\n WrappedComponent,\n AddedColumn,\n ColumnRename,\n HiddenColumn,\n ColumnOrder,\n RowFilter,\n MenuItem,\n TabItem,\n PropsModifier,\n ActionItem,\n ValidationRule,\n InjectedStyles,\n DOMModification,\n InjectionPoint,\n} from '../types';\n\n// Simple uuid generator for client-side use\nfunction generateId(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function createUIPrimitives(\n state: SidekickState,\n currentOverrideId: string\n): UIPrimitives {\n return {\n wrap(componentName, wrapper, options = {}) {\n const wrapped: WrappedComponent = {\n id: generateId(),\n overrideId: currentOverrideId,\n wrapper,\n priority: options.priority ?? 0,\n where: options.where,\n };\n\n const existing = state.wrappers.get(componentName) ?? [];\n existing.push(wrapped);\n existing.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n state.wrappers.set(componentName, existing);\n },\n\n replace(componentName, replacement) {\n state.replacements.set(componentName, replacement);\n },\n\n addStyles(css) {\n const styles: InjectedStyles = {\n id: generateId(),\n overrideId: currentOverrideId,\n css,\n };\n state.styles.push(styles);\n },\n\n addColumn(tableId, config) {\n const column: AddedColumn = {\n id: generateId(),\n overrideId: currentOverrideId,\n tableId,\n ...config,\n };\n\n const existing = state.columns.get(tableId) ?? [];\n existing.push(column);\n existing.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n state.columns.set(tableId, existing);\n },\n\n renameColumn(tableId, originalHeader, newHeader) {\n const rename: ColumnRename = {\n id: generateId(),\n overrideId: currentOverrideId,\n tableId,\n originalHeader,\n newHeader,\n };\n\n const existing = state.columnRenames.get(tableId) ?? [];\n existing.push(rename);\n state.columnRenames.set(tableId, existing);\n },\n\n hideColumn(tableId, header) {\n const hidden: HiddenColumn = {\n id: generateId(),\n overrideId: currentOverrideId,\n tableId,\n header,\n };\n\n const existing = state.hiddenColumns.get(tableId) ?? [];\n existing.push(hidden);\n state.hiddenColumns.set(tableId, existing);\n },\n\n reorderColumns(tableId, order) {\n const columnOrder: ColumnOrder = {\n id: generateId(),\n overrideId: currentOverrideId,\n tableId,\n order,\n };\n\n // Only one order per table (last one wins)\n state.columnOrders.set(tableId, columnOrder);\n },\n\n filterRows(tableId, filter) {\n const rowFilter: RowFilter = {\n id: generateId(),\n overrideId: currentOverrideId,\n tableId,\n filter,\n };\n\n const existing = state.rowFilters.get(tableId) ?? [];\n existing.push(rowFilter);\n state.rowFilters.set(tableId, existing);\n },\n\n addMenuItem(menuId, config) {\n const item: MenuItem = {\n id: generateId(),\n overrideId: currentOverrideId,\n menuId,\n ...config,\n };\n\n const existing = state.menuItems.get(menuId) ?? [];\n existing.push(item);\n existing.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n state.menuItems.set(menuId, existing);\n },\n\n addTab(tabGroupId, config) {\n const tab: TabItem = {\n id: generateId(),\n overrideId: currentOverrideId,\n tabGroupId,\n ...config,\n };\n\n const existing = state.tabs.get(tabGroupId) ?? [];\n existing.push(tab);\n existing.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n state.tabs.set(tabGroupId, existing);\n },\n\n modifyProps(componentId, modifier) {\n const propsModifier: PropsModifier = {\n id: generateId(),\n overrideId: currentOverrideId,\n componentId,\n modifier,\n };\n\n const existing = state.propsModifiers.get(componentId) ?? [];\n existing.push(propsModifier);\n state.propsModifiers.set(componentId, existing);\n },\n\n addAction(actionBarId, config) {\n const action: ActionItem = {\n id: generateId(),\n overrideId: currentOverrideId,\n actionBarId,\n ...config,\n };\n\n const existing = state.actions.get(actionBarId) ?? [];\n existing.push(action);\n existing.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n state.actions.set(actionBarId, existing);\n },\n\n addValidation(formId, fieldName, validate) {\n const rule: ValidationRule = {\n id: generateId(),\n overrideId: currentOverrideId,\n formId,\n fieldName,\n validate,\n };\n\n const existing = state.validations.get(formId) ?? [];\n existing.push(rule);\n state.validations.set(formId, existing);\n },\n\n setText(selector, text) {\n if (typeof text !== 'string') {\n console.warn(`[Sidekick] setText expects a string value, got ${typeof text}. Ignoring.`);\n return;\n }\n const mod: DOMModification = {\n id: generateId(),\n overrideId: currentOverrideId,\n selector,\n type: 'setText',\n value: text,\n };\n state.domModifications.push(mod);\n },\n\n setAttribute(selector, attr, value) {\n const mod: DOMModification = {\n id: generateId(),\n overrideId: currentOverrideId,\n selector,\n type: 'setAttribute',\n value: { attr, value },\n };\n state.domModifications.push(mod);\n },\n\n setStyle(selector, styles) {\n const mod: DOMModification = {\n id: generateId(),\n overrideId: currentOverrideId,\n selector,\n type: 'setStyle',\n value: styles,\n };\n state.domModifications.push(mod);\n },\n\n addClass(selector, className) {\n const mod: DOMModification = {\n id: generateId(),\n overrideId: currentOverrideId,\n selector,\n type: 'addClass',\n value: className,\n };\n state.domModifications.push(mod);\n },\n\n removeClass(selector, className) {\n const mod: DOMModification = {\n id: generateId(),\n overrideId: currentOverrideId,\n selector,\n type: 'removeClass',\n value: className,\n };\n state.domModifications.push(mod);\n },\n\n inject(selector, component, position = 'after') {\n const injection: InjectionPoint = {\n id: generateId(),\n overrideId: currentOverrideId,\n selector,\n position,\n component,\n };\n state.injections.push(injection);\n },\n };\n}\n","import {\n DataPrimitives,\n SidekickState,\n ComputedField,\n DataFilter,\n DataTransform,\n ApiInterceptor,\n SortOption,\n GroupByOption,\n} from '../types';\n\nfunction generateId(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function createDataPrimitives(\n state: SidekickState,\n currentOverrideId: string\n): DataPrimitives {\n return {\n computed(fieldName, compute) {\n const field: ComputedField = {\n id: generateId(),\n overrideId: currentOverrideId,\n fieldName,\n compute,\n };\n state.computedFields.set(fieldName, field);\n },\n\n addFilter(name, filter) {\n const dataFilter: DataFilter = {\n id: generateId(),\n overrideId: currentOverrideId,\n name,\n filter,\n };\n state.filters.set(name, dataFilter);\n },\n\n transform(dataKey, transformFn) {\n const transform: DataTransform = {\n id: generateId(),\n overrideId: currentOverrideId,\n dataKey,\n transform: transformFn,\n };\n state.transforms.set(dataKey, transform);\n },\n\n intercept(pathPattern, handler) {\n const interceptor: ApiInterceptor = {\n id: generateId(),\n overrideId: currentOverrideId,\n pathPattern,\n handler,\n };\n state.interceptors.push(interceptor);\n },\n\n addSortOption(tableId, config) {\n const sortOption: SortOption = {\n id: generateId(),\n overrideId: currentOverrideId,\n tableId,\n ...config,\n };\n\n const existing = state.sortOptions.get(tableId) ?? [];\n existing.push(sortOption);\n state.sortOptions.set(tableId, existing);\n },\n\n addGroupBy(tableId, config) {\n const groupByOption: GroupByOption = {\n id: generateId(),\n overrideId: currentOverrideId,\n tableId,\n ...config,\n };\n\n const existing = state.groupByOptions.get(tableId) ?? [];\n existing.push(groupByOption);\n state.groupByOptions.set(tableId, existing);\n },\n };\n}\n","import {\n BehaviorPrimitives,\n SidekickState,\n EventHandler,\n KeyboardShortcut,\n RouteModifier,\n DOMEventListener,\n} from '../types';\n\nfunction generateId(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\nexport function createBehaviorPrimitives(\n state: SidekickState,\n currentOverrideId: string\n): BehaviorPrimitives {\n return {\n onEvent(eventName, handler, options = {}) {\n const eventHandler: EventHandler = {\n id: generateId(),\n overrideId: currentOverrideId,\n eventName,\n handler,\n priority: options.priority ?? 0,\n };\n\n const existing = state.eventHandlers.get(eventName) ?? [];\n existing.push(eventHandler);\n existing.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n state.eventHandlers.set(eventName, existing);\n },\n\n addKeyboardShortcut(keys, action, description) {\n const shortcut: KeyboardShortcut = {\n id: generateId(),\n overrideId: currentOverrideId,\n keys,\n action,\n description,\n };\n state.keyboardShortcuts.push(shortcut);\n },\n\n modifyRoute(pathPattern, handler) {\n const modifier: RouteModifier = {\n id: generateId(),\n overrideId: currentOverrideId,\n pathPattern,\n handler,\n };\n state.routeModifiers.push(modifier);\n },\n\n onDOMEvent(selector, eventType, handler) {\n const listener: DOMEventListener = {\n id: generateId(),\n overrideId: currentOverrideId,\n selector,\n eventType,\n handler,\n };\n state.domEventListeners.push(listener);\n },\n };\n}\n","import React from 'react';\nimport { transform } from 'sucrase';\nimport { createOverride } from './loader';\nimport { SDK } from './types';\n\ninterface OverrideData {\n id: string;\n name: string;\n description: string;\n code: string;\n enabled: boolean;\n}\n\ninterface LoadedOverride {\n id: string;\n name: string;\n description: string;\n enabled: boolean;\n activate: (sdk: SDK) => void;\n}\n\nexport function compileOverride(overrideData: OverrideData): LoadedOverride | null {\n try {\n // Transform TypeScript/JSX to plain JavaScript\n const transformed = transform(overrideData.code, {\n transforms: ['typescript', 'jsx'],\n jsxRuntime: 'classic',\n });\n\n // Create a module-like environment\n const exports: { default?: ReturnType<typeof createOverride> } = {};\n const require = (moduleName: string) => {\n if (moduleName === 'react') return React;\n if (moduleName === '@usesidekick/react') {\n return { createOverride, SDK: {} };\n }\n throw new Error(`Module not found: ${moduleName}`);\n };\n\n // Execute the transformed code\n // Prepend destructuring of common React exports so overrides can use\n // bare names like useState, useEffect, etc. instead of React.useState\n const reactDestructure = 'var { useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, memo, forwardRef, createContext, Fragment } = React;\\n';\n const moduleFunction = new Function(\n 'exports',\n 'require',\n 'React',\n 'createOverride',\n reactDestructure + transformed.code.replace(\n /import\\s+.*?from\\s+['\"].*?['\"]/g,\n '' // Remove import statements, we inject dependencies\n ).replace(\n /export\\s+default\\s+/,\n 'exports.default = '\n )\n );\n\n moduleFunction(exports, require, React, createOverride);\n\n if (!exports.default) {\n console.error(`[Sidekick] Override ${overrideData.id} has no default export`);\n return null;\n }\n\n return {\n id: overrideData.id,\n name: overrideData.name,\n description: overrideData.description,\n enabled: overrideData.enabled,\n activate: exports.default.activate,\n };\n } catch (error) {\n console.error(`[Sidekick] Failed to compile override ${overrideData.id}:`, error);\n return null;\n }\n}\n\nexport async function fetchAndCompileOverrides(\n endpoint: string\n): Promise<LoadedOverride[]> {\n try {\n const response = await fetch(endpoint);\n if (!response.ok) {\n throw new Error(`Failed to fetch overrides: ${response.status}`);\n }\n\n const data = await response.json();\n if (!data.success || !Array.isArray(data.overrides)) {\n throw new Error('Invalid response format');\n }\n\n const compiled: LoadedOverride[] = [];\n for (const override of data.overrides) {\n // Compile all overrides (enabled or not) so they appear in the list\n const loaded = compileOverride(override);\n if (loaded) {\n compiled.push(loaded);\n }\n }\n\n return compiled;\n } catch (error) {\n console.error('[Sidekick] Failed to fetch overrides:', error);\n return [];\n }\n}\n","/**\n * Custom JSX runtime that intercepts component creation.\n * Uses React.createElement internally to avoid circular dependency with react/jsx-runtime alias.\n *\n * IMPORTANT: Uses globalThis to share state between module instances.\n * When bundled with splitting:false, index.mjs and jsx-runtime.mjs each get their own copy.\n * The provider configures the copy in index.mjs, but JSX calls use jsx-runtime.mjs.\n * By storing getters on globalThis, all instances share the same configuration.\n */\n\nimport React from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype WrapperGetter = (name: string) => ((Component: any) => any) | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ReplacementGetter = (name: string) => any | undefined;\ntype ConfigChangeListener = () => void;\n\nconst GLOBAL_KEY = '__SIDEKICK_JSX_CONFIG__';\n\ninterface SidekickJsxConfig {\n getWrapper: WrapperGetter | null;\n getReplacement: ReplacementGetter | null;\n listeners: Set<ConfigChangeListener>;\n seenComponents: Set<string>;\n}\n\nfunction getGlobalConfig(): SidekickJsxConfig {\n const g = globalThis as Record<string, unknown>;\n if (!g[GLOBAL_KEY]) {\n g[GLOBAL_KEY] = {\n getWrapper: null,\n getReplacement: null,\n listeners: new Set<ConfigChangeListener>(),\n seenComponents: new Set<string>(),\n };\n }\n return g[GLOBAL_KEY] as SidekickJsxConfig;\n}\n\n// Debug mode - check on each call since it might be set after module load\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDebug = () => typeof window !== 'undefined' && (window as any).__SIDEKICK_DEBUG__;\n\nfunction getComponentName(type: unknown): string | null {\n if (!type) return null;\n\n if (typeof type === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = type as any;\n if (fn.displayName) return fn.displayName;\n if (fn.name) return fn.name;\n return null;\n }\n\n if (typeof type === 'object' && type !== null) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const obj = type as any;\n if (obj.displayName) return obj.displayName;\n if (obj.$$typeof) {\n if (obj.type) return getComponentName(obj.type);\n if (obj.render) return getComponentName(obj.render);\n }\n }\n\n return null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction interceptType(type: any): any {\n if (typeof type === 'function' || (typeof type === 'object' && type !== null)) {\n const name = getComponentName(type);\n const debug = getDebug();\n const config = getGlobalConfig();\n\n if (name) {\n if (debug && !config.seenComponents.has(name)) {\n config.seenComponents.add(name);\n console.log(`[Sidekick] Seen component: ${name}`);\n }\n\n if (config.getReplacement) {\n const replacement = config.getReplacement(name);\n if (replacement) {\n if (debug) console.log(`[Sidekick] Replacing: ${name}`);\n return replacement;\n }\n }\n\n if (config.getWrapper) {\n const wrapper = config.getWrapper(name);\n if (wrapper) {\n if (debug) console.log(`[Sidekick] Wrapping: ${name}`);\n return wrapper(type);\n }\n }\n }\n }\n\n return type;\n}\n\n// Wrapped jsx function - uses React.createElement to avoid circular alias\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function jsx(type: any, props: any, key?: string) {\n const { children, ...restProps } = props || {};\n const finalProps = key !== undefined ? { ...restProps, key } : restProps;\n return React.createElement(interceptType(type), finalProps, children);\n}\n\n// Wrapped jsxs function (for multiple children)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function jsxs(type: any, props: any, key?: string) {\n const { children, ...restProps } = props || {};\n const finalProps = key !== undefined ? { ...restProps, key } : restProps;\n // For jsxs, children is always an array\n return React.createElement(interceptType(type), finalProps, ...(children || []));\n}\n\n// Re-export Fragment from React\nexport const Fragment = React.Fragment;\n\n// Configuration function - called by SidekickProvider\nexport function configureJsxRuntime(\n wrapperGetter: WrapperGetter,\n replacementGetter: ReplacementGetter\n) {\n const config = getGlobalConfig();\n config.getWrapper = wrapperGetter;\n config.getReplacement = replacementGetter;\n if (getDebug()) console.log('[Sidekick] JSX runtime configured (global)');\n\n // Notify all listeners that config has changed\n config.listeners.forEach(listener => {\n try {\n listener();\n } catch (e) {\n console.error('[Sidekick] Config change listener error:', e);\n }\n });\n}\n\n// Subscribe to config changes (for triggering re-renders)\nexport function onConfigChange(listener: ConfigChangeListener): () => void {\n const config = getGlobalConfig();\n config.listeners.add(listener);\n return () => config.listeners.delete(listener);\n}\n\n// Check if the runtime is configured\nexport function isJsxRuntimeConfigured(): boolean {\n const config = getGlobalConfig();\n return config.getWrapper !== null || config.getReplacement !== null;\n}\n\nexport function getSeenComponentsFromJsx(): string[] {\n const config = getGlobalConfig();\n return Array.from(config.seenComponents);\n}\n","/**\n * Custom JSX dev runtime that intercepts component creation.\n * This is used in development mode.\n * Uses React.createElement internally to avoid circular dependency with react/jsx-dev-runtime alias.\n *\n * IMPORTANT: Uses the same globalThis-based config as jsx-runtime.ts\n * so all module instances share the same configuration regardless of bundling.\n */\n\nimport React from 'react';\nimport { configureJsxRuntime, getSeenComponentsFromJsx } from './jsx-runtime';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype WrapperGetter = (name: string) => ((Component: any) => any) | undefined;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ReplacementGetter = (name: string) => any | undefined;\n\nconst GLOBAL_KEY = '__SIDEKICK_JSX_CONFIG__';\n\ninterface SidekickJsxConfig {\n getWrapper: WrapperGetter | null;\n getReplacement: ReplacementGetter | null;\n listeners: Set<() => void>;\n seenComponents: Set<string>;\n}\n\nfunction getGlobalConfig(): SidekickJsxConfig {\n const g = globalThis as Record<string, unknown>;\n if (!g[GLOBAL_KEY]) {\n g[GLOBAL_KEY] = {\n getWrapper: null,\n getReplacement: null,\n listeners: new Set(),\n seenComponents: new Set<string>(),\n };\n }\n return g[GLOBAL_KEY] as SidekickJsxConfig;\n}\n\n// Debug mode\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst getDebug = () => typeof window !== 'undefined' && (window as any).__SIDEKICK_DEBUG__;\n\nfunction getComponentName(type: unknown): string | null {\n if (!type) return null;\n\n if (typeof type === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = type as any;\n if (fn.displayName) return fn.displayName;\n if (fn.name) return fn.name;\n return null;\n }\n\n if (typeof type === 'object' && type !== null) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const obj = type as any;\n if (obj.displayName) return obj.displayName;\n if (obj.$$typeof) {\n if (obj.type) return getComponentName(obj.type);\n if (obj.render) return getComponentName(obj.render);\n }\n }\n\n return null;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction interceptType(type: any): any {\n if (typeof type === 'function' || (typeof type === 'object' && type !== null)) {\n const name = getComponentName(type);\n const debug = getDebug();\n const config = getGlobalConfig();\n\n if (name) {\n if (debug && !config.seenComponents.has(name)) {\n config.seenComponents.add(name);\n console.log(`[Sidekick] Seen component: ${name}`);\n }\n\n if (config.getReplacement) {\n const replacement = config.getReplacement(name);\n if (replacement) {\n if (debug) console.log(`[Sidekick] Replacing: ${name}`);\n return replacement;\n }\n }\n\n if (config.getWrapper) {\n const wrapper = config.getWrapper(name);\n if (wrapper) {\n if (debug) console.log(`[Sidekick] Wrapping: ${name}`);\n return wrapper(type);\n }\n }\n }\n }\n\n return type;\n}\n\n// Wrapped jsxDEV function - uses React.createElement to avoid circular alias\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function jsxDEV(\n type: any,\n props: any,\n key: string | undefined,\n _isStaticChildren: boolean,\n _source: any,\n _self: any\n) {\n const { children, ...restProps } = props || {};\n const finalProps = key !== undefined ? { ...restProps, key } : restProps;\n\n // Handle both single child and array of children\n if (Array.isArray(children)) {\n return React.createElement(interceptType(type), finalProps, ...children);\n }\n return React.createElement(interceptType(type), finalProps, children);\n}\n\n// Re-export Fragment from React\nexport const Fragment = React.Fragment;\n\n// Configuration function - configures the shared global state\nexport function configureJsxDevRuntime(\n wrapperGetter: WrapperGetter,\n replacementGetter: ReplacementGetter\n) {\n const config = getGlobalConfig();\n config.getWrapper = wrapperGetter;\n config.getReplacement = replacementGetter;\n // Also configure via the production runtime's function (for its listeners)\n configureJsxRuntime(wrapperGetter, replacementGetter);\n if (getDebug()) console.log('[Sidekick] JSX dev runtime configured (global)');\n}\n\nexport { getSeenComponentsFromJsx };\n","'use client';\n\nimport { useState, useCallback, useEffect, FormEvent } from 'react';\nimport { useSidekickSafe } from '../context';\nimport { setFlag } from '../flags';\n\ninterface Message {\n id: string;\n role: 'user' | 'assistant' | 'system';\n content: string;\n timestamp: Date;\n status?: 'pending' | 'generating' | 'success' | 'error';\n overrideId?: string;\n}\n\ninterface SidekickPanelProps {\n apiEndpoint?: string;\n deleteEndpoint?: string;\n toggleEndpoint?: string;\n onGenerate?: (request: string) => Promise<{ success: boolean; overrideId?: string; error?: string }>;\n onDelete?: (overrideId: string) => Promise<{ success: boolean; error?: string }>;\n onToggle?: (overrideId: string, enabled: boolean) => Promise<{ success: boolean; error?: string }>;\n}\n\nexport function SidekickPanel({ apiEndpoint, deleteEndpoint, toggleEndpoint, onGenerate, onDelete, onToggle }: SidekickPanelProps) {\n // Initialize state from sessionStorage to persist across reloads\n const [isOpen, setIsOpen] = useState(() => {\n if (typeof window === 'undefined') return false;\n return sessionStorage.getItem('sidekick_panel_open') === 'true';\n });\n const [activeTab, setActiveTab] = useState<'chat' | 'overrides'>(() => {\n if (typeof window === 'undefined') return 'chat';\n return (sessionStorage.getItem('sidekick_panel_tab') as 'chat' | 'overrides') || 'chat';\n });\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState('');\n const [isGenerating, setIsGenerating] = useState(false);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [togglingId, setTogglingId] = useState<string | null>(null);\n const [editingOverrideId, setEditingOverrideId] = useState<string | null>(null);\n\n const context = useSidekickSafe();\n const overrides = context?.overrides ?? [];\n\n // Compute endpoints from apiEndpoint if not provided\n const effectiveDeleteEndpoint = deleteEndpoint || (apiEndpoint ? apiEndpoint.replace('/generate', '/delete') : undefined);\n const effectiveToggleEndpoint = toggleEndpoint || (apiEndpoint ? apiEndpoint.replace('/generate', '/toggle') : undefined);\n\n // Persist panel state changes to sessionStorage\n useEffect(() => {\n if (typeof window === 'undefined') return;\n sessionStorage.setItem('sidekick_panel_open', isOpen ? 'true' : 'false');\n }, [isOpen]);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n sessionStorage.setItem('sidekick_panel_tab', activeTab);\n }, [activeTab]);\n\n // Compute sessionStorage key based on editing mode\n const messagesStorageKey = editingOverrideId\n ? `sidekick_edit_messages_${editingOverrideId}`\n : 'sidekick_messages';\n\n // Load message history from sessionStorage (re-runs when editing mode changes)\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const stored = sessionStorage.getItem(messagesStorageKey);\n if (stored) {\n try {\n const parsed = JSON.parse(stored);\n setMessages(parsed.map((m: Message) => ({ ...m, timestamp: new Date(m.timestamp) })));\n } catch {\n setMessages([]);\n }\n } else {\n setMessages([]);\n }\n }, [messagesStorageKey]);\n\n // Save messages to sessionStorage\n useEffect(() => {\n if (typeof window === 'undefined' || messages.length === 0) return;\n sessionStorage.setItem(messagesStorageKey, JSON.stringify(messages));\n }, [messages, messagesStorageKey]);\n\n const handleSubmit = useCallback(async (e: FormEvent) => {\n e.preventDefault();\n if (!input.trim() || isGenerating) return;\n\n const userMessage: Message = {\n id: generateId(),\n role: 'user',\n content: input.trim(),\n timestamp: new Date(),\n };\n\n const assistantMessage: Message = {\n id: generateId(),\n role: 'assistant',\n content: 'Generating your customization...',\n timestamp: new Date(),\n status: 'generating',\n };\n\n setMessages((prev) => [...prev, userMessage, assistantMessage]);\n setInput('');\n setIsGenerating(true);\n\n try {\n let result: { success: boolean; overrideId?: string; name?: string; description?: string; error?: string };\n\n const requestBody: { request: string; overrideId?: string } = { request: userMessage.content };\n if (editingOverrideId) {\n requestBody.overrideId = editingOverrideId;\n }\n\n if (onGenerate) {\n result = await onGenerate(userMessage.content);\n } else if (apiEndpoint) {\n const response = await fetch(apiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(requestBody),\n });\n result = await response.json();\n } else {\n result = {\n success: false,\n error: 'No API endpoint or onGenerate handler configured',\n };\n }\n\n const verb = editingOverrideId ? 'Updated' : 'Created';\n const successMessage = result.success\n ? `${verb} \"${result.name || result.overrideId}\"!\\n\\n${result.description || ''}\\n\\nReload the page to apply changes.`\n : `Failed to generate: ${result.error}`;\n\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMessage.id\n ? {\n ...m,\n content: successMessage,\n status: result.success ? 'success' : 'error',\n overrideId: result.overrideId,\n }\n : m\n )\n );\n } catch (error) {\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMessage.id\n ? {\n ...m,\n content: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n }\n : m\n )\n );\n } finally {\n setIsGenerating(false);\n }\n }, [input, isGenerating, onGenerate, apiEndpoint, editingOverrideId]);\n\n const handleToggleOverride = useCallback(async (overrideId: string, enabled: boolean) => {\n setTogglingId(overrideId);\n\n try {\n if (onToggle) {\n await onToggle(overrideId, enabled);\n } else if (effectiveToggleEndpoint) {\n const response = await fetch(effectiveToggleEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ overrideId, enabled }),\n });\n const result = await response.json();\n if (!result.success) {\n throw new Error(result.error || 'Toggle failed');\n }\n } else {\n // Fallback to localStorage\n setFlag(overrideId, enabled);\n }\n\n // Reload the page to apply the change\n window.location.reload();\n } catch (error) {\n alert(`Failed to toggle: ${error instanceof Error ? error.message : 'Unknown error'}`);\n setTogglingId(null);\n }\n }, [onToggle, effectiveToggleEndpoint]);\n\n const handleDeleteOverride = useCallback(async (overrideId: string) => {\n if (!confirm(`Are you sure you want to delete this override? This cannot be undone.`)) {\n return;\n }\n\n setDeletingId(overrideId);\n\n try {\n let result: { success: boolean; error?: string };\n\n if (onDelete) {\n result = await onDelete(overrideId);\n } else if (effectiveDeleteEndpoint) {\n const response = await fetch(effectiveDeleteEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ overrideId }),\n });\n result = await response.json();\n } else {\n result = { success: false, error: 'No delete endpoint configured' };\n }\n\n if (result.success) {\n // Clear the flag and reload\n setFlag(overrideId, false);\n window.location.reload();\n } else {\n alert(`Failed to delete: ${result.error}`);\n }\n } catch (error) {\n alert(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n } finally {\n setDeletingId(null);\n }\n }, [onDelete, effectiveDeleteEndpoint]);\n\n const handleRegenerateOverride = useCallback((overrideId: string) => {\n setEditingOverrideId(overrideId);\n setActiveTab('chat');\n setInput('');\n }, []);\n\n const handleEditOverride = useCallback((overrideId: string) => {\n setEditingOverrideId(overrideId);\n setActiveTab('chat');\n setInput('');\n }, []);\n\n const handleExitEditMode = useCallback(() => {\n setEditingOverrideId(null);\n setInput('');\n }, []);\n\n const handleClearHistory = useCallback(() => {\n setMessages([]);\n sessionStorage.removeItem(messagesStorageKey);\n }, [messagesStorageKey]);\n\n if (!isOpen) {\n return (\n <button\n onClick={() => setIsOpen(true)}\n style={styles.trigger}\n aria-label=\"Open Sidekick Panel\"\n >\n <SidekickIcon />\n </button>\n );\n }\n\n return (\n <div style={styles.overlay} onWheel={(e) => e.stopPropagation()} onTouchMove={(e) => e.stopPropagation()}>\n <div style={styles.panel}>\n {/* Header */}\n <div style={styles.header}>\n <h2 style={styles.title}>Sidekick</h2>\n <button onClick={() => setIsOpen(false)} style={styles.closeButton}>\n <CloseIcon />\n </button>\n </div>\n\n {/* Tabs */}\n <div style={styles.tabs}>\n <button\n onClick={() => setActiveTab('chat')}\n style={{\n ...styles.tab,\n ...(activeTab === 'chat' ? styles.tabActive : {}),\n }}\n >\n Customize\n </button>\n <button\n onClick={() => setActiveTab('overrides')}\n style={{\n ...styles.tab,\n ...(activeTab === 'overrides' ? styles.tabActive : {}),\n }}\n >\n Overrides ({overrides.length})\n </button>\n </div>\n\n {/* Content */}\n <div style={styles.content}>\n {activeTab === 'chat' ? (\n <ChatTab\n messages={messages}\n input={input}\n isGenerating={isGenerating}\n onInputChange={setInput}\n onSubmit={handleSubmit}\n onClearHistory={handleClearHistory}\n editingOverride={editingOverrideId ? overrides.find(o => o.id === editingOverrideId) : undefined}\n onExitEditMode={handleExitEditMode}\n />\n ) : (\n <OverridesTab\n overrides={overrides}\n onToggle={handleToggleOverride}\n onDelete={handleDeleteOverride}\n onRegenerate={handleRegenerateOverride}\n onEdit={handleEditOverride}\n deletingId={deletingId}\n togglingId={togglingId}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n\ninterface ChatTabProps {\n messages: Message[];\n input: string;\n isGenerating: boolean;\n onInputChange: (value: string) => void;\n onSubmit: (e: FormEvent) => void;\n onClearHistory: () => void;\n editingOverride?: { id: string; name: string; description: string; enabled: boolean };\n onExitEditMode: () => void;\n}\n\nfunction ChatTab({\n messages,\n input,\n isGenerating,\n onInputChange,\n onSubmit,\n onClearHistory,\n editingOverride,\n onExitEditMode,\n}: ChatTabProps) {\n return (\n <div style={styles.chatContainer}>\n {/* Edit mode header */}\n {editingOverride && (\n <div style={styles.editHeader}>\n <span style={styles.editHeaderText}>Editing: {editingOverride.name}</span>\n <button onClick={onExitEditMode} style={styles.editHeaderClose}>✕</button>\n </div>\n )}\n {/* Messages */}\n <div style={styles.messages}>\n {messages.length === 0 ? (\n editingOverride ? (\n <div style={styles.emptyState}>\n <p style={styles.emptyTitle}>Edit \"{editingOverride.name}\"</p>\n <p style={styles.emptyDescription}>\n Describe what you want to change about this override, and I'll modify the existing code.\n </p>\n <div style={styles.examples}>\n <p style={styles.examplesTitle}>Try saying:</p>\n <ul style={styles.examplesList}>\n <li>\"Change the color to red\"</li>\n <li>\"Make it only apply to high priority items\"</li>\n <li>\"Add a hover effect\"</li>\n </ul>\n </div>\n </div>\n ) : (\n <div style={styles.emptyState}>\n <p style={styles.emptyTitle}>Customize your app</p>\n <p style={styles.emptyDescription}>\n Describe what you want to change in natural language, and I'll generate the code.\n </p>\n <div style={styles.examples}>\n <p style={styles.examplesTitle}>Try saying:</p>\n <ul style={styles.examplesList}>\n <li>\"Add a column showing days until due date\"</li>\n <li>\"Add a banner at the top of the sidebar\"</li>\n <li>\"Highlight overdue tasks in red\"</li>\n </ul>\n </div>\n </div>\n )\n ) : (\n <>\n {messages.map((message) => (\n <div\n key={message.id}\n style={{\n ...styles.message,\n ...(message.role === 'user' ? styles.userMessage : styles.assistantMessage),\n }}\n >\n <div style={styles.messageContent}>\n {message.content}\n {message.status === 'generating' && (\n <span style={styles.spinner}>⟳</span>\n )}\n </div>\n {message.status === 'success' && (\n <div style={styles.successContainer}>\n <div style={styles.successBadge}>✓ {editingOverride ? 'Updated' : 'Created'}</div>\n <button\n onClick={() => window.location.reload()}\n style={styles.reloadButton}\n >\n Reload to Apply\n </button>\n </div>\n )}\n {message.status === 'error' && (\n <div style={styles.errorBadge}>✕ Failed</div>\n )}\n </div>\n ))}\n <button onClick={onClearHistory} style={styles.clearButton}>\n Clear history\n </button>\n </>\n )}\n </div>\n\n {/* Input */}\n <form onSubmit={onSubmit} style={styles.inputForm}>\n <input\n type=\"text\"\n value={input}\n onChange={(e) => onInputChange(e.target.value)}\n placeholder=\"Describe your customization...\"\n disabled={isGenerating}\n style={styles.input}\n />\n <button\n type=\"submit\"\n disabled={!input.trim() || isGenerating}\n style={{\n ...styles.submitButton,\n ...((!input.trim() || isGenerating) ? styles.submitButtonDisabled : {}),\n }}\n >\n {isGenerating ? '...' : '→'}\n </button>\n </form>\n </div>\n );\n}\n\ninterface OverridesTabProps {\n overrides: Array<{ id: string; name: string; description: string; enabled: boolean }>;\n onToggle: (id: string, enabled: boolean) => void;\n onDelete: (id: string) => void;\n onRegenerate: (id: string) => void;\n onEdit: (id: string) => void;\n deletingId: string | null;\n togglingId: string | null;\n}\n\nfunction OverridesTab({ overrides, onToggle, onDelete, onRegenerate, onEdit, deletingId, togglingId }: OverridesTabProps) {\n const handleToggle = (override: { id: string; enabled: boolean }) => {\n onToggle(override.id, !override.enabled);\n };\n\n if (overrides.length === 0) {\n return (\n <div style={styles.emptyState}>\n <p style={styles.emptyTitle}>No overrides yet</p>\n <p style={styles.emptyDescription}>\n Use the Customize tab to create your first customization.\n </p>\n </div>\n );\n }\n\n return (\n <div style={styles.overridesList}>\n {overrides.map((override) => (\n <div key={override.id} style={styles.overrideItem}>\n <div style={styles.overrideInfo}>\n <h3 style={styles.overrideName}>{override.name}</h3>\n <p style={styles.overrideDescription}>{override.description}</p>\n <div style={styles.overrideActions}>\n <button\n onClick={() => onEdit(override.id)}\n style={styles.actionButton}\n >\n Edit\n </button>\n <button\n onClick={() => onRegenerate(override.id)}\n style={styles.actionButton}\n >\n Regenerate\n </button>\n <button\n onClick={() => onDelete(override.id)}\n disabled={deletingId === override.id}\n style={{\n ...styles.actionButton,\n ...styles.deleteButton,\n ...(deletingId === override.id ? styles.actionButtonDisabled : {}),\n }}\n >\n {deletingId === override.id ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n </div>\n <button\n onClick={() => handleToggle(override)}\n disabled={togglingId === override.id}\n style={{\n ...styles.toggle,\n ...(override.enabled ? styles.toggleOn : styles.toggleOff),\n ...(togglingId === override.id ? styles.toggleDisabled : {}),\n }}\n >\n {togglingId === override.id ? '...' : override.enabled ? 'ON' : 'OFF'}\n </button>\n </div>\n ))}\n </div>\n );\n}\n\n// Icons\nfunction SidekickIcon() {\n return (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n );\n}\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 11);\n}\n\n// Styles\nconst styles: Record<string, React.CSSProperties> = {\n trigger: {\n position: 'fixed',\n bottom: '24px',\n right: '24px',\n width: '56px',\n height: '56px',\n borderRadius: '50%',\n backgroundColor: '#3B82F6',\n color: 'white',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n zIndex: 9999,\n },\n overlay: {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n width: '400px',\n zIndex: 9999,\n boxShadow: '-4px 0 24px rgba(0, 0, 0, 0.15)',\n overscrollBehavior: 'contain',\n },\n panel: {\n height: '100%',\n backgroundColor: 'white',\n display: 'flex',\n flexDirection: 'column',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid #E5E7EB',\n },\n title: {\n margin: 0,\n fontSize: '18px',\n fontWeight: 600,\n color: '#111827',\n },\n closeButton: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '4px',\n color: '#6B7280',\n },\n tabs: {\n display: 'flex',\n borderBottom: '1px solid #E5E7EB',\n },\n tab: {\n flex: 1,\n padding: '12px 16px',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n color: '#6B7280',\n borderBottom: '2px solid transparent',\n },\n tabActive: {\n color: '#3B82F6',\n borderBottomColor: '#3B82F6',\n },\n content: {\n flex: 1,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n },\n chatContainer: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n },\n messages: {\n flex: 1,\n overflowY: 'auto',\n padding: '16px',\n overscrollBehavior: 'contain',\n },\n emptyState: {\n textAlign: 'center',\n padding: '40px 20px',\n },\n emptyTitle: {\n margin: '0 0 8px 0',\n fontSize: '16px',\n fontWeight: 600,\n color: '#111827',\n },\n emptyDescription: {\n margin: '0 0 24px 0',\n fontSize: '14px',\n color: '#6B7280',\n },\n examples: {\n textAlign: 'left',\n backgroundColor: '#F9FAFB',\n borderRadius: '8px',\n padding: '16px',\n },\n examplesTitle: {\n margin: '0 0 8px 0',\n fontSize: '13px',\n fontWeight: 500,\n color: '#374151',\n },\n examplesList: {\n margin: 0,\n padding: '0 0 0 20px',\n fontSize: '13px',\n color: '#6B7280',\n lineHeight: 1.8,\n },\n message: {\n marginBottom: '12px',\n padding: '12px 16px',\n borderRadius: '12px',\n fontSize: '14px',\n lineHeight: 1.5,\n },\n userMessage: {\n backgroundColor: '#3B82F6',\n color: 'white',\n marginLeft: '40px',\n },\n assistantMessage: {\n backgroundColor: '#F3F4F6',\n color: '#111827',\n marginRight: '40px',\n },\n messageContent: {\n whiteSpace: 'pre-wrap',\n },\n spinner: {\n display: 'inline-block',\n animation: 'spin 1s linear infinite',\n },\n successContainer: {\n marginTop: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n },\n successBadge: {\n fontSize: '12px',\n color: '#059669',\n fontWeight: 500,\n },\n reloadButton: {\n padding: '8px 16px',\n backgroundColor: '#059669',\n color: 'white',\n border: 'none',\n borderRadius: '6px',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n },\n errorBadge: {\n marginTop: '8px',\n fontSize: '12px',\n color: '#DC2626',\n fontWeight: 500,\n },\n clearButton: {\n background: 'none',\n border: 'none',\n color: '#6B7280',\n fontSize: '12px',\n cursor: 'pointer',\n padding: '8px',\n textAlign: 'center',\n width: '100%',\n },\n inputForm: {\n display: 'flex',\n gap: '8px',\n padding: '16px',\n borderTop: '1px solid #E5E7EB',\n },\n input: {\n flex: 1,\n padding: '12px 16px',\n border: '1px solid #E5E7EB',\n borderRadius: '8px',\n fontSize: '14px',\n outline: 'none',\n },\n submitButton: {\n padding: '12px 20px',\n backgroundColor: '#3B82F6',\n color: 'white',\n border: 'none',\n borderRadius: '8px',\n fontSize: '16px',\n cursor: 'pointer',\n fontWeight: 600,\n },\n submitButtonDisabled: {\n backgroundColor: '#93C5FD',\n cursor: 'not-allowed',\n },\n overridesList: {\n padding: '16px',\n flex: 1,\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n },\n overrideItem: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px',\n backgroundColor: '#F9FAFB',\n borderRadius: '8px',\n marginBottom: '12px',\n },\n overrideInfo: {\n flex: 1,\n marginRight: '16px',\n },\n overrideName: {\n margin: '0 0 4px 0',\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n },\n overrideDescription: {\n margin: 0,\n fontSize: '13px',\n color: '#6B7280',\n },\n toggle: {\n padding: '6px 12px',\n borderRadius: '4px',\n border: 'none',\n fontSize: '12px',\n fontWeight: 600,\n cursor: 'pointer',\n },\n toggleOn: {\n backgroundColor: '#059669',\n color: 'white',\n },\n toggleOff: {\n backgroundColor: '#E5E7EB',\n color: '#6B7280',\n },\n toggleDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n overrideActions: {\n display: 'flex',\n gap: '8px',\n marginTop: '8px',\n },\n actionButton: {\n padding: '4px 8px',\n fontSize: '11px',\n fontWeight: 500,\n border: '1px solid #E5E7EB',\n borderRadius: '4px',\n backgroundColor: 'white',\n color: '#6B7280',\n cursor: 'pointer',\n },\n actionButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n deleteButton: {\n color: '#DC2626',\n borderColor: '#FCA5A5',\n },\n editHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px',\n backgroundColor: '#EFF6FF',\n borderBottom: '1px solid #BFDBFE',\n },\n editHeaderText: {\n fontSize: '13px',\n fontWeight: 600,\n color: '#1D4ED8',\n },\n editHeaderClose: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#1D4ED8',\n padding: '2px 6px',\n borderRadius: '4px',\n },\n};\n"],"mappings":"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","names":["import_react","module","styles","generateId","transform","generateId","import_react","exports","require","React","import_react","React","import_react","GLOBAL_KEY","getGlobalConfig","getDebug","Fragment","React","getGlobalConfig","getDebug","import_jsx_runtime","headerRow","bodyRows","React","module","transform","import_react","import_jsx_runtime","generateId"]}
|