@raystack/apsara 0.52.0 → 0.53.1

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 (80) hide show
  1. package/dist/components/code-block/__tests__/code-block.test.d.ts +2 -0
  2. package/dist/components/code-block/__tests__/code-block.test.d.ts.map +1 -0
  3. package/dist/components/code-block/code-block-code.cjs +50 -0
  4. package/dist/components/code-block/code-block-code.cjs.map +1 -0
  5. package/dist/components/code-block/code-block-code.d.ts +10 -0
  6. package/dist/components/code-block/code-block-code.d.ts.map +1 -0
  7. package/dist/components/code-block/code-block-code.js +48 -0
  8. package/dist/components/code-block/code-block-code.js.map +1 -0
  9. package/dist/components/code-block/code-block-language-select.cjs +26 -0
  10. package/dist/components/code-block/code-block-language-select.cjs.map +1 -0
  11. package/dist/components/code-block/code-block-language-select.d.ts +7 -0
  12. package/dist/components/code-block/code-block-language-select.d.ts.map +1 -0
  13. package/dist/components/code-block/code-block-language-select.js +23 -0
  14. package/dist/components/code-block/code-block-language-select.js.map +1 -0
  15. package/dist/components/code-block/code-block-misc.cjs +49 -0
  16. package/dist/components/code-block/code-block-misc.cjs.map +1 -0
  17. package/dist/components/code-block/code-block-misc.d.ts +112 -0
  18. package/dist/components/code-block/code-block-misc.d.ts.map +1 -0
  19. package/dist/components/code-block/code-block-misc.js +43 -0
  20. package/dist/components/code-block/code-block-misc.js.map +1 -0
  21. package/dist/components/code-block/code-block-root.cjs +48 -0
  22. package/dist/components/code-block/code-block-root.cjs.map +1 -0
  23. package/dist/components/code-block/code-block-root.d.ts +24 -0
  24. package/dist/components/code-block/code-block-root.d.ts.map +1 -0
  25. package/dist/components/code-block/code-block-root.js +45 -0
  26. package/dist/components/code-block/code-block-root.js.map +1 -0
  27. package/dist/components/code-block/code-block.cjs +23 -0
  28. package/dist/components/code-block/code-block.cjs.map +1 -0
  29. package/dist/components/code-block/code-block.js +21 -0
  30. package/dist/components/code-block/code-block.js.map +1 -0
  31. package/dist/components/code-block/code-block.module.css.cjs +8 -0
  32. package/dist/components/code-block/code-block.module.css.cjs.map +1 -0
  33. package/dist/components/code-block/code-block.module.css.js +4 -0
  34. package/dist/components/code-block/code-block.module.css.js.map +1 -0
  35. package/dist/components/code-block/code.module.css.cjs +8 -0
  36. package/dist/components/code-block/code.module.css.cjs.map +1 -0
  37. package/dist/components/code-block/code.module.css.js +4 -0
  38. package/dist/components/code-block/code.module.css.js.map +1 -0
  39. package/dist/components/code-block/index.d.ts +2 -0
  40. package/dist/components/code-block/index.d.ts.map +1 -0
  41. package/dist/components/copy-button/copy-button.cjs +4 -3
  42. package/dist/components/copy-button/copy-button.cjs.map +1 -1
  43. package/dist/components/copy-button/copy-button.d.ts +2 -3
  44. package/dist/components/copy-button/copy-button.d.ts.map +1 -1
  45. package/dist/components/copy-button/copy-button.js +5 -4
  46. package/dist/components/copy-button/copy-button.js.map +1 -1
  47. package/dist/components/dialog/dialog.cjs +23 -14
  48. package/dist/components/dialog/dialog.cjs.map +1 -1
  49. package/dist/components/dialog/dialog.d.ts +1 -0
  50. package/dist/components/dialog/dialog.d.ts.map +1 -1
  51. package/dist/components/dialog/dialog.js +12 -3
  52. package/dist/components/dialog/dialog.js.map +1 -1
  53. package/dist/components/select/select-root.cjs.map +1 -1
  54. package/dist/components/select/select-root.d.ts +2 -2
  55. package/dist/components/select/select-root.d.ts.map +1 -1
  56. package/dist/components/select/select-root.js.map +1 -1
  57. package/dist/hooks/index.cjs +2 -0
  58. package/dist/hooks/index.cjs.map +1 -1
  59. package/dist/hooks/index.d.ts +1 -0
  60. package/dist/hooks/index.d.ts.map +1 -1
  61. package/dist/hooks/index.js +1 -0
  62. package/dist/hooks/index.js.map +1 -1
  63. package/dist/hooks/useIsomorphicLayoutEffect.cjs +8 -0
  64. package/dist/hooks/useIsomorphicLayoutEffect.cjs.map +1 -0
  65. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +3 -0
  66. package/dist/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -0
  67. package/dist/hooks/useIsomorphicLayoutEffect.js +6 -0
  68. package/dist/hooks/useIsomorphicLayoutEffect.js.map +1 -0
  69. package/dist/index.cjs +2 -0
  70. package/dist/index.cjs.map +1 -1
  71. package/dist/index.d.ts +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/node_modules/.pnpm/prism-react-renderer@2.4.1_react@19.1.1/node_modules/prism-react-renderer/dist/index.cjs +3138 -0
  76. package/dist/node_modules/.pnpm/prism-react-renderer@2.4.1_react@19.1.1/node_modules/prism-react-renderer/dist/index.cjs.map +1 -0
  77. package/dist/node_modules/.pnpm/prism-react-renderer@2.4.1_react@19.1.1/node_modules/prism-react-renderer/dist/index.js +3132 -0
  78. package/dist/node_modules/.pnpm/prism-react-renderer@2.4.1_react@19.1.1/node_modules/prism-react-renderer/dist/index.js.map +1 -0
  79. package/dist/style.css +1 -1
  80. package/package.json +2 -1
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var select = require('../select/select.cjs');
4
+ var codeBlockCode = require('./code-block-code.cjs');
5
+ var codeBlockLanguageSelect = require('./code-block-language-select.cjs');
6
+ var codeBlockMisc = require('./code-block-misc.cjs');
7
+ var codeBlockRoot = require('./code-block-root.cjs');
8
+
9
+ const CodeBlock = Object.assign(codeBlockRoot.CodeBlockRoot, {
10
+ Header: codeBlockMisc.CodeBlockHeader,
11
+ Content: codeBlockMisc.CodeBlockContent,
12
+ Label: codeBlockMisc.CodeBlockLabel,
13
+ LanguageSelect: codeBlockLanguageSelect.CodeBlockLanguageSelect,
14
+ LanguageSelectTrigger: codeBlockLanguageSelect.CodeBlockLanguageSelectTrigger,
15
+ LanguageSelectContent: select.Select.Content,
16
+ LanguageSelectItem: select.Select.Item,
17
+ CopyButton: codeBlockMisc.CodeBlockCopyButton,
18
+ Code: codeBlockCode.CodeBlockCode,
19
+ CollapseTrigger: codeBlockMisc.CodeBlockCollapseTrigger
20
+ });
21
+
22
+ exports.CodeBlock = CodeBlock;
23
+ //# sourceMappingURL=code-block.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.cjs","sources":["../../../components/code-block/code-block.tsx"],"sourcesContent":["import { Select } from '../select';\nimport { CodeBlockCode } from './code-block-code';\nimport {\n CodeBlockLanguageSelect,\n CodeBlockLanguageSelectTrigger\n} from './code-block-language-select';\nimport {\n CodeBlockCollapseTrigger,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockLabel\n} from './code-block-misc';\nimport { CodeBlockRoot } from './code-block-root';\n\nexport const CodeBlock = Object.assign(CodeBlockRoot, {\n Header: CodeBlockHeader,\n Content: CodeBlockContent,\n Label: CodeBlockLabel,\n LanguageSelect: CodeBlockLanguageSelect,\n LanguageSelectTrigger: CodeBlockLanguageSelectTrigger,\n LanguageSelectContent: Select.Content as typeof Select.Content,\n LanguageSelectItem: Select.Item as typeof Select.Item,\n CopyButton: CodeBlockCopyButton,\n Code: CodeBlockCode,\n CollapseTrigger: CodeBlockCollapseTrigger\n});\n"],"names":["CodeBlockRoot","CodeBlockHeader","CodeBlockContent","CodeBlockLabel","CodeBlockLanguageSelect","CodeBlockLanguageSelectTrigger","Select","CodeBlockCopyButton","CodeBlockCode","CodeBlockCollapseTrigger"],"mappings":";;;;;;;;MAea,SAAS,GAAG,MAAM,CAAC,MAAM,CAACA,2BAAa,EAAE;AACpD,IAAA,MAAM,EAAEC,6BAAe;AACvB,IAAA,OAAO,EAAEC,8BAAgB;AACzB,IAAA,KAAK,EAAEC,4BAAc;AACrB,IAAA,cAAc,EAAEC,+CAAuB;AACvC,IAAA,qBAAqB,EAAEC,sDAA8B;IACrD,qBAAqB,EAAEC,aAAM,CAAC,OAAgC;IAC9D,kBAAkB,EAAEA,aAAM,CAAC,IAA0B;AACrD,IAAA,UAAU,EAAEC,iCAAmB;AAC/B,IAAA,IAAI,EAAEC,2BAAa;AACnB,IAAA,eAAe,EAAEC,sCAAwB;AAC1C,CAAA;;;;"}
@@ -0,0 +1,21 @@
1
+ import { Select } from '../select/select.js';
2
+ import { CodeBlockCode } from './code-block-code.js';
3
+ import { CodeBlockLanguageSelect, CodeBlockLanguageSelectTrigger } from './code-block-language-select.js';
4
+ import { CodeBlockHeader, CodeBlockContent, CodeBlockLabel, CodeBlockCopyButton, CodeBlockCollapseTrigger } from './code-block-misc.js';
5
+ import { CodeBlockRoot } from './code-block-root.js';
6
+
7
+ const CodeBlock = Object.assign(CodeBlockRoot, {
8
+ Header: CodeBlockHeader,
9
+ Content: CodeBlockContent,
10
+ Label: CodeBlockLabel,
11
+ LanguageSelect: CodeBlockLanguageSelect,
12
+ LanguageSelectTrigger: CodeBlockLanguageSelectTrigger,
13
+ LanguageSelectContent: Select.Content,
14
+ LanguageSelectItem: Select.Item,
15
+ CopyButton: CodeBlockCopyButton,
16
+ Code: CodeBlockCode,
17
+ CollapseTrigger: CodeBlockCollapseTrigger
18
+ });
19
+
20
+ export { CodeBlock };
21
+ //# sourceMappingURL=code-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.js","sources":["../../../components/code-block/code-block.tsx"],"sourcesContent":["import { Select } from '../select';\nimport { CodeBlockCode } from './code-block-code';\nimport {\n CodeBlockLanguageSelect,\n CodeBlockLanguageSelectTrigger\n} from './code-block-language-select';\nimport {\n CodeBlockCollapseTrigger,\n CodeBlockContent,\n CodeBlockCopyButton,\n CodeBlockHeader,\n CodeBlockLabel\n} from './code-block-misc';\nimport { CodeBlockRoot } from './code-block-root';\n\nexport const CodeBlock = Object.assign(CodeBlockRoot, {\n Header: CodeBlockHeader,\n Content: CodeBlockContent,\n Label: CodeBlockLabel,\n LanguageSelect: CodeBlockLanguageSelect,\n LanguageSelectTrigger: CodeBlockLanguageSelectTrigger,\n LanguageSelectContent: Select.Content as typeof Select.Content,\n LanguageSelectItem: Select.Item as typeof Select.Item,\n CopyButton: CodeBlockCopyButton,\n Code: CodeBlockCode,\n CollapseTrigger: CodeBlockCollapseTrigger\n});\n"],"names":[],"mappings":";;;;;;MAea,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;AACpD,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,OAAO,EAAE,gBAAgB;AACzB,IAAA,KAAK,EAAE,cAAc;AACrB,IAAA,cAAc,EAAE,uBAAuB;AACvC,IAAA,qBAAqB,EAAE,8BAA8B;IACrD,qBAAqB,EAAE,MAAM,CAAC,OAAgC;IAC9D,kBAAkB,EAAE,MAAM,CAAC,IAA0B;AACrD,IAAA,UAAU,EAAE,mBAAmB;AAC/B,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,eAAe,EAAE,wBAAwB;AAC1C,CAAA;;;;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var styles = {"container":"code-block-module_container__jbdzZ","content":"code-block-module_content__hfyxg","header":"code-block-module_header__k0-Ow","label":"code-block-module_label__TcwYO","languageSelectTrigger":"code-block-module_languageSelectTrigger__dnGoj","collapseTrigger":"code-block-module_collapseTrigger__tX6fI","codeContent":"code-block-module_codeContent__8GUq7","pre":"code-block-module_pre__RXDtg","lineNumber":"code-block-module_lineNumber__ru2oY","lineContent":"code-block-module_lineContent__OG9cE","copyButton":"code-block-module_copyButton__1hsyv","floatingCopyButton":"code-block-module_floatingCopyButton__EaiDL"};
6
+
7
+ exports.default = styles;
8
+ //# sourceMappingURL=code-block.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ var styles = {"container":"code-block-module_container__jbdzZ","content":"code-block-module_content__hfyxg","header":"code-block-module_header__k0-Ow","label":"code-block-module_label__TcwYO","languageSelectTrigger":"code-block-module_languageSelectTrigger__dnGoj","collapseTrigger":"code-block-module_collapseTrigger__tX6fI","codeContent":"code-block-module_codeContent__8GUq7","pre":"code-block-module_pre__RXDtg","lineNumber":"code-block-module_lineNumber__ru2oY","lineContent":"code-block-module_lineContent__OG9cE","copyButton":"code-block-module_copyButton__1hsyv","floatingCopyButton":"code-block-module_floatingCopyButton__EaiDL"};
2
+
3
+ export { styles as default };
4
+ //# sourceMappingURL=code-block.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-block.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var code = {"theme":"code-module_theme__AQTtf"};
6
+
7
+ exports.default = code;
8
+ //# sourceMappingURL=code.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ var code = {"theme":"code-module_theme__AQTtf"};
2
+
3
+ export { code as default };
4
+ //# sourceMappingURL=code.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,2 @@
1
+ export { CodeBlock } from './code-block';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../components/code-block/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -8,7 +8,7 @@ var useCopyToClipboard = require('../../hooks/useCopyToClipboard.cjs');
8
8
  var checkCircleFilled = require('../../icons/assets/check-circle-filled.svg.cjs');
9
9
  var iconButton = require('../icon-button/icon-button.cjs');
10
10
 
11
- const CopyButton = ({ text, resetTimeout = 1000, resetIcon = true, ...props }) => {
11
+ const CopyButton = React.forwardRef(({ text, resetTimeout = 1000, resetIcon = true, ...props }, ref) => {
12
12
  const { copy } = useCopyToClipboard.useCopyToClipboard();
13
13
  const [isCopied, setIsCopied] = React.useState(false);
14
14
  async function onCopy() {
@@ -22,8 +22,9 @@ const CopyButton = ({ text, resetTimeout = 1000, resetIcon = true, ...props }) =
22
22
  }
23
23
  }
24
24
  }
25
- return (jsxRuntime.jsx(iconButton.IconButton, { ...props, onClick: onCopy, "data-test-id": 'copy-button', children: isCopied ? (jsxRuntime.jsx(checkCircleFilled.ReactComponent, { color: 'var(--rs-color-foreground-success-primary)' })) : (jsxRuntime.jsx(reactIcons_esm.CopyIcon, {})) }));
26
- };
25
+ return (jsxRuntime.jsx(iconButton.IconButton, { ref: ref, ...props, onClick: onCopy, "data-test-id": 'copy-button', children: isCopied ? (jsxRuntime.jsx(checkCircleFilled.ReactComponent, { color: 'var(--rs-color-foreground-success-primary)' })) : (jsxRuntime.jsx(reactIcons_esm.CopyIcon, {})) }));
26
+ });
27
+ CopyButton.displayName = 'CopyButton';
27
28
 
28
29
  exports.CopyButton = CopyButton;
29
30
  //# sourceMappingURL=copy-button.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-button.cjs","sources":["../../../components/copy-button/copy-button.tsx"],"sourcesContent":["'use client';\n\nimport { CopyIcon } from '@radix-ui/react-icons';\nimport { useState } from 'react';\nimport { useCopyToClipboard } from '~/hooks/useCopyToClipboard';\nimport { CheckCircleFilledIcon } from '~/icons';\nimport { IconButton, IconButtonProps } from '../icon-button/icon-button';\n\ninterface CopyButtonProps extends IconButtonProps {\n text: string;\n resetTimeout?: number;\n resetIcon?: boolean;\n}\n\nexport const CopyButton = ({\n text,\n resetTimeout = 1000,\n resetIcon = true,\n ...props\n}: CopyButtonProps) => {\n const { copy } = useCopyToClipboard();\n const [isCopied, setIsCopied] = useState(false);\n\n async function onCopy() {\n const res = await copy(text);\n if (res) {\n setIsCopied(true);\n if (resetIcon) {\n setTimeout(() => {\n setIsCopied(false);\n }, resetTimeout);\n }\n }\n }\n\n return (\n <IconButton {...props} onClick={onCopy} data-test-id='copy-button'>\n {isCopied ? (\n <CheckCircleFilledIcon color='var(--rs-color-foreground-success-primary)' />\n ) : (\n <CopyIcon />\n )}\n </IconButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAoBE;;AAGA;AACE;;;;;;;;;;AAWF;AASF;;"}
1
+ {"version":3,"file":"copy-button.cjs","sources":["../../../components/copy-button/copy-button.tsx"],"sourcesContent":["'use client';\n\nimport { CopyIcon } from '@radix-ui/react-icons';\nimport { ElementRef, forwardRef, useState } from 'react';\nimport { useCopyToClipboard } from '~/hooks/useCopyToClipboard';\nimport { CheckCircleFilledIcon } from '~/icons';\nimport { IconButton, IconButtonProps } from '../icon-button/icon-button';\n\nexport interface CopyButtonProps extends IconButtonProps {\n text: string;\n resetTimeout?: number;\n resetIcon?: boolean;\n}\n\nexport const CopyButton = forwardRef<\n ElementRef<typeof IconButton>,\n CopyButtonProps\n>(({ text, resetTimeout = 1000, resetIcon = true, ...props }, ref) => {\n const { copy } = useCopyToClipboard();\n const [isCopied, setIsCopied] = useState(false);\n\n async function onCopy() {\n const res = await copy(text);\n if (res) {\n setIsCopied(true);\n if (resetIcon) {\n setTimeout(() => {\n setIsCopied(false);\n }, resetTimeout);\n }\n }\n }\n\n return (\n <IconButton\n ref={ref}\n {...props}\n onClick={onCopy}\n data-test-id='copy-button'\n >\n {isCopied ? (\n <CheckCircleFilledIcon color='var(--rs-color-foreground-success-primary)' />\n ) : (\n <CopyIcon />\n )}\n </IconButton>\n );\n});\n\nCopyButton.displayName = 'CopyButton';\n"],"names":[],"mappings":";;;;;;;;;;AAca;AAIX;;AAGA;AACE;;;;;;;;;;AAWF;AAcF;AAEA;;"}
@@ -1,9 +1,8 @@
1
1
  import { IconButtonProps } from '../icon-button/icon-button';
2
- interface CopyButtonProps extends IconButtonProps {
2
+ export interface CopyButtonProps extends IconButtonProps {
3
3
  text: string;
4
4
  resetTimeout?: number;
5
5
  resetIcon?: boolean;
6
6
  }
7
- export declare const CopyButton: ({ text, resetTimeout, resetIcon, ...props }: CopyButtonProps) => import("react/jsx-runtime").JSX.Element;
8
- export {};
7
+ export declare const CopyButton: import("react").ForwardRefExoticComponent<CopyButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
9
8
  //# sourceMappingURL=copy-button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-button.d.ts","sourceRoot":"","sources":["../../../components/copy-button/copy-button.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAc,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAEzE,UAAU,eAAgB,SAAQ,eAAe;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,gDAKpB,eAAe,4CAyBjB,CAAC"}
1
+ {"version":3,"file":"copy-button.d.ts","sourceRoot":"","sources":["../../../components/copy-button/copy-button.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAc,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAEzE,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,+GAiCrB,CAAC"}
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import { CopyIcon } from '../../node_modules/.pnpm/@radix-ui_react-icons@1.3.2_react@19.1.1/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js';
4
- import { useState } from 'react';
4
+ import { forwardRef, useState } from 'react';
5
5
  import { useCopyToClipboard } from '../../hooks/useCopyToClipboard.js';
6
6
  import { ReactComponent as SvgCheckCircleFilled } from '../../icons/assets/check-circle-filled.svg.js';
7
7
  import { IconButton } from '../icon-button/icon-button.js';
8
8
 
9
- const CopyButton = ({ text, resetTimeout = 1000, resetIcon = true, ...props }) => {
9
+ const CopyButton = forwardRef(({ text, resetTimeout = 1000, resetIcon = true, ...props }, ref) => {
10
10
  const { copy } = useCopyToClipboard();
11
11
  const [isCopied, setIsCopied] = useState(false);
12
12
  async function onCopy() {
@@ -20,8 +20,9 @@ const CopyButton = ({ text, resetTimeout = 1000, resetIcon = true, ...props }) =
20
20
  }
21
21
  }
22
22
  }
23
- return (jsx(IconButton, { ...props, onClick: onCopy, "data-test-id": 'copy-button', children: isCopied ? (jsx(SvgCheckCircleFilled, { color: 'var(--rs-color-foreground-success-primary)' })) : (jsx(CopyIcon, {})) }));
24
- };
23
+ return (jsx(IconButton, { ref: ref, ...props, onClick: onCopy, "data-test-id": 'copy-button', children: isCopied ? (jsx(SvgCheckCircleFilled, { color: 'var(--rs-color-foreground-success-primary)' })) : (jsx(CopyIcon, {})) }));
24
+ });
25
+ CopyButton.displayName = 'CopyButton';
25
26
 
26
27
  export { CopyButton };
27
28
  //# sourceMappingURL=copy-button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-button.js","sources":["../../../components/copy-button/copy-button.tsx"],"sourcesContent":["'use client';\n\nimport { CopyIcon } from '@radix-ui/react-icons';\nimport { useState } from 'react';\nimport { useCopyToClipboard } from '~/hooks/useCopyToClipboard';\nimport { CheckCircleFilledIcon } from '~/icons';\nimport { IconButton, IconButtonProps } from '../icon-button/icon-button';\n\ninterface CopyButtonProps extends IconButtonProps {\n text: string;\n resetTimeout?: number;\n resetIcon?: boolean;\n}\n\nexport const CopyButton = ({\n text,\n resetTimeout = 1000,\n resetIcon = true,\n ...props\n}: CopyButtonProps) => {\n const { copy } = useCopyToClipboard();\n const [isCopied, setIsCopied] = useState(false);\n\n async function onCopy() {\n const res = await copy(text);\n if (res) {\n setIsCopied(true);\n if (resetIcon) {\n setTimeout(() => {\n setIsCopied(false);\n }, resetTimeout);\n }\n }\n }\n\n return (\n <IconButton {...props} onClick={onCopy} data-test-id='copy-button'>\n {isCopied ? (\n <CheckCircleFilledIcon color='var(--rs-color-foreground-success-primary)' />\n ) : (\n <CopyIcon />\n )}\n </IconButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAoBE;;AAGA;AACE;;;;;;;;;;AAWF;AASF;;"}
1
+ {"version":3,"file":"copy-button.js","sources":["../../../components/copy-button/copy-button.tsx"],"sourcesContent":["'use client';\n\nimport { CopyIcon } from '@radix-ui/react-icons';\nimport { ElementRef, forwardRef, useState } from 'react';\nimport { useCopyToClipboard } from '~/hooks/useCopyToClipboard';\nimport { CheckCircleFilledIcon } from '~/icons';\nimport { IconButton, IconButtonProps } from '../icon-button/icon-button';\n\nexport interface CopyButtonProps extends IconButtonProps {\n text: string;\n resetTimeout?: number;\n resetIcon?: boolean;\n}\n\nexport const CopyButton = forwardRef<\n ElementRef<typeof IconButton>,\n CopyButtonProps\n>(({ text, resetTimeout = 1000, resetIcon = true, ...props }, ref) => {\n const { copy } = useCopyToClipboard();\n const [isCopied, setIsCopied] = useState(false);\n\n async function onCopy() {\n const res = await copy(text);\n if (res) {\n setIsCopied(true);\n if (resetIcon) {\n setTimeout(() => {\n setIsCopied(false);\n }, resetTimeout);\n }\n }\n }\n\n return (\n <IconButton\n ref={ref}\n {...props}\n onClick={onCopy}\n data-test-id='copy-button'\n >\n {isCopied ? (\n <CheckCircleFilledIcon color='var(--rs-color-foreground-success-primary)' />\n ) : (\n <CopyIcon />\n )}\n </IconButton>\n );\n});\n\nCopyButton.displayName = 'CopyButton';\n"],"names":[],"mappings":";;;;;;;;AAca;AAIX;;AAGA;AACE;;;;;;;;;;AAWF;AAcF;AAEA;;"}
@@ -2,34 +2,43 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var reactIcons_esm = require('../../node_modules/.pnpm/@radix-ui_react-icons@1.3.2_react@19.1.1/node_modules/@radix-ui/react-icons/dist/react-icons.esm.cjs');
5
- var index$1 = require('../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.cjs');
5
+ var index = require('../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.cjs');
6
6
  var React = require('react');
7
7
  var flex = require('../flex/flex.cjs');
8
8
  var dialog_module = require('./dialog.module.css.cjs');
9
- var index = require('../../node_modules/.pnpm/@radix-ui_react-dialog@1.1.14_@types_react-dom@19.1.7_@types_react@19.1.9__@types_react@19.1._i7gyttlqowrnok6rwi63tbbmni/node_modules/@radix-ui/react-dialog/dist/index.cjs');
9
+ var index$1 = require('../../node_modules/.pnpm/@radix-ui_react-dialog@1.1.14_@types_react-dom@19.1.7_@types_react@19.1.9__@types_react@19.1._i7gyttlqowrnok6rwi63tbbmni/node_modules/@radix-ui/react-dialog/dist/index.cjs');
10
10
 
11
- const dialogContent = index$1.cva(dialog_module.default.dialogContent);
12
- const DialogContent = React.forwardRef(({ className, children, ariaLabel, ariaDescription, overlayBlur = false, overlayClassName, overlayStyle, width, ...props }, ref) => (jsxRuntime.jsxs(index.Portal, { children: [jsxRuntime.jsx(index.Overlay, { className: index$1.cx(dialog_module.default.dialogOverlay, overlayClassName, overlayBlur && dialog_module.default.overlayBlur), style: overlayStyle, "aria-hidden": 'true', role: 'presentation' }), jsxRuntime.jsx(index.Content, { ref: ref, className: dialogContent({ className }), style: { width, ...props.style }, "aria-label": ariaLabel, "aria-describedby": ariaDescription ? 'dialog-description' : undefined, ...props, children: children })] })));
13
- DialogContent.displayName = index.Content.displayName;
14
- const DialogHeader = ({ children, className }) => (jsxRuntime.jsx(flex.Flex, { justify: 'between', align: 'center', className: index$1.cx(dialog_module.default.header, className), children: children }));
15
- const DialogFooter = ({ children, className }) => (jsxRuntime.jsx(flex.Flex, { gap: 5, justify: 'end', className: index$1.cx(dialog_module.default.footer, className), children: children }));
16
- const DialogBody = ({ children, className }) => (jsxRuntime.jsx(flex.Flex, { direction: 'column', gap: 3, className: index$1.cx(dialog_module.default.body, className), children: children }));
11
+ const dialogContent = index.cva(dialog_module.default.dialogContent);
12
+ const DialogContent = React.forwardRef(({ className, children, ariaLabel, ariaDescription, overlayBlur = false, overlayClassName, overlayStyle, width, scrollableOverlay = false, ...props }, ref) => {
13
+ const overlayProps = {
14
+ className: index.cx(dialog_module.default.dialogOverlay, overlayClassName, overlayBlur && dialog_module.default.overlayBlur),
15
+ style: overlayStyle,
16
+ 'aria-hidden': 'true',
17
+ role: 'presentation'
18
+ };
19
+ const content = (jsxRuntime.jsx(index$1.Content, { ref: ref, className: dialogContent({ className }), style: { width, ...props.style }, "aria-label": ariaLabel, "aria-describedby": ariaDescription ? 'dialog-description' : undefined, ...props, children: children }));
20
+ return (jsxRuntime.jsx(index$1.Portal, { children: scrollableOverlay ? (jsxRuntime.jsx(index$1.Overlay, { ...overlayProps, children: content })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(index$1.Overlay, { ...overlayProps }), content] })) }));
21
+ });
22
+ DialogContent.displayName = index$1.Content.displayName;
23
+ const DialogHeader = ({ children, className }) => (jsxRuntime.jsx(flex.Flex, { justify: 'between', align: 'center', className: index.cx(dialog_module.default.header, className), children: children }));
24
+ const DialogFooter = ({ children, className }) => (jsxRuntime.jsx(flex.Flex, { gap: 5, justify: 'end', className: index.cx(dialog_module.default.footer, className), children: children }));
25
+ const DialogBody = ({ children, className }) => (jsxRuntime.jsx(flex.Flex, { direction: 'column', gap: 3, className: index.cx(dialog_module.default.body, className), children: children }));
17
26
  function CloseButton({ className, ...props }) {
18
- return (jsxRuntime.jsx(index.Close, { className: index$1.cx(dialog_module.default.close, className), "aria-label": 'Close dialog', ...props, children: jsxRuntime.jsx(reactIcons_esm.Cross1Icon, {}) }));
27
+ return (jsxRuntime.jsx(index$1.Close, { className: index.cx(dialog_module.default.close, className), "aria-label": 'Close dialog', ...props, children: jsxRuntime.jsx(reactIcons_esm.Cross1Icon, {}) }));
19
28
  }
20
29
  function DialogTitle({ children, className, ...props }) {
21
- return (jsxRuntime.jsx(index.Title, { ...props, role: 'heading', "aria-level": 1, className: index$1.cx(dialog_module.default.title, className), children: children }));
30
+ return (jsxRuntime.jsx(index$1.Title, { ...props, role: 'heading', "aria-level": 1, className: index.cx(dialog_module.default.title, className), children: children }));
22
31
  }
23
32
  function DialogDescription({ children, className, ...props }) {
24
- return (jsxRuntime.jsx(index.Description, { ...props, className: index$1.cx(dialog_module.default.description, className), id: 'dialog-description', role: 'document', children: children }));
33
+ return (jsxRuntime.jsx(index$1.Description, { ...props, className: index.cx(dialog_module.default.description, className), id: 'dialog-description', role: 'document', children: children }));
25
34
  }
26
- const Dialog = Object.assign(index.Root, {
27
- Trigger: index.Trigger,
35
+ const Dialog = Object.assign(index$1.Root, {
36
+ Trigger: index$1.Trigger,
28
37
  Content: DialogContent,
29
38
  Header: DialogHeader,
30
39
  Footer: DialogFooter,
31
40
  Body: DialogBody,
32
- Close: index.Close,
41
+ Close: index$1.Close,
33
42
  CloseButton: CloseButton,
34
43
  Title: DialogTitle,
35
44
  Description: DialogDescription
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.cjs","sources":["../../../components/dialog/dialog.tsx"],"sourcesContent":["import { Cross1Icon } from '@radix-ui/react-icons';\nimport { VariantProps, cva, cx } from 'class-variance-authority';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n ElementRef,\n forwardRef\n} from 'react';\nimport { Flex } from '../flex';\nimport styles from './dialog.module.css';\n\nconst dialogContent = cva(styles.dialogContent);\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof dialogContent> {\n ariaLabel?: string;\n ariaDescription?: string;\n overlayBlur?: boolean;\n overlayClassName?: string;\n overlayStyle?: React.CSSProperties;\n width?: string | number;\n}\n\nconst DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n ariaLabel,\n ariaDescription,\n overlayBlur = false,\n overlayClassName,\n overlayStyle,\n width,\n ...props\n },\n ref\n ) => (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cx(\n styles.dialogOverlay,\n overlayClassName,\n overlayBlur && styles.overlayBlur\n )}\n style={overlayStyle}\n aria-hidden='true'\n role='presentation'\n />\n <DialogPrimitive.Content\n ref={ref}\n className={dialogContent({ className })}\n style={{ width, ...props.style }}\n aria-label={ariaLabel}\n aria-describedby={ariaDescription ? 'dialog-description' : undefined}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )\n);\n\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex\n justify='between'\n align='center'\n className={cx(styles.header, className)}\n >\n {children}\n </Flex>\n);\n\nconst DialogFooter = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex gap={5} justify='end' className={cx(styles.footer, className)}>\n {children}\n </Flex>\n);\n\nconst DialogBody = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex direction='column' gap={3} className={cx(styles.body, className)}>\n {children}\n </Flex>\n);\n\ntype CloseButtonProps = ComponentProps<typeof DialogPrimitive.Close>;\nexport function CloseButton({ className, ...props }: CloseButtonProps) {\n return (\n <DialogPrimitive.Close\n className={cx(styles.close, className)}\n aria-label='Close dialog'\n {...props}\n >\n <Cross1Icon />\n </DialogPrimitive.Close>\n );\n}\n\ninterface DialogTitleProps\n extends ComponentProps<typeof DialogPrimitive.Title> {\n children: React.ReactNode;\n}\n\nfunction DialogTitle({ children, className, ...props }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n {...props}\n role='heading'\n aria-level={1}\n className={cx(styles.title, className)}\n >\n {children}\n </DialogPrimitive.Title>\n );\n}\n\ninterface DialogDescriptionProps\n extends ComponentProps<typeof DialogPrimitive.Description> {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction DialogDescription({\n children,\n className,\n ...props\n}: DialogDescriptionProps) {\n return (\n <DialogPrimitive.Description\n {...props}\n className={cx(styles.description, className)}\n id='dialog-description'\n role='document'\n >\n {children}\n </DialogPrimitive.Description>\n );\n}\n\nexport const Dialog = Object.assign(DialogPrimitive.Root, {\n Trigger: DialogPrimitive.Trigger,\n Content: DialogContent,\n Header: DialogHeader,\n Footer: DialogFooter,\n Body: DialogBody,\n Close: DialogPrimitive.Close,\n CloseButton: CloseButton,\n Title: DialogTitle,\n Description: DialogDescription\n});\n"],"names":["cva","styles","forwardRef","_jsxs","DialogPrimitive.Portal","_jsx","DialogPrimitive.Overlay","cx","DialogPrimitive.Content","Flex","DialogPrimitive.Close","Cross1Icon","DialogPrimitive.Title","DialogPrimitive.Description","DialogPrimitive.Root","DialogPrimitive.Trigger"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.cjs","sources":["../../../components/dialog/dialog.tsx"],"sourcesContent":["import { Cross1Icon } from '@radix-ui/react-icons';\nimport { VariantProps, cva, cx } from 'class-variance-authority';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n ElementRef,\n forwardRef\n} from 'react';\nimport { Flex } from '../flex';\nimport styles from './dialog.module.css';\n\nconst dialogContent = cva(styles.dialogContent);\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof dialogContent> {\n ariaLabel?: string;\n ariaDescription?: string;\n overlayBlur?: boolean;\n overlayClassName?: string;\n overlayStyle?: React.CSSProperties;\n width?: string | number;\n scrollableOverlay?: boolean;\n}\n\nconst DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n ariaLabel,\n ariaDescription,\n overlayBlur = false,\n overlayClassName,\n overlayStyle,\n width,\n scrollableOverlay = false,\n ...props\n },\n ref\n ) => {\n const overlayProps: DialogPrimitive.DialogOverlayProps = {\n className: cx(\n styles.dialogOverlay,\n overlayClassName,\n overlayBlur && styles.overlayBlur\n ),\n style: overlayStyle,\n 'aria-hidden': 'true',\n role: 'presentation'\n };\n\n const content = (\n <DialogPrimitive.Content\n ref={ref}\n className={dialogContent({ className })}\n style={{ width, ...props.style }}\n aria-label={ariaLabel}\n aria-describedby={ariaDescription ? 'dialog-description' : undefined}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n );\n return (\n <DialogPrimitive.Portal>\n {scrollableOverlay ? (\n <DialogPrimitive.Overlay {...overlayProps}>\n {content}\n </DialogPrimitive.Overlay>\n ) : (\n <>\n <DialogPrimitive.Overlay {...overlayProps} />\n {content}\n </>\n )}\n </DialogPrimitive.Portal>\n );\n }\n);\n\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex\n justify='between'\n align='center'\n className={cx(styles.header, className)}\n >\n {children}\n </Flex>\n);\n\nconst DialogFooter = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex gap={5} justify='end' className={cx(styles.footer, className)}>\n {children}\n </Flex>\n);\n\nconst DialogBody = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex direction='column' gap={3} className={cx(styles.body, className)}>\n {children}\n </Flex>\n);\n\ntype CloseButtonProps = ComponentProps<typeof DialogPrimitive.Close>;\nexport function CloseButton({ className, ...props }: CloseButtonProps) {\n return (\n <DialogPrimitive.Close\n className={cx(styles.close, className)}\n aria-label='Close dialog'\n {...props}\n >\n <Cross1Icon />\n </DialogPrimitive.Close>\n );\n}\n\ninterface DialogTitleProps\n extends ComponentProps<typeof DialogPrimitive.Title> {\n children: React.ReactNode;\n}\n\nfunction DialogTitle({ children, className, ...props }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n {...props}\n role='heading'\n aria-level={1}\n className={cx(styles.title, className)}\n >\n {children}\n </DialogPrimitive.Title>\n );\n}\n\ninterface DialogDescriptionProps\n extends ComponentProps<typeof DialogPrimitive.Description> {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction DialogDescription({\n children,\n className,\n ...props\n}: DialogDescriptionProps) {\n return (\n <DialogPrimitive.Description\n {...props}\n className={cx(styles.description, className)}\n id='dialog-description'\n role='document'\n >\n {children}\n </DialogPrimitive.Description>\n );\n}\n\nexport const Dialog = Object.assign(DialogPrimitive.Root, {\n Trigger: DialogPrimitive.Trigger,\n Content: DialogContent,\n Header: DialogHeader,\n Footer: DialogFooter,\n Body: DialogBody,\n Close: DialogPrimitive.Close,\n CloseButton: CloseButton,\n Title: DialogTitle,\n Description: DialogDescription\n});\n"],"names":["cva","styles","forwardRef","cx","_jsx","DialogPrimitive.Content","DialogPrimitive.Portal","DialogPrimitive.Overlay","_jsxs","_Fragment","Flex","DialogPrimitive.Close","Cross1Icon","DialogPrimitive.Title","DialogPrimitive.Description","DialogPrimitive.Root","DialogPrimitive.Trigger"],"mappings":"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"}
@@ -9,6 +9,7 @@ export interface DialogContentProps extends ComponentPropsWithoutRef<typeof Dial
9
9
  overlayClassName?: string;
10
10
  overlayStyle?: React.CSSProperties;
11
11
  width?: string | number;
12
+ scrollableOverlay?: boolean;
12
13
  }
13
14
  type CloseButtonProps = ComponentProps<typeof DialogPrimitive.Close>;
14
15
  export declare function CloseButton({ className, ...props }: CloseButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../components/dialog/dialog.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAW,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EACL,cAAc,EACd,wBAAwB,EAGzB,MAAM,OAAO,CAAC;AAIf,QAAA,MAAM,aAAa,oFAA4B,CAAC;AAEhD,MAAM,WAAW,kBACf,SAAQ,wBAAwB,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,EAC9D,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAuFD,KAAK,gBAAgB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AACrE,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAUpE;AAED,UAAU,gBACR,SAAQ,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC;IACpD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAWvE;AAED,UAAU,sBACR,SAAQ,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC;IAC1D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAWxB;AAED,eAAO,MAAM,MAAM;;;;kBA1FP,MAAM,SAAS;;;;kBAgBf,MAAM,SAAS;;;;kBAYf,MAAM,SAAS;;;;;;;CAwEzB,CAAC"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../components/dialog/dialog.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAW,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EACL,cAAc,EACd,wBAAwB,EAGzB,MAAM,OAAO,CAAC;AAIf,QAAA,MAAM,aAAa,oFAA4B,CAAC;AAEhD,MAAM,WAAW,kBACf,SAAQ,wBAAwB,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,EAC9D,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAuGD,KAAK,gBAAgB,GAAG,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AACrE,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAUpE;AAED,UAAU,gBACR,SAAQ,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC;IACpD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,iBAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,2CAWvE;AAED,UAAU,sBACR,SAAQ,cAAc,CAAC,OAAO,eAAe,CAAC,WAAW,CAAC;IAC1D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAWxB;AAED,eAAO,MAAM,MAAM;;;;kBA1FP,MAAM,SAAS;;;;kBAgBf,MAAM,SAAS;;;;kBAYf,MAAM,SAAS;;;;;;;CAwEzB,CAAC"}
@@ -1,13 +1,22 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { Cross1Icon } from '../../node_modules/.pnpm/@radix-ui_react-icons@1.3.2_react@19.1.1/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js';
3
3
  import { cx, cva } from '../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js';
4
4
  import { forwardRef } from 'react';
5
5
  import { Flex } from '../flex/flex.js';
6
6
  import styles from './dialog.module.css.js';
7
- import { Portal, Overlay, Content, Root, Trigger, Close, Title, Description } from '../../node_modules/.pnpm/@radix-ui_react-dialog@1.1.14_@types_react-dom@19.1.7_@types_react@19.1.9__@types_react@19.1._i7gyttlqowrnok6rwi63tbbmni/node_modules/@radix-ui/react-dialog/dist/index.js';
7
+ import { Content, Portal, Overlay, Root, Trigger, Close, Title, Description } from '../../node_modules/.pnpm/@radix-ui_react-dialog@1.1.14_@types_react-dom@19.1.7_@types_react@19.1.9__@types_react@19.1._i7gyttlqowrnok6rwi63tbbmni/node_modules/@radix-ui/react-dialog/dist/index.js';
8
8
 
9
9
  const dialogContent = cva(styles.dialogContent);
10
- const DialogContent = forwardRef(({ className, children, ariaLabel, ariaDescription, overlayBlur = false, overlayClassName, overlayStyle, width, ...props }, ref) => (jsxs(Portal, { children: [jsx(Overlay, { className: cx(styles.dialogOverlay, overlayClassName, overlayBlur && styles.overlayBlur), style: overlayStyle, "aria-hidden": 'true', role: 'presentation' }), jsx(Content, { ref: ref, className: dialogContent({ className }), style: { width, ...props.style }, "aria-label": ariaLabel, "aria-describedby": ariaDescription ? 'dialog-description' : undefined, ...props, children: children })] })));
10
+ const DialogContent = forwardRef(({ className, children, ariaLabel, ariaDescription, overlayBlur = false, overlayClassName, overlayStyle, width, scrollableOverlay = false, ...props }, ref) => {
11
+ const overlayProps = {
12
+ className: cx(styles.dialogOverlay, overlayClassName, overlayBlur && styles.overlayBlur),
13
+ style: overlayStyle,
14
+ 'aria-hidden': 'true',
15
+ role: 'presentation'
16
+ };
17
+ const content = (jsx(Content, { ref: ref, className: dialogContent({ className }), style: { width, ...props.style }, "aria-label": ariaLabel, "aria-describedby": ariaDescription ? 'dialog-description' : undefined, ...props, children: children }));
18
+ return (jsx(Portal, { children: scrollableOverlay ? (jsx(Overlay, { ...overlayProps, children: content })) : (jsxs(Fragment, { children: [jsx(Overlay, { ...overlayProps }), content] })) }));
19
+ });
11
20
  DialogContent.displayName = Content.displayName;
12
21
  const DialogHeader = ({ children, className }) => (jsx(Flex, { justify: 'between', align: 'center', className: cx(styles.header, className), children: children }));
13
22
  const DialogFooter = ({ children, className }) => (jsx(Flex, { gap: 5, justify: 'end', className: cx(styles.footer, className), children: children }));
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sources":["../../../components/dialog/dialog.tsx"],"sourcesContent":["import { Cross1Icon } from '@radix-ui/react-icons';\nimport { VariantProps, cva, cx } from 'class-variance-authority';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n ElementRef,\n forwardRef\n} from 'react';\nimport { Flex } from '../flex';\nimport styles from './dialog.module.css';\n\nconst dialogContent = cva(styles.dialogContent);\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof dialogContent> {\n ariaLabel?: string;\n ariaDescription?: string;\n overlayBlur?: boolean;\n overlayClassName?: string;\n overlayStyle?: React.CSSProperties;\n width?: string | number;\n}\n\nconst DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n ariaLabel,\n ariaDescription,\n overlayBlur = false,\n overlayClassName,\n overlayStyle,\n width,\n ...props\n },\n ref\n ) => (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cx(\n styles.dialogOverlay,\n overlayClassName,\n overlayBlur && styles.overlayBlur\n )}\n style={overlayStyle}\n aria-hidden='true'\n role='presentation'\n />\n <DialogPrimitive.Content\n ref={ref}\n className={dialogContent({ className })}\n style={{ width, ...props.style }}\n aria-label={ariaLabel}\n aria-describedby={ariaDescription ? 'dialog-description' : undefined}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )\n);\n\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex\n justify='between'\n align='center'\n className={cx(styles.header, className)}\n >\n {children}\n </Flex>\n);\n\nconst DialogFooter = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex gap={5} justify='end' className={cx(styles.footer, className)}>\n {children}\n </Flex>\n);\n\nconst DialogBody = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex direction='column' gap={3} className={cx(styles.body, className)}>\n {children}\n </Flex>\n);\n\ntype CloseButtonProps = ComponentProps<typeof DialogPrimitive.Close>;\nexport function CloseButton({ className, ...props }: CloseButtonProps) {\n return (\n <DialogPrimitive.Close\n className={cx(styles.close, className)}\n aria-label='Close dialog'\n {...props}\n >\n <Cross1Icon />\n </DialogPrimitive.Close>\n );\n}\n\ninterface DialogTitleProps\n extends ComponentProps<typeof DialogPrimitive.Title> {\n children: React.ReactNode;\n}\n\nfunction DialogTitle({ children, className, ...props }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n {...props}\n role='heading'\n aria-level={1}\n className={cx(styles.title, className)}\n >\n {children}\n </DialogPrimitive.Title>\n );\n}\n\ninterface DialogDescriptionProps\n extends ComponentProps<typeof DialogPrimitive.Description> {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction DialogDescription({\n children,\n className,\n ...props\n}: DialogDescriptionProps) {\n return (\n <DialogPrimitive.Description\n {...props}\n className={cx(styles.description, className)}\n id='dialog-description'\n role='document'\n >\n {children}\n </DialogPrimitive.Description>\n );\n}\n\nexport const Dialog = Object.assign(DialogPrimitive.Root, {\n Trigger: DialogPrimitive.Trigger,\n Content: DialogContent,\n Header: DialogHeader,\n Footer: DialogFooter,\n Body: DialogBody,\n Close: DialogPrimitive.Close,\n CloseButton: CloseButton,\n Title: DialogTitle,\n Description: DialogDescription\n});\n"],"names":["_jsxs","DialogPrimitive.Portal","_jsx","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","DialogPrimitive.Root","DialogPrimitive.Trigger"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.js","sources":["../../../components/dialog/dialog.tsx"],"sourcesContent":["import { Cross1Icon } from '@radix-ui/react-icons';\nimport { VariantProps, cva, cx } from 'class-variance-authority';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n ElementRef,\n forwardRef\n} from 'react';\nimport { Flex } from '../flex';\nimport styles from './dialog.module.css';\n\nconst dialogContent = cva(styles.dialogContent);\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof dialogContent> {\n ariaLabel?: string;\n ariaDescription?: string;\n overlayBlur?: boolean;\n overlayClassName?: string;\n overlayStyle?: React.CSSProperties;\n width?: string | number;\n scrollableOverlay?: boolean;\n}\n\nconst DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n ariaLabel,\n ariaDescription,\n overlayBlur = false,\n overlayClassName,\n overlayStyle,\n width,\n scrollableOverlay = false,\n ...props\n },\n ref\n ) => {\n const overlayProps: DialogPrimitive.DialogOverlayProps = {\n className: cx(\n styles.dialogOverlay,\n overlayClassName,\n overlayBlur && styles.overlayBlur\n ),\n style: overlayStyle,\n 'aria-hidden': 'true',\n role: 'presentation'\n };\n\n const content = (\n <DialogPrimitive.Content\n ref={ref}\n className={dialogContent({ className })}\n style={{ width, ...props.style }}\n aria-label={ariaLabel}\n aria-describedby={ariaDescription ? 'dialog-description' : undefined}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n );\n return (\n <DialogPrimitive.Portal>\n {scrollableOverlay ? (\n <DialogPrimitive.Overlay {...overlayProps}>\n {content}\n </DialogPrimitive.Overlay>\n ) : (\n <>\n <DialogPrimitive.Overlay {...overlayProps} />\n {content}\n </>\n )}\n </DialogPrimitive.Portal>\n );\n }\n);\n\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex\n justify='between'\n align='center'\n className={cx(styles.header, className)}\n >\n {children}\n </Flex>\n);\n\nconst DialogFooter = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex gap={5} justify='end' className={cx(styles.footer, className)}>\n {children}\n </Flex>\n);\n\nconst DialogBody = ({\n children,\n className\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Flex direction='column' gap={3} className={cx(styles.body, className)}>\n {children}\n </Flex>\n);\n\ntype CloseButtonProps = ComponentProps<typeof DialogPrimitive.Close>;\nexport function CloseButton({ className, ...props }: CloseButtonProps) {\n return (\n <DialogPrimitive.Close\n className={cx(styles.close, className)}\n aria-label='Close dialog'\n {...props}\n >\n <Cross1Icon />\n </DialogPrimitive.Close>\n );\n}\n\ninterface DialogTitleProps\n extends ComponentProps<typeof DialogPrimitive.Title> {\n children: React.ReactNode;\n}\n\nfunction DialogTitle({ children, className, ...props }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n {...props}\n role='heading'\n aria-level={1}\n className={cx(styles.title, className)}\n >\n {children}\n </DialogPrimitive.Title>\n );\n}\n\ninterface DialogDescriptionProps\n extends ComponentProps<typeof DialogPrimitive.Description> {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction DialogDescription({\n children,\n className,\n ...props\n}: DialogDescriptionProps) {\n return (\n <DialogPrimitive.Description\n {...props}\n className={cx(styles.description, className)}\n id='dialog-description'\n role='document'\n >\n {children}\n </DialogPrimitive.Description>\n );\n}\n\nexport const Dialog = Object.assign(DialogPrimitive.Root, {\n Trigger: DialogPrimitive.Trigger,\n Content: DialogContent,\n Header: DialogHeader,\n Footer: DialogFooter,\n Body: DialogBody,\n Close: DialogPrimitive.Close,\n CloseButton: CloseButton,\n Title: DialogTitle,\n Description: DialogDescription\n});\n"],"names":["_jsx","DialogPrimitive.Content","DialogPrimitive.Portal","DialogPrimitive.Overlay","_jsxs","_Fragment","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","DialogPrimitive.Root","DialogPrimitive.Trigger"],"mappings":";;;;;;;;AAYA,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAchD,MAAM,aAAa,GAAG,UAAU,CAI9B,CACE,EACE,SAAS,EACT,QAAQ,EACR,SAAS,EACT,eAAe,EACf,WAAW,GAAG,KAAK,EACnB,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,iBAAiB,GAAG,KAAK,EACzB,GAAG,KAAK,EACT,EACD,GAAG,KACD;AACF,IAAA,MAAM,YAAY,GAAuC;AACvD,QAAA,SAAS,EAAE,EAAE,CACX,MAAM,CAAC,aAAa,EACpB,gBAAgB,EAChB,WAAW,IAAI,MAAM,CAAC,WAAW,CAClC;AACD,QAAA,KAAK,EAAE,YAAY;AACnB,QAAA,aAAa,EAAE,MAAM;AACrB,QAAA,IAAI,EAAE,cAAc;KACrB,CAAC;IAEF,MAAM,OAAO,IACXA,GAAA,CAACC,OAAuB,EACtB,EAAA,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,EACvC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,EACpB,YAAA,EAAA,SAAS,EACH,kBAAA,EAAA,eAAe,GAAG,oBAAoB,GAAG,SAAS,EAAA,GAChE,KAAK,EAER,QAAA,EAAA,QAAQ,EACe,CAAA,CAC3B,CAAC;AACF,IAAA,QACED,GAAC,CAAAE,MAAsB,cACpB,iBAAiB,IAChBF,GAAC,CAAAG,OAAuB,EAAA,EAAA,GAAK,YAAY,EACtC,QAAA,EAAA,OAAO,EACgB,CAAA,KAE1BC,IACE,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CAAAL,GAAA,CAACG,OAAuB,EAAK,EAAA,GAAA,YAAY,GAAI,EAC5C,OAAO,IACP,CACJ,EAAA,CACsB,EACzB;AACJ,CAAC,CACF,CAAC;AAEF,aAAa,CAAC,WAAW,GAAGF,OAAuB,CAAC,WAAW,CAAC;AAEhE,MAAM,YAAY,GAAG,CAAC,EACpB,QAAQ,EACR,SAAS,EAIV,MACCD,GAAA,CAAC,IAAI,EAAA,EACH,OAAO,EAAC,SAAS,EACjB,KAAK,EAAC,QAAQ,EACd,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,YAEtC,QAAQ,EAAA,CACJ,CACR,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,EACpB,QAAQ,EACR,SAAS,EAIV,MACCA,GAAA,CAAC,IAAI,EAAA,EAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAC,KAAK,EAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,YAChE,QAAQ,EAAA,CACJ,CACR,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,EAClB,QAAQ,EACR,SAAS,EAIV,MACCA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,YACnE,QAAQ,EAAA,CACJ,CACR,CAAC;AAGI,SAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB,EAAA;IACnE,QACEA,GAAC,CAAAM,KAAqB,EACpB,EAAA,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,EAC3B,YAAA,EAAA,cAAc,EACrB,GAAA,KAAK,EAET,QAAA,EAAAN,GAAA,CAAC,UAAU,EAAA,EAAA,CAAG,EACQ,CAAA,EACxB;AACJ,CAAC;AAOD,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB,EAAA;AACtE,IAAA,QACEA,GAAA,CAACO,KAAqB,EAAA,EAAA,GAChB,KAAK,EACT,IAAI,EAAC,SAAS,EAAA,YAAA,EACF,CAAC,EACb,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,EAErC,QAAA,EAAA,QAAQ,EACa,CAAA,EACxB;AACJ,CAAC;AAQD,SAAS,iBAAiB,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACe,EAAA;AACvB,IAAA,QACEP,GAAA,CAACQ,WAA2B,EAAA,EAAA,GACtB,KAAK,EACT,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,EAC5C,EAAE,EAAC,oBAAoB,EACvB,IAAI,EAAC,UAAU,EAAA,QAAA,EAEd,QAAQ,EAAA,CACmB,EAC9B;AACJ,CAAC;AAEY,MAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAACC,IAAoB,EAAE;IACxD,OAAO,EAAEC,OAAuB;AAChC,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,IAAI,EAAE,UAAU;IAChB,KAAK,EAAEJ,KAAqB;AAC5B,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,WAAW,EAAE,iBAAiB;AAC/B,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-root.cjs","sources":["../../../components/select/select-root.tsx"],"sourcesContent":["'use client';\n\nimport { ComboboxProvider } from '@ariakit/react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { ItemType } from './types';\n\ninterface CommonProps {\n autocomplete?: boolean;\n autocompleteMode?: 'auto' | 'manual';\n searchValue?: string;\n onSearch?: (value: string) => void;\n defaultSearchValue?: string;\n}\n\ninterface SelectContextValue extends CommonProps {\n value?: string | string[];\n registerItem: (item: ItemType) => void;\n unregisterItem: (value: string) => void;\n multiple: boolean;\n items: Record<string, ItemType>;\n updateSelectionInProgress: (value: boolean) => void;\n setValue: (value: string) => void;\n}\n\ninterface UseSelectContext extends SelectContextValue {\n shouldFilter?: boolean;\n}\n\n/*\nRoot context to manage the Select control\n@remarks Only for internal usage.\n*/\nconst SelectContext = createContext<SelectContextValue | undefined>(undefined);\n\nexport const useSelectContext = (): UseSelectContext => {\n const context = useContext(SelectContext);\n if (!context) {\n throw new Error('useSelectContext must be used within a SelectProvider');\n }\n const shouldFilter = !!(\n context?.autocomplete &&\n context?.autocompleteMode === 'auto' &&\n context?.searchValue?.length\n );\n return {\n ...context,\n shouldFilter\n };\n};\n\ninterface NormalSelectRootProps extends SelectPrimitive.SelectProps {\n autocomplete?: false;\n autocompleteMode?: never;\n searchValue?: never;\n onSearch?: never;\n defaultSearchValue?: never;\n}\n\ninterface AutocompleteSelectRootProps\n extends SelectPrimitive.SelectProps,\n CommonProps {\n autocomplete: true;\n}\n\ntype BaseSelectProps = Omit<\n NormalSelectRootProps | AutocompleteSelectRootProps,\n 'autoComplete' | 'value' | 'onValueChange' | 'defaultValue'\n> & {\n htmlAutoComplete?: string;\n};\n\ninterface SingleSelectProps extends BaseSelectProps {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n}\n\ninterface MultipleSelectProps extends BaseSelectProps {\n multiple: true;\n value?: string[];\n onValueChange?: (value: string[]) => void;\n defaultValue?: string[];\n}\n\nexport type SelectRootProps = SingleSelectProps | MultipleSelectProps;\n\nconst SELECT_INTERNAL_VALUE = 'SELECT_INTERNAL_VALUE';\n\nexport const SelectRoot = (props: SelectRootProps) => {\n const {\n children,\n value: providedValue,\n onValueChange,\n defaultValue,\n autocomplete,\n autocompleteMode = 'auto',\n searchValue: providedSearchValue,\n onSearch,\n defaultSearchValue = '',\n open: providedOpen,\n defaultOpen = false,\n onOpenChange,\n htmlAutoComplete,\n multiple = false,\n ...rest\n } = props;\n\n const [internalValue, setInternalValue] = useState<\n string | string[] | undefined\n >(defaultValue);\n const [internalSearchValue, setInternalSearchValue] =\n useState(defaultSearchValue);\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [items, setItems] = useState<SelectContextValue['items']>({});\n const id = useId();\n const isSelectionInProgress = useRef(false);\n\n const computedValue = providedValue ?? internalValue;\n const searchValue = providedSearchValue ?? internalSearchValue;\n const open = providedOpen ?? internalOpen;\n\n const updateSelectionInProgress = useCallback((value: boolean) => {\n isSelectionInProgress.current = value;\n }, []);\n\n const setValue = useCallback(\n (value: string) => {\n /*\n * If the select is placed inside a form, onChange is called with an empty value\n * WORKAROUND FOR ISSUE https://github.com/radix-ui/primitives/issues/3135\n */\n if (value === '') return;\n\n if (multiple) {\n updateSelectionInProgress(true);\n const set = new Set<string>(\n Array.isArray(computedValue)\n ? computedValue\n : [computedValue ?? ''].filter(Boolean)\n );\n\n if (set.has(value)) set.delete(value);\n else set.add(value);\n\n const newValue = Array.from(set);\n\n setInternalValue(newValue);\n (onValueChange as MultipleSelectProps['onValueChange'])?.(newValue);\n } else {\n setInternalValue(value);\n (onValueChange as SingleSelectProps['onValueChange'])?.(value);\n }\n },\n [multiple, onValueChange, computedValue, updateSelectionInProgress]\n );\n\n const setSearchValue = useCallback(\n (value: string) => {\n setInternalSearchValue(value);\n onSearch?.(value);\n },\n [onSearch]\n );\n\n const handleOpenChange = useCallback(\n (value: boolean) => {\n if (isSelectionInProgress.current) return;\n setInternalOpen(value);\n onOpenChange?.(value);\n },\n [onOpenChange]\n );\n\n const registerItem = useCallback<SelectContextValue['registerItem']>(item => {\n setItems(prev => ({ ...prev, [item.value]: item }));\n }, []);\n\n const unregisterItem = useCallback<SelectContextValue['unregisterItem']>(\n value => {\n setItems(prev => {\n const { [value]: _, ...rest } = prev;\n return rest;\n });\n },\n []\n );\n\n /*\n * Radix internally shows the placeholder when the value is empty.\n * This value is used to manage the internal value of Radix Select to make it work\n */\n const radixValue = useMemo(() => {\n if (!computedValue) return '';\n if (typeof computedValue === 'string') return computedValue;\n if (Array.isArray(computedValue) && computedValue.length)\n return `${SELECT_INTERNAL_VALUE}-${id}`;\n return String(computedValue) ?? '';\n }, [computedValue, id]);\n\n const element = (\n <ComboboxProvider\n resetValueOnHide\n focusLoop={false}\n includesBaseElement={false}\n value={searchValue}\n setValue={setSearchValue}\n open={open}\n setOpen={handleOpenChange}\n >\n {children}\n </ComboboxProvider>\n );\n\n return (\n <SelectContext.Provider\n value={{\n value: computedValue,\n registerItem,\n unregisterItem,\n autocomplete,\n autocompleteMode,\n searchValue,\n multiple,\n items,\n updateSelectionInProgress,\n setValue\n }}\n >\n <SelectPrimitive.Root\n autoComplete={htmlAutoComplete}\n value={radixValue}\n onValueChange={setValue}\n open={open}\n onOpenChange={handleOpenChange}\n {...rest}\n >\n {autocomplete ? element : children}\n </SelectPrimitive.Root>\n </SelectContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAqCA;;;AAGE;AACF;AAEO;AACL;;AAEE;;AAEF;;AAGE;;AAGA;;;AAGJ;AAuCA;AAEa;;;;;;AA0BX;AACA;AAEA;AACA;AACA;AAEA;AACE;;AAGF;AAEI;;;AAGG;;;;;;AAOG;AACA;AAGJ;AAAoB;;AACf;;;AAKJ;;;;AAGA;;;AAMP;;AAGI;AACF;AAIF;;;;AAII;AACF;AAIF;;;AAIA;;AAGM;AACA;AACF;;AAKJ;;;AAGG;AACH;AACE;AAAoB;;AACmB;;AAErC;AACF;AACF;AAEA;AAcA;AAGM;;;;;;;;;;AAUD;AAcP;;;"}
1
+ {"version":3,"file":"select-root.cjs","sources":["../../../components/select/select-root.tsx"],"sourcesContent":["'use client';\n\nimport { ComboboxProvider } from '@ariakit/react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { ItemType } from './types';\n\ninterface CommonProps {\n autocomplete?: boolean;\n autocompleteMode?: 'auto' | 'manual';\n searchValue?: string;\n onSearch?: (value: string) => void;\n defaultSearchValue?: string;\n}\n\ninterface SelectContextValue extends CommonProps {\n value?: string | string[];\n registerItem: (item: ItemType) => void;\n unregisterItem: (value: string) => void;\n multiple: boolean;\n items: Record<string, ItemType>;\n updateSelectionInProgress: (value: boolean) => void;\n setValue: (value: string) => void;\n}\n\ninterface UseSelectContext extends SelectContextValue {\n shouldFilter?: boolean;\n}\n\n/*\nRoot context to manage the Select control\n@remarks Only for internal usage.\n*/\nconst SelectContext = createContext<SelectContextValue | undefined>(undefined);\n\nexport const useSelectContext = (): UseSelectContext => {\n const context = useContext(SelectContext);\n if (!context) {\n throw new Error('useSelectContext must be used within a SelectProvider');\n }\n const shouldFilter = !!(\n context?.autocomplete &&\n context?.autocompleteMode === 'auto' &&\n context?.searchValue?.length\n );\n return {\n ...context,\n shouldFilter\n };\n};\n\ninterface NormalSelectRootProps extends SelectPrimitive.SelectProps {\n autocomplete?: false;\n autocompleteMode?: never;\n searchValue?: never;\n onSearch?: never;\n defaultSearchValue?: never;\n}\n\ninterface AutocompleteSelectRootProps\n extends SelectPrimitive.SelectProps,\n CommonProps {\n autocomplete: true;\n}\n\ntype BaseSelectProps = Omit<\n NormalSelectRootProps | AutocompleteSelectRootProps,\n 'autoComplete' | 'value' | 'onValueChange' | 'defaultValue'\n> & {\n htmlAutoComplete?: string;\n};\n\nexport interface SingleSelectProps extends BaseSelectProps {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n}\n\nexport interface MultipleSelectProps extends BaseSelectProps {\n multiple: true;\n value?: string[];\n onValueChange?: (value: string[]) => void;\n defaultValue?: string[];\n}\n\nexport type SelectRootProps = SingleSelectProps | MultipleSelectProps;\n\nconst SELECT_INTERNAL_VALUE = 'SELECT_INTERNAL_VALUE';\n\nexport const SelectRoot = (props: SelectRootProps) => {\n const {\n children,\n value: providedValue,\n onValueChange,\n defaultValue,\n autocomplete,\n autocompleteMode = 'auto',\n searchValue: providedSearchValue,\n onSearch,\n defaultSearchValue = '',\n open: providedOpen,\n defaultOpen = false,\n onOpenChange,\n htmlAutoComplete,\n multiple = false,\n ...rest\n } = props;\n\n const [internalValue, setInternalValue] = useState<\n string | string[] | undefined\n >(defaultValue);\n const [internalSearchValue, setInternalSearchValue] =\n useState(defaultSearchValue);\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [items, setItems] = useState<SelectContextValue['items']>({});\n const id = useId();\n const isSelectionInProgress = useRef(false);\n\n const computedValue = providedValue ?? internalValue;\n const searchValue = providedSearchValue ?? internalSearchValue;\n const open = providedOpen ?? internalOpen;\n\n const updateSelectionInProgress = useCallback((value: boolean) => {\n isSelectionInProgress.current = value;\n }, []);\n\n const setValue = useCallback(\n (value: string) => {\n /*\n * If the select is placed inside a form, onChange is called with an empty value\n * WORKAROUND FOR ISSUE https://github.com/radix-ui/primitives/issues/3135\n */\n if (value === '') return;\n\n if (multiple) {\n updateSelectionInProgress(true);\n const set = new Set<string>(\n Array.isArray(computedValue)\n ? computedValue\n : [computedValue ?? ''].filter(Boolean)\n );\n\n if (set.has(value)) set.delete(value);\n else set.add(value);\n\n const newValue = Array.from(set);\n\n setInternalValue(newValue);\n (onValueChange as MultipleSelectProps['onValueChange'])?.(newValue);\n } else {\n setInternalValue(value);\n (onValueChange as SingleSelectProps['onValueChange'])?.(value);\n }\n },\n [multiple, onValueChange, computedValue, updateSelectionInProgress]\n );\n\n const setSearchValue = useCallback(\n (value: string) => {\n setInternalSearchValue(value);\n onSearch?.(value);\n },\n [onSearch]\n );\n\n const handleOpenChange = useCallback(\n (value: boolean) => {\n if (isSelectionInProgress.current) return;\n setInternalOpen(value);\n onOpenChange?.(value);\n },\n [onOpenChange]\n );\n\n const registerItem = useCallback<SelectContextValue['registerItem']>(item => {\n setItems(prev => ({ ...prev, [item.value]: item }));\n }, []);\n\n const unregisterItem = useCallback<SelectContextValue['unregisterItem']>(\n value => {\n setItems(prev => {\n const { [value]: _, ...rest } = prev;\n return rest;\n });\n },\n []\n );\n\n /*\n * Radix internally shows the placeholder when the value is empty.\n * This value is used to manage the internal value of Radix Select to make it work\n */\n const radixValue = useMemo(() => {\n if (!computedValue) return '';\n if (typeof computedValue === 'string') return computedValue;\n if (Array.isArray(computedValue) && computedValue.length)\n return `${SELECT_INTERNAL_VALUE}-${id}`;\n return String(computedValue) ?? '';\n }, [computedValue, id]);\n\n const element = (\n <ComboboxProvider\n resetValueOnHide\n focusLoop={false}\n includesBaseElement={false}\n value={searchValue}\n setValue={setSearchValue}\n open={open}\n setOpen={handleOpenChange}\n >\n {children}\n </ComboboxProvider>\n );\n\n return (\n <SelectContext.Provider\n value={{\n value: computedValue,\n registerItem,\n unregisterItem,\n autocomplete,\n autocompleteMode,\n searchValue,\n multiple,\n items,\n updateSelectionInProgress,\n setValue\n }}\n >\n <SelectPrimitive.Root\n autoComplete={htmlAutoComplete}\n value={radixValue}\n onValueChange={setValue}\n open={open}\n onOpenChange={handleOpenChange}\n {...rest}\n >\n {autocomplete ? element : children}\n </SelectPrimitive.Root>\n </SelectContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAqCA;;;AAGE;AACF;AAEO;AACL;;AAEE;;AAEF;;AAGE;;AAGA;;;AAGJ;AAuCA;AAEa;;;;;;AA0BX;AACA;AAEA;AACA;AACA;AAEA;AACE;;AAGF;AAEI;;;AAGG;;;;;;AAOG;AACA;AAGJ;AAAoB;;AACf;;;AAKJ;;;;AAGA;;;AAMP;;AAGI;AACF;AAIF;;;;AAII;AACF;AAIF;;;AAIA;;AAGM;AACA;AACF;;AAKJ;;;AAGG;AACH;AACE;AAAoB;;AACmB;;AAErC;AACF;AACF;AAEA;AAcA;AAGM;;;;;;;;;;AAUD;AAcP;;;"}
@@ -33,13 +33,13 @@ interface AutocompleteSelectRootProps extends SelectPrimitive.SelectProps, Commo
33
33
  type BaseSelectProps = Omit<NormalSelectRootProps | AutocompleteSelectRootProps, 'autoComplete' | 'value' | 'onValueChange' | 'defaultValue'> & {
34
34
  htmlAutoComplete?: string;
35
35
  };
36
- interface SingleSelectProps extends BaseSelectProps {
36
+ export interface SingleSelectProps extends BaseSelectProps {
37
37
  multiple?: false;
38
38
  value?: string;
39
39
  onValueChange?: (value: string) => void;
40
40
  defaultValue?: string;
41
41
  }
42
- interface MultipleSelectProps extends BaseSelectProps {
42
+ export interface MultipleSelectProps extends BaseSelectProps {
43
43
  multiple: true;
44
44
  value?: string[];
45
45
  onValueChange?: (value: string[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"select-root.d.ts","sourceRoot":"","sources":["../../../components/select/select-root.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAUrD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,kBAAmB,SAAQ,WAAW;IAC9C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,UAAU,gBAAiB,SAAQ,kBAAkB;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAQD,eAAO,MAAM,gBAAgB,QAAO,gBAcnC,CAAC;AAEF,UAAU,qBAAsB,SAAQ,eAAe,CAAC,WAAW;IACjE,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B;AAED,UAAU,2BACR,SAAQ,eAAe,CAAC,WAAW,EACjC,WAAW;IACb,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,KAAK,eAAe,GAAG,IAAI,CACzB,qBAAqB,GAAG,2BAA2B,EACnD,cAAc,GAAG,OAAO,GAAG,eAAe,GAAG,cAAc,CAC5D,GAAG;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,UAAU,iBAAkB,SAAQ,eAAe;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,mBAAoB,SAAQ,eAAe;IACnD,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAItE,eAAO,MAAM,UAAU,UAAW,eAAe,4CAwJhD,CAAC"}
1
+ {"version":3,"file":"select-root.d.ts","sourceRoot":"","sources":["../../../components/select/select-root.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAUrD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,kBAAmB,SAAQ,WAAW;IAC9C,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,UAAU,gBAAiB,SAAQ,kBAAkB;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAQD,eAAO,MAAM,gBAAgB,QAAO,gBAcnC,CAAC;AAEF,UAAU,qBAAsB,SAAQ,eAAe,CAAC,WAAW;IACjE,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B;AAED,UAAU,2BACR,SAAQ,eAAe,CAAC,WAAW,EACjC,WAAW;IACb,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,KAAK,eAAe,GAAG,IAAI,CACzB,qBAAqB,GAAG,2BAA2B,EACnD,cAAc,GAAG,OAAO,GAAG,eAAe,GAAG,cAAc,CAC5D,GAAG;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAItE,eAAO,MAAM,UAAU,UAAW,eAAe,4CAwJhD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-root.js","sources":["../../../components/select/select-root.tsx"],"sourcesContent":["'use client';\n\nimport { ComboboxProvider } from '@ariakit/react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { ItemType } from './types';\n\ninterface CommonProps {\n autocomplete?: boolean;\n autocompleteMode?: 'auto' | 'manual';\n searchValue?: string;\n onSearch?: (value: string) => void;\n defaultSearchValue?: string;\n}\n\ninterface SelectContextValue extends CommonProps {\n value?: string | string[];\n registerItem: (item: ItemType) => void;\n unregisterItem: (value: string) => void;\n multiple: boolean;\n items: Record<string, ItemType>;\n updateSelectionInProgress: (value: boolean) => void;\n setValue: (value: string) => void;\n}\n\ninterface UseSelectContext extends SelectContextValue {\n shouldFilter?: boolean;\n}\n\n/*\nRoot context to manage the Select control\n@remarks Only for internal usage.\n*/\nconst SelectContext = createContext<SelectContextValue | undefined>(undefined);\n\nexport const useSelectContext = (): UseSelectContext => {\n const context = useContext(SelectContext);\n if (!context) {\n throw new Error('useSelectContext must be used within a SelectProvider');\n }\n const shouldFilter = !!(\n context?.autocomplete &&\n context?.autocompleteMode === 'auto' &&\n context?.searchValue?.length\n );\n return {\n ...context,\n shouldFilter\n };\n};\n\ninterface NormalSelectRootProps extends SelectPrimitive.SelectProps {\n autocomplete?: false;\n autocompleteMode?: never;\n searchValue?: never;\n onSearch?: never;\n defaultSearchValue?: never;\n}\n\ninterface AutocompleteSelectRootProps\n extends SelectPrimitive.SelectProps,\n CommonProps {\n autocomplete: true;\n}\n\ntype BaseSelectProps = Omit<\n NormalSelectRootProps | AutocompleteSelectRootProps,\n 'autoComplete' | 'value' | 'onValueChange' | 'defaultValue'\n> & {\n htmlAutoComplete?: string;\n};\n\ninterface SingleSelectProps extends BaseSelectProps {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n}\n\ninterface MultipleSelectProps extends BaseSelectProps {\n multiple: true;\n value?: string[];\n onValueChange?: (value: string[]) => void;\n defaultValue?: string[];\n}\n\nexport type SelectRootProps = SingleSelectProps | MultipleSelectProps;\n\nconst SELECT_INTERNAL_VALUE = 'SELECT_INTERNAL_VALUE';\n\nexport const SelectRoot = (props: SelectRootProps) => {\n const {\n children,\n value: providedValue,\n onValueChange,\n defaultValue,\n autocomplete,\n autocompleteMode = 'auto',\n searchValue: providedSearchValue,\n onSearch,\n defaultSearchValue = '',\n open: providedOpen,\n defaultOpen = false,\n onOpenChange,\n htmlAutoComplete,\n multiple = false,\n ...rest\n } = props;\n\n const [internalValue, setInternalValue] = useState<\n string | string[] | undefined\n >(defaultValue);\n const [internalSearchValue, setInternalSearchValue] =\n useState(defaultSearchValue);\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [items, setItems] = useState<SelectContextValue['items']>({});\n const id = useId();\n const isSelectionInProgress = useRef(false);\n\n const computedValue = providedValue ?? internalValue;\n const searchValue = providedSearchValue ?? internalSearchValue;\n const open = providedOpen ?? internalOpen;\n\n const updateSelectionInProgress = useCallback((value: boolean) => {\n isSelectionInProgress.current = value;\n }, []);\n\n const setValue = useCallback(\n (value: string) => {\n /*\n * If the select is placed inside a form, onChange is called with an empty value\n * WORKAROUND FOR ISSUE https://github.com/radix-ui/primitives/issues/3135\n */\n if (value === '') return;\n\n if (multiple) {\n updateSelectionInProgress(true);\n const set = new Set<string>(\n Array.isArray(computedValue)\n ? computedValue\n : [computedValue ?? ''].filter(Boolean)\n );\n\n if (set.has(value)) set.delete(value);\n else set.add(value);\n\n const newValue = Array.from(set);\n\n setInternalValue(newValue);\n (onValueChange as MultipleSelectProps['onValueChange'])?.(newValue);\n } else {\n setInternalValue(value);\n (onValueChange as SingleSelectProps['onValueChange'])?.(value);\n }\n },\n [multiple, onValueChange, computedValue, updateSelectionInProgress]\n );\n\n const setSearchValue = useCallback(\n (value: string) => {\n setInternalSearchValue(value);\n onSearch?.(value);\n },\n [onSearch]\n );\n\n const handleOpenChange = useCallback(\n (value: boolean) => {\n if (isSelectionInProgress.current) return;\n setInternalOpen(value);\n onOpenChange?.(value);\n },\n [onOpenChange]\n );\n\n const registerItem = useCallback<SelectContextValue['registerItem']>(item => {\n setItems(prev => ({ ...prev, [item.value]: item }));\n }, []);\n\n const unregisterItem = useCallback<SelectContextValue['unregisterItem']>(\n value => {\n setItems(prev => {\n const { [value]: _, ...rest } = prev;\n return rest;\n });\n },\n []\n );\n\n /*\n * Radix internally shows the placeholder when the value is empty.\n * This value is used to manage the internal value of Radix Select to make it work\n */\n const radixValue = useMemo(() => {\n if (!computedValue) return '';\n if (typeof computedValue === 'string') return computedValue;\n if (Array.isArray(computedValue) && computedValue.length)\n return `${SELECT_INTERNAL_VALUE}-${id}`;\n return String(computedValue) ?? '';\n }, [computedValue, id]);\n\n const element = (\n <ComboboxProvider\n resetValueOnHide\n focusLoop={false}\n includesBaseElement={false}\n value={searchValue}\n setValue={setSearchValue}\n open={open}\n setOpen={handleOpenChange}\n >\n {children}\n </ComboboxProvider>\n );\n\n return (\n <SelectContext.Provider\n value={{\n value: computedValue,\n registerItem,\n unregisterItem,\n autocomplete,\n autocompleteMode,\n searchValue,\n multiple,\n items,\n updateSelectionInProgress,\n setValue\n }}\n >\n <SelectPrimitive.Root\n autoComplete={htmlAutoComplete}\n value={radixValue}\n onValueChange={setValue}\n open={open}\n onOpenChange={handleOpenChange}\n {...rest}\n >\n {autocomplete ? element : children}\n </SelectPrimitive.Root>\n </SelectContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;AAqCA;;;AAGE;AACF;AAEO;AACL;;AAEE;;AAEF;;AAGE;;AAGA;;;AAGJ;AAuCA;AAEa;;;;;;AA0BX;AACA;AAEA;AACA;AACA;AAEA;AACE;;AAGF;AAEI;;;AAGG;;;;;;AAOG;AACA;AAGJ;AAAoB;;AACf;;;AAKJ;;;;AAGA;;;AAMP;;AAGI;AACF;AAIF;;;;AAII;AACF;AAIF;;;AAIA;;AAGM;AACA;AACF;;AAKJ;;;AAGG;AACH;AACE;AAAoB;;AACmB;;AAErC;AACF;AACF;AAEA;AAcA;AAGM;;;;;;;;;;AAUD;AAcP;;"}
1
+ {"version":3,"file":"select-root.js","sources":["../../../components/select/select-root.tsx"],"sourcesContent":["'use client';\n\nimport { ComboboxProvider } from '@ariakit/react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { ItemType } from './types';\n\ninterface CommonProps {\n autocomplete?: boolean;\n autocompleteMode?: 'auto' | 'manual';\n searchValue?: string;\n onSearch?: (value: string) => void;\n defaultSearchValue?: string;\n}\n\ninterface SelectContextValue extends CommonProps {\n value?: string | string[];\n registerItem: (item: ItemType) => void;\n unregisterItem: (value: string) => void;\n multiple: boolean;\n items: Record<string, ItemType>;\n updateSelectionInProgress: (value: boolean) => void;\n setValue: (value: string) => void;\n}\n\ninterface UseSelectContext extends SelectContextValue {\n shouldFilter?: boolean;\n}\n\n/*\nRoot context to manage the Select control\n@remarks Only for internal usage.\n*/\nconst SelectContext = createContext<SelectContextValue | undefined>(undefined);\n\nexport const useSelectContext = (): UseSelectContext => {\n const context = useContext(SelectContext);\n if (!context) {\n throw new Error('useSelectContext must be used within a SelectProvider');\n }\n const shouldFilter = !!(\n context?.autocomplete &&\n context?.autocompleteMode === 'auto' &&\n context?.searchValue?.length\n );\n return {\n ...context,\n shouldFilter\n };\n};\n\ninterface NormalSelectRootProps extends SelectPrimitive.SelectProps {\n autocomplete?: false;\n autocompleteMode?: never;\n searchValue?: never;\n onSearch?: never;\n defaultSearchValue?: never;\n}\n\ninterface AutocompleteSelectRootProps\n extends SelectPrimitive.SelectProps,\n CommonProps {\n autocomplete: true;\n}\n\ntype BaseSelectProps = Omit<\n NormalSelectRootProps | AutocompleteSelectRootProps,\n 'autoComplete' | 'value' | 'onValueChange' | 'defaultValue'\n> & {\n htmlAutoComplete?: string;\n};\n\nexport interface SingleSelectProps extends BaseSelectProps {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n defaultValue?: string;\n}\n\nexport interface MultipleSelectProps extends BaseSelectProps {\n multiple: true;\n value?: string[];\n onValueChange?: (value: string[]) => void;\n defaultValue?: string[];\n}\n\nexport type SelectRootProps = SingleSelectProps | MultipleSelectProps;\n\nconst SELECT_INTERNAL_VALUE = 'SELECT_INTERNAL_VALUE';\n\nexport const SelectRoot = (props: SelectRootProps) => {\n const {\n children,\n value: providedValue,\n onValueChange,\n defaultValue,\n autocomplete,\n autocompleteMode = 'auto',\n searchValue: providedSearchValue,\n onSearch,\n defaultSearchValue = '',\n open: providedOpen,\n defaultOpen = false,\n onOpenChange,\n htmlAutoComplete,\n multiple = false,\n ...rest\n } = props;\n\n const [internalValue, setInternalValue] = useState<\n string | string[] | undefined\n >(defaultValue);\n const [internalSearchValue, setInternalSearchValue] =\n useState(defaultSearchValue);\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [items, setItems] = useState<SelectContextValue['items']>({});\n const id = useId();\n const isSelectionInProgress = useRef(false);\n\n const computedValue = providedValue ?? internalValue;\n const searchValue = providedSearchValue ?? internalSearchValue;\n const open = providedOpen ?? internalOpen;\n\n const updateSelectionInProgress = useCallback((value: boolean) => {\n isSelectionInProgress.current = value;\n }, []);\n\n const setValue = useCallback(\n (value: string) => {\n /*\n * If the select is placed inside a form, onChange is called with an empty value\n * WORKAROUND FOR ISSUE https://github.com/radix-ui/primitives/issues/3135\n */\n if (value === '') return;\n\n if (multiple) {\n updateSelectionInProgress(true);\n const set = new Set<string>(\n Array.isArray(computedValue)\n ? computedValue\n : [computedValue ?? ''].filter(Boolean)\n );\n\n if (set.has(value)) set.delete(value);\n else set.add(value);\n\n const newValue = Array.from(set);\n\n setInternalValue(newValue);\n (onValueChange as MultipleSelectProps['onValueChange'])?.(newValue);\n } else {\n setInternalValue(value);\n (onValueChange as SingleSelectProps['onValueChange'])?.(value);\n }\n },\n [multiple, onValueChange, computedValue, updateSelectionInProgress]\n );\n\n const setSearchValue = useCallback(\n (value: string) => {\n setInternalSearchValue(value);\n onSearch?.(value);\n },\n [onSearch]\n );\n\n const handleOpenChange = useCallback(\n (value: boolean) => {\n if (isSelectionInProgress.current) return;\n setInternalOpen(value);\n onOpenChange?.(value);\n },\n [onOpenChange]\n );\n\n const registerItem = useCallback<SelectContextValue['registerItem']>(item => {\n setItems(prev => ({ ...prev, [item.value]: item }));\n }, []);\n\n const unregisterItem = useCallback<SelectContextValue['unregisterItem']>(\n value => {\n setItems(prev => {\n const { [value]: _, ...rest } = prev;\n return rest;\n });\n },\n []\n );\n\n /*\n * Radix internally shows the placeholder when the value is empty.\n * This value is used to manage the internal value of Radix Select to make it work\n */\n const radixValue = useMemo(() => {\n if (!computedValue) return '';\n if (typeof computedValue === 'string') return computedValue;\n if (Array.isArray(computedValue) && computedValue.length)\n return `${SELECT_INTERNAL_VALUE}-${id}`;\n return String(computedValue) ?? '';\n }, [computedValue, id]);\n\n const element = (\n <ComboboxProvider\n resetValueOnHide\n focusLoop={false}\n includesBaseElement={false}\n value={searchValue}\n setValue={setSearchValue}\n open={open}\n setOpen={handleOpenChange}\n >\n {children}\n </ComboboxProvider>\n );\n\n return (\n <SelectContext.Provider\n value={{\n value: computedValue,\n registerItem,\n unregisterItem,\n autocomplete,\n autocompleteMode,\n searchValue,\n multiple,\n items,\n updateSelectionInProgress,\n setValue\n }}\n >\n <SelectPrimitive.Root\n autoComplete={htmlAutoComplete}\n value={radixValue}\n onValueChange={setValue}\n open={open}\n onOpenChange={handleOpenChange}\n {...rest}\n >\n {autocomplete ? element : children}\n </SelectPrimitive.Root>\n </SelectContext.Provider>\n );\n};\n"],"names":[],"mappings":";;;;;;AAqCA;;;AAGE;AACF;AAEO;AACL;;AAEE;;AAEF;;AAGE;;AAGA;;;AAGJ;AAuCA;AAEa;;;;;;AA0BX;AACA;AAEA;AACA;AACA;AAEA;AACE;;AAGF;AAEI;;;AAGG;;;;;;AAOG;AACA;AAGJ;AAAoB;;AACf;;;AAKJ;;;;AAGA;;;AAMP;;AAGI;AACF;AAIF;;;;AAII;AACF;AAIF;;;AAIA;;AAGM;AACA;AACF;;AAKJ;;;AAGG;AACH;AACE;AAAoB;;AACmB;;AAErC;AACF;AACF;AAEA;AAcA;AAGM;;;;;;;;;;AAUD;AAcP;;"}
@@ -2,9 +2,11 @@
2
2
 
3
3
  var useCopyToClipboard = require('./useCopyToClipboard.cjs');
4
4
  var useMouse = require('./useMouse.cjs');
5
+ var useIsomorphicLayoutEffect = require('./useIsomorphicLayoutEffect.cjs');
5
6
 
6
7
 
7
8
 
8
9
  exports.useCopyToClipboard = useCopyToClipboard.useCopyToClipboard;
9
10
  exports.useMouse = useMouse.useMouse;
11
+ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect.useIsomorphicLayoutEffect;
10
12
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,3 +1,4 @@
1
1
  export { useCopyToClipboard } from './useCopyToClipboard';
2
2
  export { useMouse } from './useMouse';
3
+ export { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../hooks/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../hooks/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export { useCopyToClipboard } from './useCopyToClipboard.js';
2
2
  export { useMouse } from './useMouse.js';
3
+ export { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? react.useLayoutEffect : react.useEffect;
6
+
7
+ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
8
+ //# sourceMappingURL=useIsomorphicLayoutEffect.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsomorphicLayoutEffect.cjs","sources":["../../hooks/useIsomorphicLayoutEffect.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect } from 'react';\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n"],"names":["useLayoutEffect","useEffect"],"mappings":";;;;AAEa,MAAA,yBAAyB,GACpC,OAAO,MAAM,KAAK,WAAW,GAAGA,qBAAe,GAAGC;;;;"}
@@ -0,0 +1,3 @@
1
+ import { useEffect } from 'react';
2
+ export declare const useIsomorphicLayoutEffect: typeof useEffect;
3
+ //# sourceMappingURL=useIsomorphicLayoutEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsomorphicLayoutEffect.d.ts","sourceRoot":"","sources":["../../hooks/useIsomorphicLayoutEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,OAAO,CAAC;AAEnD,eAAO,MAAM,yBAAyB,kBACuB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { useLayoutEffect, useEffect } from 'react';
2
+
3
+ const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
4
+
5
+ export { useIsomorphicLayoutEffect };
6
+ //# sourceMappingURL=useIsomorphicLayoutEffect.js.map