@opengovsg/oui 0.0.13 → 0.0.14

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 (146) hide show
  1. package/dist/cjs/badge/badge.cjs +4 -4
  2. package/dist/cjs/badge/use-badge.cjs +6 -6
  3. package/dist/cjs/banner/banner.cjs +4 -4
  4. package/dist/cjs/button/button.cjs +3 -3
  5. package/dist/cjs/calendar/calendar-bottom-content.cjs +2 -2
  6. package/dist/cjs/calendar/calendar-header.cjs +2 -2
  7. package/dist/cjs/calendar/calendar-month-day-selector.cjs +2 -2
  8. package/dist/cjs/calendar/calendar.cjs +4 -4
  9. package/dist/cjs/calendar/hooks/use-calendar-selectors.cjs +4 -4
  10. package/dist/cjs/calendar/utils.cjs +3 -3
  11. package/dist/cjs/checkbox/checkbox-group-style-context.cjs +16 -0
  12. package/dist/cjs/checkbox/checkbox.cjs +94 -0
  13. package/dist/cjs/checkbox/index.cjs +12 -0
  14. package/dist/cjs/combo-box/combo-box-fuzzy.cjs +6 -6
  15. package/dist/cjs/combo-box/combo-box-item.cjs +2 -2
  16. package/dist/cjs/combo-box/combo-box.cjs +3 -3
  17. package/dist/cjs/date-field/date-field.cjs +3 -3
  18. package/dist/cjs/date-picker/date-picker.cjs +6 -5
  19. package/dist/cjs/date-range-picker/date-range-picker.cjs +5 -5
  20. package/dist/cjs/govt-banner/govt-banner.cjs +3 -3
  21. package/dist/cjs/hooks/use-callback-ref.cjs +4 -4
  22. package/dist/cjs/hooks/use-controllable-state.cjs +2 -2
  23. package/dist/cjs/index.cjs +51 -34
  24. package/dist/cjs/input/input.cjs +2 -2
  25. package/dist/cjs/menu/menu.cjs +6 -6
  26. package/dist/cjs/node_modules/.pnpm/@react-aria_focus@3.20.5_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/focus/dist/useFocusRing.cjs +45 -0
  27. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/context.cjs +21 -0
  28. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/textSelection.cjs +72 -0
  29. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useFocus.cjs +60 -0
  30. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useFocusVisible.cjs +210 -0
  31. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useFocusWithin.cjs +100 -0
  32. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useHover.cjs +152 -0
  33. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/usePress.cjs +676 -0
  34. package/dist/cjs/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/utils.cjs +160 -0
  35. package/dist/cjs/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_check_private_redeclaration.cjs +9 -0
  36. package/dist/cjs/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.cjs +9 -0
  37. package/dist/cjs/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.cjs +16 -0
  38. package/dist/cjs/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.cjs +9 -0
  39. package/dist/cjs/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_private_field_get.cjs +11 -0
  40. package/dist/cjs/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_private_field_init.cjs +10 -0
  41. package/dist/cjs/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_private_field_set.cjs +12 -0
  42. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/Icon.cjs +4 -4
  43. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/createLucideIcon.cjs +3 -3
  44. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevrons-right.cjs +22 -0
  45. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/ellipsis.cjs +23 -0
  46. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/minus.cjs +19 -0
  47. package/dist/cjs/pagination/hooks/use-pagination.cjs +117 -0
  48. package/dist/cjs/pagination/index.cjs +17 -0
  49. package/dist/cjs/pagination/pagination-cursor.cjs +18 -0
  50. package/dist/cjs/pagination/pagination-item.cjs +18 -0
  51. package/dist/cjs/pagination/pagination.cjs +263 -0
  52. package/dist/cjs/pagination/use-pagination-item.cjs +87 -0
  53. package/dist/cjs/pagination/use-pagination.cjs +251 -0
  54. package/dist/cjs/range-calendar/range-calendar.cjs +7 -7
  55. package/dist/cjs/ripple/use-ripple.cjs +4 -4
  56. package/dist/cjs/select/select.cjs +3 -3
  57. package/dist/cjs/spinner/use-spinner.cjs +3 -3
  58. package/dist/cjs/system/react-utils/context.cjs +3 -3
  59. package/dist/cjs/system/react-utils/dom-props.cjs +186 -0
  60. package/dist/cjs/system/react-utils/filter-dom-props.cjs +46 -0
  61. package/dist/cjs/system/react-utils/index.cjs +2 -0
  62. package/dist/cjs/system/react-utils/refs.cjs +3 -3
  63. package/dist/cjs/system/utils.cjs +3 -3
  64. package/dist/cjs/tabs/tabs.cjs +2 -2
  65. package/dist/cjs/tag-field/tag-field-item.cjs +2 -2
  66. package/dist/cjs/tag-field/tag-field-list.cjs +4 -4
  67. package/dist/cjs/tag-field/tag-field-root.cjs +14 -14
  68. package/dist/cjs/tag-field/tag-field-state-context.cjs +2 -2
  69. package/dist/cjs/tag-field/tag-field-tag-list.cjs +3 -3
  70. package/dist/cjs/tag-field/tag-field-trigger.cjs +2 -2
  71. package/dist/cjs/tag-field/tag-field.cjs +2 -2
  72. package/dist/cjs/tag-field/use-tag-field-state.cjs +6 -6
  73. package/dist/cjs/tag-field/use-tag-field.cjs +4 -4
  74. package/dist/cjs/text-area/text-area.cjs +2 -2
  75. package/dist/cjs/toggle/toggle.cjs +3 -3
  76. package/dist/esm/banner/banner.js +1 -1
  77. package/dist/esm/checkbox/checkbox-group-style-context.js +13 -0
  78. package/dist/esm/checkbox/checkbox.js +91 -0
  79. package/dist/esm/checkbox/index.js +3 -0
  80. package/dist/esm/date-picker/date-picker.js +4 -3
  81. package/dist/esm/date-range-picker/date-range-picker.js +2 -2
  82. package/dist/esm/index.js +19 -12
  83. package/dist/esm/node_modules/.pnpm/@react-aria_focus@3.20.5_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/focus/dist/useFocusRing.js +43 -0
  84. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/context.js +19 -0
  85. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/textSelection.js +69 -0
  86. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useFocus.js +58 -0
  87. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useFocusVisible.js +205 -0
  88. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useFocusWithin.js +98 -0
  89. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useHover.js +150 -0
  90. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/usePress.js +674 -0
  91. package/dist/esm/node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/utils.js +155 -0
  92. package/dist/esm/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_check_private_redeclaration.js +7 -0
  93. package/dist/esm/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js +7 -0
  94. package/dist/esm/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js +14 -0
  95. package/dist/esm/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js +7 -0
  96. package/dist/esm/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_private_field_get.js +9 -0
  97. package/dist/esm/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_private_field_init.js +8 -0
  98. package/dist/esm/node_modules/.pnpm/@swc_helpers@0.5.17/node_modules/@swc/helpers/esm/_class_private_field_set.js +10 -0
  99. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevrons-right.js +17 -0
  100. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/ellipsis.js +18 -0
  101. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/minus.js +14 -0
  102. package/dist/esm/pagination/hooks/use-pagination.js +114 -0
  103. package/dist/esm/pagination/index.js +6 -0
  104. package/dist/esm/pagination/pagination-cursor.js +16 -0
  105. package/dist/esm/pagination/pagination-item.js +16 -0
  106. package/dist/esm/pagination/pagination.js +261 -0
  107. package/dist/esm/pagination/use-pagination-item.js +85 -0
  108. package/dist/esm/pagination/use-pagination.js +248 -0
  109. package/dist/esm/range-calendar/range-calendar.js +1 -1
  110. package/dist/esm/select/select.js +1 -1
  111. package/dist/esm/system/react-utils/dom-props.js +183 -0
  112. package/dist/esm/system/react-utils/filter-dom-props.js +44 -0
  113. package/dist/esm/system/react-utils/index.js +1 -0
  114. package/dist/types/badge/badge.d.ts +3 -1
  115. package/dist/types/badge/badge.d.ts.map +1 -1
  116. package/dist/types/checkbox/checkbox-group-style-context.d.ts +6 -0
  117. package/dist/types/checkbox/checkbox-group-style-context.d.ts.map +1 -0
  118. package/dist/types/checkbox/checkbox.d.ts +19 -0
  119. package/dist/types/checkbox/checkbox.d.ts.map +1 -0
  120. package/dist/types/checkbox/index.d.ts +3 -0
  121. package/dist/types/checkbox/index.d.ts.map +1 -0
  122. package/dist/types/index.d.mts +2 -0
  123. package/dist/types/index.d.ts +2 -0
  124. package/dist/types/index.d.ts.map +1 -1
  125. package/dist/types/pagination/hooks/use-pagination.d.ts +51 -0
  126. package/dist/types/pagination/hooks/use-pagination.d.ts.map +1 -0
  127. package/dist/types/pagination/index.d.ts +7 -0
  128. package/dist/types/pagination/index.d.ts.map +1 -0
  129. package/dist/types/pagination/pagination-cursor.d.ts +9 -0
  130. package/dist/types/pagination/pagination-cursor.d.ts.map +1 -0
  131. package/dist/types/pagination/pagination-item.d.ts +5 -0
  132. package/dist/types/pagination/pagination-item.d.ts.map +1 -0
  133. package/dist/types/pagination/pagination.d.ts +5 -0
  134. package/dist/types/pagination/pagination.d.ts.map +1 -0
  135. package/dist/types/pagination/use-pagination-item.d.ts +51 -0
  136. package/dist/types/pagination/use-pagination-item.d.ts.map +1 -0
  137. package/dist/types/pagination/use-pagination.d.ts +353 -0
  138. package/dist/types/pagination/use-pagination.d.ts.map +1 -0
  139. package/dist/types/system/react-utils/context.d.ts.map +1 -1
  140. package/dist/types/system/react-utils/dom-props.d.ts +3 -0
  141. package/dist/types/system/react-utils/dom-props.d.ts.map +1 -0
  142. package/dist/types/system/react-utils/filter-dom-props.d.ts +39 -0
  143. package/dist/types/system/react-utils/filter-dom-props.d.ts.map +1 -0
  144. package/dist/types/system/react-utils/index.d.ts +1 -0
  145. package/dist/types/system/react-utils/index.d.ts.map +1 -1
  146. package/package.json +6 -4
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var $670gB$react = require('react');
7
+ var i18n = require('@react-aria/i18n');
8
+ var ouiTheme = require('@opengovsg/oui-theme');
9
+ var utils = require('../system/utils.cjs');
10
+ var usePagination$1 = require('./hooks/use-pagination.cjs');
11
+ var paginationCursor = require('./pagination-cursor.cjs');
12
+ var paginationItem = require('./pagination-item.cjs');
13
+ var usePagination = require('./use-pagination.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
+ var ellipsis = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/ellipsis.cjs');
16
+ var chevronsRight = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.0.0/node_modules/lucide-react/dist/esm/icons/chevrons-right.cjs');
17
+
18
+ const Pagination = utils.forwardRef((props, ref) => {
19
+ const {
20
+ Component,
21
+ dotsJump,
22
+ slots,
23
+ classNames,
24
+ total,
25
+ range,
26
+ loop,
27
+ activePage,
28
+ disableCursorAnimation,
29
+ disableAnimation,
30
+ renderItem: renderItemProp,
31
+ onNext,
32
+ onPrevious,
33
+ setPage,
34
+ getItemAriaLabel,
35
+ getItemRef,
36
+ getBaseProps,
37
+ getWrapperProps,
38
+ getItemProps,
39
+ getCursorProps
40
+ } = usePagination.usePagination({ ...props, ref });
41
+ const { direction } = i18n.useLocale();
42
+ const isRTL = direction === "rtl";
43
+ const renderChevronIcon = $670gB$react.useCallback(
44
+ (key) => {
45
+ if (key === usePagination$1.PaginationItemType.PREV && !isRTL || key === usePagination$1.PaginationItemType.NEXT && isRTL) {
46
+ return /* @__PURE__ */ jsxRuntime.jsx(chevronLeft.default, {});
47
+ }
48
+ return /* @__PURE__ */ jsxRuntime.jsx(
49
+ chevronLeft.default,
50
+ {
51
+ className: slots.chevronNext({
52
+ class: classNames?.chevronNext
53
+ })
54
+ }
55
+ );
56
+ },
57
+ [isRTL, slots, classNames?.chevronNext]
58
+ );
59
+ const renderPrevItem = $670gB$react.useCallback(() => {
60
+ return /* @__PURE__ */ jsxRuntime.jsx(
61
+ paginationItem.PaginationItem,
62
+ {
63
+ className: slots.prev({
64
+ class: classNames?.prev
65
+ }),
66
+ "data-slot": "prev",
67
+ getAriaLabel: getItemAriaLabel,
68
+ isDisabled: props.isDisabled || !loop && activePage === 1,
69
+ value: usePagination$1.PaginationItemType.PREV,
70
+ onPress: onPrevious,
71
+ children: renderChevronIcon(usePagination$1.PaginationItemType.PREV)
72
+ },
73
+ usePagination$1.PaginationItemType.PREV
74
+ );
75
+ }, [
76
+ slots,
77
+ classNames?.prev,
78
+ getItemAriaLabel,
79
+ props.isDisabled,
80
+ loop,
81
+ activePage,
82
+ onPrevious,
83
+ renderChevronIcon
84
+ ]);
85
+ const renderNextItem = $670gB$react.useCallback(() => {
86
+ return /* @__PURE__ */ jsxRuntime.jsx(
87
+ paginationItem.PaginationItem,
88
+ {
89
+ className: slots.next({
90
+ class: ouiTheme.cn(classNames?.next)
91
+ }),
92
+ "data-slot": "next",
93
+ getAriaLabel: getItemAriaLabel,
94
+ isDisabled: props.isDisabled || !loop && activePage === total,
95
+ value: usePagination$1.PaginationItemType.NEXT,
96
+ onPress: onNext,
97
+ children: renderChevronIcon(usePagination$1.PaginationItemType.NEXT)
98
+ },
99
+ usePagination$1.PaginationItemType.NEXT
100
+ );
101
+ }, [
102
+ slots,
103
+ classNames?.next,
104
+ getItemAriaLabel,
105
+ props.isDisabled,
106
+ loop,
107
+ activePage,
108
+ total,
109
+ onNext,
110
+ renderChevronIcon
111
+ ]);
112
+ const renderItem = $670gB$react.useCallback(
113
+ (value, index) => {
114
+ const isBefore = index < range.indexOf(activePage);
115
+ if (renderItemProp && typeof renderItemProp === "function") {
116
+ let page = typeof value == "number" ? value : index;
117
+ if (value === usePagination$1.PaginationItemType.NEXT) {
118
+ page = activePage + 1;
119
+ }
120
+ if (value === usePagination$1.PaginationItemType.PREV) {
121
+ page = activePage - 1;
122
+ }
123
+ if (value === usePagination$1.PaginationItemType.DOTS) {
124
+ page = isBefore ? activePage - dotsJump >= 1 ? activePage - dotsJump : 1 : activePage + dotsJump <= total ? activePage + dotsJump : total;
125
+ }
126
+ const itemChildren = {
127
+ [usePagination$1.PaginationItemType.PREV]: renderChevronIcon(usePagination$1.PaginationItemType.PREV),
128
+ [usePagination$1.PaginationItemType.NEXT]: renderChevronIcon(usePagination$1.PaginationItemType.NEXT),
129
+ [usePagination$1.PaginationItemType.DOTS]: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
130
+ /* @__PURE__ */ jsxRuntime.jsx(
131
+ ellipsis.default,
132
+ {
133
+ className: slots?.ellipsis({ class: classNames?.ellipsis })
134
+ }
135
+ ),
136
+ /* @__PURE__ */ jsxRuntime.jsx(
137
+ chevronsRight.default,
138
+ {
139
+ className: slots?.forwardIcon({
140
+ class: classNames?.forwardIcon
141
+ }),
142
+ "data-before": ouiTheme.dataAttr(isBefore)
143
+ }
144
+ )
145
+ ] })
146
+ };
147
+ return renderItemProp({
148
+ value,
149
+ index,
150
+ key: `${value}-${index}`,
151
+ page,
152
+ total,
153
+ children: typeof value === "number" ? value : itemChildren[value],
154
+ activePage,
155
+ dotsJump,
156
+ isBefore,
157
+ isActive: value === activePage,
158
+ isPrevious: value === activePage - 1,
159
+ isNext: value === activePage + 1,
160
+ isFirst: value === 1,
161
+ isLast: value === total,
162
+ onNext,
163
+ onPrevious,
164
+ setPage,
165
+ onPress: () => setPage(page),
166
+ ref: typeof value === "number" ? (node) => getItemRef(node, value) : void 0,
167
+ className: slots.item({ class: classNames?.item }),
168
+ getAriaLabel: getItemAriaLabel
169
+ });
170
+ }
171
+ if (value === usePagination$1.PaginationItemType.PREV) {
172
+ return renderPrevItem();
173
+ }
174
+ if (value === usePagination$1.PaginationItemType.NEXT) {
175
+ return renderNextItem();
176
+ }
177
+ if (value === usePagination$1.PaginationItemType.DOTS) {
178
+ return /* @__PURE__ */ jsxRuntime.jsxs(
179
+ paginationItem.PaginationItem,
180
+ {
181
+ className: slots.item({
182
+ class: ouiTheme.cn(classNames?.item, "group")
183
+ }),
184
+ isDisabled: props.isDisabled,
185
+ "data-slot": "item",
186
+ getAriaLabel: getItemAriaLabel,
187
+ value,
188
+ onPress: () => isBefore ? setPage(
189
+ activePage - dotsJump >= 1 ? activePage - dotsJump : 1
190
+ ) : setPage(
191
+ activePage + dotsJump <= total ? activePage + dotsJump : total
192
+ ),
193
+ children: [
194
+ /* @__PURE__ */ jsxRuntime.jsx(
195
+ ellipsis.default,
196
+ {
197
+ className: slots?.ellipsis({ class: classNames?.ellipsis })
198
+ }
199
+ ),
200
+ /* @__PURE__ */ jsxRuntime.jsx(
201
+ chevronsRight.default,
202
+ {
203
+ className: slots?.forwardIcon({ class: classNames?.forwardIcon }),
204
+ "data-before": ouiTheme.dataAttr(isRTL ? !isBefore : isBefore)
205
+ }
206
+ )
207
+ ]
208
+ },
209
+ usePagination$1.PaginationItemType.DOTS + isBefore
210
+ );
211
+ }
212
+ return /* @__PURE__ */ $670gB$react.createElement(
213
+ paginationItem.PaginationItem,
214
+ {
215
+ ...getItemProps({ value }),
216
+ key: value,
217
+ getAriaLabel: getItemAriaLabel
218
+ },
219
+ value
220
+ );
221
+ },
222
+ [
223
+ range,
224
+ activePage,
225
+ renderItemProp,
226
+ getItemProps,
227
+ getItemAriaLabel,
228
+ renderChevronIcon,
229
+ slots,
230
+ classNames?.ellipsis,
231
+ classNames?.forwardIcon,
232
+ classNames?.item,
233
+ total,
234
+ dotsJump,
235
+ onNext,
236
+ onPrevious,
237
+ setPage,
238
+ getItemRef,
239
+ renderPrevItem,
240
+ renderNextItem,
241
+ props.isDisabled,
242
+ isRTL
243
+ ]
244
+ );
245
+ if (props.isCompact) {
246
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ...getBaseProps(), children: /* @__PURE__ */ jsxRuntime.jsxs("ul", { ...getWrapperProps(), children: [
247
+ renderPrevItem(),
248
+ /* @__PURE__ */ jsxRuntime.jsxs("li", { className: slots.item({ class: classNames?.item }), children: [
249
+ "Page ",
250
+ activePage,
251
+ " of ",
252
+ total
253
+ ] }),
254
+ renderNextItem()
255
+ ] }) });
256
+ }
257
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ...getBaseProps(), children: /* @__PURE__ */ jsxRuntime.jsxs("ul", { ...getWrapperProps(), children: [
258
+ !disableCursorAnimation && !disableAnimation && /* @__PURE__ */ jsxRuntime.jsx(paginationCursor.PaginationCursor, { ...getCursorProps() }),
259
+ range.map(renderItem)
260
+ ] }) });
261
+ });
262
+
263
+ exports.Pagination = Pagination;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var $670gB$react = require('react');
6
+ var useFocusRing = require('../node_modules/.pnpm/@react-aria_focus@3.20.5_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/focus/dist/useFocusRing.cjs');
7
+ var utils = require('@react-aria/utils');
8
+ var useHover = require('../node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/useHover.cjs');
9
+ var usePress = require('../node_modules/.pnpm/@react-aria_interactions@3.25.3_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/@react-aria/interactions/dist/usePress.cjs');
10
+ var ouiTheme = require('@opengovsg/oui-theme');
11
+ var filterDomProps = require('../system/react-utils/filter-dom-props.cjs');
12
+ var refs = require('../system/react-utils/refs.cjs');
13
+
14
+ function usePaginationItem(props) {
15
+ const {
16
+ as,
17
+ ref,
18
+ value,
19
+ children,
20
+ isActive,
21
+ isDisabled,
22
+ onPress,
23
+ onClick,
24
+ getAriaLabel,
25
+ className,
26
+ ...otherProps
27
+ } = props;
28
+ const isLink = !!props?.href;
29
+ const Component = as || isLink ? "a" : "li";
30
+ const shouldFilterDOMProps = typeof Component === "string";
31
+ const domRef = refs.useDomRef(ref);
32
+ const router = utils.useRouter();
33
+ const ariaLabel = $670gB$react.useMemo(
34
+ () => isActive ? `${getAriaLabel?.(value)} active` : getAriaLabel?.(value),
35
+ [isActive, getAriaLabel, value]
36
+ );
37
+ const { isPressed, pressProps } = usePress.usePress({
38
+ isDisabled,
39
+ onPress
40
+ });
41
+ const { focusProps, isFocused, isFocusVisible } = useFocusRing.useFocusRing({});
42
+ const { isHovered, hoverProps } = useHover.useHover({ isDisabled });
43
+ const getItemProps = (props2 = {}) => {
44
+ return {
45
+ ref: domRef,
46
+ role: "button",
47
+ tabIndex: isDisabled ? -1 : 0,
48
+ "aria-label": ariaLabel,
49
+ "aria-current": ouiTheme.dataAttr(isActive),
50
+ "aria-disabled": ouiTheme.dataAttr(isDisabled),
51
+ "data-disabled": ouiTheme.dataAttr(isDisabled),
52
+ "data-active": ouiTheme.dataAttr(isActive),
53
+ "data-focus": ouiTheme.dataAttr(isFocused),
54
+ "data-hover": ouiTheme.dataAttr(isHovered),
55
+ "data-pressed": ouiTheme.dataAttr(isPressed),
56
+ "data-focus-visible": ouiTheme.dataAttr(isFocusVisible),
57
+ ...utils.mergeProps(
58
+ props2,
59
+ pressProps,
60
+ focusProps,
61
+ hoverProps,
62
+ filterDomProps.filterDOMProps(otherProps, {
63
+ enabled: shouldFilterDOMProps
64
+ })
65
+ ),
66
+ className: ouiTheme.cn(className, props2.className),
67
+ onClick: (e) => {
68
+ utils.chain(pressProps?.onClick, onClick)(e);
69
+ if (!router.isNative && e.currentTarget instanceof HTMLAnchorElement && e.currentTarget.href && // If props are applied to a router Link component, it may have already prevented default.
70
+ !e.isDefaultPrevented() && utils.shouldClientNavigate(e.currentTarget, e) && props2.href) {
71
+ e.preventDefault();
72
+ router.open(e.currentTarget, e, props2.href, props2.routerOptions);
73
+ }
74
+ }
75
+ };
76
+ };
77
+ return {
78
+ Component,
79
+ children,
80
+ ariaLabel,
81
+ isFocused,
82
+ isFocusVisible,
83
+ getItemProps
84
+ };
85
+ }
86
+
87
+ exports.usePaginationItem = usePaginationItem;
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ "use client";
3
+ 'use strict';
4
+
5
+ var $670gB$react = require('react');
6
+ var scrollIntoView = require('scroll-into-view-if-needed');
7
+ var useDeepCompare = require('use-deep-compare');
8
+ var usehooksTs = require('usehooks-ts');
9
+ var ouiTheme = require('@opengovsg/oui-theme');
10
+ var utils = require('../system/utils.cjs');
11
+ var usePagination$1 = require('./hooks/use-pagination.cjs');
12
+ var refs = require('../system/react-utils/refs.cjs');
13
+
14
+ const CURSOR_TRANSITION_TIMEOUT = 300;
15
+ function usePagination(originalProps) {
16
+ const [props, variantProps] = utils.mapPropsVariants(
17
+ originalProps,
18
+ ouiTheme.paginationStyles.variantKeys
19
+ );
20
+ const {
21
+ as,
22
+ ref,
23
+ classNames,
24
+ dotsJump = 5,
25
+ loop = false,
26
+ showControls = false,
27
+ total = 1,
28
+ initialPage = 1,
29
+ page,
30
+ siblings,
31
+ boundaries,
32
+ onChange,
33
+ className,
34
+ renderItem,
35
+ getItemAriaLabel: getItemAriaLabelProp,
36
+ ...otherProps
37
+ } = props;
38
+ const Component = as || "nav";
39
+ const domRef = refs.useDomRef(ref);
40
+ const cursorRef = $670gB$react.useRef(null);
41
+ const itemsRef = $670gB$react.useRef(null);
42
+ const cursorTimer = $670gB$react.useRef(null);
43
+ const disableAnimation = originalProps?.disableAnimation ?? false;
44
+ const disableCursorAnimation = originalProps?.disableCursorAnimation ?? disableAnimation ?? false;
45
+ function getItemsRefMap() {
46
+ if (!itemsRef.current) {
47
+ itemsRef.current = /* @__PURE__ */ new Map();
48
+ }
49
+ return itemsRef.current;
50
+ }
51
+ function getItemRef(node, value) {
52
+ const map = getItemsRefMap();
53
+ if (node) {
54
+ map.set(value, node);
55
+ } else {
56
+ map.delete(value);
57
+ }
58
+ }
59
+ const scrollTo = $670gB$react.useCallback(
60
+ (value, skipAnimation) => {
61
+ const map = getItemsRefMap();
62
+ const node = map.get(value);
63
+ if (!node || !cursorRef.current) return;
64
+ if (cursorTimer.current) {
65
+ clearTimeout(cursorTimer.current);
66
+ }
67
+ scrollIntoView(node, {
68
+ scrollMode: "always",
69
+ behavior: "smooth",
70
+ block: "start",
71
+ inline: "start",
72
+ boundary: domRef.current
73
+ });
74
+ const { offsetLeft } = node;
75
+ if (skipAnimation) {
76
+ cursorRef.current.setAttribute("data-moving", "false");
77
+ cursorRef.current.style.transform = `translateX(${offsetLeft}px) scale(1)`;
78
+ return;
79
+ }
80
+ cursorRef.current.setAttribute("data-moving", "true");
81
+ cursorRef.current.style.transform = `translateX(${offsetLeft}px) scale(1.1)`;
82
+ cursorTimer.current = setTimeout(() => {
83
+ if (cursorRef.current) {
84
+ cursorRef.current.style.transform = `translateX(${offsetLeft}px) scale(1)`;
85
+ }
86
+ cursorTimer.current = setTimeout(() => {
87
+ cursorRef.current?.setAttribute("data-moving", "false");
88
+ if (cursorTimer.current) {
89
+ clearTimeout(cursorTimer.current);
90
+ }
91
+ }, CURSOR_TRANSITION_TIMEOUT);
92
+ }, CURSOR_TRANSITION_TIMEOUT);
93
+ },
94
+ [domRef]
95
+ );
96
+ const { range, activePage, setPage, previous, next, first, last } = usePagination$1.usePagination({
97
+ page,
98
+ total,
99
+ initialPage,
100
+ siblings,
101
+ boundaries,
102
+ showControls,
103
+ onChange
104
+ });
105
+ const [setRef, isVisible] = usehooksTs.useIntersectionObserver();
106
+ $670gB$react.useEffect(() => {
107
+ if (domRef.current) {
108
+ setRef(domRef.current);
109
+ }
110
+ }, [domRef, setRef]);
111
+ const activePageRef = $670gB$react.useRef(activePage);
112
+ $670gB$react.useEffect(() => {
113
+ if (activePage && !disableAnimation && isVisible) {
114
+ scrollTo(activePage, activePage === activePageRef.current);
115
+ }
116
+ activePageRef.current = activePage;
117
+ }, [
118
+ page,
119
+ activePage,
120
+ disableAnimation,
121
+ disableCursorAnimation,
122
+ isVisible,
123
+ originalProps.dotsJump,
124
+ originalProps.isCompact,
125
+ originalProps.showControls,
126
+ scrollTo
127
+ ]);
128
+ const slots = useDeepCompare.useDeepCompareMemo(
129
+ () => ouiTheme.paginationStyles({
130
+ ...variantProps,
131
+ disableAnimation,
132
+ disableCursorAnimation
133
+ }),
134
+ [variantProps, disableCursorAnimation, disableAnimation]
135
+ );
136
+ const baseStyles = ouiTheme.cn(classNames?.base, className);
137
+ const onNext = () => {
138
+ if (loop && activePage === total) {
139
+ return first();
140
+ }
141
+ return next();
142
+ };
143
+ const onPrevious = () => {
144
+ if (loop && activePage === 1) {
145
+ return last();
146
+ }
147
+ return previous();
148
+ };
149
+ const getBaseProps = (props2 = {}) => {
150
+ return {
151
+ ref: domRef,
152
+ role: "navigation",
153
+ "aria-label": props2["aria-label"] || "pagination navigation",
154
+ "data-slot": "base",
155
+ "data-controls": ouiTheme.dataAttr(showControls),
156
+ "data-loop": ouiTheme.dataAttr(loop),
157
+ "data-dots-jump": dotsJump,
158
+ "data-total": total,
159
+ "data-active-page": activePage,
160
+ className: slots.base({ class: ouiTheme.cn(baseStyles, props2?.className) }),
161
+ ...otherProps,
162
+ ...props2
163
+ };
164
+ };
165
+ const getWrapperProps = (props2 = {}) => {
166
+ return {
167
+ "data-slot": "wrapper",
168
+ "data-disabled": ouiTheme.dataAttr(variantProps.isDisabled),
169
+ role: "none",
170
+ className: slots.wrapper({
171
+ class: ouiTheme.cn(classNames?.wrapper, props2?.className)
172
+ }),
173
+ ...props2
174
+ };
175
+ };
176
+ const getItemAriaLabel = (page2) => {
177
+ if (!page2) return;
178
+ if (getItemAriaLabelProp) {
179
+ return getItemAriaLabelProp(page2);
180
+ }
181
+ switch (page2) {
182
+ case usePagination$1.PaginationItemType.DOTS:
183
+ return "dots element";
184
+ case usePagination$1.PaginationItemType.PREV:
185
+ return "previous page button";
186
+ case usePagination$1.PaginationItemType.NEXT:
187
+ return "next page button";
188
+ case "first":
189
+ return "first page button";
190
+ case "last":
191
+ return "last page button";
192
+ default:
193
+ return `pagination item ${page2}`;
194
+ }
195
+ };
196
+ const getItemProps = (props2 = {}) => {
197
+ return {
198
+ ref: (node) => getItemRef(node, props2.value),
199
+ "aria-disabled": ouiTheme.dataAttr(variantProps.isDisabled),
200
+ "data-disabled": ouiTheme.dataAttr(variantProps.isDisabled),
201
+ "data-slot": "item",
202
+ isActive: props2.value === activePage,
203
+ className: slots.item({
204
+ class: ouiTheme.cn(classNames?.item, props2?.className)
205
+ }),
206
+ onPress: () => {
207
+ if (props2.value !== activePage) {
208
+ setPage(props2.value);
209
+ }
210
+ },
211
+ ...props2
212
+ };
213
+ };
214
+ const getCursorProps = (props2 = {}) => {
215
+ return {
216
+ ref: cursorRef,
217
+ activePage,
218
+ "data-slot": "cursor",
219
+ className: slots.cursor({
220
+ class: ouiTheme.cn(classNames?.cursor, props2?.className)
221
+ }),
222
+ ...props2
223
+ };
224
+ };
225
+ return {
226
+ Component,
227
+ showControls,
228
+ dotsJump,
229
+ slots,
230
+ classNames,
231
+ loop,
232
+ total,
233
+ range,
234
+ activePage,
235
+ getItemRef,
236
+ disableAnimation,
237
+ disableCursorAnimation,
238
+ setPage,
239
+ onPrevious,
240
+ onNext,
241
+ renderItem,
242
+ getBaseProps,
243
+ getWrapperProps,
244
+ getItemProps,
245
+ getCursorProps,
246
+ getItemAriaLabel
247
+ };
248
+ }
249
+
250
+ exports.CURSOR_TRANSITION_TIMEOUT = CURSOR_TRANSITION_TIMEOUT;
251
+ exports.usePagination = usePagination;
@@ -3,17 +3,17 @@
3
3
  'use strict';
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
- var react = require('react');
6
+ var $670gB$react = require('react');
7
7
  var date = require('@internationalized/date');
8
8
  var reactAriaComponents = require('react-aria-components');
9
9
  var useDeepCompare = require('use-deep-compare');
10
10
  var ouiTheme = require('@opengovsg/oui-theme');
11
+ var calendarStyleContext = require('../calendar/calendar-style-context.cjs');
11
12
  var agnosticCalendarStateContext = require('../calendar/agnostic-calendar-state-context.cjs');
12
13
  var calendarBottomContent = require('../calendar/calendar-bottom-content.cjs');
13
14
  var calendarGridHeader = require('../calendar/calendar-grid-header.cjs');
14
15
  var calendarHeader = require('../calendar/calendar-header.cjs');
15
16
  var utils = require('../system/utils.cjs');
16
- var calendarStyleContext = require('../calendar/calendar-style-context.cjs');
17
17
 
18
18
  const RangeCalendar = utils.forwardRefGeneric(function RangeCalendar2(originalProps, ref) {
19
19
  const [props, variantProps] = utils.mapPropsVariants(
@@ -35,7 +35,7 @@ const RangeCalendar = utils.forwardRefGeneric(function RangeCalendar2(originalPr
35
35
  () => ouiTheme.calendarStyles({ ...variantProps, isRange: true }),
36
36
  [variantProps]
37
37
  );
38
- const context = react.useMemo(
38
+ const context = $670gB$react.useMemo(
39
39
  () => ({
40
40
  slots,
41
41
  classNames,
@@ -45,7 +45,7 @@ const RangeCalendar = utils.forwardRefGeneric(function RangeCalendar2(originalPr
45
45
  [className, classNames, slots, variantProps.size]
46
46
  );
47
47
  const numberOfVisibleMonths = props.visibleDuration?.months ?? 1;
48
- const dateToHighlight = react.useMemo(() => {
48
+ const dateToHighlight = $670gB$react.useMemo(() => {
49
49
  if (props.defaultFocusedValue !== void 0) {
50
50
  return props.defaultFocusedValue;
51
51
  }
@@ -138,7 +138,7 @@ const RangeCalendar = utils.forwardRefGeneric(function RangeCalendar2(originalPr
138
138
  const RangeCalendarStateWrapper = ({
139
139
  children
140
140
  }) => {
141
- const state = react.useContext(reactAriaComponents.RangeCalendarStateContext);
141
+ const state = $670gB$react.useContext(reactAriaComponents.RangeCalendarStateContext);
142
142
  return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Provider, { values: [[agnosticCalendarStateContext.AgnosticCalendarStateContext, state]], children });
143
143
  };
144
144
  const RangeCalendarCell = ({
@@ -148,9 +148,9 @@ const RangeCalendarCell = ({
148
148
  firstDayOfWeek
149
149
  }) => {
150
150
  const { classNames, slots } = calendarStyleContext.useCalendarStyleContext();
151
- const state = react.useContext(agnosticCalendarStateContext.AgnosticCalendarStateContext);
151
+ const state = $670gB$react.useContext(agnosticCalendarStateContext.AgnosticCalendarStateContext);
152
152
  const { locale } = reactAriaComponents.useLocale();
153
- const dataAttributes = react.useMemo(() => {
153
+ const dataAttributes = $670gB$react.useMemo(() => {
154
154
  const isDateHighlighted = dateToHighlight ? date$1.compare(dateToHighlight) === 0 : false;
155
155
  const isSelected = state.isSelected(date$1);
156
156
  const isDisabled = state.isCellDisabled(date$1);
@@ -2,12 +2,12 @@
2
2
  "use client";
3
3
  'use strict';
4
4
 
5
- var react = require('react');
5
+ var $670gB$react = require('react');
6
6
  var nanoid = require('nanoid');
7
7
 
8
8
  const useRipple = () => {
9
- const [ripples, setRipples] = react.useState([]);
10
- const onPress = react.useCallback((event) => {
9
+ const [ripples, setRipples] = $670gB$react.useState([]);
10
+ const onPress = $670gB$react.useCallback((event) => {
11
11
  const trigger = event.target;
12
12
  const size = Math.max(trigger.clientWidth, trigger.clientHeight);
13
13
  setRipples((prevRipples) => [
@@ -20,7 +20,7 @@ const useRipple = () => {
20
20
  }
21
21
  ]);
22
22
  }, []);
23
- const onClear = react.useCallback((key) => {
23
+ const onClear = $670gB$react.useCallback((key) => {
24
24
  setRipples((prevState) => prevState.filter((ripple) => ripple.key !== key));
25
25
  }, []);
26
26
  return { ripples, onPress, onClear };