@opengovsg/oui 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/cjs/button/button.cjs +1 -1
  2. package/dist/cjs/calendar/agnostic-calendar-state-context.cjs +13 -0
  3. package/dist/cjs/calendar/calendar-bottom-content.cjs +51 -0
  4. package/dist/cjs/calendar/calendar-grid-header.cjs +28 -0
  5. package/dist/cjs/calendar/calendar-header.cjs +74 -0
  6. package/dist/cjs/calendar/calendar-month-day-selector.cjs +86 -0
  7. package/dist/cjs/calendar/calendar-style-context.cjs +13 -0
  8. package/dist/cjs/calendar/calendar.cjs +155 -0
  9. package/dist/cjs/calendar/hooks/index.cjs +11 -0
  10. package/dist/cjs/calendar/hooks/use-calendar-i18n.cjs +33 -0
  11. package/dist/cjs/calendar/hooks/use-calendar-selectors.cjs +41 -0
  12. package/dist/cjs/calendar/index.cjs +22 -0
  13. package/dist/cjs/calendar/types.cjs +3 -0
  14. package/dist/cjs/calendar/utils.cjs +62 -0
  15. package/dist/cjs/combo-box/combo-box-fuzzy.cjs +3 -3
  16. package/dist/cjs/combo-box/combo-box-item.cjs +2 -2
  17. package/dist/cjs/combo-box/combo-box.cjs +3 -2
  18. package/dist/cjs/index.cjs +53 -20
  19. package/dist/cjs/menu/index.cjs +15 -0
  20. package/dist/cjs/menu/menu.cjs +229 -0
  21. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/{chevrons-up-down.cjs → chevron-left.cjs} +3 -6
  22. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevron-right.cjs +19 -0
  23. package/dist/cjs/popover/index.cjs +8 -0
  24. package/dist/cjs/popover/popover.cjs +46 -0
  25. package/dist/cjs/range-calendar/index.cjs +10 -0
  26. package/dist/cjs/range-calendar/range-calendar.cjs +188 -0
  27. package/dist/cjs/select/select-item.cjs +11 -24
  28. package/dist/cjs/select/select.cjs +17 -6
  29. package/dist/cjs/system/react-utils/context.cjs +3 -2
  30. package/dist/cjs/system/utils.cjs +9 -6
  31. package/dist/cjs/tag-field/index.cjs +2 -0
  32. package/dist/cjs/tag-field/tag-field-item.cjs +33 -0
  33. package/dist/cjs/tag-field/tag-field-list.cjs +11 -22
  34. package/dist/cjs/tag-field/tag-field-tag-list.cjs +3 -2
  35. package/dist/cjs/tag-field/tag-field.cjs +5 -3
  36. package/dist/esm/button/button.js +1 -1
  37. package/dist/esm/calendar/agnostic-calendar-state-context.js +10 -0
  38. package/dist/esm/calendar/calendar-bottom-content.js +49 -0
  39. package/dist/esm/calendar/calendar-grid-header.js +26 -0
  40. package/dist/esm/calendar/calendar-header.js +72 -0
  41. package/dist/esm/calendar/calendar-month-day-selector.js +84 -0
  42. package/dist/esm/calendar/calendar-style-context.js +10 -0
  43. package/dist/esm/calendar/calendar.js +152 -0
  44. package/dist/esm/calendar/hooks/index.js +3 -0
  45. package/dist/esm/calendar/hooks/use-calendar-i18n.js +30 -0
  46. package/dist/esm/calendar/hooks/use-calendar-selectors.js +39 -0
  47. package/dist/esm/calendar/index.js +5 -0
  48. package/dist/esm/calendar/types.js +1 -0
  49. package/dist/esm/calendar/utils.js +57 -0
  50. package/dist/esm/combo-box/combo-box-fuzzy.js +4 -4
  51. package/dist/esm/combo-box/combo-box-item.js +3 -3
  52. package/dist/esm/combo-box/combo-box.js +4 -3
  53. package/dist/esm/index.js +17 -9
  54. package/dist/esm/menu/index.js +2 -0
  55. package/dist/esm/menu/menu.js +220 -0
  56. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevron-left.js +14 -0
  57. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js +14 -0
  58. package/dist/esm/popover/index.js +2 -0
  59. package/dist/esm/popover/popover.js +44 -0
  60. package/dist/esm/range-calendar/index.js +2 -0
  61. package/dist/esm/range-calendar/range-calendar.js +184 -0
  62. package/dist/esm/select/select-item.js +12 -25
  63. package/dist/esm/select/select.js +19 -8
  64. package/dist/esm/system/react-utils/context.js +3 -2
  65. package/dist/esm/system/utils.js +9 -6
  66. package/dist/esm/tag-field/index.js +1 -0
  67. package/dist/esm/tag-field/tag-field-item.js +31 -0
  68. package/dist/esm/tag-field/tag-field-list.js +12 -22
  69. package/dist/esm/tag-field/tag-field-tag-list.js +3 -2
  70. package/dist/esm/tag-field/tag-field.js +7 -5
  71. package/dist/types/button/button.d.ts +5 -0
  72. package/dist/types/button/button.d.ts.map +1 -1
  73. package/dist/types/calendar/agnostic-calendar-state-context.d.ts +3 -0
  74. package/dist/types/calendar/agnostic-calendar-state-context.d.ts.map +1 -0
  75. package/dist/types/calendar/calendar-bottom-content.d.ts +4 -0
  76. package/dist/types/calendar/calendar-bottom-content.d.ts.map +1 -0
  77. package/dist/types/calendar/calendar-grid-header.d.ts +2 -0
  78. package/dist/types/calendar/calendar-grid-header.d.ts.map +1 -0
  79. package/dist/types/calendar/calendar-header.d.ts +6 -0
  80. package/dist/types/calendar/calendar-header.d.ts.map +1 -0
  81. package/dist/types/calendar/calendar-month-day-selector.d.ts +2 -0
  82. package/dist/types/calendar/calendar-month-day-selector.d.ts.map +1 -0
  83. package/dist/types/calendar/calendar-style-context.d.ts +12 -0
  84. package/dist/types/calendar/calendar-style-context.d.ts.map +1 -0
  85. package/dist/types/calendar/calendar.d.ts +8 -0
  86. package/dist/types/calendar/calendar.d.ts.map +1 -0
  87. package/dist/types/calendar/hooks/index.d.ts +3 -0
  88. package/dist/types/calendar/hooks/index.d.ts.map +1 -0
  89. package/dist/types/calendar/hooks/use-calendar-i18n.d.ts +4 -0
  90. package/dist/types/calendar/hooks/use-calendar-i18n.d.ts.map +1 -0
  91. package/dist/types/calendar/hooks/use-calendar-selectors.d.ts +13 -0
  92. package/dist/types/calendar/hooks/use-calendar-selectors.d.ts.map +1 -0
  93. package/dist/types/calendar/index.d.ts +6 -0
  94. package/dist/types/calendar/index.d.ts.map +1 -0
  95. package/dist/types/calendar/types.d.ts +59 -0
  96. package/dist/types/calendar/types.d.ts.map +1 -0
  97. package/dist/types/calendar/utils.d.ts +13 -0
  98. package/dist/types/calendar/utils.d.ts.map +1 -0
  99. package/dist/types/combo-box/combo-box-fuzzy.d.ts +2 -2
  100. package/dist/types/combo-box/combo-box-fuzzy.d.ts.map +1 -1
  101. package/dist/types/combo-box/combo-box-item.d.ts +3 -3
  102. package/dist/types/combo-box/combo-box-item.d.ts.map +1 -1
  103. package/dist/types/combo-box/combo-box.d.ts.map +1 -1
  104. package/dist/types/index.d.mts +4 -0
  105. package/dist/types/index.d.ts +4 -0
  106. package/dist/types/index.d.ts.map +1 -1
  107. package/dist/types/menu/index.d.ts +2 -0
  108. package/dist/types/menu/index.d.ts.map +1 -0
  109. package/dist/types/menu/menu.d.ts +38 -0
  110. package/dist/types/menu/menu.d.ts.map +1 -0
  111. package/dist/types/popover/index.d.ts +2 -0
  112. package/dist/types/popover/index.d.ts.map +1 -0
  113. package/dist/types/popover/popover.d.ts +21 -0
  114. package/dist/types/popover/popover.d.ts.map +1 -0
  115. package/dist/types/range-calendar/index.d.ts +2 -0
  116. package/dist/types/range-calendar/index.d.ts.map +1 -0
  117. package/dist/types/range-calendar/range-calendar.d.ts +69 -0
  118. package/dist/types/range-calendar/range-calendar.d.ts.map +1 -0
  119. package/dist/types/select/select-item.d.ts.map +1 -1
  120. package/dist/types/select/select.d.ts +4 -3
  121. package/dist/types/select/select.d.ts.map +1 -1
  122. package/dist/types/system/react-utils/context.d.ts +3 -2
  123. package/dist/types/system/react-utils/context.d.ts.map +1 -1
  124. package/dist/types/system/utils.d.ts.map +1 -1
  125. package/dist/types/tag-field/index.d.ts +1 -0
  126. package/dist/types/tag-field/index.d.ts.map +1 -1
  127. package/dist/types/tag-field/tag-field-item.d.ts +7 -0
  128. package/dist/types/tag-field/tag-field-item.d.ts.map +1 -0
  129. package/dist/types/tag-field/tag-field-list.d.ts +2 -6
  130. package/dist/types/tag-field/tag-field-list.d.ts.map +1 -1
  131. package/dist/types/tag-field/tag-field-state-context.d.ts +1 -2
  132. package/dist/types/tag-field/tag-field-state-context.d.ts.map +1 -1
  133. package/dist/types/tag-field/tag-field-tag-list.d.ts.map +1 -1
  134. package/dist/types/tag-field/tag-field.d.ts.map +1 -1
  135. package/dist/types/tag-field/types.d.ts +8 -6
  136. package/dist/types/tag-field/types.d.ts.map +1 -1
  137. package/package.json +8 -7
  138. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevrons-up-down.js +0 -17
@@ -13,6 +13,7 @@ var field = require('../field/field.cjs');
13
13
  var chevronUp = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs');
14
14
  var chevronDown = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevron-down.cjs');
15
15
  var x = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/x.cjs');
16
+ var popover = require('../popover/popover.cjs');
16
17
 
17
18
  const calculateEstimatedRowHeight = (size) => {
18
19
  switch (size) {
@@ -46,7 +47,7 @@ function ComboBoxEmptyState({
46
47
  size,
47
48
  className
48
49
  }) {
49
- const styles = ouiTheme.comboBoxItemStyles({ size });
50
+ const styles = ouiTheme.listBoxItemStyles({ size });
50
51
  const formatMessage = reactAria.useMessageFormatter(i18nStrings);
51
52
  return /* @__PURE__ */ jsxRuntime.jsx(
52
53
  "span",
@@ -194,7 +195,7 @@ function ComboBox(originalProps) {
194
195
  description && /* @__PURE__ */ jsxRuntime.jsx(field.Description, { size: variantProps.size, children: description }),
195
196
  /* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { size: variantProps.size, children: errorMessage }),
196
197
  /* @__PURE__ */ jsxRuntime.jsx(
197
- reactAriaComponents.Popover,
198
+ popover.Popover,
198
199
  {
199
200
  className: ouiTheme.composeRenderProps(
200
201
  classNames?.popover,
@@ -1,10 +1,6 @@
1
1
  "use strict";
2
2
  'use strict';
3
3
 
4
- var input = require('./input/input.cjs');
5
- var useControllableState = require('./hooks/use-controllable-state.cjs');
6
- var button = require('./button/button.cjs');
7
- var govtBanner = require('./govt-banner/govt-banner.cjs');
8
4
  var ripple = require('./ripple/ripple.cjs');
9
5
  var useRipple = require('./ripple/use-ripple.cjs');
10
6
  var spinner = require('./spinner/spinner.cjs');
@@ -12,26 +8,34 @@ var useSpinner = require('./spinner/use-spinner.cjs');
12
8
  var toggle = require('./toggle/toggle.cjs');
13
9
  var skipNavLink = require('./skip-nav-link/skip-nav-link.cjs');
14
10
  var textField = require('./text-field/text-field.cjs');
15
- var field = require('./field/field.cjs');
16
11
  var textArea = require('./text-area/text-area.cjs');
17
12
  var textAreaField = require('./text-area-field/text-area-field.cjs');
13
+ var tagField = require('./tag-field/tag-field.cjs');
14
+ var tagFieldItem = require('./tag-field/tag-field-item.cjs');
15
+ var select = require('./select/select.cjs');
16
+ var selectItem = require('./select/select-item.cjs');
17
+ var selectVariantContext = require('./select/select-variant-context.cjs');
18
+ var useControllableState = require('./hooks/use-controllable-state.cjs');
19
+ var button = require('./button/button.cjs');
20
+ var govtBanner = require('./govt-banner/govt-banner.cjs');
21
+ var input = require('./input/input.cjs');
22
+ var field = require('./field/field.cjs');
18
23
  var comboBox = require('./combo-box/combo-box.cjs');
19
24
  var comboBoxFuzzy = require('./combo-box/combo-box-fuzzy.cjs');
20
25
  var comboBoxItem = require('./combo-box/combo-box-item.cjs');
21
26
  var comboBoxVariantContext = require('./combo-box/combo-box-variant-context.cjs');
22
27
  var banner = require('./banner/banner.cjs');
23
- var tagField = require('./tag-field/tag-field.cjs');
24
- var select = require('./select/select.cjs');
25
- var selectItem = require('./select/select-item.cjs');
26
- var selectVariantContext = require('./select/select-variant-context.cjs');
27
28
  var badge = require('./badge/badge.cjs');
29
+ var date = require('@internationalized/date');
30
+ var calendar = require('./calendar/calendar.cjs');
31
+ var calendarStyleContext = require('./calendar/calendar-style-context.cjs');
32
+ var utils = require('./calendar/utils.cjs');
33
+ var rangeCalendar = require('./range-calendar/range-calendar.cjs');
34
+ var menu = require('./menu/menu.cjs');
35
+ var popover = require('./popover/popover.cjs');
28
36
 
29
37
 
30
38
 
31
- exports.Input = input.Input;
32
- exports.useControllableState = useControllableState.useControllableState;
33
- exports.Button = button.Button;
34
- exports.GovtBanner = govtBanner.GovtBanner;
35
39
  exports.Ripple = ripple.Ripple;
36
40
  exports.useRipple = useRipple.useRipple;
37
41
  exports.Spinner = spinner.Spinner;
@@ -39,12 +43,22 @@ exports.useSpinner = useSpinner.useSpinner;
39
43
  exports.Toggle = toggle.Toggle;
40
44
  exports.SkipNavLink = skipNavLink.SkipNavLink;
41
45
  exports.TextField = textField.TextField;
46
+ exports.TextArea = textArea.TextArea;
47
+ exports.TextAreaField = textAreaField.TextAreaField;
48
+ exports.TagField = tagField.TagField;
49
+ exports.TagFieldItem = tagFieldItem.TagFieldItem;
50
+ exports.Select = select.Select;
51
+ exports.SelectItem = selectItem.SelectItem;
52
+ exports.SelectVariantContext = selectVariantContext.SelectVariantContext;
53
+ exports.useSelectVariantContext = selectVariantContext.useSelectVariantContext;
54
+ exports.useControllableState = useControllableState.useControllableState;
55
+ exports.Button = button.Button;
56
+ exports.GovtBanner = govtBanner.GovtBanner;
57
+ exports.Input = input.Input;
42
58
  exports.Description = field.Description;
43
59
  exports.FieldError = field.FieldError;
44
60
  exports.FieldGroup = field.FieldGroup;
45
61
  exports.Label = field.Label;
46
- exports.TextArea = textArea.TextArea;
47
- exports.TextAreaField = textAreaField.TextAreaField;
48
62
  exports.ComboBox = comboBox.ComboBox;
49
63
  exports.ComboBoxEmptyState = comboBox.ComboBoxEmptyState;
50
64
  exports.ComboBoxFuzzy = comboBoxFuzzy.ComboBoxFuzzy;
@@ -52,9 +66,28 @@ exports.ComboBoxItem = comboBoxItem.ComboBoxItem;
52
66
  exports.ComboBoxVariantContext = comboBoxVariantContext.ComboBoxVariantContext;
53
67
  exports.useComboBoxVariantContext = comboBoxVariantContext.useComboBoxVariantContext;
54
68
  exports.Banner = banner.Banner;
55
- exports.TagField = tagField.TagField;
56
- exports.Select = select.Select;
57
- exports.SelectItem = selectItem.SelectItem;
58
- exports.SelectVariantContext = selectVariantContext.SelectVariantContext;
59
- exports.useSelectVariantContext = selectVariantContext.useSelectVariantContext;
60
69
  exports.Badge = badge.Badge;
70
+ Object.defineProperty(exports, "CalendarDate", {
71
+ enumerable: true,
72
+ get: function () { return date.CalendarDate; }
73
+ });
74
+ exports.Calendar = calendar.Calendar;
75
+ exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
76
+ exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
77
+ exports.useCalendarStyleContext = calendarStyleContext.useCalendarStyleContext;
78
+ exports.getEraFormat = utils.getEraFormat;
79
+ exports.useGenerateLocalizedMonths = utils.useGenerateLocalizedMonths;
80
+ exports.useGenerateLocalizedYears = utils.useGenerateLocalizedYears;
81
+ exports.useLocalizedMonthYear = utils.useLocalizedMonthYear;
82
+ exports.RangeCalendar = rangeCalendar.RangeCalendar;
83
+ exports.RangeCalendarCell = rangeCalendar.RangeCalendarCell;
84
+ exports.RangeCalendarStateWrapper = rangeCalendar.RangeCalendarStateWrapper;
85
+ exports.Menu = menu.Menu;
86
+ exports.MenuItem = menu.MenuItem;
87
+ exports.MenuSection = menu.MenuSection;
88
+ exports.MenuSeparator = menu.MenuSeparator;
89
+ exports.MenuTrigger = menu.MenuTrigger;
90
+ exports.MenuVariantContext = menu.MenuVariantContext;
91
+ exports.SubmenuTrigger = menu.SubmenuTrigger;
92
+ exports.useMenuVariantContext = menu.useMenuVariantContext;
93
+ exports.Popover = popover.Popover;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var menu = require('./menu.cjs');
5
+
6
+
7
+
8
+ exports.Menu = menu.Menu;
9
+ exports.MenuItem = menu.MenuItem;
10
+ exports.MenuSection = menu.MenuSection;
11
+ exports.MenuSeparator = menu.MenuSeparator;
12
+ exports.MenuTrigger = menu.MenuTrigger;
13
+ exports.MenuVariantContext = menu.MenuVariantContext;
14
+ exports.SubmenuTrigger = menu.SubmenuTrigger;
15
+ exports.useMenuVariantContext = menu.useMenuVariantContext;
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var reactAriaComponents = require('react-aria-components');
8
+ var ouiTheme = require('@opengovsg/oui-theme');
9
+ var utils = require('../system/utils.cjs');
10
+ var check = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/check.cjs');
11
+ var chevronRight = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevron-right.cjs');
12
+ var context = require('../system/react-utils/context.cjs');
13
+ var popover = require('../popover/popover.cjs');
14
+
15
+ const [MenuVariantContext, useMenuVariantContext] = context.createContext({
16
+ name: "MenuVariantContext",
17
+ strict: false
18
+ });
19
+ function MenuInner(originalProps, ref) {
20
+ [originalProps, ref] = reactAriaComponents.useContextProps(
21
+ originalProps,
22
+ ref,
23
+ MenuVariantContext
24
+ );
25
+ const [props, variantProps] = utils.mapPropsVariants(
26
+ originalProps,
27
+ ouiTheme.menuStyles.variantKeys
28
+ );
29
+ const { className, classNames, placement, ...rest } = props;
30
+ const styles = ouiTheme.menuStyles(variantProps);
31
+ return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Provider, { values: [[MenuVariantContext, variantProps]], children: /* @__PURE__ */ jsxRuntime.jsx(
32
+ popover.Popover,
33
+ {
34
+ placement,
35
+ className: styles.popover({ className: classNames?.popover }),
36
+ children: /* @__PURE__ */ jsxRuntime.jsx(
37
+ reactAriaComponents.Menu,
38
+ {
39
+ ...rest,
40
+ ref,
41
+ className: reactAriaComponents.composeRenderProps(
42
+ className ?? classNames?.base,
43
+ (className2, renderProps) => styles.base({
44
+ className: className2,
45
+ ...renderProps
46
+ })
47
+ )
48
+ }
49
+ )
50
+ }
51
+ ) });
52
+ }
53
+ const Menu = utils.forwardRefGeneric(MenuInner);
54
+ const MenuItem = react.forwardRef(function MenuItem2(originalProps, ref) {
55
+ [originalProps, ref] = reactAriaComponents.useContextProps(
56
+ originalProps,
57
+ ref,
58
+ MenuVariantContext
59
+ );
60
+ const [
61
+ {
62
+ classNames,
63
+ className,
64
+ multipleSelectionIcon: multipleSelectionIconProp,
65
+ singleSelectionIcon: singleSelectionIconProp,
66
+ startContent,
67
+ endContent,
68
+ ...props
69
+ },
70
+ variantProps
71
+ ] = utils.mapPropsVariants(originalProps, ouiTheme.listBoxItemStyles.variantKeys);
72
+ const styles = ouiTheme.menuItemStyles(variantProps);
73
+ const multipleSelectionIcon = react.useMemo(() => {
74
+ if (multipleSelectionIconProp !== void 0) {
75
+ return multipleSelectionIconProp;
76
+ }
77
+ return /* @__PURE__ */ jsxRuntime.jsx(
78
+ check.default,
79
+ {
80
+ "aria-hidden": true,
81
+ className: styles.icon({ className: classNames?.icon })
82
+ }
83
+ );
84
+ }, [classNames?.icon, multipleSelectionIconProp, styles]);
85
+ const singleSelectionIcon = react.useMemo(() => {
86
+ if (singleSelectionIconProp !== void 0) {
87
+ return singleSelectionIconProp;
88
+ }
89
+ return /* @__PURE__ */ jsxRuntime.jsx(
90
+ check.default,
91
+ {
92
+ "aria-hidden": true,
93
+ className: styles.icon({ className: classNames?.icon })
94
+ }
95
+ );
96
+ }, [classNames?.icon, singleSelectionIconProp, styles]);
97
+ const showIconContainer = react.useCallback(
98
+ (selectionMode) => {
99
+ switch (selectionMode) {
100
+ case "none":
101
+ return false;
102
+ case "multiple":
103
+ return !!multipleSelectionIcon;
104
+ case "single":
105
+ return !!singleSelectionIcon;
106
+ }
107
+ },
108
+ [multipleSelectionIcon, singleSelectionIcon]
109
+ );
110
+ const defaultTextValue = react.useMemo(() => {
111
+ if (props.textValue) {
112
+ return props.textValue;
113
+ }
114
+ if (typeof props.children === "string") {
115
+ return props.children;
116
+ }
117
+ return void 0;
118
+ }, [props.children, props.textValue]);
119
+ return /* @__PURE__ */ jsxRuntime.jsx(
120
+ reactAriaComponents.MenuItem,
121
+ {
122
+ ref,
123
+ textValue: defaultTextValue,
124
+ ...props,
125
+ isDisabled: variantProps.isDisabled,
126
+ className: reactAriaComponents.composeRenderProps(
127
+ className ?? classNames?.container,
128
+ (className2, renderProps) => styles.container({
129
+ className: className2,
130
+ ...renderProps
131
+ })
132
+ ),
133
+ children: reactAriaComponents.composeRenderProps(
134
+ props.children,
135
+ (children, { selectionMode, isSelected, hasSubmenu }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
136
+ startContent,
137
+ /* @__PURE__ */ jsxRuntime.jsx(
138
+ "span",
139
+ {
140
+ className: styles.label({
141
+ className: classNames?.label
142
+ }),
143
+ children
144
+ }
145
+ ),
146
+ showIconContainer(selectionMode) && /* @__PURE__ */ jsxRuntime.jsxs(
147
+ "span",
148
+ {
149
+ className: styles.iconContainer({
150
+ className: classNames?.iconContainer
151
+ }),
152
+ children: [
153
+ isSelected && selectionMode === "multiple" && multipleSelectionIcon,
154
+ isSelected && selectionMode === "single" && singleSelectionIcon
155
+ ]
156
+ }
157
+ ),
158
+ endContent,
159
+ hasSubmenu && /* @__PURE__ */ jsxRuntime.jsx(
160
+ chevronRight.default,
161
+ {
162
+ "aria-hidden": true,
163
+ className: styles.icon({
164
+ className: classNames?.icon
165
+ })
166
+ }
167
+ )
168
+ ] })
169
+ )
170
+ }
171
+ );
172
+ });
173
+ function MenuSeparator(props) {
174
+ return /* @__PURE__ */ jsxRuntime.jsx(
175
+ reactAriaComponents.Separator,
176
+ {
177
+ ...props,
178
+ className: ouiTheme.menuDividerStyles({
179
+ className: props.className
180
+ })
181
+ }
182
+ );
183
+ }
184
+ function MenuSectionInner(originalProps, ref) {
185
+ [originalProps, ref] = reactAriaComponents.useContextProps(
186
+ originalProps,
187
+ ref,
188
+ MenuVariantContext
189
+ );
190
+ const [{ title, classNames, ...props }, variantProps] = utils.mapPropsVariants(
191
+ originalProps,
192
+ ouiTheme.menuSectionStyles.variantKeys
193
+ );
194
+ const styles = ouiTheme.menuSectionStyles(variantProps);
195
+ return /* @__PURE__ */ jsxRuntime.jsxs(
196
+ reactAriaComponents.MenuSection,
197
+ {
198
+ ref,
199
+ className: styles.base({
200
+ className: props.className ?? classNames?.base
201
+ }),
202
+ ...props,
203
+ children: [
204
+ title && /* @__PURE__ */ jsxRuntime.jsx(
205
+ reactAriaComponents.Header,
206
+ {
207
+ className: styles.header({
208
+ className: classNames?.header
209
+ }),
210
+ children: title
211
+ }
212
+ ),
213
+ /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Collection, { items: props.items, children: props.children })
214
+ ]
215
+ }
216
+ );
217
+ }
218
+ const MenuSection = utils.forwardRefGeneric(MenuSectionInner);
219
+ const MenuTrigger = reactAriaComponents.MenuTrigger;
220
+ const SubmenuTrigger = reactAriaComponents.SubmenuTrigger;
221
+
222
+ exports.Menu = Menu;
223
+ exports.MenuItem = MenuItem;
224
+ exports.MenuSection = MenuSection;
225
+ exports.MenuSeparator = MenuSeparator;
226
+ exports.MenuTrigger = MenuTrigger;
227
+ exports.MenuVariantContext = MenuVariantContext;
228
+ exports.SubmenuTrigger = SubmenuTrigger;
229
+ exports.useMenuVariantContext = useMenuVariantContext;
@@ -12,11 +12,8 @@ var createLucideIcon = require('../createLucideIcon.cjs');
12
12
  */
13
13
 
14
14
 
15
- const __iconNode = [
16
- ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
17
- ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
18
- ];
19
- const ChevronsUpDown = createLucideIcon.default("ChevronsUpDown", __iconNode);
15
+ const __iconNode = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
16
+ const ChevronLeft = createLucideIcon.default("ChevronLeft", __iconNode);
20
17
 
21
18
  exports.__iconNode = __iconNode;
22
- exports.default = ChevronsUpDown;
19
+ exports.default = ChevronLeft;
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var createLucideIcon = require('../createLucideIcon.cjs');
6
+
7
+ /**
8
+ * @license lucide-react v0.475.0 - ISC
9
+ *
10
+ * This source code is licensed under the ISC license.
11
+ * See the LICENSE file in the root directory of this source tree.
12
+ */
13
+
14
+
15
+ const __iconNode = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
16
+ const ChevronRight = createLucideIcon.default("ChevronRight", __iconNode);
17
+
18
+ exports.__iconNode = __iconNode;
19
+ exports.default = ChevronRight;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var popover = require('./popover.cjs');
5
+
6
+
7
+
8
+ exports.Popover = popover.Popover;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var reactAriaComponents = require('react-aria-components');
7
+ var ouiTheme = require('@opengovsg/oui-theme');
8
+
9
+ const Popover = ({
10
+ children,
11
+ showArrow,
12
+ className,
13
+ classNames,
14
+ ...props
15
+ }) => {
16
+ const popoverContext = reactAriaComponents.useSlottedContext(reactAriaComponents.PopoverContext);
17
+ const isSubmenu = popoverContext?.trigger === "SubmenuTrigger";
18
+ let offset = showArrow ? 12 : 8;
19
+ offset = isSubmenu ? offset - 6 : offset;
20
+ return /* @__PURE__ */ jsxRuntime.jsxs(
21
+ reactAriaComponents.Popover,
22
+ {
23
+ offset,
24
+ ...props,
25
+ className: reactAriaComponents.composeRenderProps(
26
+ className ?? classNames?.base,
27
+ (className2, renderProps) => ouiTheme.popoverStyles({ ...renderProps, className: className2 })
28
+ ),
29
+ children: [
30
+ showArrow && /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.OverlayArrow, { className: "group", children: /* @__PURE__ */ jsxRuntime.jsx(
31
+ "svg",
32
+ {
33
+ width: 12,
34
+ height: 12,
35
+ viewBox: "0 0 12 12",
36
+ className: ouiTheme.popoverArrowStyles({ className: classNames?.arrow }),
37
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 0 L6 6 L12 0" })
38
+ }
39
+ ) }),
40
+ children
41
+ ]
42
+ }
43
+ );
44
+ };
45
+
46
+ exports.Popover = Popover;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var rangeCalendar = require('./range-calendar.cjs');
5
+
6
+
7
+
8
+ exports.RangeCalendar = rangeCalendar.RangeCalendar;
9
+ exports.RangeCalendarCell = rangeCalendar.RangeCalendarCell;
10
+ exports.RangeCalendarStateWrapper = rangeCalendar.RangeCalendarStateWrapper;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var date = require('@internationalized/date');
8
+ var reactAriaComponents = require('react-aria-components');
9
+ var useDeepCompare = require('use-deep-compare');
10
+ var ouiTheme = require('@opengovsg/oui-theme');
11
+ var agnosticCalendarStateContext = require('../calendar/agnostic-calendar-state-context.cjs');
12
+ var calendarBottomContent = require('../calendar/calendar-bottom-content.cjs');
13
+ var calendarGridHeader = require('../calendar/calendar-grid-header.cjs');
14
+ var calendarHeader = require('../calendar/calendar-header.cjs');
15
+ var utils = require('../system/utils.cjs');
16
+ var calendarStyleContext = require('../calendar/calendar-style-context.cjs');
17
+
18
+ const RangeCalendar = react.forwardRef(function RangeCalendar2(originalProps, ref) {
19
+ const [props, variantProps] = utils.mapPropsVariants(
20
+ originalProps,
21
+ ouiTheme.calendarStyles.variantKeys
22
+ );
23
+ const {
24
+ className,
25
+ classNames,
26
+ weekdayStyle = "narrow",
27
+ minValue = new date.CalendarDate(1900, 0, 1),
28
+ maxValue = new date.CalendarDate(2100, 12, 31),
29
+ bottomContent,
30
+ showTodayButton = true,
31
+ errorMessage,
32
+ ...restProps
33
+ } = props;
34
+ const slots = useDeepCompare.useDeepCompareMemo(
35
+ () => ouiTheme.calendarStyles({ ...variantProps, isRange: true }),
36
+ [variantProps]
37
+ );
38
+ const context = react.useMemo(
39
+ () => ({
40
+ slots,
41
+ classNames,
42
+ className,
43
+ size: variantProps.size ?? ouiTheme.calendarStyles.defaultVariants.size
44
+ }),
45
+ [className, classNames, slots, variantProps.size]
46
+ );
47
+ const numberOfVisibleMonths = props.visibleDuration?.months ?? 1;
48
+ const dateToHighlight = react.useMemo(() => {
49
+ if (props.defaultFocusedValue !== void 0) {
50
+ return props.defaultFocusedValue;
51
+ }
52
+ return date.today(date.getLocalTimeZone());
53
+ }, [props.defaultFocusedValue]);
54
+ return /* @__PURE__ */ jsxRuntime.jsxs(
55
+ reactAriaComponents.RangeCalendar,
56
+ {
57
+ ...restProps,
58
+ ref,
59
+ minValue,
60
+ maxValue,
61
+ className: ouiTheme.composeRenderProps(
62
+ className,
63
+ (className2, renderProps) => slots.base({
64
+ className: ouiTheme.cn(classNames?.base, className2),
65
+ ...renderProps
66
+ })
67
+ ),
68
+ children: [
69
+ /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Provider, { values: [[calendarStyleContext.CalendarStyleContext, context]], children: /* @__PURE__ */ jsxRuntime.jsxs(RangeCalendarStateWrapper, { children: [
70
+ /* @__PURE__ */ jsxRuntime.jsx(
71
+ "div",
72
+ {
73
+ className: slots.gridWrapper({
74
+ className: classNames?.gridWrapper
75
+ }),
76
+ children: Array.from({ length: numberOfVisibleMonths }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsxs(
77
+ "div",
78
+ {
79
+ className: slots.calendar({ className: classNames?.calendar }),
80
+ children: [
81
+ /* @__PURE__ */ jsxRuntime.jsx(calendarHeader.CalendarHeader, { offsetMonths: index }),
82
+ /* @__PURE__ */ jsxRuntime.jsxs(
83
+ reactAriaComponents.CalendarGrid,
84
+ {
85
+ className: slots.grid({ className: classNames?.grid }),
86
+ weekdayStyle,
87
+ offset: { months: index },
88
+ children: [
89
+ /* @__PURE__ */ jsxRuntime.jsx(calendarGridHeader.CalendarGridHeader, {}),
90
+ /* @__PURE__ */ jsxRuntime.jsx(
91
+ reactAriaComponents.CalendarGridBody,
92
+ {
93
+ className: slots.gridBody({
94
+ className: classNames?.gridBody
95
+ }),
96
+ children: (date) => /* @__PURE__ */ jsxRuntime.jsx(
97
+ RangeCalendarCell,
98
+ {
99
+ firstDayOfWeek: props.firstDayOfWeek,
100
+ dateToHighlight,
101
+ date,
102
+ isMultipleMonths: numberOfVisibleMonths >= 2
103
+ }
104
+ )
105
+ }
106
+ )
107
+ ]
108
+ }
109
+ )
110
+ ]
111
+ },
112
+ index
113
+ ))
114
+ }
115
+ ),
116
+ /* @__PURE__ */ jsxRuntime.jsx(
117
+ calendarBottomContent.CalendarBottomContent,
118
+ {
119
+ bottomContent,
120
+ showTodayButton
121
+ }
122
+ )
123
+ ] }) }),
124
+ errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
125
+ reactAriaComponents.Text,
126
+ {
127
+ className: slots.errorMessage({
128
+ className: classNames?.errorMessage
129
+ }),
130
+ slot: "errorMessage",
131
+ children: errorMessage
132
+ }
133
+ )
134
+ ]
135
+ }
136
+ );
137
+ });
138
+ const RangeCalendarStateWrapper = ({
139
+ children
140
+ }) => {
141
+ const state = react.useContext(reactAriaComponents.RangeCalendarStateContext);
142
+ return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Provider, { values: [[agnosticCalendarStateContext.AgnosticCalendarStateContext, state]], children });
143
+ };
144
+ const RangeCalendarCell = ({
145
+ date: date$1,
146
+ isMultipleMonths,
147
+ dateToHighlight,
148
+ firstDayOfWeek
149
+ }) => {
150
+ const { classNames, slots } = calendarStyleContext.useCalendarStyleContext();
151
+ const state = react.useContext(agnosticCalendarStateContext.AgnosticCalendarStateContext);
152
+ const { locale } = reactAriaComponents.useLocale();
153
+ const dataAttributes = react.useMemo(() => {
154
+ const isDateHighlighted = dateToHighlight ? date$1.compare(dateToHighlight) === 0 : false;
155
+ const isSelected = state.isSelected(date$1);
156
+ const isDisabled = state.isCellDisabled(date$1);
157
+ const isInvalid = state.isInvalid(date$1);
158
+ const isFirstSelectedAfterDisabled = !isDisabled && !isInvalid && state.isCellUnavailable(date$1.subtract({ days: 1 }));
159
+ const isLastSelectedBeforeDisabled = !isDisabled && !isInvalid && state.isCellUnavailable(date$1.add({ days: 1 }));
160
+ const dayOfWeek = date.getDayOfWeek(date$1, locale, firstDayOfWeek);
161
+ const isRangeStart = isSelected && (isFirstSelectedAfterDisabled || dayOfWeek === 0 || date$1.day === 1);
162
+ const isRangeEnd = isSelected && (isLastSelectedBeforeDisabled || dayOfWeek === 6 || date$1.day === date$1.calendar.getDaysInMonth(date$1));
163
+ return {
164
+ "data-highlighted": ouiTheme.dataAttr(isDateHighlighted),
165
+ "data-range-end": ouiTheme.dataAttr(isRangeEnd),
166
+ "data-range-start": ouiTheme.dataAttr(isRangeStart)
167
+ };
168
+ }, [date$1, dateToHighlight, firstDayOfWeek, locale, state]);
169
+ return /* @__PURE__ */ jsxRuntime.jsx(
170
+ reactAriaComponents.CalendarCell,
171
+ {
172
+ className: ouiTheme.composeRenderProps(
173
+ classNames?.cell,
174
+ (className, renderProps) => slots.cell({
175
+ className,
176
+ isMultipleMonths,
177
+ ...renderProps
178
+ })
179
+ ),
180
+ ...dataAttributes,
181
+ date: date$1
182
+ }
183
+ );
184
+ };
185
+
186
+ exports.RangeCalendar = RangeCalendar;
187
+ exports.RangeCalendarCell = RangeCalendarCell;
188
+ exports.RangeCalendarStateWrapper = RangeCalendarStateWrapper;