@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
@@ -7,9 +7,9 @@ var react = require('react');
7
7
  var utils = require('@react-aria/utils');
8
8
  var reactAriaComponents = require('react-aria-components');
9
9
  var ouiTheme = require('@opengovsg/oui-theme');
10
+ var ripple = require('../ripple/ripple.cjs');
10
11
  var useRipple = require('../ripple/use-ripple.cjs');
11
12
  var spinner = require('../spinner/spinner.cjs');
12
- var ripple = require('../ripple/ripple.cjs');
13
13
 
14
14
  const Button = react.forwardRef(
15
15
  ({
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var context = require('../system/react-utils/context.cjs');
6
+
7
+ const [AgnosticCalendarStateContext, useAgnosticCalendarStateContext] = context.createContext({
8
+ name: "AgnosticCalendarStateContext",
9
+ strict: true
10
+ });
11
+
12
+ exports.AgnosticCalendarStateContext = AgnosticCalendarStateContext;
13
+ exports.useAgnosticCalendarStateContext = useAgnosticCalendarStateContext;
@@ -0,0 +1,51 @@
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 button = require('../button/button.cjs');
9
+ var agnosticCalendarStateContext = require('./agnostic-calendar-state-context.cjs');
10
+ var calendarStyleContext = require('./calendar-style-context.cjs');
11
+ var useCalendarI18n = require('./hooks/use-calendar-i18n.cjs');
12
+
13
+ const CalendarBottomContent = ({
14
+ bottomContent,
15
+ showTodayButton
16
+ }) => {
17
+ const state = react.useContext(agnosticCalendarStateContext.AgnosticCalendarStateContext);
18
+ const { slots, classNames, size } = calendarStyleContext.useCalendarStyleContext();
19
+ const formatMessage = useCalendarI18n.useCalendarI18n();
20
+ if (bottomContent) {
21
+ return bottomContent;
22
+ }
23
+ if (!showTodayButton) {
24
+ return null;
25
+ }
26
+ return /* @__PURE__ */ jsxRuntime.jsx(
27
+ "div",
28
+ {
29
+ className: slots.bottomContentWrapper({
30
+ className: classNames?.bottomContentWrapper
31
+ }),
32
+ children: /* @__PURE__ */ jsxRuntime.jsx(
33
+ button.Button,
34
+ {
35
+ isDisabled: state.isDisabled,
36
+ variant: "clear",
37
+ color: "sub",
38
+ size,
39
+ slot: null,
40
+ className: slots.todayButton({ className: classNames?.todayButton }),
41
+ onPress: () => {
42
+ state.setFocusedDate(date.today(date.getLocalTimeZone()));
43
+ },
44
+ children: formatMessage("today")
45
+ }
46
+ )
47
+ }
48
+ );
49
+ };
50
+
51
+ exports.CalendarBottomContent = CalendarBottomContent;
@@ -0,0 +1,28 @@
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 calendarStyleContext = require('./calendar-style-context.cjs');
8
+
9
+ function CalendarGridHeader() {
10
+ const { slots, classNames } = calendarStyleContext.useCalendarStyleContext();
11
+ return /* @__PURE__ */ jsxRuntime.jsx(
12
+ reactAriaComponents.CalendarGridHeader,
13
+ {
14
+ className: slots.gridHeader({ className: classNames?.gridHeader }),
15
+ children: (day) => /* @__PURE__ */ jsxRuntime.jsx(
16
+ reactAriaComponents.CalendarHeaderCell,
17
+ {
18
+ className: slots.gridHeaderCell({
19
+ className: classNames?.gridHeaderCell
20
+ }),
21
+ children: day
22
+ }
23
+ )
24
+ }
25
+ );
26
+ }
27
+
28
+ exports.CalendarGridHeader = CalendarGridHeader;
@@ -0,0 +1,74 @@
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 button = require('../button/button.cjs');
9
+ var agnosticCalendarStateContext = require('./agnostic-calendar-state-context.cjs');
10
+ var calendarMonthDaySelector = require('./calendar-month-day-selector.cjs');
11
+ var calendarStyleContext = require('./calendar-style-context.cjs');
12
+ var utils = require('./utils.cjs');
13
+ 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');
14
+ var chevronLeft = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevron-left.cjs');
15
+
16
+ function CalendarHeader({ offsetMonths = 0 }) {
17
+ const { direction } = reactAriaComponents.useLocale();
18
+ const { slots, classNames, size } = calendarStyleContext.useCalendarStyleContext();
19
+ const state = react.useContext(agnosticCalendarStateContext.AgnosticCalendarStateContext);
20
+ const monthYearTitle = utils.useLocalizedMonthYear(
21
+ state.visibleRange.start.add({ months: offsetMonths }),
22
+ state.timeZone
23
+ );
24
+ if (offsetMonths === 0) {
25
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: slots.header({ className: classNames?.header }), children: [
26
+ /* @__PURE__ */ jsxRuntime.jsx(calendarMonthDaySelector.CalendarMonthDaySelector, {}),
27
+ /* @__PURE__ */ jsxRuntime.jsxs(
28
+ reactAriaComponents.Group,
29
+ {
30
+ className: slots.buttonGroup({ className: classNames?.buttonGroup }),
31
+ children: [
32
+ /* @__PURE__ */ jsxRuntime.jsx(
33
+ button.Button,
34
+ {
35
+ size,
36
+ isIconOnly: true,
37
+ variant: "clear",
38
+ color: "sub",
39
+ slot: "previous",
40
+ className: slots.prevButton({ className: classNames?.prevButton }),
41
+ children: direction === "rtl" ? /* @__PURE__ */ jsxRuntime.jsx(chevronRight.default, { "aria-hidden": true }) : /* @__PURE__ */ jsxRuntime.jsx(chevronLeft.default, { "aria-hidden": true })
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsxRuntime.jsx(
45
+ button.Button,
46
+ {
47
+ size,
48
+ variant: "clear",
49
+ color: "sub",
50
+ isIconOnly: true,
51
+ slot: "next",
52
+ className: slots.nextButton({
53
+ className: classNames?.nextButton
54
+ }),
55
+ children: direction === "rtl" ? /* @__PURE__ */ jsxRuntime.jsx(chevronLeft.default, { "aria-hidden": true }) : /* @__PURE__ */ jsxRuntime.jsx(chevronRight.default, { "aria-hidden": true })
56
+ }
57
+ )
58
+ ]
59
+ }
60
+ )
61
+ ] });
62
+ }
63
+ return /* @__PURE__ */ jsxRuntime.jsx(
64
+ reactAriaComponents.Heading,
65
+ {
66
+ className: slots.header({ className: classNames?.header }),
67
+ "aria-hidden": true,
68
+ level: 2,
69
+ children: monthYearTitle
70
+ }
71
+ );
72
+ }
73
+
74
+ exports.CalendarHeader = CalendarHeader;
@@ -0,0 +1,86 @@
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 select = require('../select/select.cjs');
10
+ var selectItem = require('../select/select-item.cjs');
11
+ var agnosticCalendarStateContext = require('./agnostic-calendar-state-context.cjs');
12
+ var calendarStyleContext = require('./calendar-style-context.cjs');
13
+ var useCalendarSelectors = require('./hooks/use-calendar-selectors.cjs');
14
+ var useCalendarI18n = require('./hooks/use-calendar-i18n.cjs');
15
+
16
+ const CalendarMonthDaySelector = () => {
17
+ const { slots, size, classNames } = calendarStyleContext.useCalendarStyleContext();
18
+ const state = react.useContext(agnosticCalendarStateContext.AgnosticCalendarStateContext);
19
+ const { months, years, datePartOrder } = useCalendarSelectors.useCalendarSelectors(state);
20
+ const formatMessage = useCalendarI18n.useCalendarI18n();
21
+ return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Group, { className: slots.selectors({ className: classNames?.selectors }), children: datePartOrder.map((part) => {
22
+ if (part === "month") {
23
+ return /* @__PURE__ */ jsxRuntime.jsx(
24
+ select.Select,
25
+ {
26
+ isDisabled: state.isDisabled,
27
+ size,
28
+ items: months,
29
+ variant: "clear",
30
+ classNames: {
31
+ trigger: slots.monthSelector({
32
+ className: classNames?.monthSelector
33
+ }),
34
+ list: slots.monthList({ className: classNames?.monthList }),
35
+ selectedText: slots.selectorText({
36
+ className: classNames?.selectorText
37
+ }),
38
+ popover: "min-w-[12ch]"
39
+ },
40
+ selectedKey: state.visibleRange.start.month,
41
+ "aria-label": formatMessage("selectMonth"),
42
+ onSelectionChange: (month) => {
43
+ state.setFocusedDate(
44
+ new date.CalendarDate(state.focusedDate.year, Number(month), 1)
45
+ );
46
+ },
47
+ children: (month) => /* @__PURE__ */ jsxRuntime.jsx(selectItem.SelectItem, { children: month.textValue })
48
+ },
49
+ part
50
+ );
51
+ }
52
+ return /* @__PURE__ */ jsxRuntime.jsx(
53
+ select.Select,
54
+ {
55
+ isDisabled: state.isDisabled,
56
+ size,
57
+ variant: "clear",
58
+ items: years,
59
+ classNames: {
60
+ trigger: slots.yearSelector({
61
+ className: classNames?.yearSelector
62
+ }),
63
+ list: slots.yearList({ className: classNames?.yearList }),
64
+ selectedText: slots.selectorText({
65
+ className: classNames?.selectorText
66
+ })
67
+ },
68
+ selectedKey: state.visibleRange.start.year,
69
+ "aria-label": formatMessage("selectYear"),
70
+ onSelectionChange: (year) => {
71
+ state.setFocusedDate(
72
+ new date.CalendarDate(
73
+ Number(year),
74
+ state.focusedDate.month,
75
+ state.focusedDate.day
76
+ )
77
+ );
78
+ },
79
+ children: (year) => /* @__PURE__ */ jsxRuntime.jsx(selectItem.SelectItem, { children: year.textValue })
80
+ },
81
+ part
82
+ );
83
+ }) });
84
+ };
85
+
86
+ exports.CalendarMonthDaySelector = CalendarMonthDaySelector;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var context = require('../system/react-utils/context.cjs');
6
+
7
+ const [CalendarStyleContext, useCalendarStyleContext] = context.createContext({
8
+ name: "CalendarStyleContext",
9
+ strict: true
10
+ });
11
+
12
+ exports.CalendarStyleContext = CalendarStyleContext;
13
+ exports.useCalendarStyleContext = useCalendarStyleContext;
@@ -0,0 +1,155 @@
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 utils = require('../system/utils.cjs');
12
+ var agnosticCalendarStateContext = require('./agnostic-calendar-state-context.cjs');
13
+ var calendarBottomContent = require('./calendar-bottom-content.cjs');
14
+ var calendarGridHeader = require('./calendar-grid-header.cjs');
15
+ var calendarHeader = require('./calendar-header.cjs');
16
+ var calendarStyleContext = require('./calendar-style-context.cjs');
17
+
18
+ const Calendar = utils.forwardRef(function Calendar2(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),
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.Calendar,
56
+ {
57
+ pageBehavior: "single",
58
+ ...restProps,
59
+ ref,
60
+ minValue,
61
+ maxValue,
62
+ className: reactAriaComponents.composeRenderProps(
63
+ className,
64
+ (className2, renderProps) => slots.base({
65
+ className: ouiTheme.cn(classNames?.base, className2),
66
+ ...renderProps
67
+ })
68
+ ),
69
+ children: [
70
+ /* @__PURE__ */ jsxRuntime.jsx(CalendarStateWrapper, { children: /* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.Provider, { values: [[calendarStyleContext.CalendarStyleContext, context]], children: [
71
+ /* @__PURE__ */ jsxRuntime.jsx(
72
+ "div",
73
+ {
74
+ className: slots.gridWrapper({
75
+ className: classNames?.gridWrapper
76
+ }),
77
+ children: Array.from({ length: numberOfVisibleMonths }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsxs(
78
+ "div",
79
+ {
80
+ className: slots.calendar({ className: classNames?.calendar }),
81
+ children: [
82
+ /* @__PURE__ */ jsxRuntime.jsx(calendarHeader.CalendarHeader, { offsetMonths: index }),
83
+ /* @__PURE__ */ jsxRuntime.jsxs(
84
+ reactAriaComponents.CalendarGrid,
85
+ {
86
+ className: slots.grid({ className: classNames?.grid }),
87
+ weekdayStyle,
88
+ offset: { months: index },
89
+ children: [
90
+ /* @__PURE__ */ jsxRuntime.jsx(calendarGridHeader.CalendarGridHeader, {}),
91
+ /* @__PURE__ */ jsxRuntime.jsx(
92
+ reactAriaComponents.CalendarGridBody,
93
+ {
94
+ className: slots.gridBody({
95
+ className: classNames?.gridBody
96
+ }),
97
+ children: (date) => /* @__PURE__ */ jsxRuntime.jsx(
98
+ reactAriaComponents.CalendarCell,
99
+ {
100
+ className: reactAriaComponents.composeRenderProps(
101
+ classNames?.cell,
102
+ (className2, renderProps) => slots.cell({
103
+ className: className2,
104
+ isMultipleMonths: numberOfVisibleMonths >= 2,
105
+ ...renderProps
106
+ })
107
+ ),
108
+ "data-highlighted": ouiTheme.dataAttr(
109
+ dateToHighlight ? date.compare(dateToHighlight) === 0 : false
110
+ ),
111
+ date
112
+ }
113
+ )
114
+ }
115
+ )
116
+ ]
117
+ }
118
+ )
119
+ ]
120
+ },
121
+ index
122
+ ))
123
+ }
124
+ ),
125
+ /* @__PURE__ */ jsxRuntime.jsx(
126
+ calendarBottomContent.CalendarBottomContent,
127
+ {
128
+ bottomContent,
129
+ showTodayButton
130
+ }
131
+ )
132
+ ] }) }),
133
+ errorMessage && /* @__PURE__ */ jsxRuntime.jsx(
134
+ reactAriaComponents.Text,
135
+ {
136
+ className: slots.errorMessage({
137
+ className: classNames?.errorMessage
138
+ }),
139
+ slot: "errorMessage",
140
+ children: errorMessage
141
+ }
142
+ )
143
+ ]
144
+ }
145
+ );
146
+ });
147
+ const CalendarStateWrapper = ({
148
+ children
149
+ }) => {
150
+ const state = react.useContext(reactAriaComponents.CalendarStateContext);
151
+ return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Provider, { values: [[agnosticCalendarStateContext.AgnosticCalendarStateContext, state]], children });
152
+ };
153
+
154
+ exports.Calendar = Calendar;
155
+ exports.CalendarStateWrapper = CalendarStateWrapper;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var useCalendarI18n = require('./use-calendar-i18n.cjs');
5
+ var useCalendarSelectors = require('./use-calendar-selectors.cjs');
6
+
7
+
8
+
9
+ exports.i18nStrings = useCalendarI18n.i18nStrings;
10
+ exports.useCalendarI18n = useCalendarI18n.useCalendarI18n;
11
+ exports.useCalendarSelectors = useCalendarSelectors.useCalendarSelectors;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var reactAria = require('react-aria');
5
+
6
+ const i18nStrings = {
7
+ "en-SG": {
8
+ selectMonth: "Select month",
9
+ selectYear: "Select year",
10
+ today: "Today"
11
+ },
12
+ "zh-SG": {
13
+ selectMonth: "\u9009\u62E9\u6708\u4EFD",
14
+ selectYear: "\u9009\u62E9\u5E74\u4EFD",
15
+ today: "\u4ECA\u5929"
16
+ },
17
+ "ms-SG": {
18
+ selectMonth: "Pilih bulan",
19
+ selectYear: "Pilih tahun",
20
+ today: "Hari ini"
21
+ },
22
+ "ta-SG": {
23
+ selectMonth: "\u0BAE\u0BBE\u0BA4\u0BA4\u0BCD\u0BA4\u0BC8 \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD",
24
+ selectYear: "\u0B86\u0BA3\u0BCD\u0B9F\u0BC8 \u0BA4\u0BC7\u0BB0\u0BCD\u0BA8\u0BCD\u0BA4\u0BC6\u0B9F\u0BC1\u0B95\u0BCD\u0B95\u0BB5\u0BC1\u0BAE\u0BCD",
25
+ today: "\u0B87\u0BA9\u0BCD\u0BB1\u0BC1"
26
+ }
27
+ };
28
+ const useCalendarI18n = () => {
29
+ return reactAria.useMessageFormatter(i18nStrings);
30
+ };
31
+
32
+ exports.i18nStrings = i18nStrings;
33
+ exports.useCalendarI18n = useCalendarI18n;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var react = require('react');
6
+ var reactAria = require('react-aria');
7
+ var utils = require('../utils.cjs');
8
+
9
+ const useCalendarSelectors = (state) => {
10
+ const yearRange = react.useMemo(() => {
11
+ const start = state.minValue.year ?? 1900;
12
+ const end = state.maxValue.year ?? 2100;
13
+ return { start, end };
14
+ }, [state.maxValue, state.minValue]);
15
+ const dateFormatter = reactAria.useDateFormatter(state);
16
+ const datePartOrder = react.useMemo(() => {
17
+ const parts = dateFormatter.formatToParts(
18
+ state.visibleRange.start.toDate(state.timeZone)
19
+ );
20
+ const filteredParts = parts.filter(
21
+ (part) => ["year", "month"].includes(part.type)
22
+ );
23
+ const filteredPartNames = filteredParts.map((part) => part.type);
24
+ return filteredPartNames;
25
+ }, [dateFormatter, state.timeZone, state.visibleRange.start]);
26
+ const months = utils.useGenerateLocalizedMonths(state.timeZone);
27
+ const years = utils.useGenerateLocalizedYears(
28
+ yearRange.start,
29
+ yearRange.end,
30
+ state.timeZone
31
+ );
32
+ return react.useMemo(() => {
33
+ return {
34
+ months,
35
+ years,
36
+ datePartOrder
37
+ };
38
+ }, [datePartOrder, months, years]);
39
+ };
40
+
41
+ exports.useCalendarSelectors = useCalendarSelectors;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var calendar = require('./calendar.cjs');
5
+ var calendarStyleContext = require('./calendar-style-context.cjs');
6
+ var utils = require('./utils.cjs');
7
+ var date = require('@internationalized/date');
8
+
9
+
10
+
11
+ exports.Calendar = calendar.Calendar;
12
+ exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
13
+ exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
14
+ exports.useCalendarStyleContext = calendarStyleContext.useCalendarStyleContext;
15
+ exports.getEraFormat = utils.getEraFormat;
16
+ exports.useGenerateLocalizedMonths = utils.useGenerateLocalizedMonths;
17
+ exports.useGenerateLocalizedYears = utils.useGenerateLocalizedYears;
18
+ exports.useLocalizedMonthYear = utils.useLocalizedMonthYear;
19
+ Object.defineProperty(exports, "CalendarDate", {
20
+ enumerable: true,
21
+ get: function () { return date.CalendarDate; }
22
+ });
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ 'use strict';
3
+
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var react = require('react');
5
+ var date = require('@internationalized/date');
6
+ var i18n = require('@react-aria/i18n');
7
+
8
+ function getEraFormat(date) {
9
+ return date?.calendar.identifier === "gregory" && date.era === "BC" ? "short" : void 0;
10
+ }
11
+ function useLocalizedMonthYear(date, timeZone) {
12
+ const era = getEraFormat(date);
13
+ const monthFormatter = i18n.useDateFormatter({
14
+ month: "long",
15
+ year: "numeric",
16
+ era,
17
+ calendar: date.calendar.identifier,
18
+ timeZone
19
+ });
20
+ return monthFormatter.format(date.toDate(timeZone));
21
+ }
22
+ function useGenerateLocalizedMonths(timeZone, formatterOptions) {
23
+ const formatter = i18n.useDateFormatter({
24
+ month: "long",
25
+ timeZone,
26
+ ...formatterOptions
27
+ });
28
+ return react.useMemo(() => {
29
+ return Array.from({ length: 12 }, (_, i) => {
30
+ const id = i + 1;
31
+ return {
32
+ id,
33
+ textValue: formatter.format(
34
+ new date.CalendarDate(2020, id, 1).toDate(timeZone)
35
+ )
36
+ };
37
+ });
38
+ }, [formatter, timeZone]);
39
+ }
40
+ function useGenerateLocalizedYears(yearStart, yearEnd, timeZone, formatterOptions) {
41
+ const formatter = i18n.useDateFormatter({
42
+ year: "numeric",
43
+ timeZone,
44
+ ...formatterOptions
45
+ });
46
+ return react.useMemo(() => {
47
+ return Array.from({ length: yearEnd - yearStart + 1 }, (_, i) => {
48
+ const year = yearStart + i;
49
+ return {
50
+ id: year,
51
+ textValue: formatter.format(
52
+ new date.CalendarDate(year, 1, 1).toDate(timeZone)
53
+ )
54
+ };
55
+ });
56
+ }, [formatter, yearStart, yearEnd, timeZone]);
57
+ }
58
+
59
+ exports.getEraFormat = getEraFormat;
60
+ exports.useGenerateLocalizedMonths = useGenerateLocalizedMonths;
61
+ exports.useGenerateLocalizedYears = useGenerateLocalizedYears;
62
+ exports.useLocalizedMonthYear = useLocalizedMonthYear;
@@ -81,7 +81,7 @@ function ComboBoxFuzzy(originalProps) {
81
81
  },
82
82
  [onInputChangeProp, preparedItems]
83
83
  );
84
- const comboboxItemStyles = ouiTheme.comboBoxItemStyles(variantProps);
84
+ const itemStyles = ouiTheme.listBoxItemStyles(variantProps);
85
85
  return /* @__PURE__ */ jsxRuntime.jsx(
86
86
  comboBox.ComboBox,
87
87
  {
@@ -95,7 +95,7 @@ function ComboBoxFuzzy(originalProps) {
95
95
  /* @__PURE__ */ jsxRuntime.jsx(
96
96
  reactAriaComponents.Text,
97
97
  {
98
- className: comboboxItemStyles.label({
98
+ className: itemStyles.label({
99
99
  className: itemClassNames?.label
100
100
  }),
101
101
  slot: "label",
@@ -114,7 +114,7 @@ function ComboBoxFuzzy(originalProps) {
114
114
  item.description && /* @__PURE__ */ jsxRuntime.jsx(
115
115
  reactAriaComponents.Text,
116
116
  {
117
- className: comboboxItemStyles.description({
117
+ className: itemStyles.description({
118
118
  className: itemClassNames?.description
119
119
  }),
120
120
  slot: "description",
@@ -18,8 +18,8 @@ const ComboBoxItem = utils.forwardRef(function ComboBoxItem2(originalProps, ref)
18
18
  const [
19
19
  { className, description, children, classNames, ...props },
20
20
  variantProps
21
- ] = utils.mapPropsVariants(originalProps, ouiTheme.comboBoxItemStyles.variantKeys);
22
- const styles = ouiTheme.comboBoxItemStyles(variantProps);
21
+ ] = utils.mapPropsVariants(originalProps, ouiTheme.listBoxItemStyles.variantKeys);
22
+ const styles = ouiTheme.listBoxItemStyles(variantProps);
23
23
  const defaultTextValue = react.useMemo(() => {
24
24
  if (props.textValue) {
25
25
  return props.textValue;