@prismiq/react 0.1.1 → 0.2.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.
Files changed (49) hide show
  1. package/dist/{CustomSQLEditor-d84v_Cgp.d.cts → ChatBubble-ARocmvZD.d.cts} +40 -3
  2. package/dist/{CustomSQLEditor-CYlOtecq.d.ts → ChatBubble-BN_CjIpk.d.ts} +40 -3
  3. package/dist/{DashboardDialog-CZD8I-6z.d.cts → DashboardDialog-UhUGXx2h.d.ts} +5 -3
  4. package/dist/{DashboardDialog-DBNTVVSp.d.ts → DashboardDialog-Z-HypxmG.d.cts} +5 -3
  5. package/dist/charts/index.d.cts +2 -2
  6. package/dist/charts/index.d.ts +2 -2
  7. package/dist/{chunk-VQDFS6VS.cjs → chunk-FKXCINUF.cjs} +368 -210
  8. package/dist/chunk-FKXCINUF.cjs.map +1 -0
  9. package/dist/{chunk-ET7GCREP.js → chunk-GELI7MDZ.js} +482 -7
  10. package/dist/chunk-GELI7MDZ.js.map +1 -0
  11. package/dist/{chunk-WWTT2OJ5.js → chunk-HKZFEXT6.js} +27 -9
  12. package/dist/chunk-HKZFEXT6.js.map +1 -0
  13. package/dist/{chunk-3LDRRDJ6.js → chunk-JBJ5LEAG.js} +186 -28
  14. package/dist/chunk-JBJ5LEAG.js.map +1 -0
  15. package/dist/{chunk-URJH4H6G.cjs → chunk-PG7QBH3G.cjs} +485 -6
  16. package/dist/chunk-PG7QBH3G.cjs.map +1 -0
  17. package/dist/{chunk-MDXGGZSW.cjs → chunk-ZYVN6XAZ.cjs} +35 -37
  18. package/dist/chunk-ZYVN6XAZ.cjs.map +1 -0
  19. package/dist/components/index.cjs +62 -54
  20. package/dist/components/index.d.cts +2 -2
  21. package/dist/components/index.d.ts +2 -2
  22. package/dist/components/index.js +1 -1
  23. package/dist/dashboard/index.cjs +34 -34
  24. package/dist/dashboard/index.d.cts +7 -5
  25. package/dist/dashboard/index.d.ts +7 -5
  26. package/dist/dashboard/index.js +2 -2
  27. package/dist/export/index.cjs +7 -7
  28. package/dist/export/index.d.cts +6 -4
  29. package/dist/export/index.d.ts +6 -4
  30. package/dist/export/index.js +1 -1
  31. package/dist/{index-CvKj3SWO.d.cts → index-B8DelfpL.d.cts} +1 -1
  32. package/dist/{index-DXGLs1yY.d.ts → index-RbfYPQD_.d.ts} +1 -1
  33. package/dist/index.cjs +119 -103
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +74 -7
  36. package/dist/index.d.ts +74 -7
  37. package/dist/index.js +5 -5
  38. package/dist/index.js.map +1 -1
  39. package/dist/{types-j0kPJ9Hz.d.cts → types-ccB9Ps3k.d.cts} +44 -1
  40. package/dist/{types-j0kPJ9Hz.d.ts → types-ccB9Ps3k.d.ts} +44 -1
  41. package/dist/utils/index.d.cts +1 -1
  42. package/dist/utils/index.d.ts +1 -1
  43. package/package.json +2 -6
  44. package/dist/chunk-3LDRRDJ6.js.map +0 -1
  45. package/dist/chunk-ET7GCREP.js.map +0 -1
  46. package/dist/chunk-MDXGGZSW.cjs.map +0 -1
  47. package/dist/chunk-URJH4H6G.cjs.map +0 -1
  48. package/dist/chunk-VQDFS6VS.cjs.map +0 -1
  49. package/dist/chunk-WWTT2OJ5.js.map +0 -1
@@ -1 +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 DataSourceMeta,\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"]}
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 DataSourceMeta,\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 // LLM types\n ChatRole,\n ChatMessage,\n StreamChunkType,\n StreamChunk,\n LLMStatus,\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 useLLMStatus,\n useLLMChat,\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 UseLLMStatusResult,\n UseLLMChatResult,\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 // Chat Panel\n ChatPanel,\n ChatBubble,\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 // Chat Panel\n ChatPanelProps,\n ChatBubbleProps,\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"]}
package/dist/index.d.cts CHANGED
@@ -1,11 +1,11 @@
1
- import { D as DatabaseSchema, c as TableSchema, d as DataSourceMeta, a as QueryDefinition, V as ValidationResult, Q as QueryResult, S as SQLValidationResult, e as Dashboard, f as DashboardCreate, g as DashboardUpdate, W as WidgetCreate, h as Widget, i as WidgetUpdate, j as WidgetPositionUpdate, k as SavedQuery, l as SavedQueryCreate, m as SavedQueryUpdate, P as PinnedDashboard, n as PinnedDashboardsResponse, R as Relationship, o as WidgetPosition } from './types-j0kPJ9Hz.cjs';
2
- export { A as AggregationType, p as ColumnSchema, q as ColumnSelection, r as DashboardPinContextsResponse, E as ExecuteSQLRequest, F as FilterDefinition, s as FilterOperator, G as GroupByDefinition, J as JoinDefinition, t as JoinType, b as QueryTable, u as SortDefinition, v as SortDirection } from './types-j0kPJ9Hz.cjs';
3
- import { P as PrismiqTheme, T as ThemeMode, D as DeepPartial, a as ThemeContextValue, C as ChartDataOptions, b as ChartDataResult } from './index-CvKj3SWO.cjs';
4
- export { A as AreaChart, c as AreaChartProps, d as AxisFormat, B as BarChart, e as BarChartProps, f as BaseChartProps, g as ChartClickParams, h as ChartDataPoint, i as ChartSeries, j as ChartSuggestion, k as ChartType, E as EChartWrapper, l as EChartWrapperProps, L as LegendPosition, m as LineChart, n as LineChartProps, M as MetricCard, o as MetricCardProps, p as PieChart, q as PieChartProps, R as ReferenceLineConfig, S as ScatterChart, r as ScatterChartProps, s as Sparkline, t as SparklineProps, u as TrendConfig, v as TrendIndicator, w as TrendIndicatorProps, x as applyThemeToOption, y as createChartTheme, z as createGradientColor, F as dataPointsToChartData, G as formatAxisLabel, H as formatCompact, I as formatMetricValue, J as getChartColors, K as isChartDataEmpty, N as queryResultToChartData, O as suggestChartType, Q as toChartData } from './index-CvKj3SWO.cjs';
1
+ import { D as DatabaseSchema, c as TableSchema, d as DataSourceMeta, a as QueryDefinition, V as ValidationResult, Q as QueryResult, S as SQLValidationResult, e as Dashboard, f as DashboardCreate, g as DashboardUpdate, W as WidgetCreate, h as Widget, i as WidgetUpdate, j as WidgetPositionUpdate, k as SavedQuery, l as SavedQueryCreate, m as SavedQueryUpdate, P as PinnedDashboard, n as PinnedDashboardsResponse, L as LLMStatus, o as ChatMessage, p as StreamChunk, R as Relationship, q as WidgetPosition } from './types-ccB9Ps3k.cjs';
2
+ export { A as AggregationType, r as ChatRole, s as ColumnSchema, t as ColumnSelection, u as DashboardPinContextsResponse, E as ExecuteSQLRequest, F as FilterDefinition, v as FilterOperator, G as GroupByDefinition, J as JoinDefinition, w as JoinType, b as QueryTable, x as SortDefinition, y as SortDirection, z as StreamChunkType } from './types-ccB9Ps3k.cjs';
3
+ import { P as PrismiqTheme, T as ThemeMode, D as DeepPartial, a as ThemeContextValue, C as ChartDataOptions, b as ChartDataResult } from './index-B8DelfpL.cjs';
4
+ export { A as AreaChart, c as AreaChartProps, d as AxisFormat, B as BarChart, e as BarChartProps, f as BaseChartProps, g as ChartClickParams, h as ChartDataPoint, i as ChartSeries, j as ChartSuggestion, k as ChartType, E as EChartWrapper, l as EChartWrapperProps, L as LegendPosition, m as LineChart, n as LineChartProps, M as MetricCard, o as MetricCardProps, p as PieChart, q as PieChartProps, R as ReferenceLineConfig, S as ScatterChart, r as ScatterChartProps, s as Sparkline, t as SparklineProps, u as TrendConfig, v as TrendIndicator, w as TrendIndicatorProps, x as applyThemeToOption, y as createChartTheme, z as createGradientColor, F as dataPointsToChartData, G as formatAxisLabel, H as formatCompact, I as formatMetricValue, J as getChartColors, K as isChartDataEmpty, N as queryResultToChartData, O as suggestChartType, Q as toChartData } from './index-B8DelfpL.cjs';
5
5
  import { ReactNode, CSSProperties } from 'react';
6
- export { A as AggregationPicker, a as AggregationPickerProps, B as Badge, b as BadgeProps, c as Button, d as ButtonProps, C as Checkbox, e as CheckboxProps, f as ColumnNode, g as ColumnNodeProps, h as ColumnSelector, i as ColumnSelectorProps, j as CustomSQLEditor, k as CustomSQLEditorProps, D as Dialog, l as DialogFooter, m as DialogFooterProps, n as DialogHeader, o as DialogHeaderProps, p as DialogProps, q as Dropdown, r as DropdownItem, s as DropdownItemProps, t as DropdownProps, u as DropdownSeparator, v as DropdownSeparatorProps, E as EmptyDashboard, w as EmptyDashboardProps, x as EmptyState, y as EmptyStateProps, z as ErrorBoundary, F as ErrorBoundaryProps, G as ErrorFallback, H as ErrorFallbackProps, I as FilterBuilder, J as FilterBuilderProps, K as FilterRow, L as FilterRowProps, M as FilterValueInput, N as FilterValueInputProps, O as Icon, P as IconName, Q as IconProps, R as Input, S as InputProps, T as NoData, U as NoDataProps, V as NoResults, W as NoResultsProps, X as Pagination, Y as PaginationProps, Z as QueryBuilder, _ as QueryBuilderProps, $ as QueryBuilderState, a0 as QueryBuilderToolbar, a1 as QueryBuilderToolbarProps, a2 as QueryPreview, a3 as QueryPreviewProps, a4 as ResultsTable, a5 as ResultsTableProps, a6 as SavedQueryPicker, a7 as SavedQueryPickerProps, a8 as SchemaExplorer, a9 as SchemaExplorerProps, aa as Select, ab as SelectOption, ac as SelectProps, ad as SelectedColumn, ae as SelectedColumnProps, af as Skeleton, ag as SkeletonChart, ah as SkeletonChartProps, ai as SkeletonMetricCard, aj as SkeletonMetricCardProps, ak as SkeletonProps, al as SkeletonTable, am as SkeletonTableProps, an as SkeletonText, ao as SkeletonTextProps, ap as SortBuilder, aq as SortBuilderProps, ar as SortRow, as as SortRowProps, at as TableCell, au as TableCellProps, av as TableHeader, aw as TableHeaderProps, ax as TableNode, ay as TableNodeProps, az as TableRow, aA as TableRowProps, aB as Tooltip, aC as TooltipProps, aD as WidgetErrorBoundary, aE as WidgetErrorBoundaryProps } from './CustomSQLEditor-d84v_Cgp.cjs';
6
+ export { A as AggregationPicker, a as AggregationPickerProps, B as Badge, b as BadgeProps, c as Button, d as ButtonProps, C as ChatBubble, e as ChatBubbleProps, f as ChatPanel, g as ChatPanelProps, h as Checkbox, i as CheckboxProps, j as ColumnNode, k as ColumnNodeProps, l as ColumnSelector, m as ColumnSelectorProps, n as CustomSQLEditor, o as CustomSQLEditorProps, D as Dialog, p as DialogFooter, q as DialogFooterProps, r as DialogHeader, s as DialogHeaderProps, t as DialogProps, u as Dropdown, v as DropdownItem, w as DropdownItemProps, x as DropdownProps, y as DropdownSeparator, z as DropdownSeparatorProps, E as EmptyDashboard, F as EmptyDashboardProps, G as EmptyState, H as EmptyStateProps, I as ErrorBoundary, J as ErrorBoundaryProps, K as ErrorFallback, L as ErrorFallbackProps, M as FilterBuilder, N as FilterBuilderProps, O as FilterRow, P as FilterRowProps, Q as FilterValueInput, R as FilterValueInputProps, S as Icon, T as IconName, U as IconProps, V as Input, W as InputProps, X as NoData, Y as NoDataProps, Z as NoResults, _ as NoResultsProps, $ as Pagination, a0 as PaginationProps, a1 as QueryBuilder, a2 as QueryBuilderProps, a3 as QueryBuilderState, a4 as QueryBuilderToolbar, a5 as QueryBuilderToolbarProps, a6 as QueryPreview, a7 as QueryPreviewProps, a8 as ResultsTable, a9 as ResultsTableProps, aa as SavedQueryPicker, ab as SavedQueryPickerProps, ac as SchemaExplorer, ad as SchemaExplorerProps, ae as Select, af as SelectOption, ag as SelectProps, ah as SelectedColumn, ai as SelectedColumnProps, aj as Skeleton, ak as SkeletonChart, al as SkeletonChartProps, am as SkeletonMetricCard, an as SkeletonMetricCardProps, ao as SkeletonProps, ap as SkeletonTable, aq as SkeletonTableProps, ar as SkeletonText, as as SkeletonTextProps, at as SortBuilder, au as SortBuilderProps, av as SortRow, aw as SortRowProps, ax as TableCell, ay as TableCellProps, az as TableHeader, aA as TableHeaderProps, aB as TableNode, aC as TableNodeProps, aD as TableRow, aE as TableRowProps, aF as Tooltip, aG as TooltipProps, aH as WidgetErrorBoundary, aI as WidgetErrorBoundaryProps } from './ChatBubble-ARocmvZD.cjs';
7
7
  export { ExcelCellStyle, ExcelExportOptions, ExportData, ExportOptions, UseExportOptions, UseExportResult, downloadFile, exportMultipleSheets, exportToCSV, exportToExcel, generateCSV, useExport } from './export/index.cjs';
8
- export { d as Dashboard, e as DashboardCard, f as DashboardCardProps, g as DashboardContext, h as DashboardContextValue, i as DashboardDefinition, j as DashboardDialog, k as DashboardDialogProps, l as DashboardEditor, m as DashboardEditorContextValue, n as DashboardEditorProps, o as DashboardFilter, p as DashboardFilterType, D as DashboardLayout, q as DashboardLayoutComponent, r as DashboardLayoutProps, s as DashboardList, t as DashboardListProps, u as DashboardProps, v as DashboardProvider, w as DashboardProviderProps, x as DateRangeFilter, y as DateRangeFilterProps, z as DateRangeValue, E as EditorToolbar, A as EditorToolbarProps, F as FilterBar, B as FilterBarProps, C as FilterOption, G as FilterValue, M as MultiSelectFilter, H as MultiSelectFilterProps, N as NumberRangeValue, S as SelectFilter, I as SelectFilterProps, T as TextFilter, J as TextFilterProps, U as UseAutoRefreshOptions, K as UseAutoRefreshResult, O as UseDashboardFiltersResult, P as UseFullscreenResult, Q as UseWidgetResult, V as Widget, c as WidgetConfig, X as WidgetContent, Y as WidgetContentProps, W as WidgetDefinition, _ as WidgetEditor, $ as WidgetEditorProps, a0 as WidgetHeader, a1 as WidgetHeaderProps, a3 as WidgetPalette, a4 as WidgetPaletteProps, a as WidgetPosition, a5 as WidgetProps, b as WidgetType, a6 as useAutoRefresh, a7 as useDashboard, a8 as useDashboardFilters, a9 as useFullscreen, aa as useWidget } from './DashboardDialog-CZD8I-6z.cjs';
8
+ export { d as Dashboard, e as DashboardCard, f as DashboardCardProps, g as DashboardContext, h as DashboardContextValue, i as DashboardDefinition, j as DashboardDialog, k as DashboardDialogProps, l as DashboardEditor, m as DashboardEditorContextValue, n as DashboardEditorProps, o as DashboardFilter, p as DashboardFilterType, D as DashboardLayout, q as DashboardLayoutComponent, r as DashboardLayoutProps, s as DashboardList, t as DashboardListProps, u as DashboardProps, v as DashboardProvider, w as DashboardProviderProps, x as DateRangeFilter, y as DateRangeFilterProps, z as DateRangeValue, E as EditorToolbar, A as EditorToolbarProps, F as FilterBar, B as FilterBarProps, C as FilterOption, G as FilterValue, M as MultiSelectFilter, H as MultiSelectFilterProps, N as NumberRangeValue, S as SelectFilter, I as SelectFilterProps, T as TextFilter, J as TextFilterProps, U as UseAutoRefreshOptions, K as UseAutoRefreshResult, O as UseDashboardFiltersResult, P as UseFullscreenResult, Q as UseWidgetResult, V as Widget, c as WidgetConfig, X as WidgetContent, Y as WidgetContentProps, W as WidgetDefinition, _ as WidgetEditor, $ as WidgetEditorProps, a0 as WidgetHeader, a1 as WidgetHeaderProps, a3 as WidgetPalette, a4 as WidgetPaletteProps, a as WidgetPosition, a5 as WidgetProps, b as WidgetType, a6 as useAutoRefresh, a7 as useDashboard, a8 as useDashboardFilters, a9 as useFullscreen, aa as useWidget } from './DashboardDialog-Z-HypxmG.cjs';
9
9
  export { A as ArrowNavigationOptions, F as FocusTrapOptions, S as SkipLinkProps, U as UseArrowNavigationResult, a as UseFocusTrapResult, b as announceToScreenReader, f as focusVisibleStyles, s as skipLinkFocusStyles, c as skipLinkStyles, u as useArrowNavigation, d as useFocusTrap, e as useFocusVisible, g as useRovingTabIndex } from './accessibility-Bu2mNtaB.cjs';
10
10
  export { BREAKPOINTS, Breakpoint, ClientOnly, ClientOnlyProps, WindowSize, getLocalStorage, getWindowHeight, getWindowWidth, isBrowser, isServer, removeLocalStorage, setLocalStorage, useBreakpoint, useIsBreakpoint, useIsClient, useMediaQuery, useWindowSize } from './ssr/index.cjs';
11
11
 
@@ -348,6 +348,22 @@ declare class PrismiqClient {
348
348
  * @param dashboardIds - Ordered list of dashboard IDs (new order).
349
349
  */
350
350
  reorderPins(context: string, dashboardIds: string[]): Promise<void>;
351
+ /**
352
+ * Get the LLM agent status.
353
+ *
354
+ * @returns LLM status including enabled state, provider, and model.
355
+ */
356
+ getLLMStatus(): Promise<LLMStatus>;
357
+ /**
358
+ * Stream a chat response from the LLM agent via SSE.
359
+ *
360
+ * @param message - User's message.
361
+ * @param history - Previous conversation messages.
362
+ * @param currentSql - Current SQL in the editor (for context).
363
+ * @param signal - Optional AbortSignal for cancellation.
364
+ * @yields StreamChunk objects as the response is generated.
365
+ */
366
+ streamChat(message: string, history: ChatMessage[], currentSql: string | null, signal?: AbortSignal): AsyncGenerator<StreamChunk, void, undefined>;
351
367
  }
352
368
 
353
369
  /**
@@ -1228,6 +1244,57 @@ interface UseDashboardPinStatusResult {
1228
1244
  */
1229
1245
  declare function useDashboardPinStatus(options: UseDashboardPinStatusOptions): UseDashboardPinStatusResult;
1230
1246
 
1247
+ /**
1248
+ * Hook for checking LLM agent availability.
1249
+ */
1250
+ interface UseLLMStatusResult {
1251
+ /** Whether the LLM agent is enabled on the backend. */
1252
+ enabled: boolean;
1253
+ /** Provider name (e.g., 'gemini'). */
1254
+ provider: string | undefined;
1255
+ /** Model name (e.g., 'gemini-2.0-flash'). */
1256
+ model: string | undefined;
1257
+ /** Whether the status is still loading. */
1258
+ isLoading: boolean;
1259
+ /** Error from the status check, if any. */
1260
+ error: Error | null;
1261
+ }
1262
+ /**
1263
+ * Check if the LLM agent is available.
1264
+ *
1265
+ * Makes a single request to /llm/status on mount.
1266
+ * If the request fails (e.g., 404 because the backend doesn't support LLM),
1267
+ * returns enabled=false without throwing.
1268
+ */
1269
+ declare function useLLMStatus(): UseLLMStatusResult;
1270
+
1271
+ /**
1272
+ * Hook for interacting with the LLM chat agent.
1273
+ */
1274
+
1275
+ interface UseLLMChatResult {
1276
+ /** Full conversation history (user + assistant messages). */
1277
+ messages: ChatMessage[];
1278
+ /** Whether a response is currently streaming. */
1279
+ isStreaming: boolean;
1280
+ /** Content currently being streamed (partial assistant response). */
1281
+ streamingContent: string;
1282
+ /** Last SQL suggestion extracted from the response. */
1283
+ suggestedSql: string | null;
1284
+ /** Send a message to the agent. */
1285
+ sendMessage: (message: string, currentSql: string | null) => Promise<void>;
1286
+ /** Clear conversation history. */
1287
+ clearHistory: () => void;
1288
+ /** Error from the last request. */
1289
+ error: string | null;
1290
+ }
1291
+ /**
1292
+ * Hook for streaming chat with the LLM agent.
1293
+ *
1294
+ * Manages conversation state, streaming, and SQL extraction.
1295
+ */
1296
+ declare function useLLMChat(): UseLLMChatResult;
1297
+
1231
1298
  /**
1232
1299
  * PinButton component.
1233
1300
  *
@@ -1453,4 +1520,4 @@ declare function PinnedDashboardView({ context, selectedDashboard, onBack, onSel
1453
1520
 
1454
1521
  declare const VERSION = "0.1.0";
1455
1522
 
1456
- export { type AnalyticsCallbacks, type AnalyticsContextValue, AnalyticsProvider, type AnalyticsProviderProps, ChartDataOptions, ChartDataResult, type ClientConfig, DashboardCreate, DashboardUpdate, DataSourceMeta, DatabaseSchema, DeepPartial, type MutationState, PinButton, type PinButtonProps, type PinContextOption, PinMenu, type PinMenuProps, type PinMutationState, PinnedDashboard, type PinnedDashboardItemActions, PinnedDashboardList, type PinnedDashboardListProps, PinnedDashboardView, type PinnedDashboardViewProps, PinnedDashboardsResponse, PrismiqClient, PrismiqError, PrismiqTheme, QueryDefinition, QueryResult, Relationship, SQLValidationResult, SavedQuery, SavedQueryCreate, SavedQueryUpdate, TableSchema, ThemeContextValue, ThemeMode, ThemeProvider, type ThemeProviderProps, type UseCustomSQLOptions, type UseCustomSQLResult, type UseDashboardMutationsResult, type UseDashboardOptions, type UseDashboardPinStatusOptions, type UseDashboardPinStatusResult, type UseDashboardResult, type UseDashboardsOptions, type UseDashboardsResult, type UsePinMutationsResult, type UsePinnedDashboardsOptions, type UsePinnedDashboardsResult, type UseQueryOptions, type UseQueryResult, type UseSavedQueriesOptions, type UseSavedQueriesResult, type UseSchemaResult, VERSION, ValidationResult, darkTheme, lightTheme, useAnalytics, useAnalyticsCallbacks, useChartData, useCustomSQL, useDashboard as useDashboardData, useDashboardMutations, useDashboardPinStatus, useDashboards, usePinMutations, usePinnedDashboards, useQuery, useSavedQueries, useSchema, useTheme };
1523
+ export { type AnalyticsCallbacks, type AnalyticsContextValue, AnalyticsProvider, type AnalyticsProviderProps, ChartDataOptions, ChartDataResult, ChatMessage, type ClientConfig, DashboardCreate, DashboardUpdate, DataSourceMeta, DatabaseSchema, DeepPartial, LLMStatus, type MutationState, PinButton, type PinButtonProps, type PinContextOption, PinMenu, type PinMenuProps, type PinMutationState, PinnedDashboard, type PinnedDashboardItemActions, PinnedDashboardList, type PinnedDashboardListProps, PinnedDashboardView, type PinnedDashboardViewProps, PinnedDashboardsResponse, PrismiqClient, PrismiqError, PrismiqTheme, QueryDefinition, QueryResult, Relationship, SQLValidationResult, SavedQuery, SavedQueryCreate, SavedQueryUpdate, StreamChunk, TableSchema, ThemeContextValue, ThemeMode, ThemeProvider, type ThemeProviderProps, type UseCustomSQLOptions, type UseCustomSQLResult, type UseDashboardMutationsResult, type UseDashboardOptions, type UseDashboardPinStatusOptions, type UseDashboardPinStatusResult, type UseDashboardResult, type UseDashboardsOptions, type UseDashboardsResult, type UseLLMChatResult, type UseLLMStatusResult, type UsePinMutationsResult, type UsePinnedDashboardsOptions, type UsePinnedDashboardsResult, type UseQueryOptions, type UseQueryResult, type UseSavedQueriesOptions, type UseSavedQueriesResult, type UseSchemaResult, VERSION, ValidationResult, darkTheme, lightTheme, useAnalytics, useAnalyticsCallbacks, useChartData, useCustomSQL, useDashboard as useDashboardData, useDashboardMutations, useDashboardPinStatus, useDashboards, useLLMChat, useLLMStatus, usePinMutations, usePinnedDashboards, useQuery, useSavedQueries, useSchema, useTheme };