@economic/taco 1.25.3 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/components/ButtonGroup/ButtonGroup.d.ts +5 -0
  2. package/dist/esm/packages/taco/src/components/ButtonGroup/ButtonGroup.js +46 -0
  3. package/dist/esm/packages/taco/src/components/ButtonGroup/ButtonGroup.js.map +1 -0
  4. package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +1 -1
  5. package/dist/esm/packages/taco/src/components/Drawer/Drawer.js +1 -1
  6. package/dist/esm/packages/taco/src/components/Drawer/components/Content.js +2 -2
  7. package/dist/esm/packages/taco/src/components/Group/Group.js +1 -1
  8. package/dist/esm/packages/taco/src/components/Group/Group.js.map +1 -1
  9. package/dist/esm/packages/taco/src/components/Header/components/AgreementSelector.js +1 -1
  10. package/dist/esm/packages/taco/src/components/Header/components/PrimaryNavigation.js +1 -1
  11. package/dist/esm/packages/taco/src/components/Input/Input.js +1 -1
  12. package/dist/esm/packages/taco/src/components/Listbox/ScrollableList.js +1 -1
  13. package/dist/esm/packages/taco/src/components/Listbox/useListbox.js +1 -1
  14. package/dist/esm/packages/taco/src/components/Listbox/useMultiListbox.js +1 -1
  15. package/dist/esm/packages/taco/src/components/Menu/Menu.js +2 -2
  16. package/dist/esm/packages/taco/src/components/Menu/components/Content.js +1 -1
  17. package/dist/esm/packages/taco/src/components/Menu/components/Header.js +1 -1
  18. package/dist/esm/packages/taco/src/components/Menu/components/Item.js +1 -1
  19. package/dist/esm/packages/taco/src/components/Menu/components/Link.js +1 -1
  20. package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js +1 -1
  21. package/dist/esm/packages/taco/src/components/Select/useSelect.js +1 -1
  22. package/dist/esm/packages/taco/src/components/Select2/Select2.js +2 -2
  23. package/dist/esm/packages/taco/src/components/Select2/components/Edit.js +2 -2
  24. package/dist/esm/packages/taco/src/components/Select2/components/Trigger.js +1 -1
  25. package/dist/esm/packages/taco/src/components/Table/components/WindowedTable.js +1 -1
  26. package/dist/esm/packages/taco/src/components/Table/hooks/useTableKeyboardNavigation.js +1 -1
  27. package/dist/esm/packages/taco/src/components/Table2/components/filters/FiltersButton.js +1 -1
  28. package/dist/esm/packages/taco/src/components/Table2/utilities/columns.js +1 -1
  29. package/dist/esm/packages/taco/src/hooks/useIntersectionObserver.js +48 -0
  30. package/dist/esm/packages/taco/src/hooks/useIntersectionObserver.js.map +1 -0
  31. package/dist/esm/packages/taco/src/index.js +6 -4
  32. package/dist/esm/packages/taco/src/index.js.map +1 -1
  33. package/dist/hooks/useIntersectionObserver.d.ts +2 -0
  34. package/dist/index.d.ts +2 -0
  35. package/dist/taco.cjs.development.js +823 -741
  36. package/dist/taco.cjs.development.js.map +1 -1
  37. package/dist/taco.cjs.production.min.js +1 -1
  38. package/dist/taco.cjs.production.min.js.map +1 -1
  39. package/package.json +2 -2
@@ -10,6 +10,9 @@ 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');
13
16
  var ReactDayPicker = _interopDefault(require('react-day-picker'));
14
17
  var CheckboxPrimitive = require('@radix-ui/react-checkbox');
15
18
  var uuid = require('uuid');
@@ -21,10 +24,7 @@ var interactions = require('@react-aria/interactions');
21
24
  var framerMotion = require('framer-motion');
22
25
  var focus = require('@react-aria/focus');
23
26
  var ScrollAreaPrimitive = require('@radix-ui/react-scroll-area');
24
- var reactUseControllableState = require('@radix-ui/react-use-controllable-state');
25
27
  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
28
  var reactTable = require('react-table');
29
29
  var reactIntersectionObserver = require('react-intersection-observer');
30
30
  var reactWindow = require('react-window');
@@ -3998,241 +3998,732 @@ const Button$1 = /*#__PURE__*/React.forwardRef(function Button(props, ref) {
3998
3998
  }, button);
3999
3999
  });
4000
4000
 
4001
- const thisYear = /*#__PURE__*/new Date().getFullYear();
4002
- const years = [];
4003
- for (let i = thisYear - 50; i <= thisYear + 10; i += 1) {
4004
- years.push(i);
4005
- }
4006
- const Navbar = /*#__PURE__*/React.memo(({
4007
- onMonthChange,
4008
- onNextClick,
4009
- onPreviousClick,
4010
- value = new Date()
4011
- }) => {
4012
- const {
4013
- texts: {
4014
- calendar: {
4015
- actions,
4016
- months
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
4010
  }
4018
4011
  }
4019
- } = useLocalization();
4020
- const handleChange = function handleChange(event) {
4021
- const {
4022
- year,
4023
- month
4024
- } = event.target.form;
4025
- onMonthChange(new Date(year.value, month.value));
4026
- };
4027
- return /*#__PURE__*/React.createElement("div", {
4028
- className: "mb-2 flex items-center justify-between"
4029
- }, /*#__PURE__*/React.createElement("form", {
4030
- className: "inline-flex space-x-1"
4031
- }, /*#__PURE__*/React.createElement("select", {
4032
- className: "h-8 px-2",
4033
- name: "month",
4034
- onChange: handleChange,
4035
- value: value.getMonth()
4036
- }, months.map((month, i) => /*#__PURE__*/React.createElement("option", {
4037
- key: month,
4038
- value: i
4039
- }, month))), /*#__PURE__*/React.createElement("select", {
4040
- className: "h-8 px-2",
4041
- name: "year",
4042
- onChange: handleChange,
4043
- value: value.getFullYear()
4044
- }, years.map(year => /*#__PURE__*/React.createElement("option", {
4045
- key: year,
4046
- value: year
4047
- }, String(year))))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(IconButton, {
4048
- appearance: "discrete",
4049
- icon: "chevron-left",
4050
- "aria-label": actions.previousMonth,
4051
- onClick: () => onPreviousClick(),
4052
- rounded: true
4053
- }), /*#__PURE__*/React.createElement(IconButton, {
4054
- appearance: "discrete",
4055
- icon: "chevron-right",
4056
- "aria-label": actions.nextMonth,
4057
- onClick: () => onNextClick(),
4058
- rounded: true
4059
- })));
4060
- });
4061
- const Calendar$1 = /*#__PURE__*/React.forwardRef(function Calendar(props, ref) {
4012
+ }, [ref]);
4013
+ return internalRef;
4014
+ };
4015
+
4016
+ const Group = /*#__PURE__*/React.forwardRef(function Group(props, ref) {
4062
4017
  const {
4063
- onChange: handleChange,
4064
- value,
4065
- disabledDays,
4018
+ as: Tag = 'span',
4019
+ orientation = 'horizontal',
4066
4020
  ...otherProps
4067
4021
  } = props;
4068
- const {
4069
- locale,
4070
- texts
4071
- } = useLocalization();
4072
- const [visibleMonth, setVisibleMonth] = React.useState(value !== null && value !== void 0 ? value : new Date());
4073
- React.useEffect(() => {
4074
- if (visibleMonth !== value) {
4075
- setVisibleMonth(value !== null && value !== void 0 ? value : new Date());
4076
- }
4077
- }, [value]);
4078
- const handleDayClick = (date, modifiers, event) => {
4079
- if (modifiers.outside || modifiers.disabled) {
4080
- return;
4081
- }
4082
- handleChange(date, event);
4083
- };
4084
- const handleCalendarClickToday = () => {
4085
- const today = new Date();
4086
- // set to midday to avoid UTC offset causing dates to be mismatched server side
4087
- today.setHours(12);
4088
- today.setMinutes(0);
4089
- today.setSeconds(0);
4090
- handleChange(today);
4091
- };
4092
- const className = cn('flex bg-white text-xs p-4', otherProps.className);
4093
- return /*#__PURE__*/React.createElement("div", {
4094
- "data-taco": "calendar"
4095
- }, /*#__PURE__*/React.createElement(ReactDayPicker, Object.assign({}, otherProps, {
4096
- className: className,
4097
- month: visibleMonth,
4098
- selectedDays: value,
4099
- locale: locale.substring(0, 2),
4100
- firstDayOfWeek: 1,
4101
- months: texts.calendar.months,
4102
- weekdaysShort: texts.calendar.weekdaysShort,
4103
- navbarElement: navProps => /*#__PURE__*/React.createElement(Navbar, Object.assign({}, navProps, {
4104
- onMonthChange: setVisibleMonth,
4105
- value: visibleMonth
4106
- })),
4107
- onDayClick: handleDayClick,
4108
- onMonthChange: setVisibleMonth,
4109
- onTodayButtonClick: handleCalendarClickToday,
4110
- captionElement: () => null,
4111
- todayButton: texts.calendar.actions.today,
4112
- numberOfMonths: 1,
4113
- ref: ref,
4114
- disabledDays: disabledDays
4115
- })));
4116
- });
4117
-
4118
- const Content$2 = /*#__PURE__*/React.forwardRef(function CardContent(externalProps, ref) {
4119
- const {
4120
- noPadding,
4121
- ...props
4122
- } = externalProps;
4123
- const className = cn('flex-grow overflow-auto', {
4124
- 'mx-4 mb-4': !noPadding
4022
+ const className = cn('flex gap-2', {
4023
+ 'flex-col ': orientation === 'vertical'
4125
4024
  }, props.className);
4126
- return /*#__PURE__*/React.createElement("div", Object.assign({}, props, {
4025
+ return /*#__PURE__*/React.createElement(Tag, Object.assign({}, otherProps, {
4127
4026
  className: className,
4027
+ "data-taco": "group",
4128
4028
  ref: ref
4129
4029
  }));
4130
4030
  });
4131
- const Card = /*#__PURE__*/React.forwardRef(function Card(props, ref) {
4132
- const {
4133
- title,
4134
- menu,
4135
- children
4136
- } = props;
4137
- 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);
4138
- return /*#__PURE__*/React.createElement("div", {
4139
- className: className,
4140
- "data-taco": "card",
4141
- ref: ref
4142
- }, /*#__PURE__*/React.createElement("div", {
4143
- className: "mx-4 mt-4 mb-2 flex"
4144
- }, title && /*#__PURE__*/React.createElement("h4", {
4145
- className: "mb-0 flex-grow text-left"
4146
- }, title), menu ? /*#__PURE__*/React.createElement(IconButton, {
4147
- icon: "ellipsis-horizontal",
4148
- appearance: "discrete",
4149
- menu: menu,
4150
- className: "-mt-[4px]"
4151
- }) : null), children);
4152
- });
4153
- Card.Content = Content$2;
4154
4031
 
4155
- // React 18 has this built-in, when we upgrade this hook should be removed and the uuid dependency should be removed
4156
- const useId = nativeId => {
4157
- return React__default.useMemo(() => nativeId !== null && nativeId !== void 0 ? nativeId : uuid.v4(), []);
4032
+ const MenuContext = /*#__PURE__*/React.createContext(undefined);
4033
+ const useCurrentMenu = () => {
4034
+ return React.useContext(MenuContext);
4158
4035
  };
4159
4036
 
4160
- const Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(props, ref) {
4037
+ const Content$2 = /*#__PURE__*/React.forwardRef(function MenuContent(props, ref) {
4038
+ const internalRef = useMergedRef(ref);
4039
+ const menu = useCurrentMenu();
4161
4040
  const {
4162
- checked,
4163
- highlighted,
4164
- indeterminate,
4165
- invalid,
4166
- label,
4167
- onChange,
4041
+ align = 'start',
4042
+ children,
4043
+ placement: side,
4168
4044
  ...otherProps
4169
4045
  } = props;
4170
- const id = useId(props.id);
4171
- const className = cn('bg-white h-5 w-5 border rounded text-sm flex-shrink-0 mt-[0.1rem] focus:yt-focus',
4172
- //hover:shadow-[0_0_0_1px_rgba(235,235,235,1)]
4173
- {
4174
- 'border-grey-300 text-blue-500 hover:text-blue-300 focus:border-blue-500 focus:hover:border-blue-300': !props.disabled && !invalid,
4175
- 'border-grey-200 text-blue-300 cursor-not-allowed': props.disabled,
4176
- 'bg-[rgba(255,255,0,0.2)] disabled:bg-[rgba(255,255,0,0.075)]': highlighted,
4177
- '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,
4178
- 'self-start': !!label
4179
- }, props.className);
4180
- let handleChange;
4181
- if (onChange) {
4182
- handleChange = checked => onChange(checked === 'indeterminate' ? false : checked);
4183
- }
4184
- let labelledByProps = null;
4185
- if (label) {
4186
- labelledByProps = {
4187
- 'aria-labelledby': `${id}-label`,
4188
- id
4189
- };
4190
- }
4191
- // the enter keyboard shortcut isn't supported by default, but we want it
4192
- const handleKeyDown = event => {
4193
- if (event.key === 'Enter') {
4194
- event.currentTarget.click();
4195
- }
4196
- };
4197
- const element = /*#__PURE__*/React.createElement(CheckboxPrimitive.Root, Object.assign({}, otherProps, labelledByProps, {
4198
- "data-taco": "checkbox",
4199
- checked: indeterminate ? 'indeterminate' : checked,
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,
4200
4049
  className: className,
4201
- onCheckedChange: handleChange,
4202
- onKeyDown: handleKeyDown,
4203
- ref: ref
4204
- }), /*#__PURE__*/React.createElement(CheckboxPrimitive.Indicator, {
4205
- className: "flex h-full w-full"
4206
- }, /*#__PURE__*/React.createElement(Icon, {
4207
- name: indeterminate ? 'line' : 'tick',
4208
- className: "!h-full !w-full"
4209
- })));
4210
- if (label) {
4211
- const labelContainerClassName = cn('flex items-center cursor-pointer gap-2', {
4212
- 'cursor-not-allowed text-grey-300': props.disabled
4213
- });
4214
- return /*#__PURE__*/React.createElement("span", {
4215
- className: labelContainerClassName
4216
- }, element, /*#__PURE__*/React.createElement("label", {
4217
- htmlFor: id,
4218
- id: `${id}-label`
4219
- }, label));
4220
- }
4221
- return element;
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));
4222
4058
  });
4223
- Checkbox.displayName = 'Checkbox';
4224
4059
 
4225
- const getInputClasses = props => {
4226
- const disabled = props.disabled || !!props['aria-disabled'];
4227
- const readOnly = props.readOnly || !!props['aria-readonly'];
4228
- const invalid = props.invalid || !!props['aria-invalid'];
4229
- return cn('peer bg-white 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)]', {
4230
- // default
4231
- 'border-grey-300 focus:border-blue-300 focus:yt-focus': !invalid,
4232
- 'hover:shadow-[0_0_0.1rem_theme(colors.grey.500)] active:border-blue-700': !invalid && !disabled,
4233
- // disabled
4234
- 'border-grey-200 text-opacity-25 cursor-not-allowed placeholder:text-grey-700': disabled,
4235
- // highlighted
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
+ }));
4090
+ };
4091
+ const Item$1 = /*#__PURE__*/React.forwardRef(function MenuItem(props, ref) {
4092
+ var _props$disabled;
4093
+ const {
4094
+ dialog,
4095
+ icon,
4096
+ onClick,
4097
+ shortcut,
4098
+ ...otherProps
4099
+ } = 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();
4113
+ };
4114
+ }
4115
+ const handleSelect = event => {
4116
+ if (onClick) {
4117
+ onClick(event);
4118
+ }
4119
+ if (props['aria-haspopup'] || typeof dialog === 'function') {
4120
+ event.preventDefault();
4121
+ }
4122
+ };
4123
+ let button = /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Item, Object.assign({}, otherProps, {
4124
+ className: className,
4125
+ onClick: handleClick,
4126
+ onSelect: handleSelect,
4127
+ 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
4135
+ });
4136
+ }
4137
+ return button;
4138
+ });
4139
+
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
4152
+ });
4153
+ const handleClick = event => {
4154
+ onClick === null || onClick === void 0 ? void 0 : onClick(event);
4155
+ menu === null || menu === void 0 ? void 0 : menu.close();
4156
+ };
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
+ });
4169
+
4170
+ const Trigger$2 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref) {
4171
+ const menu = useCurrentMenu();
4172
+ const internalRef = useMergedRef(ref);
4173
+ React.useEffect(() => {
4174
+ if (internalRef.current) {
4175
+ menu === null || menu === void 0 ? void 0 : menu.setMinWidth(internalRef.current.getBoundingClientRect().width);
4176
+ }
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
+ });
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
+ });
4208
+
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 => {
4244
+ const {
4245
+ children,
4246
+ defaultValue,
4247
+ disabled,
4248
+ invalid,
4249
+ onChange,
4250
+ orientation = 'vertical',
4251
+ value,
4252
+ ...otherProps
4253
+ } = 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);
4259
+ }
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
+ };
4278
+ }
4279
+ return {
4280
+ context,
4281
+ props: {
4282
+ ...otherProps,
4283
+ ...valueProps,
4284
+ children,
4285
+ disabled,
4286
+ orientation
4287
+ }
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, {
4302
+ className: className,
4303
+ "data-taco": "radio-group",
4304
+ ref: ref
4305
+ })));
4306
+ });
4307
+ RadioGroup.Item = RadioGroupItem;
4308
+
4309
+ const RadioItem = props => {
4310
+ const context = React.useContext(MenuRadioGroupContext);
4311
+ const {
4312
+ children,
4313
+ value,
4314
+ ...otherProps
4315
+ } = 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) {
4336
+ 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,
4345
+ ref: ref
4346
+ })));
4347
+ });
4348
+ RadioGroup$1.Item = RadioItem;
4349
+
4350
+ const Separator = () => {
4351
+ return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Separator, {
4352
+ className: "bg-grey-300 my-1 h-px"
4353
+ });
4354
+ };
4355
+
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
+ });
4367
+
4368
+ const Menu$1 = /*#__PURE__*/React.forwardRef(function Menu(externalProps, ref) {
4369
+ 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;
4435
+ 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
+ });
4448
+ }
4449
+ return () => {
4450
+ observer.disconnect();
4451
+ };
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);
4490
+ });
4491
+
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
+ }
4509
+ }
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) {
4553
+ const {
4554
+ onChange: handleChange,
4555
+ value,
4556
+ disabledDays,
4557
+ ...otherProps
4558
+ } = props;
4559
+ const {
4560
+ locale,
4561
+ texts
4562
+ } = useLocalization();
4563
+ const [visibleMonth, setVisibleMonth] = React.useState(value !== null && value !== void 0 ? value : new Date());
4564
+ React.useEffect(() => {
4565
+ if (visibleMonth !== value) {
4566
+ setVisibleMonth(value !== null && value !== void 0 ? value : new Date());
4567
+ }
4568
+ }, [value]);
4569
+ const handleDayClick = (date, modifiers, event) => {
4570
+ if (modifiers.outside || modifiers.disabled) {
4571
+ return;
4572
+ }
4573
+ handleChange(date, event);
4574
+ };
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 bg-white 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
+ // default
4722
+ 'border-grey-300 focus:border-blue-300 focus:yt-focus': !invalid,
4723
+ 'hover:shadow-[0_0_0.1rem_theme(colors.grey.500)] active:border-blue-700': !invalid && !disabled,
4724
+ // disabled
4725
+ 'border-grey-200 text-opacity-25 cursor-not-allowed placeholder:text-grey-700': disabled,
4726
+ // highlighted
4236
4727
  'bg-[rgba(255,255,0,0.075)]': props.highlighted && disabled,
4237
4728
  'bg-[rgba(255,255,0,0.2)]': props.highlighted && !disabled,
4238
4729
  // invalid
@@ -4295,21 +4786,6 @@ const useBoundingClientRectListener = (ref, dependencies) => {
4295
4786
  return dimensions;
4296
4787
  };
4297
4788
 
4298
- // merges an external ref (optional) with an internal ref (required)
4299
- const useMergedRef = ref => {
4300
- const internalRef = React__default.useRef(null);
4301
- React__default.useEffect(() => {
4302
- if (ref) {
4303
- if (typeof ref === 'function') {
4304
- ref(internalRef.current);
4305
- } else {
4306
- ref.current = internalRef.current;
4307
- }
4308
- }
4309
- }, [ref]);
4310
- return internalRef;
4311
- };
4312
-
4313
4789
  const validSetSelectionRangeTypes = ['text', 'search', 'url', 'tel', 'password'];
4314
4790
  const InputWithoutDeprecatedFeatures = /*#__PURE__*/React.forwardRef(function InputWithoutDeprecatedFeatures(props, ref) {
4315
4791
  const {
@@ -4661,7 +5137,7 @@ const ScrollableList = /*#__PURE__*/React.forwardRef(function ScrollableList(pro
4661
5137
  ...optionProps
4662
5138
  }) => /*#__PURE__*/React.createElement("li", Object.assign({}, optionProps), icon, /*#__PURE__*/React.createElement("span", {
4663
5139
  className: "flex-grow truncate text-left"
4664
- }, children), multiselect && /*#__PURE__*/React.createElement(Checkbox
5140
+ }, children), multiselect && /*#__PURE__*/React.createElement(Checkbox$1
4665
5141
  // In multiselect variant, this checkbox only acts as visual representation of item being selected,
4666
5142
  // so need to be taken out of screen reader scope.
4667
5143
  , {
@@ -4727,7 +5203,7 @@ const getSelectedIndexesFromValue = (data, value) => {
4727
5203
  if (typeof value !== 'string') return [];
4728
5204
  return value.split(',').map(v => data.findIndex(o => String(o.value) === v)).filter(v => v !== -1);
4729
5205
  };
4730
- const findByValue = (data, value) => {
5206
+ const findByValue$1 = (data, value) => {
4731
5207
  return data.find(option => getValue(option.value) === getValue(value));
4732
5208
  };
4733
5209
  const searchForString = (child, value, strategy = 'includes') => {
@@ -4938,7 +5414,7 @@ const useCombobox = ({
4938
5414
  return;
4939
5415
  }
4940
5416
  if (onChange && event.target.value !== value) {
4941
- const item = findByValue(flattenedData, event.target.value);
5417
+ const item = findByValue$1(flattenedData, event.target.value);
4942
5418
  event.detail = sanitizeItem(item);
4943
5419
  const parents = getOptionParents(flattenedData, item === null || item === void 0 ? void 0 : item.path);
4944
5420
  if (parents !== null && parents.length > 0) {
@@ -5323,7 +5799,7 @@ const PopoverContext = /*#__PURE__*/React.createContext({
5323
5799
  props: {},
5324
5800
  ref: null
5325
5801
  });
5326
- const Trigger$2 = /*#__PURE__*/React.forwardRef(function PopoverAnchor(props, externalRef) {
5802
+ const Trigger$3 = /*#__PURE__*/React.forwardRef(function PopoverAnchor(props, externalRef) {
5327
5803
  var _props$children;
5328
5804
  const {
5329
5805
  ref: parentRef,
@@ -5352,7 +5828,7 @@ const RenderPropWrapper = /*#__PURE__*/React.forwardRef(function RenderPropWrapp
5352
5828
  ref
5353
5829
  });
5354
5830
  });
5355
- const Content$3 = /*#__PURE__*/React.forwardRef(function PopoverContent(props, ref) {
5831
+ const Content$4 = /*#__PURE__*/React.forwardRef(function PopoverContent(props, ref) {
5356
5832
  const {
5357
5833
  placement: side,
5358
5834
  ...popoverContentProps
@@ -5401,10 +5877,10 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(props, ref) {
5401
5877
  modal: modal,
5402
5878
  open: open,
5403
5879
  onOpenChange: onChange
5404
- }, trigger && /*#__PURE__*/React.createElement(Trigger$2, null, trigger), children));
5880
+ }, trigger && /*#__PURE__*/React.createElement(Trigger$3, null, trigger), children));
5405
5881
  });
5406
- Popover.Trigger = Trigger$2;
5407
- Popover.Content = Content$3;
5882
+ Popover.Trigger = Trigger$3;
5883
+ Popover.Content = Content$4;
5408
5884
  Popover.Close = Close$1;
5409
5885
  Popover.Portal = PopoverPrimitive.Portal;
5410
5886
 
@@ -5494,7 +5970,7 @@ const useCurrentDialog = () => {
5494
5970
  return React.useContext(DialogContext);
5495
5971
  };
5496
5972
 
5497
- const Trigger$3 = /*#__PURE__*/React.forwardRef(function DialogTrigger(props, externalRef) {
5973
+ const Trigger$4 = /*#__PURE__*/React.forwardRef(function DialogTrigger(props, externalRef) {
5498
5974
  const {
5499
5975
  ref: parentRef,
5500
5976
  props: parentProps
@@ -5592,7 +6068,7 @@ const RenderPropWrapper$1 = /*#__PURE__*/React.forwardRef(function RenderPropWra
5592
6068
  ...renderProps
5593
6069
  });
5594
6070
  });
5595
- const Content$4 = /*#__PURE__*/React.forwardRef(function DialogContent(props, ref) {
6071
+ const Content$5 = /*#__PURE__*/React.forwardRef(function DialogContent(props, ref) {
5596
6072
  const dialog = useCurrentDialog();
5597
6073
  const internalRef = useMergedRef(ref);
5598
6074
  const {
@@ -5759,37 +6235,16 @@ const Dialog = /*#__PURE__*/React.forwardRef(function Dialog(props, ref) {
5759
6235
  defaultOpen: defaultOpen,
5760
6236
  open: open,
5761
6237
  onOpenChange: onChange
5762
- }, trigger && /*#__PURE__*/React.createElement(Trigger$3, null, trigger), children));
6238
+ }, trigger && /*#__PURE__*/React.createElement(Trigger$4, null, trigger), children));
5763
6239
  });
5764
- Dialog.Trigger = Trigger$3;
5765
- Dialog.Content = Content$4;
6240
+ Dialog.Trigger = Trigger$4;
6241
+ Dialog.Content = Content$5;
5766
6242
  Dialog.Title = Title$1;
5767
6243
  Dialog.Footer = Footer$1;
5768
6244
  Dialog.Extra = Extra;
5769
6245
  Dialog.Drawer = DialogDrawer;
5770
6246
  Dialog.Close = Close$2;
5771
6247
 
5772
- const Group = /*#__PURE__*/React.forwardRef(function Group(props, ref) {
5773
- const {
5774
- as: Tag = 'span',
5775
- orientation = 'horizontal',
5776
- ...otherProps
5777
- } = props;
5778
- const className = cn('flex ', 'gap-2', {
5779
- 'flex-col ': orientation === 'vertical'
5780
- }, props.className);
5781
- return /*#__PURE__*/React.createElement(Tag, Object.assign({}, otherProps, {
5782
- className: className,
5783
- "data-taco": "group",
5784
- ref: ref
5785
- }));
5786
- });
5787
-
5788
- const MenuContext = /*#__PURE__*/React.createContext(undefined);
5789
- const useCurrentMenu = () => {
5790
- return React.useContext(MenuContext);
5791
- };
5792
-
5793
6248
  /* eslint-disable @typescript-eslint/no-empty-function */
5794
6249
  const DrawerContext = /*#__PURE__*/React.createContext({
5795
6250
  closeOnEscape: true,
@@ -6143,7 +6598,7 @@ const DrawerContent = /*#__PURE__*/React__default.forwardRef(function Content(pr
6143
6598
  ref: ref
6144
6599
  }, content);
6145
6600
  });
6146
- const Content$5 = /*#__PURE__*/React__default.forwardRef(function Content(props, externalRef) {
6601
+ const Content$6 = /*#__PURE__*/React__default.forwardRef(function Content(props, externalRef) {
6147
6602
  const {
6148
6603
  children
6149
6604
  } = props;
@@ -6152,7 +6607,7 @@ const Content$5 = /*#__PURE__*/React__default.forwardRef(function Content(props,
6152
6607
  }), children));
6153
6608
  });
6154
6609
 
6155
- const Trigger$4 = /*#__PURE__*/React.forwardRef(function DrawerTrigger(props, ref) {
6610
+ const Trigger$5 = /*#__PURE__*/React.forwardRef(function DrawerTrigger(props, ref) {
6156
6611
  return /*#__PURE__*/React.createElement(DialogPrimitive.Trigger, Object.assign({}, props, {
6157
6612
  ref: ref,
6158
6613
  asChild: true
@@ -6240,10 +6695,10 @@ const Drawer = /*#__PURE__*/React.forwardRef(function Drawer(props, ref) {
6240
6695
  modal: variant === 'overlay' ? true : false,
6241
6696
  open: open,
6242
6697
  onOpenChange: setOpen
6243
- }, trigger && /*#__PURE__*/React.createElement(Trigger$4, null, trigger), children));
6698
+ }, trigger && /*#__PURE__*/React.createElement(Trigger$5, null, trigger), children));
6244
6699
  });
6245
- Drawer.Trigger = Trigger$4;
6246
- Drawer.Content = Content$5;
6700
+ Drawer.Trigger = Trigger$5;
6701
+ Drawer.Content = Content$6;
6247
6702
  Drawer.InnerContent = InnerContent;
6248
6703
  Drawer.Title = Title$2;
6249
6704
  Drawer.Footer = Footer$2;
@@ -6321,7 +6776,7 @@ const Title$3 = /*#__PURE__*/React.forwardRef(function DialogTitle(props, ref) {
6321
6776
  ref: ref
6322
6777
  }));
6323
6778
  });
6324
- const Content$6 = /*#__PURE__*/React.forwardRef(function HangerContent(props, ref) {
6779
+ const Content$7 = /*#__PURE__*/React.forwardRef(function HangerContent(props, ref) {
6325
6780
  const {
6326
6781
  placement: side
6327
6782
  } = props;
@@ -6380,7 +6835,7 @@ const Hanger = /*#__PURE__*/React.forwardRef(function Hanger(props, ref) {
6380
6835
  }, anchor && /*#__PURE__*/React.createElement(Anchor, null, anchor), children));
6381
6836
  });
6382
6837
  Hanger.Anchor = Anchor;
6383
- Hanger.Content = Content$6;
6838
+ Hanger.Content = Content$7;
6384
6839
  Hanger.Title = Title$3;
6385
6840
 
6386
6841
  const UnstyledArrow$1 = /*#__PURE__*/React.forwardRef(function HoverCardArrow(props, ref) {
@@ -6405,13 +6860,13 @@ const UnstyledArrow$1 = /*#__PURE__*/React.forwardRef(function HoverCardArrow(pr
6405
6860
  })));
6406
6861
  });
6407
6862
 
6408
- const Trigger$5 = /*#__PURE__*/React.forwardRef(function HoverCardTrigger(props, ref) {
6863
+ const Trigger$6 = /*#__PURE__*/React.forwardRef(function HoverCardTrigger(props, ref) {
6409
6864
  return /*#__PURE__*/React.createElement(HoverCardPrimitive.Trigger, Object.assign({}, props, {
6410
6865
  asChild: true,
6411
6866
  ref: ref
6412
6867
  }));
6413
6868
  });
6414
- const Content$7 = /*#__PURE__*/React.forwardRef(function HoverCardContent(props, ref) {
6869
+ const Content$8 = /*#__PURE__*/React.forwardRef(function HoverCardContent(props, ref) {
6415
6870
  const {
6416
6871
  placement: side
6417
6872
  } = props;
@@ -6431,8 +6886,8 @@ const HoverCard = props => {
6431
6886
  openDelay: 300
6432
6887
  }));
6433
6888
  };
6434
- HoverCard.Trigger = Trigger$5;
6435
- HoverCard.Content = Content$7;
6889
+ HoverCard.Trigger = Trigger$6;
6890
+ HoverCard.Content = Content$8;
6436
6891
 
6437
6892
  const SearchInput = /*#__PURE__*/React.forwardRef(function SearchInput({
6438
6893
  onSearch,
@@ -6632,7 +7087,7 @@ const useListbox = ({
6632
7087
  event.persist();
6633
7088
  if (onChange) {
6634
7089
  var _item$path$split, _item$path;
6635
- const item = findByValue(data, event.target.value);
7090
+ const item = findByValue$1(data, event.target.value);
6636
7091
  event.detail = sanitizeItem(item);
6637
7092
  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 : [];
6638
7093
  if (indexes.length > 1) {
@@ -6801,469 +7256,94 @@ const useMultiListbox = ({
6801
7256
  setSelectedIndexes(getSelectedIndexesFromValue(data, event.target.value));
6802
7257
  if (onChange) {
6803
7258
  const detail = [];
6804
- const valuesArray = event.target.value.split(',');
6805
- valuesArray.forEach(val => {
6806
- const item = findByValue(data, val);
6807
- if (item) {
6808
- detail.push(item);
6809
- }
6810
- });
6811
- event.detail = detail;
6812
- onChange(event);
6813
- }
6814
- };
6815
- const list = {
6816
- ...otherProps,
6817
- 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),
6818
- 'aria-multiselectable': true,
6819
- data,
6820
- disabled,
6821
- id,
6822
- onChange: () => null,
6823
- onClick: handleListboxClick,
6824
- onFocus: handleListboxFocus,
6825
- onKeyDown: handleListboxKeyDown,
6826
- scrollOnFocus: false,
6827
- tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,
6828
- value: currentIndex,
6829
- selectedIndexes,
6830
- multiselect: true,
6831
- allOptionsSelected
6832
- };
6833
- const input = {
6834
- name,
6835
- onChange: handleInputChange,
6836
- ref: inputRef,
6837
- tabIndex: -1,
6838
- value: value !== null && value !== void 0 ? value : ''
6839
- };
6840
- return {
6841
- list,
6842
- input
6843
- };
6844
- };
6845
-
6846
- const Listbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
6847
- const {
6848
- className: externalClassName,
6849
- ...otherProps
6850
- } = props;
6851
- const {
6852
- list,
6853
- input
6854
- } = useListbox(otherProps, ref);
6855
- const className = cn('bg-white inline-flex relative w-full', externalClassName);
6856
- return /*#__PURE__*/React.createElement("span", {
6857
- "data-taco": "listbox",
6858
- className: className
6859
- }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
6860
- style: {
6861
- ...list.style,
6862
- maxHeight: 'calc(12rem + 2px)' /* (6 * option height) + listbox border */
6863
- }
6864
- })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
6865
- className: "hidden",
6866
- type: "text"
6867
- })));
6868
- });
6869
- const MultiListbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
6870
- const {
6871
- className: externalClassName,
6872
- ...otherProps
6873
- } = props;
6874
- const {
6875
- list,
6876
- input
6877
- } = useMultiListbox(otherProps, ref);
6878
- const className = cn('bg-white inline-flex relative w-full', externalClassName);
6879
- return /*#__PURE__*/React.createElement("span", {
6880
- "data-taco": "listbox",
6881
- className: className
6882
- }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
6883
- style: {
6884
- ...list.style,
6885
- maxHeight: 'calc(12rem + 2px + 2px)' /* (6 * option height) + listbox border + ALL_OPTIONS bottom border */
6886
- }
6887
- })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
6888
- className: "hidden",
6889
- type: "text"
6890
- })));
6891
- });
6892
-
6893
- const Content$8 = /*#__PURE__*/React.forwardRef(function MenuContent(props, ref) {
6894
- const internalRef = useMergedRef(ref);
6895
- const menu = useCurrentMenu();
6896
- const {
6897
- align = 'start',
6898
- children,
6899
- placement: side,
6900
- ...otherProps
6901
- } = props;
6902
- const className = cn('border border-transparent rounded block outline-none p-1 yt-shadow wcag-white', props.className);
6903
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Portal, null, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Content, Object.assign({}, otherProps, {
6904
- align: align,
6905
- className: className,
6906
- "data-taco": "menu",
6907
- side: side,
6908
- sideOffset: 3,
6909
- style: {
6910
- minWidth: menu === null || menu === void 0 ? void 0 : menu.minWidth
6911
- },
6912
- ref: internalRef
6913
- }), children));
6914
- });
6915
-
6916
- const Icon$1 = ({
6917
- name
6918
- }) => /*#__PURE__*/React.createElement("span", {
6919
- className: "absolute left-0 ml-1"
6920
- }, /*#__PURE__*/React.createElement(Icon, {
6921
- className: "-ml-px -mt-px !h-5 !w-5",
6922
- name: name
6923
- }));
6924
- const useItemStyling = ({
6925
- disabled,
6926
- indented,
6927
- className
6928
- }) => {
6929
- const menu = useCurrentMenu();
6930
- React.useEffect(() => {
6931
- if (indented && !(menu !== null && menu !== void 0 && menu.indented)) {
6932
- menu === null || menu === void 0 ? void 0 : menu.registerIndentation();
6933
- }
6934
- }, [indented]);
6935
- return cn('flex items-center justify-start h-8 pr-1.5 relative rounded w-full focus:outline-none group', {
6936
- 'pl-7': menu === null || menu === void 0 ? void 0 : menu.indented,
6937
- 'pl-1.5': !(menu !== null && menu !== void 0 && menu.indented),
6938
- 'cursor-pointer text-black hover:wcag-grey-200 data-[highlighted]:wcag-grey-200': !disabled,
6939
- 'cursor-not-allowed hover:bg-white text-grey-300': disabled
6940
- }, className);
6941
- };
6942
- const Shortcut = props => {
6943
- return /*#__PURE__*/React.createElement("span", Object.assign({}, props, {
6944
- className: "text-grey-700 ml-auto pl-3"
6945
- }));
6946
- };
6947
- const Item$1 = /*#__PURE__*/React.forwardRef(function MenuItem(props, ref) {
6948
- var _props$disabled;
6949
- const {
6950
- dialog,
6951
- icon,
6952
- onClick,
6953
- shortcut,
6954
- ...otherProps
6955
- } = props;
6956
- const menu = useCurrentMenu();
6957
- const className = useItemStyling({
6958
- disabled: props.disabled,
6959
- indented: !!icon,
6960
- className: props.className
6961
- });
6962
- const disabled = (_props$disabled = props.disabled) !== null && _props$disabled !== void 0 ? _props$disabled : props['aria-disabled'];
6963
- let handleClick;
6964
- // radix has a bug that does not disable clicks when disabled is set on items
6965
- if (disabled) {
6966
- handleClick = event => {
6967
- event.preventDefault();
6968
- event.stopPropagation();
6969
- };
6970
- }
6971
- const handleSelect = event => {
6972
- if (onClick) {
6973
- onClick(event);
6974
- }
6975
- if (props['aria-haspopup'] || typeof dialog === 'function') {
6976
- event.preventDefault();
6977
- }
6978
- };
6979
- let button = /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Item, Object.assign({}, otherProps, {
6980
- className: className,
6981
- onClick: handleClick,
6982
- onSelect: handleSelect,
6983
- ref: ref
6984
- }), icon && /*#__PURE__*/React.createElement(Icon$1, {
6985
- name: icon
6986
- }), props.children, shortcut && /*#__PURE__*/React.createElement(Shortcut, null, shortcut));
6987
- if (typeof dialog === 'function') {
6988
- button = dialog({
6989
- trigger: button,
6990
- onClose: menu === null || menu === void 0 ? void 0 : menu.close
6991
- });
6992
- }
6993
- return button;
6994
- });
6995
-
6996
- const Link = /*#__PURE__*/React.forwardRef(function MenuLink(props, ref) {
6997
- const {
6998
- href,
6999
- icon,
7000
- onClick,
7001
- ...otherProps
7002
- } = props;
7003
- const menu = useCurrentMenu();
7004
- const className = useItemStyling({
7005
- disabled: props.disabled,
7006
- indented: !!icon,
7007
- className: props.className
7008
- });
7009
- const handleClick = event => {
7010
- onClick === null || onClick === void 0 ? void 0 : onClick(event);
7011
- menu === null || menu === void 0 ? void 0 : menu.close();
7012
- };
7013
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Item, Object.assign({}, otherProps, {
7014
- asChild: true,
7015
- className: className,
7016
- ref: ref,
7017
- onClick: handleClick
7018
- }), /*#__PURE__*/React.createElement("a", {
7019
- href: href,
7020
- target: "_blank"
7021
- }, icon && /*#__PURE__*/React.createElement(Icon$1, {
7022
- name: icon
7023
- }), props.children));
7024
- });
7025
-
7026
- const Trigger$6 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref) {
7027
- const menu = useCurrentMenu();
7028
- const internalRef = useMergedRef(ref);
7029
- React.useEffect(() => {
7030
- if (internalRef.current) {
7031
- menu === null || menu === void 0 ? void 0 : menu.setMinWidth(internalRef.current.getBoundingClientRect().width);
7032
- }
7033
- }, [internalRef]);
7034
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Trigger, Object.assign({}, props, {
7035
- asChild: true,
7036
- ref: internalRef
7037
- }));
7038
- });
7039
-
7040
- const Checkbox$1 = /*#__PURE__*/React.forwardRef(function MenuCheckboxItem(props, ref) {
7041
- const {
7042
- checked,
7043
- children,
7044
- onChange,
7045
- ...otherProps
7046
- } = props;
7047
- const className = useItemStyling({
7048
- disabled: props.disabled,
7049
- indented: true,
7050
- className: props.className
7051
- });
7052
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.CheckboxItem, Object.assign({}, otherProps, {
7053
- checked: checked,
7054
- className: className,
7055
- onCheckedChange: onChange,
7056
- ref: ref
7057
- }), /*#__PURE__*/React.createElement(DropdownMenuPrimitive.ItemIndicator, {
7058
- className: "absolute left-0 ml-1.5"
7059
- }, /*#__PURE__*/React.createElement(Icon, {
7060
- name: "tick",
7061
- className: "-ml-px !h-4 !w-4"
7062
- })), children);
7063
- });
7259
+ const valuesArray = event.target.value.split(',');
7260
+ valuesArray.forEach(val => {
7261
+ const item = findByValue$1(data, val);
7262
+ if (item) {
7263
+ detail.push(item);
7264
+ }
7265
+ });
7266
+ event.detail = detail;
7267
+ onChange(event);
7268
+ }
7269
+ };
7270
+ const list = {
7271
+ ...otherProps,
7272
+ 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),
7273
+ 'aria-multiselectable': true,
7274
+ data,
7275
+ disabled,
7276
+ id,
7277
+ onChange: () => null,
7278
+ onClick: handleListboxClick,
7279
+ onFocus: handleListboxFocus,
7280
+ onKeyDown: handleListboxKeyDown,
7281
+ scrollOnFocus: false,
7282
+ tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,
7283
+ value: currentIndex,
7284
+ selectedIndexes,
7285
+ multiselect: true,
7286
+ allOptionsSelected
7287
+ };
7288
+ const input = {
7289
+ name,
7290
+ onChange: handleInputChange,
7291
+ ref: inputRef,
7292
+ tabIndex: -1,
7293
+ value: value !== null && value !== void 0 ? value : ''
7294
+ };
7295
+ return {
7296
+ list,
7297
+ input
7298
+ };
7299
+ };
7064
7300
 
7065
- const getRadioGroupItemValueAsString = value => String(value !== null && value !== void 0 ? value : '');
7066
- const findByValue$1 = (values, valueAsString) => values.find(value => getRadioGroupItemValueAsString(value) === valueAsString);
7067
- const RadioGroupContext = /*#__PURE__*/React.createContext({
7068
- disabled: false,
7069
- invalid: false
7070
- });
7071
- const RadioGroupItem = /*#__PURE__*/React.forwardRef(function RadioGroupItem(props, ref) {
7072
- const context = React.useContext(RadioGroupContext);
7301
+ const Listbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
7073
7302
  const {
7074
- children,
7075
- value,
7303
+ className: externalClassName,
7076
7304
  ...otherProps
7077
7305
  } = props;
7078
- const isDisabled = context.disabled || props.disabled;
7079
- 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', {
7080
- '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,
7081
- 'border-grey-200 cursor-not-allowed aria-checked:bg-blue-300 aria-checked:border-blue-300 ': isDisabled,
7082
- '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
7083
- });
7084
- const labelClassName = cn('flex items-center gap-2', {
7085
- 'cursor-pointer': !isDisabled,
7086
- 'cursor-not-allowed text-grey-300': isDisabled
7087
- }, props.className);
7088
- return /*#__PURE__*/React.createElement("label", {
7089
- className: labelClassName
7090
- }, /*#__PURE__*/React.createElement(RadioGroupPrimitive.Item, Object.assign({}, otherProps, {
7091
- className: className,
7092
- disabled: isDisabled,
7093
- ref: ref,
7094
- value: getRadioGroupItemValueAsString(value)
7095
- }), /*#__PURE__*/React.createElement(RadioGroupPrimitive.Indicator, {
7096
- className: "h-2 w-2 rounded-full bg-white"
7097
- })), children);
7098
- });
7099
- const useRadioGroup = props => {
7100
7306
  const {
7101
- children,
7102
- defaultValue,
7103
- disabled,
7104
- invalid,
7105
- onChange,
7106
- orientation = 'vertical',
7107
- value,
7108
- ...otherProps
7109
- } = props;
7110
- const values = React.useMemo(() => {
7111
- const radioGroupItemValues = [];
7112
- React.Children.forEach(children, child => {
7113
- if ( /*#__PURE__*/React.isValidElement(child)) {
7114
- radioGroupItemValues.push(child.props.value);
7115
- }
7116
- });
7117
- return radioGroupItemValues;
7118
- }, [children]);
7119
- const context = React.useMemo(() => ({
7120
- disabled: disabled !== null && disabled !== void 0 ? disabled : false,
7121
- invalid: invalid !== null && invalid !== void 0 ? invalid : false
7122
- }), [disabled, invalid]);
7123
- let valueProps;
7124
- if (onChange !== undefined) {
7125
- const handleChange = value => onChange(findByValue$1(values, value));
7126
- valueProps = {
7127
- onValueChange: handleChange,
7128
- value: value !== undefined ? getRadioGroupItemValueAsString(value) : undefined
7129
- };
7130
- } else {
7131
- valueProps = {
7132
- defaultValue: defaultValue !== undefined ? getRadioGroupItemValueAsString(defaultValue) : undefined
7133
- };
7134
- }
7135
- return {
7136
- context,
7137
- props: {
7138
- ...otherProps,
7139
- ...valueProps,
7140
- children,
7141
- disabled,
7142
- orientation
7307
+ list,
7308
+ input
7309
+ } = useListbox(otherProps, ref);
7310
+ const className = cn('bg-white inline-flex relative w-full', externalClassName);
7311
+ return /*#__PURE__*/React.createElement("span", {
7312
+ "data-taco": "listbox",
7313
+ className: className
7314
+ }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
7315
+ style: {
7316
+ ...list.style,
7317
+ maxHeight: 'calc(12rem + 2px)' /* (6 * option height) + listbox border */
7143
7318
  }
7144
- };
7145
- };
7146
- const RadioGroup = /*#__PURE__*/React.forwardRef(function RadioGroup(props, ref) {
7147
- const {
7148
- context,
7149
- props: otherProps
7150
- } = useRadioGroup(props);
7151
- const className = cn('flex items-start gap-y-2', {
7152
- 'flex-wrap gap-x-4 ': otherProps.orientation === 'horizontal',
7153
- 'flex-col': otherProps.orientation === 'vertical'
7154
- }, otherProps.className);
7155
- return /*#__PURE__*/React.createElement(RadioGroupContext.Provider, {
7156
- value: context
7157
- }, /*#__PURE__*/React.createElement(RadioGroupPrimitive.Root, Object.assign({}, otherProps, {
7158
- className: className,
7159
- "data-taco": "radio-group",
7160
- ref: ref
7319
+ })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
7320
+ className: "hidden",
7321
+ type: "text"
7161
7322
  })));
7162
7323
  });
7163
- RadioGroup.Item = RadioGroupItem;
7164
-
7165
- const RadioItem = props => {
7166
- const context = React.useContext(MenuRadioGroupContext);
7324
+ const MultiListbox = /*#__PURE__*/React.forwardRef(function Listbox(props, ref) {
7167
7325
  const {
7168
- children,
7169
- value,
7326
+ className: externalClassName,
7170
7327
  ...otherProps
7171
7328
  } = props;
7172
- const disabled = context.disabled || props.disabled;
7173
- const className = useItemStyling({
7174
- disabled: disabled,
7175
- indented: true,
7176
- className: props.className
7177
- });
7178
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.RadioItem, Object.assign({}, otherProps, {
7179
- className: className,
7180
- disabled: disabled,
7181
- value: getRadioGroupItemValueAsString(value)
7182
- }), /*#__PURE__*/React.createElement(DropdownMenuPrimitive.ItemIndicator, {
7183
- className: "absolute left-0 ml-1.5"
7184
- }, /*#__PURE__*/React.createElement("span", {
7185
- className: "ml-1 flex h-1.5 w-1.5 rounded-full bg-current "
7186
- })), children);
7187
- };
7188
- const MenuRadioGroupContext = /*#__PURE__*/React.createContext({
7189
- disabled: false
7190
- });
7191
- const RadioGroup$1 = /*#__PURE__*/React.forwardRef(function MenuRadioItem(props, ref) {
7192
7329
  const {
7193
- context,
7194
- props: otherProps
7195
- } = useRadioGroup(props);
7196
- const className = cn('flex flex-col', props.className);
7197
- return /*#__PURE__*/React.createElement(MenuRadioGroupContext.Provider, {
7198
- value: context
7199
- }, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.RadioGroup, Object.assign({}, otherProps, {
7200
- className: className,
7201
- ref: ref
7330
+ list,
7331
+ input
7332
+ } = useMultiListbox(otherProps, ref);
7333
+ const className = cn('bg-white inline-flex relative w-full', externalClassName);
7334
+ return /*#__PURE__*/React.createElement("span", {
7335
+ "data-taco": "listbox",
7336
+ className: className
7337
+ }, /*#__PURE__*/React.createElement(ScrollableList, Object.assign({}, list, {
7338
+ style: {
7339
+ ...list.style,
7340
+ maxHeight: 'calc(12rem + 2px + 2px)' /* (6 * option height) + listbox border + ALL_OPTIONS bottom border */
7341
+ }
7342
+ })), /*#__PURE__*/React.createElement("input", Object.assign({}, input, {
7343
+ className: "hidden",
7344
+ type: "text"
7202
7345
  })));
7203
7346
  });
7204
- RadioGroup$1.Item = RadioItem;
7205
-
7206
- const Separator = () => {
7207
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Separator, {
7208
- className: "bg-grey-300 my-1 h-px"
7209
- });
7210
- };
7211
-
7212
- const Header = /*#__PURE__*/React.forwardRef(function MenuHeader(props, ref) {
7213
- const menu = useCurrentMenu();
7214
- const className = cn('flex items-center justify-start h-7 pr-1.5 text-xs text-grey-700', {
7215
- 'pl-7': menu === null || menu === void 0 ? void 0 : menu.indented,
7216
- 'pl-1.5': !(menu !== null && menu !== void 0 && menu.indented)
7217
- }, props.className);
7218
- return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Label, Object.assign({}, props, {
7219
- className: className,
7220
- ref: ref
7221
- }));
7222
- });
7223
-
7224
- const Menu$1 = /*#__PURE__*/React.forwardRef(function Menu(externalProps, ref) {
7225
- const {
7226
- children,
7227
- defaultOpen: defaultProp,
7228
- onChange,
7229
- open: prop,
7230
- trigger,
7231
- ...props
7232
- } = externalProps;
7233
- const [indented, setIndented] = React.useState(false);
7234
- const [minWidth, setMinWidth] = React.useState(undefined);
7235
- const [open, setOpen] = reactUseControllableState.useControllableState({
7236
- // uncontrolled
7237
- defaultProp,
7238
- // controlled
7239
- onChange,
7240
- prop
7241
- });
7242
- const context = React.useMemo(() => ({
7243
- indented,
7244
- registerIndentation: () => setIndented(true),
7245
- minWidth,
7246
- setMinWidth: width => setMinWidth(width),
7247
- close: () => setOpen(false)
7248
- }), [indented, minWidth]);
7249
- return /*#__PURE__*/React.createElement(MenuContext.Provider, {
7250
- value: context
7251
- }, /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Root, Object.assign({}, props, {
7252
- modal: false,
7253
- open: open,
7254
- onOpenChange: setOpen
7255
- }), trigger && /*#__PURE__*/React.createElement(Trigger$6, {
7256
- ref: ref
7257
- }, trigger), children));
7258
- });
7259
- Menu$1.Trigger = Trigger$6;
7260
- Menu$1.Content = Content$8;
7261
- Menu$1.Item = Item$1;
7262
- Menu$1.Link = Link;
7263
- Menu$1.Checkbox = Checkbox$1;
7264
- Menu$1.Separator = Separator;
7265
- Menu$1.Header = Header;
7266
- Menu$1.RadioGroup = RadioGroup$1;
7267
7347
 
7268
7348
  const TreeviewItem = /*#__PURE__*/React__default.forwardRef(function TreeviewItem(props, ref) {
7269
7349
  return /*#__PURE__*/React__default.createElement("a", Object.assign({}, props, {
@@ -7544,7 +7624,7 @@ const useSelect = ({
7544
7624
  }, [open]);
7545
7625
  React.useEffect(() => {
7546
7626
  if (value === undefined) {
7547
- if (defaultValue !== undefined && findByValue(flattenedData, defaultValue)) {
7627
+ if (defaultValue !== undefined && findByValue$1(flattenedData, defaultValue)) {
7548
7628
  setInputValueByRef$1(inputRef.current, defaultValue);
7549
7629
  } else {
7550
7630
  if (emptyValue !== undefined) {
@@ -7554,7 +7634,7 @@ const useSelect = ({
7554
7634
  }
7555
7635
  }
7556
7636
  } else {
7557
- if (!multiselect && !findByValue(flattenedData, value)) {
7637
+ if (!multiselect && !findByValue$1(flattenedData, value)) {
7558
7638
  if (emptyValue !== undefined) {
7559
7639
  setInputValueByRef$1(inputRef.current, emptyValue);
7560
7640
  } else if (data.length > 0) {
@@ -7613,11 +7693,11 @@ const useSelect = ({
7613
7693
  text = texts.select.allOptionsSelected;
7614
7694
  } else {
7615
7695
  var _findByValue$text, _findByValue;
7616
- text = (_findByValue$text = (_findByValue = findByValue(flattenedData, selectedValues[0])) === null || _findByValue === void 0 ? void 0 : _findByValue.text) !== null && _findByValue$text !== void 0 ? _findByValue$text : '';
7696
+ text = (_findByValue$text = (_findByValue = findByValue$1(flattenedData, selectedValues[0])) === null || _findByValue === void 0 ? void 0 : _findByValue.text) !== null && _findByValue$text !== void 0 ? _findByValue$text : '';
7617
7697
  more = selectedValues.length > 1 ? selectedValues.length - 1 : 0;
7618
7698
  }
7619
7699
  } else {
7620
- const item = findByValue(flattenedData, value);
7700
+ const item = findByValue$1(flattenedData, value);
7621
7701
  if (item) {
7622
7702
  text = item.icon ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.cloneElement(item.icon, {
7623
7703
  className: cn(item.icon.props.className, 'mr-1 -mt-px')
@@ -7629,7 +7709,7 @@ const useSelect = ({
7629
7709
  event.persist();
7630
7710
  if (onChange) {
7631
7711
  var _item$path$split, _item$path;
7632
- const item = findByValue(flattenedData, event.target.value);
7712
+ const item = findByValue$1(flattenedData, event.target.value);
7633
7713
  event.detail = sanitizeItem(item);
7634
7714
  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 : [];
7635
7715
  if (indexes.length > 1) {
@@ -10124,7 +10204,7 @@ const useRowSelect = onSelectedRows => {
10124
10204
  onSelectedRows({});
10125
10205
  }
10126
10206
  };
10127
- return /*#__PURE__*/React__default.createElement(Checkbox, Object.assign({}, props, {
10207
+ return /*#__PURE__*/React__default.createElement(Checkbox$1, Object.assign({}, props, {
10128
10208
  onChange: onChange
10129
10209
  }));
10130
10210
  },
@@ -10149,7 +10229,7 @@ const useRowSelect = onSelectedRows => {
10149
10229
  }
10150
10230
  lastSelectedSortedIndex.current = sortedIndex;
10151
10231
  };
10152
- return /*#__PURE__*/React__default.createElement(Checkbox, Object.assign({}, props, {
10232
+ return /*#__PURE__*/React__default.createElement(Checkbox$1, Object.assign({}, props, {
10153
10233
  className: "!mt-2.5",
10154
10234
  onClick: onClick,
10155
10235
  // this is necessary to remove console spam from eslint
@@ -11239,7 +11319,7 @@ const SelectCell = /*#__PURE__*/React__default.memo(({
11239
11319
  className: "ml-2",
11240
11320
  keys: ['Space']
11241
11321
  }))
11242
- }, /*#__PURE__*/React__default.createElement(Checkbox, {
11322
+ }, /*#__PURE__*/React__default.createElement(Checkbox$1, {
11243
11323
  "aria-label": isSelected ? texts.table2.columns.select.select : texts.table2.columns.select.deselect,
11244
11324
  className: "hover:border-blue !mt-0",
11245
11325
  checked: isSelected,
@@ -11260,7 +11340,7 @@ function createRowSelectionColumn(enableMultipleRowSelection, lastSelectedRowInd
11260
11340
  className: "ml-2",
11261
11341
  keys: ['Ctrl', 'A']
11262
11342
  }))
11263
- }, /*#__PURE__*/React__default.createElement(Checkbox, {
11343
+ }, /*#__PURE__*/React__default.createElement(Checkbox$1, {
11264
11344
  "aria-label": table.getIsAllPageRowsSelected() ? texts.table2.columns.select.deselectAll : texts.table2.columns.select.selectAll,
11265
11345
  className: "hover:border-blue !mt-0",
11266
11346
  checked: table.getIsAllPageRowsSelected(),
@@ -13283,7 +13363,7 @@ const OrderableColumn = /*#__PURE__*/React__default.forwardRef((props, ref) => {
13283
13363
  ref: ref
13284
13364
  }), /*#__PURE__*/React__default.createElement("span", {
13285
13365
  className: "pointer-events-none"
13286
- }, 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, {
13366
+ }, 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, {
13287
13367
  checked: column.getIsVisible(),
13288
13368
  onChange: column.toggleVisibility
13289
13369
  }) : null);
@@ -15508,9 +15588,10 @@ exports.BadgeIcon = BadgeIcon;
15508
15588
  exports.Banner = Banner;
15509
15589
  exports.Base = Base;
15510
15590
  exports.Button = Button$1;
15591
+ exports.ButtonGroup = ButtonGroup;
15511
15592
  exports.Calendar = Calendar$1;
15512
15593
  exports.Card = Card;
15513
- exports.Checkbox = Checkbox;
15594
+ exports.Checkbox = Checkbox$1;
15514
15595
  exports.CollectionPrimitive = Collection;
15515
15596
  exports.Combobox = Combobox;
15516
15597
  exports.Datepicker = Datepicker;
@@ -15560,7 +15641,7 @@ exports.VisuallyHidden = VisuallyHidden;
15560
15641
  exports.WindowedTable = WindowedTable;
15561
15642
  exports.convertRowIndexPathToNumberArray = convertRowIndexPathToNumberArray;
15562
15643
  exports.defaultLocalisationTexts = defaultLocalisationTexts;
15563
- exports.findByValue = findByValue$1;
15644
+ exports.findByValue = findByValue;
15564
15645
  exports.format = format;
15565
15646
  exports.getByRowIndexPath = getByRowIndexPath;
15566
15647
  exports.getNavigationLinkClasses = getNavigationLinkClasses;
@@ -15578,6 +15659,7 @@ exports.setByRowIndexPath = setByRowIndexPath;
15578
15659
  exports.useBoundaryOverflowDetection = useBoundaryOverflowDetection;
15579
15660
  exports.useBoundingClientRectListener = useBoundingClientRectListener;
15580
15661
  exports.useDropTarget = useDropTarget;
15662
+ exports.useIntersectionObserver = useIntersectionObserver;
15581
15663
  exports.useIsLargeScreen = useIsLargeScreen;
15582
15664
  exports.useListKeyboardNavigation = useListKeyboardNavigation;
15583
15665
  exports.useListScrollTo = useListScrollTo;