@opengovsg/oui 0.0.48 → 0.0.49

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 (63) hide show
  1. package/dist/cjs/banner/banner.cjs +1 -1
  2. package/dist/cjs/date-picker/date-picker.cjs +2 -3
  3. package/dist/cjs/date-range-picker/date-range-picker.cjs +1 -1
  4. package/dist/cjs/file-dropzone/file-info.cjs +1 -1
  5. package/dist/cjs/index.cjs +64 -59
  6. package/dist/cjs/infobox/index.cjs +8 -0
  7. package/dist/cjs/infobox/infobox.cjs +39 -0
  8. package/dist/cjs/infobox/use-infobox.cjs +32 -0
  9. package/dist/cjs/modal/modal-content.cjs +1 -1
  10. package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-check.cjs +22 -0
  11. package/dist/cjs/number-field/number-field.cjs +1 -1
  12. package/dist/cjs/pagination/index.cjs +5 -5
  13. package/dist/cjs/radio-group/index.cjs +9 -0
  14. package/dist/cjs/radio-group/radio-group-variant-context.cjs +15 -0
  15. package/dist/cjs/radio-group/radio.cjs +99 -0
  16. package/dist/cjs/range-calendar/range-calendar.cjs +1 -1
  17. package/dist/cjs/search-field/search-field.cjs +1 -1
  18. package/dist/cjs/select/select.cjs +1 -1
  19. package/dist/cjs/sidebar/sidebar-list.cjs +1 -1
  20. package/dist/esm/accordion/accordion.js +1 -1
  21. package/dist/esm/badge/use-badge.js +1 -1
  22. package/dist/esm/banner/banner.js +1 -1
  23. package/dist/esm/breadcrumbs/breadcrumbs.js +2 -2
  24. package/dist/esm/calendar/calendar.js +1 -1
  25. package/dist/esm/combo-box/combo-box-item.js +1 -1
  26. package/dist/esm/combo-box/combo-box.js +1 -1
  27. package/dist/esm/date-picker/date-picker.js +2 -3
  28. package/dist/esm/date-range-picker/date-range-picker.js +1 -1
  29. package/dist/esm/file-dropzone/file-info.js +1 -1
  30. package/dist/esm/index.js +15 -13
  31. package/dist/esm/infobox/index.js +2 -0
  32. package/dist/esm/infobox/infobox.js +37 -0
  33. package/dist/esm/infobox/use-infobox.js +30 -0
  34. package/dist/esm/modal/modal-content.js +1 -1
  35. package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-check.js +17 -0
  36. package/dist/esm/number-field/number-field.js +2 -2
  37. package/dist/esm/pagination/use-pagination-item.js +1 -1
  38. package/dist/esm/phone-number-field/phone-number-field.js +4 -4
  39. package/dist/esm/popover/popover.js +1 -1
  40. package/dist/esm/radio-group/index.js +2 -0
  41. package/dist/esm/radio-group/radio-group-variant-context.js +12 -0
  42. package/dist/esm/radio-group/radio.js +96 -0
  43. package/dist/esm/range-calendar/range-calendar.js +1 -1
  44. package/dist/esm/search-field/search-field.js +1 -1
  45. package/dist/esm/select/select.js +1 -1
  46. package/dist/esm/sidebar/sidebar-list.js +1 -1
  47. package/dist/esm/tabs/tabs.js +2 -2
  48. package/dist/types/index.d.mts +2 -0
  49. package/dist/types/index.d.ts +2 -0
  50. package/dist/types/index.d.ts.map +1 -1
  51. package/dist/types/infobox/index.d.ts +2 -0
  52. package/dist/types/infobox/index.d.ts.map +1 -0
  53. package/dist/types/infobox/infobox.d.ts +5 -0
  54. package/dist/types/infobox/infobox.d.ts.map +1 -0
  55. package/dist/types/infobox/use-infobox.d.ts +54 -0
  56. package/dist/types/infobox/use-infobox.d.ts.map +1 -0
  57. package/dist/types/radio-group/index.d.ts +3 -0
  58. package/dist/types/radio-group/index.d.ts.map +1 -0
  59. package/dist/types/radio-group/radio-group-variant-context.d.ts +6 -0
  60. package/dist/types/radio-group/radio-group-variant-context.d.ts.map +1 -0
  61. package/dist/types/radio-group/radio.d.ts +39 -0
  62. package/dist/types/radio-group/radio.d.ts.map +1 -0
  63. package/package.json +4 -4
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- import { useMemo, useCallback, cloneElement, isValidElement } from 'react';
2
+ import { useMemo, useCallback, isValidElement, cloneElement } from 'react';
3
3
  import { mergeProps } from '@react-aria/utils';
4
4
  import { useLocalizedStringFormatter, useFocusRing, usePress } from 'react-aria';
5
5
  import { useDeepCompareMemo } from 'use-deep-compare';
@@ -5,10 +5,10 @@ import { useMemo, useRef } from 'react';
5
5
  import { useLocalizedStringFormatter, useDisclosure } from 'react-aria';
6
6
  import { useDisclosureState } from 'react-stately';
7
7
  import { bannerStyles } from '@opengovsg/oui-theme';
8
- import { Button } from '../button/button.js';
9
8
  import { i18nStrings } from './i18n.js';
10
9
  import CircleAlert from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-alert.js';
11
10
  import Info from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/info.js';
11
+ import { Button } from '../button/button.js';
12
12
  import X from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/x.js';
13
13
 
14
14
  const Banner = ({
@@ -3,12 +3,12 @@
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import { useMemo } from 'react';
5
5
  import { useLocalizedStringFormatter } from 'react-aria';
6
- import { Provider, Breadcrumbs as Breadcrumbs$1, Breadcrumb as Breadcrumb$1, MenuTrigger } from 'react-aria-components';
6
+ import { Breadcrumb as Breadcrumb$1, Provider, Breadcrumbs as Breadcrumbs$1, MenuTrigger } from 'react-aria-components';
7
7
  import { breadcrumbsStyles, composeRenderProps } from '@opengovsg/oui-theme';
8
8
  import { Link } from '../link/link.js';
9
9
  import { Menu, MenuItem } from '../menu/menu.js';
10
10
  import { getValidChildren } from '../system/react-utils/children.js';
11
- import { BreadcrumbsStyleContext, useBreadcrumbsStyleContext } from './context.js';
11
+ import { useBreadcrumbsStyleContext, BreadcrumbsStyleContext } from './context.js';
12
12
  import { i18nStrings } from './i18n.js';
13
13
  import ChevronRight from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/chevron-right.js';
14
14
 
@@ -3,7 +3,7 @@
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
  import { useMemo, useContext } from 'react';
5
5
  import { CalendarDate, today, getLocalTimeZone } from '@internationalized/date';
6
- import { Calendar as Calendar$1, composeRenderProps, Provider, CalendarGrid, CalendarGridBody, CalendarCell, Text, CalendarStateContext } from 'react-aria-components';
6
+ import { Calendar as Calendar$1, Provider, CalendarGrid, CalendarGridBody, CalendarCell, composeRenderProps, Text, CalendarStateContext } from 'react-aria-components';
7
7
  import { useDeepCompareMemo } from 'use-deep-compare';
8
8
  import { calendarStyles, dataAttr, cn } from '@opengovsg/oui-theme';
9
9
  import { forwardRefGeneric, mapPropsVariants } from '../system/utils.js';
@@ -2,7 +2,7 @@
2
2
  "use client";
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import { useMemo } from 'react';
5
- import { useContextProps, ListBoxItem, composeRenderProps, Text } from 'react-aria-components';
5
+ import { useContextProps, ListBoxItem, Text, composeRenderProps } from 'react-aria-components';
6
6
  import { listBoxItemStyles } from '@opengovsg/oui-theme';
7
7
  import { forwardRef, mapPropsVariants } from '../system/utils.js';
8
8
  import { ComboBoxVariantContext } from './combo-box-variant-context.js';
@@ -4,7 +4,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import { useMemo, useCallback } from 'react';
5
5
  import { useLocalizedStringFormatter } from 'react-aria';
6
6
  import { ListLayout, Provider, ComboBox as ComboBox$1, Input, Button, Virtualizer, ListBox } from 'react-aria-components';
7
- import { listBoxItemStyles, cn, comboBoxStyles, composeTailwindRenderProps, composeRenderProps, comboBoxClearButtonStyles } from '@opengovsg/oui-theme';
7
+ import { comboBoxStyles, composeRenderProps, comboBoxClearButtonStyles, composeTailwindRenderProps, listBoxItemStyles, cn } from '@opengovsg/oui-theme';
8
8
  import { Label, FieldGroup, Description, FieldError } from '../field/field.js';
9
9
  import { Popover } from '../popover/popover.js';
10
10
  import { mapPropsVariants } from '../system/utils.js';
@@ -4,14 +4,13 @@ import { jsxs, jsx } from 'react/jsx-runtime';
4
4
  import { useMemo } from 'react';
5
5
  import { DatePicker as DatePicker$1, Dialog } from 'react-aria-components';
6
6
  import { datePickerStyles, composeTailwindRenderProps } from '@opengovsg/oui-theme';
7
- import { Button } from '../button/button.js';
8
- import { Calendar as Calendar$1 } from '../calendar/calendar.js';
9
- import '@internationalized/date';
10
7
  import { DateInput } from '../date-field/date-field.js';
11
8
  import { Label, FieldGroup, Description, FieldError } from '../field/field.js';
12
9
  import { Popover } from '../popover/popover.js';
13
10
  import { mapPropsVariants } from '../system/utils.js';
14
11
  import Calendar from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/calendar.js';
12
+ import { Calendar as Calendar$1 } from '../calendar/calendar.js';
13
+ import { Button } from '../button/button.js';
15
14
 
16
15
  function DatePicker(originalProps) {
17
16
  const [
@@ -5,13 +5,13 @@ import { useMemo } from 'react';
5
5
  import { CalendarDate } from '@internationalized/date';
6
6
  import { DateRangePicker as DateRangePicker$1, Dialog } from 'react-aria-components';
7
7
  import { dateRangePickerStyles, composeTailwindRenderProps } from '@opengovsg/oui-theme';
8
- import { Button } from '../button/button.js';
9
8
  import { DateInput } from '../date-field/date-field.js';
10
9
  import { Label, FieldGroup, Description, FieldError } from '../field/field.js';
11
10
  import { Popover } from '../popover/popover.js';
12
11
  import { RangeCalendar } from '../range-calendar/range-calendar.js';
13
12
  import { mapPropsVariants } from '../system/utils.js';
14
13
  import Calendar from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/calendar.js';
14
+ import { Button } from '../button/button.js';
15
15
 
16
16
  function DateRangePicker(originalProps) {
17
17
  const [
@@ -3,10 +3,10 @@
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
  import { useState, useEffect } from 'react';
5
5
  import { fileInfoDropzoneStyles, cn } from '@opengovsg/oui-theme';
6
- import { Button } from '../button/button.js';
7
6
  import { useFileDropzoneStateContext, useFileDropzoneStyleContext } from './contexts.js';
8
7
  import { formatBytes } from './utils.js';
9
8
  import Trash2 from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/trash-2.js';
9
+ import { Button } from '../button/button.js';
10
10
 
11
11
  const FileInfo = ({ file, imagePreview, classNames }) => {
12
12
  const {
package/dist/esm/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  export { useControllableState } from './hooks/use-controllable-state.js';
3
3
  export { useDraggable } from './hooks/use-draggable.js';
4
- export { Button } from './button/button.js';
5
4
  export { GovtBanner } from './govt-banner/govt-banner.js';
6
5
  export { Ripple } from './ripple/ripple.js';
7
6
  export { useRipple } from './ripple/use-ripple.js';
@@ -18,17 +17,11 @@ export { ComboBox, ComboBoxEmptyState } from './combo-box/combo-box.js';
18
17
  export { ComboBoxFuzzy } from './combo-box/combo-box-fuzzy.js';
19
18
  export { ComboBoxItem } from './combo-box/combo-box-item.js';
20
19
  export { ComboBoxVariantContext, useComboBoxVariantContext } from './combo-box/combo-box-variant-context.js';
21
- export { Banner } from './banner/banner.js';
22
20
  export { TagField } from './tag-field/tag-field.js';
23
21
  export { TagFieldItem } from './tag-field/tag-field-item.js';
24
22
  export { Select } from './select/select.js';
25
23
  export { SelectItem } from './select/select-item.js';
26
24
  export { SelectVariantContext, useSelectVariantContext } from './select/select-variant-context.js';
27
- export { Badge } from './badge/badge.js';
28
- export { Calendar, CalendarStateWrapper } from './calendar/calendar.js';
29
- export { CalendarStyleContext, useCalendarStyleContext } from './calendar/calendar-style-context.js';
30
- export { getEraFormat, useGenerateLocalizedMonths, useGenerateLocalizedYears, useLocalizedMonthYear } from './calendar/utils.js';
31
- export { CalendarDate } from '@internationalized/date';
32
25
  export { RangeCalendar, RangeCalendarCell, RangeCalendarStateWrapper } from './range-calendar/range-calendar.js';
33
26
  export { Menu, MenuItem, MenuSection, MenuSeparator, MenuTrigger, MenuVariantContext, SubmenuTrigger, useMenuVariantContext } from './menu/menu.js';
34
27
  export { Popover } from './popover/popover.js';
@@ -36,8 +29,6 @@ export { Tab, TabList, TabPanel, TabPanels, Tabs, TabsVariantContext, useTabsVar
36
29
  export { DateField, DateInput } from './date-field/date-field.js';
37
30
  export { DatePicker } from './date-picker/date-picker.js';
38
31
  export { DateRangePicker } from './date-range-picker/date-range-picker.js';
39
- export { Checkbox, CheckboxGroup } from './checkbox/checkbox.js';
40
- export { CheckboxGroupStyleContext, useCheckboxGroupStyleContext } from './checkbox/checkbox-group-style-context.js';
41
32
  export { Pagination } from './pagination/pagination.js';
42
33
  export { PaginationCursor } from './pagination/pagination-cursor.js';
43
34
  export { PaginationItem } from './pagination/pagination-item.js';
@@ -64,11 +55,9 @@ export { NavbarItem } from './navbar/navbar-item.js';
64
55
  export { useNavbar } from './navbar/use-navbar.js';
65
56
  export { NavbarProvider, useNavbarContext } from './navbar/navbar-context.js';
66
57
  export { Avatar } from './avatar/index.js';
67
- export { Accordion, AccordionContent, AccordionHeader, AccordionItem, AccordionStyleContext, useAccordionStyleContext } from './accordion/accordion.js';
68
58
  export { TimeField } from './time-field/time-field.js';
69
59
  export { SearchField } from './search-field/search-field.js';
70
60
  export { Link } from './link/link.js';
71
- export { Breadcrumb, Breadcrumbs } from './breadcrumbs/breadcrumbs.js';
72
61
  export { Sidebar, generateSidebarItems } from './sidebar/sidebar.js';
73
62
  export { SidebarRoot } from './sidebar/sidebar-root.js';
74
63
  export { SidebarItem } from './sidebar/sidebar-item.js';
@@ -77,8 +66,21 @@ export { SidebarHeader } from './sidebar/sidebar-header.js';
77
66
  export { Tooltip, TooltipTrigger } from './tooltip/tooltip.js';
78
67
  export { CountrySelect, FlagComponent, PhoneInput, PhoneNumberField } from './phone-number-field/phone-number-field.js';
79
68
  export { formatPhoneNumber, formatPhoneNumberIntl, isPossiblePhoneNumber, isValidPhoneNumber, parsePhoneNumber } from 'react-phone-number-input';
80
- export { toast } from 'sonner';
69
+ export { Infobox } from './infobox/infobox.js';
70
+ export { Radio, RadioGroup } from './radio-group/radio.js';
71
+ export { Accordion, AccordionContent, AccordionHeader, AccordionItem, AccordionStyleContext, useAccordionStyleContext } from './accordion/accordion.js';
81
72
  export { AvatarContext, useAvatarContext } from './avatar/avatar-context.js';
73
+ export { AvatarFallback, AvatarImage, AvatarRoot } from './avatar/avatar.js';
82
74
  export { AvatarGroup } from './avatar/avatar-group.js';
83
75
  export { AvatarGroupProvider, useAvatarGroup } from './avatar/avatar-group-context.js';
84
- export { AvatarFallback, AvatarImage, AvatarRoot } from './avatar/avatar.js';
76
+ export { Badge } from './badge/badge.js';
77
+ export { Banner } from './banner/banner.js';
78
+ export { Breadcrumb, Breadcrumbs } from './breadcrumbs/breadcrumbs.js';
79
+ export { Button } from './button/button.js';
80
+ export { Calendar, CalendarStateWrapper } from './calendar/calendar.js';
81
+ export { CalendarDate } from '@internationalized/date';
82
+ export { CalendarStyleContext, useCalendarStyleContext } from './calendar/calendar-style-context.js';
83
+ export { Checkbox, CheckboxGroup } from './checkbox/checkbox.js';
84
+ export { CheckboxGroupStyleContext, useCheckboxGroupStyleContext } from './checkbox/checkbox-group-style-context.js';
85
+ export { getEraFormat, useGenerateLocalizedMonths, useGenerateLocalizedYears, useLocalizedMonthYear } from './calendar/utils.js';
86
+ export { toast } from 'sonner';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ export { Infobox } from './infobox.js';
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ "use client";
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+ import { useMemo } from 'react';
5
+ import { useInfobox } from './use-infobox.js';
6
+ import Info from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/info.js';
7
+ import CircleCheck from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-check.js';
8
+ import CircleAlert from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-alert.js';
9
+
10
+ const Infobox = (props) => {
11
+ const { Component, children, slots, classNames, icon, variant } = useInfobox(props);
12
+ const displayedIcon = useMemo(() => {
13
+ if (icon) {
14
+ return icon;
15
+ }
16
+ if (icon === null) {
17
+ return null;
18
+ }
19
+ const iconClassName = slots.icon({ className: classNames?.icon });
20
+ switch (variant) {
21
+ case "error":
22
+ return /* @__PURE__ */ jsx(CircleAlert, { className: iconClassName });
23
+ case "success":
24
+ return /* @__PURE__ */ jsx(CircleCheck, { className: iconClassName });
25
+ case "warning":
26
+ case "info":
27
+ default:
28
+ return /* @__PURE__ */ jsx(Info, { className: iconClassName });
29
+ }
30
+ }, [icon, variant, slots, classNames?.icon]);
31
+ return /* @__PURE__ */ jsxs(Component, { className: slots.base({ className: classNames?.base }), children: [
32
+ displayedIcon,
33
+ /* @__PURE__ */ jsx("div", { className: slots.wrapper({ className: classNames?.wrapper }), children })
34
+ ] });
35
+ };
36
+
37
+ export { Infobox };
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ import { useMemo } from 'react';
3
+ import { useDeepCompareMemo } from 'use-deep-compare';
4
+ import { infoboxStyles } from '@opengovsg/oui-theme';
5
+ import { mapPropsVariants } from '../system/utils.js';
6
+
7
+ function useInfobox(originalProps) {
8
+ const [_props, variantProps] = mapPropsVariants(
9
+ originalProps,
10
+ infoboxStyles.variantKeys
11
+ );
12
+ const { children, as, classNames, icon } = _props;
13
+ const Component = useMemo(() => as || "div", [as]);
14
+ const slots = useDeepCompareMemo(
15
+ () => ({
16
+ ...infoboxStyles({ ...variantProps })
17
+ }),
18
+ [variantProps, infoboxStyles]
19
+ );
20
+ return {
21
+ Component,
22
+ children,
23
+ slots,
24
+ classNames,
25
+ icon,
26
+ variant: variantProps.variant
27
+ };
28
+ }
29
+
30
+ export { useInfobox };
@@ -5,10 +5,10 @@ import { useContext, isValidElement } from 'react';
5
5
  import { useLocalizedStringFormatter } from 'react-aria';
6
6
  import { Dialog } from 'react-aria-components';
7
7
  import { cn } from '@opengovsg/oui-theme';
8
- import { Button } from '../button/button.js';
9
8
  import { i18nStrings } from './i18n.js';
10
9
  import { ModalVariantContext } from './modal-variant-context.js';
11
10
  import X from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/x.js';
11
+ import { Button } from '../button/button.js';
12
12
 
13
13
  function ModalContent({
14
14
  closeButtonContent: closeButtonContentProp,
@@ -0,0 +1,17 @@
1
+ import createLucideIcon from '../createLucideIcon.js';
2
+
3
+ /**
4
+ * @license lucide-react v0.475.0 - ISC
5
+ *
6
+ * This source code is licensed under the ISC license.
7
+ * See the LICENSE file in the root directory of this source tree.
8
+ */
9
+
10
+
11
+ const __iconNode = [
12
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
13
+ ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
14
+ ];
15
+ const CircleCheck = createLucideIcon("CircleCheck", __iconNode);
16
+
17
+ export { __iconNode, CircleCheck as default };
@@ -2,13 +2,13 @@
2
2
  "use client";
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
  import { NumberField as NumberField$1 } from 'react-aria-components';
5
- import { numberFieldStyles, composeTailwindRenderProps, dataAttr, fieldBorderStyles, cn } from '@opengovsg/oui-theme';
6
- import { Button } from '../button/button.js';
5
+ import { numberFieldStyles, fieldBorderStyles, cn, composeTailwindRenderProps, dataAttr } from '@opengovsg/oui-theme';
7
6
  import { Label, FieldGroup, Description, FieldError } from '../field/field.js';
8
7
  import { Input } from '../input/input.js';
9
8
  import { mapPropsVariants } from '../system/utils.js';
10
9
  import Minus from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/minus.js';
11
10
  import Plus from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/plus.js';
11
+ import { Button } from '../button/button.js';
12
12
 
13
13
  function NumberField(originalProps) {
14
14
  const [
@@ -3,7 +3,7 @@
3
3
  import { useMemo } from 'react';
4
4
  import { useFocusRing } from '@react-aria/focus';
5
5
  import { usePress, useHover } from '@react-aria/interactions';
6
- import { useRouter, mergeProps, chain, shouldClientNavigate } from '@react-aria/utils';
6
+ import { useRouter, chain, shouldClientNavigate, mergeProps } from '@react-aria/utils';
7
7
  import { cn, dataAttr } from '@opengovsg/oui-theme';
8
8
  import { useDomRef } from '../system/react-utils/refs.js';
9
9
  import { filterDOMProps } from '../system/react-utils/filter-dom-props.js';
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  "use client";
3
- import { jsxs, jsx } from 'react/jsx-runtime';
4
- import { useMemo, useState, useRef, useCallback } from 'react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+ import { useMemo, useCallback, useState, useRef } from 'react';
5
5
  import { TextField, Provider } from 'react-aria-components';
6
6
  import BasePhoneInput, { getCountryCallingCode } from 'react-phone-number-input';
7
7
  import flags from 'react-phone-number-input/flags';
8
8
  import NonInternationalBasePhoneInput from 'react-phone-number-input/input';
9
- import { phoneNumberFieldStyles, cn } from '@opengovsg/oui-theme';
9
+ import { cn, phoneNumberFieldStyles } from '@opengovsg/oui-theme';
10
10
  import { Label, FieldGroup, Description, FieldError } from '../field/field.js';
11
11
  import { useControllableState } from '../hooks/use-controllable-state.js';
12
12
  import { Input } from '../input/input.js';
@@ -15,7 +15,7 @@ import { SelectItem } from '../select/select-item.js';
15
15
  import { useLocalizedStringFormatter } from '../system/l10n.js';
16
16
  import { mapPropsVariants } from '../system/utils.js';
17
17
  import { MOBILE_EXAMPLES } from './constants.js';
18
- import { PhoneInputContext, usePhoneInputContext } from './context.js';
18
+ import { usePhoneInputContext, PhoneInputContext } from './context.js';
19
19
  import { i18nStrings } from './i18n.js';
20
20
 
21
21
  const PhoneInput = ({
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  "use client";
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
- import { useSlottedContext, PopoverContext, Popover as Popover$1, composeRenderProps, OverlayArrow } from 'react-aria-components';
4
+ import { useSlottedContext, PopoverContext, Popover as Popover$1, OverlayArrow, composeRenderProps } from 'react-aria-components';
5
5
  import { popoverArrowStyles, popoverStyles } from '@opengovsg/oui-theme';
6
6
 
7
7
  const Popover = ({
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ export { Radio, RadioGroup } from './radio.js';
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ import { createContext } from '../system/react-utils/context.js';
3
+
4
+ const [RadioGroupVariantContext, useRadioGroupVariantContext] = createContext({
5
+ name: "RadioGroupVariantContext",
6
+ strict: false,
7
+ defaultValue: {
8
+ size: "md"
9
+ }
10
+ });
11
+
12
+ export { RadioGroupVariantContext, useRadioGroupVariantContext };
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ "use client";
3
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
+ import { Radio as Radio$1, composeRenderProps, Provider, RadioGroup as RadioGroup$1 } from 'react-aria-components';
5
+ import { radioStyles, radioGroupStyles } from '@opengovsg/oui-theme';
6
+ import { Description, Label, FieldError } from '../field/field.js';
7
+ import { renderChildren } from '../system/react-utils/children.js';
8
+ import { mapPropsVariants } from '../system/utils.js';
9
+ import { useRadioGroupVariantContext, RadioGroupVariantContext } from './radio-group-variant-context.js';
10
+
11
+ const Radio = ({
12
+ classNames,
13
+ className,
14
+ children,
15
+ description,
16
+ ...originalProps
17
+ }) => {
18
+ const [props, variants] = mapPropsVariants(
19
+ originalProps,
20
+ radioStyles.variantKeys
21
+ );
22
+ const groupContext = useRadioGroupVariantContext();
23
+ const styles = radioStyles({ size: groupContext?.size, ...variants });
24
+ return /* @__PURE__ */ jsx(
25
+ Radio$1,
26
+ {
27
+ ...props,
28
+ isDisabled: variants.isDisabled,
29
+ className: composeRenderProps(
30
+ className ?? classNames?.base,
31
+ (className2, renderProps) => styles.base({ ...renderProps, className: className2 })
32
+ ),
33
+ children: (renderProps) => {
34
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
35
+ /* @__PURE__ */ jsx(
36
+ "span",
37
+ {
38
+ className: styles.circle({
39
+ ...renderProps,
40
+ className: classNames?.circle
41
+ }),
42
+ children: /* @__PURE__ */ jsx(
43
+ "span",
44
+ {
45
+ className: styles.icon({
46
+ ...renderProps,
47
+ className: classNames?.icon
48
+ })
49
+ }
50
+ )
51
+ }
52
+ ),
53
+ /* @__PURE__ */ jsx("span", { className: styles.label({ className: classNames?.label }), children: renderChildren(renderProps, children) }),
54
+ description && /* @__PURE__ */ jsx(
55
+ Description,
56
+ {
57
+ size: groupContext?.size,
58
+ className: styles.description({
59
+ className: classNames?.description
60
+ }),
61
+ children: description
62
+ }
63
+ )
64
+ ] });
65
+ }
66
+ }
67
+ );
68
+ };
69
+ const RadioGroup = ({
70
+ label,
71
+ description,
72
+ errorMessage,
73
+ classNames,
74
+ size,
75
+ ...props
76
+ }) => {
77
+ const context = { size };
78
+ return /* @__PURE__ */ jsx(Provider, { values: [[RadioGroupVariantContext, context]], children: /* @__PURE__ */ jsxs(
79
+ RadioGroup$1,
80
+ {
81
+ ...props,
82
+ className: composeRenderProps(
83
+ props.className ?? classNames?.base,
84
+ (className, renderProps) => radioGroupStyles({ ...renderProps, size, className })
85
+ ),
86
+ children: [
87
+ label && /* @__PURE__ */ jsx(Label, { size, className: classNames?.label, children: label }),
88
+ props.children,
89
+ description && /* @__PURE__ */ jsx(Description, { size, className: classNames?.description, children: description }),
90
+ /* @__PURE__ */ jsx(FieldError, { size, classNames: classNames?.error, children: errorMessage })
91
+ ]
92
+ }
93
+ ) });
94
+ };
95
+
96
+ export { Radio, RadioGroup };
@@ -6,12 +6,12 @@ import { CalendarDate, today, getLocalTimeZone, getDayOfWeek } from '@internatio
6
6
  import { RangeCalendar as RangeCalendar$1, Provider, CalendarGrid, CalendarGridBody, Text, RangeCalendarStateContext, useLocale, CalendarCell } from 'react-aria-components';
7
7
  import { useDeepCompareMemo } from 'use-deep-compare';
8
8
  import { calendarStyles, composeRenderProps, cn, dataAttr } from '@opengovsg/oui-theme';
9
- import { CalendarStyleContext, useCalendarStyleContext } from '../calendar/calendar-style-context.js';
10
9
  import { AgnosticCalendarStateContext } from '../calendar/agnostic-calendar-state-context.js';
11
10
  import { CalendarBottomContent } from '../calendar/calendar-bottom-content.js';
12
11
  import { CalendarGridHeader } from '../calendar/calendar-grid-header.js';
13
12
  import { CalendarHeader } from '../calendar/calendar-header.js';
14
13
  import { forwardRefGeneric, mapPropsVariants } from '../system/utils.js';
14
+ import { CalendarStyleContext, useCalendarStyleContext } from '../calendar/calendar-style-context.js';
15
15
 
16
16
  const RangeCalendar = forwardRefGeneric(function RangeCalendar2(originalProps, ref) {
17
17
  const [props, variantProps] = mapPropsVariants(
@@ -3,13 +3,13 @@ import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { useLocalizedStringFormatter } from 'react-aria';
4
4
  import { SearchField as SearchField$1 } from 'react-aria-components';
5
5
  import { searchFieldStyles, composeRenderProps } from '@opengovsg/oui-theme';
6
- import { Button } from '../button/button.js';
7
6
  import { Label, FieldGroup, Description, FieldError } from '../field/field.js';
8
7
  import { Input } from '../input/input.js';
9
8
  import { mapPropsVariants } from '../system/utils.js';
10
9
  import { i18nStrings } from './i18n.js';
11
10
  import Search from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/search.js';
12
11
  import X from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/x.js';
12
+ import { Button } from '../button/button.js';
13
13
 
14
14
  function SearchField(originalProps) {
15
15
  const [
@@ -5,7 +5,6 @@ import { useMemo, isValidElement, cloneElement } from 'react';
5
5
  import { useLocalizedStringFormatter } from 'react-aria';
6
6
  import { useFilter, Virtualizer, ListLayout, ListBox, Provider, Select as Select$1, SelectValue, Autocomplete, SearchField, Input } from 'react-aria-components';
7
7
  import { selectStyles, cn, composeRenderProps } from '@opengovsg/oui-theme';
8
- import { Button } from '../button/button.js';
9
8
  import { Label, Description, FieldError } from '../field/field.js';
10
9
  import { Popover } from '../popover/popover.js';
11
10
  import { useElementWidth } from '../system/react-utils/sizing.js';
@@ -13,6 +12,7 @@ import { mapPropsVariants } from '../system/utils.js';
13
12
  import { i18nStrings } from './i18n.js';
14
13
  import { SelectVariantContext } from './select-variant-context.js';
15
14
  import ChevronDown from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/chevron-down.js';
15
+ import { Button } from '../button/button.js';
16
16
 
17
17
  const calculateEstimatedRowHeight = (size) => {
18
18
  switch (size) {
@@ -6,11 +6,11 @@ import { useLocalizedStringFormatter } from 'react-aria';
6
6
  import { Disclosure, DisclosurePanel, Provider, Link, Button as Button$1 } from 'react-aria-components';
7
7
  import { useDisclosureState } from 'react-stately';
8
8
  import { dataAttr } from '@opengovsg/oui-theme';
9
- import { Button } from '../button/button.js';
10
9
  import { forwardRef } from '../system/utils.js';
11
10
  import { useSidebarStyleContext, useSidebarCollapseContext, SidebarNestContext, useSidebarNestContext } from './context.js';
12
11
  import { i18nStrings } from './i18n.js';
13
12
  import ChevronDown from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/chevron-down.js';
13
+ import { Button } from '../button/button.js';
14
14
 
15
15
  const SidebarListSection = ({
16
16
  onlyCaretToggle,
@@ -2,8 +2,8 @@
2
2
  "use client";
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import { forwardRef } from 'react';
5
- import { useContextProps, TabList as TabList$1, composeRenderProps, Tab as Tab$1, TabPanels as TabPanels$1, Provider, Tabs as Tabs$1, TabPanel as TabPanel$1 } from 'react-aria-components';
6
- import { tabListStyles, tabStyles, tabsStyles, tabPanelStyles } from '@opengovsg/oui-theme';
5
+ import { useContextProps, TabList as TabList$1, composeRenderProps, Tab as Tab$1, TabPanels as TabPanels$1, TabPanel as TabPanel$1, Provider, Tabs as Tabs$1 } from 'react-aria-components';
6
+ import { tabListStyles, tabStyles, tabPanelStyles, tabsStyles } from '@opengovsg/oui-theme';
7
7
  import { forwardRefGeneric, mapPropsVariants } from '../system/utils.js';
8
8
  import { createContext } from '../system/react-utils/context.js';
9
9
 
@@ -39,4 +39,6 @@ export * from "./breadcrumbs";
39
39
  export * from "./sidebar";
40
40
  export * from "./tooltip";
41
41
  export * from "./phone-number-field";
42
+ export * from "./infobox";
43
+ export * from "./radio-group";
42
44
  //# sourceMappingURL=index.d.ts.map
@@ -39,4 +39,6 @@ export * from "./breadcrumbs";
39
39
  export * from "./sidebar";
40
40
  export * from "./tooltip";
41
41
  export * from "./phone-number-field";
42
+ export * from "./infobox";
43
+ export * from "./radio-group";
42
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./infobox";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infobox/index.tsx"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { UseInfoboxProps } from "./use-infobox";
2
+ export interface InfoboxProps extends UseInfoboxProps {
3
+ }
4
+ export declare const Infobox: (props: InfoboxProps) => import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=infobox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infobox.d.ts","sourceRoot":"","sources":["../../../src/infobox/infobox.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,MAAM,WAAW,YAAa,SAAQ,eAAe;CAAG;AAExD,eAAO,MAAM,OAAO,UAAW,YAAY,4CAsC1C,CAAA"}