@prismiq/react 0.1.0 → 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 (65) hide show
  1. package/dist/{CustomSQLEditor-DYeId0Gp.d.ts → ChatBubble-ARocmvZD.d.cts} +48 -4
  2. package/dist/{CustomSQLEditor-BXB4rf1q.d.cts → ChatBubble-BN_CjIpk.d.ts} +48 -4
  3. package/dist/{DashboardDialog-B3vYC5Gs.d.ts → DashboardDialog-UhUGXx2h.d.ts} +6 -4
  4. package/dist/{DashboardDialog-LHmrtNQU.d.cts → DashboardDialog-Z-HypxmG.d.cts} +6 -4
  5. package/dist/{accessibility-2yy5yqRR.d.cts → accessibility-Bu2mNtaB.d.cts} +1 -1
  6. package/dist/{accessibility-2yy5yqRR.d.ts → accessibility-Bu2mNtaB.d.ts} +1 -1
  7. package/dist/charts/index.cjs +27 -27
  8. package/dist/charts/index.d.cts +2 -2
  9. package/dist/charts/index.d.ts +2 -2
  10. package/dist/charts/index.js +2 -2
  11. package/dist/{chunk-NK7HKX2J.cjs → chunk-73TPDGXB.cjs} +7 -7
  12. package/dist/{chunk-NK7HKX2J.cjs.map → chunk-73TPDGXB.cjs.map} +1 -1
  13. package/dist/{chunk-FEABEF3J.cjs → chunk-FKXCINUF.cjs} +551 -299
  14. package/dist/chunk-FKXCINUF.cjs.map +1 -0
  15. package/dist/{chunk-2H5WTH4K.js → chunk-FQ23KG6G.js} +3 -3
  16. package/dist/{chunk-2H5WTH4K.js.map → chunk-FQ23KG6G.js.map} +1 -1
  17. package/dist/{chunk-UPYINBZU.js → chunk-GELI7MDZ.js} +982 -51
  18. package/dist/chunk-GELI7MDZ.js.map +1 -0
  19. package/dist/{chunk-WWTT2OJ5.js → chunk-HKZFEXT6.js} +27 -9
  20. package/dist/chunk-HKZFEXT6.js.map +1 -0
  21. package/dist/{chunk-MOAEEF5P.js → chunk-JBJ5LEAG.js} +362 -110
  22. package/dist/chunk-JBJ5LEAG.js.map +1 -0
  23. package/dist/{chunk-4AVL6GQK.cjs → chunk-KXB2IZI2.cjs} +36 -9
  24. package/dist/chunk-KXB2IZI2.cjs.map +1 -0
  25. package/dist/{chunk-EX74SI67.js → chunk-LBE6GIBC.js} +36 -9
  26. package/dist/chunk-LBE6GIBC.js.map +1 -0
  27. package/dist/{chunk-NY6TZLST.cjs → chunk-PG7QBH3G.cjs} +988 -53
  28. package/dist/chunk-PG7QBH3G.cjs.map +1 -0
  29. package/dist/{chunk-MDXGGZSW.cjs → chunk-ZYVN6XAZ.cjs} +35 -37
  30. package/dist/chunk-ZYVN6XAZ.cjs.map +1 -0
  31. package/dist/components/index.cjs +63 -55
  32. package/dist/components/index.d.cts +2 -2
  33. package/dist/components/index.d.ts +2 -2
  34. package/dist/components/index.js +2 -2
  35. package/dist/dashboard/index.cjs +36 -36
  36. package/dist/dashboard/index.d.cts +7 -5
  37. package/dist/dashboard/index.d.ts +7 -5
  38. package/dist/dashboard/index.js +4 -4
  39. package/dist/export/index.cjs +7 -7
  40. package/dist/export/index.d.cts +6 -4
  41. package/dist/export/index.d.ts +6 -4
  42. package/dist/export/index.js +1 -1
  43. package/dist/{index-C-Qcuu4Y.d.cts → index-B8DelfpL.d.cts} +2 -2
  44. package/dist/{index-rPc7ijt8.d.ts → index-RbfYPQD_.d.ts} +2 -2
  45. package/dist/index.cjs +150 -134
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.cts +97 -9
  48. package/dist/index.d.ts +97 -9
  49. package/dist/index.js +7 -7
  50. package/dist/index.js.map +1 -1
  51. package/dist/{types-WrCbOeAV.d.cts → types-ccB9Ps3k.d.cts} +59 -1
  52. package/dist/{types-WrCbOeAV.d.ts → types-ccB9Ps3k.d.ts} +59 -1
  53. package/dist/utils/index.cjs +15 -15
  54. package/dist/utils/index.d.cts +5 -21
  55. package/dist/utils/index.d.ts +5 -21
  56. package/dist/utils/index.js +1 -1
  57. package/package.json +3 -7
  58. package/dist/chunk-4AVL6GQK.cjs.map +0 -1
  59. package/dist/chunk-EX74SI67.js.map +0 -1
  60. package/dist/chunk-FEABEF3J.cjs.map +0 -1
  61. package/dist/chunk-MDXGGZSW.cjs.map +0 -1
  62. package/dist/chunk-MOAEEF5P.js.map +0 -1
  63. package/dist/chunk-NY6TZLST.cjs.map +0 -1
  64. package/dist/chunk-UPYINBZU.js.map +0 -1
  65. package/dist/chunk-WWTT2OJ5.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -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":["errorStyles","PinIcon","jsxs","jsx","useState","useCallback","error","UnpinIcon","containerStyles","titleStyles","unpinButtonStyles","contentStyles","errorBannerStyles"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * PinButton component.\n *\n * A button to pin/unpin a dashboard to a specific context.\n */\n\nimport { useCallback, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { useDashboardPinStatus, usePinMutations } from '../hooks';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface PinButtonProps {\n /** Dashboard ID to pin/unpin. */\n dashboardId: string;\n /** Context to pin to (e.g., \"accounts\", \"dashboard\"). */\n context: string;\n /** Label text (default: \"Pin\"). */\n label?: string;\n /** Label when pinned (default: \"Unpin\"). */\n unpinLabel?: string;\n /** Show as icon only (no label). */\n iconOnly?: boolean;\n /** Size variant. */\n size?: 'sm' | 'md' | 'lg';\n /** Called after pin/unpin completes. */\n onPinChange?: (isPinned: boolean) => void;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst PinIcon = ({ filled, size }: { filled: boolean; size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6a2 2 0 0 1 2-2h0a2 2 0 0 0 2-2H5a2 2 0 0 0 2 2h0a2 2 0 0 1 2 2z\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst baseStyles: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontWeight: 500,\n borderRadius: 'var(--prismiq-radius-md)',\n border: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n color: 'var(--prismiq-color-text)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s, opacity 0.15s',\n outline: 'none',\n};\n\nconst sizeStyles: Record<NonNullable<PinButtonProps['size']>, CSSProperties> = {\n sm: {\n padding: 'var(--prismiq-spacing-xs)',\n fontSize: 'var(--prismiq-font-size-sm)',\n minWidth: 28,\n minHeight: 28,\n },\n md: {\n padding: 'var(--prismiq-spacing-sm)',\n fontSize: 'var(--prismiq-font-size-base)',\n minWidth: 36,\n minHeight: 36,\n },\n lg: {\n padding: 'var(--prismiq-spacing-md)',\n fontSize: 'var(--prismiq-font-size-lg)',\n minWidth: 44,\n minHeight: 44,\n },\n};\n\nconst pinnedStyles: CSSProperties = {\n backgroundColor: 'var(--prismiq-color-primary-light, #e3f2fd)',\n borderColor: 'var(--prismiq-color-primary)',\n color: 'var(--prismiq-color-primary)',\n};\n\nconst disabledStyles: CSSProperties = {\n opacity: 0.5,\n cursor: 'not-allowed',\n};\n\nconst iconSizes: Record<NonNullable<PinButtonProps['size']>, number> = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Button to pin/unpin a dashboard to a context.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <PinButton dashboardId={dashboard.id} context=\"accounts\" />\n *\n * // Icon only with custom label\n * <PinButton\n * dashboardId={dashboard.id}\n * context=\"dashboard\"\n * iconOnly\n * onPinChange={(isPinned) => console.log('Pinned:', isPinned)}\n * />\n * ```\n */\nexport function PinButton({\n dashboardId,\n context,\n label = 'Pin',\n unpinLabel = 'Unpin',\n iconOnly = false,\n size = 'md',\n onPinChange,\n className,\n style,\n}: PinButtonProps): ReactNode {\n const { isPinned: checkIsPinned, isLoading: statusLoading, refetch } = useDashboardPinStatus({\n dashboardId,\n });\n const { pin, unpin, state: mutationState } = usePinMutations();\n const [actionError, setActionError] = useState<Error | null>(null);\n\n // Use fetched state directly to avoid race conditions with optimistic updates\n const isPinned = checkIsPinned(context);\n const isLoading = statusLoading || mutationState.isLoading;\n\n const handleClick = useCallback(async () => {\n if (isLoading) return;\n\n setActionError(null);\n try {\n if (isPinned) {\n await unpin(dashboardId, context);\n onPinChange?.(false);\n } else {\n await pin(dashboardId, context);\n onPinChange?.(true);\n }\n // Refresh status after mutation\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setActionError(error);\n console.error('Failed to toggle pin:', err);\n }\n }, [dashboardId, context, isPinned, isLoading, pin, unpin, onPinChange, refetch]);\n\n const errorStyles: CSSProperties = {\n borderColor: 'var(--prismiq-color-error)',\n color: 'var(--prismiq-color-error)',\n };\n\n const combinedStyles: CSSProperties = {\n ...baseStyles,\n ...sizeStyles[size],\n ...(isPinned ? pinnedStyles : {}),\n ...(isLoading ? disabledStyles : {}),\n ...(actionError ? errorStyles : {}),\n ...style,\n };\n\n const iconSize = iconSizes[size];\n const displayLabel = isPinned ? unpinLabel : label;\n const errorMessage = actionError ? `Error: ${actionError.message}` : undefined;\n const accessibleLabel = errorMessage ?? (iconOnly ? displayLabel : undefined);\n const tooltipTitle = errorMessage ?? (iconOnly ? displayLabel : undefined);\n\n return (\n <>\n <style>\n {`\n @keyframes prismiq-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `}\n </style>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isLoading}\n className={className}\n style={combinedStyles}\n aria-pressed={isPinned}\n aria-label={accessibleLabel}\n aria-invalid={actionError ? true : undefined}\n title={tooltipTitle}\n >\n {isLoading ? (\n <span\n style={{\n display: 'inline-block',\n width: iconSize,\n height: iconSize,\n border: '2px solid currentColor',\n borderRightColor: 'transparent',\n borderRadius: '50%',\n animation: 'prismiq-spin 0.6s linear infinite',\n }}\n />\n ) : (\n <PinIcon filled={isPinned} size={iconSize} />\n )}\n {!iconOnly && <span>{displayLabel}</span>}\n </button>\n </>\n );\n}\n","/**\n * PinMenu component.\n *\n * A dropdown menu showing multiple pin contexts with checkboxes.\n */\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\n\nimport { useDashboardPinStatus, usePinMutations } from '../hooks';\n\n// ============================================================================\n// Error Banner Styles\n// ============================================================================\n\nconst errorBannerStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-sm)',\n backgroundColor: 'var(--prismiq-color-error-light, #ffebee)',\n color: 'var(--prismiq-color-error)',\n borderRadius: 'var(--prismiq-radius-sm)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-xs)',\n marginBottom: 'var(--prismiq-spacing-xs)',\n};\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Configuration for a pin context option. */\nexport interface PinContextOption {\n /** Unique context identifier (e.g., \"accounts\", \"dashboard\"). */\n id: string;\n /** Display label for the context. */\n label: string;\n /** Optional icon to display. */\n icon?: ReactNode;\n}\n\nexport interface PinMenuProps {\n /** Dashboard ID to pin/unpin. */\n dashboardId: string;\n /** Available contexts to pin to. */\n contexts: PinContextOption[];\n /** Called after pin state changes. */\n onPinChange?: (context: string, isPinned: boolean) => void;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst PinIcon = ({ size }: { size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6a2 2 0 0 1 2-2h0a2 2 0 0 0 2-2H5a2 2 0 0 0 2 2h0a2 2 0 0 1 2 2z\" />\n </svg>\n);\n\nconst ChevronDownIcon = ({ size }: { size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst CheckIcon = ({ size }: { size: number }): ReactNode => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst triggerStyles: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-base)',\n fontWeight: 500,\n borderRadius: 'var(--prismiq-radius-md)',\n border: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n color: 'var(--prismiq-color-text)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s',\n outline: 'none',\n};\n\nconst menuStyles: CSSProperties = {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: 'var(--prismiq-spacing-xs)',\n minWidth: 200,\n padding: 'var(--prismiq-spacing-xs)',\n backgroundColor: 'var(--prismiq-color-surface)',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n boxShadow: 'var(--prismiq-shadow-lg, 0 10px 15px -3px rgba(0,0,0,0.1))',\n zIndex: 50,\n};\n\nconst menuItemStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-sm)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n color: 'var(--prismiq-color-text)',\n borderRadius: 'var(--prismiq-radius-sm)',\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n border: 'none',\n backgroundColor: 'transparent',\n width: '100%',\n textAlign: 'left',\n};\n\nconst checkboxStyles: CSSProperties = {\n width: 16,\n height: 16,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 'var(--prismiq-radius-sm)',\n border: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n flexShrink: 0,\n};\n\nconst checkedCheckboxStyles: CSSProperties = {\n ...checkboxStyles,\n backgroundColor: 'var(--prismiq-color-primary)',\n borderColor: 'var(--prismiq-color-primary)',\n color: 'var(--prismiq-color-text-inverse)',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Dropdown menu showing multiple pin contexts with checkboxes.\n *\n * @example\n * ```tsx\n * const PIN_CONTEXTS = [\n * { id: 'dashboard', label: 'Dashboard' },\n * { id: 'accounts', label: 'Accounts' },\n * ];\n *\n * <PinMenu\n * dashboardId={dashboard.id}\n * contexts={PIN_CONTEXTS}\n * onPinChange={(ctx, pinned) => console.log(ctx, pinned)}\n * />\n * ```\n */\nexport function PinMenu({\n dashboardId,\n contexts,\n onPinChange,\n className,\n style,\n}: PinMenuProps): ReactNode {\n const [isOpen, setIsOpen] = useState(false);\n const [toggleError, setToggleError] = useState<Error | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const { isPinned, refetch, isLoading: statusLoading } = useDashboardPinStatus({\n dashboardId,\n });\n const { pin, unpin, state: mutationState } = usePinMutations();\n\n const isLoading = statusLoading || mutationState.isLoading;\n\n // Clear error when menu closes\n useEffect(() => {\n if (!isOpen) {\n setToggleError(null);\n }\n }, [isOpen]);\n\n // Close menu when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n // Close on escape\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen]);\n\n const handleToggle = useCallback((ctx: string) => {\n return async () => {\n if (isLoading) return;\n\n setToggleError(null);\n try {\n const pinned = isPinned(ctx);\n if (pinned) {\n await unpin(dashboardId, ctx);\n onPinChange?.(ctx, false);\n } else {\n await pin(dashboardId, ctx);\n onPinChange?.(ctx, true);\n }\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setToggleError(error);\n console.error('Failed to toggle pin for context:', ctx, err);\n }\n };\n }, [dashboardId, isPinned, isLoading, pin, unpin, onPinChange, refetch]);\n\n // Count pinned contexts\n const pinnedCount = contexts.filter((ctx) => isPinned(ctx.id)).length;\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ position: 'relative', display: 'inline-block', ...style }}\n >\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={triggerStyles}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n >\n <PinIcon size={16} />\n <span>Pin{pinnedCount > 0 ? ` (${pinnedCount})` : ''}</span>\n <ChevronDownIcon size={14} />\n </button>\n\n {isOpen && (\n <div style={menuStyles} role=\"menu\">\n {toggleError && (\n <div style={errorBannerStyles}>\n Failed: {toggleError.message}\n </div>\n )}\n {contexts.map((ctx) => {\n const pinned = isPinned(ctx.id);\n return (\n <button\n key={ctx.id}\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={pinned}\n onClick={handleToggle(ctx.id)}\n disabled={isLoading}\n style={{\n ...menuItemStyles,\n opacity: isLoading ? 0.5 : 1,\n }}\n >\n <span style={pinned ? checkedCheckboxStyles : checkboxStyles}>\n {pinned && <CheckIcon size={12} />}\n </span>\n {ctx.icon && <span style={{ display: 'flex' }}>{ctx.icon}</span>}\n <span>{ctx.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","/**\n * PinnedDashboardList component.\n *\n * Displays a list of dashboards pinned to a context.\n */\n\nimport { useCallback, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { usePinnedDashboards, usePinMutations } from '../hooks';\nimport type { Dashboard } from '../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Props for custom rendering of a list item. */\nexport interface PinnedDashboardItemActions {\n /** Unpin this dashboard from the context. Returns a promise. */\n unpin: () => Promise<void>;\n}\n\nexport interface PinnedDashboardListProps {\n /** Context to show pins for (e.g., \"accounts\", \"dashboard\"). */\n context: string;\n /** Called when user selects a dashboard. */\n onSelect: (dashboard: Dashboard) => void;\n /** Custom empty state element. */\n emptyState?: ReactNode;\n /** Custom render function for each item. */\n renderItem?: (dashboard: Dashboard, actions: PinnedDashboardItemActions) => ReactNode;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst DashboardIcon = (): ReactNode => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" />\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" />\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" />\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" />\n </svg>\n);\n\nconst UnpinIcon = (): ReactNode => (\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M2 2 22 22\" />\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9\" />\n <path d=\"M15 6V4a2 2 0 0 1 2-2\" />\n <path d=\"M9 4a2 2 0 0 0-2 2\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst containerStyles: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--prismiq-spacing-sm)',\n};\n\nconst itemStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-md)',\n padding: 'var(--prismiq-spacing-md)',\n backgroundColor: 'var(--prismiq-color-surface)',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, border-color 0.15s, box-shadow 0.15s',\n};\n\nconst itemHoverStyles: CSSProperties = {\n backgroundColor: 'var(--prismiq-color-surface-hover, #f5f5f5)',\n borderColor: 'var(--prismiq-color-primary)',\n boxShadow: 'var(--prismiq-shadow-sm, 0 1px 2px rgba(0,0,0,0.05))',\n};\n\nconst iconWrapperStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 40,\n height: 40,\n backgroundColor: 'var(--prismiq-color-primary-light, #e3f2fd)',\n color: 'var(--prismiq-color-primary)',\n borderRadius: 'var(--prismiq-radius-md)',\n flexShrink: 0,\n};\n\nconst contentStyles: CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst titleStyles: CSSProperties = {\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-base)',\n fontWeight: 500,\n color: 'var(--prismiq-color-text)',\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nconst descriptionStyles: CSSProperties = {\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n color: 'var(--prismiq-color-text-muted)',\n margin: 0,\n marginTop: 'var(--prismiq-spacing-xs)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nconst unpinButtonStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n padding: 0,\n backgroundColor: 'transparent',\n border: '1px solid transparent',\n borderRadius: 'var(--prismiq-radius-sm)',\n color: 'var(--prismiq-color-text-muted)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n flexShrink: 0,\n};\n\nconst emptyStateStyles: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 'var(--prismiq-spacing-xl)',\n textAlign: 'center',\n color: 'var(--prismiq-color-text-muted)',\n};\n\nconst loadingStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 'var(--prismiq-spacing-xl)',\n};\n\nconst errorStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-md)',\n backgroundColor: 'var(--prismiq-color-error-light, #ffebee)',\n color: 'var(--prismiq-color-error)',\n borderRadius: 'var(--prismiq-radius-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * List of dashboards pinned to a context.\n *\n * @example\n * ```tsx\n * function AccountsDashboards() {\n * const [selected, setSelected] = useState<Dashboard | null>(null);\n *\n * return (\n * <PinnedDashboardList\n * context=\"accounts\"\n * onSelect={setSelected}\n * emptyState={<p>No pinned dashboards</p>}\n * />\n * );\n * }\n * ```\n */\nexport function PinnedDashboardList({\n context,\n onSelect,\n emptyState,\n renderItem,\n className,\n style,\n}: PinnedDashboardListProps): ReactNode {\n const { dashboards, isLoading, error, refetch } = usePinnedDashboards({ context });\n const { unpin, state: mutationState } = usePinMutations();\n const [unpinError, setUnpinError] = useState<Error | null>(null);\n\n const handleUnpin = useCallback(\n (dashboardId: string) => {\n return async (event: React.MouseEvent) => {\n event.stopPropagation();\n setUnpinError(null);\n try {\n await unpin(dashboardId, context);\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setUnpinError(error);\n console.error('Failed to unpin dashboard:', dashboardId, err);\n }\n };\n },\n [context, unpin, refetch]\n );\n\n // Create async unpin handler for renderItem actions\n const createUnpinAction = useCallback(\n (dashboardId: string): (() => Promise<void>) => {\n return async () => {\n setUnpinError(null);\n try {\n await unpin(dashboardId, context);\n await refetch();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setUnpinError(error);\n console.error('Failed to unpin dashboard:', dashboardId, err);\n throw error; // Re-throw so caller can handle if needed\n }\n };\n },\n [context, unpin, refetch]\n );\n\n if (isLoading) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n <style>\n {`\n @keyframes prismiq-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `}\n </style>\n <div style={loadingStyles}>\n <span\n style={{\n display: 'inline-block',\n width: 24,\n height: 24,\n border: '2px solid var(--prismiq-color-border)',\n borderTopColor: 'var(--prismiq-color-primary)',\n borderRadius: '50%',\n animation: 'prismiq-spin 0.6s linear infinite',\n }}\n />\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n <div style={errorStyles}>\n Failed to load pinned dashboards: {error.message}\n </div>\n </div>\n );\n }\n\n // Show unpin error as a dismissible message\n const errorBanner = unpinError ? (\n <div style={{ ...errorStyles, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <span>Failed to unpin: {unpinError.message}</span>\n <button\n type=\"button\"\n onClick={() => setUnpinError(null)}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n fontSize: 'var(--prismiq-font-size-lg)',\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n </div>\n ) : null;\n\n if (!dashboards || dashboards.length === 0) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n {emptyState || (\n <div style={emptyStateStyles}>\n <DashboardIcon />\n <p style={{ margin: 'var(--prismiq-spacing-sm) 0 0 0' }}>\n No pinned dashboards\n </p>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n {errorBanner}\n {dashboards.map((dashboard) => {\n const actions: PinnedDashboardItemActions = {\n unpin: createUnpinAction(dashboard.id),\n };\n\n if (renderItem) {\n return (\n <div\n key={dashboard.id}\n onClick={() => onSelect(dashboard)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(dashboard);\n }\n }}\n >\n {renderItem(dashboard, actions)}\n </div>\n );\n }\n\n return (\n <div\n key={dashboard.id}\n style={itemStyles}\n onClick={() => onSelect(dashboard)}\n onMouseEnter={(e) => {\n Object.assign(e.currentTarget.style, itemHoverStyles);\n }}\n onMouseLeave={(e) => {\n Object.assign(e.currentTarget.style, itemStyles);\n }}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(dashboard);\n }\n }}\n >\n <div style={iconWrapperStyles}>\n <DashboardIcon />\n </div>\n <div style={contentStyles}>\n <h3 style={titleStyles}>{dashboard.name}</h3>\n {dashboard.description && (\n <p style={descriptionStyles}>{dashboard.description}</p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={handleUnpin(dashboard.id)}\n disabled={mutationState.isLoading}\n style={{\n ...unpinButtonStyles,\n opacity: mutationState.isLoading ? 0.5 : 1,\n }}\n title=\"Unpin\"\n aria-label=\"Unpin dashboard\"\n >\n <UnpinIcon />\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * PinnedDashboardView component.\n *\n * Full view with pinned dashboard list and selected dashboard display.\n */\n\nimport { useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { Dashboard } from '../dashboard';\nimport { usePinMutations } from '../hooks';\nimport type { Dashboard as DashboardType } from '../types';\n\nimport { PinnedDashboardList } from './PinnedDashboardList';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface PinnedDashboardViewProps {\n /** Context this view is for (for unpin action). */\n context: string;\n /** Dashboard to display (null = show list). */\n selectedDashboard: DashboardType | null;\n /** Called when user clicks back or closes. */\n onBack: () => void;\n /** Called when user selects from list. */\n onSelect: (dashboard: DashboardType) => void;\n /** Show unpin button in header. */\n showUnpin?: boolean;\n /** Custom back button label. */\n backLabel?: string;\n /** Custom empty state for list. */\n emptyState?: ReactNode;\n /** Custom class name. */\n className?: string;\n /** Custom styles. */\n style?: CSSProperties;\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst BackIcon = (): ReactNode => (\n <svg\n width={20}\n height={20}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M19 12H5\" />\n <path d=\"m12 19-7-7 7-7\" />\n </svg>\n);\n\nconst UnpinIcon = (): ReactNode => (\n <svg\n width={16}\n height={16}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M2 2 22 22\" />\n <path d=\"M12 17v5\" />\n <path d=\"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9\" />\n <path d=\"M15 6V4a2 2 0 0 1 2-2\" />\n <path d=\"M9 4a2 2 0 0 0-2 2\" />\n </svg>\n);\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst containerStyles: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n};\n\nconst headerStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-md)',\n padding: 'var(--prismiq-spacing-md)',\n borderBottom: '1px solid var(--prismiq-color-border)',\n backgroundColor: 'var(--prismiq-color-surface)',\n};\n\nconst backButtonStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n fontWeight: 500,\n backgroundColor: 'transparent',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n color: 'var(--prismiq-color-text)',\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n};\n\nconst titleStyles: CSSProperties = {\n flex: 1,\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-lg)',\n fontWeight: 600,\n color: 'var(--prismiq-color-text)',\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\n\nconst unpinButtonStyles: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--prismiq-spacing-xs)',\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n backgroundColor: 'transparent',\n border: '1px solid var(--prismiq-color-border)',\n borderRadius: 'var(--prismiq-radius-md)',\n color: 'var(--prismiq-color-text-muted)',\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n};\n\nconst contentStyles: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n};\n\nconst listContainerStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-md)',\n};\n\nconst errorBannerStyles: CSSProperties = {\n padding: 'var(--prismiq-spacing-sm) var(--prismiq-spacing-md)',\n backgroundColor: 'var(--prismiq-color-error-light, #ffebee)',\n color: 'var(--prismiq-color-error)',\n fontFamily: 'var(--prismiq-font-sans)',\n fontSize: 'var(--prismiq-font-size-sm)',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Full view with pinned dashboard list and dashboard display.\n *\n * When no dashboard is selected, shows the list. When a dashboard\n * is selected, shows the dashboard with a back button.\n *\n * @example\n * ```tsx\n * function AccountsDashboardSection() {\n * const [selected, setSelected] = useState<Dashboard | null>(null);\n *\n * return (\n * <PinnedDashboardView\n * context=\"accounts\"\n * selectedDashboard={selected}\n * onSelect={setSelected}\n * onBack={() => setSelected(null)}\n * backLabel=\"Back to Accounts\"\n * emptyState={<p>Pin dashboards from Analytics.</p>}\n * />\n * );\n * }\n * ```\n */\nexport function PinnedDashboardView({\n context,\n selectedDashboard,\n onBack,\n onSelect,\n showUnpin = true,\n backLabel = 'Back',\n emptyState,\n className,\n style,\n}: PinnedDashboardViewProps): ReactNode {\n const { unpin, state: mutationState } = usePinMutations();\n const [unpinError, setUnpinError] = useState<Error | null>(null);\n\n const handleUnpin = async () => {\n if (!selectedDashboard) return;\n setUnpinError(null);\n try {\n await unpin(selectedDashboard.id, context);\n onBack();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setUnpinError(error);\n console.error('Failed to unpin dashboard:', selectedDashboard.id, err);\n }\n };\n\n // Show list when no dashboard selected\n if (!selectedDashboard) {\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n <div style={listContainerStyles}>\n <PinnedDashboardList\n context={context}\n onSelect={onSelect}\n emptyState={emptyState}\n />\n </div>\n </div>\n );\n }\n\n // Show selected dashboard with header\n return (\n <div className={className} style={{ ...containerStyles, ...style }}>\n {unpinError && (\n <div style={errorBannerStyles}>\n <span>Failed to unpin: {unpinError.message}</span>\n <button\n type=\"button\"\n onClick={() => setUnpinError(null)}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'inherit',\n fontSize: 'var(--prismiq-font-size-lg)',\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n </div>\n )}\n <div style={headerStyles}>\n <button\n type=\"button\"\n onClick={onBack}\n style={backButtonStyles}\n >\n <BackIcon />\n <span>{backLabel}</span>\n </button>\n <h2 style={titleStyles}>{selectedDashboard.name}</h2>\n {showUnpin && (\n <button\n type=\"button\"\n onClick={handleUnpin}\n disabled={mutationState.isLoading}\n style={{\n ...unpinButtonStyles,\n opacity: mutationState.isLoading ? 0.5 : 1,\n }}\n >\n <UnpinIcon />\n <span>Unpin</span>\n </button>\n )}\n </div>\n <div style={contentStyles}>\n <Dashboard id={selectedDashboard.id} />\n </div>\n </div>\n );\n}\n","/**\n * @prismiq/react - React SDK for Prismiq embedded analytics\n *\n * @example\n * ```tsx\n * import {\n * AnalyticsProvider,\n * ThemeProvider,\n * QueryBuilder,\n * BarChart,\n * Dashboard,\n * useQuery\n * } from '@prismiq/react';\n *\n * function App() {\n * return (\n * <ThemeProvider>\n * <AnalyticsProvider config={{ endpoint: 'https://api.example.com' }}>\n * <Dashboard id=\"my-dashboard\" />\n * </AnalyticsProvider>\n * </ThemeProvider>\n * );\n * }\n * ```\n *\n * For modular imports (smaller bundle size):\n * ```tsx\n * import { BarChart } from '@prismiq/react/charts';\n * import { Dashboard } from '@prismiq/react/dashboard';\n * import { useIsClient } from '@prismiq/react/ssr';\n * import { useFocusTrap } from '@prismiq/react/utils';\n * import { exportToCSV } from '@prismiq/react/export';\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type {\n // Schema types\n ColumnSchema,\n TableSchema,\n Relationship,\n DatabaseSchema,\n // Query types\n QueryTable,\n JoinType,\n JoinDefinition,\n AggregationType,\n ColumnSelection,\n FilterOperator,\n FilterDefinition,\n SortDirection,\n SortDefinition,\n GroupByDefinition,\n QueryDefinition,\n // Result types\n QueryResult,\n ValidationResult,\n // Saved query types\n SavedQuery,\n SavedQueryCreate,\n SavedQueryUpdate,\n // Custom SQL types\n ExecuteSQLRequest,\n SQLValidationResult,\n // Pin types\n PinnedDashboard,\n PinnedDashboardsResponse,\n DashboardPinContextsResponse,\n // Dashboard mutation types\n DashboardCreate,\n DashboardUpdate,\n} from './types';\n\n// ============================================================================\n// API Client\n// ============================================================================\n\nexport { PrismiqClient, PrismiqError } from './api';\nexport type { ClientConfig } from './api';\n\n// ============================================================================\n// Theme\n// ============================================================================\n\nexport { ThemeProvider, useTheme, lightTheme, darkTheme } from './theme';\nexport type {\n PrismiqTheme,\n ThemeMode,\n ThemeContextValue,\n ThemeProviderProps,\n DeepPartial,\n} from './theme';\n\n// ============================================================================\n// Context\n// ============================================================================\n\nexport { AnalyticsProvider, useAnalytics, useAnalyticsCallbacks } from './context';\nexport type {\n AnalyticsContextValue,\n AnalyticsProviderProps,\n AnalyticsCallbacks,\n} from './context';\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport {\n useSchema,\n useQuery,\n useChartData,\n useDashboards,\n useDashboard as useDashboardData,\n useDashboardMutations,\n useSavedQueries,\n useCustomSQL,\n usePinnedDashboards,\n usePinMutations,\n useDashboardPinStatus,\n} from './hooks';\nexport type {\n UseSchemaResult,\n UseQueryResult,\n UseQueryOptions,\n UseDashboardsOptions,\n UseDashboardsResult,\n UseDashboardOptions,\n UseDashboardResult,\n MutationState,\n UseDashboardMutationsResult,\n UseSavedQueriesOptions,\n UseSavedQueriesResult,\n UseCustomSQLOptions,\n UseCustomSQLResult,\n UsePinnedDashboardsOptions,\n UsePinnedDashboardsResult,\n PinMutationState,\n UsePinMutationsResult,\n UseDashboardPinStatusOptions,\n UseDashboardPinStatusResult,\n} from './hooks';\n\n// ============================================================================\n// Charts\n// ============================================================================\n\nexport {\n // Base wrapper\n EChartWrapper,\n // Chart components\n MetricCard,\n TrendIndicator,\n Sparkline,\n BarChart,\n LineChart,\n AreaChart,\n PieChart,\n ScatterChart,\n // Auto suggest\n suggestChartType,\n // Utilities\n queryResultToChartData,\n dataPointsToChartData,\n toChartData,\n createChartTheme,\n applyThemeToOption,\n formatAxisLabel,\n formatCompact,\n formatMetricValue,\n getChartColors,\n createGradientColor,\n isChartDataEmpty,\n} from './charts';\n\nexport type {\n // Data types\n ChartDataPoint,\n ChartSeries,\n // Base props\n BaseChartProps,\n ChartClickParams,\n ReferenceLineConfig,\n AxisFormat,\n LegendPosition,\n EChartWrapperProps,\n // Chart-specific props\n BarChartProps,\n LineChartProps,\n AreaChartProps,\n PieChartProps,\n ScatterChartProps,\n // MetricCard\n TrendConfig,\n MetricCardProps,\n TrendIndicatorProps,\n SparklineProps,\n // Hook types\n ChartDataOptions,\n ChartDataResult,\n // Auto suggest\n ChartType,\n ChartSuggestion,\n} from './charts';\n\n// ============================================================================\n// UI Components\n// ============================================================================\n\nexport {\n // Base UI\n Button,\n Input,\n Select,\n Checkbox,\n Badge,\n Tooltip,\n Dropdown,\n DropdownItem,\n DropdownSeparator,\n Icon,\n Dialog,\n DialogHeader,\n DialogFooter,\n // Skeleton Loading\n Skeleton,\n SkeletonText,\n SkeletonChart,\n SkeletonTable,\n SkeletonMetricCard,\n // Error Boundaries\n ErrorBoundary,\n ErrorFallback,\n WidgetErrorBoundary,\n // Empty States\n EmptyState,\n NoData,\n NoResults,\n EmptyDashboard,\n // Schema Explorer\n SchemaExplorer,\n TableNode,\n ColumnNode,\n // Column Selector\n ColumnSelector,\n SelectedColumn,\n // Filter Builder\n FilterBuilder,\n FilterRow,\n FilterValueInput,\n // Sort Builder\n SortBuilder,\n SortRow,\n // Aggregation Picker\n AggregationPicker,\n // Results Table\n ResultsTable,\n TableHeader,\n TableRow,\n TableCell,\n Pagination,\n // Query Builder\n QueryBuilder,\n QueryBuilderToolbar,\n QueryPreview,\n // Saved Queries\n SavedQueryPicker,\n // Custom SQL\n CustomSQLEditor,\n} from './components';\n\nexport type {\n // Base UI\n ButtonProps,\n InputProps,\n SelectProps,\n SelectOption,\n CheckboxProps,\n BadgeProps,\n TooltipProps,\n DropdownProps,\n DropdownItemProps,\n DropdownSeparatorProps,\n IconProps,\n IconName,\n DialogProps,\n DialogHeaderProps,\n DialogFooterProps,\n // Skeleton Loading\n SkeletonProps,\n SkeletonTextProps,\n SkeletonChartProps,\n SkeletonTableProps,\n SkeletonMetricCardProps,\n // Error Boundaries\n ErrorBoundaryProps,\n ErrorFallbackProps,\n WidgetErrorBoundaryProps,\n // Empty States\n EmptyStateProps,\n NoDataProps,\n NoResultsProps,\n EmptyDashboardProps,\n // Schema Explorer\n SchemaExplorerProps,\n TableNodeProps,\n ColumnNodeProps,\n // Column Selector\n ColumnSelectorProps,\n SelectedColumnProps,\n // Filter Builder\n FilterBuilderProps,\n FilterRowProps,\n FilterValueInputProps,\n // Sort Builder\n SortBuilderProps,\n SortRowProps,\n // Aggregation Picker\n AggregationPickerProps,\n // Results Table\n ResultsTableProps,\n TableHeaderProps,\n TableRowProps,\n TableCellProps,\n PaginationProps,\n // Query Builder\n QueryBuilderProps,\n QueryBuilderState,\n QueryBuilderToolbarProps,\n QueryPreviewProps,\n // Saved Queries\n SavedQueryPickerProps,\n // Custom SQL\n CustomSQLEditorProps,\n} from './components';\n\n// ============================================================================\n// Export Utilities\n// ============================================================================\n\nexport {\n // CSV export\n exportToCSV,\n generateCSV,\n downloadFile,\n // Excel export\n exportToExcel,\n exportMultipleSheets,\n // Hook\n useExport,\n} from './export';\n\nexport type {\n ExportOptions,\n ExcelExportOptions,\n ExcelCellStyle,\n ExportData,\n UseExportOptions,\n UseExportResult,\n} from './export';\n\n// ============================================================================\n// Dashboard\n// ============================================================================\n\nexport {\n // Main components\n Dashboard,\n DashboardProvider,\n DashboardLayoutComponent,\n // Widget components\n Widget,\n WidgetHeader,\n WidgetContent,\n // Filter components\n FilterBar,\n DateRangeFilter,\n SelectFilter,\n MultiSelectFilter,\n TextFilter,\n // Editor components\n DashboardEditor,\n EditorToolbar,\n WidgetPalette,\n WidgetEditor,\n // List components\n DashboardList,\n DashboardCard,\n DashboardDialog,\n // Hooks\n useDashboard,\n useDashboardFilters,\n useWidget,\n useAutoRefresh,\n useFullscreen,\n // Context\n DashboardContext,\n} from './dashboard';\n\nexport type {\n // Widget types\n WidgetType,\n WidgetPosition,\n WidgetConfig,\n WidgetDefinition,\n // Filter types\n DashboardFilterType,\n FilterOption,\n DashboardFilter,\n FilterValue,\n DateRangeValue,\n NumberRangeValue,\n // Dashboard types\n DashboardLayout,\n DashboardDefinition,\n // Context types\n DashboardContextValue,\n DashboardEditorContextValue,\n // Component props\n DashboardProviderProps,\n DashboardProps,\n DashboardEditorProps,\n DashboardLayoutProps,\n WidgetProps,\n WidgetHeaderProps,\n FilterBarProps,\n DateRangeFilterProps,\n SelectFilterProps,\n MultiSelectFilterProps,\n TextFilterProps,\n WidgetPaletteProps,\n WidgetEditorProps,\n WidgetContentProps,\n EditorToolbarProps,\n // List component props\n DashboardListProps,\n DashboardCardProps,\n DashboardDialogProps,\n // Hook result types\n UseDashboardFiltersResult,\n UseWidgetResult,\n UseAutoRefreshOptions,\n UseAutoRefreshResult,\n UseFullscreenResult,\n} from './dashboard';\n\n// ============================================================================\n// Accessibility Utilities\n// ============================================================================\n\nexport {\n useFocusTrap,\n useArrowNavigation,\n useRovingTabIndex,\n useFocusVisible,\n announceToScreenReader,\n focusVisibleStyles,\n skipLinkStyles,\n skipLinkFocusStyles,\n} from './utils';\n\nexport type {\n FocusTrapOptions,\n ArrowNavigationOptions,\n UseFocusTrapResult,\n UseArrowNavigationResult,\n SkipLinkProps,\n} from './utils';\n\n// ============================================================================\n// SSR Utilities\n// ============================================================================\n\nexport {\n useIsClient,\n ClientOnly,\n getWindowWidth,\n getWindowHeight,\n isBrowser,\n isServer,\n getLocalStorage,\n setLocalStorage,\n removeLocalStorage,\n useWindowSize,\n useMediaQuery,\n useBreakpoint,\n useIsBreakpoint,\n BREAKPOINTS,\n} from './ssr';\n\nexport type {\n ClientOnlyProps,\n WindowSize,\n Breakpoint,\n} from './ssr';\n\n// ============================================================================\n// Pin Components\n// ============================================================================\n\nexport {\n PinButton,\n PinMenu,\n PinnedDashboardList,\n PinnedDashboardView,\n} from './pins';\n\nexport type {\n PinButtonProps,\n PinMenuProps,\n PinContextOption,\n PinnedDashboardListProps,\n PinnedDashboardItemActions,\n PinnedDashboardViewProps,\n} from './pins';\n\n// ============================================================================\n// Version\n// ============================================================================\n\nexport const VERSION = '0.1.0';\n"]}
1
+ {"version":3,"sources":["../src/pins/PinButton.tsx","../src/pins/PinMenu.tsx","../src/pins/PinnedDashboardList.tsx","../src/pins/PinnedDashboardView.tsx","../src/index.ts"],"names":["errorStyles","PinIcon","jsxs","jsx","useState","useCallback","error","UnpinIcon","containerStyles","titleStyles","unpinButtonStyles","contentStyles","errorBannerStyles"],"mappings":"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","file":"index.js","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"]}
@@ -54,6 +54,19 @@ interface DatabaseSchema {
54
54
  /** Foreign key relationships between tables. */
55
55
  relationships: Relationship[];
56
56
  }
57
+ /**
58
+ * Metadata for a data source (table/view) including display name and description.
59
+ */
60
+ interface DataSourceMeta {
61
+ /** Unique identifier for the data source. */
62
+ id: string;
63
+ /** PostgreSQL table/view name. */
64
+ table: string;
65
+ /** Human-readable display name for the UI. */
66
+ title: string;
67
+ /** Description or subtitle explaining the data source. */
68
+ subtitle: string;
69
+ }
57
70
  /**
58
71
  * A table reference in a query.
59
72
  */
@@ -106,6 +119,8 @@ interface ColumnSelection {
106
119
  alias?: string;
107
120
  /** Date truncation unit for date/timestamp columns. */
108
121
  date_trunc?: DateTruncInterval;
122
+ /** Date format string for formatting date values in output. */
123
+ date_format?: string;
109
124
  }
110
125
  /**
111
126
  * SQL filter operators.
@@ -534,6 +549,49 @@ interface SQLValidationResult {
534
549
  /** List of tables referenced in the query. */
535
550
  tables: string[];
536
551
  }
552
+ /**
553
+ * Chat message roles.
554
+ */
555
+ type ChatRole = 'user' | 'assistant' | 'system' | 'tool';
556
+ /**
557
+ * A chat message in a conversation.
558
+ */
559
+ interface ChatMessage {
560
+ /** Role of the message sender. */
561
+ role: ChatRole;
562
+ /** Text content of the message. */
563
+ content: string;
564
+ /** Tool call ID (for tool responses). */
565
+ tool_call_id?: string;
566
+ }
567
+ /**
568
+ * Types of streaming chunks from the LLM agent.
569
+ */
570
+ type StreamChunkType = 'text' | 'sql' | 'tool_call' | 'tool_result' | 'error' | 'done';
571
+ /**
572
+ * A single chunk in a streaming LLM response.
573
+ */
574
+ interface StreamChunk {
575
+ /** Type of this chunk. */
576
+ type: StreamChunkType;
577
+ /** Text content (for text/sql/error chunks). */
578
+ content?: string;
579
+ /** Tool name (for tool_call/tool_result chunks). */
580
+ tool_name?: string;
581
+ /** Tool arguments (for tool_call chunks). */
582
+ tool_args?: Record<string, unknown>;
583
+ }
584
+ /**
585
+ * LLM agent status response.
586
+ */
587
+ interface LLMStatus {
588
+ /** Whether the LLM agent is enabled. */
589
+ enabled: boolean;
590
+ /** LLM provider name (e.g., 'gemini'). */
591
+ provider?: string;
592
+ /** Model being used (e.g., 'gemini-2.0-flash'). */
593
+ model?: string;
594
+ }
537
595
  /**
538
596
  * A pinned dashboard entry.
539
597
  */
@@ -566,4 +624,4 @@ interface DashboardPinContextsResponse {
566
624
  contexts: string[];
567
625
  }
568
626
 
569
- export type { AggregationType as A, CalculatedField as C, DatabaseSchema as D, ExecuteSQLRequest as E, FilterOperator as F, GroupByDefinition as G, JoinDefinition as J, PinnedDashboard as P, QueryResult as Q, Relationship as R, SQLValidationResult as S, TimeSeriesConfig as T, ValidationResult as V, WidgetCreate as W, QueryDefinition as a, QueryTable as b, TableSchema as c, Dashboard as d, DashboardCreate as e, DashboardUpdate as f, Widget as g, WidgetUpdate as h, WidgetPositionUpdate as i, SavedQuery as j, SavedQueryCreate as k, SavedQueryUpdate as l, PinnedDashboardsResponse as m, WidgetPosition as n, ColumnSchema as o, JoinType as p, ColumnSelection as q, FilterDefinition as r, SortDirection as s, SortDefinition as t, DashboardPinContextsResponse as u };
627
+ export type { AggregationType as A, CalculatedField as C, DatabaseSchema as D, ExecuteSQLRequest as E, FilterDefinition as F, GroupByDefinition as G, JoinDefinition as J, LLMStatus as L, PinnedDashboard as P, QueryResult as Q, Relationship as R, SQLValidationResult as S, TimeSeriesConfig as T, ValidationResult as V, WidgetCreate as W, QueryDefinition as a, QueryTable as b, TableSchema as c, DataSourceMeta as d, Dashboard as e, DashboardCreate as f, DashboardUpdate as g, Widget as h, WidgetUpdate as i, WidgetPositionUpdate as j, SavedQuery as k, SavedQueryCreate as l, SavedQueryUpdate as m, PinnedDashboardsResponse as n, ChatMessage as o, StreamChunk as p, WidgetPosition as q, ChatRole as r, ColumnSchema as s, ColumnSelection as t, DashboardPinContextsResponse as u, FilterOperator as v, JoinType as w, SortDefinition as x, SortDirection as y, StreamChunkType as z };
@@ -54,6 +54,19 @@ interface DatabaseSchema {
54
54
  /** Foreign key relationships between tables. */
55
55
  relationships: Relationship[];
56
56
  }
57
+ /**
58
+ * Metadata for a data source (table/view) including display name and description.
59
+ */
60
+ interface DataSourceMeta {
61
+ /** Unique identifier for the data source. */
62
+ id: string;
63
+ /** PostgreSQL table/view name. */
64
+ table: string;
65
+ /** Human-readable display name for the UI. */
66
+ title: string;
67
+ /** Description or subtitle explaining the data source. */
68
+ subtitle: string;
69
+ }
57
70
  /**
58
71
  * A table reference in a query.
59
72
  */
@@ -106,6 +119,8 @@ interface ColumnSelection {
106
119
  alias?: string;
107
120
  /** Date truncation unit for date/timestamp columns. */
108
121
  date_trunc?: DateTruncInterval;
122
+ /** Date format string for formatting date values in output. */
123
+ date_format?: string;
109
124
  }
110
125
  /**
111
126
  * SQL filter operators.
@@ -534,6 +549,49 @@ interface SQLValidationResult {
534
549
  /** List of tables referenced in the query. */
535
550
  tables: string[];
536
551
  }
552
+ /**
553
+ * Chat message roles.
554
+ */
555
+ type ChatRole = 'user' | 'assistant' | 'system' | 'tool';
556
+ /**
557
+ * A chat message in a conversation.
558
+ */
559
+ interface ChatMessage {
560
+ /** Role of the message sender. */
561
+ role: ChatRole;
562
+ /** Text content of the message. */
563
+ content: string;
564
+ /** Tool call ID (for tool responses). */
565
+ tool_call_id?: string;
566
+ }
567
+ /**
568
+ * Types of streaming chunks from the LLM agent.
569
+ */
570
+ type StreamChunkType = 'text' | 'sql' | 'tool_call' | 'tool_result' | 'error' | 'done';
571
+ /**
572
+ * A single chunk in a streaming LLM response.
573
+ */
574
+ interface StreamChunk {
575
+ /** Type of this chunk. */
576
+ type: StreamChunkType;
577
+ /** Text content (for text/sql/error chunks). */
578
+ content?: string;
579
+ /** Tool name (for tool_call/tool_result chunks). */
580
+ tool_name?: string;
581
+ /** Tool arguments (for tool_call chunks). */
582
+ tool_args?: Record<string, unknown>;
583
+ }
584
+ /**
585
+ * LLM agent status response.
586
+ */
587
+ interface LLMStatus {
588
+ /** Whether the LLM agent is enabled. */
589
+ enabled: boolean;
590
+ /** LLM provider name (e.g., 'gemini'). */
591
+ provider?: string;
592
+ /** Model being used (e.g., 'gemini-2.0-flash'). */
593
+ model?: string;
594
+ }
537
595
  /**
538
596
  * A pinned dashboard entry.
539
597
  */
@@ -566,4 +624,4 @@ interface DashboardPinContextsResponse {
566
624
  contexts: string[];
567
625
  }
568
626
 
569
- export type { AggregationType as A, CalculatedField as C, DatabaseSchema as D, ExecuteSQLRequest as E, FilterOperator as F, GroupByDefinition as G, JoinDefinition as J, PinnedDashboard as P, QueryResult as Q, Relationship as R, SQLValidationResult as S, TimeSeriesConfig as T, ValidationResult as V, WidgetCreate as W, QueryDefinition as a, QueryTable as b, TableSchema as c, Dashboard as d, DashboardCreate as e, DashboardUpdate as f, Widget as g, WidgetUpdate as h, WidgetPositionUpdate as i, SavedQuery as j, SavedQueryCreate as k, SavedQueryUpdate as l, PinnedDashboardsResponse as m, WidgetPosition as n, ColumnSchema as o, JoinType as p, ColumnSelection as q, FilterDefinition as r, SortDirection as s, SortDefinition as t, DashboardPinContextsResponse as u };
627
+ export type { AggregationType as A, CalculatedField as C, DatabaseSchema as D, ExecuteSQLRequest as E, FilterDefinition as F, GroupByDefinition as G, JoinDefinition as J, LLMStatus as L, PinnedDashboard as P, QueryResult as Q, Relationship as R, SQLValidationResult as S, TimeSeriesConfig as T, ValidationResult as V, WidgetCreate as W, QueryDefinition as a, QueryTable as b, TableSchema as c, DataSourceMeta as d, Dashboard as e, DashboardCreate as f, DashboardUpdate as g, Widget as h, WidgetUpdate as i, WidgetPositionUpdate as j, SavedQuery as k, SavedQueryCreate as l, SavedQueryUpdate as m, PinnedDashboardsResponse as n, ChatMessage as o, StreamChunk as p, WidgetPosition as q, ChatRole as r, ColumnSchema as s, ColumnSelection as t, DashboardPinContextsResponse as u, FilterOperator as v, JoinType as w, SortDefinition as x, SortDirection as y, StreamChunkType as z };