@opengovsg/oui 0.0.29 → 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 (69) hide show
  1. package/dist/cjs/banner/banner.cjs +1 -1
  2. package/dist/cjs/checkbox/checkbox.cjs +1 -1
  3. package/dist/cjs/combo-box/combo-box.cjs +1 -1
  4. package/dist/cjs/date-field/date-field.cjs +1 -1
  5. package/dist/cjs/date-picker/date-picker.cjs +5 -4
  6. package/dist/cjs/date-range-picker/date-range-picker.cjs +3 -3
  7. package/dist/cjs/file-dropzone/file-dropzone.cjs +12 -8
  8. package/dist/cjs/file-dropzone/file-info.cjs +3 -2
  9. package/dist/cjs/file-dropzone/utils.cjs +4 -4
  10. package/dist/cjs/hooks/use-scroll-position.cjs +53 -0
  11. package/dist/cjs/index.cjs +51 -51
  12. package/dist/cjs/modal/modal-content.cjs +1 -1
  13. package/dist/cjs/navbar/navbar-menu/menu.cjs +2 -2
  14. package/dist/cjs/navbar/navbar-menu/toggle.cjs +3 -2
  15. package/dist/cjs/navbar/navbar.cjs +25 -1
  16. package/dist/cjs/navbar/use-navbar.cjs +42 -32
  17. package/dist/cjs/number-field/number-field.cjs +2 -2
  18. package/dist/cjs/range-calendar/range-calendar.cjs +1 -1
  19. package/dist/cjs/select/select.cjs +2 -2
  20. package/dist/cjs/tag-field/tag-field.cjs +1 -1
  21. package/dist/cjs/text-area-field/text-area-field.cjs +1 -1
  22. package/dist/cjs/text-field/text-field.cjs +1 -1
  23. package/dist/esm/banner/banner.js +1 -1
  24. package/dist/esm/checkbox/checkbox.js +1 -1
  25. package/dist/esm/combo-box/combo-box.js +1 -1
  26. package/dist/esm/date-field/date-field.js +1 -1
  27. package/dist/esm/date-picker/date-picker.js +5 -4
  28. package/dist/esm/date-range-picker/date-range-picker.js +3 -3
  29. package/dist/esm/file-dropzone/file-dropzone.js +12 -8
  30. package/dist/esm/file-dropzone/file-info.js +3 -2
  31. package/dist/esm/file-dropzone/utils.js +4 -4
  32. package/dist/esm/hooks/use-scroll-position.js +51 -0
  33. package/dist/esm/index.js +17 -17
  34. package/dist/esm/modal/modal-content.js +1 -1
  35. package/dist/esm/navbar/navbar-menu/menu.js +2 -2
  36. package/dist/esm/navbar/navbar-menu/toggle.js +3 -2
  37. package/dist/esm/navbar/navbar.js +26 -2
  38. package/dist/esm/navbar/use-navbar.js +43 -33
  39. package/dist/esm/number-field/number-field.js +2 -2
  40. package/dist/esm/range-calendar/range-calendar.js +1 -1
  41. package/dist/esm/select/select.js +2 -2
  42. package/dist/esm/tag-field/tag-field.js +1 -1
  43. package/dist/esm/text-area-field/text-area-field.js +1 -1
  44. package/dist/esm/text-field/text-field.js +1 -1
  45. package/dist/types/calendar/calendar.d.ts.map +1 -1
  46. package/dist/types/date-field/date-field.d.ts.map +1 -1
  47. package/dist/types/file-dropzone/file-dropzone.d.ts +8 -2
  48. package/dist/types/file-dropzone/file-dropzone.d.ts.map +1 -1
  49. package/dist/types/file-dropzone/file-info.d.ts.map +1 -1
  50. package/dist/types/file-dropzone/types.d.ts +1 -0
  51. package/dist/types/file-dropzone/types.d.ts.map +1 -1
  52. package/dist/types/file-dropzone/utils.d.ts +2 -1
  53. package/dist/types/file-dropzone/utils.d.ts.map +1 -1
  54. package/dist/types/hooks/use-scroll-position.d.ts +29 -0
  55. package/dist/types/hooks/use-scroll-position.d.ts.map +1 -0
  56. package/dist/types/menu/menu.d.ts.map +1 -1
  57. package/dist/types/navbar/navbar-context.d.ts +10 -2
  58. package/dist/types/navbar/navbar-context.d.ts.map +1 -1
  59. package/dist/types/navbar/navbar-menu/menu.d.ts.map +1 -1
  60. package/dist/types/navbar/navbar-menu/toggle.d.ts.map +1 -1
  61. package/dist/types/navbar/navbar.d.ts.map +1 -1
  62. package/dist/types/navbar/use-navbar.d.ts +33 -1
  63. package/dist/types/navbar/use-navbar.d.ts.map +1 -1
  64. package/dist/types/range-calendar/range-calendar.d.ts.map +1 -1
  65. package/dist/types/system/utils.d.ts.map +1 -1
  66. package/dist/types/tabs/tabs.d.ts.map +1 -1
  67. package/dist/types/tag-field/tag-field-item.d.ts.map +1 -1
  68. package/dist/types/tag-field/tag-field-list.d.ts.map +1 -1
  69. package/package.json +3 -3
@@ -7,9 +7,9 @@ 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');
10
+ var button = require('../button/button.cjs');
10
11
  var circleAlert = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs');
11
12
  var info = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/info.cjs');
12
- var button = require('../button/button.cjs');
13
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');
14
14
 
15
15
  const i18nStrings = {
@@ -5,11 +5,11 @@
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var reactAriaComponents = require('react-aria-components');
7
7
  var ouiTheme = require('@opengovsg/oui-theme');
8
+ var field = require('../field/field.cjs');
8
9
  var utils = require('../system/utils.cjs');
9
10
  var checkboxGroupStyleContext = require('./checkbox-group-style-context.cjs');
10
11
  var minus = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/minus.cjs');
11
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');
12
- var field = require('../field/field.cjs');
13
13
 
14
14
  const Checkbox = ({
15
15
  classNames,
@@ -7,10 +7,10 @@ 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 field = require('../field/field.cjs');
10
11
  var popover = require('../popover/popover.cjs');
11
12
  var utils = require('../system/utils.cjs');
12
13
  var comboBoxVariantContext = require('./combo-box-variant-context.cjs');
13
- var field = require('../field/field.cjs');
14
14
  var chevronUp = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs');
15
15
  var chevronDown = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/chevron-down.cjs');
16
16
  var x = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/x.cjs');
@@ -6,8 +6,8 @@ var jsxRuntime = require('react/jsx-runtime');
6
6
  var $670gB$react = require('react');
7
7
  var reactAriaComponents = require('react-aria-components');
8
8
  var ouiTheme = require('@opengovsg/oui-theme');
9
- var utils = require('../system/utils.cjs');
10
9
  var field = require('../field/field.cjs');
10
+ var utils = require('../system/utils.cjs');
11
11
 
12
12
  function DateField(originalProps) {
13
13
  const [
@@ -6,13 +6,14 @@ var jsxRuntime = require('react/jsx-runtime');
6
6
  var $670gB$react = require('react');
7
7
  var reactAriaComponents = require('react-aria-components');
8
8
  var ouiTheme = require('@opengovsg/oui-theme');
9
+ var button = require('../button/button.cjs');
10
+ var calendar$1 = require('../calendar/calendar.cjs');
11
+ require('@internationalized/date');
12
+ var dateField = require('../date-field/date-field.cjs');
13
+ var field = require('../field/field.cjs');
9
14
  var popover = require('../popover/popover.cjs');
10
15
  var utils = require('../system/utils.cjs');
11
- var dateField = require('../date-field/date-field.cjs');
12
16
  var calendar = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/calendar.cjs');
13
- var calendar$1 = require('../calendar/calendar.cjs');
14
- var field = require('../field/field.cjs');
15
- var button = require('../button/button.cjs');
16
17
 
17
18
  function DatePicker(originalProps) {
18
19
  const [
@@ -7,13 +7,13 @@ var $670gB$react = require('react');
7
7
  var date = require('@internationalized/date');
8
8
  var reactAriaComponents = require('react-aria-components');
9
9
  var ouiTheme = require('@opengovsg/oui-theme');
10
+ var button = require('../button/button.cjs');
11
+ var dateField = require('../date-field/date-field.cjs');
12
+ var field = require('../field/field.cjs');
10
13
  var popover = require('../popover/popover.cjs');
11
14
  var rangeCalendar = require('../range-calendar/range-calendar.cjs');
12
15
  var utils = require('../system/utils.cjs');
13
16
  var calendar = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/calendar.cjs');
14
- var field = require('../field/field.cjs');
15
- var dateField = require('../date-field/date-field.cjs');
16
- var button = require('../button/button.cjs');
17
17
 
18
18
  function DateRangePicker(originalProps) {
19
19
  const [
@@ -9,13 +9,13 @@ 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');
12
13
  var useControllableState = require('../hooks/use-controllable-state.cjs');
13
14
  var utils = require('../system/utils.cjs');
14
15
  var contexts = require('./contexts.cjs');
15
16
  var fileInfo = require('./file-info.cjs');
16
17
  var utils$1 = require('./utils.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,
@@ -69,9 +70,10 @@ const FileDropzone = (originalProps) => {
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
78
  const onDrop = $670gB$react.useCallback(
77
79
  (acceptedFiles, fileRejections) => {
@@ -129,19 +131,20 @@ const FileDropzone = (originalProps) => {
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]);
147
+ }, [maxFileSize, minFileSize, showFileSizeText, fileSizeBase]);
145
148
  const triggerFileSelector = $670gB$react.useCallback(() => {
146
149
  if (isDisabled || isReadOnly) return;
147
150
  dropzoneState.inputRef.current?.click();
@@ -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,
@@ -5,10 +5,10 @@
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
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,7 +19,8 @@ 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,
@@ -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: {
@@ -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;
@@ -3,6 +3,7 @@
3
3
 
4
4
  var useControllableState = require('./hooks/use-controllable-state.cjs');
5
5
  var useDraggable = require('./hooks/use-draggable.cjs');
6
+ var button = require('./button/button.cjs');
6
7
  var govtBanner = require('./govt-banner/govt-banner.cjs');
7
8
  var ripple = require('./ripple/ripple.cjs');
8
9
  var useRipple = require('./ripple/use-ripple.cjs');
@@ -12,17 +13,33 @@ var toggle = require('./toggle/toggle.cjs');
12
13
  var skipNavLink = require('./skip-nav-link/skip-nav-link.cjs');
13
14
  var input = require('./input/input.cjs');
14
15
  var textField = require('./text-field/text-field.cjs');
16
+ var field = require('./field/field.cjs');
15
17
  var textArea = require('./text-area/text-area.cjs');
16
18
  var textAreaField = require('./text-area-field/text-area-field.cjs');
19
+ var comboBox = require('./combo-box/combo-box.cjs');
20
+ var comboBoxFuzzy = require('./combo-box/combo-box-fuzzy.cjs');
21
+ var comboBoxItem = require('./combo-box/combo-box-item.cjs');
22
+ var comboBoxVariantContext = require('./combo-box/combo-box-variant-context.cjs');
23
+ var banner = require('./banner/banner.cjs');
17
24
  var tagField = require('./tag-field/tag-field.cjs');
18
25
  var tagFieldItem = require('./tag-field/tag-field-item.cjs');
19
26
  var select = require('./select/select.cjs');
20
27
  var selectItem = require('./select/select-item.cjs');
21
28
  var selectVariantContext = require('./select/select-variant-context.cjs');
29
+ var badge = require('./badge/badge.cjs');
30
+ var calendar = require('./calendar/calendar.cjs');
31
+ var calendarStyleContext = require('./calendar/calendar-style-context.cjs');
32
+ var utils = require('./calendar/utils.cjs');
33
+ var date = require('@internationalized/date');
22
34
  var rangeCalendar = require('./range-calendar/range-calendar.cjs');
23
35
  var menu = require('./menu/menu.cjs');
24
36
  var popover = require('./popover/popover.cjs');
25
37
  var tabs = require('./tabs/tabs.cjs');
38
+ var dateField = require('./date-field/date-field.cjs');
39
+ var datePicker = require('./date-picker/date-picker.cjs');
40
+ var dateRangePicker = require('./date-range-picker/date-range-picker.cjs');
41
+ var checkbox = require('./checkbox/checkbox.cjs');
42
+ var checkboxGroupStyleContext = require('./checkbox/checkbox-group-style-context.cjs');
26
43
  var pagination = require('./pagination/pagination.cjs');
27
44
  var paginationCursor = require('./pagination/pagination-cursor.cjs');
28
45
  var paginationItem = require('./pagination/pagination-item.cjs');
@@ -48,29 +65,13 @@ var toggle$1 = require('./navbar/navbar-menu/toggle.cjs');
48
65
  var navbarItem = require('./navbar/navbar-item.cjs');
49
66
  var useNavbar = require('./navbar/use-navbar.cjs');
50
67
  var navbarContext = require('./navbar/navbar-context.cjs');
51
- var button = require('./button/button.cjs');
52
- var field = require('./field/field.cjs');
53
- var comboBox = require('./combo-box/combo-box.cjs');
54
- var comboBoxFuzzy = require('./combo-box/combo-box-fuzzy.cjs');
55
- var comboBoxItem = require('./combo-box/combo-box-item.cjs');
56
- var comboBoxVariantContext = require('./combo-box/combo-box-variant-context.cjs');
57
- var banner = require('./banner/banner.cjs');
58
- var badge = require('./badge/badge.cjs');
59
- var date = require('@internationalized/date');
60
- var calendar = require('./calendar/calendar.cjs');
61
- var calendarStyleContext = require('./calendar/calendar-style-context.cjs');
62
- var utils = require('./calendar/utils.cjs');
63
- var dateField = require('./date-field/date-field.cjs');
64
- var datePicker = require('./date-picker/date-picker.cjs');
65
- var dateRangePicker = require('./date-range-picker/date-range-picker.cjs');
66
- var checkbox = require('./checkbox/checkbox.cjs');
67
- var checkboxGroupStyleContext = require('./checkbox/checkbox-group-style-context.cjs');
68
68
  var sonner = require('sonner');
69
69
 
70
70
 
71
71
 
72
72
  exports.useControllableState = useControllableState.useControllableState;
73
73
  exports.useDraggable = useDraggable.useDraggable;
74
+ exports.Button = button.Button;
74
75
  exports.GovtBanner = govtBanner.GovtBanner;
75
76
  exports.Ripple = ripple.Ripple;
76
77
  exports.useRipple = useRipple.useRipple;
@@ -80,14 +81,39 @@ exports.Toggle = toggle.Toggle;
80
81
  exports.SkipNavLink = skipNavLink.SkipNavLink;
81
82
  exports.Input = input.Input;
82
83
  exports.TextField = textField.TextField;
84
+ exports.Description = field.Description;
85
+ exports.FieldError = field.FieldError;
86
+ exports.FieldErrorIcon = field.FieldErrorIcon;
87
+ exports.FieldGroup = field.FieldGroup;
88
+ exports.Label = field.Label;
83
89
  exports.TextArea = textArea.TextArea;
84
90
  exports.TextAreaField = textAreaField.TextAreaField;
91
+ exports.ComboBox = comboBox.ComboBox;
92
+ exports.ComboBoxEmptyState = comboBox.ComboBoxEmptyState;
93
+ exports.ComboBoxFuzzy = comboBoxFuzzy.ComboBoxFuzzy;
94
+ exports.ComboBoxItem = comboBoxItem.ComboBoxItem;
95
+ exports.ComboBoxVariantContext = comboBoxVariantContext.ComboBoxVariantContext;
96
+ exports.useComboBoxVariantContext = comboBoxVariantContext.useComboBoxVariantContext;
97
+ exports.Banner = banner.Banner;
85
98
  exports.TagField = tagField.TagField;
86
99
  exports.TagFieldItem = tagFieldItem.TagFieldItem;
87
100
  exports.Select = select.Select;
88
101
  exports.SelectItem = selectItem.SelectItem;
89
102
  exports.SelectVariantContext = selectVariantContext.SelectVariantContext;
90
103
  exports.useSelectVariantContext = selectVariantContext.useSelectVariantContext;
104
+ exports.Badge = badge.Badge;
105
+ exports.Calendar = calendar.Calendar;
106
+ exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
107
+ exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
108
+ exports.useCalendarStyleContext = calendarStyleContext.useCalendarStyleContext;
109
+ exports.getEraFormat = utils.getEraFormat;
110
+ exports.useGenerateLocalizedMonths = utils.useGenerateLocalizedMonths;
111
+ exports.useGenerateLocalizedYears = utils.useGenerateLocalizedYears;
112
+ exports.useLocalizedMonthYear = utils.useLocalizedMonthYear;
113
+ Object.defineProperty(exports, "CalendarDate", {
114
+ enumerable: true,
115
+ get: function () { return date.CalendarDate; }
116
+ });
91
117
  exports.RangeCalendar = rangeCalendar.RangeCalendar;
92
118
  exports.RangeCalendarCell = rangeCalendar.RangeCalendarCell;
93
119
  exports.RangeCalendarStateWrapper = rangeCalendar.RangeCalendarStateWrapper;
@@ -106,6 +132,14 @@ exports.TabPanel = tabs.TabPanel;
106
132
  exports.Tabs = tabs.Tabs;
107
133
  exports.TabsVariantContext = tabs.TabsVariantContext;
108
134
  exports.useTabsVariantContext = tabs.useTabsVariantContext;
135
+ exports.DateField = dateField.DateField;
136
+ exports.DateInput = dateField.DateInput;
137
+ exports.DatePicker = datePicker.DatePicker;
138
+ exports.DateRangePicker = dateRangePicker.DateRangePicker;
139
+ exports.Checkbox = checkbox.Checkbox;
140
+ exports.CheckboxGroup = checkbox.CheckboxGroup;
141
+ exports.CheckboxGroupStyleContext = checkboxGroupStyleContext.CheckboxGroupStyleContext;
142
+ exports.useCheckboxGroupStyleContext = checkboxGroupStyleContext.useCheckboxGroupStyleContext;
109
143
  exports.Pagination = pagination.Pagination;
110
144
  exports.PaginationCursor = paginationCursor.PaginationCursor;
111
145
  exports.PaginationItem = paginationItem.PaginationItem;
@@ -135,40 +169,6 @@ exports.NavbarItem = navbarItem.NavbarItem;
135
169
  exports.useNavbar = useNavbar.useNavbar;
136
170
  exports.NavbarProvider = navbarContext.NavbarProvider;
137
171
  exports.useNavbarContext = navbarContext.useNavbarContext;
138
- exports.Button = button.Button;
139
- exports.Description = field.Description;
140
- exports.FieldError = field.FieldError;
141
- exports.FieldErrorIcon = field.FieldErrorIcon;
142
- exports.FieldGroup = field.FieldGroup;
143
- exports.Label = field.Label;
144
- exports.ComboBox = comboBox.ComboBox;
145
- exports.ComboBoxEmptyState = comboBox.ComboBoxEmptyState;
146
- exports.ComboBoxFuzzy = comboBoxFuzzy.ComboBoxFuzzy;
147
- exports.ComboBoxItem = comboBoxItem.ComboBoxItem;
148
- exports.ComboBoxVariantContext = comboBoxVariantContext.ComboBoxVariantContext;
149
- exports.useComboBoxVariantContext = comboBoxVariantContext.useComboBoxVariantContext;
150
- exports.Banner = banner.Banner;
151
- exports.Badge = badge.Badge;
152
- Object.defineProperty(exports, "CalendarDate", {
153
- enumerable: true,
154
- get: function () { return date.CalendarDate; }
155
- });
156
- exports.Calendar = calendar.Calendar;
157
- exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
158
- exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
159
- exports.useCalendarStyleContext = calendarStyleContext.useCalendarStyleContext;
160
- exports.getEraFormat = utils.getEraFormat;
161
- exports.useGenerateLocalizedMonths = utils.useGenerateLocalizedMonths;
162
- exports.useGenerateLocalizedYears = utils.useGenerateLocalizedYears;
163
- exports.useLocalizedMonthYear = utils.useLocalizedMonthYear;
164
- exports.DateField = dateField.DateField;
165
- exports.DateInput = dateField.DateInput;
166
- exports.DatePicker = datePicker.DatePicker;
167
- exports.DateRangePicker = dateRangePicker.DateRangePicker;
168
- exports.Checkbox = checkbox.Checkbox;
169
- exports.CheckboxGroup = checkbox.CheckboxGroup;
170
- exports.CheckboxGroupStyleContext = checkboxGroupStyleContext.CheckboxGroupStyleContext;
171
- exports.useCheckboxGroupStyleContext = checkboxGroupStyleContext.useCheckboxGroupStyleContext;
172
172
  Object.defineProperty(exports, "toast", {
173
173
  enumerable: true,
174
174
  get: function () { return sonner.toast; }
@@ -7,10 +7,10 @@ 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,
@@ -16,7 +16,7 @@ const NavbarMenu = utils.forwardRef(
16
16
  const {
17
17
  slots,
18
18
  isMenuOpen,
19
- height,
19
+ menuTopOffsetPx,
20
20
  classNames,
21
21
  setIsMenuOpen,
22
22
  domRef: parentRef,
@@ -46,7 +46,7 @@ const NavbarMenu = utils.forwardRef(
46
46
  style: {
47
47
  ...style,
48
48
  // @ts-expect-error due to not having any type declaration for CSS variables in React style prop
49
- "--navbar-height": typeof height === "number" ? `${height}px` : height
49
+ "--menu-offset": menuTopOffsetPx
50
50
  },
51
51
  onKeyDown: reactAria.chain(handleKeyDown, onKeyDown),
52
52
  ...props,
@@ -26,13 +26,14 @@ const NavbarMenuToggle = ({
26
26
  isMenuOpen,
27
27
  setIsMenuOpen,
28
28
  menuRef,
29
- position
29
+ position,
30
+ menuTopOffset
30
31
  } = navbarContext.useNavbarContext();
31
32
  const shouldScrollToTop = (isMenuOpen2) => {
32
33
  if (!isMenuOpen2 || position === "sticky" || typeof window === "undefined") {
33
34
  return;
34
35
  }
35
- window.scrollTo({ top: 0, behavior: "instant" });
36
+ window.scrollTo({ top: menuTopOffset, behavior: "instant" });
36
37
  };
37
38
  const formatMessage = reactAria.useMessageFormatter(i18n.i18nStrings);
38
39
  const toggleStyles = $670gB$react.useMemo(() => {
@@ -3,6 +3,7 @@
3
3
  'use strict';
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('motion/react');
6
7
  var reactAria = require('react-aria');
7
8
  var children = require('../system/react-utils/children.cjs');
8
9
  var utils = require('../system/utils.cjs');
@@ -10,6 +11,20 @@ var navbarContext = require('./navbar-context.cjs');
10
11
  var menu = require('./navbar-menu/menu.cjs');
11
12
  var useNavbar = require('./use-navbar.cjs');
12
13
 
14
+ const showOnScrollUpVariants = {
15
+ visible: {
16
+ y: 0,
17
+ transition: {
18
+ ease: [0, 0, 0.2, 1]
19
+ }
20
+ },
21
+ hidden: {
22
+ y: "-100%",
23
+ transition: {
24
+ ease: [0, 0, 0.2, 1]
25
+ }
26
+ }
27
+ };
13
28
  const Navbar = utils.forwardRef((props, ref) => {
14
29
  const { children: children$1, ...otherProps } = props;
15
30
  const context = useNavbar.useNavbar({ ...otherProps, ref });
@@ -19,7 +34,16 @@ const Navbar = utils.forwardRef((props, ref) => {
19
34
  /* @__PURE__ */ jsxRuntime.jsx("header", { ...context.getWrapperProps(), children: childrenWithoutMenu }),
20
35
  menu$1
21
36
  ] });
22
- return /* @__PURE__ */ jsxRuntime.jsx(navbarContext.NavbarProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(reactAria.FocusScope, { contain: context.isMenuOpen, children: /* @__PURE__ */ jsxRuntime.jsx(Component, { ...context.getBaseProps(), children: content }) }) });
37
+ return /* @__PURE__ */ jsxRuntime.jsx(navbarContext.NavbarProvider, { value: context, children: /* @__PURE__ */ jsxRuntime.jsx(reactAria.FocusScope, { contain: context.isMenuOpen, children: context.shouldShowOnScrollUp ? /* @__PURE__ */ jsxRuntime.jsx(react.LazyMotion, { features: react.domAnimation, children: /* @__PURE__ */ jsxRuntime.jsx(
38
+ react.m.nav,
39
+ {
40
+ animate: context.isNavbarHidden ? "hidden" : "visible",
41
+ initial: "visible",
42
+ variants: showOnScrollUpVariants,
43
+ ...reactAria.mergeProps(context.getBaseProps(), context.motionProps),
44
+ children: content
45
+ }
46
+ ) }) : /* @__PURE__ */ jsxRuntime.jsx(Component, { ...context.getBaseProps(), children: content }) }) });
23
47
  });
24
48
  Navbar.displayName = "Navbar";
25
49