@economic/taco 0.0.1-alpha.1543 → 0.0.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/components/Backdrop/Backdrop.d.ts +3 -0
  2. package/dist/components/Button/Button.d.ts +39 -1
  3. package/dist/components/Button/util.d.ts +2 -0
  4. package/dist/components/Checkbox/Checkbox.d.ts +1 -1
  5. package/dist/components/Combobox/useCombobox.d.ts +3 -3
  6. package/dist/components/Dialog/Context.d.ts +1 -0
  7. package/dist/components/Dialog/Dialog.d.ts +14 -12
  8. package/dist/components/Hanger/Hanger.d.ts +4 -9
  9. package/dist/components/IconButton/IconButton.d.ts +38 -1
  10. package/dist/components/Listbox/Listbox.d.ts +0 -1
  11. package/dist/components/Navigation/Navigation.d.ts +4 -4
  12. package/dist/components/Popover/Popover.d.ts +5 -9
  13. package/dist/components/RadioGroup/RadioGroup.d.ts +5 -5
  14. package/dist/components/Select/Select.d.ts +0 -1
  15. package/dist/components/Select/useSelect.d.ts +5 -4
  16. package/dist/components/Table/Table.storyexample.d.ts +1 -1
  17. package/dist/components/Table/components/PaginatedTable.d.ts +2 -2
  18. package/dist/components/Table/components/Table.d.ts +2 -2
  19. package/dist/components/Table/components/WindowedTable.d.ts +2 -2
  20. package/dist/components/Table/types.d.ts +2 -2
  21. package/dist/components/Tabs/Tabs.d.ts +2 -2
  22. package/dist/components/Tooltip/Tooltip.d.ts +11 -1
  23. package/dist/components/Treeview/Treeview.d.ts +2 -2
  24. package/dist/esm/index.css +75 -170
  25. package/dist/esm/src/components/Backdrop/Backdrop.js +12 -0
  26. package/dist/esm/src/components/Backdrop/Backdrop.js.map +1 -0
  27. package/dist/esm/src/components/Button/Button.js +6 -9
  28. package/dist/esm/src/components/Button/Button.js.map +1 -1
  29. package/dist/esm/src/components/Button/util.js +42 -1
  30. package/dist/esm/src/components/Button/util.js.map +1 -1
  31. package/dist/esm/src/components/Calendar/Calendar.js +1 -1
  32. package/dist/esm/src/components/Checkbox/Checkbox.js +9 -1
  33. package/dist/esm/src/components/Checkbox/Checkbox.js.map +1 -1
  34. package/dist/esm/src/components/Combobox/Combobox.js +28 -24
  35. package/dist/esm/src/components/Combobox/Combobox.js.map +1 -1
  36. package/dist/esm/src/components/Combobox/useCombobox.js +32 -38
  37. package/dist/esm/src/components/Combobox/useCombobox.js.map +1 -1
  38. package/dist/esm/src/components/Datepicker/Datepicker.js +2 -2
  39. package/dist/esm/src/components/Dialog/Context.js +1 -0
  40. package/dist/esm/src/components/Dialog/Context.js.map +1 -1
  41. package/dist/esm/src/components/Dialog/Dialog.js +5 -4
  42. package/dist/esm/src/components/Dialog/Dialog.js.map +1 -1
  43. package/dist/esm/src/components/Dialog/components/Content.js +13 -13
  44. package/dist/esm/src/components/Dialog/components/Content.js.map +1 -1
  45. package/dist/esm/src/components/Dialog/components/Drawer.js +2 -1
  46. package/dist/esm/src/components/Dialog/components/Drawer.js.map +1 -1
  47. package/dist/esm/src/components/Dialog/components/Extra.js +2 -1
  48. package/dist/esm/src/components/Dialog/components/Extra.js.map +1 -1
  49. package/dist/esm/src/components/Dialog/components/Trigger.js +2 -1
  50. package/dist/esm/src/components/Dialog/components/Trigger.js.map +1 -1
  51. package/dist/esm/src/components/Hanger/Hanger.js +12 -9
  52. package/dist/esm/src/components/Hanger/Hanger.js.map +1 -1
  53. package/dist/esm/src/components/IconButton/IconButton.js +9 -11
  54. package/dist/esm/src/components/IconButton/IconButton.js.map +1 -1
  55. package/dist/esm/src/components/Input/util.js +6 -6
  56. package/dist/esm/src/components/Input/util.js.map +1 -1
  57. package/dist/esm/src/components/Listbox/Listbox.js +21 -5
  58. package/dist/esm/src/components/Listbox/Listbox.js.map +1 -1
  59. package/dist/esm/src/components/Listbox/ScrollableList.js +7 -5
  60. package/dist/esm/src/components/Listbox/ScrollableList.js.map +1 -1
  61. package/dist/esm/src/components/Navigation/Navigation.js +5 -4
  62. package/dist/esm/src/components/Navigation/Navigation.js.map +1 -1
  63. package/dist/esm/src/components/Pagination/PageNumbers.js +1 -1
  64. package/dist/esm/src/components/Pagination/Pagination.js +2 -1
  65. package/dist/esm/src/components/Pagination/Pagination.js.map +1 -1
  66. package/dist/esm/src/components/Popover/Popover.js +9 -6
  67. package/dist/esm/src/components/Popover/Popover.js.map +1 -1
  68. package/dist/esm/src/components/RadioGroup/RadioGroup.js +17 -16
  69. package/dist/esm/src/components/RadioGroup/RadioGroup.js.map +1 -1
  70. package/dist/esm/src/components/SearchInput/SearchInput.js +8 -7
  71. package/dist/esm/src/components/SearchInput/SearchInput.js.map +1 -1
  72. package/dist/esm/src/components/Select/Select.js +27 -25
  73. package/dist/esm/src/components/Select/Select.js.map +1 -1
  74. package/dist/esm/src/components/Select/useSelect.js +77 -37
  75. package/dist/esm/src/components/Select/useSelect.js.map +1 -1
  76. package/dist/esm/src/components/Table/components/PaginatedTable.js.map +1 -1
  77. package/dist/esm/src/components/Table/components/Table.js.map +1 -1
  78. package/dist/esm/src/components/Table/components/WindowedTable.js.map +1 -1
  79. package/dist/esm/src/components/Table/hooks/plugins/useRowActions.js +11 -5
  80. package/dist/esm/src/components/Table/hooks/plugins/useRowActions.js.map +1 -1
  81. package/dist/esm/src/components/Table/hooks/plugins/useRowSelect.js +3 -3
  82. package/dist/esm/src/components/Table/hooks/plugins/useRowSelect.js.map +1 -1
  83. package/dist/esm/src/components/Table/util/renderColumn.js +4 -3
  84. package/dist/esm/src/components/Table/util/renderColumn.js.map +1 -1
  85. package/dist/esm/src/components/Table/util/renderRow.js +4 -3
  86. package/dist/esm/src/components/Table/util/renderRow.js.map +1 -1
  87. package/dist/esm/src/components/Tabs/Tabs.js.map +1 -1
  88. package/dist/esm/src/components/Toast/Toast.js +1 -1
  89. package/dist/esm/src/components/Tooltip/Tooltip.js +11 -10
  90. package/dist/esm/src/components/Tooltip/Tooltip.js.map +1 -1
  91. package/dist/esm/src/components/Tour/Tour.js +2 -2
  92. package/dist/esm/src/components/Treeview/Treeview.js.map +1 -1
  93. package/dist/esm/src/index.js +8 -7
  94. package/dist/esm/src/index.js.map +1 -1
  95. package/dist/esm/src/primitives/Button.js +2 -12
  96. package/dist/esm/src/primitives/Button.js.map +1 -1
  97. package/dist/esm/src/utils/mergeRefs.js +14 -0
  98. package/dist/esm/src/utils/mergeRefs.js.map +1 -0
  99. package/dist/index.css +75 -170
  100. package/dist/index.d.ts +1 -0
  101. package/dist/primitives/Button.d.ts +0 -4
  102. package/dist/taco.cjs.development.js +1688 -1561
  103. package/dist/taco.cjs.development.js.map +1 -1
  104. package/dist/taco.cjs.production.min.js +1 -1
  105. package/dist/taco.cjs.production.min.js.map +1 -1
  106. package/dist/utils/mergeRefs.d.ts +2 -0
  107. package/package.json +4 -4
  108. package/types.json +7297 -0
@@ -1,15 +1,14 @@
1
1
  import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import { forwardRef, useRef, createElement } from 'react';
3
3
  import cn from 'classnames';
4
+ import { Root, Anchor, Content } from '@radix-ui/react-popover';
4
5
  import { IconButton } from '../IconButton/IconButton.js';
5
- import { PopoverDisclosure, Popover } from 'reakit/Popover';
6
6
  import { Input } from '../Input/Input.js';
7
7
  import { ScrollableList } from '../Listbox/ScrollableList.js';
8
8
  import { useCombobox } from './useCombobox.js';
9
9
  import { useBoundingClientRectListener } from '../../utils/hooks/useBoundingClientRectListener.js';
10
10
 
11
- var _excluded = ["className", "style"],
12
- _excluded2 = ["container"];
11
+ var _excluded = ["className", "style"];
13
12
  var Combobox = /*#__PURE__*/forwardRef(function Combobox(props, ref) {
14
13
  var externalClassName = props.className,
15
14
  style = props.style,
@@ -21,9 +20,6 @@ var Combobox = /*#__PURE__*/forwardRef(function Combobox(props, ref) {
21
20
  popover = _useCombobox.popover,
22
21
  list = _useCombobox.list;
23
22
 
24
- var container = popover.container,
25
- base = _objectWithoutPropertiesLoose(popover, _excluded2);
26
-
27
23
  var internalRef = useRef(null);
28
24
  var selectDimensions = useBoundingClientRectListener(internalRef);
29
25
  var className = cn('inline-flex relative', {
@@ -33,28 +29,36 @@ var Combobox = /*#__PURE__*/forwardRef(function Combobox(props, ref) {
33
29
  className: className,
34
30
  "data-taco": "combobox",
35
31
  style: style
36
- }, createElement(PopoverDisclosure, Object.assign({}, base, {
32
+ }, createElement(Root, Object.assign({}, popover), createElement(Anchor, {
33
+ asChild: true,
37
34
  ref: internalRef
38
- }), function (_ref) {
39
- var ref = _ref.ref;
40
- return createElement("span", Object.assign({}, combobox, {
41
- className: "w-full",
42
- ref: ref
43
- }), createElement(Input, Object.assign({}, input, {
44
- autoComplete: "off",
45
- button: props.inline ? createElement(IconButton, {
46
- icon: popover.visible ? 'chevron-up' : 'chevron-down',
47
- onClick: popover.toggle,
48
- tabIndex: -1
49
- }) : props.button
50
- })));
51
- }), !otherProps.disabled && createElement(Popover, Object.assign({}, base, container), createElement(ScrollableList, Object.assign({}, list, {
52
- className: cn('border-blue w-auto max-w-[theme(spacing.96)] max-h-[calc(12rem+2px)]'),
35
+ }, createElement("div", Object.assign({}, combobox, {
36
+ className: "inline w-full",
37
+ ref: ref
38
+ }), createElement(Input, Object.assign({}, input, {
39
+ autoComplete: "off",
40
+ button: props.inline ? createElement(IconButton, {
41
+ appearance: "discrete",
42
+ className: "focus:!border-none focus:!shadow-none active:!border-none",
43
+ icon: popover.open ? 'chevron-up' : 'chevron-down',
44
+ onClick: function onClick() {
45
+ return popover.onOpenChange(true);
46
+ },
47
+ tabIndex: -1
48
+ }) : props.button
49
+ })))), createElement(Content, {
50
+ align: "start",
51
+ onOpenAutoFocus: function onOpenAutoFocus(event) {
52
+ event.preventDefault();
53
+ },
54
+ sideOffset: 4
55
+ }, createElement(ScrollableList, Object.assign({}, list, {
56
+ className: cn('border-blue max-h-[calc(12rem+2px)] w-auto max-w-[theme(spacing.96)]'),
53
57
  style: {
54
58
  minWidth: selectDimensions === null || selectDimensions === void 0 ? void 0 : selectDimensions.width
55
59
  },
56
- tabIndex: popover.visible ? 0 : -1
57
- }))));
60
+ tabIndex: popover.open ? 0 : -1
61
+ })))));
58
62
  });
59
63
 
60
64
  export { Combobox };
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","sources":["../../../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport { Popover as BasePopover, PopoverDisclosure } from 'reakit/Popover';\nimport { Input, InputProps } from '../Input/Input';\nimport { useCombobox } from './useCombobox';\nimport { ScrollableList, ScrollableListItem, ScrollableListItemValue } from '../Listbox/ScrollableList';\nimport { useBoundingClientRectListener } from '../../utils/hooks/useBoundingClientRectListener';\nimport { IconButton } from '../IconButton/IconButton';\nimport { State } from '../../types';\nimport './Combobox.css';\n\nexport type ComboboxItem = ScrollableListItem;\nexport type ComboboxValue = ScrollableListItemValue;\n\nexport type ComboboxProps = Omit<InputProps, 'defaultValue' | 'onChange' | 'value'> & {\n /** Array of options in combobox */\n data?: ComboboxItem[];\n /**\n * Initial value of the input in combobox.\n * This is used when combobox is mounted, if no value is provided.\n * *Note* that combobox is a controlled component, setting this will also trigger the `onChange` event\n */\n defaultValue?: ComboboxValue;\n /** Set what value should have an empty option in combobox */\n emptyValue?: ComboboxValue;\n /** Draws attention to the combobox by changing its style and making it visually prominent */\n highlighted?: boolean;\n /**\n * Combobox will display its data when input is clicked/focused, even if the input is empty.\n * *Note* that default combobox will display matching data only when user starts typing in input.\n */\n inline?: boolean; // Example 3 on https://www.w3.org/TR/wai-aria-practices/examples/combobox/aria1.1pattern/listbox-combo.html\n /** Displays loading state in listbox */\n loading?: boolean;\n /**\n * Handler called when user chooses an option from the provided suggestions.\n * Suggestions will be calculated based on the input value.\n * There are two ways to choose an option: either click on it, or navigate using keyboard and press `enter`\n */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n /** State will change the style of the combobox **/\n state?: State;\n /** Value of the input in combobox */\n value?: ComboboxValue;\n};\n\nexport const Combobox = React.forwardRef(function Combobox(props: ComboboxProps, ref: React.Ref<HTMLInputElement>) {\n const { className: externalClassName, style, ...otherProps } = props;\n const { combobox, input, popover, list } = useCombobox(otherProps, ref);\n const { container, ...base } = popover;\n const internalRef = React.useRef<HTMLButtonElement>(null);\n const selectDimensions = useBoundingClientRectListener(internalRef);\n const className = cn(\n 'inline-flex relative',\n {\n 'yt-combobox--inline': props.inline,\n },\n externalClassName\n );\n\n return (\n <span className={className} data-taco=\"combobox\" style={style}>\n <PopoverDisclosure {...base} ref={internalRef}>\n {({ ref }) => (\n <span {...combobox} className=\"w-full\" ref={ref}>\n <Input\n {...input}\n autoComplete=\"off\"\n button={\n props.inline ? (\n <IconButton\n icon={popover.visible ? 'chevron-up' : 'chevron-down'}\n onClick={popover.toggle}\n tabIndex={-1}\n />\n ) : (\n props.button\n )\n }\n />\n </span>\n )}\n </PopoverDisclosure>\n {!otherProps.disabled && (\n <BasePopover {...base} {...container}>\n <ScrollableList\n {...list}\n className={cn('border-blue w-auto max-w-[theme(spacing.96)] max-h-[calc(12rem+2px)]')}\n style={{ minWidth: selectDimensions?.width }}\n tabIndex={popover.visible ? 0 : -1}\n />\n </BasePopover>\n )}\n </span>\n );\n});\n"],"names":["Combobox","React","props","ref","externalClassName","className","style","otherProps","useCombobox","combobox","input","popover","list","container","base","internalRef","selectDimensions","useBoundingClientRectListener","cn","inline","PopoverDisclosure","Input","autoComplete","button","IconButton","icon","visible","onClick","toggle","tabIndex","disabled","BasePopover","ScrollableList","minWidth","width"],"mappings":";;;;;;;;;;;;IA8CaA,QAAQ,gBAAGC,UAAA,CAAiB,SAASD,QAAT,CAAkBE,KAAlB,EAAwCC,GAAxC;AACrC,MAAmBC,iBAAnB,GAA+DF,KAA/D,CAAQG,SAAR;AAAA,MAAsCC,KAAtC,GAA+DJ,KAA/D,CAAsCI,KAAtC;AAAA,MAAgDC,UAAhD,iCAA+DL,KAA/D;;AACA,qBAA2CM,WAAW,CAACD,UAAD,EAAaJ,GAAb,CAAtD;AAAA,MAAQM,QAAR,gBAAQA,QAAR;AAAA,MAAkBC,KAAlB,gBAAkBA,KAAlB;AAAA,MAAyBC,OAAzB,gBAAyBA,OAAzB;AAAA,MAAkCC,IAAlC,gBAAkCA,IAAlC;;AACA,MAAQC,SAAR,GAA+BF,OAA/B,CAAQE,SAAR;AAAA,MAAsBC,IAAtB,iCAA+BH,OAA/B;;AACA,MAAMI,WAAW,GAAGd,MAAA,CAAgC,IAAhC,CAApB;AACA,MAAMe,gBAAgB,GAAGC,6BAA6B,CAACF,WAAD,CAAtD;AACA,MAAMV,SAAS,GAAGa,EAAE,CAChB,sBADgB,EAEhB;AACI,2BAAuBhB,KAAK,CAACiB;AADjC,GAFgB,EAKhBf,iBALgB,CAApB;AAQA,SACIH,aAAA,OAAA;AAAMI,IAAAA,SAAS,EAAEA;iBAAqB;AAAWC,IAAAA,KAAK,EAAEA;GAAxD,EACIL,aAAA,CAACmB,iBAAD,oBAAuBN;AAAMX,IAAAA,GAAG,EAAEY;IAAlC,EACK;AAAA,QAAGZ,GAAH,QAAGA,GAAH;AAAA,WACGF,aAAA,OAAA,oBAAUQ;AAAUJ,MAAAA,SAAS,EAAC;AAASF,MAAAA,GAAG,EAAEA;MAA5C,EACIF,aAAA,CAACoB,KAAD,oBACQX;AACJY,MAAAA,YAAY,EAAC;AACbC,MAAAA,MAAM,EACFrB,KAAK,CAACiB,MAAN,GACIlB,aAAA,CAACuB,UAAD;AACIC,QAAAA,IAAI,EAAEd,OAAO,CAACe,OAAR,GAAkB,YAAlB,GAAiC;AACvCC,QAAAA,OAAO,EAAEhB,OAAO,CAACiB;AACjBC,QAAAA,QAAQ,EAAE,CAAC;OAHf,CADJ,GAOI3B,KAAK,CAACqB;MAXlB,CADJ,CADH;AAAA,GADL,CADJ,EAsBK,CAAChB,UAAU,CAACuB,QAAZ,IACG7B,aAAA,CAAC8B,OAAD,oBAAiBjB,MAAUD,UAA3B,EACIZ,aAAA,CAAC+B,cAAD,oBACQpB;AACJP,IAAAA,SAAS,EAAEa,EAAE,CAAC,sEAAD;AACbZ,IAAAA,KAAK,EAAE;AAAE2B,MAAAA,QAAQ,EAAEjB,gBAAF,aAAEA,gBAAF,uBAAEA,gBAAgB,CAAEkB;AAA9B;AACPL,IAAAA,QAAQ,EAAElB,OAAO,CAACe,OAAR,GAAkB,CAAlB,GAAsB,CAAC;IAJrC,CADJ,CAvBR,CADJ;AAmCH,CAjDuB;;;;"}
1
+ {"version":3,"file":"Combobox.js","sources":["../../../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Input, InputProps } from '../Input/Input';\nimport { useCombobox } from './useCombobox';\nimport { ScrollableList, ScrollableListItem, ScrollableListItemValue } from '../Listbox/ScrollableList';\nimport { useBoundingClientRectListener } from '../../utils/hooks/useBoundingClientRectListener';\nimport { IconButton } from '../IconButton/IconButton';\nimport { State } from '../../types';\nimport './Combobox.css';\n\nexport type ComboboxItem = ScrollableListItem;\nexport type ComboboxValue = ScrollableListItemValue;\n\nexport type ComboboxProps = Omit<InputProps, 'defaultValue' | 'onChange' | 'value'> & {\n /** Array of options in combobox */\n data?: ComboboxItem[];\n /**\n * Initial value of the input in combobox.\n * This is used when combobox is mounted, if no value is provided.\n * *Note* that combobox is a controlled component, setting this will also trigger the `onChange` event\n */\n defaultValue?: ComboboxValue;\n /** Set what value should have an empty option in combobox */\n emptyValue?: ComboboxValue;\n /** Draws attention to the combobox by changing its style and making it visually prominent */\n highlighted?: boolean;\n /**\n * Combobox will display its data when input is clicked/focused, even if the input is empty.\n * *Note* that default combobox will display matching data only when user starts typing in input.\n */\n inline?: boolean; // Example 3 on https://www.w3.org/TR/wai-aria-practices/examples/combobox/aria1.1pattern/listbox-combo.html\n /** Displays loading state in listbox */\n loading?: boolean;\n /**\n * Handler called when user chooses an option from the provided suggestions.\n * Suggestions will be calculated based on the input value.\n * There are two ways to choose an option: either click on it, or navigate using keyboard and press `enter`\n */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n /** State will change the style of the combobox **/\n state?: State;\n /** Value of the input in combobox */\n value?: ComboboxValue;\n};\n\nexport const Combobox = React.forwardRef(function Combobox(props: ComboboxProps, ref: React.Ref<HTMLInputElement>) {\n const { className: externalClassName, style, ...otherProps } = props;\n const { combobox, input, popover, list } = useCombobox(otherProps, ref);\n const internalRef = React.useRef<HTMLDivElement>(null);\n const selectDimensions = useBoundingClientRectListener(internalRef);\n const className = cn(\n 'inline-flex relative',\n {\n 'yt-combobox--inline': props.inline,\n },\n externalClassName\n );\n\n return (\n <span className={className} data-taco=\"combobox\" style={style}>\n <PopoverPrimitive.Root {...popover}>\n <PopoverPrimitive.Anchor asChild ref={internalRef}>\n <div {...combobox} className=\"inline w-full\" ref={ref}>\n <Input\n {...input}\n autoComplete=\"off\"\n button={\n props.inline ? (\n <IconButton\n appearance=\"discrete\"\n className=\"focus:!border-none focus:!shadow-none active:!border-none\"\n icon={popover.open ? 'chevron-up' : 'chevron-down'}\n onClick={() => popover.onOpenChange(true)}\n tabIndex={-1}\n />\n ) : (\n props.button\n )\n }\n />\n </div>\n </PopoverPrimitive.Anchor>\n <PopoverPrimitive.Content\n align=\"start\"\n onOpenAutoFocus={event => {\n event.preventDefault();\n }}\n sideOffset={4}\n >\n <ScrollableList\n {...list}\n className={cn('border-blue max-h-[calc(12rem+2px)] w-auto max-w-[theme(spacing.96)]')}\n style={{ minWidth: selectDimensions?.width }}\n tabIndex={popover.open ? 0 : -1}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Root>\n </span>\n );\n});\n"],"names":["Combobox","React","props","ref","externalClassName","className","style","otherProps","useCombobox","combobox","input","popover","list","internalRef","selectDimensions","useBoundingClientRectListener","cn","inline","PopoverPrimitive","asChild","Input","autoComplete","button","IconButton","appearance","icon","open","onClick","onOpenChange","tabIndex","align","onOpenAutoFocus","event","preventDefault","sideOffset","ScrollableList","minWidth","width"],"mappings":";;;;;;;;;;;IA8CaA,QAAQ,gBAAGC,UAAA,CAAiB,SAASD,QAAT,CAAkBE,KAAlB,EAAwCC,GAAxC;AACrC,MAAmBC,iBAAnB,GAA+DF,KAA/D,CAAQG,SAAR;AAAA,MAAsCC,KAAtC,GAA+DJ,KAA/D,CAAsCI,KAAtC;AAAA,MAAgDC,UAAhD,iCAA+DL,KAA/D;;AACA,qBAA2CM,WAAW,CAACD,UAAD,EAAaJ,GAAb,CAAtD;AAAA,MAAQM,QAAR,gBAAQA,QAAR;AAAA,MAAkBC,KAAlB,gBAAkBA,KAAlB;AAAA,MAAyBC,OAAzB,gBAAyBA,OAAzB;AAAA,MAAkCC,IAAlC,gBAAkCA,IAAlC;;AACA,MAAMC,WAAW,GAAGZ,MAAA,CAA6B,IAA7B,CAApB;AACA,MAAMa,gBAAgB,GAAGC,6BAA6B,CAACF,WAAD,CAAtD;AACA,MAAMR,SAAS,GAAGW,EAAE,CAChB,sBADgB,EAEhB;AACI,2BAAuBd,KAAK,CAACe;AADjC,GAFgB,EAKhBb,iBALgB,CAApB;AAQA,SACIH,aAAA,OAAA;AAAMI,IAAAA,SAAS,EAAEA;iBAAqB;AAAWC,IAAAA,KAAK,EAAEA;GAAxD,EACIL,aAAA,CAACiB,IAAD,oBAA2BP,QAA3B,EACIV,aAAA,CAACiB,MAAD;AAAyBC,IAAAA,OAAO;AAAChB,IAAAA,GAAG,EAAEU;GAAtC,EACIZ,aAAA,MAAA,oBAASQ;AAAUJ,IAAAA,SAAS,EAAC;AAAgBF,IAAAA,GAAG,EAAEA;IAAlD,EACIF,aAAA,CAACmB,KAAD,oBACQV;AACJW,IAAAA,YAAY,EAAC;AACbC,IAAAA,MAAM,EACFpB,KAAK,CAACe,MAAN,GACIhB,aAAA,CAACsB,UAAD;AACIC,MAAAA,UAAU,EAAC;AACXnB,MAAAA,SAAS,EAAC;AACVoB,MAAAA,IAAI,EAAEd,OAAO,CAACe,IAAR,GAAe,YAAf,GAA8B;AACpCC,MAAAA,OAAO,EAAE;AAAA,eAAMhB,OAAO,CAACiB,YAAR,CAAqB,IAArB,CAAN;AAAA;AACTC,MAAAA,QAAQ,EAAE,CAAC;KALf,CADJ,GASI3B,KAAK,CAACoB;IAblB,CADJ,CADJ,CADJ,EAsBIrB,aAAA,CAACiB,OAAD;AACIY,IAAAA,KAAK,EAAC;AACNC,IAAAA,eAAe,EAAE,yBAAAC,KAAK;AAClBA,MAAAA,KAAK,CAACC,cAAN;AACH;AACDC,IAAAA,UAAU,EAAE;GALhB,EAOIjC,aAAA,CAACkC,cAAD,oBACQvB;AACJP,IAAAA,SAAS,EAAEW,EAAE,CAAC,sEAAD;AACbV,IAAAA,KAAK,EAAE;AAAE8B,MAAAA,QAAQ,EAAEtB,gBAAF,aAAEA,gBAAF,uBAAEA,gBAAgB,CAAEuB;AAA9B;AACPR,IAAAA,QAAQ,EAAElB,OAAO,CAACe,IAAR,GAAe,CAAf,GAAmB,CAAC;IAJlC,CAPJ,CAtBJ,CADJ,CADJ;AAyCH,CAtDuB;;;;"}
@@ -1,7 +1,6 @@
1
- import { extends as _extends, objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
- import { useRef, useMemo, useState, useEffect } from 'react';
1
+ import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose, extends as _extends } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useRef, useState, useMemo, useEffect } from 'react';
3
3
  import { v4 } from 'uuid';
4
- import { usePopoverState } from 'reakit/Popover';
5
4
  import { useProxiedRef } from '../../utils/hooks/useProxiedRef.js';
6
5
  import keycode from 'keycode';
7
6
  import { getId } from '../Listbox/ScrollableList.js';
@@ -15,8 +14,7 @@ var convertToInputValue = function convertToInputValue(value) {
15
14
  };
16
15
 
17
16
  var useCombobox = function useCombobox(_ref, ref) {
18
- var ariaLabel = _ref['aria-label'],
19
- ariaLabelledBy = _ref['aria-labelledby'],
17
+ var ariaLabelledBy = _ref['aria-labelledby'],
20
18
  _ref$data = _ref.data,
21
19
  unfilteredData = _ref$data === void 0 ? [] : _ref$data,
22
20
  defaultValue = _ref.defaultValue,
@@ -31,17 +29,18 @@ var useCombobox = function useCombobox(_ref, ref) {
31
29
 
32
30
  var inputRef = useProxiedRef(ref);
33
31
  var listRef = useRef(null);
34
- var popover = usePopoverState({
35
- gutter: 4,
36
- placement: 'bottom-start'
37
- });
32
+
33
+ var _React$useState = useState(false),
34
+ open = _React$useState[0],
35
+ setOpen = _React$useState[1];
36
+
38
37
  var listId = useMemo(function () {
39
38
  return v4();
40
39
  }, []);
41
40
 
42
- var _React$useState = useState(convertToInputValue(value)),
43
- inputValue = _React$useState[0],
44
- setInputValue = _React$useState[1];
41
+ var _React$useState2 = useState(convertToInputValue(value)),
42
+ inputValue = _React$useState2[0],
43
+ setInputValue = _React$useState2[1];
45
44
 
46
45
  var shouldFilterData = !inline || inline && inputValue !== convertToInputValue(value);
47
46
  var flattenedData = useFlattenedData(unfilteredData);
@@ -49,9 +48,9 @@ var useCombobox = function useCombobox(_ref, ref) {
49
48
  return shouldFilterData ? filterData(flattenedData, inputValue) : flattenedData;
50
49
  }, [shouldFilterData, inputValue, flattenedData]); // listbox/select change value _with_ the index, but combobox changes on select of an index (click/enter), so we need state
51
50
 
52
- var _React$useState2 = useState(inputValue !== undefined ? getIndexFromValue(data, inputValue) : undefined),
53
- currentIndex = _React$useState2[0],
54
- setCurrentIndex = _React$useState2[1];
51
+ var _React$useState3 = useState(inputValue !== undefined ? getIndexFromValue(data, inputValue) : undefined),
52
+ currentIndex = _React$useState3[0],
53
+ setCurrentIndex = _React$useState3[1];
55
54
 
56
55
  var setInputValueByIndex = function setInputValueByIndex(index) {
57
56
  if (index !== undefined) {
@@ -99,20 +98,20 @@ var useCombobox = function useCombobox(_ref, ref) {
99
98
  if (inputValue && data.length && !isCurrentValue) {
100
99
  setCurrentIndex(0);
101
100
 
102
- if (!popover.visible) {
103
- popover.show();
101
+ if (!open) {
102
+ setOpen(true);
104
103
  }
105
104
  } else {
106
- popover.hide();
105
+ setOpen(false);
107
106
  }
108
107
  }, [inputValue, data]);
109
108
  useEffect(function () {
110
- if (popover.visible) {
109
+ if (open) {
111
110
  setCurrentIndex(getIndexFromValue(data, inputValue) || 0);
112
111
  } else {
113
112
  setCurrentIndex(undefined);
114
113
  }
115
- }, [popover.visible]); // event handlers
114
+ }, [open]); // event handlers
116
115
 
117
116
  var handleInputBlur = function handleInputBlur(event) {
118
117
  event.persist();
@@ -144,8 +143,8 @@ var useCombobox = function useCombobox(_ref, ref) {
144
143
  };
145
144
 
146
145
  var handleInputClick = function handleInputClick(event) {
147
- if (inline || !popover.visible && inputValue && data.length) {
148
- popover.show();
146
+ if (inline || !open && inputValue && data.length) {
147
+ setOpen(true);
149
148
  }
150
149
 
151
150
  if (onClick) {
@@ -167,7 +166,7 @@ var useCombobox = function useCombobox(_ref, ref) {
167
166
  {
168
167
  event.preventDefault();
169
168
  setInputValue(convertToInputValue(value));
170
- popover.hide();
169
+ setOpen(false);
171
170
  return;
172
171
  }
173
172
 
@@ -179,7 +178,7 @@ var useCombobox = function useCombobox(_ref, ref) {
179
178
  }
180
179
 
181
180
  setCurrentValue(currentIndex);
182
- popover.hide();
181
+ setOpen(false);
183
182
  return;
184
183
  }
185
184
 
@@ -188,7 +187,7 @@ var useCombobox = function useCombobox(_ref, ref) {
188
187
  case keycode('home'):
189
188
  case keycode('end'):
190
189
  {
191
- if (popover.visible) {
190
+ if (open) {
192
191
  event.preventDefault();
193
192
  }
194
193
 
@@ -201,12 +200,12 @@ var useCombobox = function useCombobox(_ref, ref) {
201
200
  listRef.current.dispatchEvent(createCustomKeyboardEvent(event));
202
201
  }
203
202
 
204
- if (inline && !popover.visible) {
203
+ if (inline && !open) {
205
204
  if (event.keyCode === keycode('up') || event.keyCode === keycode('down')) {
206
205
  event.preventDefault();
207
206
  var initialIndex = event.keyCode === keycode('up') ? data.length - 1 : 0;
208
207
  setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);
209
- popover.show();
208
+ setOpen(true);
210
209
  }
211
210
  }
212
211
 
@@ -223,11 +222,11 @@ var useCombobox = function useCombobox(_ref, ref) {
223
222
  var handleListboxClick = function handleListboxClick(event, index) {
224
223
  event.preventDefault();
225
224
  setCurrentValue(index);
226
- popover.hide();
225
+ setOpen(false);
227
226
  };
228
227
 
229
228
  var combobox = {
230
- 'aria-expanded': popover.visible,
229
+ 'aria-expanded': open,
231
230
  'aria-owns': listId,
232
231
  'aria-haspopup': 'listbox',
233
232
  role: 'combobox'
@@ -268,15 +267,10 @@ var useCombobox = function useCombobox(_ref, ref) {
268
267
  combobox: combobox,
269
268
  input: input,
270
269
  list: list,
271
- popover: _extends({}, popover, {
272
- visible: !data.length ? false : popover.visible,
273
- container: {
274
- tabIndex: -1,
275
- 'aria-label': ariaLabel,
276
- 'aria-labelledby': ariaLabelledBy,
277
- unstable_initialFocusRef: inputRef
278
- }
279
- })
270
+ popover: {
271
+ open: open,
272
+ onOpenChange: setOpen
273
+ }
280
274
  };
281
275
  };
282
276
 
@@ -1 +1 @@
1
- {"version":3,"file":"useCombobox.js","sources":["../../../../../src/components/Combobox/useCombobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport keycode from 'keycode';\nimport { v4 as uuid } from 'uuid';\nimport { PopoverHTMLProps, PopoverStateReturn, usePopoverState } from 'reakit/Popover';\nimport { ComboboxProps } from './Combobox';\nimport {\n setInputValueByRef,\n getIndexFromValue,\n findByValue,\n useFlattenedData,\n sanitizeItem,\n getOptionParents,\n filterData,\n} from '../Listbox/util';\nimport { createCustomKeyboardEvent } from '../../utils/input';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { getId, ScrollableListItemValue, ScrollableListPropsWithRef } from '../Listbox/ScrollableList';\n\nconst convertToInputValue = (value: ScrollableListItemValue | undefined) => String(value ?? '');\n\ntype useCombobox = React.HTMLAttributes<HTMLDivElement> & {\n combobox: React.HTMLAttributes<HTMLSpanElement>;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'> & { ref: React.RefObject<HTMLInputElement> };\n list: ScrollableListPropsWithRef;\n popover: PopoverStateReturn & { container: PopoverHTMLProps };\n};\n\nexport const useCombobox = (\n {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n data: unfilteredData = [],\n defaultValue,\n disabled,\n id: nativeId,\n inline,\n loading: __,\n onChange,\n onClick,\n onKeyDown,\n readOnly,\n value,\n ...props\n }: ComboboxProps,\n ref: React.Ref<HTMLInputElement>\n): useCombobox => {\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const listRef = React.useRef<HTMLUListElement>(null);\n const popover = usePopoverState({ gutter: 4, placement: 'bottom-start' });\n const listId = React.useMemo(() => uuid(), []);\n const [inputValue, setInputValue] = React.useState<string>(convertToInputValue(value));\n const shouldFilterData = !inline || (inline && inputValue !== convertToInputValue(value));\n const flattenedData = useFlattenedData(unfilteredData);\n const data = React.useMemo(\n () => (shouldFilterData ? filterData(flattenedData, inputValue) : flattenedData),\n [shouldFilterData, inputValue, flattenedData]\n );\n // listbox/select change value _with_ the index, but combobox changes on select of an index (click/enter), so we need state\n const [currentIndex, setCurrentIndex] = React.useState<number | undefined>(\n inputValue !== undefined ? getIndexFromValue(data, inputValue) : undefined\n );\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n setInputValueByRef(inputRef.current, option.value, 'focusout');\n }\n }\n };\n\n const setCurrentValue = (index: number | undefined) => {\n if (index === undefined) {\n return;\n }\n\n const option = data[index];\n\n // if the selected option is not already selected, trigger blur event\n if (option.value !== value) {\n setInputValueByIndex(index);\n } else {\n // if the selected option is already selected, refill input with its value\n setInputValue(convertToInputValue(value));\n }\n };\n\n // ensure the external value is synced with the internal value when mounting, e.g. incase a default value was set\n React.useEffect(() => {\n if (defaultValue && !value) {\n setInputValueByIndex(getIndexFromValue(data, defaultValue));\n }\n }, [data]);\n\n // update input value if it changed 'externally', e.g. clicking/entering an item in the listbox, from a modal etc\n React.useEffect(() => {\n if (value !== undefined && value !== inputValue) {\n setInputValue(convertToInputValue(value));\n }\n }, [value]);\n\n // show listbox based on input value\n React.useEffect(() => {\n // don't show the popover if the internal (input) value already is the current value\n // this prevents the popover showing after selecting a value or pressing escape\n const isCurrentValue = value !== undefined && value !== null && inputValue === String(value);\n\n if (inputValue && data.length && !isCurrentValue) {\n setCurrentIndex(0);\n\n if (!popover.visible) {\n popover.show();\n }\n } else {\n popover.hide();\n }\n }, [inputValue, data]);\n\n React.useEffect(() => {\n if (popover.visible) {\n setCurrentIndex(getIndexFromValue(data, inputValue) || 0);\n } else {\n setCurrentIndex(undefined);\n }\n }, [popover.visible]);\n\n // event handlers\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>): void => {\n event.persist();\n\n if (event.relatedTarget === listRef.current) {\n event.preventDefault();\n return;\n }\n\n if (onChange && event.target.value !== value) {\n const item = findByValue(flattenedData, event.target.value);\n (event as any).detail = sanitizeItem(item);\n\n const parents = getOptionParents(flattenedData, item?.path);\n\n if (parents !== null && parents.length > 0) {\n (event as any).detail.parents = parents;\n }\n\n onChange(event);\n }\n\n if (props.onBlur) {\n props.onBlur(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n setInputValue(event.target.value);\n };\n\n const handleInputClick = (event: React.MouseEvent<HTMLInputElement>): void => {\n if (inline || (!popover.visible && inputValue && data.length)) {\n popover.show();\n }\n\n if (onClick) {\n event.persist();\n onClick(event);\n }\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n event.persist();\n\n switch (event.keyCode) {\n case keycode('backspace'): {\n return;\n }\n\n case keycode('escape'): {\n event.preventDefault();\n setInputValue(convertToInputValue(value));\n popover.hide();\n return;\n }\n\n case keycode('tab'):\n case keycode('enter'): {\n if (event.keyCode !== keycode('tab')) {\n event.preventDefault();\n }\n\n setCurrentValue(currentIndex);\n popover.hide();\n return;\n }\n\n case keycode('up'):\n case keycode('down'):\n case keycode('home'):\n case keycode('end'): {\n if (popover.visible) {\n event.preventDefault();\n }\n break;\n }\n\n default:\n }\n\n // we aren't focused on the list, so manually forward the keydown event to it\n if (listRef.current) {\n listRef.current.dispatchEvent(createCustomKeyboardEvent(event));\n }\n\n if (inline && !popover.visible) {\n if (event.keyCode === keycode('up') || event.keyCode === keycode('down')) {\n event.preventDefault();\n const initialIndex = event.keyCode === keycode('up') ? data.length - 1 : 0;\n setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);\n popover.show();\n }\n }\n\n if (!event.isDefaultPrevented() && onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxChange = (index: number): void => {\n setCurrentIndex(index);\n };\n\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>, index: number): void => {\n event.preventDefault();\n setCurrentValue(index);\n popover.hide();\n };\n\n const combobox = {\n 'aria-expanded': popover.visible,\n 'aria-owns': listId,\n 'aria-haspopup': 'listbox' as const,\n role: 'combobox',\n };\n\n const input = {\n ...props,\n 'aria-controls': listId,\n // Indicates that the autocomplete behavior of the text input is to suggest a list of possible values in a popup and that the suggestions\n // are related to the string that is present in the textbox\n 'aria-autocomplete': 'list' as const,\n // Enables assistive technologies to know which element the application regards as focused while DOM focus remains on the input element\n 'aria-activedescendant':\n currentIndex !== undefined && data[currentIndex] ? getId(listId, String(data[currentIndex].value)) : undefined,\n 'aria-labelledby': ariaLabelledBy,\n disabled,\n onBlur: !disabled && !readOnly ? handleInputBlur : undefined,\n onChange: !disabled && !readOnly ? handleInputChange : undefined,\n onClick: !disabled && !readOnly ? handleInputClick : undefined,\n onKeyDown: !disabled && !readOnly ? handleInputKeyDown : undefined,\n readOnly,\n ref: inputRef,\n type: 'text',\n value: inputValue || '',\n };\n\n const list: ScrollableListPropsWithRef = {\n 'aria-labelledby': ariaLabelledBy,\n data,\n disabled,\n id: listId,\n onChange: handleListboxChange,\n onClick: handleListboxClick,\n ref: listRef,\n scrollOnFocus: false,\n tabIndex: -1,\n value: currentIndex,\n };\n\n return {\n combobox,\n input,\n list,\n popover: {\n ...popover,\n visible: !data.length ? false : popover.visible,\n container: {\n tabIndex: -1,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n unstable_initialFocusRef: inputRef,\n },\n },\n };\n};\n"],"names":["convertToInputValue","value","String","useCombobox","ref","ariaLabel","ariaLabelledBy","data","unfilteredData","defaultValue","disabled","inline","onChange","onClick","onKeyDown","readOnly","props","inputRef","useProxiedRef","listRef","React","popover","usePopoverState","gutter","placement","listId","uuid","inputValue","setInputValue","shouldFilterData","flattenedData","useFlattenedData","filterData","undefined","getIndexFromValue","currentIndex","setCurrentIndex","setInputValueByIndex","index","option","setInputValueByRef","current","setCurrentValue","isCurrentValue","length","visible","show","hide","handleInputBlur","event","persist","relatedTarget","preventDefault","target","item","findByValue","detail","sanitizeItem","parents","getOptionParents","path","onBlur","handleInputChange","handleInputClick","handleInputKeyDown","keyCode","keycode","dispatchEvent","createCustomKeyboardEvent","initialIndex","isDefaultPrevented","handleListboxChange","handleListboxClick","combobox","role","input","getId","type","list","id","scrollOnFocus","tabIndex","container","unstable_initialFocusRef"],"mappings":"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"}
1
+ {"version":3,"file":"useCombobox.js","sources":["../../../../../src/components/Combobox/useCombobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport keycode from 'keycode';\nimport { v4 as uuid } from 'uuid';\nimport { ComboboxProps } from './Combobox';\nimport {\n setInputValueByRef,\n getIndexFromValue,\n findByValue,\n useFlattenedData,\n sanitizeItem,\n getOptionParents,\n filterData,\n} from '../Listbox/util';\nimport { createCustomKeyboardEvent } from '../../utils/input';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { getId, ScrollableListItemValue, ScrollableListPropsWithRef } from '../Listbox/ScrollableList';\n\nconst convertToInputValue = (value: ScrollableListItemValue | undefined) => String(value ?? '');\n\ntype useCombobox = React.HTMLAttributes<HTMLDivElement> & {\n combobox: React.HTMLAttributes<HTMLSpanElement>;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'> & { ref: React.RefObject<HTMLInputElement> };\n list: ScrollableListPropsWithRef;\n popover: { open: boolean; onOpenChange: (open: boolean) => void };\n};\n\nexport const useCombobox = (\n {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n data: unfilteredData = [],\n defaultValue,\n disabled,\n id: nativeId,\n inline,\n loading: __,\n onChange,\n onClick,\n onKeyDown,\n readOnly,\n value,\n ...props\n }: ComboboxProps,\n ref: React.Ref<HTMLInputElement>\n): useCombobox => {\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const listRef = React.useRef<HTMLUListElement>(null);\n const [open, setOpen] = React.useState(false);\n const listId = React.useMemo(() => uuid(), []);\n const [inputValue, setInputValue] = React.useState<string>(convertToInputValue(value));\n const shouldFilterData = !inline || (inline && inputValue !== convertToInputValue(value));\n const flattenedData = useFlattenedData(unfilteredData);\n const data = React.useMemo(\n () => (shouldFilterData ? filterData(flattenedData, inputValue) : flattenedData),\n [shouldFilterData, inputValue, flattenedData]\n );\n // listbox/select change value _with_ the index, but combobox changes on select of an index (click/enter), so we need state\n const [currentIndex, setCurrentIndex] = React.useState<number | undefined>(\n inputValue !== undefined ? getIndexFromValue(data, inputValue) : undefined\n );\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n setInputValueByRef(inputRef.current, option.value, 'focusout');\n }\n }\n };\n\n const setCurrentValue = (index: number | undefined) => {\n if (index === undefined) {\n return;\n }\n\n const option = data[index];\n\n // if the selected option is not already selected, trigger blur event\n if (option.value !== value) {\n setInputValueByIndex(index);\n } else {\n // if the selected option is already selected, refill input with its value\n setInputValue(convertToInputValue(value));\n }\n };\n\n // ensure the external value is synced with the internal value when mounting, e.g. incase a default value was set\n React.useEffect(() => {\n if (defaultValue && !value) {\n setInputValueByIndex(getIndexFromValue(data, defaultValue));\n }\n }, [data]);\n\n // update input value if it changed 'externally', e.g. clicking/entering an item in the listbox, from a modal etc\n React.useEffect(() => {\n if (value !== undefined && value !== inputValue) {\n setInputValue(convertToInputValue(value));\n }\n }, [value]);\n\n // show listbox based on input value\n React.useEffect(() => {\n // don't show the popover if the internal (input) value already is the current value\n // this prevents the popover showing after selecting a value or pressing escape\n const isCurrentValue = value !== undefined && value !== null && inputValue === String(value);\n\n if (inputValue && data.length && !isCurrentValue) {\n setCurrentIndex(0);\n\n if (!open) {\n setOpen(true);\n }\n } else {\n setOpen(false);\n }\n }, [inputValue, data]);\n\n React.useEffect(() => {\n if (open) {\n setCurrentIndex(getIndexFromValue(data, inputValue) || 0);\n } else {\n setCurrentIndex(undefined);\n }\n }, [open]);\n\n // event handlers\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>): void => {\n event.persist();\n\n if (event.relatedTarget === listRef.current) {\n event.preventDefault();\n return;\n }\n\n if (onChange && event.target.value !== value) {\n const item = findByValue(flattenedData, event.target.value);\n (event as any).detail = sanitizeItem(item);\n\n const parents = getOptionParents(flattenedData, item?.path);\n\n if (parents !== null && parents.length > 0) {\n (event as any).detail.parents = parents;\n }\n\n onChange(event);\n }\n\n if (props.onBlur) {\n props.onBlur(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n setInputValue(event.target.value);\n };\n\n const handleInputClick = (event: React.MouseEvent<HTMLInputElement>): void => {\n if (inline || (!open && inputValue && data.length)) {\n setOpen(true);\n }\n\n if (onClick) {\n event.persist();\n onClick(event);\n }\n };\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n event.persist();\n\n switch (event.keyCode) {\n case keycode('backspace'): {\n return;\n }\n\n case keycode('escape'): {\n event.preventDefault();\n setInputValue(convertToInputValue(value));\n setOpen(false);\n return;\n }\n\n case keycode('tab'):\n case keycode('enter'): {\n if (event.keyCode !== keycode('tab')) {\n event.preventDefault();\n }\n\n setCurrentValue(currentIndex);\n setOpen(false);\n return;\n }\n\n case keycode('up'):\n case keycode('down'):\n case keycode('home'):\n case keycode('end'): {\n if (open) {\n event.preventDefault();\n }\n break;\n }\n\n default:\n }\n\n // we aren't focused on the list, so manually forward the keydown event to it\n if (listRef.current) {\n listRef.current.dispatchEvent(createCustomKeyboardEvent(event));\n }\n\n if (inline && !open) {\n if (event.keyCode === keycode('up') || event.keyCode === keycode('down')) {\n event.preventDefault();\n const initialIndex = event.keyCode === keycode('up') ? data.length - 1 : 0;\n setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);\n setOpen(true);\n }\n }\n\n if (!event.isDefaultPrevented() && onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxChange = (index: number): void => {\n setCurrentIndex(index);\n };\n\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>, index: number): void => {\n event.preventDefault();\n setCurrentValue(index);\n setOpen(false);\n };\n\n const combobox = {\n 'aria-expanded': open,\n 'aria-owns': listId,\n 'aria-haspopup': 'listbox' as const,\n role: 'combobox',\n };\n\n const input = {\n ...props,\n 'aria-controls': listId,\n // Indicates that the autocomplete behavior of the text input is to suggest a list of possible values in a popup and that the suggestions\n // are related to the string that is present in the textbox\n 'aria-autocomplete': 'list' as const,\n // Enables assistive technologies to know which element the application regards as focused while DOM focus remains on the input element\n 'aria-activedescendant':\n currentIndex !== undefined && data[currentIndex] ? getId(listId, String(data[currentIndex].value)) : undefined,\n 'aria-labelledby': ariaLabelledBy,\n disabled,\n onBlur: !disabled && !readOnly ? handleInputBlur : undefined,\n onChange: !disabled && !readOnly ? handleInputChange : undefined,\n onClick: !disabled && !readOnly ? handleInputClick : undefined,\n onKeyDown: !disabled && !readOnly ? handleInputKeyDown : undefined,\n readOnly,\n ref: inputRef,\n type: 'text',\n value: inputValue || '',\n };\n\n const list: ScrollableListPropsWithRef = {\n 'aria-labelledby': ariaLabelledBy,\n data,\n disabled,\n id: listId,\n onChange: handleListboxChange,\n onClick: handleListboxClick,\n ref: listRef,\n scrollOnFocus: false,\n tabIndex: -1,\n value: currentIndex,\n };\n\n return {\n combobox,\n input,\n list,\n popover: {\n open,\n onOpenChange: setOpen,\n //visible: !data.length ? false : open,\n },\n };\n};\n"],"names":["convertToInputValue","value","String","useCombobox","ref","ariaLabelledBy","data","unfilteredData","defaultValue","disabled","inline","onChange","onClick","onKeyDown","readOnly","props","inputRef","useProxiedRef","listRef","React","open","setOpen","listId","uuid","inputValue","setInputValue","shouldFilterData","flattenedData","useFlattenedData","filterData","undefined","getIndexFromValue","currentIndex","setCurrentIndex","setInputValueByIndex","index","option","setInputValueByRef","current","setCurrentValue","isCurrentValue","length","handleInputBlur","event","persist","relatedTarget","preventDefault","target","item","findByValue","detail","sanitizeItem","parents","getOptionParents","path","onBlur","handleInputChange","handleInputClick","handleInputKeyDown","keyCode","keycode","dispatchEvent","createCustomKeyboardEvent","initialIndex","isDefaultPrevented","handleListboxChange","handleListboxClick","combobox","role","input","getId","type","list","id","scrollOnFocus","tabIndex","popover","onOpenChange"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import { forwardRef, createElement } from 'react';
3
3
  import cn from 'classnames';
4
- import { IconButton } from '../IconButton/IconButton.js';
5
4
  import { useLocalization } from '../Provider/Provider.js';
5
+ import { Popover } from '../Popover/Popover.js';
6
+ import { IconButton } from '../IconButton/IconButton.js';
6
7
  import { Calendar } from '../Calendar/Calendar.js';
7
8
  import { Input } from '../Input/Input.js';
8
9
  import { useDatepicker } from './useDatepicker.js';
9
- import { Popover } from '../Popover/Popover.js';
10
10
 
11
11
  var _excluded = ["className", "onReset", "style", "shortcuts", "shortcutsText"];
12
12
  var Datepicker = /*#__PURE__*/forwardRef(function Datepicker(props, ref) {
@@ -11,6 +11,7 @@ var DialogContext = /*#__PURE__*/createContext({
11
11
  },
12
12
  onClose: function onClose() {},
13
13
  props: {},
14
+ ref: null,
14
15
  size: 'sm'
15
16
  });
16
17
  var useCurrentDialog = function useCurrentDialog() {
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","sources":["../../../../../src/components/Dialog/Context.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-function */\nimport * as React from 'react';\nimport { DialogSize } from './types';\n\nexport type DialogContext = {\n draggable: boolean;\n drawer?: {\n open: boolean;\n toggle: () => void;\n };\n elements: {\n drawer?: React.ReactNode;\n extra?: React.ReactNode;\n };\n close: () => void;\n onClose?: () => void;\n props: {};\n size: DialogSize;\n};\n\nexport const DialogContext = React.createContext<DialogContext>({\n close: () => {},\n draggable: false,\n drawer: undefined,\n elements: {\n drawer: undefined,\n extra: undefined,\n },\n onClose: () => {},\n props: {},\n size: 'sm',\n});\n\nexport const useCurrentDialog = () => {\n return React.useContext(DialogContext);\n};\n"],"names":["DialogContext","React","close","draggable","drawer","undefined","elements","extra","onClose","props","size","useCurrentDialog"],"mappings":";;AAAA;IAoBaA,aAAa,gBAAGC,aAAA,CAAmC;AAC5DC,EAAAA,KAAK,EAAE,mBADqD;AAE5DC,EAAAA,SAAS,EAAE,KAFiD;AAG5DC,EAAAA,MAAM,EAAEC,SAHoD;AAI5DC,EAAAA,QAAQ,EAAE;AACNF,IAAAA,MAAM,EAAEC,SADF;AAENE,IAAAA,KAAK,EAAEF;AAFD,GAJkD;AAQ5DG,EAAAA,OAAO,EAAE,qBARmD;AAS5DC,EAAAA,KAAK,EAAE,EATqD;AAU5DC,EAAAA,IAAI,EAAE;AAVsD,CAAnC;IAahBC,gBAAgB,GAAG,SAAnBA,gBAAmB;AAC5B,SAAOV,UAAA,CAAiBD,aAAjB,CAAP;AACH;;;;"}
1
+ {"version":3,"file":"Context.js","sources":["../../../../../src/components/Dialog/Context.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-function */\nimport * as React from 'react';\nimport { DialogSize } from './types';\n\nexport type DialogContext = {\n draggable: boolean;\n drawer?: {\n open: boolean;\n toggle: () => void;\n };\n elements: {\n drawer?: React.ReactNode;\n extra?: React.ReactNode;\n };\n close: () => void;\n onClose?: () => void;\n props: {};\n ref: React.Ref<HTMLElement>;\n size: DialogSize;\n};\n\nexport const DialogContext = React.createContext<DialogContext>({\n close: () => {},\n draggable: false,\n drawer: undefined,\n elements: {\n drawer: undefined,\n extra: undefined,\n },\n onClose: () => {},\n props: {},\n ref: null,\n size: 'sm',\n});\n\nexport const useCurrentDialog = () => {\n return React.useContext(DialogContext);\n};\n"],"names":["DialogContext","React","close","draggable","drawer","undefined","elements","extra","onClose","props","ref","size","useCurrentDialog"],"mappings":";;AAAA;IAqBaA,aAAa,gBAAGC,aAAA,CAAmC;AAC5DC,EAAAA,KAAK,EAAE,mBADqD;AAE5DC,EAAAA,SAAS,EAAE,KAFiD;AAG5DC,EAAAA,MAAM,EAAEC,SAHoD;AAI5DC,EAAAA,QAAQ,EAAE;AACNF,IAAAA,MAAM,EAAEC,SADF;AAENE,IAAAA,KAAK,EAAEF;AAFD,GAJkD;AAQ5DG,EAAAA,OAAO,EAAE,qBARmD;AAS5DC,EAAAA,KAAK,EAAE,EATqD;AAU5DC,EAAAA,GAAG,EAAE,IAVuD;AAW5DC,EAAAA,IAAI,EAAE;AAXsD,CAAnC;IAchBC,gBAAgB,GAAG,SAAnBA,gBAAmB;AAC5B,SAAOX,UAAA,CAAiBD,aAAjB,CAAP;AACH;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../../_virtual/_rollupPluginBabelHelpers.js';
2
- import { useMemo, Children, useState, createElement } from 'react';
2
+ import { forwardRef, useMemo, Children, useState, createElement } from 'react';
3
3
  import { Root } from '@radix-ui/react-dialog';
4
4
  import { DialogContext } from './Context.js';
5
5
  import { Trigger } from './components/Trigger.js';
@@ -27,7 +27,7 @@ var useSeparatedChildren = function useSeparatedChildren(initialChildren) {
27
27
  }, [initialChildren]);
28
28
  };
29
29
 
30
- var Dialog = function Dialog(props) {
30
+ var Dialog = /*#__PURE__*/forwardRef(function (props, ref) {
31
31
  var initialChildren = props.children,
32
32
  _props$draggable = props.draggable,
33
33
  draggable = _props$draggable === void 0 ? false : _props$draggable,
@@ -70,7 +70,8 @@ var Dialog = function Dialog(props) {
70
70
  },
71
71
  onClose: onClose,
72
72
  props: otherProps,
73
- size: size
73
+ size: size,
74
+ ref: ref
74
75
  };
75
76
  }, [open, drawerOpen, drawer, extra, otherProps]);
76
77
  return createElement(DialogContext.Provider, {
@@ -80,7 +81,7 @@ var Dialog = function Dialog(props) {
80
81
  open: open,
81
82
  onOpenChange: setOpen
82
83
  }));
83
- };
84
+ });
84
85
  Dialog.Trigger = Trigger;
85
86
  Dialog.Content = Content;
86
87
  Dialog.Title = Title;
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.js","sources":["../../../../../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport './Dialog.css';\nimport { Trigger } from './components/Trigger';\nimport { Content, Title, Footer, Close } from './components/Content';\nimport { Drawer } from './components/Drawer';\nimport { Extra } from './components/Extra';\nimport { DialogContext } from './Context';\nimport { DialogSize } from './types';\n\nexport type DialogTexts = {\n /**\n * Aria-label for close icon button in dialog.\n * To read more about how to provide the text, see [Provider](component:provider) component\n */\n close: string;\n drag: string;\n};\n\nexport type DialogProps = {\n children: React.ReactNode | React.ReactNode[];\n /** Allows dragging the dialog around the screen (window constrained) */\n draggable?: boolean;\n /** Handler called when dialog closes by user interaction */\n onClose?: () => void;\n /** Set whether the dialog is open by default or not, use when not providing a trigger */\n open?: boolean;\n /** Size of the dialog. This is the recommended way to set a size for dialog component. */\n size?: DialogSize;\n};\n\nconst useSeparatedChildren = initialChildren => {\n return React.useMemo(() => {\n const children: any[] = [];\n let drawer;\n let extra;\n\n React.Children.forEach(initialChildren, (child: any) => {\n if (child.type.displayName === 'Drawer') {\n drawer = child;\n } else if (child.type.displayName === 'Extra') {\n extra = child;\n } else {\n children.push(child);\n }\n });\n\n return [children, drawer, extra];\n }, [initialChildren]);\n};\n\nexport const Dialog = (props: DialogProps): JSX.Element => {\n const { children: initialChildren, draggable = false, onClose, open: defaultOpen, size = 'sm', ...otherProps } = props;\n const [children, drawer, extra] = useSeparatedChildren(initialChildren);\n\n const [open, setOpen] = React.useState(defaultOpen);\n const [drawerOpen, setDrawerOpen] = React.useState(false);\n\n const context = React.useMemo(\n () => ({\n close: () => setOpen(false),\n draggable,\n drawer: {\n open: drawerOpen,\n toggle: () => setDrawerOpen(isDrawerOpen => !isDrawerOpen),\n },\n elements: {\n drawer,\n extra,\n },\n onClose,\n props: otherProps,\n size,\n }),\n [open, drawerOpen, drawer, extra, otherProps]\n );\n\n return (\n <DialogContext.Provider value={context}>\n <DialogPrimitive.Root children={children} open={open} onOpenChange={setOpen} />\n </DialogContext.Provider>\n );\n};\n\nDialog.Trigger = Trigger;\nDialog.Content = Content;\nDialog.Title = Title;\nDialog.Footer = Footer;\nDialog.Extra = Extra;\nDialog.Drawer = Drawer;\nDialog.Close = Close;\n"],"names":["useSeparatedChildren","initialChildren","React","children","drawer","extra","forEach","child","type","displayName","push","Dialog","props","draggable","onClose","defaultOpen","open","size","otherProps","setOpen","drawerOpen","setDrawerOpen","context","close","toggle","isDrawerOpen","elements","DialogContext","Provider","value","DialogPrimitive","onOpenChange","Trigger","Content","Title","Footer","Extra","Drawer","Close"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog.js","sources":["../../../../../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport './Dialog.css';\nimport { DialogTriggerProps, Trigger } from './components/Trigger';\nimport {\n Content,\n Title,\n Footer,\n Close,\n DialogContentProps,\n DialogTitleProps,\n DialogFooterProps,\n DialogCloseProps,\n} from './components/Content';\nimport { DialogDrawerProps, Drawer } from './components/Drawer';\nimport { DialogExtraProps, Extra } from './components/Extra';\nimport { DialogContext } from './Context';\nimport { DialogSize } from './types';\n\nexport { DialogContentProps, DialogTitleProps, DialogFooterProps, DialogCloseProps };\n\nexport type DialogTexts = {\n /**\n * Aria-label for close icon button in dialog.\n * To read more about how to provide the text, see [Provider](component:provider) component\n */\n close: string;\n drag: string;\n};\n\nexport type DialogProps = {\n children: React.ReactNode | React.ReactNode[];\n /** Allows dragging the dialog around the screen (window constrained) */\n draggable?: boolean;\n /** Handler called when dialog closes by user interaction */\n onClose?: () => void;\n /** Set whether the dialog is open by default or not, use when not providing a trigger */\n open?: boolean;\n /** Size of the dialog. This is the recommended way to set a size for dialog component. */\n size?: DialogSize;\n};\n\nconst useSeparatedChildren = initialChildren => {\n return React.useMemo(() => {\n const children: any[] = [];\n let drawer;\n let extra;\n\n React.Children.forEach(initialChildren, (child: any) => {\n if (child.type.displayName === 'Drawer') {\n drawer = child;\n } else if (child.type.displayName === 'Extra') {\n extra = child;\n } else {\n children.push(child);\n }\n });\n\n return [children, drawer, extra];\n }, [initialChildren]);\n};\n\nexport type ForwardedDialogWithStatics = React.ForwardRefExoticComponent<DialogProps & React.RefAttributes<HTMLElement>> & {\n Trigger: React.ForwardRefExoticComponent<DialogTriggerProps>;\n Content: React.ForwardRefExoticComponent<DialogContentProps>;\n Title: React.ForwardRefExoticComponent<DialogTitleProps>;\n Footer: React.ForwardRefExoticComponent<DialogFooterProps>;\n Extra: React.ForwardRefExoticComponent<DialogExtraProps>;\n Drawer: React.ForwardRefExoticComponent<DialogDrawerProps>;\n Close: React.ForwardRefExoticComponent<DialogCloseProps>;\n};\n\nexport const Dialog = React.forwardRef((props: DialogProps, ref: React.Ref<HTMLElement>): JSX.Element => {\n const { children: initialChildren, draggable = false, onClose, open: defaultOpen, size = 'sm', ...otherProps } = props;\n const [children, drawer, extra] = useSeparatedChildren(initialChildren);\n\n const [open, setOpen] = React.useState(defaultOpen);\n const [drawerOpen, setDrawerOpen] = React.useState(false);\n\n const context = React.useMemo(\n () => ({\n close: () => setOpen(false),\n draggable,\n drawer: {\n open: drawerOpen,\n toggle: () => setDrawerOpen(isDrawerOpen => !isDrawerOpen),\n },\n elements: {\n drawer,\n extra,\n },\n onClose,\n props: otherProps,\n size,\n ref,\n }),\n [open, drawerOpen, drawer, extra, otherProps]\n );\n\n return (\n <DialogContext.Provider value={context}>\n <DialogPrimitive.Root children={children} open={open} onOpenChange={setOpen} />\n </DialogContext.Provider>\n );\n}) as ForwardedDialogWithStatics;\n\nDialog.Trigger = Trigger;\nDialog.Content = Content;\nDialog.Title = Title;\nDialog.Footer = Footer;\nDialog.Extra = Extra;\nDialog.Drawer = Drawer;\nDialog.Close = Close;\n"],"names":["useSeparatedChildren","initialChildren","React","children","drawer","extra","forEach","child","type","displayName","push","Dialog","props","ref","draggable","onClose","defaultOpen","open","size","otherProps","setOpen","drawerOpen","setDrawerOpen","context","close","toggle","isDrawerOpen","elements","DialogContext","Provider","value","DialogPrimitive","onOpenChange","Trigger","Content","Title","Footer","Extra","Drawer","Close"],"mappings":"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"}
@@ -1,14 +1,15 @@
1
1
  import { extends as _extends } from '../../../../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import { forwardRef, createElement } from 'react';
3
3
  import cn from 'classnames';
4
- import { IconButton } from '../../IconButton/IconButton.js';
4
+ import { Backdrop } from '../../Backdrop/Backdrop.js';
5
5
  import { useLocalization } from '../../Provider/Provider.js';
6
- import { useProxiedRef } from '../../../utils/hooks/useProxiedRef.js';
7
6
  import { Title as Title$1, Close as Close$1, Portal, Overlay, Content as Content$1 } from '@radix-ui/react-dialog';
8
7
  import { useCurrentDialog } from '../Context.js';
8
+ import { useProxiedRef } from '../../../utils/hooks/useProxiedRef.js';
9
9
  import { useDraggable } from '../../../utils/hooks/useDraggable.js';
10
10
  import { useCurrentMenu } from '../../Menu/Context.js';
11
11
  import { Group } from '../../Group/Group.js';
12
+ import { IconButton } from '../../IconButton/IconButton.js';
12
13
 
13
14
  var Title = /*#__PURE__*/forwardRef(function DialogTitle(props, ref) {
14
15
  return createElement(Title$1, Object.assign({}, props, {
@@ -18,7 +19,7 @@ var Title = /*#__PURE__*/forwardRef(function DialogTitle(props, ref) {
18
19
  });
19
20
  var Footer = /*#__PURE__*/forwardRef(function DialogFooter(props, ref) {
20
21
  return createElement("div", Object.assign({}, props, {
21
- className: "flex justify-end mt-8",
22
+ className: "mt-8 flex justify-end",
22
23
  ref: ref
23
24
  }), createElement(Group, null, props.children));
24
25
  });
@@ -53,17 +54,16 @@ var Content = /*#__PURE__*/forwardRef(function DialogContent(props, ref) {
53
54
  };
54
55
  }
55
56
 
56
- var className = cn('bg-white rounded fixed-center', {
57
+ var className = cn('bg-white rounded mt-16 mx-auto', {
57
58
  'w-128 text-center justify-center': dialog.size === 'dialog',
58
59
  'w-xs': dialog.size === 'xs',
59
60
  'w-sm': dialog.size === 'sm',
60
61
  'w-md': dialog.size === 'md',
61
62
  'w-lg': dialog.size === 'lg'
62
63
  });
63
- var containerClassName = cn('yt-dialog bg-white p-6 rounded relative z-[999]', 'shadow-[0_6px_9px_0_rgba(89,85,98,0.3),0_0_1px_0_rgba(89,85,98,0.2)]', {
64
+ var containerClassName = cn('bg-white p-6 rounded relative z-[999]', 'shadow-[0_6px_9px_0_rgba(89,85,98,0.3),0_0_1px_0_rgba(89,85,98,0.2)]', {
64
65
  'rounded-b-none': !!dialog.elements.extra
65
- }, props.className);
66
- var overlayClassName = cn('fixed inset-0 cursor-default overflow-y-auto bg-[rgba(50,46,62,0.8)] animate-[fade-in_150ms] aria-hidden:hidden'); // the chosen behaviour in taco is that outside clicks do not close the dialog
66
+ }, props.className); // the chosen behaviour in taco is that outside clicks do not close the dialog
67
67
 
68
68
  var handleInteractOutside = function handleInteractOutside(event) {
69
69
  return event.preventDefault();
@@ -81,10 +81,9 @@ var Content = /*#__PURE__*/forwardRef(function DialogContent(props, ref) {
81
81
  }
82
82
 
83
83
  return createElement(Portal, null, createElement(Overlay, {
84
- className: overlayClassName
85
- }, createElement(Content$1, Object.assign({}, props, {
84
+ asChild: true
85
+ }, createElement(Backdrop, null, createElement(Content$1, Object.assign({}, props, {
86
86
  className: className,
87
- "data-taco": "dialog",
88
87
  onEscapeKeyDown: dialog.onClose,
89
88
  onInteractOutside: handleInteractOutside,
90
89
  onCloseAutoFocus: handleCloseAutoFocus,
@@ -94,10 +93,11 @@ var Content = /*#__PURE__*/forwardRef(function DialogContent(props, ref) {
94
93
  top: dialog.draggable ? "calc(50% + " + position.y + "px)" : undefined
95
94
  })
96
95
  }), createElement("div", {
97
- className: containerClassName
96
+ className: containerClassName,
97
+ "data-taco": "dialog"
98
98
  }, output, dialog.draggable && createElement("div", Object.assign({}, dragHandleProps, {
99
99
  "aria-label": texts.dialog.drag,
100
- className: "yt-dialog__drag absolute-center-x h-3 rounded bg-grey-light cursor-move text-center w-24 top-1.5"
100
+ className: "yt-dialog__drag absolute-center-x bg-grey-light top-1.5 h-3 w-24 cursor-move rounded text-center"
101
101
  })), createElement(Close$1, {
102
102
  asChild: true,
103
103
  onClick: dialog.onClose
@@ -106,7 +106,7 @@ var Content = /*#__PURE__*/forwardRef(function DialogContent(props, ref) {
106
106
  "aria-label": texts.dialog.close,
107
107
  className: "absolute top-0 right-0 mt-2 mr-2",
108
108
  icon: "close"
109
- }))), dialog.elements.drawer, dialog.elements.extra)));
109
+ }))), dialog.elements.drawer, dialog.elements.extra))));
110
110
  });
111
111
 
112
112
  export { Close, Content, Footer, Title };