@prismiq/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 +88 -0
- package/dist/CustomSQLEditor-BXB4rf1q.d.cts +1297 -0
- package/dist/CustomSQLEditor-DYeId0Gp.d.ts +1297 -0
- package/dist/DashboardDialog-B3vYC5Gs.d.ts +1106 -0
- package/dist/DashboardDialog-LHmrtNQU.d.cts +1106 -0
- package/dist/accessibility-2yy5yqRR.d.cts +145 -0
- package/dist/accessibility-2yy5yqRR.d.ts +145 -0
- package/dist/charts/index.cjs +110 -0
- package/dist/charts/index.cjs.map +1 -0
- package/dist/charts/index.d.cts +2 -0
- package/dist/charts/index.d.ts +2 -0
- package/dist/charts/index.js +5 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/chunk-2H5WTH4K.js +2409 -0
- package/dist/chunk-2H5WTH4K.js.map +1 -0
- package/dist/chunk-4AVL6GQK.cjs +470 -0
- package/dist/chunk-4AVL6GQK.cjs.map +1 -0
- package/dist/chunk-EX74SI67.js +455 -0
- package/dist/chunk-EX74SI67.js.map +1 -0
- package/dist/chunk-FEABEF3J.cjs +7543 -0
- package/dist/chunk-FEABEF3J.cjs.map +1 -0
- package/dist/chunk-JTCBZDHY.js +126 -0
- package/dist/chunk-JTCBZDHY.js.map +1 -0
- package/dist/chunk-LMTG3LRC.cjs +326 -0
- package/dist/chunk-LMTG3LRC.cjs.map +1 -0
- package/dist/chunk-MDXGGZSW.cjs +273 -0
- package/dist/chunk-MDXGGZSW.cjs.map +1 -0
- package/dist/chunk-MOAEEF5P.js +7510 -0
- package/dist/chunk-MOAEEF5P.js.map +1 -0
- package/dist/chunk-NK7HKX2J.cjs +2459 -0
- package/dist/chunk-NK7HKX2J.cjs.map +1 -0
- package/dist/chunk-NY6TZLST.cjs +8781 -0
- package/dist/chunk-NY6TZLST.cjs.map +1 -0
- package/dist/chunk-T6STUE7E.js +321 -0
- package/dist/chunk-T6STUE7E.js.map +1 -0
- package/dist/chunk-TRW7DKLP.cjs +141 -0
- package/dist/chunk-TRW7DKLP.cjs.map +1 -0
- package/dist/chunk-UPYINBZU.js +8706 -0
- package/dist/chunk-UPYINBZU.js.map +1 -0
- package/dist/chunk-WWTT2OJ5.js +246 -0
- package/dist/chunk-WWTT2OJ5.js.map +1 -0
- package/dist/components/index.cjs +222 -0
- package/dist/components/index.cjs.map +1 -0
- package/dist/components/index.d.cts +207 -0
- package/dist/components/index.d.ts +207 -0
- package/dist/components/index.js +5 -0
- package/dist/components/index.js.map +1 -0
- package/dist/dashboard/index.cjs +140 -0
- package/dist/dashboard/index.cjs.map +1 -0
- package/dist/dashboard/index.d.cts +302 -0
- package/dist/dashboard/index.d.ts +302 -0
- package/dist/dashboard/index.js +7 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/export/index.cjs +32 -0
- package/dist/export/index.cjs.map +1 -0
- package/dist/export/index.d.cts +197 -0
- package/dist/export/index.d.ts +197 -0
- package/dist/export/index.js +3 -0
- package/dist/export/index.js.map +1 -0
- package/dist/index-C-Qcuu4Y.d.cts +821 -0
- package/dist/index-rPc7ijt8.d.ts +821 -0
- package/dist/index.cjs +1486 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1435 -0
- package/dist/index.d.ts +1435 -0
- package/dist/index.js +926 -0
- package/dist/index.js.map +1 -0
- package/dist/ssr/index.cjs +64 -0
- package/dist/ssr/index.cjs.map +1 -0
- package/dist/ssr/index.d.cts +213 -0
- package/dist/ssr/index.d.ts +213 -0
- package/dist/ssr/index.js +3 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/types-WrCbOeAV.d.cts +569 -0
- package/dist/types-WrCbOeAV.d.ts +569 -0
- package/dist/utils/index.cjs +64 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +112 -0
- package/dist/utils/index.d.ts +112 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pins/PinButton.tsx","../src/pins/PinMenu.tsx","../src/pins/PinnedDashboardList.tsx","../src/pins/PinnedDashboardView.tsx","../src/index.ts"],"names":["jsxs","jsx","useDashboardPinStatus","usePinMutations","useState","useCallback","errorStyles","Fragment","PinIcon","useRef","useEffect","usePinnedDashboards","error","UnpinIcon","containerStyles","titleStyles","unpinButtonStyles","contentStyles","errorBannerStyles","Dashboard"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * PinButton component.\n *\n * A button to pin/unpin a dashboard to a specific context.\n */\n\nimport { useCallback, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { useDashboardPinStatus, usePinMutations } from '../hooks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface PinButtonProps {\n /** Dashboard ID to pin/unpin. */\n dashboardId: string;\n /** Context to pin to (e.g., \"accounts\", \"dashboard\"). */\n context: string;\n /** Label text (default: \"Pin\"). */\n label?: string;\n /** Label when pinned (default: \"Unpin\"). */\n unpinLabel?: string;\n /** Show as icon only (no label). */\n iconOnly?: boolean;\n /** Size variant. */\n size?: 'sm' | 'md' | 'lg';\n /** Called after pin/unpin completes. */\n onPinChange?: (isPinned: boolean) => void;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst PinIcon = ({ filled, size }: { filled: boolean; size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6a2 2 0 0 1 2-2h0a2 2 0 0 0 2-2H5a2 2 0 0 0 2 2h0a2 2 0 0 1 2 2z\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst baseStyles: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontWeight: 500,\n borderRadius: 'var(--prismiq-radius-md)',\n border: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n color: 'var(--prismiq-color-text)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s, opacity 0.15s',\n outline: 'none',\n};\n\nconst sizeStyles: Record<NonNullable<PinButtonProps['size']>, CSSProperties> = {\n sm: {\n padding: 'var(--prismiq-spacing-xs)',\n fontSize: 'var(--prismiq-font-size-sm)',\n minWidth: 28,\n minHeight: 28,\n },\n md: {\n padding: 'var(--prismiq-spacing-sm)',\n fontSize: 'var(--prismiq-font-size-base)',\n minWidth: 36,\n minHeight: 36,\n },\n lg: {\n padding: 'var(--prismiq-spacing-md)',\n fontSize: 'var(--prismiq-font-size-lg)',\n minWidth: 44,\n minHeight: 44,\n },\n};\n\nconst pinnedStyles: CSSProperties = {\n backgroundColor: 'var(--prismiq-color-primary-light, #e3f2fd)',\n borderColor: 'var(--prismiq-color-primary)',\n color: 'var(--prismiq-color-primary)',\n};\n\nconst disabledStyles: CSSProperties = {\n opacity: 0.5,\n cursor: 'not-allowed',\n};\n\nconst iconSizes: Record<NonNullable<PinButtonProps['size']>, number> = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Button to pin/unpin a dashboard to a context.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <PinButton dashboardId={dashboard.id} context=\"accounts\" />\n *\n * // Icon only with custom label\n * <PinButton\n * dashboardId={dashboard.id}\n * context=\"dashboard\"\n * iconOnly\n * onPinChange={(isPinned) => console.log('Pinned:', isPinned)}\n * />\n * ```\n */\nexport function PinButton({\n dashboardId,\n context,\n label = 'Pin',\n unpinLabel = 'Unpin',\n iconOnly = false,\n size = 'md',\n onPinChange,\n className,\n style,\n}: PinButtonProps): ReactNode {\n const { isPinned: checkIsPinned, isLoading: statusLoading, refetch } = useDashboardPinStatus({\n dashboardId,\n });\n const { pin, unpin, state: mutationState } = usePinMutations();\n const [actionError, setActionError] = useState<Error | null>(null);\n\n // Use fetched state directly to avoid race conditions with optimistic updates\n const isPinned = checkIsPinned(context);\n const isLoading = statusLoading || mutationState.isLoading;\n\n const handleClick = useCallback(async () => {\n if (isLoading) return;\n\n setActionError(null);\n try {\n if (isPinned) {\n await unpin(dashboardId, context);\n onPinChange?.(false);\n } else {\n await pin(dashboardId, context);\n onPinChange?.(true);\n }\n // Refresh status after mutation\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setActionError(error);\n console.error('Failed to toggle pin:', err);\n }\n }, [dashboardId, context, isPinned, isLoading, pin, unpin, onPinChange, refetch]);\n\n const errorStyles: CSSProperties = {\n borderColor: 'var(--prismiq-color-error)',\n color: 'var(--prismiq-color-error)',\n };\n\n const combinedStyles: CSSProperties = {\n ...baseStyles,\n ...sizeStyles[size],\n ...(isPinned ? pinnedStyles : {}),\n ...(isLoading ? disabledStyles : {}),\n ...(actionError ? errorStyles : {}),\n ...style,\n };\n\n const iconSize = iconSizes[size];\n const displayLabel = isPinned ? unpinLabel : label;\n const errorMessage = actionError ? `Error: ${actionError.message}` : undefined;\n const accessibleLabel = errorMessage ?? (iconOnly ? displayLabel : undefined);\n const tooltipTitle = errorMessage ?? (iconOnly ? displayLabel : undefined);\n\n return (\n <>\n <style>\n {`\n @keyframes prismiq-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `}\n </style>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isLoading}\n className={className}\n style={combinedStyles}\n aria-pressed={isPinned}\n aria-label={accessibleLabel}\n aria-invalid={actionError ? true : undefined}\n title={tooltipTitle}\n >\n {isLoading ? (\n <span\n style={{\n display: 'inline-block',\n width: iconSize,\n height: iconSize,\n border: '2px solid currentColor',\n borderRightColor: 'transparent',\n borderRadius: '50%',\n animation: 'prismiq-spin 0.6s linear infinite',\n }}\n />\n ) : (\n <PinIcon filled={isPinned} size={iconSize} />\n )}\n {!iconOnly && <span>{displayLabel}</span>}\n </button>\n </>\n );\n}\n","/**\n * PinMenu component.\n *\n * A dropdown menu showing multiple pin contexts with checkboxes.\n */\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\n\nimport { useDashboardPinStatus, usePinMutations } from '../hooks';\n\n// ============================================================================\n// Error Banner Styles\n// ============================================================================\n\nconst errorBannerStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-sm)',\n backgroundColor: 'var(--prismiq-color-error-light, #ffebee)',\n color: 'var(--prismiq-color-error)',\n borderRadius: 'var(--prismiq-radius-sm)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-xs)',\n marginBottom: 'var(--prismiq-spacing-xs)',\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Configuration for a pin context option. */\nexport interface PinContextOption {\n /** Unique context identifier (e.g., \"accounts\", \"dashboard\"). */\n id: string;\n /** Display label for the context. */\n label: string;\n /** Optional icon to display. */\n icon?: ReactNode;\n}\n\nexport interface PinMenuProps {\n /** Dashboard ID to pin/unpin. */\n dashboardId: string;\n /** Available contexts to pin to. */\n contexts: PinContextOption[];\n /** Called after pin state changes. */\n onPinChange?: (context: string, isPinned: boolean) => void;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst PinIcon = ({ size }: { size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6a2 2 0 0 1 2-2h0a2 2 0 0 0 2-2H5a2 2 0 0 0 2 2h0a2 2 0 0 1 2 2z\" />\n </svg>\n);\n\nconst ChevronDownIcon = ({ size }: { size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst CheckIcon = ({ size }: { size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst triggerStyles: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-base)',\n fontWeight: 500,\n borderRadius: 'var(--prismiq-radius-md)',\n border: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n color: 'var(--prismiq-color-text)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n outline: 'none',\n};\n\nconst menuStyles: CSSProperties = {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: 'var(--prismiq-spacing-xs)',\n minWidth: 200,\n padding: 'var(--prismiq-spacing-xs)',\n backgroundColor: 'var(--prismiq-color-surface)',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n boxShadow: 'var(--prismiq-shadow-lg, 0 10px 15px -3px rgba(0,0,0,0.1))',\n zIndex: 50,\n};\n\nconst menuItemStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-sm)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n color: 'var(--prismiq-color-text)',\n borderRadius: 'var(--prismiq-radius-sm)',\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n border: 'none',\n backgroundColor: 'transparent',\n width: '100%',\n textAlign: 'left',\n};\n\nconst checkboxStyles: CSSProperties = {\n width: 16,\n height: 16,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 'var(--prismiq-radius-sm)',\n border: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n flexShrink: 0,\n};\n\nconst checkedCheckboxStyles: CSSProperties = {\n ...checkboxStyles,\n backgroundColor: 'var(--prismiq-color-primary)',\n borderColor: 'var(--prismiq-color-primary)',\n color: 'var(--prismiq-color-text-inverse)',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Dropdown menu showing multiple pin contexts with checkboxes.\n *\n * @example\n * ```tsx\n * const PIN_CONTEXTS = [\n * { id: 'dashboard', label: 'Dashboard' },\n * { id: 'accounts', label: 'Accounts' },\n * ];\n *\n * <PinMenu\n * dashboardId={dashboard.id}\n * contexts={PIN_CONTEXTS}\n * onPinChange={(ctx, pinned) => console.log(ctx, pinned)}\n * />\n * ```\n */\nexport function PinMenu({\n dashboardId,\n contexts,\n onPinChange,\n className,\n style,\n}: PinMenuProps): ReactNode {\n const [isOpen, setIsOpen] = useState(false);\n const [toggleError, setToggleError] = useState<Error | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { isPinned, refetch, isLoading: statusLoading } = useDashboardPinStatus({\n dashboardId,\n });\n const { pin, unpin, state: mutationState } = usePinMutations();\n\n const isLoading = statusLoading || mutationState.isLoading;\n\n // Clear error when menu closes\n useEffect(() => {\n if (!isOpen) {\n setToggleError(null);\n }\n }, [isOpen]);\n\n // Close menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n // Close on escape\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen]);\n\n const handleToggle = useCallback((ctx: string) => {\n return async () => {\n if (isLoading) return;\n\n setToggleError(null);\n try {\n const pinned = isPinned(ctx);\n if (pinned) {\n await unpin(dashboardId, ctx);\n onPinChange?.(ctx, false);\n } else {\n await pin(dashboardId, ctx);\n onPinChange?.(ctx, true);\n }\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setToggleError(error);\n console.error('Failed to toggle pin for context:', ctx, err);\n }\n };\n }, [dashboardId, isPinned, isLoading, pin, unpin, onPinChange, refetch]);\n\n // Count pinned contexts\n const pinnedCount = contexts.filter((ctx) => isPinned(ctx.id)).length;\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ position: 'relative', display: 'inline-block', ...style }}\n >\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={triggerStyles}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n >\n <PinIcon size={16} />\n <span>Pin{pinnedCount > 0 ? ` (${pinnedCount})` : ''}</span>\n <ChevronDownIcon size={14} />\n </button>\n\n {isOpen && (\n <div style={menuStyles} role=\"menu\">\n {toggleError && (\n <div style={errorBannerStyles}>\n Failed: {toggleError.message}\n </div>\n )}\n {contexts.map((ctx) => {\n const pinned = isPinned(ctx.id);\n return (\n <button\n key={ctx.id}\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={pinned}\n onClick={handleToggle(ctx.id)}\n disabled={isLoading}\n style={{\n ...menuItemStyles,\n opacity: isLoading ? 0.5 : 1,\n }}\n >\n <span style={pinned ? checkedCheckboxStyles : checkboxStyles}>\n {pinned && <CheckIcon size={12} />}\n </span>\n {ctx.icon && <span style={{ display: 'flex' }}>{ctx.icon}</span>}\n <span>{ctx.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","/**\n * PinnedDashboardList component.\n *\n * Displays a list of dashboards pinned to a context.\n */\n\nimport { useCallback, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { usePinnedDashboards, usePinMutations } from '../hooks';\nimport type { Dashboard } from '../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Props for custom rendering of a list item. */\nexport interface PinnedDashboardItemActions {\n /** Unpin this dashboard from the context. Returns a promise. */\n unpin: () => Promise<void>;\n}\n\nexport interface PinnedDashboardListProps {\n /** Context to show pins for (e.g., \"accounts\", \"dashboard\"). */\n context: string;\n /** Called when user selects a dashboard. */\n onSelect: (dashboard: Dashboard) => void;\n /** Custom empty state element. */\n emptyState?: ReactNode;\n /** Custom render function for each item. */\n renderItem?: (dashboard: Dashboard, actions: PinnedDashboardItemActions) => ReactNode;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst DashboardIcon = (): ReactNode => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" />\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" />\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" />\n </svg>\n);\n\nconst UnpinIcon = (): ReactNode => (\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M2 2 22 22\" />\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9\" />\n <path d=\"M15 6V4a2 2 0 0 1 2-2\" />\n <path d=\"M9 4a2 2 0 0 0-2 2\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst containerStyles: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--prismiq-spacing-sm)',\n};\n\nconst itemStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-md)',\n padding: 'var(--prismiq-spacing-md)',\n backgroundColor: 'var(--prismiq-color-surface)',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s, box-shadow 0.15s',\n};\n\nconst itemHoverStyles: CSSProperties = {\n backgroundColor: 'var(--prismiq-color-surface-hover, #f5f5f5)',\n borderColor: 'var(--prismiq-color-primary)',\n boxShadow: 'var(--prismiq-shadow-sm, 0 1px 2px rgba(0,0,0,0.05))',\n};\n\nconst iconWrapperStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 40,\n height: 40,\n backgroundColor: 'var(--prismiq-color-primary-light, #e3f2fd)',\n color: 'var(--prismiq-color-primary)',\n borderRadius: 'var(--prismiq-radius-md)',\n flexShrink: 0,\n};\n\nconst contentStyles: CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst titleStyles: CSSProperties = {\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-base)',\n fontWeight: 500,\n color: 'var(--prismiq-color-text)',\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nconst descriptionStyles: CSSProperties = {\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n color: 'var(--prismiq-color-text-muted)',\n margin: 0,\n marginTop: 'var(--prismiq-spacing-xs)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nconst unpinButtonStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n padding: 0,\n backgroundColor: 'transparent',\n border: '1px solid transparent',\n borderRadius: 'var(--prismiq-radius-sm)',\n color: 'var(--prismiq-color-text-muted)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n flexShrink: 0,\n};\n\nconst emptyStateStyles: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 'var(--prismiq-spacing-xl)',\n textAlign: 'center',\n color: 'var(--prismiq-color-text-muted)',\n};\n\nconst loadingStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 'var(--prismiq-spacing-xl)',\n};\n\nconst errorStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-md)',\n backgroundColor: 'var(--prismiq-color-error-light, #ffebee)',\n color: 'var(--prismiq-color-error)',\n borderRadius: 'var(--prismiq-radius-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * List of dashboards pinned to a context.\n *\n * @example\n * ```tsx\n * function AccountsDashboards() {\n * const [selected, setSelected] = useState<Dashboard | null>(null);\n *\n * return (\n * <PinnedDashboardList\n * context=\"accounts\"\n * onSelect={setSelected}\n * emptyState={<p>No pinned dashboards</p>}\n * />\n * );\n * }\n * ```\n */\nexport function PinnedDashboardList({\n context,\n onSelect,\n emptyState,\n renderItem,\n className,\n style,\n}: PinnedDashboardListProps): ReactNode {\n const { dashboards, isLoading, error, refetch } = usePinnedDashboards({ context });\n const { unpin, state: mutationState } = usePinMutations();\n const [unpinError, setUnpinError] = useState<Error | null>(null);\n\n const handleUnpin = useCallback(\n (dashboardId: string) => {\n return async (event: React.MouseEvent) => {\n event.stopPropagation();\n setUnpinError(null);\n try {\n await unpin(dashboardId, context);\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setUnpinError(error);\n console.error('Failed to unpin dashboard:', dashboardId, err);\n }\n };\n },\n [context, unpin, refetch]\n );\n\n // Create async unpin handler for renderItem actions\n const createUnpinAction = useCallback(\n (dashboardId: string): (() => Promise<void>) => {\n return async () => {\n setUnpinError(null);\n try {\n await unpin(dashboardId, context);\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setUnpinError(error);\n console.error('Failed to unpin dashboard:', dashboardId, err);\n throw error; // Re-throw so caller can handle if needed\n }\n };\n },\n [context, unpin, refetch]\n );\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n <style>\n {`\n @keyframes prismiq-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `}\n </style>\n <div style={loadingStyles}>\n <span\n style={{\n display: 'inline-block',\n width: 24,\n height: 24,\n border: '2px solid var(--prismiq-color-border)',\n borderTopColor: 'var(--prismiq-color-primary)',\n borderRadius: '50%',\n animation: 'prismiq-spin 0.6s linear infinite',\n }}\n />\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n <div style={errorStyles}>\n Failed to load pinned dashboards: {error.message}\n </div>\n </div>\n );\n }\n\n // Show unpin error as a dismissible message\n const errorBanner = unpinError ? (\n <div style={{ ...errorStyles, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>Failed to unpin: {unpinError.message}</span>\n <button\n type=\"button\"\n onClick={() => setUnpinError(null)}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n fontSize: 'var(--prismiq-font-size-lg)',\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n </div>\n ) : null;\n\n if (!dashboards || dashboards.length === 0) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n {emptyState || (\n <div style={emptyStateStyles}>\n <DashboardIcon />\n <p style={{ margin: 'var(--prismiq-spacing-sm) 0 0 0' }}>\n No pinned dashboards\n </p>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n {errorBanner}\n {dashboards.map((dashboard) => {\n const actions: PinnedDashboardItemActions = {\n unpin: createUnpinAction(dashboard.id),\n };\n\n if (renderItem) {\n return (\n <div\n key={dashboard.id}\n onClick={() => onSelect(dashboard)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(dashboard);\n }\n }}\n >\n {renderItem(dashboard, actions)}\n </div>\n );\n }\n\n return (\n <div\n key={dashboard.id}\n style={itemStyles}\n onClick={() => onSelect(dashboard)}\n onMouseEnter={(e) => {\n Object.assign(e.currentTarget.style, itemHoverStyles);\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, itemStyles);\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(dashboard);\n }\n }}\n >\n <div style={iconWrapperStyles}>\n <DashboardIcon />\n </div>\n <div style={contentStyles}>\n <h3 style={titleStyles}>{dashboard.name}</h3>\n {dashboard.description && (\n <p style={descriptionStyles}>{dashboard.description}</p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={handleUnpin(dashboard.id)}\n disabled={mutationState.isLoading}\n style={{\n ...unpinButtonStyles,\n opacity: mutationState.isLoading ? 0.5 : 1,\n }}\n title=\"Unpin\"\n aria-label=\"Unpin dashboard\"\n >\n <UnpinIcon />\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * PinnedDashboardView component.\n *\n * Full view with pinned dashboard list and selected dashboard display.\n */\n\nimport { useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { Dashboard } from '../dashboard';\nimport { usePinMutations } from '../hooks';\nimport type { Dashboard as DashboardType } from '../types';\n\nimport { PinnedDashboardList } from './PinnedDashboardList';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface PinnedDashboardViewProps {\n /** Context this view is for (for unpin action). */\n context: string;\n /** Dashboard to display (null = show list). */\n selectedDashboard: DashboardType | null;\n /** Called when user clicks back or closes. */\n onBack: () => void;\n /** Called when user selects from list. */\n onSelect: (dashboard: DashboardType) => void;\n /** Show unpin button in header. */\n showUnpin?: boolean;\n /** Custom back button label. */\n backLabel?: string;\n /** Custom empty state for list. */\n emptyState?: ReactNode;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst BackIcon = (): ReactNode => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 12H5\" />\n <path d=\"m12 19-7-7 7-7\" />\n </svg>\n);\n\nconst UnpinIcon = (): ReactNode => (\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M2 2 22 22\" />\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9\" />\n <path d=\"M15 6V4a2 2 0 0 1 2-2\" />\n <path d=\"M9 4a2 2 0 0 0-2 2\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst containerStyles: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n};\n\nconst headerStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-md)',\n padding: 'var(--prismiq-spacing-md)',\n borderBottom: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n};\n\nconst backButtonStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n fontWeight: 500,\n backgroundColor: 'transparent',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n color: 'var(--prismiq-color-text)',\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n};\n\nconst titleStyles: CSSProperties = {\n flex: 1,\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-lg)',\n fontWeight: 600,\n color: 'var(--prismiq-color-text)',\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nconst unpinButtonStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n backgroundColor: 'transparent',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n color: 'var(--prismiq-color-text-muted)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n};\n\nconst contentStyles: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n};\n\nconst listContainerStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-md)',\n};\n\nconst errorBannerStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n backgroundColor: 'var(--prismiq-color-error-light, #ffebee)',\n color: 'var(--prismiq-color-error)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Full view with pinned dashboard list and dashboard display.\n *\n * When no dashboard is selected, shows the list. When a dashboard\n * is selected, shows the dashboard with a back button.\n *\n * @example\n * ```tsx\n * function AccountsDashboardSection() {\n * const [selected, setSelected] = useState<Dashboard | null>(null);\n *\n * return (\n * <PinnedDashboardView\n * context=\"accounts\"\n * selectedDashboard={selected}\n * onSelect={setSelected}\n * onBack={() => setSelected(null)}\n * backLabel=\"Back to Accounts\"\n * emptyState={<p>Pin dashboards from Analytics.</p>}\n * />\n * );\n * }\n * ```\n */\nexport function PinnedDashboardView({\n context,\n selectedDashboard,\n onBack,\n onSelect,\n showUnpin = true,\n backLabel = 'Back',\n emptyState,\n className,\n style,\n}: PinnedDashboardViewProps): ReactNode {\n const { unpin, state: mutationState } = usePinMutations();\n const [unpinError, setUnpinError] = useState<Error | null>(null);\n\n const handleUnpin = async () => {\n if (!selectedDashboard) return;\n setUnpinError(null);\n try {\n await unpin(selectedDashboard.id, context);\n onBack();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setUnpinError(error);\n console.error('Failed to unpin dashboard:', selectedDashboard.id, err);\n }\n };\n\n // Show list when no dashboard selected\n if (!selectedDashboard) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n <div style={listContainerStyles}>\n <PinnedDashboardList\n context={context}\n onSelect={onSelect}\n emptyState={emptyState}\n />\n </div>\n </div>\n );\n }\n\n // Show selected dashboard with header\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n {unpinError && (\n <div style={errorBannerStyles}>\n <span>Failed to unpin: {unpinError.message}</span>\n <button\n type=\"button\"\n onClick={() => setUnpinError(null)}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n fontSize: 'var(--prismiq-font-size-lg)',\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n </div>\n )}\n <div style={headerStyles}>\n <button\n type=\"button\"\n onClick={onBack}\n style={backButtonStyles}\n >\n <BackIcon />\n <span>{backLabel}</span>\n </button>\n <h2 style={titleStyles}>{selectedDashboard.name}</h2>\n {showUnpin && (\n <button\n type=\"button\"\n onClick={handleUnpin}\n disabled={mutationState.isLoading}\n style={{\n ...unpinButtonStyles,\n opacity: mutationState.isLoading ? 0.5 : 1,\n }}\n >\n <UnpinIcon />\n <span>Unpin</span>\n </button>\n )}\n </div>\n <div style={contentStyles}>\n <Dashboard id={selectedDashboard.id} />\n </div>\n </div>\n );\n}\n","/**\n * @prismiq/react - React SDK for Prismiq embedded analytics\n *\n * @example\n * ```tsx\n * import {\n * AnalyticsProvider,\n * ThemeProvider,\n * QueryBuilder,\n * BarChart,\n * Dashboard,\n * useQuery\n * } from '@prismiq/react';\n *\n * function App() {\n * return (\n * <ThemeProvider>\n * <AnalyticsProvider config={{ endpoint: 'https://api.example.com' }}>\n * <Dashboard id=\"my-dashboard\" />\n * </AnalyticsProvider>\n * </ThemeProvider>\n * );\n * }\n * ```\n *\n * For modular imports (smaller bundle size):\n * ```tsx\n * import { BarChart } from '@prismiq/react/charts';\n * import { Dashboard } from '@prismiq/react/dashboard';\n * import { useIsClient } from '@prismiq/react/ssr';\n * import { useFocusTrap } from '@prismiq/react/utils';\n * import { exportToCSV } from '@prismiq/react/export';\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type {\n // Schema types\n ColumnSchema,\n TableSchema,\n Relationship,\n DatabaseSchema,\n // Query types\n QueryTable,\n JoinType,\n JoinDefinition,\n AggregationType,\n ColumnSelection,\n FilterOperator,\n FilterDefinition,\n SortDirection,\n SortDefinition,\n GroupByDefinition,\n QueryDefinition,\n // Result types\n QueryResult,\n ValidationResult,\n // Saved query types\n SavedQuery,\n SavedQueryCreate,\n SavedQueryUpdate,\n // Custom SQL types\n ExecuteSQLRequest,\n SQLValidationResult,\n // Pin types\n PinnedDashboard,\n PinnedDashboardsResponse,\n DashboardPinContextsResponse,\n // Dashboard mutation types\n DashboardCreate,\n DashboardUpdate,\n} from './types';\n\n// ============================================================================\n// API Client\n// ============================================================================\n\nexport { PrismiqClient, PrismiqError } from './api';\nexport type { ClientConfig } from './api';\n\n// ============================================================================\n// Theme\n// ============================================================================\n\nexport { ThemeProvider, useTheme, lightTheme, darkTheme } from './theme';\nexport type {\n PrismiqTheme,\n ThemeMode,\n ThemeContextValue,\n ThemeProviderProps,\n DeepPartial,\n} from './theme';\n\n// ============================================================================\n// Context\n// ============================================================================\n\nexport { AnalyticsProvider, useAnalytics, useAnalyticsCallbacks } from './context';\nexport type {\n AnalyticsContextValue,\n AnalyticsProviderProps,\n AnalyticsCallbacks,\n} from './context';\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport {\n useSchema,\n useQuery,\n useChartData,\n useDashboards,\n useDashboard as useDashboardData,\n useDashboardMutations,\n useSavedQueries,\n useCustomSQL,\n usePinnedDashboards,\n usePinMutations,\n useDashboardPinStatus,\n} from './hooks';\nexport type {\n UseSchemaResult,\n UseQueryResult,\n UseQueryOptions,\n UseDashboardsOptions,\n UseDashboardsResult,\n UseDashboardOptions,\n UseDashboardResult,\n MutationState,\n UseDashboardMutationsResult,\n UseSavedQueriesOptions,\n UseSavedQueriesResult,\n UseCustomSQLOptions,\n UseCustomSQLResult,\n UsePinnedDashboardsOptions,\n UsePinnedDashboardsResult,\n PinMutationState,\n UsePinMutationsResult,\n UseDashboardPinStatusOptions,\n UseDashboardPinStatusResult,\n} from './hooks';\n\n// ============================================================================\n// Charts\n// ============================================================================\n\nexport {\n // Base wrapper\n EChartWrapper,\n // Chart components\n MetricCard,\n TrendIndicator,\n Sparkline,\n BarChart,\n LineChart,\n AreaChart,\n PieChart,\n ScatterChart,\n // Auto suggest\n suggestChartType,\n // Utilities\n queryResultToChartData,\n dataPointsToChartData,\n toChartData,\n createChartTheme,\n applyThemeToOption,\n formatAxisLabel,\n formatCompact,\n formatMetricValue,\n getChartColors,\n createGradientColor,\n isChartDataEmpty,\n} from './charts';\n\nexport type {\n // Data types\n ChartDataPoint,\n ChartSeries,\n // Base props\n BaseChartProps,\n ChartClickParams,\n ReferenceLineConfig,\n AxisFormat,\n LegendPosition,\n EChartWrapperProps,\n // Chart-specific props\n BarChartProps,\n LineChartProps,\n AreaChartProps,\n PieChartProps,\n ScatterChartProps,\n // MetricCard\n TrendConfig,\n MetricCardProps,\n TrendIndicatorProps,\n SparklineProps,\n // Hook types\n ChartDataOptions,\n ChartDataResult,\n // Auto suggest\n ChartType,\n ChartSuggestion,\n} from './charts';\n\n// ============================================================================\n// UI Components\n// ============================================================================\n\nexport {\n // Base UI\n Button,\n Input,\n Select,\n Checkbox,\n Badge,\n Tooltip,\n Dropdown,\n DropdownItem,\n DropdownSeparator,\n Icon,\n Dialog,\n DialogHeader,\n DialogFooter,\n // Skeleton Loading\n Skeleton,\n SkeletonText,\n SkeletonChart,\n SkeletonTable,\n SkeletonMetricCard,\n // Error Boundaries\n ErrorBoundary,\n ErrorFallback,\n WidgetErrorBoundary,\n // Empty States\n EmptyState,\n NoData,\n NoResults,\n EmptyDashboard,\n // Schema Explorer\n SchemaExplorer,\n TableNode,\n ColumnNode,\n // Column Selector\n ColumnSelector,\n SelectedColumn,\n // Filter Builder\n FilterBuilder,\n FilterRow,\n FilterValueInput,\n // Sort Builder\n SortBuilder,\n SortRow,\n // Aggregation Picker\n AggregationPicker,\n // Results Table\n ResultsTable,\n TableHeader,\n TableRow,\n TableCell,\n Pagination,\n // Query Builder\n QueryBuilder,\n QueryBuilderToolbar,\n QueryPreview,\n // Saved Queries\n SavedQueryPicker,\n // Custom SQL\n CustomSQLEditor,\n} from './components';\n\nexport type {\n // Base UI\n ButtonProps,\n InputProps,\n SelectProps,\n SelectOption,\n CheckboxProps,\n BadgeProps,\n TooltipProps,\n DropdownProps,\n DropdownItemProps,\n DropdownSeparatorProps,\n IconProps,\n IconName,\n DialogProps,\n DialogHeaderProps,\n DialogFooterProps,\n // Skeleton Loading\n SkeletonProps,\n SkeletonTextProps,\n SkeletonChartProps,\n SkeletonTableProps,\n SkeletonMetricCardProps,\n // Error Boundaries\n ErrorBoundaryProps,\n ErrorFallbackProps,\n WidgetErrorBoundaryProps,\n // Empty States\n EmptyStateProps,\n NoDataProps,\n NoResultsProps,\n EmptyDashboardProps,\n // Schema Explorer\n SchemaExplorerProps,\n TableNodeProps,\n ColumnNodeProps,\n // Column Selector\n ColumnSelectorProps,\n SelectedColumnProps,\n // Filter Builder\n FilterBuilderProps,\n FilterRowProps,\n FilterValueInputProps,\n // Sort Builder\n SortBuilderProps,\n SortRowProps,\n // Aggregation Picker\n AggregationPickerProps,\n // Results Table\n ResultsTableProps,\n TableHeaderProps,\n TableRowProps,\n TableCellProps,\n PaginationProps,\n // Query Builder\n QueryBuilderProps,\n QueryBuilderState,\n QueryBuilderToolbarProps,\n QueryPreviewProps,\n // Saved Queries\n SavedQueryPickerProps,\n // Custom SQL\n CustomSQLEditorProps,\n} from './components';\n\n// ============================================================================\n// Export Utilities\n// ============================================================================\n\nexport {\n // CSV export\n exportToCSV,\n generateCSV,\n downloadFile,\n // Excel export\n exportToExcel,\n exportMultipleSheets,\n // Hook\n useExport,\n} from './export';\n\nexport type {\n ExportOptions,\n ExcelExportOptions,\n ExcelCellStyle,\n ExportData,\n UseExportOptions,\n UseExportResult,\n} from './export';\n\n// ============================================================================\n// Dashboard\n// ============================================================================\n\nexport {\n // Main components\n Dashboard,\n DashboardProvider,\n DashboardLayoutComponent,\n // Widget components\n Widget,\n WidgetHeader,\n WidgetContent,\n // Filter components\n FilterBar,\n DateRangeFilter,\n SelectFilter,\n MultiSelectFilter,\n TextFilter,\n // Editor components\n DashboardEditor,\n EditorToolbar,\n WidgetPalette,\n WidgetEditor,\n // List components\n DashboardList,\n DashboardCard,\n DashboardDialog,\n // Hooks\n useDashboard,\n useDashboardFilters,\n useWidget,\n useAutoRefresh,\n useFullscreen,\n // Context\n DashboardContext,\n} from './dashboard';\n\nexport type {\n // Widget types\n WidgetType,\n WidgetPosition,\n WidgetConfig,\n WidgetDefinition,\n // Filter types\n DashboardFilterType,\n FilterOption,\n DashboardFilter,\n FilterValue,\n DateRangeValue,\n NumberRangeValue,\n // Dashboard types\n DashboardLayout,\n DashboardDefinition,\n // Context types\n DashboardContextValue,\n DashboardEditorContextValue,\n // Component props\n DashboardProviderProps,\n DashboardProps,\n DashboardEditorProps,\n DashboardLayoutProps,\n WidgetProps,\n WidgetHeaderProps,\n FilterBarProps,\n DateRangeFilterProps,\n SelectFilterProps,\n MultiSelectFilterProps,\n TextFilterProps,\n WidgetPaletteProps,\n WidgetEditorProps,\n WidgetContentProps,\n EditorToolbarProps,\n // List component props\n DashboardListProps,\n DashboardCardProps,\n DashboardDialogProps,\n // Hook result types\n UseDashboardFiltersResult,\n UseWidgetResult,\n UseAutoRefreshOptions,\n UseAutoRefreshResult,\n UseFullscreenResult,\n} from './dashboard';\n\n// ============================================================================\n// Accessibility Utilities\n// ============================================================================\n\nexport {\n useFocusTrap,\n useArrowNavigation,\n useRovingTabIndex,\n useFocusVisible,\n announceToScreenReader,\n focusVisibleStyles,\n skipLinkStyles,\n skipLinkFocusStyles,\n} from './utils';\n\nexport type {\n FocusTrapOptions,\n ArrowNavigationOptions,\n UseFocusTrapResult,\n UseArrowNavigationResult,\n SkipLinkProps,\n} from './utils';\n\n// ============================================================================\n// SSR Utilities\n// ============================================================================\n\nexport {\n useIsClient,\n ClientOnly,\n getWindowWidth,\n getWindowHeight,\n isBrowser,\n isServer,\n getLocalStorage,\n setLocalStorage,\n removeLocalStorage,\n useWindowSize,\n useMediaQuery,\n useBreakpoint,\n useIsBreakpoint,\n BREAKPOINTS,\n} from './ssr';\n\nexport type {\n ClientOnlyProps,\n WindowSize,\n Breakpoint,\n} from './ssr';\n\n// ============================================================================\n// Pin Components\n// ============================================================================\n\nexport {\n PinButton,\n PinMenu,\n PinnedDashboardList,\n PinnedDashboardView,\n} from './pins';\n\nexport type {\n PinButtonProps,\n PinMenuProps,\n PinContextOption,\n PinnedDashboardListProps,\n PinnedDashboardItemActions,\n PinnedDashboardViewProps,\n} from './pins';\n\n// ============================================================================\n// Version\n// ============================================================================\n\nexport const VERSION = '0.1.0';\n"]}
|