@economic/taco 1.26.2 → 1.28.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. package/dist/components/Calendar/Calendar.d.ts +2 -0
  2. package/dist/components/Header/components/Button.d.ts +0 -2
  3. package/dist/components/Header/components/Link.d.ts +0 -1
  4. package/dist/components/Header/components/SecondaryNavigation.d.ts +2 -2
  5. package/dist/components/Icon/components/WorkflowTemplateBasic.d.ts +3 -0
  6. package/dist/components/Icon/components/index.d.ts +1 -1
  7. package/dist/components/Input/Input.d.ts +1 -1
  8. package/dist/components/Menu/components/Item.d.ts +1 -1
  9. package/dist/components/Menu/components/Link.d.ts +1 -1
  10. package/dist/components/Navigation2/components/Link.d.ts +1 -1
  11. package/dist/components/OverflowGroup/OverflowGroup.d.ts +5 -0
  12. package/dist/components/Provider/Localization.d.ts +1 -0
  13. package/dist/components/Select2/components/Option.d.ts +1 -1
  14. package/dist/components/Select2/components/Search.d.ts +1 -1
  15. package/dist/components/Tag/Tag.d.ts +1 -1
  16. package/dist/components/Toast/util.d.ts +2 -1
  17. package/dist/esm/index.css +3 -3
  18. package/dist/esm/packages/taco/src/components/Alert/Alert.js +1 -1
  19. package/dist/esm/packages/taco/src/components/Alert/Alert.js.map +1 -1
  20. package/dist/esm/packages/taco/src/components/Badge/Badge.js +1 -1
  21. package/dist/esm/packages/taco/src/components/Badge/Badge.js.map +1 -1
  22. package/dist/esm/packages/taco/src/components/BadgeIcon/BadgeIcon.js +1 -1
  23. package/dist/esm/packages/taco/src/components/BadgeIcon/BadgeIcon.js.map +1 -1
  24. package/dist/esm/packages/taco/src/components/Calendar/Calendar.js +12 -5
  25. package/dist/esm/packages/taco/src/components/Calendar/Calendar.js.map +1 -1
  26. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +1 -1
  27. package/dist/esm/packages/taco/src/components/Datepicker/Datepicker.js +8 -4
  28. package/dist/esm/packages/taco/src/components/Datepicker/Datepicker.js.map +1 -1
  29. package/dist/esm/packages/taco/src/components/Drawer/Drawer.js +1 -1
  30. package/dist/esm/packages/taco/src/components/Drawer/components/Content.js +2 -2
  31. package/dist/esm/packages/taco/src/components/Header/components/AgreementSelector.js +1 -1
  32. package/dist/esm/packages/taco/src/components/Header/components/Button.js +2 -6
  33. package/dist/esm/packages/taco/src/components/Header/components/Button.js.map +1 -1
  34. package/dist/esm/packages/taco/src/components/Header/components/Link.js +3 -7
  35. package/dist/esm/packages/taco/src/components/Header/components/Link.js.map +1 -1
  36. package/dist/esm/packages/taco/src/components/Header/components/PrimaryNavigation.js +7 -114
  37. package/dist/esm/packages/taco/src/components/Header/components/PrimaryNavigation.js.map +1 -1
  38. package/dist/esm/packages/taco/src/components/Header/components/SecondaryNavigation.js +2 -2
  39. package/dist/esm/packages/taco/src/components/Header/components/SecondaryNavigation.js.map +1 -1
  40. package/dist/esm/packages/taco/src/components/Icon/Icon.js +1 -0
  41. package/dist/esm/packages/taco/src/components/Icon/Icon.js.map +1 -1
  42. package/dist/esm/packages/taco/src/components/Icon/components/WorkflowTemplateBasic.js +18 -0
  43. package/dist/esm/packages/taco/src/components/Icon/components/WorkflowTemplateBasic.js.map +1 -0
  44. package/dist/esm/packages/taco/src/components/Icon/components/index.js +2 -0
  45. package/dist/esm/packages/taco/src/components/Icon/components/index.js.map +1 -1
  46. package/dist/esm/packages/taco/src/components/Input/Input.js +1 -1
  47. package/dist/esm/packages/taco/src/components/Listbox/ScrollableList.js +1 -1
  48. package/dist/esm/packages/taco/src/components/Listbox/useListbox.js +1 -1
  49. package/dist/esm/packages/taco/src/components/Listbox/useMultiListbox.js +1 -1
  50. package/dist/esm/packages/taco/src/components/Menu/Menu.js +2 -2
  51. package/dist/esm/packages/taco/src/components/Menu/components/Content.js +1 -1
  52. package/dist/esm/packages/taco/src/components/Menu/components/Header.js +1 -1
  53. package/dist/esm/packages/taco/src/components/Menu/components/Item.js +1 -1
  54. package/dist/esm/packages/taco/src/components/Menu/components/Link.js +1 -1
  55. package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js +1 -1
  56. package/dist/esm/packages/taco/src/components/OverflowGroup/OverflowGroup.js +75 -0
  57. package/dist/esm/packages/taco/src/components/OverflowGroup/OverflowGroup.js.map +1 -0
  58. package/dist/esm/packages/taco/src/components/Provider/Localization.js +1 -0
  59. package/dist/esm/packages/taco/src/components/Provider/Localization.js.map +1 -1
  60. package/dist/esm/packages/taco/src/components/Select/useSelect.js +1 -1
  61. package/dist/esm/packages/taco/src/components/Select2/Select2.js +2 -2
  62. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js +3 -3
  63. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js.map +1 -1
  64. package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js +1 -1
  65. package/dist/esm/packages/taco/src/components/Table/components/WindowedTable.js +1 -1
  66. package/dist/esm/packages/taco/src/components/Table/hooks/useTableKeyboardNavigation.js +1 -1
  67. package/dist/esm/packages/taco/src/components/Table2/components/column/Cell.js +1 -1
  68. package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js +1 -1
  69. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +1 -1
  70. package/dist/esm/packages/taco/src/components/Tag/Tag.js +1 -1
  71. package/dist/esm/packages/taco/src/components/Tag/Tag.js.map +1 -1
  72. package/dist/esm/packages/taco/src/components/Toast/Toast.js +2 -2
  73. package/dist/esm/packages/taco/src/components/Toast/Toast.js.map +1 -1
  74. package/dist/esm/packages/taco/src/components/Toast/util.js +2 -1
  75. package/dist/esm/packages/taco/src/components/Toast/util.js.map +1 -1
  76. package/dist/esm/packages/taco/src/hooks/useIntersectionObserver.js +1 -1
  77. package/dist/esm/packages/taco/src/hooks/useIntersectionObserver.js.map +1 -1
  78. package/dist/esm/packages/taco/src/index.js +8 -8
  79. package/dist/esm/packages/taco/src/utils/{taillwind.js → tailwind.js} +1 -1
  80. package/dist/esm/packages/taco/src/utils/tailwind.js.map +1 -0
  81. package/dist/index.css +3 -3
  82. package/dist/index.d.ts +3 -3
  83. package/dist/taco.cjs.development.js +1245 -1302
  84. package/dist/taco.cjs.development.js.map +1 -1
  85. package/dist/taco.cjs.production.min.js +1 -1
  86. package/dist/taco.cjs.production.min.js.map +1 -1
  87. package/dist/types.d.ts +1 -1
  88. package/dist/utils/tailwind.d.ts +6 -1
  89. package/package.json +4 -3
  90. package/types.json +11 -14
  91. package/dist/components/ButtonGroup/ButtonGroup.d.ts +0 -5
  92. package/dist/esm/packages/taco/src/components/ButtonGroup/ButtonGroup.js +0 -46
  93. package/dist/esm/packages/taco/src/components/ButtonGroup/ButtonGroup.js.map +0 -1
  94. package/dist/esm/packages/taco/src/utils/taillwind.js.map +0 -1
  95. package/dist/utils/taillwind.d.ts +0 -6
@@ -10,9 +10,6 @@ var cn = _interopDefault(require('classnames'));
10
10
  var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
11
11
  var AccordionPrimitive = require('@radix-ui/react-accordion');
12
12
  var TooltipPrimitive = require('@radix-ui/react-tooltip');
13
- var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
14
- var reactUseControllableState = require('@radix-ui/react-use-controllable-state');
15
- var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
16
13
  var ReactDayPicker = _interopDefault(require('react-day-picker'));
17
14
  var CheckboxPrimitive = require('@radix-ui/react-checkbox');
18
15
  var uuid = require('uuid');
@@ -24,7 +21,11 @@ var interactions = require('@react-aria/interactions');
24
21
  var framerMotion = require('framer-motion');
25
22
  var focus = require('@react-aria/focus');
26
23
  var ScrollAreaPrimitive = require('@radix-ui/react-scroll-area');
24
+ var reactUseControllableState = require('@radix-ui/react-use-controllable-state');
27
25
  var HoverCardPrimitive = require('@radix-ui/react-hover-card');
26
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
27
+ var RadioGroupPrimitive = require('@radix-ui/react-radio-group');
28
+ var PrimitiveSwitch = require('@radix-ui/react-switch');
28
29
  var reactTable = require('react-table');
29
30
  var reactIntersectionObserver = require('react-intersection-observer');
30
31
  var reactWindow = require('react-window');
@@ -35,7 +36,6 @@ var get = _interopDefault(require('lodash/get'));
35
36
  var compact = _interopDefault(require('lodash/compact'));
36
37
  var pullAt = _interopDefault(require('lodash/pullAt'));
37
38
  var reactTable$1 = require('@tanstack/react-table');
38
- var PrimitiveSwitch = require('@radix-ui/react-switch');
39
39
  var ReactDOM = _interopDefault(require('react-dom'));
40
40
  var reactVirtual = require('react-virtual');
41
41
  var core = require('@dnd-kit/core');
@@ -44,7 +44,6 @@ var utilities = require('@dnd-kit/utilities');
44
44
  var TabsPrimitive = require('@radix-ui/react-tabs');
45
45
  var Joyride = require('react-joyride');
46
46
  var Joyride__default = _interopDefault(Joyride);
47
- var reactPortal = require('@radix-ui/react-portal');
48
47
 
49
48
  const AVAILABLE_COLORS = ['green', 'yellow', 'red', 'blue', 'purple', 'brown', 'pink', 'orange', 'grey', 'transparent'];
50
49
  const getColorByState = state => {
@@ -2950,6 +2949,20 @@ function IconWebsite(props, svgRef) {
2950
2949
  }
2951
2950
  var Website = /*#__PURE__*/React.forwardRef(IconWebsite);
2952
2951
 
2952
+ function IconWorkflowTemplateBasic(props, svgRef) {
2953
+ return /*#__PURE__*/React.createElement("svg", Object.assign({
2954
+ xmlns: "http://www.w3.org/2000/svg",
2955
+ viewBox: "0 0 24 24",
2956
+ ref: svgRef
2957
+ }, props), /*#__PURE__*/React.createElement("path", {
2958
+ fillRule: "evenodd",
2959
+ clipRule: "evenodd",
2960
+ d: "M12 1l5.762 3.12v6.161L23 13.117v6.763L17.238 23 12 20.164 6.762 23 1 19.88v-6.762l5.238-2.837V4.137L12 1zM6.761 11.183l-4.144 2.244 4.144 2.243 4.143-2.243-4.143-2.244zm4.714 3.12l-4.19 2.269v4.96l4.19-2.27v-4.96zm1.048 4.96l4.19 2.268v-4.96l-4.19-2.268v4.96zm.57-5.837l4.144 2.244 4.144-2.243-4.144-2.244-4.143 2.244zm8.858.877l-4.19 2.269v4.96l4.19-2.27v-4.96zm-9.428-1.753l4.19-2.269V5.305l-4.19 2.27v4.975zm-1.048-4.975l-4.19-2.256v4.962l4.19 2.27V7.574zm-3.62-3.133L12 6.672l4.144-2.243-4.142-2.243-4.145 2.256zm-1.618 17.09v-4.96l-4.19-2.27v4.96l4.19 2.27z",
2961
+ fill: "currentColor"
2962
+ }));
2963
+ }
2964
+ var WorkflowTemplateBasic = /*#__PURE__*/React.forwardRef(IconWorkflowTemplateBasic);
2965
+
2953
2966
  function IconWorkflow(props, svgRef) {
2954
2967
  return /*#__PURE__*/React.createElement("svg", Object.assign({
2955
2968
  xmlns: "http://www.w3.org/2000/svg",
@@ -3190,6 +3203,7 @@ const icons = {
3190
3203
  warning: Warning,
3191
3204
  webshop: Webshop,
3192
3205
  website: Website,
3206
+ 'workflow-template-basic': WorkflowTemplateBasic,
3193
3207
  workflow: Workflow,
3194
3208
  zoom: Zoom
3195
3209
  };
@@ -3208,6 +3222,7 @@ const Icon = /*#__PURE__*/React__default.forwardRef(function Icon(props, ref) {
3208
3222
  return Component ? /*#__PURE__*/React__default.createElement(Component, Object.assign({}, otherProps, {
3209
3223
  className: className,
3210
3224
  "data-taco": "icon",
3225
+ "data-icon-name": name,
3211
3226
  focusable: "false",
3212
3227
  ref: ref,
3213
3228
  role: "img"
@@ -3730,6 +3745,7 @@ const defaultLocalisationTexts = {
3730
3745
  calendar: {
3731
3746
  months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
3732
3747
  weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
3748
+ weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
3733
3749
  actions: {
3734
3750
  previousMonth: 'Previous month',
3735
3751
  nextMonth: 'Next month',
@@ -3998,1078 +4014,608 @@ const Button$1 = /*#__PURE__*/React.forwardRef(function Button(props, ref) {
3998
4014
  }, button);
3999
4015
  });
4000
4016
 
4001
- // merges an external ref (optional) with an internal ref (required)
4002
- const useMergedRef = ref => {
4003
- const internalRef = React__default.useRef(null);
4004
- React__default.useEffect(() => {
4005
- if (ref) {
4006
- if (typeof ref === 'function') {
4007
- ref(internalRef.current);
4008
- } else {
4009
- ref.current = internalRef.current;
4017
+ const thisYear = /*#__PURE__*/new Date().getFullYear();
4018
+ const years = [];
4019
+ for (let i = thisYear - 50; i <= thisYear + 10; i += 1) {
4020
+ years.push(i);
4021
+ }
4022
+ const Navbar = /*#__PURE__*/React.memo(({
4023
+ onMonthChange,
4024
+ onNextClick,
4025
+ onPreviousClick,
4026
+ value = new Date()
4027
+ }) => {
4028
+ const {
4029
+ texts: {
4030
+ calendar: {
4031
+ actions,
4032
+ months
4010
4033
  }
4011
4034
  }
4012
- }, [ref]);
4013
- return internalRef;
4014
- };
4015
-
4016
- const Group = /*#__PURE__*/React.forwardRef(function Group(props, ref) {
4035
+ } = useLocalization();
4036
+ const handleChange = function handleChange(event) {
4037
+ const {
4038
+ year,
4039
+ month
4040
+ } = event.target.form;
4041
+ onMonthChange(new Date(year.value, month.value));
4042
+ };
4043
+ return /*#__PURE__*/React.createElement("div", {
4044
+ className: "mb-1 flex items-center justify-between"
4045
+ }, /*#__PURE__*/React.createElement("form", {
4046
+ className: "inline-flex space-x-1"
4047
+ }, /*#__PURE__*/React.createElement("select", {
4048
+ className: "h-8 px-2",
4049
+ name: "month",
4050
+ onChange: handleChange,
4051
+ value: value.getMonth()
4052
+ }, months.map((month, i) => /*#__PURE__*/React.createElement("option", {
4053
+ key: month,
4054
+ value: i
4055
+ }, month))), /*#__PURE__*/React.createElement("select", {
4056
+ className: "h-8 px-2",
4057
+ name: "year",
4058
+ onChange: handleChange,
4059
+ value: value.getFullYear()
4060
+ }, years.map(year => /*#__PURE__*/React.createElement("option", {
4061
+ key: year,
4062
+ value: year
4063
+ }, String(year))))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Tooltip, {
4064
+ title: actions.previousMonth
4065
+ }, /*#__PURE__*/React.createElement(IconButton, {
4066
+ appearance: "discrete",
4067
+ icon: "chevron-left",
4068
+ "aria-label": actions.previousMonth,
4069
+ onClick: () => onPreviousClick(),
4070
+ rounded: true
4071
+ })), /*#__PURE__*/React.createElement(Tooltip, {
4072
+ title: actions.nextMonth
4073
+ }, /*#__PURE__*/React.createElement(IconButton, {
4074
+ appearance: "discrete",
4075
+ icon: "chevron-right",
4076
+ "aria-label": actions.nextMonth,
4077
+ onClick: () => onNextClick(),
4078
+ rounded: true
4079
+ }))));
4080
+ });
4081
+ const Calendar$1 = /*#__PURE__*/React.forwardRef(function Calendar(props, ref) {
4017
4082
  const {
4018
- as: Tag = 'span',
4019
- orientation = 'horizontal',
4083
+ onChange: handleChange,
4084
+ value,
4085
+ disabledDays,
4020
4086
  ...otherProps
4021
4087
  } = props;
4022
- const className = cn('flex gap-2', {
4023
- 'flex-col ': orientation === 'vertical'
4088
+ const {
4089
+ locale,
4090
+ texts
4091
+ } = useLocalization();
4092
+ const [visibleMonth, setVisibleMonth] = React.useState(value !== null && value !== void 0 ? value : new Date());
4093
+ React.useEffect(() => {
4094
+ if (visibleMonth !== value) {
4095
+ setVisibleMonth(value !== null && value !== void 0 ? value : new Date());
4096
+ }
4097
+ // visibleMonth in deps array breaking month switching logic. It should not be in deps array.
4098
+ }, [value]);
4099
+ const handleDayClick = (date, modifiers, event) => {
4100
+ if (modifiers.outside || modifiers.disabled) {
4101
+ return;
4102
+ }
4103
+ handleChange(date, event);
4104
+ };
4105
+ const handleCalendarClickToday = () => {
4106
+ const today = new Date();
4107
+ // set to midday to avoid UTC offset causing dates to be mismatched server side
4108
+ today.setHours(12);
4109
+ today.setMinutes(0);
4110
+ today.setSeconds(0);
4111
+ handleChange(today);
4112
+ };
4113
+ const className = cn('flex bg-white text-xs p-2', otherProps.className);
4114
+ return /*#__PURE__*/React.createElement("div", {
4115
+ "data-taco": "calendar"
4116
+ }, /*#__PURE__*/React.createElement(ReactDayPicker, Object.assign({}, otherProps, {
4117
+ className: className,
4118
+ month: visibleMonth,
4119
+ selectedDays: value,
4120
+ locale: locale.substring(0, 2),
4121
+ firstDayOfWeek: 1,
4122
+ months: texts.calendar.months,
4123
+ weekdaysLong: texts.calendar.weekdays,
4124
+ weekdaysShort: texts.calendar.weekdaysShort,
4125
+ navbarElement: navProps => /*#__PURE__*/React.createElement(Navbar, Object.assign({}, navProps, {
4126
+ onMonthChange: setVisibleMonth,
4127
+ value: visibleMonth
4128
+ })),
4129
+ onDayClick: handleDayClick,
4130
+ onMonthChange: setVisibleMonth,
4131
+ onTodayButtonClick: handleCalendarClickToday,
4132
+ captionElement: () => null,
4133
+ todayButton: texts.calendar.actions.today,
4134
+ numberOfMonths: 1,
4135
+ ref: ref,
4136
+ disabledDays: disabledDays
4137
+ })));
4138
+ });
4139
+
4140
+ const Content$2 = /*#__PURE__*/React.forwardRef(function CardContent(externalProps, ref) {
4141
+ const {
4142
+ noPadding,
4143
+ ...props
4144
+ } = externalProps;
4145
+ const className = cn('flex-grow overflow-auto', {
4146
+ 'mx-4 mb-4': !noPadding
4024
4147
  }, props.className);
4025
- return /*#__PURE__*/React.createElement(Tag, Object.assign({}, otherProps, {
4148
+ return /*#__PURE__*/React.createElement("div", Object.assign({}, props, {
4026
4149
  className: className,
4027
- "data-taco": "group",
4028
4150
  ref: ref
4029
4151
  }));
4030
4152
  });
4031
-
4032
- const MenuContext = /*#__PURE__*/React.createContext(undefined);
4033
- const useCurrentMenu = () => {
4034
- return React.useContext(MenuContext);
4035
- };
4036
-
4037
- const Content$2 = /*#__PURE__*/React.forwardRef(function MenuContent(props, ref) {
4038
- const internalRef = useMergedRef(ref);
4039
- const menu = useCurrentMenu();
4153
+ const Card = /*#__PURE__*/React.forwardRef(function Card(props, ref) {
4040
4154
  const {
4041
- align = 'start',
4042
- children,
4043
- placement: side,
4044
- ...otherProps
4155
+ title,
4156
+ menu,
4157
+ children
4045
4158
  } = props;
4046
- const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);
4047
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Portal, null, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Content, Object.assign({}, otherProps, {
4048
- align: align,
4159
+ const className = cn('bg-white flex flex-col rounded-xl border border-solid border-radius-[12px] border-grey-300 hover:border-grey-500', props.className);
4160
+ return /*#__PURE__*/React.createElement("div", {
4049
4161
  className: className,
4050
- "data-taco": "menu",
4051
- side: side,
4052
- sideOffset: 3,
4053
- style: {
4054
- minWidth: menu === null || menu === void 0 ? void 0 : menu.minWidth
4055
- },
4056
- ref: internalRef
4057
- }), children));
4162
+ "data-taco": "card",
4163
+ ref: ref
4164
+ }, /*#__PURE__*/React.createElement("div", {
4165
+ className: "mx-4 mt-4 mb-2 flex"
4166
+ }, title && /*#__PURE__*/React.createElement("h4", {
4167
+ className: "mb-0 flex-grow text-left"
4168
+ }, title), menu ? /*#__PURE__*/React.createElement(IconButton, {
4169
+ icon: "ellipsis-horizontal",
4170
+ appearance: "discrete",
4171
+ menu: menu,
4172
+ className: "-mt-[4px]"
4173
+ }) : null), children);
4058
4174
  });
4175
+ Card.Content = Content$2;
4059
4176
 
4060
- const Icon$1 = ({
4061
- name
4062
- }) => /*#__PURE__*/React.createElement("span", {
4063
- className: "absolute left-0 ml-1"
4064
- }, /*#__PURE__*/React.createElement(Icon, {
4065
- className: "-ml-px -mt-px !h-5 !w-5",
4066
- name: name
4067
- }));
4068
- const useItemStyling = ({
4069
- disabled,
4070
- indented,
4071
- className
4072
- }) => {
4073
- const menu = useCurrentMenu();
4074
- React.useEffect(() => {
4075
- if (indented && !(menu !== null && menu !== void 0 && menu.indented)) {
4076
- menu === null || menu === void 0 ? void 0 : menu.registerIndentation();
4077
- }
4078
- }, [indented]);
4079
- return cn('flex items-center justify-start h-8 pr-1.5 relative rounded w-full focus:outline-none group', {
4080
- 'pl-7': menu === null || menu === void 0 ? void 0 : menu.indented,
4081
- 'pl-1.5': !(menu !== null && menu !== void 0 && menu.indented),
4082
- 'cursor-pointer text-black hover:wcag-grey-200 data-[highlighted]:wcag-grey-200': !disabled,
4083
- 'cursor-not-allowed hover:bg-white text-grey-300': disabled
4084
- }, className);
4085
- };
4086
- const Shortcut = props => {
4087
- return /*#__PURE__*/React.createElement("span", Object.assign({}, props, {
4088
- className: "text-grey-700 ml-auto pl-3"
4089
- }));
4177
+ // React 18 has this built-in, when we upgrade this hook should be removed and the uuid dependency should be removed
4178
+ const useId = nativeId => {
4179
+ return React__default.useMemo(() => nativeId !== null && nativeId !== void 0 ? nativeId : uuid.v4(), []);
4090
4180
  };
4091
- const Item$1 = /*#__PURE__*/React.forwardRef(function MenuItem(props, ref) {
4092
- var _props$disabled;
4181
+
4182
+ const Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(props, ref) {
4093
4183
  const {
4094
- dialog,
4095
- icon,
4096
- onClick,
4097
- shortcut,
4184
+ checked,
4185
+ highlighted,
4186
+ indeterminate,
4187
+ invalid,
4188
+ label,
4189
+ onChange,
4098
4190
  ...otherProps
4099
4191
  } = props;
4100
- const menu = useCurrentMenu();
4101
- const className = useItemStyling({
4102
- disabled: props.disabled,
4103
- indented: !!icon,
4104
- className: props.className
4105
- });
4106
- const disabled = (_props$disabled = props.disabled) !== null && _props$disabled !== void 0 ? _props$disabled : props['aria-disabled'];
4107
- let handleClick;
4108
- // radix has a bug that does not disable clicks when disabled is set on items
4109
- if (disabled) {
4110
- handleClick = event => {
4111
- event.preventDefault();
4112
- event.stopPropagation();
4192
+ const id = useId(props.id);
4193
+ const className = cn('bg-white h-5 w-5 border rounded text-sm flex-shrink-0 mt-[0.1rem] focus:yt-focus',
4194
+ //hover:shadow-[0_0_0_1px_rgba(235,235,235,1)]
4195
+ {
4196
+ 'border-grey-300 text-blue-500 hover:text-blue-300 focus:border-blue-500 focus:hover:border-blue-300': !props.disabled && !invalid,
4197
+ 'border-grey-200 text-blue-300 cursor-not-allowed': props.disabled,
4198
+ 'bg-[rgba(255,255,0,0.2)] disabled:bg-[rgba(255,255,0,0.075)]': highlighted,
4199
+ 'border-red-500 text-red-500 hover:text-red-300 hover:border-red-300 focus:border-red-500 focus:hover:border-red-300': invalid && !props.disabled,
4200
+ 'self-start': !!label
4201
+ }, props.className);
4202
+ let handleChange;
4203
+ if (onChange) {
4204
+ handleChange = checked => onChange(checked === 'indeterminate' ? false : checked);
4205
+ }
4206
+ let labelledByProps = null;
4207
+ if (label) {
4208
+ labelledByProps = {
4209
+ 'aria-labelledby': `${id}-label`,
4210
+ id
4113
4211
  };
4114
4212
  }
4115
- const handleSelect = event => {
4116
- if (onClick) {
4117
- onClick(event);
4118
- }
4119
- if (props['aria-haspopup'] || typeof dialog === 'function') {
4120
- event.preventDefault();
4213
+ // the enter keyboard shortcut isn't supported by default, but we want it
4214
+ const handleKeyDown = event => {
4215
+ if (event.key === 'Enter') {
4216
+ event.currentTarget.click();
4121
4217
  }
4122
4218
  };
4123
- let button = /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Item, Object.assign({}, otherProps, {
4219
+ const element = /*#__PURE__*/React.createElement(CheckboxPrimitive.Root, Object.assign({}, otherProps, labelledByProps, {
4220
+ "data-taco": "checkbox",
4221
+ checked: indeterminate ? 'indeterminate' : checked,
4124
4222
  className: className,
4125
- onClick: handleClick,
4126
- onSelect: handleSelect,
4223
+ onCheckedChange: handleChange,
4224
+ onKeyDown: handleKeyDown,
4127
4225
  ref: ref
4128
- }), icon && /*#__PURE__*/React.createElement(Icon$1, {
4129
- name: icon
4130
- }), props.children, shortcut && /*#__PURE__*/React.createElement(Shortcut, null, shortcut));
4131
- if (typeof dialog === 'function') {
4132
- button = dialog({
4133
- trigger: button,
4134
- onClose: menu === null || menu === void 0 ? void 0 : menu.close
4226
+ }), /*#__PURE__*/React.createElement(CheckboxPrimitive.Indicator, {
4227
+ className: "flex h-full w-full"
4228
+ }, /*#__PURE__*/React.createElement(Icon, {
4229
+ name: indeterminate ? 'line' : 'tick',
4230
+ className: "!h-full !w-full"
4231
+ })));
4232
+ if (label) {
4233
+ const labelContainerClassName = cn('flex items-center cursor-pointer gap-2', {
4234
+ 'cursor-not-allowed text-grey-300': props.disabled
4135
4235
  });
4236
+ return /*#__PURE__*/React.createElement("span", {
4237
+ className: labelContainerClassName
4238
+ }, element, /*#__PURE__*/React.createElement("label", {
4239
+ htmlFor: id,
4240
+ id: `${id}-label`
4241
+ }, label));
4136
4242
  }
4137
- return button;
4243
+ return element;
4138
4244
  });
4245
+ Checkbox.displayName = 'Checkbox';
4139
4246
 
4140
- const Link = /*#__PURE__*/React.forwardRef(function MenuLink(props, ref) {
4141
- const {
4142
- href,
4143
- icon,
4144
- onClick,
4145
- ...otherProps
4146
- } = props;
4147
- const menu = useCurrentMenu();
4148
- const className = useItemStyling({
4149
- disabled: props.disabled,
4150
- indented: !!icon,
4151
- className: props.className
4247
+ const getInputClasses = props => {
4248
+ const disabled = props.disabled || !!props['aria-disabled'];
4249
+ const readOnly = props.readOnly || !!props['aria-readonly'];
4250
+ const invalid = props.invalid || !!props['aria-invalid'];
4251
+ return cn('peer text-black text-sm border font-normal not-italic no-underline rounded flex items-center leading-6 px-2 relative w-full text-ellipsis transition-colors transition-opacity ease-in min-h-[theme(spacing.8)]', {
4252
+ 'bg-white': !props.highlighted && !readOnly,
4253
+ // default
4254
+ 'border-grey-300 focus:border-blue-300 focus:yt-focus': !invalid,
4255
+ 'hover:shadow-[0_0_0.1rem_theme(colors.grey.500)] active:border-blue-700': !invalid && !disabled,
4256
+ // disabled
4257
+ 'border-grey-200 text-opacity-25 cursor-not-allowed placeholder:text-grey-700': disabled,
4258
+ // highlighted
4259
+ 'bg-[rgba(255,255,0,0.075)]': props.highlighted && disabled,
4260
+ 'bg-[rgba(255,255,0,0.2)]': props.highlighted && !disabled,
4261
+ // invalid
4262
+ 'border-red focus:border-red-300 focus:yt-focus-red active:border-red-700': invalid,
4263
+ 'hover:shadow-[0_0_0.15rem_theme(colors.red.500)]': invalid && !disabled,
4264
+ // readOnly
4265
+ 'cursor-not-allowed text-black bg-grey-200': readOnly
4152
4266
  });
4153
- const handleClick = event => {
4154
- onClick === null || onClick === void 0 ? void 0 : onClick(event);
4155
- menu === null || menu === void 0 ? void 0 : menu.close();
4267
+ };
4268
+ const getButtonStateClasses = invalid => {
4269
+ if (invalid) {
4270
+ return 'border !border-red-500 group-peer-focus:!border-red-300 focus:yt-focus-red group-focus:group-active:!border-red-300 transition-colors ease-in';
4271
+ }
4272
+ return 'border border-grey-300 focus:!border-blue-300 group-peer-focus:!border-blue-300 group-peer-focus:group-peer-active:!border-blue-700 transition-colors transition-opacity ease-in';
4273
+ };
4274
+
4275
+ const debounce = (fn, delay) => {
4276
+ let timeoutId;
4277
+ return function (...args) {
4278
+ clearTimeout(timeoutId);
4279
+ timeoutId = setTimeout(() => fn.apply(this, args), delay);
4156
4280
  };
4157
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Item, Object.assign({}, otherProps, {
4158
- asChild: true,
4159
- className: className,
4160
- ref: ref,
4161
- onClick: handleClick
4162
- }), /*#__PURE__*/React.createElement("a", {
4163
- href: href,
4164
- target: "_blank"
4165
- }, icon && /*#__PURE__*/React.createElement(Icon$1, {
4166
- name: icon
4167
- }), props.children));
4168
- });
4281
+ };
4169
4282
 
4170
- const Trigger$2 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref) {
4171
- const menu = useCurrentMenu();
4172
- const internalRef = useMergedRef(ref);
4283
+ const getVisibility = element => Boolean(element && (element.offsetWidth || element.offsetHeight || element.getClientRects().length));
4284
+ const useBoundingClientRectListener = (ref, dependencies) => {
4285
+ const [dimensions, setDimensions] = React.useState(undefined);
4286
+ const isRefElementVisible = getVisibility(ref.current);
4287
+ const [visibility, setVisibility] = React.useState(isRefElementVisible);
4288
+ const resize = () => {
4289
+ if (visibility) {
4290
+ var _ref$current;
4291
+ setDimensions((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.getBoundingClientRect());
4292
+ }
4293
+ };
4173
4294
  React.useEffect(() => {
4174
- if (internalRef.current) {
4175
- menu === null || menu === void 0 ? void 0 : menu.setMinWidth(internalRef.current.getBoundingClientRect().width);
4295
+ const timeout = setTimeout(resize, 0);
4296
+ const debouncedResize = debounce(resize, 250);
4297
+ window.addEventListener('resize', debouncedResize);
4298
+ return () => {
4299
+ clearTimeout(timeout);
4300
+ window.removeEventListener('resize', debouncedResize);
4301
+ };
4302
+ }, [ref.current, visibility]);
4303
+ React.useEffect(() => {
4304
+ const newRefElementVisibility = getVisibility(ref.current);
4305
+ if (visibility !== newRefElementVisibility) {
4306
+ // When visibility of an element changes, then the new visibility of the element can only be checked after the
4307
+ // component has rendered. That's why the visibility check is inside the useEffect. This useEffect will cause
4308
+ // the consumer to rerender and that will cause the above hook to recalculate the dimensions
4309
+ setVisibility(newRefElementVisibility);
4176
4310
  }
4177
- }, [internalRef]);
4178
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Trigger, Object.assign({}, props, {
4179
- asChild: true,
4180
- ref: internalRef
4181
- }));
4182
- });
4183
-
4184
- const Checkbox = /*#__PURE__*/React.forwardRef(function MenuCheckboxItem(props, ref) {
4185
- const {
4186
- checked,
4187
- children,
4188
- onChange,
4189
- ...otherProps
4190
- } = props;
4191
- const className = useItemStyling({
4192
- disabled: props.disabled,
4193
- indented: true,
4194
- className: props.className
4195
4311
  });
4196
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.CheckboxItem, Object.assign({}, otherProps, {
4197
- checked: checked,
4198
- className: className,
4199
- onCheckedChange: onChange,
4200
- ref: ref
4201
- }), /*#__PURE__*/React.createElement(DropdownMenuPrimitive.ItemIndicator, {
4202
- className: "absolute left-0 ml-1.5"
4203
- }, /*#__PURE__*/React.createElement(Icon, {
4204
- name: "tick",
4205
- className: "-ml-px !h-4 !w-4"
4206
- })), children);
4207
- });
4312
+ React.useEffect(() => {
4313
+ if (dependencies) {
4314
+ var _ref$current2;
4315
+ setDimensions((_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.getBoundingClientRect());
4316
+ }
4317
+ }, dependencies);
4318
+ return dimensions;
4319
+ };
4208
4320
 
4209
- const getRadioGroupItemValueAsString = value => String(value !== null && value !== void 0 ? value : '');
4210
- const findByValue = (values, valueAsString) => values.find(value => getRadioGroupItemValueAsString(value) === valueAsString);
4211
- const RadioGroupContext = /*#__PURE__*/React.createContext({
4212
- disabled: false,
4213
- invalid: false
4214
- });
4215
- const RadioGroupItem = /*#__PURE__*/React.forwardRef(function RadioGroupItem(props, ref) {
4216
- const context = React.useContext(RadioGroupContext);
4217
- const {
4218
- children,
4219
- value,
4220
- ...otherProps
4221
- } = props;
4222
- const isDisabled = context.disabled || props.disabled;
4223
- const className = cn('flex flex-shrink-0 self-start items-center justify-center h-4 w-4 mt-[0.2rem] rounded-full bg-white border-2', {
4224
- 'border-grey-300 hover:border-4 focus:yt-focus aria-checked:bg-blue-500 aria-checked:border-blue-500 hover:aria-checked:border-blue-300': !isDisabled && !context.invalid,
4225
- 'border-grey-200 cursor-not-allowed aria-checked:bg-blue-300 aria-checked:border-blue-300 ': isDisabled,
4226
- 'border-red-500 hover:border-4 text-red-500 focus:border-red-500 focus:yt-focus-red aria-checked:bg-red-500 aria-checked:border-red': context.invalid && !isDisabled
4227
- });
4228
- const labelClassName = cn('flex items-center gap-2', {
4229
- 'cursor-pointer': !isDisabled,
4230
- 'cursor-not-allowed text-grey-300': isDisabled
4231
- }, props.className);
4232
- return /*#__PURE__*/React.createElement("label", {
4233
- className: labelClassName
4234
- }, /*#__PURE__*/React.createElement(RadioGroupPrimitive.Item, Object.assign({}, otherProps, {
4235
- className: className,
4236
- disabled: isDisabled,
4237
- ref: ref,
4238
- value: getRadioGroupItemValueAsString(value)
4239
- }), /*#__PURE__*/React.createElement(RadioGroupPrimitive.Indicator, {
4240
- className: "h-2 w-2 rounded-full bg-white"
4241
- })), children);
4242
- });
4243
- const useRadioGroup = props => {
4321
+ // merges an external ref (optional) with an internal ref (required)
4322
+ const useMergedRef = ref => {
4323
+ const internalRef = React__default.useRef(null);
4324
+ React__default.useEffect(() => {
4325
+ if (ref) {
4326
+ if (typeof ref === 'function') {
4327
+ ref(internalRef.current);
4328
+ } else {
4329
+ ref.current = internalRef.current;
4330
+ }
4331
+ }
4332
+ }, [ref]);
4333
+ return internalRef;
4334
+ };
4335
+
4336
+ const validSetSelectionRangeTypes = ['text', 'search', 'url', 'tel', 'password'];
4337
+ const InputWithoutDeprecatedFeatures = /*#__PURE__*/React.forwardRef(function InputWithoutDeprecatedFeatures(props, ref) {
4244
4338
  const {
4245
- children,
4246
- defaultValue,
4247
- disabled,
4339
+ highlighted,
4248
4340
  invalid,
4249
- onChange,
4250
- orientation = 'vertical',
4251
- value,
4252
- ...otherProps
4341
+ onKeyDown,
4342
+ postfix,
4343
+ prefix,
4344
+ type = 'text',
4345
+ ...attributes
4253
4346
  } = props;
4254
- const values = React.useMemo(() => {
4255
- const radioGroupItemValues = [];
4256
- React.Children.forEach(children, child => {
4257
- if ( /*#__PURE__*/React.isValidElement(child)) {
4258
- radioGroupItemValues.push(child.props.value);
4347
+ const internalRef = useMergedRef(ref);
4348
+ let handleKeyDown = onKeyDown;
4349
+ // home and end keys only navigate to the start/end of input value if the input container does not scroll
4350
+ // if it has scroll height then the browser reverts to native scrolling behaviour only
4351
+ // so we manually override it to ensure _our_ desired behaviour remains intact
4352
+ // only the 'text', 'search', 'url', 'tel', 'password' input types support setSelectionRange
4353
+ if (validSetSelectionRangeTypes.includes(type)) {
4354
+ handleKeyDown = event => {
4355
+ if (!event.shiftKey && (event.key === 'Home' || event.key === 'End')) {
4356
+ event.preventDefault();
4357
+ const position = event.key === 'End' ? event.currentTarget.value.length : 0;
4358
+ event.currentTarget.setSelectionRange(position, position);
4359
+ }
4360
+ if (typeof onKeyDown === 'function') {
4361
+ onKeyDown(event);
4259
4362
  }
4260
- });
4261
- return radioGroupItemValues;
4262
- }, [children]);
4263
- const context = React.useMemo(() => ({
4264
- disabled: disabled !== null && disabled !== void 0 ? disabled : false,
4265
- invalid: invalid !== null && invalid !== void 0 ? invalid : false
4266
- }), [disabled, invalid]);
4267
- let valueProps;
4268
- if (onChange !== undefined) {
4269
- const handleChange = value => onChange(findByValue(values, value));
4270
- valueProps = {
4271
- onValueChange: handleChange,
4272
- value: value !== undefined ? getRadioGroupItemValueAsString(value) : undefined
4273
- };
4274
- } else {
4275
- valueProps = {
4276
- defaultValue: defaultValue !== undefined ? getRadioGroupItemValueAsString(defaultValue) : undefined
4277
4363
  };
4278
4364
  }
4279
- return {
4280
- context,
4281
- props: {
4282
- ...otherProps,
4283
- ...valueProps,
4284
- children,
4285
- disabled,
4286
- orientation
4365
+ const prefixRef = React.useRef(null);
4366
+ const prefixRect = useBoundingClientRectListener(prefixRef);
4367
+ const postfixRef = React.useRef(null);
4368
+ const postfixRect = useBoundingClientRectListener(postfixRef);
4369
+ const className = cn(getInputClasses(props), {
4370
+ 'pl-8': !!prefix,
4371
+ 'pr-8': !!postfix
4372
+ }, attributes.className);
4373
+ return /*#__PURE__*/React.createElement("div", {
4374
+ className: "relative inline-flex w-full",
4375
+ "data-taco": "input-container",
4376
+ style: {
4377
+ opacity: 0.999
4287
4378
  }
4288
- };
4289
- };
4290
- const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(props, ref) {
4291
- const {
4292
- context,
4293
- props: otherProps
4294
- } = useRadioGroup(props);
4295
- const className = cn('flex items-start gap-y-2', {
4296
- 'flex-wrap gap-x-4 ': otherProps.orientation === 'horizontal',
4297
- 'flex-col': otherProps.orientation === 'vertical'
4298
- }, otherProps.className);
4299
- return /*#__PURE__*/React.createElement(RadioGroupContext.Provider, {
4300
- value: context
4301
- }, /*#__PURE__*/React.createElement(RadioGroupPrimitive.Root, Object.assign({}, otherProps, {
4379
+ }, /*#__PURE__*/React.createElement("input", Object.assign({}, attributes, {
4302
4380
  className: className,
4303
- "data-taco": "radio-group",
4304
- ref: ref
4305
- })));
4381
+ "data-taco": "input",
4382
+ onKeyDown: handleKeyDown,
4383
+ ref: internalRef,
4384
+ style: {
4385
+ paddingLeft: prefixRect ? `${prefixRect.width - 1}px` : undefined,
4386
+ paddingRight: postfixRect ? `${postfixRect.width - 1}px` : undefined
4387
+ },
4388
+ type: type
4389
+ })), prefix ? /*#__PURE__*/React.createElement(Affix, {
4390
+ type: "prefix",
4391
+ children: prefix,
4392
+ disabled: attributes.disabled,
4393
+ ref: prefixRef
4394
+ }) : null, postfix ? /*#__PURE__*/React.createElement(Affix, {
4395
+ type: "postfix",
4396
+ children: postfix,
4397
+ disabled: attributes.disabled,
4398
+ ref: postfixRef
4399
+ }) : null);
4306
4400
  });
4307
- RadioGroup.Item = RadioGroupItem;
4308
-
4309
- const RadioItem = props => {
4310
- const context = React.useContext(MenuRadioGroupContext);
4401
+ const Affix = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function Affix(props, ref) {
4311
4402
  const {
4312
4403
  children,
4313
- value,
4314
- ...otherProps
4404
+ disabled,
4405
+ type
4315
4406
  } = props;
4316
- const disabled = context.disabled || props.disabled;
4317
- const className = useItemStyling({
4318
- disabled: disabled,
4319
- indented: true,
4320
- className: props.className
4321
- });
4322
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.RadioItem, Object.assign({}, otherProps, {
4323
- className: className,
4324
- disabled: disabled,
4325
- value: getRadioGroupItemValueAsString(value)
4326
- }), /*#__PURE__*/React.createElement(DropdownMenuPrimitive.ItemIndicator, {
4327
- className: "absolute left-0 ml-1.5"
4328
- }, /*#__PURE__*/React.createElement("span", {
4329
- className: "ml-1 flex h-1.5 w-1.5 rounded-full bg-current "
4330
- })), children);
4331
- };
4332
- const MenuRadioGroupContext = /*#__PURE__*/React.createContext({
4333
- disabled: false
4334
- });
4335
- const RadioGroup$1 = /*#__PURE__*/React.forwardRef(function MenuRadioItem(props, ref) {
4407
+ if (children) {
4408
+ return /*#__PURE__*/React.createElement("div", {
4409
+ className: cn('group absolute top-0 flex h-full items-center justify-center px-2',
4410
+ // icon
4411
+ '[&_[data-taco="icon"]]:!h-5 [&_[data-taco="icon"]]:!w-5', {
4412
+ 'text-grey-300': disabled,
4413
+ 'text-grey-700': !disabled,
4414
+ 'left-0 [&>button]:!-ml-2': type === 'prefix',
4415
+ 'right-0 [&>button]:!-mr-2': type === 'postfix'
4416
+ }),
4417
+ ref: ref
4418
+ }, children);
4419
+ }
4420
+ return null;
4421
+ }));
4422
+ const Input = /*#__PURE__*/React.forwardRef(function LegacyInput(props, ref) {
4423
+ var _attributes$postfix;
4336
4424
  const {
4337
- context,
4338
- props: otherProps
4339
- } = useRadioGroup(props);
4340
- const className = cn('flex flex-col', props.className);
4341
- return /*#__PURE__*/React.createElement(MenuRadioGroupContext.Provider, {
4342
- value: context
4343
- }, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.RadioGroup, Object.assign({}, otherProps, {
4344
- className: className,
4425
+ button,
4426
+ icon,
4427
+ ...attributes
4428
+ } = props;
4429
+ let postfix;
4430
+ if (button) {
4431
+ const disabled = button.props.disabled || attributes.disabled;
4432
+ const buttonClassName = cn('items-center focus:z-10 flex justify-center rounded-l-none rounded-r h-full focus:rounded focus:outline-none', getButtonStateClasses(attributes.invalid), button.props.className);
4433
+ postfix = /*#__PURE__*/React.cloneElement(button, {
4434
+ className: buttonClassName,
4435
+ disabled
4436
+ });
4437
+ } else if (icon) {
4438
+ postfix = typeof icon === 'string' ? /*#__PURE__*/React.createElement(Icon, {
4439
+ name: icon
4440
+ }) : icon;
4441
+ }
4442
+ return /*#__PURE__*/React.createElement(InputWithoutDeprecatedFeatures, Object.assign({}, attributes, {
4443
+ postfix: (_attributes$postfix = attributes.postfix) !== null && _attributes$postfix !== void 0 ? _attributes$postfix : postfix,
4345
4444
  ref: ref
4346
- })));
4445
+ }));
4347
4446
  });
4348
- RadioGroup$1.Item = RadioItem;
4349
4447
 
4350
- const Separator = () => {
4351
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Separator, {
4352
- className: "bg-grey-300 my-1 h-px"
4353
- });
4448
+ const getNextIndexFromKey = (key, length, index, direction = 'vertical') => {
4449
+ const previousKey = direction === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';
4450
+ const nextKey = direction === 'horizontal' ? 'ArrowRight' : 'ArrowDown';
4451
+ switch (key) {
4452
+ case previousKey:
4453
+ return index !== undefined ? index - 1 < 0 ? 0 : index - 1 : index;
4454
+ case nextKey:
4455
+ return index !== undefined ? index + 1 >= length ? index : index + 1 : index;
4456
+ case 'Home':
4457
+ return 0;
4458
+ case 'End':
4459
+ return length - 1;
4460
+ default:
4461
+ return;
4462
+ }
4463
+ };
4464
+ const useListKeyboardNavigation = (length = 0, options = {
4465
+ direction: 'vertical'
4466
+ }) => {
4467
+ const [index, setIndex] = React__default.useState(options.initialIndex);
4468
+ const getNextIndex = event => {
4469
+ const nextIndex = getNextIndexFromKey(event.key, length, index, options.direction);
4470
+ if (nextIndex !== undefined) {
4471
+ event.preventDefault();
4472
+ }
4473
+ return nextIndex;
4474
+ };
4475
+ return [index, setIndex, getNextIndex];
4354
4476
  };
4355
4477
 
4356
- const Header = /*#__PURE__*/React.forwardRef(function MenuHeader(props, ref) {
4357
- const menu = useCurrentMenu();
4358
- const className = cn('flex items-center justify-start h-7 pr-1.5 text-xs text-grey-700', {
4359
- 'pl-7': menu === null || menu === void 0 ? void 0 : menu.indented,
4360
- 'pl-1.5': !(menu !== null && menu !== void 0 && menu.indented)
4361
- }, props.className);
4362
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Label, Object.assign({}, props, {
4363
- className: className,
4364
- ref: ref
4365
- }));
4366
- });
4478
+ const scrollToChildElement = (parent, child) => {
4479
+ const clientHeight = parent.clientHeight;
4480
+ if (parent.scrollHeight > clientHeight) {
4481
+ const scrollTop = parent.scrollTop;
4482
+ const scrollBottom = clientHeight + scrollTop;
4483
+ const childBottom = child.offsetTop + child.offsetHeight;
4484
+ if (childBottom > scrollBottom) {
4485
+ parent.scrollTop = childBottom - clientHeight;
4486
+ } else if (child.offsetTop < scrollTop) {
4487
+ parent.scrollTop = child.offsetTop;
4488
+ }
4489
+ }
4490
+ };
4491
+ const useListScrollTo = (internalRef, itemRefs) => {
4492
+ const scrollTo = index => {
4493
+ if (internalRef && internalRef.current) {
4494
+ if (index !== undefined) {
4495
+ const activeRef = itemRefs[index];
4496
+ if (activeRef && activeRef.current) {
4497
+ scrollToChildElement(internalRef.current, activeRef.current);
4498
+ }
4499
+ } else {
4500
+ internalRef.current.scrollTop = 0;
4501
+ }
4502
+ }
4503
+ };
4504
+ return {
4505
+ scrollTo
4506
+ };
4507
+ };
4367
4508
 
4368
- const Menu$1 = /*#__PURE__*/React.forwardRef(function Menu(externalProps, ref) {
4509
+ const Spinner = /*#__PURE__*/React__default.forwardRef(function Spinner(props, ref) {
4369
4510
  const {
4370
- children,
4371
- defaultOpen: defaultProp,
4372
- onChange,
4373
- open: prop,
4374
- trigger,
4375
- ...props
4376
- } = externalProps;
4377
- const [indented, setIndented] = React.useState(false);
4378
- const [minWidth, setMinWidth] = React.useState(undefined);
4379
- const [open, setOpen] = reactUseControllableState.useControllableState({
4380
- // uncontrolled
4381
- defaultProp,
4382
- // controlled
4383
- onChange,
4384
- prop
4385
- });
4386
- const context = React.useMemo(() => ({
4387
- indented,
4388
- registerIndentation: () => setIndented(true),
4389
- minWidth,
4390
- setMinWidth: width => setMinWidth(width),
4391
- close: () => setOpen(false)
4392
- }), [indented, minWidth]);
4393
- return /*#__PURE__*/React.createElement(MenuContext.Provider, {
4394
- value: context
4395
- }, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Root, Object.assign({}, props, {
4396
- modal: false,
4397
- open: open,
4398
- onOpenChange: setOpen
4399
- }), trigger && /*#__PURE__*/React.createElement(Trigger$2, {
4400
- ref: ref
4401
- }, trigger), children));
4402
- });
4403
- Menu$1.Trigger = Trigger$2;
4404
- Menu$1.Content = Content$2;
4405
- Menu$1.Item = Item$1;
4406
- Menu$1.Link = Link;
4407
- Menu$1.Checkbox = Checkbox;
4408
- Menu$1.Separator = Separator;
4409
- Menu$1.Header = Header;
4410
- Menu$1.RadioGroup = RadioGroup$1;
4411
-
4412
- const useIntersectionObserver = (ref, offset) => {
4413
- const [intersectedIndexes, setIntersectedIndexes] = React__default.useState({});
4414
- const handleIntersection = (entries, observer) => {
4415
- if (observer.root) {
4416
- const children = Array.from(observer.root.children);
4417
- const map = {};
4418
- entries.forEach(entry => {
4419
- // entries only contains the items being intersected not all children of the ref
4420
- // so use root and the the entry being intersected to find its real index
4421
- // on first mount this is different - all children are present
4422
- map[children.indexOf(entry.target)] = entry.isIntersecting;
4423
- });
4424
- setIntersectedIndexes(prev => ({
4425
- ...prev,
4426
- ...map
4427
- }));
4428
- }
4429
- };
4430
- const intersectedChildIndex = React__default.useMemo(() => {
4431
- const index = Object.values(intersectedIndexes).indexOf(false);
4432
- return index > -1 ? index : undefined;
4433
- }, [intersectedIndexes]);
4434
- const hasRootMargin = intersectedChildIndex !== undefined && offset;
4511
+ delay = 500,
4512
+ label,
4513
+ ...otherProps
4514
+ } = props;
4515
+ const [visible, setVisibility] = React__default.useState(!delay);
4435
4516
  React__default.useEffect(() => {
4436
- const observer = new IntersectionObserver(handleIntersection, {
4437
- root: ref.current,
4438
- // offset the button, but only after the first item has been intersected
4439
- rootMargin: hasRootMargin ? `0px -${offset}px 0px 0px` : undefined,
4440
- threshold: 1
4441
- });
4442
- if (observer.root) {
4443
- Array.from(observer.root.children).forEach(item => {
4444
- if (item.getAttribute('data-intersection-observer') !== 'ignore') {
4445
- observer.observe(item);
4446
- }
4447
- });
4517
+ let timeout;
4518
+ if (delay) {
4519
+ timeout = window.setTimeout(() => setVisibility(true), delay);
4448
4520
  }
4449
4521
  return () => {
4450
- observer.disconnect();
4522
+ if (timeout) {
4523
+ clearTimeout(timeout);
4524
+ }
4451
4525
  };
4452
- }, [hasRootMargin]);
4453
- return intersectedChildIndex;
4454
- };
4455
-
4456
- const sanitizeButtonPropsForMenuItem = props => {
4457
- const {
4458
- appearance: _1,
4459
- drawer: _2,
4460
- fluid: _3,
4461
- hanger: _4,
4462
- menu: _5,
4463
- popover: _6,
4464
- tooltip: _7,
4465
- ...attributes
4466
- } = props;
4467
- return attributes;
4468
- };
4469
- const OFFSET = 32 + 8;
4470
- const ButtonGroup = /*#__PURE__*/React__default.forwardRef(function ButtonGroup(props, ref) {
4471
- const internalRef = useMergedRef(ref);
4472
- const intersectedChildIndex = useIntersectionObserver(internalRef, OFFSET);
4473
- const children = React__default.Children.toArray(props.children);
4474
- const hidden = intersectedChildIndex !== undefined ? children.slice(intersectedChildIndex) : [];
4475
- return /*#__PURE__*/React__default.createElement(Group, Object.assign({}, props, {
4476
- ref: internalRef
4477
- }), children.map((child, index) => /*#__PURE__*/React__default.cloneElement(child, {
4478
- className: cn(child.props.className, {
4479
- visible: intersectedChildIndex === undefined || index < intersectedChildIndex,
4480
- 'invisible order-[100] pointer-events-none': intersectedChildIndex !== undefined && index >= intersectedChildIndex
4481
- })
4482
- })), hidden.length ? /*#__PURE__*/React__default.createElement(IconButton, {
4483
- className: "sticky right-0 order-[99]",
4484
- "data-intesection-observer": "ignore",
4485
- icon: "more",
4486
- menu: menuProps => /*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, null, hidden.map((button, index) => /*#__PURE__*/React__default.createElement(Menu$1.Item, Object.assign({
4487
- key: index
4488
- }, sanitizeButtonPropsForMenuItem(button.props))))))
4489
- }) : null);
4526
+ }, [delay]);
4527
+ if (!visible) {
4528
+ return null;
4529
+ }
4530
+ const className = cn('inline-flex flex-col relative items-center', otherProps.className);
4531
+ return /*#__PURE__*/React__default.createElement("div", Object.assign({}, otherProps, {
4532
+ className: className,
4533
+ "data-taco": "spinner",
4534
+ ref: ref
4535
+ }), /*#__PURE__*/React__default.createElement("svg", {
4536
+ className: "h-10 w-10 animate-[spinnerRotation_2s_linear_infinite]",
4537
+ viewBox: "0 0 100 100",
4538
+ xmlns: "http://www.w3.org/2000/svg"
4539
+ }, /*#__PURE__*/React__default.createElement("circle", {
4540
+ cx: "50",
4541
+ cy: "50",
4542
+ r: "45"
4543
+ })), label && /*#__PURE__*/React__default.createElement("span", {
4544
+ className: "mt-4"
4545
+ }, label));
4490
4546
  });
4491
4547
 
4492
- const thisYear = /*#__PURE__*/new Date().getFullYear();
4493
- const years = [];
4494
- for (let i = thisYear - 50; i <= thisYear + 10; i += 1) {
4495
- years.push(i);
4496
- }
4497
- const Navbar = /*#__PURE__*/React.memo(({
4498
- onMonthChange,
4499
- onNextClick,
4500
- onPreviousClick,
4501
- value = new Date()
4502
- }) => {
4503
- const {
4504
- texts: {
4505
- calendar: {
4506
- actions,
4507
- months
4508
- }
4548
+ const getId = (id, value) => `${id}_${value}`;
4549
+ const getNextEnabledItem = (event, data, index) => {
4550
+ const nextIndex = getNextIndexFromKey(event.key, data.length, index);
4551
+ if (nextIndex) {
4552
+ if (nextIndex === index) {
4553
+ return index;
4554
+ } else if (data[nextIndex] && data[nextIndex].disabled) {
4555
+ return getNextEnabledItem(event, data, nextIndex);
4509
4556
  }
4510
- } = useLocalization();
4511
- const handleChange = function handleChange(event) {
4512
- const {
4513
- year,
4514
- month
4515
- } = event.target.form;
4516
- onMonthChange(new Date(year.value, month.value));
4517
- };
4518
- return /*#__PURE__*/React.createElement("div", {
4519
- className: "mb-2 flex items-center justify-between"
4520
- }, /*#__PURE__*/React.createElement("form", {
4521
- className: "inline-flex space-x-1"
4522
- }, /*#__PURE__*/React.createElement("select", {
4523
- className: "h-8 px-2",
4524
- name: "month",
4525
- onChange: handleChange,
4526
- value: value.getMonth()
4527
- }, months.map((month, i) => /*#__PURE__*/React.createElement("option", {
4528
- key: month,
4529
- value: i
4530
- }, month))), /*#__PURE__*/React.createElement("select", {
4531
- className: "h-8 px-2",
4532
- name: "year",
4533
- onChange: handleChange,
4534
- value: value.getFullYear()
4535
- }, years.map(year => /*#__PURE__*/React.createElement("option", {
4536
- key: year,
4537
- value: year
4538
- }, String(year))))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(IconButton, {
4539
- appearance: "discrete",
4540
- icon: "chevron-left",
4541
- "aria-label": actions.previousMonth,
4542
- onClick: () => onPreviousClick(),
4543
- rounded: true
4544
- }), /*#__PURE__*/React.createElement(IconButton, {
4545
- appearance: "discrete",
4546
- icon: "chevron-right",
4547
- "aria-label": actions.nextMonth,
4548
- onClick: () => onNextClick(),
4549
- rounded: true
4550
- })));
4551
- });
4552
- const Calendar$1 = /*#__PURE__*/React.forwardRef(function Calendar(props, ref) {
4557
+ }
4558
+ return nextIndex;
4559
+ };
4560
+ const ScrollableList = /*#__PURE__*/React.forwardRef(function ScrollableList(props, ref) {
4553
4561
  const {
4554
- onChange: handleChange,
4555
- value,
4556
- disabledDays,
4562
+ data,
4563
+ disabled,
4564
+ highlighted,
4565
+ id,
4566
+ invalid: _,
4567
+ loading,
4568
+ onChange: setCurrentIndex,
4569
+ onClick,
4570
+ onFocus,
4571
+ onKeyDown,
4572
+ readOnly,
4573
+ scrollOnFocus = false,
4574
+ value: currentIndex,
4575
+ multiselect,
4576
+ selectedIndexes = [],
4577
+ allOptionsSelected = false,
4557
4578
  ...otherProps
4558
4579
  } = props;
4580
+ const listRef = useMergedRef(ref);
4581
+ const itemRefs = React.useMemo(() => data.map(() => /*#__PURE__*/React.createRef()), [data]);
4559
4582
  const {
4560
- locale,
4561
4583
  texts
4562
4584
  } = useLocalization();
4563
- const [visibleMonth, setVisibleMonth] = React.useState(value !== null && value !== void 0 ? value : new Date());
4585
+ const {
4586
+ scrollTo
4587
+ } = useListScrollTo(listRef, itemRefs);
4564
4588
  React.useEffect(() => {
4565
- if (visibleMonth !== value) {
4566
- setVisibleMonth(value !== null && value !== void 0 ? value : new Date());
4589
+ var _itemRefs$currentInde;
4590
+ if (currentIndex && (_itemRefs$currentInde = itemRefs[currentIndex]) !== null && _itemRefs$currentInde !== void 0 && _itemRefs$currentInde.current) {
4591
+ var _itemRefs$currentInde2;
4592
+ (_itemRefs$currentInde2 = itemRefs[currentIndex].current) === null || _itemRefs$currentInde2 === void 0 ? void 0 : _itemRefs$currentInde2.scrollIntoView({
4593
+ block: 'center'
4594
+ });
4567
4595
  }
4568
- }, [value]);
4569
- const handleDayClick = (date, modifiers, event) => {
4570
- if (modifiers.outside || modifiers.disabled) {
4571
- return;
4596
+ }, []);
4597
+ React.useEffect(() => {
4598
+ scrollTo(currentIndex);
4599
+ }, [currentIndex]);
4600
+ const handleKeyDown = event => {
4601
+ const nextIndex = getNextEnabledItem(event, data, currentIndex);
4602
+ if (nextIndex !== undefined && nextIndex !== currentIndex) {
4603
+ event.preventDefault();
4604
+ scrollTo(nextIndex);
4605
+ setCurrentIndex(nextIndex);
4606
+ }
4607
+ if (onKeyDown) {
4608
+ event.persist();
4609
+ const index = nextIndex !== undefined ? nextIndex : currentIndex;
4610
+ onKeyDown(event, index);
4572
4611
  }
4573
- handleChange(date, event);
4574
4612
  };
4575
- const handleCalendarClickToday = () => {
4576
- const today = new Date();
4577
- // set to midday to avoid UTC offset causing dates to be mismatched server side
4578
- today.setHours(12);
4579
- today.setMinutes(0);
4580
- today.setSeconds(0);
4581
- handleChange(today);
4582
- };
4583
- const className = cn('flex bg-white text-xs p-4', otherProps.className);
4584
- return /*#__PURE__*/React.createElement("div", {
4585
- "data-taco": "calendar"
4586
- }, /*#__PURE__*/React.createElement(ReactDayPicker, Object.assign({}, otherProps, {
4587
- className: className,
4588
- month: visibleMonth,
4589
- selectedDays: value,
4590
- locale: locale.substring(0, 2),
4591
- firstDayOfWeek: 1,
4592
- months: texts.calendar.months,
4593
- weekdaysShort: texts.calendar.weekdaysShort,
4594
- navbarElement: navProps => /*#__PURE__*/React.createElement(Navbar, Object.assign({}, navProps, {
4595
- onMonthChange: setVisibleMonth,
4596
- value: visibleMonth
4597
- })),
4598
- onDayClick: handleDayClick,
4599
- onMonthChange: setVisibleMonth,
4600
- onTodayButtonClick: handleCalendarClickToday,
4601
- captionElement: () => null,
4602
- todayButton: texts.calendar.actions.today,
4603
- numberOfMonths: 1,
4604
- ref: ref,
4605
- disabledDays: disabledDays
4606
- })));
4607
- });
4608
-
4609
- const Content$3 = /*#__PURE__*/React.forwardRef(function CardContent(externalProps, ref) {
4610
- const {
4611
- noPadding,
4612
- ...props
4613
- } = externalProps;
4614
- const className = cn('flex-grow overflow-auto', {
4615
- 'mx-4 mb-4': !noPadding
4616
- }, props.className);
4617
- return /*#__PURE__*/React.createElement("div", Object.assign({}, props, {
4618
- className: className,
4619
- ref: ref
4620
- }));
4621
- });
4622
- const Card = /*#__PURE__*/React.forwardRef(function Card(props, ref) {
4623
- const {
4624
- title,
4625
- menu,
4626
- children
4627
- } = props;
4628
- const className = cn('bg-white flex flex-col rounded-xl border border-solid border-radius-[12px] border-grey-300 hover:border-grey-500', props.className);
4629
- return /*#__PURE__*/React.createElement("div", {
4630
- className: className,
4631
- "data-taco": "card",
4632
- ref: ref
4633
- }, /*#__PURE__*/React.createElement("div", {
4634
- className: "mx-4 mt-4 mb-2 flex"
4635
- }, title && /*#__PURE__*/React.createElement("h4", {
4636
- className: "mb-0 flex-grow text-left"
4637
- }, title), menu ? /*#__PURE__*/React.createElement(IconButton, {
4638
- icon: "ellipsis-horizontal",
4639
- appearance: "discrete",
4640
- menu: menu,
4641
- className: "-mt-[4px]"
4642
- }) : null), children);
4643
- });
4644
- Card.Content = Content$3;
4645
-
4646
- // React 18 has this built-in, when we upgrade this hook should be removed and the uuid dependency should be removed
4647
- const useId = nativeId => {
4648
- return React__default.useMemo(() => nativeId !== null && nativeId !== void 0 ? nativeId : uuid.v4(), []);
4649
- };
4650
-
4651
- const Checkbox$1 = /*#__PURE__*/React.forwardRef(function Checkbox(props, ref) {
4652
- const {
4653
- checked,
4654
- highlighted,
4655
- indeterminate,
4656
- invalid,
4657
- label,
4658
- onChange,
4659
- ...otherProps
4660
- } = props;
4661
- const id = useId(props.id);
4662
- const className = cn('bg-white h-5 w-5 border rounded text-sm flex-shrink-0 mt-[0.1rem] focus:yt-focus',
4663
- //hover:shadow-[0_0_0_1px_rgba(235,235,235,1)]
4664
- {
4665
- 'border-grey-300 text-blue-500 hover:text-blue-300 focus:border-blue-500 focus:hover:border-blue-300': !props.disabled && !invalid,
4666
- 'border-grey-200 text-blue-300 cursor-not-allowed': props.disabled,
4667
- 'bg-[rgba(255,255,0,0.2)] disabled:bg-[rgba(255,255,0,0.075)]': highlighted,
4668
- 'border-red-500 text-red-500 hover:text-red-300 hover:border-red-300 focus:border-red-500 focus:hover:border-red-300': invalid && !props.disabled,
4669
- 'self-start': !!label
4670
- }, props.className);
4671
- let handleChange;
4672
- if (onChange) {
4673
- handleChange = checked => onChange(checked === 'indeterminate' ? false : checked);
4674
- }
4675
- let labelledByProps = null;
4676
- if (label) {
4677
- labelledByProps = {
4678
- 'aria-labelledby': `${id}-label`,
4679
- id
4680
- };
4681
- }
4682
- // the enter keyboard shortcut isn't supported by default, but we want it
4683
- const handleKeyDown = event => {
4684
- if (event.key === 'Enter') {
4685
- event.currentTarget.click();
4686
- }
4687
- };
4688
- const element = /*#__PURE__*/React.createElement(CheckboxPrimitive.Root, Object.assign({}, otherProps, labelledByProps, {
4689
- "data-taco": "checkbox",
4690
- checked: indeterminate ? 'indeterminate' : checked,
4691
- className: className,
4692
- onCheckedChange: handleChange,
4693
- onKeyDown: handleKeyDown,
4694
- ref: ref
4695
- }), /*#__PURE__*/React.createElement(CheckboxPrimitive.Indicator, {
4696
- className: "flex h-full w-full"
4697
- }, /*#__PURE__*/React.createElement(Icon, {
4698
- name: indeterminate ? 'line' : 'tick',
4699
- className: "!h-full !w-full"
4700
- })));
4701
- if (label) {
4702
- const labelContainerClassName = cn('flex items-center cursor-pointer gap-2', {
4703
- 'cursor-not-allowed text-grey-300': props.disabled
4704
- });
4705
- return /*#__PURE__*/React.createElement("span", {
4706
- className: labelContainerClassName
4707
- }, element, /*#__PURE__*/React.createElement("label", {
4708
- htmlFor: id,
4709
- id: `${id}-label`
4710
- }, label));
4711
- }
4712
- return element;
4713
- });
4714
- Checkbox$1.displayName = 'Checkbox';
4715
-
4716
- const getInputClasses = props => {
4717
- const disabled = props.disabled || !!props['aria-disabled'];
4718
- const readOnly = props.readOnly || !!props['aria-readonly'];
4719
- const invalid = props.invalid || !!props['aria-invalid'];
4720
- return cn('peer text-black text-sm border font-normal not-italic no-underline rounded flex items-center leading-6 px-2 relative w-full text-ellipsis transition-colors transition-opacity ease-in min-h-[theme(spacing.8)]', {
4721
- 'bg-white': !props.highlighted && !readOnly,
4722
- // default
4723
- 'border-grey-300 focus:border-blue-300 focus:yt-focus': !invalid,
4724
- 'hover:shadow-[0_0_0.1rem_theme(colors.grey.500)] active:border-blue-700': !invalid && !disabled,
4725
- // disabled
4726
- 'border-grey-200 text-opacity-25 cursor-not-allowed placeholder:text-grey-700': disabled,
4727
- // highlighted
4728
- 'bg-[rgba(255,255,0,0.075)]': props.highlighted && disabled,
4729
- 'bg-[rgba(255,255,0,0.2)]': props.highlighted && !disabled,
4730
- // invalid
4731
- 'border-red focus:border-red-300 focus:yt-focus-red active:border-red-700': invalid,
4732
- 'hover:shadow-[0_0_0.15rem_theme(colors.red.500)]': invalid && !disabled,
4733
- // readOnly
4734
- 'cursor-not-allowed text-black bg-grey-200': readOnly
4735
- });
4736
- };
4737
- const getButtonStateClasses = invalid => {
4738
- if (invalid) {
4739
- return 'border !border-red-500 group-peer-focus:!border-red-300 focus:yt-focus-red group-focus:group-active:!border-red-300 transition-colors ease-in';
4740
- }
4741
- return 'border border-grey-300 focus:!border-blue-300 group-peer-focus:!border-blue-300 group-peer-focus:group-peer-active:!border-blue-700 transition-colors transition-opacity ease-in';
4742
- };
4743
-
4744
- const debounce = (fn, delay) => {
4745
- let timeoutId;
4746
- return function (...args) {
4747
- clearTimeout(timeoutId);
4748
- timeoutId = setTimeout(() => fn.apply(this, args), delay);
4749
- };
4750
- };
4751
-
4752
- const getVisibility = element => Boolean(element && (element.offsetWidth || element.offsetHeight || element.getClientRects().length));
4753
- const useBoundingClientRectListener = (ref, dependencies) => {
4754
- const [dimensions, setDimensions] = React.useState(undefined);
4755
- const isRefElementVisible = getVisibility(ref.current);
4756
- const [visibility, setVisibility] = React.useState(isRefElementVisible);
4757
- const resize = () => {
4758
- if (visibility) {
4759
- var _ref$current;
4760
- setDimensions((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.getBoundingClientRect());
4761
- }
4762
- };
4763
- React.useEffect(() => {
4764
- const timeout = setTimeout(resize, 0);
4765
- const debouncedResize = debounce(resize, 250);
4766
- window.addEventListener('resize', debouncedResize);
4767
- return () => {
4768
- clearTimeout(timeout);
4769
- window.removeEventListener('resize', debouncedResize);
4770
- };
4771
- }, [ref.current, visibility]);
4772
- React.useEffect(() => {
4773
- const newRefElementVisibility = getVisibility(ref.current);
4774
- if (visibility !== newRefElementVisibility) {
4775
- // When visibility of an element changes, then the new visibility of the element can only be checked after the
4776
- // component has rendered. That's why the visibility check is inside the useEffect. This useEffect will cause
4777
- // the consumer to rerender and that will cause the above hook to recalculate the dimensions
4778
- setVisibility(newRefElementVisibility);
4779
- }
4780
- });
4781
- React.useEffect(() => {
4782
- if (dependencies) {
4783
- var _ref$current2;
4784
- setDimensions((_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.getBoundingClientRect());
4785
- }
4786
- }, dependencies);
4787
- return dimensions;
4788
- };
4789
-
4790
- const validSetSelectionRangeTypes = ['text', 'search', 'url', 'tel', 'password'];
4791
- const InputWithoutDeprecatedFeatures = /*#__PURE__*/React.forwardRef(function InputWithoutDeprecatedFeatures(props, ref) {
4792
- const {
4793
- highlighted,
4794
- invalid,
4795
- onKeyDown,
4796
- postfix,
4797
- prefix,
4798
- type = 'text',
4799
- ...attributes
4800
- } = props;
4801
- const internalRef = useMergedRef(ref);
4802
- let handleKeyDown = onKeyDown;
4803
- // home and end keys only navigate to the start/end of input value if the input container does not scroll
4804
- // if it has scroll height then the browser reverts to native scrolling behaviour only
4805
- // so we manually override it to ensure _our_ desired behaviour remains intact
4806
- // only the 'text', 'search', 'url', 'tel', 'password' input types support setSelectionRange
4807
- if (validSetSelectionRangeTypes.includes(type)) {
4808
- handleKeyDown = event => {
4809
- if (!event.shiftKey && (event.key === 'Home' || event.key === 'End')) {
4810
- event.preventDefault();
4811
- const position = event.key === 'End' ? event.currentTarget.value.length : 0;
4812
- event.currentTarget.setSelectionRange(position, position);
4813
- }
4814
- if (typeof onKeyDown === 'function') {
4815
- onKeyDown(event);
4816
- }
4817
- };
4818
- }
4819
- const prefixRef = React.useRef(null);
4820
- const prefixRect = useBoundingClientRectListener(prefixRef);
4821
- const postfixRef = React.useRef(null);
4822
- const postfixRect = useBoundingClientRectListener(postfixRef);
4823
- const className = cn(getInputClasses(props), {
4824
- 'pl-8': !!prefix,
4825
- 'pr-8': !!postfix
4826
- }, attributes.className);
4827
- return /*#__PURE__*/React.createElement("div", {
4828
- className: "relative inline-flex w-full",
4829
- "data-taco": "input-container",
4830
- style: {
4831
- opacity: 0.999
4832
- }
4833
- }, /*#__PURE__*/React.createElement("input", Object.assign({}, attributes, {
4834
- className: className,
4835
- "data-taco": "input",
4836
- onKeyDown: handleKeyDown,
4837
- ref: internalRef,
4838
- style: {
4839
- paddingLeft: prefixRect ? `${prefixRect.width - 1}px` : undefined,
4840
- paddingRight: postfixRect ? `${postfixRect.width - 1}px` : undefined
4841
- },
4842
- type: type
4843
- })), prefix ? /*#__PURE__*/React.createElement(Affix, {
4844
- type: "prefix",
4845
- children: prefix,
4846
- disabled: attributes.disabled,
4847
- ref: prefixRef
4848
- }) : null, postfix ? /*#__PURE__*/React.createElement(Affix, {
4849
- type: "postfix",
4850
- children: postfix,
4851
- disabled: attributes.disabled,
4852
- ref: postfixRef
4853
- }) : null);
4854
- });
4855
- const Affix = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function Affix(props, ref) {
4856
- const {
4857
- children,
4858
- disabled,
4859
- type
4860
- } = props;
4861
- if (children) {
4862
- return /*#__PURE__*/React.createElement("div", {
4863
- className: cn('group absolute top-0 flex h-full items-center justify-center px-2',
4864
- // icon
4865
- '[&_[data-taco="icon"]]:!h-5 [&_[data-taco="icon"]]:!w-5', {
4866
- 'text-grey-300': disabled,
4867
- 'text-grey-700': !disabled,
4868
- 'left-0 [&>button]:!-ml-2': type === 'prefix',
4869
- 'right-0 [&>button]:!-mr-2': type === 'postfix'
4870
- }),
4871
- ref: ref
4872
- }, children);
4873
- }
4874
- return null;
4875
- }));
4876
- const Input = /*#__PURE__*/React.forwardRef(function LegacyInput(props, ref) {
4877
- var _attributes$postfix;
4878
- const {
4879
- button,
4880
- icon,
4881
- ...attributes
4882
- } = props;
4883
- let postfix;
4884
- if (button) {
4885
- const disabled = button.props.disabled || attributes.disabled;
4886
- const buttonClassName = cn('items-center focus:z-10 flex justify-center rounded-l-none rounded-r h-full focus:rounded focus:outline-none', getButtonStateClasses(attributes.invalid), button.props.className);
4887
- postfix = /*#__PURE__*/React.cloneElement(button, {
4888
- className: buttonClassName,
4889
- disabled
4890
- });
4891
- } else if (icon) {
4892
- postfix = typeof icon === 'string' ? /*#__PURE__*/React.createElement(Icon, {
4893
- name: icon
4894
- }) : icon;
4895
- }
4896
- return /*#__PURE__*/React.createElement(InputWithoutDeprecatedFeatures, Object.assign({}, attributes, {
4897
- postfix: (_attributes$postfix = attributes.postfix) !== null && _attributes$postfix !== void 0 ? _attributes$postfix : postfix,
4898
- ref: ref
4899
- }));
4900
- });
4901
-
4902
- const getNextIndexFromKey = (key, length, index, direction = 'vertical') => {
4903
- const previousKey = direction === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';
4904
- const nextKey = direction === 'horizontal' ? 'ArrowRight' : 'ArrowDown';
4905
- switch (key) {
4906
- case previousKey:
4907
- return index !== undefined ? index - 1 < 0 ? 0 : index - 1 : index;
4908
- case nextKey:
4909
- return index !== undefined ? index + 1 >= length ? index : index + 1 : index;
4910
- case 'Home':
4911
- return 0;
4912
- case 'End':
4913
- return length - 1;
4914
- default:
4915
- return;
4916
- }
4917
- };
4918
- const useListKeyboardNavigation = (length = 0, options = {
4919
- direction: 'vertical'
4920
- }) => {
4921
- const [index, setIndex] = React__default.useState(options.initialIndex);
4922
- const getNextIndex = event => {
4923
- const nextIndex = getNextIndexFromKey(event.key, length, index, options.direction);
4924
- if (nextIndex !== undefined) {
4925
- event.preventDefault();
4926
- }
4927
- return nextIndex;
4928
- };
4929
- return [index, setIndex, getNextIndex];
4930
- };
4931
-
4932
- const scrollToChildElement = (parent, child) => {
4933
- const clientHeight = parent.clientHeight;
4934
- if (parent.scrollHeight > clientHeight) {
4935
- const scrollTop = parent.scrollTop;
4936
- const scrollBottom = clientHeight + scrollTop;
4937
- const childBottom = child.offsetTop + child.offsetHeight;
4938
- if (childBottom > scrollBottom) {
4939
- parent.scrollTop = childBottom - clientHeight;
4940
- } else if (child.offsetTop < scrollTop) {
4941
- parent.scrollTop = child.offsetTop;
4942
- }
4943
- }
4944
- };
4945
- const useListScrollTo = (internalRef, itemRefs) => {
4946
- const scrollTo = index => {
4947
- if (internalRef && internalRef.current) {
4948
- if (index !== undefined) {
4949
- const activeRef = itemRefs[index];
4950
- if (activeRef && activeRef.current) {
4951
- scrollToChildElement(internalRef.current, activeRef.current);
4952
- }
4953
- } else {
4954
- internalRef.current.scrollTop = 0;
4955
- }
4956
- }
4957
- };
4958
- return {
4959
- scrollTo
4960
- };
4961
- };
4962
-
4963
- const Spinner = /*#__PURE__*/React__default.forwardRef(function Spinner(props, ref) {
4964
- const {
4965
- delay = 500,
4966
- label,
4967
- ...otherProps
4968
- } = props;
4969
- const [visible, setVisibility] = React__default.useState(!delay);
4970
- React__default.useEffect(() => {
4971
- let timeout;
4972
- if (delay) {
4973
- timeout = window.setTimeout(() => setVisibility(true), delay);
4974
- }
4975
- return () => {
4976
- if (timeout) {
4977
- clearTimeout(timeout);
4978
- }
4979
- };
4980
- }, [delay]);
4981
- if (!visible) {
4982
- return null;
4983
- }
4984
- const className = cn('inline-flex flex-col relative items-center', otherProps.className);
4985
- return /*#__PURE__*/React__default.createElement("div", Object.assign({}, otherProps, {
4986
- className: className,
4987
- "data-taco": "spinner",
4988
- ref: ref
4989
- }), /*#__PURE__*/React__default.createElement("svg", {
4990
- className: "h-10 w-10 animate-[spinnerRotation_2s_linear_infinite]",
4991
- viewBox: "0 0 100 100",
4992
- xmlns: "http://www.w3.org/2000/svg"
4993
- }, /*#__PURE__*/React__default.createElement("circle", {
4994
- cx: "50",
4995
- cy: "50",
4996
- r: "45"
4997
- })), label && /*#__PURE__*/React__default.createElement("span", {
4998
- className: "mt-4"
4999
- }, label));
5000
- });
5001
-
5002
- const getId = (id, value) => `${id}_${value}`;
5003
- const getNextEnabledItem = (event, data, index) => {
5004
- const nextIndex = getNextIndexFromKey(event.key, data.length, index);
5005
- if (nextIndex) {
5006
- if (nextIndex === index) {
5007
- return index;
5008
- } else if (data[nextIndex] && data[nextIndex].disabled) {
5009
- return getNextEnabledItem(event, data, nextIndex);
5010
- }
5011
- }
5012
- return nextIndex;
5013
- };
5014
- const ScrollableList = /*#__PURE__*/React.forwardRef(function ScrollableList(props, ref) {
5015
- const {
5016
- data,
5017
- disabled,
5018
- highlighted,
5019
- id,
5020
- invalid: _,
5021
- loading,
5022
- onChange: setCurrentIndex,
5023
- onClick,
5024
- onFocus,
5025
- onKeyDown,
5026
- readOnly,
5027
- scrollOnFocus = false,
5028
- value: currentIndex,
5029
- multiselect,
5030
- selectedIndexes = [],
5031
- allOptionsSelected = false,
5032
- ...otherProps
5033
- } = props;
5034
- const listRef = useMergedRef(ref);
5035
- const itemRefs = React.useMemo(() => data.map(() => /*#__PURE__*/React.createRef()), [data]);
5036
- const {
5037
- texts
5038
- } = useLocalization();
5039
- const {
5040
- scrollTo
5041
- } = useListScrollTo(listRef, itemRefs);
5042
- React.useEffect(() => {
5043
- var _itemRefs$currentInde;
5044
- if (currentIndex && (_itemRefs$currentInde = itemRefs[currentIndex]) !== null && _itemRefs$currentInde !== void 0 && _itemRefs$currentInde.current) {
5045
- var _itemRefs$currentInde2;
5046
- (_itemRefs$currentInde2 = itemRefs[currentIndex].current) === null || _itemRefs$currentInde2 === void 0 ? void 0 : _itemRefs$currentInde2.scrollIntoView({
5047
- block: 'center'
5048
- });
5049
- }
5050
- }, []);
5051
- React.useEffect(() => {
5052
- scrollTo(currentIndex);
5053
- }, [currentIndex]);
5054
- const handleKeyDown = event => {
5055
- const nextIndex = getNextEnabledItem(event, data, currentIndex);
5056
- if (nextIndex !== undefined && nextIndex !== currentIndex) {
5057
- event.preventDefault();
5058
- scrollTo(nextIndex);
5059
- setCurrentIndex(nextIndex);
5060
- }
5061
- if (onKeyDown) {
5062
- event.persist();
5063
- const index = nextIndex !== undefined ? nextIndex : currentIndex;
5064
- onKeyDown(event, index);
5065
- }
5066
- };
5067
- const handleClick = index => event => {
5068
- setCurrentIndex(index);
5069
- if (onClick) {
5070
- event.persist();
5071
- onClick(event, index);
5072
- }
4613
+ const handleClick = index => event => {
4614
+ setCurrentIndex(index);
4615
+ if (onClick) {
4616
+ event.persist();
4617
+ onClick(event, index);
4618
+ }
5073
4619
  };
5074
4620
  const handleFocus = event => {
5075
4621
  if (scrollOnFocus) {
@@ -5138,7 +4684,7 @@ const ScrollableList = /*#__PURE__*/React.forwardRef(function ScrollableList(pro
5138
4684
  ...optionProps
5139
4685
  }) => /*#__PURE__*/React.createElement("li", Object.assign({}, optionProps), icon, /*#__PURE__*/React.createElement("span", {
5140
4686
  className: "flex-grow truncate text-left"
5141
- }, children), multiselect && /*#__PURE__*/React.createElement(Checkbox$1
4687
+ }, children), multiselect && /*#__PURE__*/React.createElement(Checkbox
5142
4688
  // In multiselect variant, this checkbox only acts as visual representation of item being selected,
5143
4689
  // so need to be taken out of screen reader scope.
5144
4690
  , {
@@ -5204,7 +4750,7 @@ const getSelectedIndexesFromValue = (data, value) => {
5204
4750
  if (typeof value !== 'string') return [];
5205
4751
  return value.split(',').map(v => data.findIndex(o => String(o.value) === v)).filter(v => v !== -1);
5206
4752
  };
5207
- const findByValue$1 = (data, value) => {
4753
+ const findByValue = (data, value) => {
5208
4754
  return data.find(option => getValue(option.value) === getValue(value));
5209
4755
  };
5210
4756
  const searchForString = (child, value, strategy = 'includes') => {
@@ -5415,7 +4961,7 @@ const useCombobox = ({
5415
4961
  return;
5416
4962
  }
5417
4963
  if (onChange && event.target.value !== value) {
5418
- const item = findByValue$1(flattenedData, event.target.value);
4964
+ const item = findByValue(flattenedData, event.target.value);
5419
4965
  event.detail = sanitizeItem(item);
5420
4966
  const parents = getOptionParents(flattenedData, item === null || item === void 0 ? void 0 : item.path);
5421
4967
  if (parents !== null && parents.length > 0) {
@@ -5800,7 +5346,7 @@ const PopoverContext = /*#__PURE__*/React.createContext({
5800
5346
  props: {},
5801
5347
  ref: null
5802
5348
  });
5803
- const Trigger$3 = /*#__PURE__*/React.forwardRef(function PopoverAnchor(props, externalRef) {
5349
+ const Trigger$2 = /*#__PURE__*/React.forwardRef(function PopoverAnchor(props, externalRef) {
5804
5350
  var _props$children;
5805
5351
  const {
5806
5352
  ref: parentRef,
@@ -5829,7 +5375,7 @@ const RenderPropWrapper = /*#__PURE__*/React.forwardRef(function RenderPropWrapp
5829
5375
  ref
5830
5376
  });
5831
5377
  });
5832
- const Content$4 = /*#__PURE__*/React.forwardRef(function PopoverContent(props, ref) {
5378
+ const Content$3 = /*#__PURE__*/React.forwardRef(function PopoverContent(props, ref) {
5833
5379
  const {
5834
5380
  placement: side,
5835
5381
  ...popoverContentProps
@@ -5878,10 +5424,10 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(props, ref) {
5878
5424
  modal: modal,
5879
5425
  open: open,
5880
5426
  onOpenChange: onChange
5881
- }, trigger && /*#__PURE__*/React.createElement(Trigger$3, null, trigger), children));
5427
+ }, trigger && /*#__PURE__*/React.createElement(Trigger$2, null, trigger), children));
5882
5428
  });
5883
- Popover.Trigger = Trigger$3;
5884
- Popover.Content = Content$4;
5429
+ Popover.Trigger = Trigger$2;
5430
+ Popover.Content = Content$3;
5885
5431
  Popover.Close = Close$1;
5886
5432
  Popover.Portal = PopoverPrimitive.Portal;
5887
5433
 
@@ -5907,10 +5453,14 @@ const Datepicker = /*#__PURE__*/React.forwardRef(function Datepicker(props, ref)
5907
5453
  "data-taco": "datepicker",
5908
5454
  style: style
5909
5455
  }, /*#__PURE__*/React.createElement(Input, Object.assign({}, input, {
5910
- button: /*#__PURE__*/React.createElement(IconButton, {
5456
+ button: /*#__PURE__*/React.createElement(Tooltip, {
5457
+ title: texts.datepicker.calendar
5458
+ }, /*#__PURE__*/React.createElement(IconButton, {
5911
5459
  "aria-label": texts.datepicker.expand,
5912
5460
  disabled: input.disabled || input.readOnly,
5913
5461
  icon: "calendar",
5462
+ tabIndex: -1,
5463
+ className: " border-grey-300 group-peer-focus:!border-blue-300 group-peer-focus:group-peer-active:!border-blue-700 flex h-full items-center justify-center rounded-l-none rounded-r border transition-colors transition-opacity ease-in focus:z-10 focus:rounded focus:!border-blue-300 focus:outline-none",
5914
5464
  popover: props => /*#__PURE__*/React.createElement(Popover, Object.assign({}, props), /*#__PURE__*/React.createElement(Popover.Content, null, ({
5915
5465
  close
5916
5466
  }) => /*#__PURE__*/React.createElement("div", {
@@ -5919,8 +5469,7 @@ const Datepicker = /*#__PURE__*/React.forwardRef(function Datepicker(props, ref)
5919
5469
  onChange: (date, event) => {
5920
5470
  calendar.onChange(date, event);
5921
5471
  close();
5922
- },
5923
- tabIndex: -1
5472
+ }
5924
5473
  })), shortcuts && /*#__PURE__*/React.createElement("div", {
5925
5474
  className: "border-grey-300 flex flex-col border-l"
5926
5475
  }, /*#__PURE__*/React.createElement("span", {
@@ -5944,7 +5493,7 @@ const Datepicker = /*#__PURE__*/React.forwardRef(function Datepicker(props, ref)
5944
5493
  close();
5945
5494
  }
5946
5495
  }, texts.datepicker.clear)))))
5947
- })
5496
+ }))
5948
5497
  })));
5949
5498
  });
5950
5499
  Datepicker.displayName = 'Datepicker';
@@ -5971,7 +5520,7 @@ const useCurrentDialog = () => {
5971
5520
  return React.useContext(DialogContext);
5972
5521
  };
5973
5522
 
5974
- const Trigger$4 = /*#__PURE__*/React.forwardRef(function DialogTrigger(props, externalRef) {
5523
+ const Trigger$3 = /*#__PURE__*/React.forwardRef(function DialogTrigger(props, externalRef) {
5975
5524
  const {
5976
5525
  ref: parentRef,
5977
5526
  props: parentProps
@@ -6069,7 +5618,7 @@ const RenderPropWrapper$1 = /*#__PURE__*/React.forwardRef(function RenderPropWra
6069
5618
  ...renderProps
6070
5619
  });
6071
5620
  });
6072
- const Content$5 = /*#__PURE__*/React.forwardRef(function DialogContent(props, ref) {
5621
+ const Content$4 = /*#__PURE__*/React.forwardRef(function DialogContent(props, ref) {
6073
5622
  const dialog = useCurrentDialog();
6074
5623
  const internalRef = useMergedRef(ref);
6075
5624
  const {
@@ -6236,16 +5785,37 @@ const Dialog = /*#__PURE__*/React.forwardRef(function Dialog(props, ref) {
6236
5785
  defaultOpen: defaultOpen,
6237
5786
  open: open,
6238
5787
  onOpenChange: onChange
6239
- }, trigger && /*#__PURE__*/React.createElement(Trigger$4, null, trigger), children));
5788
+ }, trigger && /*#__PURE__*/React.createElement(Trigger$3, null, trigger), children));
6240
5789
  });
6241
- Dialog.Trigger = Trigger$4;
6242
- Dialog.Content = Content$5;
5790
+ Dialog.Trigger = Trigger$3;
5791
+ Dialog.Content = Content$4;
6243
5792
  Dialog.Title = Title$1;
6244
5793
  Dialog.Footer = Footer$1;
6245
5794
  Dialog.Extra = Extra;
6246
5795
  Dialog.Drawer = DialogDrawer;
6247
5796
  Dialog.Close = Close$2;
6248
5797
 
5798
+ const Group = /*#__PURE__*/React.forwardRef(function Group(props, ref) {
5799
+ const {
5800
+ as: Tag = 'span',
5801
+ orientation = 'horizontal',
5802
+ ...otherProps
5803
+ } = props;
5804
+ const className = cn('flex gap-2', {
5805
+ 'flex-col ': orientation === 'vertical'
5806
+ }, props.className);
5807
+ return /*#__PURE__*/React.createElement(Tag, Object.assign({}, otherProps, {
5808
+ className: className,
5809
+ "data-taco": "group",
5810
+ ref: ref
5811
+ }));
5812
+ });
5813
+
5814
+ const MenuContext = /*#__PURE__*/React.createContext(undefined);
5815
+ const useCurrentMenu = () => {
5816
+ return React.useContext(MenuContext);
5817
+ };
5818
+
6249
5819
  /* eslint-disable @typescript-eslint/no-empty-function */
6250
5820
  const DrawerContext = /*#__PURE__*/React.createContext({
6251
5821
  closeOnEscape: true,
@@ -6599,7 +6169,7 @@ const DrawerContent = /*#__PURE__*/React__default.forwardRef(function Content(pr
6599
6169
  ref: ref
6600
6170
  }, content);
6601
6171
  });
6602
- const Content$6 = /*#__PURE__*/React__default.forwardRef(function Content(props, externalRef) {
6172
+ const Content$5 = /*#__PURE__*/React__default.forwardRef(function Content(props, externalRef) {
6603
6173
  const {
6604
6174
  children
6605
6175
  } = props;
@@ -6608,7 +6178,7 @@ const Content$6 = /*#__PURE__*/React__default.forwardRef(function Content(props,
6608
6178
  }), children));
6609
6179
  });
6610
6180
 
6611
- const Trigger$5 = /*#__PURE__*/React.forwardRef(function DrawerTrigger(props, ref) {
6181
+ const Trigger$4 = /*#__PURE__*/React.forwardRef(function DrawerTrigger(props, ref) {
6612
6182
  return /*#__PURE__*/React.createElement(DialogPrimitive.Trigger, Object.assign({}, props, {
6613
6183
  ref: ref,
6614
6184
  asChild: true
@@ -6696,10 +6266,10 @@ const Drawer = /*#__PURE__*/React.forwardRef(function Drawer(props, ref) {
6696
6266
  modal: variant === 'overlay' ? true : false,
6697
6267
  open: open,
6698
6268
  onOpenChange: setOpen
6699
- }, trigger && /*#__PURE__*/React.createElement(Trigger$5, null, trigger), children));
6269
+ }, trigger && /*#__PURE__*/React.createElement(Trigger$4, null, trigger), children));
6700
6270
  });
6701
- Drawer.Trigger = Trigger$5;
6702
- Drawer.Content = Content$6;
6271
+ Drawer.Trigger = Trigger$4;
6272
+ Drawer.Content = Content$5;
6703
6273
  Drawer.InnerContent = InnerContent;
6704
6274
  Drawer.Title = Title$2;
6705
6275
  Drawer.Footer = Footer$2;
@@ -6777,7 +6347,7 @@ const Title$3 = /*#__PURE__*/React.forwardRef(function DialogTitle(props, ref) {
6777
6347
  ref: ref
6778
6348
  }));
6779
6349
  });
6780
- const Content$7 = /*#__PURE__*/React.forwardRef(function HangerContent(props, ref) {
6350
+ const Content$6 = /*#__PURE__*/React.forwardRef(function HangerContent(props, ref) {
6781
6351
  const {
6782
6352
  placement: side
6783
6353
  } = props;
@@ -6836,7 +6406,7 @@ const Hanger = /*#__PURE__*/React.forwardRef(function Hanger(props, ref) {
6836
6406
  }, anchor && /*#__PURE__*/React.createElement(Anchor, null, anchor), children));
6837
6407
  });
6838
6408
  Hanger.Anchor = Anchor;
6839
- Hanger.Content = Content$7;
6409
+ Hanger.Content = Content$6;
6840
6410
  Hanger.Title = Title$3;
6841
6411
 
6842
6412
  const UnstyledArrow$1 = /*#__PURE__*/React.forwardRef(function HoverCardArrow(props, ref) {
@@ -6861,13 +6431,13 @@ const UnstyledArrow$1 = /*#__PURE__*/React.forwardRef(function HoverCardArrow(pr
6861
6431
  })));
6862
6432
  });
6863
6433
 
6864
- const Trigger$6 = /*#__PURE__*/React.forwardRef(function HoverCardTrigger(props, ref) {
6434
+ const Trigger$5 = /*#__PURE__*/React.forwardRef(function HoverCardTrigger(props, ref) {
6865
6435
  return /*#__PURE__*/React.createElement(HoverCardPrimitive.Trigger, Object.assign({}, props, {
6866
6436
  asChild: true,
6867
6437
  ref: ref
6868
6438
  }));
6869
6439
  });
6870
- const Content$8 = /*#__PURE__*/React.forwardRef(function HoverCardContent(props, ref) {
6440
+ const Content$7 = /*#__PURE__*/React.forwardRef(function HoverCardContent(props, ref) {
6871
6441
  const {
6872
6442
  placement: side
6873
6443
  } = props;
@@ -6887,62 +6457,8 @@ const HoverCard = props => {
6887
6457
  openDelay: 300
6888
6458
  }));
6889
6459
  };
6890
- HoverCard.Trigger = Trigger$6;
6891
- HoverCard.Content = Content$8;
6892
-
6893
- const SearchInput = /*#__PURE__*/React.forwardRef(function SearchInput({
6894
- onSearch,
6895
- ...props
6896
- }, ref) {
6897
- const internalRef = useMergedRef(ref);
6898
- const {
6899
- texts
6900
- } = useLocalization();
6901
- const handleClick = () => {
6902
- var _internalRef$current$, _internalRef$current;
6903
- onSearch === null || onSearch === void 0 ? void 0 : onSearch((_internalRef$current$ = (_internalRef$current = internalRef.current) === null || _internalRef$current === void 0 ? void 0 : _internalRef$current.value) !== null && _internalRef$current$ !== void 0 ? _internalRef$current$ : '');
6904
- };
6905
- const handleCancelClick = () => {
6906
- setInputValueByRef(internalRef.current, '');
6907
- };
6908
- const handleKeyDown = event => {
6909
- var _props$onKeyDown;
6910
- (_props$onKeyDown = props.onKeyDown) === null || _props$onKeyDown === void 0 ? void 0 : _props$onKeyDown.call(props, event);
6911
- if (event.isDefaultPrevented()) {
6912
- return;
6913
- }
6914
- if (event.key === 'Enter') {
6915
- event.preventDefault();
6916
- handleClick();
6917
- return;
6918
- }
6919
- };
6920
- return /*#__PURE__*/React.createElement(Input, Object.assign({
6921
- "aria-label": texts.searchInput.placeholder,
6922
- placeholder: texts.searchInput.placeholder
6923
- }, props, {
6924
- onKeyDown: handleKeyDown,
6925
- postfix: /*#__PURE__*/React.createElement(React.Fragment, null, props.disabled || props.readOnly || !props.value ? null : /*#__PURE__*/React.createElement(IconButton, {
6926
- "aria-hidden": true,
6927
- className: "group-peer-focus:visible group-peer-hover:visible !text-grey-700 invisible mr-0.5 !h-5 !min-h-[theme(spacing.4)] !w-5 !min-w-[theme(spacing.4)] text-xs hover:visible group-hover:visible",
6928
- icon: "close",
6929
- onClick: handleCancelClick,
6930
- rounded: true,
6931
- tabIndex: -1,
6932
- tooltip: texts.searchInput.clear
6933
- }), /*#__PURE__*/React.createElement(IconButton, {
6934
- "aria-label": texts.searchInput.button,
6935
- icon: "search",
6936
- className: "group-peer-focus:!border-transparent group-peer-focus:group-peer-active:!border-transparent -mr-2 !border-transparent !bg-transparent focus:!border-transparent",
6937
- disabled: props.disabled || props.readOnly,
6938
- onClick: handleClick,
6939
- tabIndex: -1,
6940
- tooltip: texts.searchInput.button
6941
- })),
6942
- ref: internalRef,
6943
- type: "search"
6944
- }));
6945
- });
6460
+ HoverCard.Trigger = Trigger$5;
6461
+ HoverCard.Content = Content$7;
6946
6462
 
6947
6463
  function useTimer(duration = 0, callback) {
6948
6464
  const timer = React.useRef();
@@ -7088,7 +6604,7 @@ const useListbox = ({
7088
6604
  event.persist();
7089
6605
  if (onChange) {
7090
6606
  var _item$path$split, _item$path;
7091
- const item = findByValue$1(data, event.target.value);
6607
+ const item = findByValue(data, event.target.value);
7092
6608
  event.detail = sanitizeItem(item);
7093
6609
  const indexes = (_item$path$split = item === null || item === void 0 ? void 0 : (_item$path = item.path) === null || _item$path === void 0 ? void 0 : _item$path.split('.')) !== null && _item$path$split !== void 0 ? _item$path$split : [];
7094
6610
  if (indexes.length > 1) {
@@ -7259,7 +6775,7 @@ const useMultiListbox = ({
7259
6775
  const detail = [];
7260
6776
  const valuesArray = event.target.value.split(',');
7261
6777
  valuesArray.forEach(val => {
7262
- const item = findByValue$1(data, val);
6778
+ const item = findByValue(data, val);
7263
6779
  if (item) {
7264
6780
  detail.push(item);
7265
6781
  }
@@ -7299,52 +6815,427 @@ const useMultiListbox = ({
7299
6815
  };
7300
6816
  };
7301
6817
 
7302
- const Listbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
6818
+ const Listbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
6819
+ const {
6820
+ className: externalClassName,
6821
+ ...otherProps
6822
+ } = props;
6823
+ const {
6824
+ list,
6825
+ input
6826
+ } = useListbox(otherProps, ref);
6827
+ const className = cn('bg-white inline-flex relative w-full', externalClassName);
6828
+ return /*#__PURE__*/React.createElement("span", {
6829
+ "data-taco": "listbox",
6830
+ className: className
6831
+ }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
6832
+ style: {
6833
+ ...list.style,
6834
+ maxHeight: 'calc(12rem + 2px)' /* (6 * option height) + listbox border */
6835
+ }
6836
+ })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
6837
+ className: "hidden",
6838
+ type: "text"
6839
+ })));
6840
+ });
6841
+ const MultiListbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
6842
+ const {
6843
+ className: externalClassName,
6844
+ ...otherProps
6845
+ } = props;
6846
+ const {
6847
+ list,
6848
+ input
6849
+ } = useMultiListbox(otherProps, ref);
6850
+ const className = cn('bg-white inline-flex relative w-full', externalClassName);
6851
+ return /*#__PURE__*/React.createElement("span", {
6852
+ "data-taco": "listbox",
6853
+ className: className
6854
+ }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
6855
+ style: {
6856
+ ...list.style,
6857
+ maxHeight: 'calc(12rem + 2px + 2px)' /* (6 * option height) + listbox border + ALL_OPTIONS bottom border */
6858
+ }
6859
+ })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
6860
+ className: "hidden",
6861
+ type: "text"
6862
+ })));
6863
+ });
6864
+
6865
+ const Content$8 = /*#__PURE__*/React.forwardRef(function MenuContent(props, ref) {
6866
+ const internalRef = useMergedRef(ref);
6867
+ const menu = useCurrentMenu();
6868
+ const {
6869
+ align = 'start',
6870
+ children,
6871
+ placement: side,
6872
+ ...otherProps
6873
+ } = props;
6874
+ const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);
6875
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Portal, null, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Content, Object.assign({}, otherProps, {
6876
+ align: align,
6877
+ className: className,
6878
+ "data-taco": "menu",
6879
+ side: side,
6880
+ sideOffset: 3,
6881
+ style: {
6882
+ minWidth: menu === null || menu === void 0 ? void 0 : menu.minWidth
6883
+ },
6884
+ ref: internalRef
6885
+ }), children));
6886
+ });
6887
+
6888
+ const Icon$1 = ({
6889
+ name
6890
+ }) => /*#__PURE__*/React.createElement("span", {
6891
+ className: "absolute left-0 ml-1"
6892
+ }, /*#__PURE__*/React.createElement(Icon, {
6893
+ className: "-ml-px -mt-px !h-5 !w-5",
6894
+ name: name
6895
+ }));
6896
+ const useItemStyling = ({
6897
+ disabled,
6898
+ indented,
6899
+ className
6900
+ }) => {
6901
+ const menu = useCurrentMenu();
6902
+ React.useEffect(() => {
6903
+ if (indented && !(menu !== null && menu !== void 0 && menu.indented)) {
6904
+ menu === null || menu === void 0 ? void 0 : menu.registerIndentation();
6905
+ }
6906
+ }, [indented]);
6907
+ return cn('flex items-center justify-start h-8 pr-1.5 relative rounded w-full focus:outline-none group', {
6908
+ 'pl-7': menu === null || menu === void 0 ? void 0 : menu.indented,
6909
+ 'pl-1.5': !(menu !== null && menu !== void 0 && menu.indented),
6910
+ 'cursor-pointer text-black hover:wcag-grey-200 data-[highlighted]:wcag-grey-200': !disabled,
6911
+ 'cursor-not-allowed hover:bg-white text-grey-300': disabled
6912
+ }, className);
6913
+ };
6914
+ const Shortcut = props => {
6915
+ return /*#__PURE__*/React.createElement("span", Object.assign({}, props, {
6916
+ className: "text-grey-700 ml-auto pl-3"
6917
+ }));
6918
+ };
6919
+ const Item$1 = /*#__PURE__*/React.forwardRef(function MenuItem(props, ref) {
6920
+ var _props$disabled;
6921
+ const {
6922
+ dialog,
6923
+ icon,
6924
+ onClick,
6925
+ shortcut,
6926
+ ...otherProps
6927
+ } = props;
6928
+ const menu = useCurrentMenu();
6929
+ const className = useItemStyling({
6930
+ disabled: props.disabled,
6931
+ indented: !!icon,
6932
+ className: props.className
6933
+ });
6934
+ const disabled = (_props$disabled = props.disabled) !== null && _props$disabled !== void 0 ? _props$disabled : props['aria-disabled'];
6935
+ let handleClick;
6936
+ // radix has a bug that does not disable clicks when disabled is set on items
6937
+ if (disabled) {
6938
+ handleClick = event => {
6939
+ event.preventDefault();
6940
+ event.stopPropagation();
6941
+ };
6942
+ }
6943
+ const handleSelect = event => {
6944
+ if (onClick) {
6945
+ onClick(event);
6946
+ }
6947
+ if (props['aria-haspopup'] || typeof dialog === 'function') {
6948
+ event.preventDefault();
6949
+ }
6950
+ };
6951
+ let button = /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Item, Object.assign({}, otherProps, {
6952
+ className: className,
6953
+ onClick: handleClick,
6954
+ onSelect: handleSelect,
6955
+ ref: ref
6956
+ }), icon && /*#__PURE__*/React.createElement(Icon$1, {
6957
+ name: icon
6958
+ }), props.children, shortcut && /*#__PURE__*/React.createElement(Shortcut, null, shortcut));
6959
+ if (typeof dialog === 'function') {
6960
+ button = dialog({
6961
+ trigger: button,
6962
+ onClose: menu === null || menu === void 0 ? void 0 : menu.close
6963
+ });
6964
+ }
6965
+ return button;
6966
+ });
6967
+
6968
+ const Link = /*#__PURE__*/React.forwardRef(function MenuLink(props, ref) {
6969
+ const {
6970
+ href,
6971
+ icon,
6972
+ onClick,
6973
+ ...otherProps
6974
+ } = props;
6975
+ const menu = useCurrentMenu();
6976
+ const className = useItemStyling({
6977
+ disabled: props.disabled,
6978
+ indented: !!icon,
6979
+ className: props.className
6980
+ });
6981
+ const handleClick = event => {
6982
+ onClick === null || onClick === void 0 ? void 0 : onClick(event);
6983
+ menu === null || menu === void 0 ? void 0 : menu.close();
6984
+ };
6985
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Item, Object.assign({}, otherProps, {
6986
+ asChild: true,
6987
+ className: className,
6988
+ ref: ref,
6989
+ onClick: handleClick
6990
+ }), /*#__PURE__*/React.createElement("a", {
6991
+ href: href,
6992
+ target: "_blank"
6993
+ }, icon && /*#__PURE__*/React.createElement(Icon$1, {
6994
+ name: icon
6995
+ }), props.children));
6996
+ });
6997
+
6998
+ const Trigger$6 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref) {
6999
+ const menu = useCurrentMenu();
7000
+ const internalRef = useMergedRef(ref);
7001
+ React.useEffect(() => {
7002
+ if (internalRef.current) {
7003
+ menu === null || menu === void 0 ? void 0 : menu.setMinWidth(internalRef.current.getBoundingClientRect().width);
7004
+ }
7005
+ }, [internalRef]);
7006
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Trigger, Object.assign({}, props, {
7007
+ asChild: true,
7008
+ ref: internalRef
7009
+ }));
7010
+ });
7011
+
7012
+ const Checkbox$1 = /*#__PURE__*/React.forwardRef(function MenuCheckboxItem(props, ref) {
7303
7013
  const {
7304
- className: externalClassName,
7014
+ checked,
7015
+ children,
7016
+ onChange,
7305
7017
  ...otherProps
7306
7018
  } = props;
7019
+ const className = useItemStyling({
7020
+ disabled: props.disabled,
7021
+ indented: true,
7022
+ className: props.className
7023
+ });
7024
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.CheckboxItem, Object.assign({}, otherProps, {
7025
+ checked: checked,
7026
+ className: className,
7027
+ onCheckedChange: onChange,
7028
+ ref: ref
7029
+ }), /*#__PURE__*/React.createElement(DropdownMenuPrimitive.ItemIndicator, {
7030
+ className: "absolute left-0 ml-1.5"
7031
+ }, /*#__PURE__*/React.createElement(Icon, {
7032
+ name: "tick",
7033
+ className: "-ml-px !h-4 !w-4"
7034
+ })), children);
7035
+ });
7036
+
7037
+ const getRadioGroupItemValueAsString = value => String(value !== null && value !== void 0 ? value : '');
7038
+ const findByValue$1 = (values, valueAsString) => values.find(value => getRadioGroupItemValueAsString(value) === valueAsString);
7039
+ const RadioGroupContext = /*#__PURE__*/React.createContext({
7040
+ disabled: false,
7041
+ invalid: false
7042
+ });
7043
+ const RadioGroupItem = /*#__PURE__*/React.forwardRef(function RadioGroupItem(props, ref) {
7044
+ const context = React.useContext(RadioGroupContext);
7307
7045
  const {
7308
- list,
7309
- input
7310
- } = useListbox(otherProps, ref);
7311
- const className = cn('bg-white inline-flex relative w-full', externalClassName);
7312
- return /*#__PURE__*/React.createElement("span", {
7313
- "data-taco": "listbox",
7314
- className: className
7315
- }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
7316
- style: {
7317
- ...list.style,
7318
- maxHeight: 'calc(12rem + 2px)' /* (6 * option height) + listbox border */
7046
+ children,
7047
+ value,
7048
+ ...otherProps
7049
+ } = props;
7050
+ const isDisabled = context.disabled || props.disabled;
7051
+ const className = cn('flex flex-shrink-0 self-start items-center justify-center h-4 w-4 mt-[0.2rem] rounded-full bg-white border-2', {
7052
+ 'border-grey-300 hover:border-4 focus:yt-focus aria-checked:bg-blue-500 aria-checked:border-blue-500 hover:aria-checked:border-blue-300': !isDisabled && !context.invalid,
7053
+ 'border-grey-200 cursor-not-allowed aria-checked:bg-blue-300 aria-checked:border-blue-300 ': isDisabled,
7054
+ 'border-red-500 hover:border-4 text-red-500 focus:border-red-500 focus:yt-focus-red aria-checked:bg-red-500 aria-checked:border-red': context.invalid && !isDisabled
7055
+ });
7056
+ const labelClassName = cn('flex items-center gap-2', {
7057
+ 'cursor-pointer': !isDisabled,
7058
+ 'cursor-not-allowed text-grey-300': isDisabled
7059
+ }, props.className);
7060
+ return /*#__PURE__*/React.createElement("label", {
7061
+ className: labelClassName
7062
+ }, /*#__PURE__*/React.createElement(RadioGroupPrimitive.Item, Object.assign({}, otherProps, {
7063
+ className: className,
7064
+ disabled: isDisabled,
7065
+ ref: ref,
7066
+ value: getRadioGroupItemValueAsString(value)
7067
+ }), /*#__PURE__*/React.createElement(RadioGroupPrimitive.Indicator, {
7068
+ className: "h-2 w-2 rounded-full bg-white"
7069
+ })), children);
7070
+ });
7071
+ const useRadioGroup = props => {
7072
+ const {
7073
+ children,
7074
+ defaultValue,
7075
+ disabled,
7076
+ invalid,
7077
+ onChange,
7078
+ orientation = 'vertical',
7079
+ value,
7080
+ ...otherProps
7081
+ } = props;
7082
+ const values = React.useMemo(() => {
7083
+ const radioGroupItemValues = [];
7084
+ React.Children.forEach(children, child => {
7085
+ if ( /*#__PURE__*/React.isValidElement(child)) {
7086
+ radioGroupItemValues.push(child.props.value);
7087
+ }
7088
+ });
7089
+ return radioGroupItemValues;
7090
+ }, [children]);
7091
+ const context = React.useMemo(() => ({
7092
+ disabled: disabled !== null && disabled !== void 0 ? disabled : false,
7093
+ invalid: invalid !== null && invalid !== void 0 ? invalid : false
7094
+ }), [disabled, invalid]);
7095
+ let valueProps;
7096
+ if (onChange !== undefined) {
7097
+ const handleChange = value => onChange(findByValue$1(values, value));
7098
+ valueProps = {
7099
+ onValueChange: handleChange,
7100
+ value: value !== undefined ? getRadioGroupItemValueAsString(value) : undefined
7101
+ };
7102
+ } else {
7103
+ valueProps = {
7104
+ defaultValue: defaultValue !== undefined ? getRadioGroupItemValueAsString(defaultValue) : undefined
7105
+ };
7106
+ }
7107
+ return {
7108
+ context,
7109
+ props: {
7110
+ ...otherProps,
7111
+ ...valueProps,
7112
+ children,
7113
+ disabled,
7114
+ orientation
7319
7115
  }
7320
- })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
7321
- className: "hidden",
7322
- type: "text"
7116
+ };
7117
+ };
7118
+ const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(props, ref) {
7119
+ const {
7120
+ context,
7121
+ props: otherProps
7122
+ } = useRadioGroup(props);
7123
+ const className = cn('flex items-start gap-y-2', {
7124
+ 'flex-wrap gap-x-4 ': otherProps.orientation === 'horizontal',
7125
+ 'flex-col': otherProps.orientation === 'vertical'
7126
+ }, otherProps.className);
7127
+ return /*#__PURE__*/React.createElement(RadioGroupContext.Provider, {
7128
+ value: context
7129
+ }, /*#__PURE__*/React.createElement(RadioGroupPrimitive.Root, Object.assign({}, otherProps, {
7130
+ className: className,
7131
+ "data-taco": "radio-group",
7132
+ ref: ref
7323
7133
  })));
7324
7134
  });
7325
- const MultiListbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
7135
+ RadioGroup.Item = RadioGroupItem;
7136
+
7137
+ const RadioItem = props => {
7138
+ const context = React.useContext(MenuRadioGroupContext);
7326
7139
  const {
7327
- className: externalClassName,
7140
+ children,
7141
+ value,
7328
7142
  ...otherProps
7329
7143
  } = props;
7144
+ const disabled = context.disabled || props.disabled;
7145
+ const className = useItemStyling({
7146
+ disabled: disabled,
7147
+ indented: true,
7148
+ className: props.className
7149
+ });
7150
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.RadioItem, Object.assign({}, otherProps, {
7151
+ className: className,
7152
+ disabled: disabled,
7153
+ value: getRadioGroupItemValueAsString(value)
7154
+ }), /*#__PURE__*/React.createElement(DropdownMenuPrimitive.ItemIndicator, {
7155
+ className: "absolute left-0 ml-1.5"
7156
+ }, /*#__PURE__*/React.createElement("span", {
7157
+ className: "ml-1 flex h-1.5 w-1.5 rounded-full bg-current "
7158
+ })), children);
7159
+ };
7160
+ const MenuRadioGroupContext = /*#__PURE__*/React.createContext({
7161
+ disabled: false
7162
+ });
7163
+ const RadioGroup$1 = /*#__PURE__*/React.forwardRef(function MenuRadioItem(props, ref) {
7330
7164
  const {
7331
- list,
7332
- input
7333
- } = useMultiListbox(otherProps, ref);
7334
- const className = cn('bg-white inline-flex relative w-full', externalClassName);
7335
- return /*#__PURE__*/React.createElement("span", {
7336
- "data-taco": "listbox",
7337
- className: className
7338
- }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
7339
- style: {
7340
- ...list.style,
7341
- maxHeight: 'calc(12rem + 2px + 2px)' /* (6 * option height) + listbox border + ALL_OPTIONS bottom border */
7342
- }
7343
- })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
7344
- className: "hidden",
7345
- type: "text"
7165
+ context,
7166
+ props: otherProps
7167
+ } = useRadioGroup(props);
7168
+ const className = cn('flex flex-col', props.className);
7169
+ return /*#__PURE__*/React.createElement(MenuRadioGroupContext.Provider, {
7170
+ value: context
7171
+ }, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.RadioGroup, Object.assign({}, otherProps, {
7172
+ className: className,
7173
+ ref: ref
7346
7174
  })));
7347
7175
  });
7176
+ RadioGroup$1.Item = RadioItem;
7177
+
7178
+ const Separator = () => {
7179
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Separator, {
7180
+ className: "bg-grey-300 my-1 h-px"
7181
+ });
7182
+ };
7183
+
7184
+ const Header = /*#__PURE__*/React.forwardRef(function MenuHeader(props, ref) {
7185
+ const menu = useCurrentMenu();
7186
+ const className = cn('flex items-center justify-start h-7 pr-1.5 text-xs text-grey-700', {
7187
+ 'pl-7': menu === null || menu === void 0 ? void 0 : menu.indented,
7188
+ 'pl-1.5': !(menu !== null && menu !== void 0 && menu.indented)
7189
+ }, props.className);
7190
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Label, Object.assign({}, props, {
7191
+ className: className,
7192
+ ref: ref
7193
+ }));
7194
+ });
7195
+
7196
+ const Menu$1 = /*#__PURE__*/React.forwardRef(function Menu(externalProps, ref) {
7197
+ const {
7198
+ children,
7199
+ defaultOpen: defaultProp,
7200
+ onChange,
7201
+ open: prop,
7202
+ trigger,
7203
+ ...props
7204
+ } = externalProps;
7205
+ const [indented, setIndented] = React.useState(false);
7206
+ const [minWidth, setMinWidth] = React.useState(undefined);
7207
+ const [open, setOpen] = reactUseControllableState.useControllableState({
7208
+ // uncontrolled
7209
+ defaultProp,
7210
+ // controlled
7211
+ onChange,
7212
+ prop
7213
+ });
7214
+ const context = React.useMemo(() => ({
7215
+ indented,
7216
+ registerIndentation: () => setIndented(true),
7217
+ minWidth,
7218
+ setMinWidth: width => setMinWidth(width),
7219
+ close: () => setOpen(false)
7220
+ }), [indented, minWidth]);
7221
+ return /*#__PURE__*/React.createElement(MenuContext.Provider, {
7222
+ value: context
7223
+ }, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Root, Object.assign({}, props, {
7224
+ modal: false,
7225
+ open: open,
7226
+ onOpenChange: setOpen
7227
+ }), trigger && /*#__PURE__*/React.createElement(Trigger$6, {
7228
+ ref: ref
7229
+ }, trigger), children));
7230
+ });
7231
+ Menu$1.Trigger = Trigger$6;
7232
+ Menu$1.Content = Content$8;
7233
+ Menu$1.Item = Item$1;
7234
+ Menu$1.Link = Link;
7235
+ Menu$1.Checkbox = Checkbox$1;
7236
+ Menu$1.Separator = Separator;
7237
+ Menu$1.Header = Header;
7238
+ Menu$1.RadioGroup = RadioGroup$1;
7348
7239
 
7349
7240
  const TreeviewItem = /*#__PURE__*/React__default.forwardRef(function TreeviewItem(props, ref) {
7350
7241
  return /*#__PURE__*/React__default.createElement("a", Object.assign({}, props, {
@@ -7554,6 +7445,116 @@ Navigation.Menu = Menu$2;
7554
7445
  Navigation.Item = Item$2;
7555
7446
  Navigation.Panel = Panel;
7556
7447
 
7448
+ const useIntersectionObserver = (ref, offset) => {
7449
+ const [intersectedIndexes, setIntersectedIndexes] = React__default.useState({});
7450
+ const handleIntersection = (entries, observer) => {
7451
+ if (observer.root) {
7452
+ const children = Array.from(observer.root.children);
7453
+ const map = {};
7454
+ entries.forEach(entry => {
7455
+ // entries only contains the items being intersected not all children of the ref
7456
+ // so use root and the the entry being intersected to find its real index
7457
+ // on first mount this is different - all children are present
7458
+ map[children.indexOf(entry.target)] = entry.isIntersecting;
7459
+ });
7460
+ setIntersectedIndexes(prev => ({
7461
+ ...prev,
7462
+ ...map
7463
+ }));
7464
+ }
7465
+ };
7466
+ const intersectedChildIndex = React__default.useMemo(() => {
7467
+ const index = Object.values(intersectedIndexes).indexOf(false);
7468
+ return index > -1 ? index : undefined;
7469
+ }, [intersectedIndexes]);
7470
+ const hasRootMargin = intersectedChildIndex !== undefined && offset;
7471
+ React__default.useEffect(() => {
7472
+ const observer = new IntersectionObserver(handleIntersection, {
7473
+ root: ref.current,
7474
+ // offset the button, but only after the first item has been intersected
7475
+ rootMargin: hasRootMargin ? `0px -${offset}px 0px 0px` : undefined,
7476
+ threshold: 1
7477
+ });
7478
+ if (observer.root) {
7479
+ Array.from(observer.root.children).forEach(item => {
7480
+ if (!item.hasAttribute('data-observer-ignore')) {
7481
+ observer.observe(item);
7482
+ }
7483
+ });
7484
+ }
7485
+ return () => {
7486
+ observer.disconnect();
7487
+ };
7488
+ }, [hasRootMargin]);
7489
+ return intersectedChildIndex;
7490
+ };
7491
+
7492
+ const sanitizeButtonPropsForMenuItem = (button, index) => {
7493
+ const href = button.props.to || button.props.href;
7494
+ const Tag = href ? Menu$1.Link : Menu$1.Item;
7495
+ // Removing className prop so that custom styling cannot be applied on Menu.Link
7496
+ const {
7497
+ as,
7498
+ className: _,
7499
+ appearance: _1,
7500
+ drawer: _2,
7501
+ fluid: _3,
7502
+ hanger: _4,
7503
+ menu: _5,
7504
+ popover: _6,
7505
+ tooltip: _7,
7506
+ ...attributes
7507
+ } = button.props;
7508
+ const props = {
7509
+ ...attributes,
7510
+ key: index,
7511
+ target: href ? href.startsWith('http') ? '_blank' : '_self' : undefined
7512
+ };
7513
+ if (as) {
7514
+ return /*#__PURE__*/React__default.cloneElement(button, {
7515
+ as: Tag,
7516
+ ...props
7517
+ });
7518
+ }
7519
+ return /*#__PURE__*/React__default.createElement(Tag, Object.assign({}, props));
7520
+ };
7521
+ const DEFAULT_OFFSET = 32 + 8;
7522
+ const OverflowGroup = /*#__PURE__*/React__default.forwardRef(function OverflowGroup(props, ref) {
7523
+ const {
7524
+ moreButton: MoreButton,
7525
+ ...attributes
7526
+ } = props;
7527
+ const internalRef = useMergedRef(ref);
7528
+ // determine width of more button, to add intersection observer margin
7529
+ const [buttonWidth, setButtonWidth] = React__default.useState(DEFAULT_OFFSET);
7530
+ const buttonRefCallback = React__default.useCallback(el => {
7531
+ var _el$getBoundingClient;
7532
+ return setButtonWidth(el === null || el === void 0 ? void 0 : (_el$getBoundingClient = el.getBoundingClientRect()) === null || _el$getBoundingClient === void 0 ? void 0 : _el$getBoundingClient.width);
7533
+ }, []);
7534
+ const button = MoreButton !== null && MoreButton !== void 0 ? MoreButton : /*#__PURE__*/React__default.createElement(IconButton, {
7535
+ icon: "more"
7536
+ });
7537
+ const intersectedChildIndex = useIntersectionObserver(internalRef, buttonWidth);
7538
+ const children = React__default.Children.toArray(props.children);
7539
+ const hiddenChildren = intersectedChildIndex !== undefined ? children.slice(intersectedChildIndex) : [];
7540
+ const className = cn('flex overflow-hidden', props.className);
7541
+ return /*#__PURE__*/React__default.createElement("div", Object.assign({}, attributes, {
7542
+ className: className,
7543
+ "data-taco": "overflow-group",
7544
+ ref: internalRef
7545
+ }), children.map((child, index) => /*#__PURE__*/React__default.cloneElement(child, {
7546
+ className: cn(child.props.className, {
7547
+ visible: intersectedChildIndex === undefined || index < intersectedChildIndex,
7548
+ 'invisible order-[100] pointer-events-none': intersectedChildIndex !== undefined && index >= intersectedChildIndex
7549
+ })
7550
+ })), hiddenChildren.length ? /*#__PURE__*/React__default.cloneElement(button, {
7551
+ className: cn('sticky right-0 order-[99]', button.props.className),
7552
+ 'data-observer-ignore': true,
7553
+ menu: menuProps => /*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, null, hiddenChildren.map(sanitizeButtonPropsForMenuItem))),
7554
+ ref: buttonRefCallback
7555
+ }) : null);
7556
+ });
7557
+
7557
7558
  const createPageRange = (pageCount, pageNumber) => {
7558
7559
  let lowerLimit = Math.min(pageNumber, pageCount);
7559
7560
  let upperLimit = Math.min(pageNumber, pageCount);
@@ -7625,7 +7626,7 @@ const useSelect = ({
7625
7626
  }, [open]);
7626
7627
  React.useEffect(() => {
7627
7628
  if (value === undefined) {
7628
- if (defaultValue !== undefined && findByValue$1(flattenedData, defaultValue)) {
7629
+ if (defaultValue !== undefined && findByValue(flattenedData, defaultValue)) {
7629
7630
  setInputValueByRef$1(inputRef.current, defaultValue);
7630
7631
  } else {
7631
7632
  if (emptyValue !== undefined) {
@@ -7635,7 +7636,7 @@ const useSelect = ({
7635
7636
  }
7636
7637
  }
7637
7638
  } else {
7638
- if (!multiselect && !findByValue$1(flattenedData, value)) {
7639
+ if (!multiselect && !findByValue(flattenedData, value)) {
7639
7640
  if (emptyValue !== undefined) {
7640
7641
  setInputValueByRef$1(inputRef.current, emptyValue);
7641
7642
  } else if (data.length > 0) {
@@ -7694,11 +7695,11 @@ const useSelect = ({
7694
7695
  text = texts.select.allOptionsSelected;
7695
7696
  } else {
7696
7697
  var _findByValue$text, _findByValue;
7697
- text = (_findByValue$text = (_findByValue = findByValue$1(flattenedData, selectedValues[0])) === null || _findByValue === void 0 ? void 0 : _findByValue.text) !== null && _findByValue$text !== void 0 ? _findByValue$text : '';
7698
+ text = (_findByValue$text = (_findByValue = findByValue(flattenedData, selectedValues[0])) === null || _findByValue === void 0 ? void 0 : _findByValue.text) !== null && _findByValue$text !== void 0 ? _findByValue$text : '';
7698
7699
  more = selectedValues.length > 1 ? selectedValues.length - 1 : 0;
7699
7700
  }
7700
7701
  } else {
7701
- const item = findByValue$1(flattenedData, value);
7702
+ const item = findByValue(flattenedData, value);
7702
7703
  if (item) {
7703
7704
  text = item.icon ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.cloneElement(item.icon, {
7704
7705
  className: cn(item.icon.props.className, 'mr-1 -mt-px')
@@ -7710,7 +7711,7 @@ const useSelect = ({
7710
7711
  event.persist();
7711
7712
  if (onChange) {
7712
7713
  var _item$path$split, _item$path;
7713
- const item = findByValue$1(flattenedData, event.target.value);
7714
+ const item = findByValue(flattenedData, event.target.value);
7714
7715
  event.detail = sanitizeItem(item);
7715
7716
  const indexes = (_item$path$split = item === null || item === void 0 ? void 0 : (_item$path = item.path) === null || _item$path === void 0 ? void 0 : _item$path.split('.')) !== null && _item$path$split !== void 0 ? _item$path$split : [];
7716
7717
  if (indexes.length > 1) {
@@ -8057,6 +8058,7 @@ const getBadgeIcon = type => {
8057
8058
  return null;
8058
8059
  }
8059
8060
  };
8061
+ const getToastEmptyContentWarning = content => `Toast requires 'content' property, which can't be empty string, null or undefined. Current content value is set to ${content === '' ? 'empty string' : content}.`;
8060
8062
 
8061
8063
  const Toast = ({
8062
8064
  content,
@@ -8082,7 +8084,7 @@ const Toast = ({
8082
8084
  const timer = useTimer(autoClose, handleClose);
8083
8085
  const controls = framerMotion.useAnimation();
8084
8086
  if (!content) {
8085
- console.warn(`Toast requires 'content' property, which can't be empty string, null or undefined. Current content value is set to ${content === '' ? 'empty string' : content}.`);
8087
+ console.warn(getToastEmptyContentWarning(content));
8086
8088
  }
8087
8089
  React__default.useEffect(() => {
8088
8090
  if (autoClose) {
@@ -8281,6 +8283,60 @@ const Provider = props => {
8281
8283
  }, /*#__PURE__*/React.createElement(TooltipPrimitive.Provider, null, /*#__PURE__*/React.createElement(ToastProvider, null, children)));
8282
8284
  };
8283
8285
 
8286
+ const SearchInput = /*#__PURE__*/React.forwardRef(function SearchInput({
8287
+ onSearch,
8288
+ ...props
8289
+ }, ref) {
8290
+ const internalRef = useMergedRef(ref);
8291
+ const {
8292
+ texts
8293
+ } = useLocalization();
8294
+ const handleClick = () => {
8295
+ var _internalRef$current$, _internalRef$current;
8296
+ onSearch === null || onSearch === void 0 ? void 0 : onSearch((_internalRef$current$ = (_internalRef$current = internalRef.current) === null || _internalRef$current === void 0 ? void 0 : _internalRef$current.value) !== null && _internalRef$current$ !== void 0 ? _internalRef$current$ : '');
8297
+ };
8298
+ const handleCancelClick = () => {
8299
+ setInputValueByRef(internalRef.current, '');
8300
+ };
8301
+ const handleKeyDown = event => {
8302
+ var _props$onKeyDown;
8303
+ (_props$onKeyDown = props.onKeyDown) === null || _props$onKeyDown === void 0 ? void 0 : _props$onKeyDown.call(props, event);
8304
+ if (event.isDefaultPrevented()) {
8305
+ return;
8306
+ }
8307
+ if (event.key === 'Enter') {
8308
+ event.preventDefault();
8309
+ handleClick();
8310
+ return;
8311
+ }
8312
+ };
8313
+ return /*#__PURE__*/React.createElement(Input, Object.assign({
8314
+ "aria-label": texts.searchInput.placeholder,
8315
+ placeholder: texts.searchInput.placeholder
8316
+ }, props, {
8317
+ onKeyDown: handleKeyDown,
8318
+ postfix: /*#__PURE__*/React.createElement(React.Fragment, null, props.disabled || props.readOnly || !props.value ? null : /*#__PURE__*/React.createElement(IconButton, {
8319
+ "aria-hidden": true,
8320
+ className: "group-peer-focus:visible group-peer-hover:visible !text-grey-700 invisible mr-0.5 !h-5 !min-h-[theme(spacing.4)] !w-5 !min-w-[theme(spacing.4)] text-xs hover:visible group-hover:visible",
8321
+ icon: "close",
8322
+ onClick: handleCancelClick,
8323
+ rounded: true,
8324
+ tabIndex: -1,
8325
+ tooltip: texts.searchInput.clear
8326
+ }), /*#__PURE__*/React.createElement(IconButton, {
8327
+ "aria-label": texts.searchInput.button,
8328
+ icon: "search",
8329
+ className: "group-peer-focus:!border-transparent group-peer-focus:group-peer-active:!border-transparent -mr-2 !border-transparent !bg-transparent focus:!border-transparent",
8330
+ disabled: props.disabled || props.readOnly,
8331
+ onClick: handleClick,
8332
+ tabIndex: -1,
8333
+ tooltip: texts.searchInput.button
8334
+ })),
8335
+ ref: internalRef,
8336
+ type: "search"
8337
+ }));
8338
+ });
8339
+
8284
8340
  const isAriaSelectionKey = event => {
8285
8341
  if (event.key === 'Enter' || event.key === ' ' || event.key === 'Tab') {
8286
8342
  return true;
@@ -9703,6 +9759,47 @@ const Shortcut$1 = ({
9703
9759
  }, key)));
9704
9760
  };
9705
9761
 
9762
+ const Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
9763
+ const {
9764
+ label,
9765
+ onChange,
9766
+ ...otherProps
9767
+ } = props;
9768
+ const id = useId(props.id);
9769
+ const className = cn('group h-5 w-9 flex flex-shrink-0 rounded-full inline-flex', {
9770
+ 'mr-2': !!label,
9771
+ 'bg-grey-500 hover:bg-grey-300 aria-checked:bg-blue-500 aria-checked:hover:bg-blue-300 focus:yt-focus': !props.disabled,
9772
+ 'bg-grey-100 cursor-not-allowed aria-checked:bg-blue-300': props.disabled
9773
+ }, props.className);
9774
+ let labelledByProps = null;
9775
+ if (label) {
9776
+ labelledByProps = {
9777
+ 'aria-labelledby': `${id}-label`,
9778
+ id
9779
+ };
9780
+ }
9781
+ const element = /*#__PURE__*/React.createElement(PrimitiveSwitch.Root, Object.assign({}, otherProps, labelledByProps, {
9782
+ className: className,
9783
+ onCheckedChange: onChange,
9784
+ ref: ref
9785
+ }), /*#__PURE__*/React.createElement(PrimitiveSwitch.Thumb, {
9786
+ className: "'will-change-transform mt-0.5 h-4 w-4 translate-x-[0.15rem] rounded-full bg-white transition-transform group-disabled:opacity-50 group-aria-checked:translate-x-[1.1rem]"
9787
+ }));
9788
+ if (label) {
9789
+ const labelContainerClassName = cn('flex self-start cursor-pointer', {
9790
+ 'cursor-not-allowed text-grey-300': props.disabled
9791
+ });
9792
+ return /*#__PURE__*/React.createElement("span", {
9793
+ className: labelContainerClassName
9794
+ }, element, /*#__PURE__*/React.createElement("label", {
9795
+ htmlFor: id,
9796
+ id: `${id}-label`
9797
+ }, label));
9798
+ }
9799
+ return element;
9800
+ });
9801
+ Switch.displayName = 'Switch';
9802
+
9706
9803
  const sanitizeRowProps = (row, rowExpansionRenderer) => {
9707
9804
  var _row$subRows;
9708
9805
  const props = {
@@ -10205,7 +10302,7 @@ const useRowSelect = onSelectedRows => {
10205
10302
  onSelectedRows({});
10206
10303
  }
10207
10304
  };
10208
- return /*#__PURE__*/React__default.createElement(Checkbox$1, Object.assign({}, props, {
10305
+ return /*#__PURE__*/React__default.createElement(Checkbox, Object.assign({}, props, {
10209
10306
  onChange: onChange
10210
10307
  }));
10211
10308
  },
@@ -10230,7 +10327,7 @@ const useRowSelect = onSelectedRows => {
10230
10327
  }
10231
10328
  lastSelectedSortedIndex.current = sortedIndex;
10232
10329
  };
10233
- return /*#__PURE__*/React__default.createElement(Checkbox$1, Object.assign({}, props, {
10330
+ return /*#__PURE__*/React__default.createElement(Checkbox, Object.assign({}, props, {
10234
10331
  className: "!mt-2.5",
10235
10332
  onClick: onClick,
10236
10333
  // this is necessary to remove console spam from eslint
@@ -11320,7 +11417,7 @@ const SelectCell = /*#__PURE__*/React__default.memo(({
11320
11417
  className: "ml-2",
11321
11418
  keys: ['Space']
11322
11419
  }))
11323
- }, /*#__PURE__*/React__default.createElement(Checkbox$1, {
11420
+ }, /*#__PURE__*/React__default.createElement(Checkbox, {
11324
11421
  "aria-label": isSelected ? texts.table2.columns.select.select : texts.table2.columns.select.deselect,
11325
11422
  className: "hover:border-blue !mt-0",
11326
11423
  checked: isSelected,
@@ -11341,7 +11438,7 @@ function createRowSelectionColumn(enableMultipleRowSelection, lastSelectedRowInd
11341
11438
  className: "ml-2",
11342
11439
  keys: ['Ctrl', 'A']
11343
11440
  }))
11344
- }, /*#__PURE__*/React__default.createElement(Checkbox$1, {
11441
+ }, /*#__PURE__*/React__default.createElement(Checkbox, {
11345
11442
  "aria-label": table.getIsAllPageRowsSelected() ? texts.table2.columns.select.deselectAll : texts.table2.columns.select.selectAll,
11346
11443
  className: "hover:border-blue !mt-0",
11347
11444
  checked: table.getIsAllPageRowsSelected(),
@@ -11632,47 +11729,6 @@ const ColumnBase = /*#__PURE__*/React__default.forwardRef(function Table2ColumnB
11632
11729
  }));
11633
11730
  });
11634
11731
 
11635
- const Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
11636
- const {
11637
- label,
11638
- onChange,
11639
- ...otherProps
11640
- } = props;
11641
- const id = useId(props.id);
11642
- const className = cn('group h-5 w-9 flex flex-shrink-0 rounded-full inline-flex', {
11643
- 'mr-2': !!label,
11644
- 'bg-grey-500 hover:bg-grey-300 aria-checked:bg-blue-500 aria-checked:hover:bg-blue-300 focus:yt-focus': !props.disabled,
11645
- 'bg-grey-100 cursor-not-allowed aria-checked:bg-blue-300': props.disabled
11646
- }, props.className);
11647
- let labelledByProps = null;
11648
- if (label) {
11649
- labelledByProps = {
11650
- 'aria-labelledby': `${id}-label`,
11651
- id
11652
- };
11653
- }
11654
- const element = /*#__PURE__*/React.createElement(PrimitiveSwitch.Root, Object.assign({}, otherProps, labelledByProps, {
11655
- className: className,
11656
- onCheckedChange: onChange,
11657
- ref: ref
11658
- }), /*#__PURE__*/React.createElement(PrimitiveSwitch.Thumb, {
11659
- className: "'will-change-transform mt-0.5 h-4 w-4 translate-x-[0.15rem] rounded-full bg-white transition-transform group-disabled:opacity-50 group-aria-checked:translate-x-[1.1rem]"
11660
- }));
11661
- if (label) {
11662
- const labelContainerClassName = cn('flex self-start cursor-pointer', {
11663
- 'cursor-not-allowed text-grey-300': props.disabled
11664
- });
11665
- return /*#__PURE__*/React.createElement("span", {
11666
- className: labelContainerClassName
11667
- }, element, /*#__PURE__*/React.createElement("label", {
11668
- htmlFor: id,
11669
- id: `${id}-label`
11670
- }, label));
11671
- }
11672
- return element;
11673
- });
11674
- Switch.displayName = 'Switch';
11675
-
11676
11732
  var Table2FilterComparator;
11677
11733
  (function (Table2FilterComparator) {
11678
11734
  Table2FilterComparator[Table2FilterComparator["Contains"] = 0] = "Contains";
@@ -13364,7 +13420,7 @@ const OrderableColumn = /*#__PURE__*/React__default.forwardRef((props, ref) => {
13364
13420
  ref: ref
13365
13421
  }), /*#__PURE__*/React__default.createElement("span", {
13366
13422
  className: "pointer-events-none"
13367
- }, icon, (_column$columnDef$hea = column.columnDef.header) !== null && _column$columnDef$hea !== void 0 ? _column$columnDef$hea : column.columnDef.id), column.getCanHide() ? /*#__PURE__*/React__default.createElement(Checkbox$1, {
13423
+ }, icon, (_column$columnDef$hea = column.columnDef.header) !== null && _column$columnDef$hea !== void 0 ? _column$columnDef$hea : column.columnDef.id), column.getCanHide() ? /*#__PURE__*/React__default.createElement(Checkbox, {
13368
13424
  checked: column.getIsVisible(),
13369
13425
  onChange: column.toggleVisibility
13370
13426
  }) : null);
@@ -14778,25 +14834,20 @@ Tour.Step = TourStep;
14778
14834
 
14779
14835
  const Button$3 = /*#__PURE__*/React__default.forwardRef(function Button(props, ref) {
14780
14836
  const {
14781
- as = 'li',
14782
14837
  ...attributes
14783
14838
  } = props;
14784
14839
  const className = cn(getButtonClasses$1(), props.className);
14785
- const Tag = as;
14786
- return /*#__PURE__*/React__default.createElement(Tag, {
14787
- className: "contents"
14788
- }, /*#__PURE__*/React__default.createElement(IconButton, Object.assign({}, attributes, {
14840
+ return /*#__PURE__*/React__default.createElement(IconButton, Object.assign({}, attributes, {
14789
14841
  appearance: "discrete",
14790
14842
  className: className,
14791
14843
  "data-taco": "header-button",
14792
14844
  ref: ref
14793
- })));
14845
+ }));
14794
14846
  });
14795
14847
  const getButtonClasses$1 = () => cn('!h-9 !w-9 flex-shrink-0 flex-grow-0 cursor-pointer !rounded-full relative', 'focus:!outline-none focus:!shadow-none focus-visible:!yt-focus-dark ', 'bg-transparent hover:bg-white/[.08] focus:bg-white/[.08] aria-current-page:bg-white/[.08]', '!text-white hover:text-white focus:text-white');
14796
14848
 
14797
14849
  const Link$1 = /*#__PURE__*/React__default.forwardRef(function Link(props, ref) {
14798
14850
  const {
14799
- as = 'li',
14800
14851
  children,
14801
14852
  icon,
14802
14853
  isNew,
@@ -14806,9 +14857,8 @@ const Link$1 = /*#__PURE__*/React__default.forwardRef(function Link(props, ref)
14806
14857
  const {
14807
14858
  texts
14808
14859
  } = useLocalization();
14809
- const Tag = as;
14810
14860
  const className = cn(getLinkClasses(icon), 'relative', props.className);
14811
- let link = /*#__PURE__*/React__default.createElement("a", Object.assign({}, otherProps, {
14861
+ const link = /*#__PURE__*/React__default.createElement("a", Object.assign({}, otherProps, {
14812
14862
  className: className,
14813
14863
  "data-taco": "header-link",
14814
14864
  ref: ref,
@@ -14821,13 +14871,11 @@ const Link$1 = /*#__PURE__*/React__default.forwardRef(function Link(props, ref)
14821
14871
  className: "absolute top-0 right-0 -mt-1.5 -mr-2.5 !h-3 !px-0.5 text-[0.55rem] font-normal"
14822
14872
  }, texts.header.new) : null);
14823
14873
  if (tooltip) {
14824
- link = /*#__PURE__*/React__default.createElement(Tooltip, {
14874
+ return /*#__PURE__*/React__default.createElement(Tooltip, {
14825
14875
  title: tooltip
14826
14876
  }, link);
14827
14877
  }
14828
- return /*#__PURE__*/React__default.createElement(Tag, {
14829
- className: "contents"
14830
- }, link);
14878
+ return link;
14831
14879
  });
14832
14880
  const getLinkClasses = (icon = undefined) => cn('flex h-8 flex-shrink-0 flex-grow-0 cursor-pointer items-center justify-center ', 'focus:!shadow-none focus:!outline-none focus-visible:!yt-focus-dark', 'bg-transparent hover:bg-white/[.08] focus:bg-white/[.08] aria-current-page:bg-white/[.08]', '!text-white hover:text-white focus:text-white', {
14833
14881
  '!rounded-full !h-9 !w-9': icon,
@@ -14902,132 +14950,27 @@ const Logo = /*#__PURE__*/React__default.forwardRef(function Logo(props, ref) {
14902
14950
  }))));
14903
14951
  });
14904
14952
 
14905
- const getChildWidths = parent => {
14906
- const widths = [];
14907
- for (let index = 0; index < parent.children.length; index++) {
14908
- var _parent$children$inde, _childRect$width;
14909
- const childRect = (_parent$children$inde = parent.children[index].firstElementChild) === null || _parent$children$inde === void 0 ? void 0 : _parent$children$inde.getBoundingClientRect();
14910
- widths.push((_childRect$width = childRect === null || childRect === void 0 ? void 0 : childRect.width) !== null && _childRect$width !== void 0 ? _childRect$width : 0);
14911
- }
14912
- return widths;
14913
- };
14914
- const ChildrenWidth = ({
14915
- setWidth,
14916
- children
14917
- }) => {
14918
- const ref = React__default.useRef(null);
14919
- const [show, setShow] = React__default.useState(true);
14920
- React__default.useEffect(() => {
14921
- // Calculate the width of children, and then hides the portal
14922
- if (ref.current && show) {
14923
- setWidth(getChildWidths(ref.current));
14924
- setShow(false);
14925
- }
14926
- }, [show]);
14927
- React__default.useEffect(() => {
14928
- // If children changes, then we render the children to calculate their width
14929
- if (!show) {
14930
- setShow(true);
14931
- }
14932
- }, [children]);
14933
- return show ? /*#__PURE__*/React__default.createElement(reactPortal.Portal, {
14934
- className: cn('invisible absolute z-[-10] flex translate-x-[-1000px]'),
14935
- ref: ref
14936
- }, children) : null;
14937
- };
14938
- const useBoundaryIndex = (wrapperWidth, buttonRef, childWidths) => {
14939
- // Primary navigation has a gap of gap-1, so we need to take the gap value in account as well
14940
- // left gap + right gap = 8px
14941
- const GAP = 8;
14942
- return React__default.useMemo(() => {
14943
- if (childWidths.length && wrapperWidth && buttonRef.current) {
14944
- const realWidth = wrapperWidth - buttonRef.current.getBoundingClientRect().width - GAP;
14945
- let boundary;
14946
- let total = 0;
14947
- childWidths.every((width, index) => {
14948
- const nextWidth = total + width + GAP;
14949
- if (nextWidth > realWidth) {
14950
- boundary = index;
14951
- return false;
14952
- }
14953
- total = nextWidth;
14954
- return true;
14955
- });
14956
- return boundary;
14957
- }
14958
- return undefined;
14959
- }, [childWidths, wrapperWidth]);
14960
- };
14961
14953
  const PrimaryNavigation = /*#__PURE__*/React__default.forwardRef(function PrimaryNavigation(props, ref) {
14962
- var _rect$width;
14963
14954
  const {
14964
14955
  texts
14965
14956
  } = useLocalization();
14966
14957
  const internalRef = useMergedRef(ref);
14967
- const rect = useBoundingClientRectListener(internalRef);
14968
- const buttonRef = React__default.useRef(null);
14969
- const [childWidths, setChildWidths] = React__default.useState([]);
14970
- const boundaryIndex = useBoundaryIndex((_rect$width = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _rect$width !== void 0 ? _rect$width : 0, buttonRef, childWidths);
14971
14958
  const className = cn('flex h-full w-full flex-grow items-center overflow-hidden active:outline-none relative', props.className);
14972
- const moreButtonClassName = cn(getLinkClasses(), '!bg-transparent aria-expanded:!bg-white/[.08]');
14973
- const [visibleChildren, hiddenChildren] = React__default.useMemo(() => {
14974
- const visibleChildren = [];
14975
- const hiddenChildren = [];
14976
- React__default.Children.forEach(props.children, (child, index) => {
14977
- if ( /*#__PURE__*/React__default.isValidElement(child) && !!child) {
14978
- if (boundaryIndex && index >= boundaryIndex) {
14979
- hiddenChildren.push(child);
14980
- } else {
14981
- visibleChildren.push(child);
14982
- }
14983
- }
14984
- });
14985
- return [visibleChildren, hiddenChildren];
14986
- }, [boundaryIndex, props.children]);
14959
+ const moreButton = /*#__PURE__*/React__default.createElement(Button$1, {
14960
+ className: cn(getLinkClasses(), '!bg-transparent aria-expanded:!bg-white/[.08]')
14961
+ }, texts.header.more);
14987
14962
  return /*#__PURE__*/React__default.createElement("nav", Object.assign({}, props, {
14988
14963
  className: className,
14989
14964
  ref: internalRef
14990
- }), /*#__PURE__*/React__default.createElement("ul", {
14991
- className: "mb-0 flex h-full w-full items-center gap-1 overflow-hidden px-1"
14992
- }, visibleChildren, /*#__PURE__*/React__default.createElement("li", {
14993
- className: cn({
14994
- invisible: boundaryIndex === undefined
14995
- })
14996
- }, /*#__PURE__*/React__default.createElement(Button$1, {
14997
- className: moreButtonClassName,
14998
- menu: menuProps => /*#__PURE__*/React__default.createElement(Menu$1, Object.assign({}, menuProps), /*#__PURE__*/React__default.createElement(Menu$1.Content, {
14999
- className: "hidden lg:block"
15000
- }, hiddenChildren.map((child, index) => {
15001
- const href = child.props.to || child.props.href;
15002
- const target = href !== null && href !== void 0 && href.startsWith('http') ? '_blank' : '_self';
15003
- // Removing className prop so that custom styling cannot be applied on Menu.Link
15004
- const {
15005
- as,
15006
- className: _,
15007
- ...otherProps
15008
- } = child.props;
15009
- if (as) {
15010
- return /*#__PURE__*/React__default.cloneElement(child, {
15011
- as: Menu$1.Link,
15012
- key: index,
15013
- target,
15014
- ...otherProps
15015
- });
15016
- }
15017
- return /*#__PURE__*/React__default.createElement(Menu$1.Link, Object.assign({
15018
- key: index,
15019
- target: target
15020
- }, otherProps));
15021
- }))),
15022
- ref: buttonRef
15023
- }, texts.header.more))), /*#__PURE__*/React__default.createElement(ChildrenWidth, {
15024
- setWidth: setChildWidths
14965
+ }), /*#__PURE__*/React__default.createElement(OverflowGroup, {
14966
+ className: "h-full flex-grow items-center gap-1 px-1",
14967
+ moreButton: moreButton
15025
14968
  }, props.children));
15026
14969
  });
15027
14970
 
15028
14971
  const SecondaryNavigation = /*#__PURE__*/React__default.forwardRef(function SecondaryNavigation(props, ref) {
15029
- const className = cn('flex h-full items-center gap-2 mb-0', props.className);
15030
- return /*#__PURE__*/React__default.createElement("ul", Object.assign({}, props, {
14972
+ const className = cn('flex h-full items-center gap-2 mb-0 flex-shrink-0', props.className);
14973
+ return /*#__PURE__*/React__default.createElement("div", Object.assign({}, props, {
15031
14974
  className: className,
15032
14975
  ref: ref
15033
14976
  }));
@@ -15623,10 +15566,9 @@ exports.BadgeIcon = BadgeIcon;
15623
15566
  exports.Banner = Banner;
15624
15567
  exports.Base = Base;
15625
15568
  exports.Button = Button$1;
15626
- exports.ButtonGroup = ButtonGroup;
15627
15569
  exports.Calendar = Calendar$1;
15628
15570
  exports.Card = Card;
15629
- exports.Checkbox = Checkbox$1;
15571
+ exports.Checkbox = Checkbox;
15630
15572
  exports.CollectionPrimitive = Collection;
15631
15573
  exports.Combobox = Combobox;
15632
15574
  exports.Datepicker = Datepicker;
@@ -15649,6 +15591,7 @@ exports.Menu = Menu$1;
15649
15591
  exports.MultiListbox = MultiListbox;
15650
15592
  exports.Navigation = Navigation;
15651
15593
  exports.Navigation2 = Navigation2;
15594
+ exports.OverflowGroup = OverflowGroup;
15652
15595
  exports.PaginatedTable = PaginatedTable;
15653
15596
  exports.Pagination = Pagination;
15654
15597
  exports.Popover = Popover;
@@ -15676,7 +15619,7 @@ exports.VisuallyHidden = VisuallyHidden;
15676
15619
  exports.WindowedTable = WindowedTable;
15677
15620
  exports.convertRowIndexPathToNumberArray = convertRowIndexPathToNumberArray;
15678
15621
  exports.defaultLocalisationTexts = defaultLocalisationTexts;
15679
- exports.findByValue = findByValue;
15622
+ exports.findByValue = findByValue$1;
15680
15623
  exports.format = format;
15681
15624
  exports.getByRowIndexPath = getByRowIndexPath;
15682
15625
  exports.getNavigationLinkClasses = getNavigationLinkClasses;