@opengovsg/oui 0.0.28 → 0.0.30

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 (165) 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 +4 -4
  5. package/dist/cjs/calendar/calendar-bottom-content.cjs +3 -3
  6. package/dist/cjs/calendar/calendar-header.cjs +2 -2
  7. package/dist/cjs/calendar/calendar-month-day-selector.cjs +4 -4
  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.cjs +1 -1
  12. package/dist/cjs/combo-box/combo-box-fuzzy.cjs +6 -6
  13. package/dist/cjs/combo-box/combo-box-item.cjs +2 -2
  14. package/dist/cjs/combo-box/combo-box.cjs +5 -5
  15. package/dist/cjs/date-field/date-field.cjs +4 -4
  16. package/dist/cjs/date-picker/date-picker.cjs +7 -6
  17. package/dist/cjs/date-range-picker/date-range-picker.cjs +8 -8
  18. package/dist/cjs/field/field.cjs +2 -2
  19. package/dist/cjs/file-dropzone/file-dropzone.cjs +23 -19
  20. package/dist/cjs/file-dropzone/file-info.cjs +6 -5
  21. package/dist/cjs/file-dropzone/utils.cjs +4 -4
  22. package/dist/cjs/govt-banner/govt-banner.cjs +3 -3
  23. package/dist/cjs/hooks/use-callback-ref.cjs +4 -4
  24. package/dist/cjs/hooks/use-controllable-state.cjs +2 -2
  25. package/dist/cjs/hooks/use-draggable.cjs +8 -8
  26. package/dist/cjs/hooks/use-scroll-position.cjs +53 -0
  27. package/dist/cjs/index.cjs +38 -19
  28. package/dist/cjs/input/input.cjs +2 -2
  29. package/dist/cjs/menu/menu.cjs +8 -8
  30. package/dist/cjs/modal/modal-body.cjs +2 -2
  31. package/dist/cjs/modal/modal-content.cjs +4 -4
  32. package/dist/cjs/modal/modal-footer.cjs +2 -2
  33. package/dist/cjs/modal/modal-header.cjs +2 -2
  34. package/dist/cjs/modal/modal.cjs +3 -3
  35. package/dist/cjs/navbar/index.cjs +25 -0
  36. package/dist/cjs/navbar/navbar-brand.cjs +28 -0
  37. package/dist/cjs/navbar/navbar-content.cjs +33 -0
  38. package/dist/cjs/navbar/navbar-context.cjs +14 -0
  39. package/dist/cjs/navbar/navbar-item.cjs +29 -0
  40. package/dist/cjs/navbar/navbar-menu/i18n.cjs +23 -0
  41. package/dist/cjs/navbar/navbar-menu/item.cjs +44 -0
  42. package/dist/cjs/navbar/navbar-menu/menu.cjs +62 -0
  43. package/dist/cjs/navbar/navbar-menu/toggle.cjs +95 -0
  44. package/dist/cjs/navbar/navbar.cjs +50 -0
  45. package/dist/cjs/navbar/use-navbar.cjs +126 -0
  46. package/dist/cjs/node_modules/.pnpm/@react-aria_overlays@3.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@react-aria/overlays/dist/Overlay.cjs +55 -0
  47. package/dist/cjs/node_modules/.pnpm/@react-aria_overlays@3.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@react-aria/overlays/dist/PortalProvider.cjs +23 -0
  48. package/dist/cjs/node_modules/.pnpm/@react-aria_overlays@3.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@react-aria/overlays/dist/usePreventScroll.cjs +208 -0
  49. package/dist/cjs/node_modules/.pnpm/@react-aria_ssr@3.9.10_react@19.2.3/node_modules/@react-aria/ssr/dist/SSRProvider.cjs +104 -0
  50. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/Icon.cjs +4 -4
  51. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/createLucideIcon.cjs +3 -3
  52. package/dist/cjs/number-field/number-field.cjs +2 -2
  53. package/dist/cjs/pagination/hooks/use-pagination.cjs +7 -7
  54. package/dist/cjs/pagination/pagination.cjs +6 -6
  55. package/dist/cjs/pagination/use-pagination-item.cjs +3 -3
  56. package/dist/cjs/pagination/use-pagination.cjs +8 -8
  57. package/dist/cjs/range-calendar/range-calendar.cjs +7 -7
  58. package/dist/cjs/ripple/use-ripple.cjs +4 -4
  59. package/dist/cjs/select/select.cjs +5 -5
  60. package/dist/cjs/spinner/use-spinner.cjs +3 -3
  61. package/dist/cjs/system/react-utils/children.cjs +26 -0
  62. package/dist/cjs/system/react-utils/context.cjs +3 -3
  63. package/dist/cjs/system/react-utils/refs.cjs +3 -3
  64. package/dist/cjs/system/utils.cjs +2 -2
  65. package/dist/cjs/tabs/tabs.cjs +2 -2
  66. package/dist/cjs/tag-field/tag-field-item.cjs +2 -2
  67. package/dist/cjs/tag-field/tag-field-list.cjs +4 -4
  68. package/dist/cjs/tag-field/tag-field-root.cjs +14 -14
  69. package/dist/cjs/tag-field/tag-field-state-context.cjs +2 -2
  70. package/dist/cjs/tag-field/tag-field-tag-list.cjs +3 -3
  71. package/dist/cjs/tag-field/tag-field-trigger.cjs +2 -2
  72. package/dist/cjs/tag-field/tag-field.cjs +4 -4
  73. package/dist/cjs/tag-field/use-tag-field-state.cjs +6 -6
  74. package/dist/cjs/tag-field/use-tag-field.cjs +4 -4
  75. package/dist/cjs/text-area/text-area.cjs +2 -2
  76. package/dist/cjs/text-area-field/text-area-field.cjs +1 -1
  77. package/dist/cjs/text-field/text-field.cjs +1 -1
  78. package/dist/cjs/toast/toast.cjs +1 -1
  79. package/dist/cjs/toggle/toggle.cjs +3 -3
  80. package/dist/esm/banner/banner.js +1 -1
  81. package/dist/esm/button/button.js +1 -1
  82. package/dist/esm/calendar/calendar-month-day-selector.js +2 -2
  83. package/dist/esm/checkbox/checkbox.js +1 -1
  84. package/dist/esm/combo-box/combo-box.js +2 -2
  85. package/dist/esm/date-field/date-field.js +1 -1
  86. package/dist/esm/date-picker/date-picker.js +5 -4
  87. package/dist/esm/date-range-picker/date-range-picker.js +5 -5
  88. package/dist/esm/file-dropzone/file-dropzone.js +13 -9
  89. package/dist/esm/file-dropzone/file-info.js +3 -2
  90. package/dist/esm/file-dropzone/utils.js +4 -4
  91. package/dist/esm/hooks/use-scroll-position.js +51 -0
  92. package/dist/esm/index.js +17 -8
  93. package/dist/esm/menu/menu.js +2 -2
  94. package/dist/esm/modal/modal-content.js +1 -1
  95. package/dist/esm/navbar/index.js +10 -0
  96. package/dist/esm/navbar/navbar-brand.js +26 -0
  97. package/dist/esm/navbar/navbar-content.js +31 -0
  98. package/dist/esm/navbar/navbar-context.js +11 -0
  99. package/dist/esm/navbar/navbar-item.js +27 -0
  100. package/dist/esm/navbar/navbar-menu/i18n.js +21 -0
  101. package/dist/esm/navbar/navbar-menu/item.js +42 -0
  102. package/dist/esm/navbar/navbar-menu/menu.js +60 -0
  103. package/dist/esm/navbar/navbar-menu/toggle.js +93 -0
  104. package/dist/esm/navbar/navbar.js +48 -0
  105. package/dist/esm/navbar/use-navbar.js +124 -0
  106. package/dist/esm/node_modules/.pnpm/@react-aria_overlays@3.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@react-aria/overlays/dist/Overlay.js +52 -0
  107. package/dist/esm/node_modules/.pnpm/@react-aria_overlays@3.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@react-aria/overlays/dist/PortalProvider.js +20 -0
  108. package/dist/esm/node_modules/.pnpm/@react-aria_overlays@3.30.0_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/@react-aria/overlays/dist/usePreventScroll.js +206 -0
  109. package/dist/esm/node_modules/.pnpm/@react-aria_ssr@3.9.10_react@19.2.3/node_modules/@react-aria/ssr/dist/SSRProvider.js +102 -0
  110. package/dist/esm/number-field/number-field.js +2 -2
  111. package/dist/esm/pagination/use-pagination-item.js +1 -1
  112. package/dist/esm/range-calendar/range-calendar.js +1 -1
  113. package/dist/esm/select/select.js +3 -3
  114. package/dist/esm/system/react-utils/children.js +23 -0
  115. package/dist/esm/tag-field/tag-field.js +2 -2
  116. package/dist/esm/text-area-field/text-area-field.js +1 -1
  117. package/dist/esm/text-field/text-field.js +1 -1
  118. package/dist/esm/toast/toast.js +1 -1
  119. package/dist/types/calendar/calendar.d.ts.map +1 -1
  120. package/dist/types/date-field/date-field.d.ts.map +1 -1
  121. package/dist/types/file-dropzone/file-dropzone.d.ts +8 -2
  122. package/dist/types/file-dropzone/file-dropzone.d.ts.map +1 -1
  123. package/dist/types/file-dropzone/file-info.d.ts.map +1 -1
  124. package/dist/types/file-dropzone/types.d.ts +1 -0
  125. package/dist/types/file-dropzone/types.d.ts.map +1 -1
  126. package/dist/types/file-dropzone/utils.d.ts +2 -1
  127. package/dist/types/file-dropzone/utils.d.ts.map +1 -1
  128. package/dist/types/hooks/use-scroll-position.d.ts +29 -0
  129. package/dist/types/hooks/use-scroll-position.d.ts.map +1 -0
  130. package/dist/types/index.d.mts +1 -0
  131. package/dist/types/index.d.ts +1 -0
  132. package/dist/types/index.d.ts.map +1 -1
  133. package/dist/types/menu/menu.d.ts.map +1 -1
  134. package/dist/types/navbar/index.d.ts +17 -0
  135. package/dist/types/navbar/index.d.ts.map +1 -0
  136. package/dist/types/navbar/navbar-brand.d.ts +6 -0
  137. package/dist/types/navbar/navbar-brand.d.ts.map +1 -0
  138. package/dist/types/navbar/navbar-content.d.ts +14 -0
  139. package/dist/types/navbar/navbar-content.d.ts.map +1 -0
  140. package/dist/types/navbar/navbar-context.d.ts +182 -0
  141. package/dist/types/navbar/navbar-context.d.ts.map +1 -0
  142. package/dist/types/navbar/navbar-item.d.ts +11 -0
  143. package/dist/types/navbar/navbar-item.d.ts.map +1 -0
  144. package/dist/types/navbar/navbar-menu/i18n.d.ts +3 -0
  145. package/dist/types/navbar/navbar-menu/i18n.d.ts.map +1 -0
  146. package/dist/types/navbar/navbar-menu/item.d.ts +16 -0
  147. package/dist/types/navbar/navbar-menu/item.d.ts.map +1 -0
  148. package/dist/types/navbar/navbar-menu/menu.d.ts +11 -0
  149. package/dist/types/navbar/navbar-menu/menu.d.ts.map +1 -0
  150. package/dist/types/navbar/navbar-menu/toggle.d.ts +12 -0
  151. package/dist/types/navbar/navbar-menu/toggle.d.ts.map +1 -0
  152. package/dist/types/navbar/navbar.d.ts +6 -0
  153. package/dist/types/navbar/navbar.d.ts.map +1 -0
  154. package/dist/types/navbar/use-navbar.d.ts +163 -0
  155. package/dist/types/navbar/use-navbar.d.ts.map +1 -0
  156. package/dist/types/range-calendar/range-calendar.d.ts.map +1 -1
  157. package/dist/types/system/react-utils/children.d.ts +10 -0
  158. package/dist/types/system/react-utils/children.d.ts.map +1 -0
  159. package/dist/types/system/react-utils/index.d.ts +5 -3
  160. package/dist/types/system/react-utils/index.d.ts.map +1 -1
  161. package/dist/types/system/utils.d.ts.map +1 -1
  162. package/dist/types/tabs/tabs.d.ts.map +1 -1
  163. package/dist/types/tag-field/tag-field-item.d.ts.map +1 -1
  164. package/dist/types/tag-field/tag-field-list.d.ts.map +1 -1
  165. package/package.json +4 -4
@@ -3,19 +3,19 @@
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 form = require('@react-stately/form');
8
8
  var reactAria = require('react-aria');
9
9
  var reactAriaComponents = require('react-aria-components');
10
10
  var reactDropzone = require('react-dropzone');
11
11
  var ouiTheme = require('@opengovsg/oui-theme');
12
+ var field = require('../field/field.cjs');
13
+ var useControllableState = require('../hooks/use-controllable-state.cjs');
12
14
  var utils = require('../system/utils.cjs');
13
15
  var contexts = require('./contexts.cjs');
14
16
  var fileInfo = require('./file-info.cjs');
15
17
  var utils$1 = require('./utils.cjs');
16
- var useControllableState = require('../hooks/use-controllable-state.cjs');
17
18
  var upload = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/upload.cjs');
18
- var field = require('../field/field.cjs');
19
19
 
20
20
  const FileDropzone = (originalProps) => {
21
21
  const [props, variantProps] = utils.mapPropsVariants(
@@ -25,6 +25,7 @@ const FileDropzone = (originalProps) => {
25
25
  const {
26
26
  name,
27
27
  allowedMimeTypes = [],
28
+ fileSizeBase = "binary",
28
29
  maxFileSize = Number.POSITIVE_INFINITY,
29
30
  minFileSize = 0,
30
31
  showFileSizeText = true,
@@ -65,15 +66,16 @@ const FileDropzone = (originalProps) => {
65
66
  });
66
67
  const slots = ouiTheme.fileDropzoneStyles(variantProps);
67
68
  const fileSizeTextId = reactAria.useId();
68
- const formatError = react.useCallback(
69
+ const formatError = $670gB$react.useCallback(
69
70
  (error) => utils$1.formatErrorMessage(error, {
70
71
  maxFileSize,
71
72
  minFileSize,
72
- maxFiles
73
+ maxFiles,
74
+ fileSizeBase
73
75
  }),
74
- [maxFileSize, maxFiles, minFileSize]
76
+ [fileSizeBase, maxFileSize, maxFiles, minFileSize]
75
77
  );
76
- const onDrop = react.useCallback(
78
+ const onDrop = $670gB$react.useCallback(
77
79
  (acceptedFiles, fileRejections) => {
78
80
  const files = acceptedFiles;
79
81
  if (showRejectedFiles) {
@@ -91,13 +93,13 @@ const FileDropzone = (originalProps) => {
91
93
  },
92
94
  [formatError, onError, setRejections, setValue, showRejectedFiles]
93
95
  );
94
- const handleRemoveFile = react.useCallback(
96
+ const handleRemoveFile = $670gB$react.useCallback(
95
97
  (fileName) => {
96
98
  setValue((files) => files.filter((file) => file.name !== fileName));
97
99
  },
98
100
  [setValue]
99
101
  );
100
- const handleRemoveRejection = react.useCallback(
102
+ const handleRemoveRejection = $670gB$react.useCallback(
101
103
  (fileName) => {
102
104
  setRejections(
103
105
  (rejections2) => rejections2.filter((file) => file.name !== fileName)
@@ -123,30 +125,31 @@ const FileDropzone = (originalProps) => {
123
125
  maxFiles,
124
126
  multiple: maxFiles !== 1
125
127
  });
126
- const fileSizeText = react.useMemo(() => {
128
+ const fileSizeText = $670gB$react.useMemo(() => {
127
129
  const notDefaultMaxFileSize = maxFileSize !== Number.POSITIVE_INFINITY;
128
130
  const notDefaultMinFileSize = minFileSize !== 0;
129
131
  const shouldShow = showFileSizeText && (notDefaultMaxFileSize || notDefaultMinFileSize);
130
132
  if (!shouldShow) return null;
131
133
  if (notDefaultMaxFileSize && notDefaultMinFileSize) {
132
- return `File size must be between ${utils$1.formatBytes(minFileSize, 2)} and ${utils$1.formatBytes(
134
+ return `File size must be between ${utils$1.formatBytes(minFileSize, 2, fileSizeBase)} and ${utils$1.formatBytes(
133
135
  maxFileSize,
134
- 2
136
+ 2,
137
+ fileSizeBase
135
138
  )}`;
136
139
  }
137
140
  if (notDefaultMaxFileSize) {
138
- return `Maximum file size: ${utils$1.formatBytes(maxFileSize, 2)}`;
141
+ return `Maximum file size: ${utils$1.formatBytes(maxFileSize, 2, fileSizeBase)}`;
139
142
  }
140
143
  if (notDefaultMinFileSize) {
141
- return `Minimum file size: ${utils$1.formatBytes(minFileSize, 2)}`;
144
+ return `Minimum file size: ${utils$1.formatBytes(minFileSize, 2, fileSizeBase)}`;
142
145
  }
143
146
  return null;
144
- }, [maxFileSize, minFileSize, showFileSizeText]);
145
- const triggerFileSelector = react.useCallback(() => {
147
+ }, [maxFileSize, minFileSize, showFileSizeText, fileSizeBase]);
148
+ const triggerFileSelector = $670gB$react.useCallback(() => {
146
149
  if (isDisabled || isReadOnly) return;
147
150
  dropzoneState.inputRef.current?.click();
148
151
  }, [dropzoneState, isDisabled, isReadOnly]);
149
- react.useEffect(() => {
152
+ $670gB$react.useEffect(() => {
150
153
  if (value.length <= maxFiles) {
151
154
  let changed = false;
152
155
  const newFiles = value.map((file) => {
@@ -161,14 +164,14 @@ const FileDropzone = (originalProps) => {
161
164
  }
162
165
  }
163
166
  }, [maxFiles, setValue, value]);
164
- const inputProps = react.useMemo(() => {
167
+ const inputProps = $670gB$react.useMemo(() => {
165
168
  const inputProps2 = { ...fieldProps, name };
166
169
  if (fileSizeText) {
167
170
  inputProps2["aria-describedby"] = inputProps2["aria-describedby"] ? `${inputProps2["aria-describedby"]} ${fileSizeTextId}` : fileSizeTextId;
168
171
  }
169
172
  return getInputProps(inputProps2);
170
173
  }, [fieldProps, getInputProps, fileSizeTextId, name, fileSizeText]);
171
- const showDropzone = react.useMemo(() => {
174
+ const showDropzone = $670gB$react.useMemo(() => {
172
175
  if (hideDropzoneOnValue) {
173
176
  return value.length < maxFiles;
174
177
  }
@@ -187,6 +190,7 @@ const FileDropzone = (originalProps) => {
187
190
  {
188
191
  isDisabled,
189
192
  isReadOnly,
193
+ fileSizeBase,
190
194
  maxFiles,
191
195
  maxFileSize,
192
196
  showDropzone,
@@ -3,12 +3,12 @@
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 ouiTheme = require('@opengovsg/oui-theme');
8
+ var button = require('../button/button.cjs');
8
9
  var contexts = require('./contexts.cjs');
9
10
  var utils = require('./utils.cjs');
10
11
  var trash2 = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/trash-2.cjs');
11
- var button = require('../button/button.cjs');
12
12
 
13
13
  const FileInfo = ({ file, imagePreview, classNames }) => {
14
14
  const {
@@ -19,14 +19,15 @@ const FileInfo = ({ file, imagePreview, classNames }) => {
19
19
  isReadOnly
20
20
  } = contexts.useFileDropzoneStateContext();
21
21
  const { size, variant, itemClassNames } = contexts.useFileDropzoneStyleContext();
22
- const readableFileSize = utils.formatBytes(file.size, 2);
22
+ const { fileSizeBase } = contexts.useFileDropzoneStateContext();
23
+ const readableFileSize = utils.formatBytes(file.size, 2, fileSizeBase);
23
24
  const styles = ouiTheme.fileInfoDropzoneStyles({
24
25
  size,
25
26
  variant,
26
27
  imagePreview: imagePreview ?? void 0
27
28
  });
28
- const [previewSrc, setPreviewSrc] = react.useState("");
29
- react.useEffect(() => {
29
+ const [previewSrc, setPreviewSrc] = $670gB$react.useState("");
30
+ $670gB$react.useEffect(() => {
30
31
  let objectUrl = "";
31
32
  if (file.type.startsWith("image/")) {
32
33
  objectUrl = URL.createObjectURL(file);
@@ -3,8 +3,8 @@
3
3
 
4
4
  var reactDropzone = require('react-dropzone');
5
5
 
6
- const formatBytes = (bytes, decimals = 2, size) => {
7
- const k = 1e3;
6
+ const formatBytes = (bytes, decimals = 2, base = "binary", size) => {
7
+ const k = base === "binary" ? 1024 : 1e3;
8
8
  const dm = decimals < 0 ? 0 : decimals;
9
9
  const sizes = ["bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
10
10
  if (bytes === 0 || bytes === void 0)
@@ -16,9 +16,9 @@ const formatErrorMessage = (error, config) => {
16
16
  const { maxFileSize, minFileSize, maxFiles } = config;
17
17
  switch (error.code) {
18
18
  case reactDropzone.ErrorCode.FileTooLarge:
19
- return `You have exceeded the size limit, please upload a file below ${formatBytes(maxFileSize, 2)}`;
19
+ return `You have exceeded the size limit, please upload a file below ${formatBytes(maxFileSize, 2, config.fileSizeBase)}`;
20
20
  case reactDropzone.ErrorCode.FileTooSmall:
21
- return `Please upload a file above ${formatBytes(minFileSize, 2)}`;
21
+ return `Please upload a file above ${formatBytes(minFileSize, 2, config.fileSizeBase)}`;
22
22
  case reactDropzone.ErrorCode.TooManyFiles:
23
23
  return `Maximum number of files allowed is ${maxFiles}.`;
24
24
  default: {
@@ -3,7 +3,7 @@
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 reactAria = require('react-aria');
8
8
  var reactStately = require('react-stately');
9
9
  var ouiTheme = require('@opengovsg/oui-theme');
@@ -18,8 +18,8 @@ function GovtBanner({
18
18
  ...props
19
19
  }) {
20
20
  const state = reactStately.useDisclosureState(props);
21
- const panelRef = react.useRef(null);
22
- const triggerRef = react.useRef(null);
21
+ const panelRef = $670gB$react.useRef(null);
22
+ const triggerRef = $670gB$react.useRef(null);
23
23
  const { buttonProps: triggerProps, panelProps } = reactAria.useDisclosure(
24
24
  props,
25
25
  state,
@@ -2,16 +2,16 @@
2
2
  "use client";
3
3
  'use strict';
4
4
 
5
- var react = require('react');
5
+ var $670gB$react = require('react');
6
6
 
7
7
  function useCallbackRef(callback, deps = []) {
8
- const callbackRef = react.useRef(() => {
8
+ const callbackRef = $670gB$react.useRef(() => {
9
9
  throw new Error("Cannot call an event handler while rendering.");
10
10
  });
11
- react.useInsertionEffect(() => {
11
+ $670gB$react.useInsertionEffect(() => {
12
12
  callbackRef.current = callback;
13
13
  });
14
- return react.useCallback((...args) => callbackRef.current?.(...args), deps);
14
+ return $670gB$react.useCallback((...args) => callbackRef.current?.(...args), deps);
15
15
  }
16
16
 
17
17
  exports.useCallbackRef = useCallbackRef;
@@ -2,7 +2,7 @@
2
2
  "use client";
3
3
  'use strict';
4
4
 
5
- var react = require('react');
5
+ var $670gB$react = require('react');
6
6
  var useCallbackRef = require('./use-callback-ref.cjs');
7
7
 
8
8
  function useControllableState(props) {
@@ -14,7 +14,7 @@ function useControllableState(props) {
14
14
  } = props;
15
15
  const onChangeProp = useCallbackRef.useCallbackRef(onChange);
16
16
  const shouldUpdateProp = useCallbackRef.useCallbackRef(shouldUpdate);
17
- const [uncontrolledState, setUncontrolledState] = react.useState(defaultValue);
17
+ const [uncontrolledState, setUncontrolledState] = $670gB$react.useState(defaultValue);
18
18
  const controlled = valueProp !== void 0;
19
19
  const value = controlled ? valueProp : uncontrolledState;
20
20
  const setValue = useCallbackRef.useCallbackRef(
@@ -2,15 +2,15 @@
2
2
  "use client";
3
3
  'use strict';
4
4
 
5
- var react = require('react');
5
+ var $670gB$react = require('react');
6
6
  var interactions = require('@react-aria/interactions');
7
7
 
8
8
  function useDraggable(props) {
9
9
  const { targetRef, isDisabled = false, canOverflow = false } = props;
10
- const boundary = react.useRef({ minLeft: 0, minTop: 0, maxLeft: 0, maxTop: 0 });
11
- const isDragging = react.useRef(false);
10
+ const boundary = $670gB$react.useRef({ minLeft: 0, minTop: 0, maxLeft: 0, maxTop: 0 });
11
+ const isDragging = $670gB$react.useRef(false);
12
12
  let transform = { offsetX: 0, offsetY: 0 };
13
- const onMoveStart = react.useCallback(() => {
13
+ const onMoveStart = $670gB$react.useCallback(() => {
14
14
  isDragging.current = true;
15
15
  const { offsetX, offsetY } = transform;
16
16
  const targetRect = targetRef?.current?.getBoundingClientRect();
@@ -31,7 +31,7 @@ function useDraggable(props) {
31
31
  maxTop
32
32
  };
33
33
  }, [transform, targetRef?.current]);
34
- const onMove = react.useCallback(
34
+ const onMove = $670gB$react.useCallback(
35
35
  (e) => {
36
36
  if (isDisabled) {
37
37
  return;
@@ -54,7 +54,7 @@ function useDraggable(props) {
54
54
  },
55
55
  [isDisabled, transform, boundary.current, canOverflow, targetRef?.current]
56
56
  );
57
- const onMoveEnd = react.useCallback(() => {
57
+ const onMoveEnd = $670gB$react.useCallback(() => {
58
58
  isDragging.current = false;
59
59
  }, []);
60
60
  const { moveProps } = interactions.useMove({
@@ -62,12 +62,12 @@ function useDraggable(props) {
62
62
  onMove,
63
63
  onMoveEnd
64
64
  });
65
- const preventDefault = react.useCallback((e) => {
65
+ const preventDefault = $670gB$react.useCallback((e) => {
66
66
  if (isDragging.current) {
67
67
  e.preventDefault();
68
68
  }
69
69
  }, []);
70
- react.useEffect(() => {
70
+ $670gB$react.useEffect(() => {
71
71
  if (!isDisabled) {
72
72
  document.body.addEventListener("touchmove", preventDefault, {
73
73
  passive: false
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ 'use strict';
3
+
4
+ var $670gB$react = require('react');
5
+
6
+ const isBrowser = typeof window !== "undefined";
7
+ function getScrollPosition(element) {
8
+ if (!isBrowser) return { x: 0, y: 0 };
9
+ if (!element) {
10
+ return { x: window.scrollX, y: window.scrollY };
11
+ }
12
+ return { x: element.scrollLeft, y: element.scrollTop };
13
+ }
14
+ const useScrollPosition = (props) => {
15
+ const { elementRef, delay = 30, callback, isEnabled } = props;
16
+ const position = $670gB$react.useRef(
17
+ isEnabled ? getScrollPosition(elementRef?.current) : { x: 0, y: 0 }
18
+ );
19
+ const throttleTimeout = $670gB$react.useRef(null);
20
+ const handler = $670gB$react.useCallback(() => {
21
+ const currPos = getScrollPosition(elementRef?.current);
22
+ if (typeof callback === "function") {
23
+ callback({ prevPos: position.current, currPos });
24
+ }
25
+ position.current = currPos;
26
+ throttleTimeout.current = null;
27
+ }, [callback, elementRef]);
28
+ $670gB$react.useEffect(() => {
29
+ if (!isEnabled) return;
30
+ const handleScroll = () => {
31
+ if (delay) {
32
+ if (throttleTimeout.current) {
33
+ clearTimeout(throttleTimeout.current);
34
+ }
35
+ throttleTimeout.current = setTimeout(handler, delay);
36
+ } else {
37
+ handler();
38
+ }
39
+ };
40
+ const target = elementRef?.current || window;
41
+ target.addEventListener("scroll", handleScroll);
42
+ return () => {
43
+ target.removeEventListener("scroll", handleScroll);
44
+ if (throttleTimeout.current) {
45
+ clearTimeout(throttleTimeout.current);
46
+ throttleTimeout.current = null;
47
+ }
48
+ };
49
+ }, [elementRef?.current, delay, handler, isEnabled]);
50
+ return position.current;
51
+ };
52
+
53
+ exports.useScrollPosition = useScrollPosition;
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
2
  'use strict';
3
3
 
4
- var toggle = require('./toggle/toggle.cjs');
5
- var input = require('./input/input.cjs');
6
- var textField = require('./text-field/text-field.cjs');
7
- var textArea = require('./text-area/text-area.cjs');
8
- var textAreaField = require('./text-area-field/text-area-field.cjs');
9
- var toast = require('./toast/toast.cjs');
10
4
  var useControllableState = require('./hooks/use-controllable-state.cjs');
11
5
  var useDraggable = require('./hooks/use-draggable.cjs');
12
6
  var button = require('./button/button.cjs');
@@ -15,8 +9,13 @@ var ripple = require('./ripple/ripple.cjs');
15
9
  var useRipple = require('./ripple/use-ripple.cjs');
16
10
  var spinner = require('./spinner/spinner.cjs');
17
11
  var useSpinner = require('./spinner/use-spinner.cjs');
12
+ var toggle = require('./toggle/toggle.cjs');
18
13
  var skipNavLink = require('./skip-nav-link/skip-nav-link.cjs');
14
+ var input = require('./input/input.cjs');
15
+ var textField = require('./text-field/text-field.cjs');
19
16
  var field = require('./field/field.cjs');
17
+ var textArea = require('./text-area/text-area.cjs');
18
+ var textAreaField = require('./text-area-field/text-area-field.cjs');
20
19
  var comboBox = require('./combo-box/combo-box.cjs');
21
20
  var comboBoxFuzzy = require('./combo-box/combo-box-fuzzy.cjs');
22
21
  var comboBoxItem = require('./combo-box/combo-box-item.cjs');
@@ -28,10 +27,10 @@ var select = require('./select/select.cjs');
28
27
  var selectItem = require('./select/select-item.cjs');
29
28
  var selectVariantContext = require('./select/select-variant-context.cjs');
30
29
  var badge = require('./badge/badge.cjs');
31
- var date = require('@internationalized/date');
32
30
  var calendar = require('./calendar/calendar.cjs');
33
31
  var calendarStyleContext = require('./calendar/calendar-style-context.cjs');
34
32
  var utils = require('./calendar/utils.cjs');
33
+ var date = require('@internationalized/date');
35
34
  var rangeCalendar = require('./range-calendar/range-calendar.cjs');
36
35
  var menu = require('./menu/menu.cjs');
37
36
  var popover = require('./popover/popover.cjs');
@@ -41,10 +40,10 @@ var datePicker = require('./date-picker/date-picker.cjs');
41
40
  var dateRangePicker = require('./date-range-picker/date-range-picker.cjs');
42
41
  var checkbox = require('./checkbox/checkbox.cjs');
43
42
  var checkboxGroupStyleContext = require('./checkbox/checkbox-group-style-context.cjs');
44
- var usePagination = require('./pagination/hooks/use-pagination.cjs');
45
43
  var pagination = require('./pagination/pagination.cjs');
46
44
  var paginationCursor = require('./pagination/pagination-cursor.cjs');
47
45
  var paginationItem = require('./pagination/pagination-item.cjs');
46
+ var usePagination = require('./pagination/hooks/use-pagination.cjs');
48
47
  var usePagination$1 = require('./pagination/use-pagination.cjs');
49
48
  var fileDropzone = require('./file-dropzone/file-dropzone.cjs');
50
49
  var fileInfo = require('./file-dropzone/file-info.cjs');
@@ -56,16 +55,20 @@ var modalFooter = require('./modal/modal-footer.cjs');
56
55
  var modalBody = require('./modal/modal-body.cjs');
57
56
  var modalHeader = require('./modal/modal-header.cjs');
58
57
  var modalVariantContext = require('./modal/modal-variant-context.cjs');
58
+ var toast = require('./toast/toast.cjs');
59
+ var navbar = require('./navbar/navbar.cjs');
60
+ var navbarBrand = require('./navbar/navbar-brand.cjs');
61
+ var navbarContent = require('./navbar/navbar-content.cjs');
62
+ var menu$1 = require('./navbar/navbar-menu/menu.cjs');
63
+ var item = require('./navbar/navbar-menu/item.cjs');
64
+ var toggle$1 = require('./navbar/navbar-menu/toggle.cjs');
65
+ var navbarItem = require('./navbar/navbar-item.cjs');
66
+ var useNavbar = require('./navbar/use-navbar.cjs');
67
+ var navbarContext = require('./navbar/navbar-context.cjs');
59
68
  var sonner = require('sonner');
60
69
 
61
70
 
62
71
 
63
- exports.Toggle = toggle.Toggle;
64
- exports.Input = input.Input;
65
- exports.TextField = textField.TextField;
66
- exports.TextArea = textArea.TextArea;
67
- exports.TextAreaField = textAreaField.TextAreaField;
68
- exports.Toaster = toast.Toaster;
69
72
  exports.useControllableState = useControllableState.useControllableState;
70
73
  exports.useDraggable = useDraggable.useDraggable;
71
74
  exports.Button = button.Button;
@@ -74,12 +77,17 @@ exports.Ripple = ripple.Ripple;
74
77
  exports.useRipple = useRipple.useRipple;
75
78
  exports.Spinner = spinner.Spinner;
76
79
  exports.useSpinner = useSpinner.useSpinner;
80
+ exports.Toggle = toggle.Toggle;
77
81
  exports.SkipNavLink = skipNavLink.SkipNavLink;
82
+ exports.Input = input.Input;
83
+ exports.TextField = textField.TextField;
78
84
  exports.Description = field.Description;
79
85
  exports.FieldError = field.FieldError;
80
86
  exports.FieldErrorIcon = field.FieldErrorIcon;
81
87
  exports.FieldGroup = field.FieldGroup;
82
88
  exports.Label = field.Label;
89
+ exports.TextArea = textArea.TextArea;
90
+ exports.TextAreaField = textAreaField.TextAreaField;
83
91
  exports.ComboBox = comboBox.ComboBox;
84
92
  exports.ComboBoxEmptyState = comboBox.ComboBoxEmptyState;
85
93
  exports.ComboBoxFuzzy = comboBoxFuzzy.ComboBoxFuzzy;
@@ -94,10 +102,6 @@ exports.SelectItem = selectItem.SelectItem;
94
102
  exports.SelectVariantContext = selectVariantContext.SelectVariantContext;
95
103
  exports.useSelectVariantContext = selectVariantContext.useSelectVariantContext;
96
104
  exports.Badge = badge.Badge;
97
- Object.defineProperty(exports, "CalendarDate", {
98
- enumerable: true,
99
- get: function () { return date.CalendarDate; }
100
- });
101
105
  exports.Calendar = calendar.Calendar;
102
106
  exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
103
107
  exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
@@ -106,6 +110,10 @@ exports.getEraFormat = utils.getEraFormat;
106
110
  exports.useGenerateLocalizedMonths = utils.useGenerateLocalizedMonths;
107
111
  exports.useGenerateLocalizedYears = utils.useGenerateLocalizedYears;
108
112
  exports.useLocalizedMonthYear = utils.useLocalizedMonthYear;
113
+ Object.defineProperty(exports, "CalendarDate", {
114
+ enumerable: true,
115
+ get: function () { return date.CalendarDate; }
116
+ });
109
117
  exports.RangeCalendar = rangeCalendar.RangeCalendar;
110
118
  exports.RangeCalendarCell = rangeCalendar.RangeCalendarCell;
111
119
  exports.RangeCalendarStateWrapper = rangeCalendar.RangeCalendarStateWrapper;
@@ -132,10 +140,10 @@ exports.Checkbox = checkbox.Checkbox;
132
140
  exports.CheckboxGroup = checkbox.CheckboxGroup;
133
141
  exports.CheckboxGroupStyleContext = checkboxGroupStyleContext.CheckboxGroupStyleContext;
134
142
  exports.useCheckboxGroupStyleContext = checkboxGroupStyleContext.useCheckboxGroupStyleContext;
135
- exports.PaginationItemType = usePagination.PaginationItemType;
136
143
  exports.Pagination = pagination.Pagination;
137
144
  exports.PaginationCursor = paginationCursor.PaginationCursor;
138
145
  exports.PaginationItem = paginationItem.PaginationItem;
146
+ exports.PaginationItemType = usePagination.PaginationItemType;
139
147
  exports.CURSOR_TRANSITION_TIMEOUT = usePagination$1.CURSOR_TRANSITION_TIMEOUT;
140
148
  exports.usePagination = usePagination$1.usePagination;
141
149
  exports.FileDropzone = fileDropzone.FileDropzone;
@@ -150,6 +158,17 @@ exports.ModalBody = modalBody.ModalBody;
150
158
  exports.ModalHeader = modalHeader.ModalHeader;
151
159
  exports.ModalVariantContext = modalVariantContext.ModalVariantContext;
152
160
  exports.useModalVariantContext = modalVariantContext.useModalVariantContext;
161
+ exports.Toaster = toast.Toaster;
162
+ exports.Navbar = navbar.Navbar;
163
+ exports.NavbarBrand = navbarBrand.NavbarBrand;
164
+ exports.NavbarContent = navbarContent.NavbarContent;
165
+ exports.NavbarMenu = menu$1.NavbarMenu;
166
+ exports.NavbarMenuItem = item.NavbarMenuItem;
167
+ exports.NavbarMenuToggle = toggle$1.NavbarMenuToggle;
168
+ exports.NavbarItem = navbarItem.NavbarItem;
169
+ exports.useNavbar = useNavbar.useNavbar;
170
+ exports.NavbarProvider = navbarContext.NavbarProvider;
171
+ exports.useNavbarContext = navbarContext.useNavbarContext;
153
172
  Object.defineProperty(exports, "toast", {
154
173
  enumerable: true,
155
174
  get: function () { return sonner.toast; }
@@ -3,11 +3,11 @@
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 reactAriaComponents = require('react-aria-components');
8
8
  var ouiTheme = require('@opengovsg/oui-theme');
9
9
 
10
- const Input = react.forwardRef(
10
+ const Input = $670gB$react.forwardRef(
11
11
  ({ size, variant, isDisabled, ...props }, ref) => {
12
12
  return /* @__PURE__ */ jsxRuntime.jsx(
13
13
  reactAriaComponents.Input,
@@ -3,14 +3,14 @@
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 reactAriaComponents = require('react-aria-components');
8
8
  var ouiTheme = require('@opengovsg/oui-theme');
9
+ var popover = require('../popover/popover.cjs');
9
10
  var utils = require('../system/utils.cjs');
11
+ var context = require('../system/react-utils/context.cjs');
10
12
  var check = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/check.cjs');
11
13
  var chevronRight = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/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
14
 
15
15
  const [MenuVariantContext, useMenuVariantContext] = context.createContext({
16
16
  name: "MenuVariantContext",
@@ -51,7 +51,7 @@ function MenuInner(originalProps, ref) {
51
51
  ) });
52
52
  }
53
53
  const Menu = utils.forwardRefGeneric(MenuInner);
54
- const MenuItem = react.forwardRef(function MenuItem2(originalProps, ref) {
54
+ const MenuItem = $670gB$react.forwardRef(function MenuItem2(originalProps, ref) {
55
55
  [originalProps, ref] = reactAriaComponents.useContextProps(
56
56
  originalProps,
57
57
  ref,
@@ -70,7 +70,7 @@ const MenuItem = react.forwardRef(function MenuItem2(originalProps, ref) {
70
70
  variantProps
71
71
  ] = utils.mapPropsVariants(originalProps, ouiTheme.listBoxItemStyles.variantKeys);
72
72
  const styles = ouiTheme.menuItemStyles(variantProps);
73
- const multipleSelectionIcon = react.useMemo(() => {
73
+ const multipleSelectionIcon = $670gB$react.useMemo(() => {
74
74
  if (multipleSelectionIconProp !== void 0) {
75
75
  return multipleSelectionIconProp;
76
76
  }
@@ -82,7 +82,7 @@ const MenuItem = react.forwardRef(function MenuItem2(originalProps, ref) {
82
82
  }
83
83
  );
84
84
  }, [classNames?.icon, multipleSelectionIconProp, styles]);
85
- const singleSelectionIcon = react.useMemo(() => {
85
+ const singleSelectionIcon = $670gB$react.useMemo(() => {
86
86
  if (singleSelectionIconProp !== void 0) {
87
87
  return singleSelectionIconProp;
88
88
  }
@@ -94,7 +94,7 @@ const MenuItem = react.forwardRef(function MenuItem2(originalProps, ref) {
94
94
  }
95
95
  );
96
96
  }, [classNames?.icon, singleSelectionIconProp, styles]);
97
- const showIconContainer = react.useCallback(
97
+ const showIconContainer = $670gB$react.useCallback(
98
98
  (selectionMode) => {
99
99
  switch (selectionMode) {
100
100
  case "none":
@@ -107,7 +107,7 @@ const MenuItem = react.forwardRef(function MenuItem2(originalProps, ref) {
107
107
  },
108
108
  [multipleSelectionIcon, singleSelectionIcon]
109
109
  );
110
- const defaultTextValue = react.useMemo(() => {
110
+ const defaultTextValue = $670gB$react.useMemo(() => {
111
111
  if (props.textValue) {
112
112
  return props.textValue;
113
113
  }
@@ -3,13 +3,13 @@
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 ouiTheme = require('@opengovsg/oui-theme');
8
8
  var utils = require('../system/utils.cjs');
9
9
  var modalVariantContext = require('./modal-variant-context.cjs');
10
10
 
11
11
  const ModalBody = utils.forwardRef(function ModalBody2({ as, ...props }, ref) {
12
- const { slots, classNames } = react.useContext(modalVariantContext.ModalVariantContext);
12
+ const { slots, classNames } = $670gB$react.useContext(modalVariantContext.ModalVariantContext);
13
13
  const Component = as || "div";
14
14
  return /* @__PURE__ */ jsxRuntime.jsx(
15
15
  Component,
@@ -3,14 +3,14 @@
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 reactAria = require('react-aria');
8
8
  var reactAriaComponents = require('react-aria-components');
9
9
  var ouiTheme = require('@opengovsg/oui-theme');
10
+ var button = require('../button/button.cjs');
10
11
  var i18n = require('./i18n.cjs');
11
12
  var modalVariantContext = require('./modal-variant-context.cjs');
12
13
  var x = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/x.cjs');
13
- var button = require('../button/button.cjs');
14
14
 
15
15
  function ModalContent({
16
16
  closeButtonContent: closeButtonContentProp,
@@ -18,9 +18,9 @@ function ModalContent({
18
18
  closeButtonProps,
19
19
  ...props
20
20
  }) {
21
- const { slots, classNames, buttonSize } = react.useContext(modalVariantContext.ModalVariantContext);
21
+ const { slots, classNames, buttonSize } = $670gB$react.useContext(modalVariantContext.ModalVariantContext);
22
22
  const formatMessage = reactAria.useMessageFormatter(i18n.i18nStrings);
23
- const closeButtonContent = react.isValidElement(closeButtonContentProp) ? closeButtonContentProp : /* @__PURE__ */ jsxRuntime.jsx(x.default, {});
23
+ const closeButtonContent = $670gB$react.isValidElement(closeButtonContentProp) ? closeButtonContentProp : /* @__PURE__ */ jsxRuntime.jsx(x.default, {});
24
24
  return /* @__PURE__ */ jsxRuntime.jsx(
25
25
  reactAriaComponents.Dialog,
26
26
  {
@@ -3,13 +3,13 @@
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 ouiTheme = require('@opengovsg/oui-theme');
8
8
  var utils = require('../system/utils.cjs');
9
9
  var modalVariantContext = require('./modal-variant-context.cjs');
10
10
 
11
11
  const ModalFooter = utils.forwardRef(function ModalFooter2({ as, ...props }, ref) {
12
- const { slots, classNames } = react.useContext(modalVariantContext.ModalVariantContext);
12
+ const { slots, classNames } = $670gB$react.useContext(modalVariantContext.ModalVariantContext);
13
13
  const Component = as || "footer";
14
14
  return /* @__PURE__ */ jsxRuntime.jsx(
15
15
  Component,
@@ -3,13 +3,13 @@
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 reactAriaComponents = require('react-aria-components');
8
8
  var ouiTheme = require('@opengovsg/oui-theme');
9
9
  var modalVariantContext = require('./modal-variant-context.cjs');
10
10
 
11
11
  function ModalHeader(props) {
12
- const { slots, classNames } = react.useContext(modalVariantContext.ModalVariantContext);
12
+ const { slots, classNames } = $670gB$react.useContext(modalVariantContext.ModalVariantContext);
13
13
  return /* @__PURE__ */ jsxRuntime.jsx(
14
14
  reactAriaComponents.Heading,
15
15
  {