@opengovsg/oui 0.0.9 → 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 (111) 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 +0 -25
  8. package/dist/cjs/calendar/calendar.cjs +143 -4
  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 +1 -1
  13. package/dist/cjs/combo-box/combo-box-fuzzy.cjs +3 -3
  14. package/dist/cjs/combo-box/combo-box-item.cjs +2 -2
  15. package/dist/cjs/combo-box/combo-box.cjs +3 -2
  16. package/dist/cjs/index.cjs +38 -23
  17. package/dist/cjs/menu/index.cjs +15 -0
  18. package/dist/cjs/menu/menu.cjs +229 -0
  19. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/check.cjs +19 -0
  20. package/dist/cjs/popover/index.cjs +8 -0
  21. package/dist/cjs/popover/popover.cjs +46 -0
  22. package/dist/cjs/range-calendar/index.cjs +10 -0
  23. package/dist/cjs/range-calendar/range-calendar.cjs +188 -0
  24. package/dist/cjs/select/select.cjs +4 -1
  25. package/dist/cjs/system/react-utils/context.cjs +3 -2
  26. package/dist/cjs/tag-field/tag-field-item.cjs +8 -3
  27. package/dist/cjs/tag-field/tag-field.cjs +2 -1
  28. package/dist/esm/button/button.js +1 -1
  29. package/dist/esm/calendar/agnostic-calendar-state-context.js +10 -0
  30. package/dist/esm/calendar/calendar-bottom-content.js +49 -0
  31. package/dist/esm/calendar/calendar-grid-header.js +26 -0
  32. package/dist/esm/calendar/calendar-header.js +72 -0
  33. package/dist/esm/calendar/calendar-month-day-selector.js +84 -0
  34. package/dist/esm/calendar/calendar-style-context.js +1 -25
  35. package/dist/esm/calendar/calendar.js +147 -9
  36. package/dist/esm/calendar/hooks/index.js +3 -0
  37. package/dist/esm/calendar/hooks/use-calendar-i18n.js +30 -0
  38. package/dist/esm/calendar/hooks/use-calendar-selectors.js +39 -0
  39. package/dist/esm/calendar/index.js +2 -2
  40. package/dist/esm/combo-box/combo-box-fuzzy.js +4 -4
  41. package/dist/esm/combo-box/combo-box-item.js +3 -3
  42. package/dist/esm/combo-box/combo-box.js +4 -3
  43. package/dist/esm/index.js +15 -12
  44. package/dist/esm/menu/index.js +2 -0
  45. package/dist/esm/menu/menu.js +220 -0
  46. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/check.js +14 -0
  47. package/dist/esm/popover/index.js +2 -0
  48. package/dist/esm/popover/popover.js +44 -0
  49. package/dist/esm/range-calendar/index.js +2 -0
  50. package/dist/esm/range-calendar/range-calendar.js +184 -0
  51. package/dist/esm/select/select.js +5 -2
  52. package/dist/esm/system/react-utils/context.js +3 -2
  53. package/dist/esm/tag-field/tag-field-item.js +9 -4
  54. package/dist/esm/tag-field/tag-field.js +3 -2
  55. package/dist/types/calendar/agnostic-calendar-state-context.d.ts +3 -0
  56. package/dist/types/calendar/agnostic-calendar-state-context.d.ts.map +1 -0
  57. package/dist/types/calendar/calendar-bottom-content.d.ts +4 -0
  58. package/dist/types/calendar/calendar-bottom-content.d.ts.map +1 -0
  59. package/dist/types/calendar/calendar-grid-header.d.ts +2 -0
  60. package/dist/types/calendar/calendar-grid-header.d.ts.map +1 -0
  61. package/dist/types/calendar/calendar-header.d.ts +6 -0
  62. package/dist/types/calendar/calendar-header.d.ts.map +1 -0
  63. package/dist/types/calendar/calendar-month-day-selector.d.ts +2 -0
  64. package/dist/types/calendar/calendar-month-day-selector.d.ts.map +1 -0
  65. package/dist/types/calendar/calendar-style-context.d.ts +10 -1030
  66. package/dist/types/calendar/calendar-style-context.d.ts.map +1 -1
  67. package/dist/types/calendar/calendar.d.ts +5 -2
  68. package/dist/types/calendar/calendar.d.ts.map +1 -1
  69. package/dist/types/calendar/hooks/index.d.ts +3 -0
  70. package/dist/types/calendar/hooks/index.d.ts.map +1 -0
  71. package/dist/types/calendar/hooks/use-calendar-i18n.d.ts +4 -0
  72. package/dist/types/calendar/hooks/use-calendar-i18n.d.ts.map +1 -0
  73. package/dist/types/calendar/hooks/use-calendar-selectors.d.ts +13 -0
  74. package/dist/types/calendar/hooks/use-calendar-selectors.d.ts.map +1 -0
  75. package/dist/types/calendar/types.d.ts +5 -4
  76. package/dist/types/calendar/types.d.ts.map +1 -1
  77. package/dist/types/combo-box/combo-box-fuzzy.d.ts +2 -2
  78. package/dist/types/combo-box/combo-box-fuzzy.d.ts.map +1 -1
  79. package/dist/types/combo-box/combo-box-item.d.ts +3 -3
  80. package/dist/types/combo-box/combo-box-item.d.ts.map +1 -1
  81. package/dist/types/combo-box/combo-box.d.ts.map +1 -1
  82. package/dist/types/index.d.mts +3 -0
  83. package/dist/types/index.d.ts +3 -0
  84. package/dist/types/index.d.ts.map +1 -1
  85. package/dist/types/menu/index.d.ts +2 -0
  86. package/dist/types/menu/index.d.ts.map +1 -0
  87. package/dist/types/menu/menu.d.ts +38 -0
  88. package/dist/types/menu/menu.d.ts.map +1 -0
  89. package/dist/types/popover/index.d.ts +2 -0
  90. package/dist/types/popover/index.d.ts.map +1 -0
  91. package/dist/types/popover/popover.d.ts +21 -0
  92. package/dist/types/popover/popover.d.ts.map +1 -0
  93. package/dist/types/range-calendar/index.d.ts +2 -0
  94. package/dist/types/range-calendar/index.d.ts.map +1 -0
  95. package/dist/types/range-calendar/range-calendar.d.ts +69 -0
  96. package/dist/types/range-calendar/range-calendar.d.ts.map +1 -0
  97. package/dist/types/select/select.d.ts +4 -3
  98. package/dist/types/select/select.d.ts.map +1 -1
  99. package/dist/types/system/react-utils/context.d.ts +3 -2
  100. package/dist/types/system/react-utils/context.d.ts.map +1 -1
  101. package/dist/types/tag-field/tag-field-item.d.ts +2 -2
  102. package/dist/types/tag-field/tag-field-item.d.ts.map +1 -1
  103. package/dist/types/tag-field/tag-field-tag-list.d.ts.map +1 -1
  104. package/dist/types/tag-field/tag-field.d.ts.map +1 -1
  105. package/dist/types/tag-field/types.d.ts +3 -3
  106. package/dist/types/tag-field/types.d.ts.map +1 -1
  107. package/package.json +5 -5
  108. package/dist/cjs/calendar/calendar-base.cjs +0 -347
  109. package/dist/esm/calendar/calendar-base.js +0 -343
  110. package/dist/types/calendar/calendar-base.d.ts +0 -14
  111. package/dist/types/calendar/calendar-base.d.ts.map +0 -1
@@ -1,55 +1,64 @@
1
1
  "use strict";
2
2
  'use strict';
3
3
 
4
- var useControllableState = require('./hooks/use-controllable-state.cjs');
5
- var button = require('./button/button.cjs');
6
- var govtBanner = require('./govt-banner/govt-banner.cjs');
7
4
  var ripple = require('./ripple/ripple.cjs');
8
5
  var useRipple = require('./ripple/use-ripple.cjs');
9
6
  var spinner = require('./spinner/spinner.cjs');
10
7
  var useSpinner = require('./spinner/use-spinner.cjs');
11
8
  var toggle = require('./toggle/toggle.cjs');
12
9
  var skipNavLink = require('./skip-nav-link/skip-nav-link.cjs');
13
- var input = require('./input/input.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');
18
- var comboBox = require('./combo-box/combo-box.cjs');
19
- var comboBoxFuzzy = require('./combo-box/combo-box-fuzzy.cjs');
20
- var comboBoxItem = require('./combo-box/combo-box-item.cjs');
21
- var comboBoxVariantContext = require('./combo-box/combo-box-variant-context.cjs');
22
- var banner = require('./banner/banner.cjs');
23
13
  var tagField = require('./tag-field/tag-field.cjs');
24
14
  var tagFieldItem = require('./tag-field/tag-field-item.cjs');
25
15
  var select = require('./select/select.cjs');
26
16
  var selectItem = require('./select/select-item.cjs');
27
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');
23
+ var comboBox = require('./combo-box/combo-box.cjs');
24
+ var comboBoxFuzzy = require('./combo-box/combo-box-fuzzy.cjs');
25
+ var comboBoxItem = require('./combo-box/combo-box-item.cjs');
26
+ var comboBoxVariantContext = require('./combo-box/combo-box-variant-context.cjs');
27
+ var banner = require('./banner/banner.cjs');
28
28
  var badge = require('./badge/badge.cjs');
29
29
  var date = require('@internationalized/date');
30
30
  var calendar = require('./calendar/calendar.cjs');
31
31
  var calendarStyleContext = require('./calendar/calendar-style-context.cjs');
32
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');
33
36
 
34
37
 
35
38
 
36
- exports.useControllableState = useControllableState.useControllableState;
37
- exports.Button = button.Button;
38
- exports.GovtBanner = govtBanner.GovtBanner;
39
39
  exports.Ripple = ripple.Ripple;
40
40
  exports.useRipple = useRipple.useRipple;
41
41
  exports.Spinner = spinner.Spinner;
42
42
  exports.useSpinner = useSpinner.useSpinner;
43
43
  exports.Toggle = toggle.Toggle;
44
44
  exports.SkipNavLink = skipNavLink.SkipNavLink;
45
- exports.Input = input.Input;
46
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;
47
58
  exports.Description = field.Description;
48
59
  exports.FieldError = field.FieldError;
49
60
  exports.FieldGroup = field.FieldGroup;
50
61
  exports.Label = field.Label;
51
- exports.TextArea = textArea.TextArea;
52
- exports.TextAreaField = textAreaField.TextAreaField;
53
62
  exports.ComboBox = comboBox.ComboBox;
54
63
  exports.ComboBoxEmptyState = comboBox.ComboBoxEmptyState;
55
64
  exports.ComboBoxFuzzy = comboBoxFuzzy.ComboBoxFuzzy;
@@ -57,22 +66,28 @@ exports.ComboBoxItem = comboBoxItem.ComboBoxItem;
57
66
  exports.ComboBoxVariantContext = comboBoxVariantContext.ComboBoxVariantContext;
58
67
  exports.useComboBoxVariantContext = comboBoxVariantContext.useComboBoxVariantContext;
59
68
  exports.Banner = banner.Banner;
60
- exports.TagField = tagField.TagField;
61
- exports.TagFieldItem = tagFieldItem.TagFieldItem;
62
- exports.Select = select.Select;
63
- exports.SelectItem = selectItem.SelectItem;
64
- exports.SelectVariantContext = selectVariantContext.SelectVariantContext;
65
- exports.useSelectVariantContext = selectVariantContext.useSelectVariantContext;
66
69
  exports.Badge = badge.Badge;
67
70
  Object.defineProperty(exports, "CalendarDate", {
68
71
  enumerable: true,
69
72
  get: function () { return date.CalendarDate; }
70
73
  });
71
74
  exports.Calendar = calendar.Calendar;
75
+ exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
72
76
  exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
73
77
  exports.useCalendarStyleContext = calendarStyleContext.useCalendarStyleContext;
74
- exports.useProvideCalendarStyles = calendarStyleContext.useProvideCalendarStyles;
75
78
  exports.getEraFormat = utils.getEraFormat;
76
79
  exports.useGenerateLocalizedMonths = utils.useGenerateLocalizedMonths;
77
80
  exports.useGenerateLocalizedYears = utils.useGenerateLocalizedYears;
78
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;
@@ -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: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
16
+ const Check = createLucideIcon.default("Check", __iconNode);
17
+
18
+ exports.__iconNode = __iconNode;
19
+ exports.default = Check;
@@ -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;
@@ -10,6 +10,7 @@ var utils = require('../system/utils.cjs');
10
10
  var selectVariantContext = require('./select-variant-context.cjs');
11
11
  var field = require('../field/field.cjs');
12
12
  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');
13
+ var popover = require('../popover/popover.cjs');
13
14
  var button = require('../button/button.cjs');
14
15
 
15
16
  const calculateEstimatedRowHeight = (size) => {
@@ -26,6 +27,7 @@ function Select({
26
27
  label,
27
28
  description,
28
29
  classNames,
30
+ errorMessage,
29
31
  ...originalProps
30
32
  }) {
31
33
  const [_props, variantProps] = utils.mapPropsVariants(
@@ -90,7 +92,8 @@ function Select({
90
92
  children: description
91
93
  }
92
94
  ),
93
- /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Popover, { className: styles.popover({ className: classNames?.popover }), children: /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Virtualizer, { layout: reactAriaComponents.ListLayout, layoutOptions, children: /* @__PURE__ */ jsxRuntime.jsx(
95
+ /* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { size: variantProps.size, className: classNames?.error, children: errorMessage }),
96
+ /* @__PURE__ */ jsxRuntime.jsx(popover.Popover, { className: styles.popover({ className: classNames?.popover }), children: /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Virtualizer, { layout: reactAriaComponents.ListLayout, layoutOptions, children: /* @__PURE__ */ jsxRuntime.jsx(
94
97
  reactAriaComponents.ListBox,
95
98
  {
96
99
  autoFocus: true,
@@ -7,9 +7,10 @@ function createContext(options = {}) {
7
7
  const {
8
8
  strict = true,
9
9
  errorMessage = "useContext: `context` is undefined. Seems you forgot to wrap component within the Provider",
10
- name
10
+ name,
11
+ defaultValue
11
12
  } = options;
12
- const Context = react.createContext(void 0);
13
+ const Context = react.createContext(defaultValue);
13
14
  Context.displayName = name;
14
15
  function useContext() {
15
16
  const context = react.useContext(Context);