@sqlrooms/ui 0.29.0-rc.0 → 0.29.0-rc.10

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 (114) hide show
  1. package/LICENSE.md +2 -1
  2. package/README.md +98 -4
  3. package/dist/components/accordion.d.ts +2 -2
  4. package/dist/components/accordion.d.ts.map +1 -1
  5. package/dist/components/accordion.js +3 -3
  6. package/dist/components/accordion.js.map +1 -1
  7. package/dist/components/alert.js +1 -1
  8. package/dist/components/alert.js.map +1 -1
  9. package/dist/components/card.js +1 -1
  10. package/dist/components/card.js.map +1 -1
  11. package/dist/components/combobox.d.ts +67 -1
  12. package/dist/components/combobox.d.ts.map +1 -1
  13. package/dist/components/combobox.js +58 -32
  14. package/dist/components/combobox.js.map +1 -1
  15. package/dist/components/editable-text.d.ts +2 -1
  16. package/dist/components/editable-text.d.ts.map +1 -1
  17. package/dist/components/editable-text.js +38 -11
  18. package/dist/components/editable-text.js.map +1 -1
  19. package/dist/components/error-pane.d.ts.map +1 -1
  20. package/dist/components/error-pane.js +2 -2
  21. package/dist/components/error-pane.js.map +1 -1
  22. package/dist/components/hover-card.d.ts +7 -0
  23. package/dist/components/hover-card.d.ts.map +1 -0
  24. package/dist/components/hover-card.js +15 -0
  25. package/dist/components/hover-card.js.map +1 -0
  26. package/dist/components/modifier-scroll-overlay.d.ts +16 -0
  27. package/dist/components/modifier-scroll-overlay.d.ts.map +1 -0
  28. package/dist/components/modifier-scroll-overlay.js +31 -0
  29. package/dist/components/modifier-scroll-overlay.js.map +1 -0
  30. package/dist/components/progress-modal.d.ts +2 -0
  31. package/dist/components/progress-modal.d.ts.map +1 -1
  32. package/dist/components/progress-modal.js +2 -2
  33. package/dist/components/progress-modal.js.map +1 -1
  34. package/dist/components/progress.d.ts.map +1 -1
  35. package/dist/components/progress.js.map +1 -1
  36. package/dist/components/resizable.d.ts +302 -20
  37. package/dist/components/resizable.d.ts.map +1 -1
  38. package/dist/components/resizable.js +12 -5
  39. package/dist/components/resizable.js.map +1 -1
  40. package/dist/components/run-button.d.ts +19 -0
  41. package/dist/components/run-button.d.ts.map +1 -0
  42. package/dist/components/run-button.js +17 -0
  43. package/dist/components/run-button.js.map +1 -0
  44. package/dist/components/settings-panel-header.d.ts +16 -0
  45. package/dist/components/settings-panel-header.d.ts.map +1 -0
  46. package/dist/components/settings-panel-header.js +9 -0
  47. package/dist/components/settings-panel-header.js.map +1 -0
  48. package/dist/components/sidebar.d.ts +3 -2
  49. package/dist/components/sidebar.d.ts.map +1 -1
  50. package/dist/components/sidebar.js +16 -12
  51. package/dist/components/sidebar.js.map +1 -1
  52. package/dist/components/sonner.d.ts +4 -0
  53. package/dist/components/sonner.d.ts.map +1 -0
  54. package/dist/components/sonner.js +37 -0
  55. package/dist/components/sonner.js.map +1 -0
  56. package/dist/components/switch.d.ts +5 -1
  57. package/dist/components/switch.d.ts.map +1 -1
  58. package/dist/components/switch.js +7 -2
  59. package/dist/components/switch.js.map +1 -1
  60. package/dist/components/tab-strip.d.ts +27 -7
  61. package/dist/components/tab-strip.d.ts.map +1 -1
  62. package/dist/components/tab-strip.js +165 -26
  63. package/dist/components/tab-strip.js.map +1 -1
  64. package/dist/components/textarea.d.ts +3 -0
  65. package/dist/components/textarea.d.ts.map +1 -1
  66. package/dist/components/textarea.js +87 -11
  67. package/dist/components/textarea.js.map +1 -1
  68. package/dist/components/theme-switch.d.ts.map +1 -1
  69. package/dist/components/theme-switch.js +3 -3
  70. package/dist/components/theme-switch.js.map +1 -1
  71. package/dist/components/tree.d.ts.map +1 -1
  72. package/dist/components/tree.js +4 -3
  73. package/dist/components/tree.js.map +1 -1
  74. package/dist/hooks/use-mobile.d.ts.map +1 -1
  75. package/dist/hooks/use-mobile.js +1 -0
  76. package/dist/hooks/use-mobile.js.map +1 -1
  77. package/dist/hooks/useCombobox.d.ts +33 -0
  78. package/dist/hooks/useCombobox.d.ts.map +1 -0
  79. package/dist/hooks/useCombobox.js +30 -0
  80. package/dist/hooks/useCombobox.js.map +1 -0
  81. package/dist/hooks/useDebounce.d.ts +33 -0
  82. package/dist/hooks/useDebounce.d.ts.map +1 -0
  83. package/dist/hooks/useDebounce.js +45 -0
  84. package/dist/hooks/useDebounce.js.map +1 -0
  85. package/dist/hooks/useDebouncedCallback.d.ts +45 -0
  86. package/dist/hooks/useDebouncedCallback.d.ts.map +1 -0
  87. package/dist/hooks/useDebouncedCallback.js +70 -0
  88. package/dist/hooks/useDebouncedCallback.js.map +1 -0
  89. package/dist/hooks/useDebouncedValue.d.ts +23 -0
  90. package/dist/hooks/useDebouncedValue.d.ts.map +1 -0
  91. package/dist/hooks/useDebouncedValue.js +41 -0
  92. package/dist/hooks/useDebouncedValue.js.map +1 -0
  93. package/dist/index.d.ts +36 -29
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +34 -28
  96. package/dist/index.js.map +1 -1
  97. package/dist/theme/theme-provider.d.ts +22 -1
  98. package/dist/theme/theme-provider.d.ts.map +1 -1
  99. package/dist/theme/theme-provider.js +59 -20
  100. package/dist/theme/theme-provider.js.map +1 -1
  101. package/package.json +16 -16
  102. package/tailwind-preset.css +78 -0
  103. package/dist/components/toast.d.ts +0 -16
  104. package/dist/components/toast.d.ts.map +0 -1
  105. package/dist/components/toast.js +0 -35
  106. package/dist/components/toast.js.map +0 -1
  107. package/dist/components/toaster.d.ts +0 -3
  108. package/dist/components/toaster.d.ts.map +0 -1
  109. package/dist/components/toaster.js +0 -24
  110. package/dist/components/toaster.js.map +0 -1
  111. package/dist/hooks/use-toast.d.ts +0 -45
  112. package/dist/hooks/use-toast.d.ts.map +0 -1
  113. package/dist/hooks/use-toast.js +0 -129
  114. package/dist/hooks/use-toast.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"editable-text.js","sourceRoot":"","sources":["../../src/components/editable-text.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {ChangeEvent, FC, useCallback, useEffect, useRef, useState} from 'react';\n\nimport {cn} from '../lib/utils';\nimport {Input} from './input';\n\n/**\n * Component that allows the user to edit a string.\n *\n * The editing mode can be controlled (the mode is managed by the parent component)\n * or uncontrolled (managed by the component itself).\n *\n * Controlled mode example:\n * ```\n * const [text, setText] = useState('');\n * const [isEditing, setEditing] = useState(false);\n * ...\n * <EditableText\n * value={text}\n * onChange={setText}\n * isEditing={isEditing}\n * onEditingChange={setEditing}\n * />\n * ```\n *\n * Uncontrolled mode example:\n * ```\n * const [text, setText] = useState('');\n * ...\n * <EditableText\n * value={text}\n * onChange={setText}\n * defaultEditing={false}\n * />\n * ```\n */\n\nexport const EditableText: FC<{\n className?: string;\n isReadOnly?: boolean;\n editTrigger?: 'click' | 'doubleClick';\n value: string;\n placeholder?: string;\n onChange: (text: string) => void;\n /** Called on each keystroke while editing. */\n onInputChange?: (text: string) => void;\n autoFocus?: boolean;\n selectOnFocus?: boolean;\n /** When false, the input is removed from tab order while not editing. */\n allowTabFocusWhenNotEditing?: boolean;\n\n /**\n * The editing state when it is initially rendered. Use when you do not need to control its editing state\n * in the parent component.\n **/\n defaultEditing?: boolean;\n\n /**\n * The controlled editing state of the component. Must be used in conjunction with onEditingChange.\n **/\n isEditing?: boolean;\n onEditingChange?: (isEditing: boolean) => void;\n}> = ({\n className,\n isReadOnly = false,\n defaultEditing = false,\n editTrigger = 'click',\n isEditing,\n placeholder,\n value,\n onChange,\n onInputChange,\n onEditingChange,\n autoFocus,\n selectOnFocus = false,\n allowTabFocusWhenNotEditing = true,\n}) => {\n const [isInternalEditing, setInternalIsEditing] = useState(defaultEditing);\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(internalValue);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n // Keep internalValue in sync with value prop\n /* eslint-disable react-hooks/set-state-in-effect */\n useEffect(() => {\n if (value !== internalValueRef.current) {\n setInternalValue(value);\n }\n }, [value]);\n\n // Keep internal editing state in sync with controlled isEditing prop\n // and focus the input when editing is enabled\n useEffect(() => {\n if (isEditing !== undefined && isEditing !== isInternalEditing) {\n setInternalIsEditing(Boolean(isEditing));\n if (isEditing) {\n // When enabling editing from a dropdown menu, there will be a blur event when the dropdown closes,\n // so we need to wait a bit before making sure the input is focused and selected.\n const timeoutId = setTimeout(() => {\n inputRef.current?.focus();\n if (selectOnFocus) {\n inputRef.current?.select();\n }\n }, 200);\n return () => clearTimeout(timeoutId);\n }\n }\n return undefined;\n }, [isEditing, isInternalEditing, selectOnFocus]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n const handleSetValue = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (isReadOnly || !isInternalEditing) {\n return;\n }\n const nextValue = e.target.value;\n onInputChange?.(nextValue);\n return setInternalValue(nextValue);\n },\n [isInternalEditing, isReadOnly, onInputChange],\n );\n\n const handleSetEditing = useCallback(\n (nextIsEditing: boolean) => {\n if (isReadOnly) {\n return;\n }\n setInternalIsEditing(nextIsEditing);\n onEditingChange?.(nextIsEditing);\n },\n [isReadOnly, onEditingChange],\n );\n\n const handleBlur = useCallback(() => {\n handleSetEditing(false);\n onChange(internalValueRef.current?.trim());\n }, [handleSetEditing, onChange]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLInputElement>) => {\n if (!isInternalEditing) {\n inputRef.current?.select();\n handleSetEditing(true);\n }\n },\n [isInternalEditing, handleSetEditing],\n );\n\n const handleFocus = useCallback(() => {\n if (selectOnFocus && isInternalEditing) {\n inputRef.current?.select();\n }\n }, [isInternalEditing, selectOnFocus]);\n\n useEffect(() => {\n if (!isInternalEditing) return;\n let rafId = requestAnimationFrame(() => {\n rafId = requestAnimationFrame(() => {\n inputRef.current?.focus();\n if (selectOnFocus) {\n inputRef.current?.select();\n }\n });\n });\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, [isInternalEditing, selectOnFocus]);\n\n // Add keydown event listener to handle enter key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'Escape':\n // Reset the internal value to the original value\n setInternalValue(value);\n internalValueRef.current = value;\n handleSetEditing(false);\n inputRef.current?.blur();\n break;\n case 'Enter':\n handleSetEditing(false);\n onChange(internalValueRef.current.trim());\n inputRef.current?.blur();\n break;\n }\n };\n if (isInternalEditing) {\n document.addEventListener('keydown', handleKeyDown);\n }\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isInternalEditing, onChange, handleSetEditing, value]);\n\n return (\n <Input\n ref={inputRef}\n className={cn(\n 'w-full rounded-sm border-transparent px-1 py-0 disabled:opacity-1',\n 'focus:outline-hidden disabled:cursor-text',\n {\n 'focus:border-blue-500 focus:ring-blue-500': isInternalEditing,\n 'bg-transparent select-none': !isInternalEditing,\n truncate: !isInternalEditing,\n },\n className,\n )}\n style={{\n caretColor: isInternalEditing ? undefined : 'transparent',\n }}\n value={internalValue}\n tabIndex={isInternalEditing || allowTabFocusWhenNotEditing ? 0 : -1}\n autoFocus={autoFocus}\n onChange={handleSetValue}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={isReadOnly}\n onClick={editTrigger === 'click' ? handleClick : undefined}\n onDoubleClick={editTrigger === 'doubleClick' ? handleClick : undefined}\n placeholder={\n !isInternalEditing ? (placeholder ?? 'Click to edit') : undefined\n }\n />\n );\n};\n"]}
1
+ {"version":3,"file":"editable-text.js","sourceRoot":"","sources":["../../src/components/editable-text.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {\n ChangeEvent,\n CSSProperties,\n FC,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {cn} from '../lib/utils';\nimport {Input} from './input';\n\n/**\n * Component that allows the user to edit a string.\n *\n * The editing mode can be controlled (the mode is managed by the parent component)\n * or uncontrolled (managed by the component itself).\n *\n * Controlled mode example:\n * ```\n * const [text, setText] = useState('');\n * const [isEditing, setEditing] = useState(false);\n * ...\n * <EditableText\n * value={text}\n * onChange={setText}\n * isEditing={isEditing}\n * onEditingChange={setEditing}\n * />\n * ```\n *\n * Uncontrolled mode example:\n * ```\n * const [text, setText] = useState('');\n * ...\n * <EditableText\n * value={text}\n * onChange={setText}\n * defaultEditing={false}\n * />\n * ```\n */\n\nexport const EditableText: FC<{\n className?: string;\n style?: CSSProperties;\n isReadOnly?: boolean;\n editTrigger?: 'click' | 'doubleClick';\n value: string;\n placeholder?: string;\n onChange: (text: string) => void;\n /** Called on each keystroke while editing. */\n onInputChange?: (text: string) => void;\n autoFocus?: boolean;\n selectOnFocus?: boolean;\n /** When false, the input is removed from tab order while not editing. */\n allowTabFocusWhenNotEditing?: boolean;\n\n /**\n * The editing state when it is initially rendered. Use when you do not need to control its editing state\n * in the parent component.\n **/\n defaultEditing?: boolean;\n\n /**\n * The controlled editing state of the component. Must be used in conjunction with onEditingChange.\n **/\n isEditing?: boolean;\n onEditingChange?: (isEditing: boolean) => void;\n}> = ({\n className,\n style,\n isReadOnly = false,\n defaultEditing = false,\n editTrigger = 'click',\n isEditing,\n placeholder,\n value,\n onChange,\n onInputChange,\n onEditingChange,\n autoFocus,\n selectOnFocus = false,\n allowTabFocusWhenNotEditing = true,\n}) => {\n const [isInternalEditing, setInternalIsEditing] = useState(defaultEditing);\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(internalValue);\n const valueRef = useRef(value);\n const skipBlurHandlerRef = useRef(false);\n\n // Keep valueRef in sync\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n // Keep internalValue in sync with value prop\n /* eslint-disable react-hooks/set-state-in-effect */\n useEffect(() => {\n if (value !== internalValueRef.current) {\n setInternalValue(value);\n }\n }, [value]);\n\n // Keep internal editing state in sync with controlled isEditing prop\n // and focus the input when editing is enabled\n useEffect(() => {\n if (isEditing !== undefined && isEditing !== isInternalEditing) {\n setInternalIsEditing(Boolean(isEditing));\n if (isEditing) {\n // When enabling editing from a dropdown menu, there will be a blur event when the dropdown closes,\n // so we need to wait a bit before making sure the input is focused and selected.\n const timeoutId = setTimeout(() => {\n inputRef.current?.focus();\n if (selectOnFocus) {\n inputRef.current?.select();\n }\n }, 200);\n return () => clearTimeout(timeoutId);\n }\n }\n return undefined;\n }, [isEditing, isInternalEditing, selectOnFocus]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n const handleSetValue = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (isReadOnly || !isInternalEditing) {\n return;\n }\n const nextValue = e.target.value;\n onInputChange?.(nextValue);\n return setInternalValue(nextValue);\n },\n [isInternalEditing, isReadOnly, onInputChange],\n );\n\n const handleSetEditing = useCallback(\n (nextIsEditing: boolean) => {\n if (isReadOnly) {\n return;\n }\n setInternalIsEditing(nextIsEditing);\n onEditingChange?.(nextIsEditing);\n },\n [isReadOnly, onEditingChange],\n );\n\n const handleBlur = useCallback(() => {\n // Skip if blur was triggered by Enter/Escape key\n if (skipBlurHandlerRef.current) {\n skipBlurHandlerRef.current = false;\n return;\n }\n\n const trimmedValue = internalValueRef.current?.trim();\n onChange(trimmedValue);\n\n // After onChange, sync internal value back to the prop\n // If parent rejected the change, value prop stays the same and we reset\n // If parent accepted the change, value prop updates and we sync to it\n setInternalValue(valueRef.current);\n internalValueRef.current = valueRef.current;\n\n handleSetEditing(false);\n }, [handleSetEditing, onChange]);\n\n const handleClick = useCallback(() => {\n if (!isInternalEditing) {\n inputRef.current?.select();\n handleSetEditing(true);\n }\n }, [isInternalEditing, handleSetEditing]);\n\n const handleFocus = useCallback(() => {\n if (selectOnFocus && isInternalEditing) {\n inputRef.current?.select();\n }\n }, [isInternalEditing, selectOnFocus]);\n\n useEffect(() => {\n if (!isInternalEditing) return;\n let rafId = requestAnimationFrame(() => {\n rafId = requestAnimationFrame(() => {\n inputRef.current?.focus();\n if (selectOnFocus) {\n inputRef.current?.select();\n }\n });\n });\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, [isInternalEditing, selectOnFocus]);\n\n // Add keydown event listener to handle enter key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'Escape':\n // Reset the internal value to the prop value\n setInternalValue(valueRef.current);\n internalValueRef.current = valueRef.current;\n handleSetEditing(false);\n skipBlurHandlerRef.current = true;\n inputRef.current?.blur();\n break;\n case 'Enter': {\n const trimmedValue = internalValueRef.current.trim();\n onChange(trimmedValue);\n\n // After onChange, sync internal value back to the prop\n // If parent rejected the change, value prop stays the same and we reset\n // If parent accepted the change, value prop updates and we sync to it\n setInternalValue(valueRef.current);\n internalValueRef.current = valueRef.current;\n\n handleSetEditing(false);\n skipBlurHandlerRef.current = true;\n inputRef.current?.blur();\n break;\n }\n }\n };\n if (isInternalEditing) {\n document.addEventListener('keydown', handleKeyDown);\n }\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isInternalEditing, onChange, handleSetEditing]);\n\n return (\n <Input\n ref={inputRef}\n className={cn(\n 'w-full rounded-sm border-transparent px-1 py-0 disabled:opacity-1',\n 'focus:outline-hidden disabled:cursor-text',\n {\n 'focus:border-blue-500 focus:ring-blue-500': isInternalEditing,\n 'bg-transparent select-none': !isInternalEditing,\n truncate: !isInternalEditing,\n },\n className,\n )}\n style={{\n ...(style ?? {}),\n caretColor: isInternalEditing ? style?.caretColor : 'transparent',\n }}\n value={internalValue}\n tabIndex={isInternalEditing || allowTabFocusWhenNotEditing ? 0 : -1}\n autoFocus={autoFocus}\n onChange={handleSetValue}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={isReadOnly}\n onClick={editTrigger === 'click' ? handleClick : undefined}\n onDoubleClick={editTrigger === 'doubleClick' ? handleClick : undefined}\n placeholder={\n !isInternalEditing ? (placeholder ?? 'Click to edit') : undefined\n }\n />\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"error-pane.d.ts","sourceRoot":"","sources":["../../src/components/error-pane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,UAAU,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,QAAA,MAAM,SAAS,uFA6Dd,CAAC;AAIF,OAAO,EAAC,SAAS,EAAC,CAAC"}
1
+ {"version":3,"file":"error-pane.d.ts","sourceRoot":"","sources":["../../src/components/error-pane.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,UAAU,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,QAAA,MAAM,SAAS,uFA6Dd,CAAC;AAIF,OAAO,EAAC,SAAS,EAAC,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Alert, AlertDescription, AlertTitle } from './alert';
3
2
  import { RotateCcwIcon, TriangleAlertIcon } from 'lucide-react';
4
3
  import * as React from 'react';
5
4
  import { cn } from '../lib/utils';
5
+ import { Alert, AlertDescription, AlertTitle } from './alert';
6
6
  import { Button } from './button';
7
7
  const ErrorPane = React.forwardRef(({ className, embed, title = 'Something went wrong', text = `We are sorry, but something unexpected happened.`, onRetry, actions = false, onGoToStart, ...props }, ref) => {
8
- return (_jsx("div", { ref: ref, className: cn('flex justify-center', className), ...props, children: _jsxs(Alert, { variant: "destructive", className: cn('flex min-h-[200px] max-w-[450px] flex-col items-center justify-center rounded-lg border-none px-6 py-6 text-center', !embed && 'min-w-[350px]'), children: [_jsx("div", { className: "mb-4", children: _jsx(TriangleAlertIcon, { className: "text-destructive h-8 w-8" }) }), _jsx(AlertTitle, { className: "text-foreground mb-1 text-xl", children: title }), _jsxs(AlertDescription, { className: "text-foreground mt-3 max-w-sm px-2", children: [_jsx("p", { className: "mb-5 text-left", children: text }), actions && (_jsx("div", { className: "mb-3 mt-6", children: _jsxs("div", { className: "flex justify-center gap-2", children: [onRetry && (_jsxs(Button, { size: "sm", onClick: onRetry, className: "inline-flex items-center", children: [_jsx(RotateCcwIcon, { className: "mr-2 h-4 w-4" }), "Retry"] })), !embed && onGoToStart && (_jsx(Button, { size: "sm", onClick: onGoToStart, children: "Go to start page" }))] }) }))] })] }) }));
8
+ return (_jsx("div", { ref: ref, className: cn('flex w-full justify-center', className), ...props, children: _jsxs(Alert, { variant: "destructive", className: cn('flex min-h-[200px] max-w-[450px] flex-col items-center justify-center rounded-lg border-none px-6 py-6 text-center', !embed && 'min-w-[350px]'), children: [_jsx("div", { className: "mb-4", children: _jsx(TriangleAlertIcon, { className: "text-destructive h-8 w-8" }) }), _jsx(AlertTitle, { className: "text-foreground mb-1 text-xl", children: title }), _jsxs(AlertDescription, { className: "text-foreground mt-3 max-w-sm px-2", children: [_jsx("p", { className: "mb-5 text-left", children: text }), actions && (_jsx("div", { className: "mt-6 mb-3", children: _jsxs("div", { className: "flex justify-center gap-2", children: [onRetry && (_jsxs(Button, { size: "sm", onClick: onRetry, className: "inline-flex items-center", children: [_jsx(RotateCcwIcon, { className: "mr-2 h-4 w-4" }), "Retry"] })), !embed && onGoToStart && (_jsx(Button, { size: "sm", onClick: onGoToStart, children: "Go to start page" }))] }) }))] })] }) }));
9
9
  });
10
10
  ErrorPane.displayName = 'ErrorPane';
11
11
  export { ErrorPane };
@@ -1 +1 @@
1
- {"version":3,"file":"error-pane.js","sourceRoot":"","sources":["../../src/components/error-pane.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAChC,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAYhC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAChC,CACE,EACE,SAAS,EACT,KAAK,EACL,KAAK,GAAG,sBAAsB,EAC9B,IAAI,GAAG,kDAAkD,EACzD,OAAO,EACP,OAAO,GAAG,KAAK,EACf,WAAW,EACX,GAAG,KAAK,EACT,EACD,GAAG,EACH,EAAE;IACF,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,KAC3C,KAAK,YAET,MAAC,KAAK,IACJ,OAAO,EAAC,aAAa,EACrB,SAAS,EAAE,EAAE,CACX,oHAAoH,EACpH,CAAC,KAAK,IAAI,eAAe,CAC1B,aAED,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,iBAAiB,IAAC,SAAS,EAAC,0BAA0B,GAAG,GACtD,EACN,KAAC,UAAU,IAAC,SAAS,EAAC,8BAA8B,YACjD,KAAK,GACK,EACb,MAAC,gBAAgB,IAAC,SAAS,EAAC,oCAAoC,aAC9D,YAAG,SAAS,EAAC,gBAAgB,YAAE,IAAI,GAAK,EACvC,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,WAAW,YACxB,eAAK,SAAS,EAAC,2BAA2B,aACvC,OAAO,IAAI,CACV,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,0BAA0B,aAEpC,KAAC,aAAa,IAAC,SAAS,EAAC,cAAc,GAAG,aAEnC,CACV,EACA,CAAC,KAAK,IAAI,WAAW,IAAI,CACxB,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,WAAW,iCAE7B,CACV,IACG,GACF,CACP,IACgB,IACb,GACJ,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,OAAO,EAAC,SAAS,EAAC,CAAC","sourcesContent":["import {Alert, AlertDescription, AlertTitle} from './alert';\nimport {RotateCcwIcon, TriangleAlertIcon} from 'lucide-react';\nimport * as React from 'react';\nimport {cn} from '../lib/utils';\nimport {Button} from './button';\n\ninterface ErrorPaneProps extends React.HTMLAttributes<HTMLDivElement> {\n embed?: boolean;\n error?: string | Error | unknown;\n title?: string;\n text?: string;\n onRetry?: () => void;\n onGoToStart?: () => void;\n actions?: boolean;\n}\n\nconst ErrorPane = React.forwardRef<HTMLDivElement, ErrorPaneProps>(\n (\n {\n className,\n embed,\n title = 'Something went wrong',\n text = `We are sorry, but something unexpected happened.`,\n onRetry,\n actions = false,\n onGoToStart,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn('flex justify-center', className)}\n {...props}\n >\n <Alert\n variant=\"destructive\"\n className={cn(\n 'flex min-h-[200px] max-w-[450px] flex-col items-center justify-center rounded-lg border-none px-6 py-6 text-center',\n !embed && 'min-w-[350px]',\n )}\n >\n <div className=\"mb-4\">\n <TriangleAlertIcon className=\"text-destructive h-8 w-8\" />\n </div>\n <AlertTitle className=\"text-foreground mb-1 text-xl\">\n {title}\n </AlertTitle>\n <AlertDescription className=\"text-foreground mt-3 max-w-sm px-2\">\n <p className=\"mb-5 text-left\">{text}</p>\n {actions && (\n <div className=\"mb-3 mt-6\">\n <div className=\"flex justify-center gap-2\">\n {onRetry && (\n <Button\n size=\"sm\"\n onClick={onRetry}\n className=\"inline-flex items-center\"\n >\n <RotateCcwIcon className=\"mr-2 h-4 w-4\" />\n Retry\n </Button>\n )}\n {!embed && onGoToStart && (\n <Button size=\"sm\" onClick={onGoToStart}>\n Go to start page\n </Button>\n )}\n </div>\n </div>\n )}\n </AlertDescription>\n </Alert>\n </div>\n );\n },\n);\n\nErrorPane.displayName = 'ErrorPane';\n\nexport {ErrorPane};\n"]}
1
+ {"version":3,"file":"error-pane.js","sourceRoot":"","sources":["../../src/components/error-pane.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAE,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAChC,OAAO,EAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAC,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAYhC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAChC,CACE,EACE,SAAS,EACT,KAAK,EACL,KAAK,GAAG,sBAAsB,EAC9B,IAAI,GAAG,kDAAkD,EACzD,OAAO,EACP,OAAO,GAAG,KAAK,EACf,WAAW,EACX,GAAG,KAAK,EACT,EACD,GAAG,EACH,EAAE;IACF,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAClD,KAAK,YAET,MAAC,KAAK,IACJ,OAAO,EAAC,aAAa,EACrB,SAAS,EAAE,EAAE,CACX,oHAAoH,EACpH,CAAC,KAAK,IAAI,eAAe,CAC1B,aAED,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,iBAAiB,IAAC,SAAS,EAAC,0BAA0B,GAAG,GACtD,EACN,KAAC,UAAU,IAAC,SAAS,EAAC,8BAA8B,YACjD,KAAK,GACK,EACb,MAAC,gBAAgB,IAAC,SAAS,EAAC,oCAAoC,aAC9D,YAAG,SAAS,EAAC,gBAAgB,YAAE,IAAI,GAAK,EACvC,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,WAAW,YACxB,eAAK,SAAS,EAAC,2BAA2B,aACvC,OAAO,IAAI,CACV,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,0BAA0B,aAEpC,KAAC,aAAa,IAAC,SAAS,EAAC,cAAc,GAAG,aAEnC,CACV,EACA,CAAC,KAAK,IAAI,WAAW,IAAI,CACxB,KAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,WAAW,iCAE7B,CACV,IACG,GACF,CACP,IACgB,IACb,GACJ,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAEpC,OAAO,EAAC,SAAS,EAAC,CAAC","sourcesContent":["import {RotateCcwIcon, TriangleAlertIcon} from 'lucide-react';\nimport * as React from 'react';\nimport {cn} from '../lib/utils';\nimport {Alert, AlertDescription, AlertTitle} from './alert';\nimport {Button} from './button';\n\ninterface ErrorPaneProps extends React.HTMLAttributes<HTMLDivElement> {\n embed?: boolean;\n error?: string | Error | unknown;\n title?: string;\n text?: string;\n onRetry?: () => void;\n onGoToStart?: () => void;\n actions?: boolean;\n}\n\nconst ErrorPane = React.forwardRef<HTMLDivElement, ErrorPaneProps>(\n (\n {\n className,\n embed,\n title = 'Something went wrong',\n text = `We are sorry, but something unexpected happened.`,\n onRetry,\n actions = false,\n onGoToStart,\n ...props\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={cn('flex w-full justify-center', className)}\n {...props}\n >\n <Alert\n variant=\"destructive\"\n className={cn(\n 'flex min-h-[200px] max-w-[450px] flex-col items-center justify-center rounded-lg border-none px-6 py-6 text-center',\n !embed && 'min-w-[350px]',\n )}\n >\n <div className=\"mb-4\">\n <TriangleAlertIcon className=\"text-destructive h-8 w-8\" />\n </div>\n <AlertTitle className=\"text-foreground mb-1 text-xl\">\n {title}\n </AlertTitle>\n <AlertDescription className=\"text-foreground mt-3 max-w-sm px-2\">\n <p className=\"mb-5 text-left\">{text}</p>\n {actions && (\n <div className=\"mt-6 mb-3\">\n <div className=\"flex justify-center gap-2\">\n {onRetry && (\n <Button\n size=\"sm\"\n onClick={onRetry}\n className=\"inline-flex items-center\"\n >\n <RotateCcwIcon className=\"mr-2 h-4 w-4\" />\n Retry\n </Button>\n )}\n {!embed && onGoToStart && (\n <Button size=\"sm\" onClick={onGoToStart}>\n Go to start page\n </Button>\n )}\n </div>\n </div>\n )}\n </AlertDescription>\n </Alert>\n </div>\n );\n },\n);\n\nErrorPane.displayName = 'ErrorPane';\n\nexport {ErrorPane};\n"]}
@@ -0,0 +1,7 @@
1
+ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
2
+ import * as React from 'react';
3
+ declare function HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
4
+ declare function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
5
+ declare function HoverCardContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
6
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
7
+ //# sourceMappingURL=hover-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-card.d.ts","sourceRoot":"","sources":["../../src/components/hover-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,kBAAkB,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,iBAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAEtD;AAED,iBAAS,gBAAgB,CAAC,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAIzD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAezD;AAED,OAAO,EAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
4
+ import { cn } from '../lib/utils';
5
+ function HoverCard({ ...props }) {
6
+ return _jsx(HoverCardPrimitive.Root, { "data-slot": "hover-card", ...props });
7
+ }
8
+ function HoverCardTrigger({ ...props }) {
9
+ return (_jsx(HoverCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props }));
10
+ }
11
+ function HoverCardContent({ className, align = 'center', sideOffset = 4, ...props }) {
12
+ return (_jsx(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: _jsx(HoverCardPrimitive.Content, { "data-slot": "hover-card-content", align: align, sideOffset: sideOffset, className: cn('data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-lg p-2.5 text-sm shadow-md ring-1 outline-hidden duration-100', className), ...props }) }));
13
+ }
14
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
15
+ //# sourceMappingURL=hover-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-card.js","sourceRoot":"","sources":["../../src/components/hover-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,kBAAkB,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAEhC,SAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EAC6C;IACrD,OAAO,KAAC,kBAAkB,CAAC,IAAI,iBAAW,YAAY,KAAK,KAAK,GAAI,CAAC;AACvE,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,GAAG,KAAK,EACgD;IACxD,OAAO,CACL,KAAC,kBAAkB,CAAC,OAAO,iBAAW,oBAAoB,KAAK,KAAK,GAAI,CACzE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAK,GAAG,QAAQ,EAChB,UAAU,GAAG,CAAC,EACd,GAAG,KAAK,EACgD;IACxD,OAAO,CACL,KAAC,kBAAkB,CAAC,MAAM,iBAAW,mBAAmB,YACtD,KAAC,kBAAkB,CAAC,OAAO,iBACf,oBAAoB,EAC9B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CACX,6dAA6d,EAC7d,SAAS,CACV,KACG,KAAK,GACT,GACwB,CAC7B,CAAC;AACJ,CAAC;AAED,OAAO,EAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,CAAC","sourcesContent":["'use client';\n\nimport * as HoverCardPrimitive from '@radix-ui/react-hover-card';\nimport * as React from 'react';\n\nimport {cn} from '../lib/utils';\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />;\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n );\n}\n\nfunction HoverCardContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-lg p-2.5 text-sm shadow-md ring-1 outline-hidden duration-100',\n className,\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport {HoverCard, HoverCardContent, HoverCardTrigger};\n"]}
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ export type ModifierScrollOverlayProps = React.HTMLAttributes<HTMLDivElement> & {
3
+ open: boolean;
4
+ modifierLabel: string;
5
+ targetLabel?: string;
6
+ message?: string;
7
+ contentClassName?: string;
8
+ };
9
+ export declare const ModifierScrollOverlay: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
10
+ open: boolean;
11
+ modifierLabel: string;
12
+ targetLabel?: string;
13
+ message?: string;
14
+ contentClassName?: string;
15
+ } & React.RefAttributes<HTMLDivElement>>;
16
+ //# sourceMappingURL=modifier-scroll-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modifier-scroll-overlay.d.ts","sourceRoot":"","sources":["../../src/components/modifier-scroll-overlay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,0BAA0B,GACpC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAOJ,eAAO,MAAM,qBAAqB;UAZxB,OAAO;mBACE,MAAM;kBACP,MAAM;cACV,MAAM;uBACG,MAAM;wCA0E5B,CAAC"}
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { cn } from '../lib/utils';
5
+ function stopPointerEvent(event) {
6
+ event.preventDefault();
7
+ event.stopPropagation();
8
+ }
9
+ export const ModifierScrollOverlay = React.forwardRef(({ open, modifierLabel, targetLabel = 'this area', message, className, contentClassName, onPointerDownCapture, onPointerUpCapture, onClickCapture, onDoubleClickCapture, onContextMenuCapture, ...props }, ref) => {
10
+ if (!open)
11
+ return null;
12
+ const label = message ?? `Use ${modifierLabel} + scroll to scroll ${targetLabel}`;
13
+ return (_jsx("div", { ref: ref, className: cn('bg-background/70 absolute inset-0 z-50 flex items-center justify-center px-4', className), onPointerDownCapture: (event) => {
14
+ stopPointerEvent(event);
15
+ onPointerDownCapture?.(event);
16
+ }, onPointerUpCapture: (event) => {
17
+ stopPointerEvent(event);
18
+ onPointerUpCapture?.(event);
19
+ }, onClickCapture: (event) => {
20
+ stopPointerEvent(event);
21
+ onClickCapture?.(event);
22
+ }, onDoubleClickCapture: (event) => {
23
+ stopPointerEvent(event);
24
+ onDoubleClickCapture?.(event);
25
+ }, onContextMenuCapture: (event) => {
26
+ stopPointerEvent(event);
27
+ onContextMenuCapture?.(event);
28
+ }, ...props, children: _jsx("div", { className: cn('bg-popover/95 text-popover-foreground border-border rounded-md border px-4 py-2 text-sm font-medium shadow-lg', contentClassName), children: label }) }));
29
+ });
30
+ ModifierScrollOverlay.displayName = 'ModifierScrollOverlay';
31
+ //# sourceMappingURL=modifier-scroll-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modifier-scroll-overlay.js","sourceRoot":"","sources":["../../src/components/modifier-scroll-overlay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAWhC,SAAS,gBAAgB,CAAC,KAA2B;IACnD,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,UAAU,CAInD,CACE,EACE,IAAI,EACJ,aAAa,EACb,WAAW,GAAG,WAAW,EACzB,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,GAAG,KAAK,EACT,EACD,GAAG,EACH,EAAE;IACF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,KAAK,GACT,OAAO,IAAI,OAAO,aAAa,uBAAuB,WAAW,EAAE,CAAC;IAEtE,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,8EAA8E,EAC9E,SAAS,CACV,EACD,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,EACD,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,EACD,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,EACD,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,EACD,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,KACG,KAAK,YAET,cACE,SAAS,EAAE,EAAE,CACX,+GAA+G,EAC/G,gBAAgB,CACjB,YAEA,KAAK,GACF,GACF,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AACF,qBAAqB,CAAC,WAAW,GAAG,uBAAuB,CAAC","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {cn} from '../lib/utils';\n\nexport type ModifierScrollOverlayProps =\n React.HTMLAttributes<HTMLDivElement> & {\n open: boolean;\n modifierLabel: string;\n targetLabel?: string;\n message?: string;\n contentClassName?: string;\n };\n\nfunction stopPointerEvent(event: React.SyntheticEvent) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport const ModifierScrollOverlay = React.forwardRef<\n HTMLDivElement,\n ModifierScrollOverlayProps\n>(\n (\n {\n open,\n modifierLabel,\n targetLabel = 'this area',\n message,\n className,\n contentClassName,\n onPointerDownCapture,\n onPointerUpCapture,\n onClickCapture,\n onDoubleClickCapture,\n onContextMenuCapture,\n ...props\n },\n ref,\n ) => {\n if (!open) return null;\n\n const label =\n message ?? `Use ${modifierLabel} + scroll to scroll ${targetLabel}`;\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-background/70 absolute inset-0 z-50 flex items-center justify-center px-4',\n className,\n )}\n onPointerDownCapture={(event) => {\n stopPointerEvent(event);\n onPointerDownCapture?.(event);\n }}\n onPointerUpCapture={(event) => {\n stopPointerEvent(event);\n onPointerUpCapture?.(event);\n }}\n onClickCapture={(event) => {\n stopPointerEvent(event);\n onClickCapture?.(event);\n }}\n onDoubleClickCapture={(event) => {\n stopPointerEvent(event);\n onDoubleClickCapture?.(event);\n }}\n onContextMenuCapture={(event) => {\n stopPointerEvent(event);\n onContextMenuCapture?.(event);\n }}\n {...props}\n >\n <div\n className={cn(\n 'bg-popover/95 text-popover-foreground border-border rounded-md border px-4 py-2 text-sm font-medium shadow-lg',\n contentClassName,\n )}\n >\n {label}\n </div>\n </div>\n );\n },\n);\nModifierScrollOverlay.displayName = 'ModifierScrollOverlay';\n"]}
@@ -6,6 +6,8 @@ declare const ProgressModal: FC<{
6
6
  loadingStage?: string;
7
7
  progress?: number;
8
8
  indeterminate?: boolean;
9
+ error?: string;
10
+ errorDetails?: string;
9
11
  }>;
10
12
  export { ProgressModal };
11
13
  //# sourceMappingURL=progress-modal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-modal.d.ts","sourceRoot":"","sources":["../../src/components/progress-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAWzB,QAAA,MAAM,aAAa,EAAE,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CA6BA,CAAC;AAEF,OAAO,EAAC,aAAa,EAAC,CAAC"}
1
+ {"version":3,"file":"progress-modal.d.ts","sourceRoot":"","sources":["../../src/components/progress-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAWzB,QAAA,MAAM,aAAa,EAAE,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAwDA,CAAC;AAEF,OAAO,EAAC,aAAa,EAAC,CAAC"}
@@ -4,8 +4,8 @@ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, }
4
4
  import { Progress } from './progress';
5
5
  import { cn } from '../lib/utils';
6
6
  const ProgressModal = (props) => {
7
- const { className, isOpen, title, loadingStage, progress, indeterminate } = props;
8
- return (_jsx(Dialog, { open: isOpen, onOpenChange: () => { }, children: _jsxs(DialogContent, { className: cn('rounded-md border-none focus:outline-hidden sm:max-w-[425px]', className), showCloseButton: false, children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: title ?? '' }) }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Progress, { value: progress, className: "h-2 w-full", indeterminate: indeterminate }), _jsxs(DialogDescription, { className: "text-muted-foreground flex justify-between text-sm", children: [_jsx("span", { className: "text-sm", children: loadingStage ?? '' }), progress ? _jsxs("span", { children: [progress, "%"] }) : null] })] })] }) }));
7
+ const { className, isOpen, title, loadingStage, progress, indeterminate, error, errorDetails, } = props;
8
+ return (_jsx(Dialog, { open: isOpen, onOpenChange: () => { }, children: _jsxs(DialogContent, { className: cn('rounded-md border-none focus:outline-hidden sm:max-w-[425px]', className), showCloseButton: false, children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: title ?? '' }) }), error ? (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsx(DialogDescription, { className: "text-destructive text-sm font-medium", children: loadingStage ?? 'Initialization failed' }), _jsx("p", { className: "text-muted-foreground text-sm", children: error }), errorDetails ? (_jsxs("details", { className: "text-muted-foreground text-sm", children: [_jsx("summary", { className: "hover:text-foreground cursor-pointer font-medium", children: "Details" }), _jsx("pre", { className: "bg-muted text-muted-foreground mt-2 max-h-40 overflow-auto rounded-md p-3 text-xs whitespace-pre-wrap", children: errorDetails })] })) : null] })) : (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Progress, { value: progress, className: "h-2 w-full", indeterminate: indeterminate }), _jsxs(DialogDescription, { className: "text-muted-foreground flex justify-between text-sm", children: [_jsx("span", { className: "text-sm", children: loadingStage ?? '' }), progress !== undefined ? _jsxs("span", { children: [progress, "%"] }) : null] })] }))] }) }));
9
9
  };
10
10
  export { ProgressModal };
11
11
  //# sourceMappingURL=progress-modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-modal.js","sourceRoot":"","sources":["../../src/components/progress-modal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAEhC,MAAM,aAAa,GAOd,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAC,GACrE,KAAK,CAAC;IACR,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,YAC1C,MAAC,aAAa,IACZ,SAAS,EAAE,EAAE,CACX,8DAA8D,EAC9D,SAAS,CACV,EACD,eAAe,EAAE,KAAK,aAEtB,KAAC,YAAY,cACX,KAAC,WAAW,cAAE,KAAK,IAAI,EAAE,GAAe,GAC3B,EACf,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,QAAQ,IACP,KAAK,EAAE,QAAQ,EACf,SAAS,EAAC,YAAY,EACtB,aAAa,EAAE,aAAa,GAC5B,EACF,MAAC,iBAAiB,IAAC,SAAS,EAAC,oDAAoD,aAC/E,eAAM,SAAS,EAAC,SAAS,YAAE,YAAY,IAAI,EAAE,GAAQ,EACpD,QAAQ,CAAC,CAAC,CAAC,2BAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,IAAI,IACzB,IAChB,IACQ,GACT,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,aAAa,EAAC,CAAC","sourcesContent":["'use client';\n\nimport {FC} from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from './dialog';\nimport {Progress} from './progress';\nimport {cn} from '../lib/utils';\n\nconst ProgressModal: FC<{\n className?: string;\n isOpen: boolean;\n title?: string;\n loadingStage?: string;\n progress?: number;\n indeterminate?: boolean;\n}> = (props) => {\n const {className, isOpen, title, loadingStage, progress, indeterminate} =\n props;\n return (\n <Dialog open={isOpen} onOpenChange={() => {}}>\n <DialogContent\n className={cn(\n 'rounded-md border-none focus:outline-hidden sm:max-w-[425px]',\n className,\n )}\n showCloseButton={false}\n >\n <DialogHeader>\n <DialogTitle>{title ?? ''}</DialogTitle>\n </DialogHeader>\n <div className=\"flex flex-col gap-2\">\n <Progress\n value={progress}\n className=\"h-2 w-full\"\n indeterminate={indeterminate}\n />\n <DialogDescription className=\"text-muted-foreground flex justify-between text-sm\">\n <span className=\"text-sm\">{loadingStage ?? ''}</span>\n {progress ? <span>{progress}%</span> : null}\n </DialogDescription>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport {ProgressModal};\n"]}
1
+ {"version":3,"file":"progress-modal.js","sourceRoot":"","sources":["../../src/components/progress-modal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAEhC,MAAM,aAAa,GASd,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EACJ,SAAS,EACT,MAAM,EACN,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,KAAK,EACL,YAAY,GACb,GAAG,KAAK,CAAC;IACV,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,YAC1C,MAAC,aAAa,IACZ,SAAS,EAAE,EAAE,CACX,8DAA8D,EAC9D,SAAS,CACV,EACD,eAAe,EAAE,KAAK,aAEtB,KAAC,YAAY,cACX,KAAC,WAAW,cAAE,KAAK,IAAI,EAAE,GAAe,GAC3B,EACd,KAAK,CAAC,CAAC,CAAC,CACP,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,iBAAiB,IAAC,SAAS,EAAC,sCAAsC,YAChE,YAAY,IAAI,uBAAuB,GACtB,EACpB,YAAG,SAAS,EAAC,+BAA+B,YAAE,KAAK,GAAK,EACvD,YAAY,CAAC,CAAC,CAAC,CACd,mBAAS,SAAS,EAAC,+BAA+B,aAChD,kBAAS,SAAS,EAAC,kDAAkD,wBAE3D,EACV,cAAK,SAAS,EAAC,uGAAuG,YACnH,YAAY,GACT,IACE,CACX,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,qBAAqB,aAClC,KAAC,QAAQ,IACP,KAAK,EAAE,QAAQ,EACf,SAAS,EAAC,YAAY,EACtB,aAAa,EAAE,aAAa,GAC5B,EACF,MAAC,iBAAiB,IAAC,SAAS,EAAC,oDAAoD,aAC/E,eAAM,SAAS,EAAC,SAAS,YAAE,YAAY,IAAI,EAAE,GAAQ,EACpD,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,2BAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,IAAI,IACvC,IAChB,CACP,IACa,GACT,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAC,aAAa,EAAC,CAAC","sourcesContent":["'use client';\n\nimport {FC} from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from './dialog';\nimport {Progress} from './progress';\nimport {cn} from '../lib/utils';\n\nconst ProgressModal: FC<{\n className?: string;\n isOpen: boolean;\n title?: string;\n loadingStage?: string;\n progress?: number;\n indeterminate?: boolean;\n error?: string;\n errorDetails?: string;\n}> = (props) => {\n const {\n className,\n isOpen,\n title,\n loadingStage,\n progress,\n indeterminate,\n error,\n errorDetails,\n } = props;\n return (\n <Dialog open={isOpen} onOpenChange={() => {}}>\n <DialogContent\n className={cn(\n 'rounded-md border-none focus:outline-hidden sm:max-w-[425px]',\n className,\n )}\n showCloseButton={false}\n >\n <DialogHeader>\n <DialogTitle>{title ?? ''}</DialogTitle>\n </DialogHeader>\n {error ? (\n <div className=\"flex flex-col gap-3\">\n <DialogDescription className=\"text-destructive text-sm font-medium\">\n {loadingStage ?? 'Initialization failed'}\n </DialogDescription>\n <p className=\"text-muted-foreground text-sm\">{error}</p>\n {errorDetails ? (\n <details className=\"text-muted-foreground text-sm\">\n <summary className=\"hover:text-foreground cursor-pointer font-medium\">\n Details\n </summary>\n <pre className=\"bg-muted text-muted-foreground mt-2 max-h-40 overflow-auto rounded-md p-3 text-xs whitespace-pre-wrap\">\n {errorDetails}\n </pre>\n </details>\n ) : null}\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n <Progress\n value={progress}\n className=\"h-2 w-full\"\n indeterminate={indeterminate}\n />\n <DialogDescription className=\"text-muted-foreground flex justify-between text-sm\">\n <span className=\"text-sm\">{loadingStage ?? ''}</span>\n {progress !== undefined ? <span>{progress}%</span> : null}\n </DialogDescription>\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport {ProgressModal};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAI9D,UAAU,aACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,QAAA,MAAM,QAAQ,sFAoBZ,CAAC;AAGH,OAAO,EAAC,QAAQ,EAAC,CAAC"}
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAI9D,UAAU,aAAc,SAAQ,KAAK,CAAC,wBAAwB,CAC5D,OAAO,iBAAiB,CAAC,IAAI,CAC9B;IACC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,QAAA,MAAM,QAAQ,sFAoBZ,CAAC;AAGH,OAAO,EAAC,QAAQ,EAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAOhC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAG/B,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,KAAK,EAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAC9D,KAAC,iBAAiB,CAAC,IAAI,IACrB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,KACG,KAAK,YAET,KAAC,iBAAiB,CAAC,SAAS,IAC1B,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,aAAa,IAAI,uCAAuC,CACzD,EACD,KAAK,EAAE,EAAC,SAAS,EAAE,eAAe,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAC,GACzD,GACqB,CAC1B,CAAC,CAAC;AACH,QAAQ,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE1D,OAAO,EAAC,QAAQ,EAAC,CAAC","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\n\nimport {cn} from '../lib/utils';\n\ninterface ProgressProps\n extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {\n indeterminate?: boolean;\n}\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({className, value, indeterminate = false, ...props}, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n 'bg-secondary relative h-4 w-full overflow-hidden rounded-full',\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n 'bg-primary h-full w-full flex-1 transition-all',\n indeterminate && 'animate-sqlrooms-progress origin-left',\n )}\n style={{transform: `translateX(-${100 - (value || 0)}%)`}}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport {Progress};\n"]}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,iBAAiB,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAQhC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAG/B,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,KAAK,EAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAC9D,KAAC,iBAAiB,CAAC,IAAI,IACrB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,KACG,KAAK,YAET,KAAC,iBAAiB,CAAC,SAAS,IAC1B,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,aAAa,IAAI,uCAAuC,CACzD,EACD,KAAK,EAAE,EAAC,SAAS,EAAE,eAAe,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAC,GACzD,GACqB,CAC1B,CAAC,CAAC;AACH,QAAQ,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE1D,OAAO,EAAC,QAAQ,EAAC,CAAC","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\n\nimport {cn} from '../lib/utils';\n\ninterface ProgressProps extends React.ComponentPropsWithoutRef<\n typeof ProgressPrimitive.Root\n> {\n indeterminate?: boolean;\n}\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({className, value, indeterminate = false, ...props}, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n 'bg-secondary relative h-4 w-full overflow-hidden rounded-full',\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n 'bg-primary h-full w-full flex-1 transition-all',\n indeterminate && 'animate-sqlrooms-progress origin-left',\n )}\n style={{transform: `translateX(-${100 - (value || 0)}%)`}}\n />\n </ProgressPrimitive.Root>\n));\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport {Progress};\n"]}