@opengovsg/oui 0.0.30 → 0.0.32
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.
- package/dist/cjs/avatar/avatar-context.cjs +12 -0
- package/dist/cjs/avatar/avatar-group-context.cjs +88 -0
- package/dist/cjs/avatar/avatar-group.cjs +60 -0
- package/dist/cjs/avatar/avatar.cjs +132 -0
- package/dist/cjs/avatar/hooks/use-img-loading-status.cjs +68 -0
- package/dist/cjs/avatar/index.cjs +23 -0
- package/dist/cjs/avatar/utils.cjs +9 -0
- package/dist/cjs/banner/banner.cjs +1 -1
- package/dist/cjs/button/button.cjs +1 -1
- package/dist/cjs/calendar/calendar-month-day-selector.cjs +2 -2
- package/dist/cjs/checkbox/checkbox.cjs +3 -3
- package/dist/cjs/combo-box/combo-box.cjs +2 -2
- package/dist/cjs/date-field/date-field.cjs +1 -1
- package/dist/cjs/date-picker/date-picker.cjs +4 -5
- package/dist/cjs/date-range-picker/date-range-picker.cjs +5 -5
- package/dist/cjs/file-dropzone/file-dropzone.cjs +2 -2
- package/dist/cjs/file-dropzone/file-info.cjs +1 -1
- package/dist/cjs/index.cjs +26 -12
- package/dist/cjs/menu/menu.cjs +1 -1
- package/dist/cjs/modal/modal-content.cjs +1 -1
- package/dist/cjs/node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/user.cjs +22 -0
- package/dist/cjs/number-field/number-field.cjs +3 -3
- package/dist/cjs/range-calendar/range-calendar.cjs +1 -1
- package/dist/cjs/select/select.cjs +89 -17
- package/dist/cjs/tag-field/tag-field.cjs +3 -3
- package/dist/cjs/text-area-field/text-area-field.cjs +1 -1
- package/dist/cjs/text-field/text-field.cjs +1 -1
- package/dist/cjs/toast/toast.cjs +1 -1
- package/dist/esm/avatar/avatar-context.js +9 -0
- package/dist/esm/avatar/avatar-group-context.js +84 -0
- package/dist/esm/avatar/avatar-group.js +58 -0
- package/dist/esm/avatar/avatar.js +128 -0
- package/dist/esm/avatar/hooks/use-img-loading-status.js +66 -0
- package/dist/esm/avatar/index.js +13 -0
- package/dist/esm/avatar/utils.js +7 -0
- package/dist/esm/banner/banner.js +1 -1
- package/dist/esm/button/button.js +1 -1
- package/dist/esm/calendar/calendar-month-day-selector.js +2 -2
- package/dist/esm/checkbox/checkbox.js +3 -3
- package/dist/esm/combo-box/combo-box.js +2 -2
- package/dist/esm/date-field/date-field.js +1 -1
- package/dist/esm/date-picker/date-picker.js +4 -5
- package/dist/esm/date-range-picker/date-range-picker.js +5 -5
- package/dist/esm/file-dropzone/file-dropzone.js +2 -2
- package/dist/esm/file-dropzone/file-info.js +1 -1
- package/dist/esm/index.js +8 -3
- package/dist/esm/menu/menu.js +1 -1
- package/dist/esm/modal/modal-content.js +1 -1
- package/dist/esm/node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/user.js +17 -0
- package/dist/esm/number-field/number-field.js +3 -3
- package/dist/esm/range-calendar/range-calendar.js +1 -1
- package/dist/esm/select/select.js +92 -20
- package/dist/esm/tag-field/tag-field.js +3 -3
- package/dist/esm/text-area-field/text-area-field.js +1 -1
- package/dist/esm/text-field/text-field.js +1 -1
- package/dist/esm/toast/toast.js +1 -1
- package/dist/types/avatar/avatar-context.d.ts +12 -0
- package/dist/types/avatar/avatar-context.d.ts.map +1 -0
- package/dist/types/avatar/avatar-group-context.d.ts +70 -0
- package/dist/types/avatar/avatar-group-context.d.ts.map +1 -0
- package/dist/types/avatar/avatar-group.d.ts +5 -0
- package/dist/types/avatar/avatar-group.d.ts.map +1 -0
- package/dist/types/avatar/avatar.d.ts +18 -0
- package/dist/types/avatar/avatar.d.ts.map +1 -0
- package/dist/types/avatar/hooks/use-img-loading-status.d.ts +4 -0
- package/dist/types/avatar/hooks/use-img-loading-status.d.ts.map +1 -0
- package/dist/types/avatar/index.d.ts +15 -0
- package/dist/types/avatar/index.d.ts.map +1 -0
- package/dist/types/avatar/utils.d.ts +2 -0
- package/dist/types/avatar/utils.d.ts.map +1 -0
- package/dist/types/checkbox/checkbox-group-style-context.d.ts +1 -1
- package/dist/types/checkbox/checkbox-group-style-context.d.ts.map +1 -1
- package/dist/types/index.d.mts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/menu/menu.d.ts.map +1 -1
- package/dist/types/select/select.d.ts +14 -0
- package/dist/types/select/select.d.ts.map +1 -1
- package/dist/types/system/react-utils/context.d.ts +4 -4
- package/dist/types/system/react-utils/context.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
var index = require('./avatar/index.cjs');
|
|
4
5
|
var useControllableState = require('./hooks/use-controllable-state.cjs');
|
|
5
6
|
var useDraggable = require('./hooks/use-draggable.cjs');
|
|
6
7
|
var button = require('./button/button.cjs');
|
|
@@ -27,10 +28,10 @@ var select = require('./select/select.cjs');
|
|
|
27
28
|
var selectItem = require('./select/select-item.cjs');
|
|
28
29
|
var selectVariantContext = require('./select/select-variant-context.cjs');
|
|
29
30
|
var badge = require('./badge/badge.cjs');
|
|
31
|
+
var date = require('@internationalized/date');
|
|
30
32
|
var calendar = require('./calendar/calendar.cjs');
|
|
31
33
|
var calendarStyleContext = require('./calendar/calendar-style-context.cjs');
|
|
32
34
|
var utils = require('./calendar/utils.cjs');
|
|
33
|
-
var date = require('@internationalized/date');
|
|
34
35
|
var rangeCalendar = require('./range-calendar/range-calendar.cjs');
|
|
35
36
|
var menu = require('./menu/menu.cjs');
|
|
36
37
|
var popover = require('./popover/popover.cjs');
|
|
@@ -40,10 +41,10 @@ var datePicker = require('./date-picker/date-picker.cjs');
|
|
|
40
41
|
var dateRangePicker = require('./date-range-picker/date-range-picker.cjs');
|
|
41
42
|
var checkbox = require('./checkbox/checkbox.cjs');
|
|
42
43
|
var checkboxGroupStyleContext = require('./checkbox/checkbox-group-style-context.cjs');
|
|
44
|
+
var usePagination = require('./pagination/hooks/use-pagination.cjs');
|
|
43
45
|
var pagination = require('./pagination/pagination.cjs');
|
|
44
46
|
var paginationCursor = require('./pagination/pagination-cursor.cjs');
|
|
45
47
|
var paginationItem = require('./pagination/pagination-item.cjs');
|
|
46
|
-
var usePagination = require('./pagination/hooks/use-pagination.cjs');
|
|
47
48
|
var usePagination$1 = require('./pagination/use-pagination.cjs');
|
|
48
49
|
var fileDropzone = require('./file-dropzone/file-dropzone.cjs');
|
|
49
50
|
var fileInfo = require('./file-dropzone/file-info.cjs');
|
|
@@ -56,6 +57,7 @@ var modalBody = require('./modal/modal-body.cjs');
|
|
|
56
57
|
var modalHeader = require('./modal/modal-header.cjs');
|
|
57
58
|
var modalVariantContext = require('./modal/modal-variant-context.cjs');
|
|
58
59
|
var toast = require('./toast/toast.cjs');
|
|
60
|
+
var sonner = require('sonner');
|
|
59
61
|
var navbar = require('./navbar/navbar.cjs');
|
|
60
62
|
var navbarBrand = require('./navbar/navbar-brand.cjs');
|
|
61
63
|
var navbarContent = require('./navbar/navbar-content.cjs');
|
|
@@ -65,10 +67,14 @@ var toggle$1 = require('./navbar/navbar-menu/toggle.cjs');
|
|
|
65
67
|
var navbarItem = require('./navbar/navbar-item.cjs');
|
|
66
68
|
var useNavbar = require('./navbar/use-navbar.cjs');
|
|
67
69
|
var navbarContext = require('./navbar/navbar-context.cjs');
|
|
68
|
-
var
|
|
70
|
+
var avatarContext = require('./avatar/avatar-context.cjs');
|
|
71
|
+
var avatarGroup = require('./avatar/avatar-group.cjs');
|
|
72
|
+
var avatarGroupContext = require('./avatar/avatar-group-context.cjs');
|
|
73
|
+
var avatar = require('./avatar/avatar.cjs');
|
|
69
74
|
|
|
70
75
|
|
|
71
76
|
|
|
77
|
+
exports.Avatar = index.Avatar;
|
|
72
78
|
exports.useControllableState = useControllableState.useControllableState;
|
|
73
79
|
exports.useDraggable = useDraggable.useDraggable;
|
|
74
80
|
exports.Button = button.Button;
|
|
@@ -102,6 +108,10 @@ exports.SelectItem = selectItem.SelectItem;
|
|
|
102
108
|
exports.SelectVariantContext = selectVariantContext.SelectVariantContext;
|
|
103
109
|
exports.useSelectVariantContext = selectVariantContext.useSelectVariantContext;
|
|
104
110
|
exports.Badge = badge.Badge;
|
|
111
|
+
Object.defineProperty(exports, "CalendarDate", {
|
|
112
|
+
enumerable: true,
|
|
113
|
+
get: function () { return date.CalendarDate; }
|
|
114
|
+
});
|
|
105
115
|
exports.Calendar = calendar.Calendar;
|
|
106
116
|
exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
|
|
107
117
|
exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
|
|
@@ -110,10 +120,6 @@ exports.getEraFormat = utils.getEraFormat;
|
|
|
110
120
|
exports.useGenerateLocalizedMonths = utils.useGenerateLocalizedMonths;
|
|
111
121
|
exports.useGenerateLocalizedYears = utils.useGenerateLocalizedYears;
|
|
112
122
|
exports.useLocalizedMonthYear = utils.useLocalizedMonthYear;
|
|
113
|
-
Object.defineProperty(exports, "CalendarDate", {
|
|
114
|
-
enumerable: true,
|
|
115
|
-
get: function () { return date.CalendarDate; }
|
|
116
|
-
});
|
|
117
123
|
exports.RangeCalendar = rangeCalendar.RangeCalendar;
|
|
118
124
|
exports.RangeCalendarCell = rangeCalendar.RangeCalendarCell;
|
|
119
125
|
exports.RangeCalendarStateWrapper = rangeCalendar.RangeCalendarStateWrapper;
|
|
@@ -140,10 +146,10 @@ exports.Checkbox = checkbox.Checkbox;
|
|
|
140
146
|
exports.CheckboxGroup = checkbox.CheckboxGroup;
|
|
141
147
|
exports.CheckboxGroupStyleContext = checkboxGroupStyleContext.CheckboxGroupStyleContext;
|
|
142
148
|
exports.useCheckboxGroupStyleContext = checkboxGroupStyleContext.useCheckboxGroupStyleContext;
|
|
149
|
+
exports.PaginationItemType = usePagination.PaginationItemType;
|
|
143
150
|
exports.Pagination = pagination.Pagination;
|
|
144
151
|
exports.PaginationCursor = paginationCursor.PaginationCursor;
|
|
145
152
|
exports.PaginationItem = paginationItem.PaginationItem;
|
|
146
|
-
exports.PaginationItemType = usePagination.PaginationItemType;
|
|
147
153
|
exports.CURSOR_TRANSITION_TIMEOUT = usePagination$1.CURSOR_TRANSITION_TIMEOUT;
|
|
148
154
|
exports.usePagination = usePagination$1.usePagination;
|
|
149
155
|
exports.FileDropzone = fileDropzone.FileDropzone;
|
|
@@ -159,6 +165,10 @@ exports.ModalHeader = modalHeader.ModalHeader;
|
|
|
159
165
|
exports.ModalVariantContext = modalVariantContext.ModalVariantContext;
|
|
160
166
|
exports.useModalVariantContext = modalVariantContext.useModalVariantContext;
|
|
161
167
|
exports.Toaster = toast.Toaster;
|
|
168
|
+
Object.defineProperty(exports, "toast", {
|
|
169
|
+
enumerable: true,
|
|
170
|
+
get: function () { return sonner.toast; }
|
|
171
|
+
});
|
|
162
172
|
exports.Navbar = navbar.Navbar;
|
|
163
173
|
exports.NavbarBrand = navbarBrand.NavbarBrand;
|
|
164
174
|
exports.NavbarContent = navbarContent.NavbarContent;
|
|
@@ -169,7 +179,11 @@ exports.NavbarItem = navbarItem.NavbarItem;
|
|
|
169
179
|
exports.useNavbar = useNavbar.useNavbar;
|
|
170
180
|
exports.NavbarProvider = navbarContext.NavbarProvider;
|
|
171
181
|
exports.useNavbarContext = navbarContext.useNavbarContext;
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
182
|
+
exports.AvatarContext = avatarContext.AvatarContext;
|
|
183
|
+
exports.useAvatarContext = avatarContext.useAvatarContext;
|
|
184
|
+
exports.AvatarGroup = avatarGroup.AvatarGroup;
|
|
185
|
+
exports.AvatarGroupProvider = avatarGroupContext.AvatarGroupProvider;
|
|
186
|
+
exports.useAvatarGroup = avatarGroupContext.useAvatarGroup;
|
|
187
|
+
exports.AvatarFallback = avatar.AvatarFallback;
|
|
188
|
+
exports.AvatarImage = avatar.AvatarImage;
|
|
189
|
+
exports.AvatarRoot = avatar.AvatarRoot;
|
package/dist/cjs/menu/menu.cjs
CHANGED
|
@@ -6,11 +6,11 @@ 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 popover = require('../popover/popover.cjs');
|
|
10
9
|
var utils = require('../system/utils.cjs');
|
|
11
10
|
var context = require('../system/react-utils/context.cjs');
|
|
12
11
|
var check = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/check.cjs');
|
|
13
12
|
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');
|
|
13
|
+
var popover = require('../popover/popover.cjs');
|
|
14
14
|
|
|
15
15
|
const [MenuVariantContext, useMenuVariantContext] = context.createContext({
|
|
16
16
|
name: "MenuVariantContext",
|
|
@@ -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');
|
|
11
10
|
var i18n = require('./i18n.cjs');
|
|
12
11
|
var modalVariantContext = require('./modal-variant-context.cjs');
|
|
13
12
|
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,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var createLucideIcon = require('../createLucideIcon.cjs');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @license lucide-react v0.475.0 - ISC
|
|
9
|
+
*
|
|
10
|
+
* This source code is licensed under the ISC license.
|
|
11
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
const __iconNode = [
|
|
16
|
+
["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2", key: "975kel" }],
|
|
17
|
+
["circle", { cx: "12", cy: "7", r: "4", key: "17ys0d" }]
|
|
18
|
+
];
|
|
19
|
+
const User = createLucideIcon.default("User", __iconNode);
|
|
20
|
+
|
|
21
|
+
exports.__iconNode = __iconNode;
|
|
22
|
+
exports.default = User;
|
|
@@ -5,12 +5,12 @@
|
|
|
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 button = require('../button/button.cjs');
|
|
9
|
-
var field = require('../field/field.cjs');
|
|
10
|
-
var input = require('../input/input.cjs');
|
|
11
8
|
var utils = require('../system/utils.cjs');
|
|
12
9
|
var minus = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/minus.cjs');
|
|
13
10
|
var plus = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/plus.cjs');
|
|
11
|
+
var field = require('../field/field.cjs');
|
|
12
|
+
var input = require('../input/input.cjs');
|
|
13
|
+
var button = require('../button/button.cjs');
|
|
14
14
|
|
|
15
15
|
function NumberField(originalProps) {
|
|
16
16
|
const [
|
|
@@ -8,12 +8,12 @@ var date = require('@internationalized/date');
|
|
|
8
8
|
var reactAriaComponents = require('react-aria-components');
|
|
9
9
|
var useDeepCompare = require('use-deep-compare');
|
|
10
10
|
var ouiTheme = require('@opengovsg/oui-theme');
|
|
11
|
-
var calendarStyleContext = require('../calendar/calendar-style-context.cjs');
|
|
12
11
|
var agnosticCalendarStateContext = require('../calendar/agnostic-calendar-state-context.cjs');
|
|
13
12
|
var calendarBottomContent = require('../calendar/calendar-bottom-content.cjs');
|
|
14
13
|
var calendarGridHeader = require('../calendar/calendar-grid-header.cjs');
|
|
15
14
|
var calendarHeader = require('../calendar/calendar-header.cjs');
|
|
16
15
|
var utils = require('../system/utils.cjs');
|
|
16
|
+
var calendarStyleContext = require('../calendar/calendar-style-context.cjs');
|
|
17
17
|
|
|
18
18
|
const RangeCalendar = utils.forwardRefGeneric(function RangeCalendar2(originalProps, ref) {
|
|
19
19
|
const [props, variantProps] = utils.mapPropsVariants(
|
|
@@ -4,15 +4,34 @@
|
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var $670gB$react = require('react');
|
|
7
|
+
var reactAria = require('react-aria');
|
|
7
8
|
var reactAriaComponents = require('react-aria-components');
|
|
8
9
|
var ouiTheme = require('@opengovsg/oui-theme');
|
|
9
|
-
var button = require('../button/button.cjs');
|
|
10
|
-
var field = require('../field/field.cjs');
|
|
11
|
-
var popover = require('../popover/popover.cjs');
|
|
12
10
|
var utils = require('../system/utils.cjs');
|
|
13
11
|
var selectVariantContext = require('./select-variant-context.cjs');
|
|
12
|
+
var field = require('../field/field.cjs');
|
|
14
13
|
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');
|
|
14
|
+
var popover = require('../popover/popover.cjs');
|
|
15
|
+
var button = require('../button/button.cjs');
|
|
15
16
|
|
|
17
|
+
const i18nStrings = {
|
|
18
|
+
"en-SG": {
|
|
19
|
+
searchPlaceholder: "Search...",
|
|
20
|
+
searchAriaLabel: "Search options"
|
|
21
|
+
},
|
|
22
|
+
"zh-SG": {
|
|
23
|
+
searchPlaceholder: "\u641C\u7D22...",
|
|
24
|
+
searchAriaLabel: "\u641C\u7D22\u9009\u9879"
|
|
25
|
+
},
|
|
26
|
+
"ms-SG": {
|
|
27
|
+
searchPlaceholder: "Cari...",
|
|
28
|
+
searchAriaLabel: "Cari pilihan"
|
|
29
|
+
},
|
|
30
|
+
"ta-SG": {
|
|
31
|
+
searchPlaceholder: "\u0BA4\u0BC7\u0B9F\u0BC1...",
|
|
32
|
+
searchAriaLabel: "\u0BA4\u0BC7\u0B9F\u0BB2\u0BCD \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0B99\u0BCD\u0B95\u0BB3\u0BCD"
|
|
33
|
+
}
|
|
34
|
+
};
|
|
16
35
|
const calculateEstimatedRowHeight = (size) => {
|
|
17
36
|
switch (size) {
|
|
18
37
|
case "xs":
|
|
@@ -30,12 +49,22 @@ function Select({
|
|
|
30
49
|
errorMessage,
|
|
31
50
|
...originalProps
|
|
32
51
|
}) {
|
|
52
|
+
const formatter = reactAria.useLocalizedStringFormatter(i18nStrings);
|
|
33
53
|
const [_props, variantProps] = utils.mapPropsVariants(
|
|
34
54
|
originalProps,
|
|
35
55
|
ouiTheme.selectStyles.variantKeys
|
|
36
56
|
);
|
|
37
|
-
const {
|
|
57
|
+
const {
|
|
58
|
+
items,
|
|
59
|
+
children,
|
|
60
|
+
listLayoutOptions,
|
|
61
|
+
enableSearch = false,
|
|
62
|
+
searchPlaceholder,
|
|
63
|
+
searchIcon,
|
|
64
|
+
...props
|
|
65
|
+
} = _props;
|
|
38
66
|
const styles = ouiTheme.selectStyles(variantProps);
|
|
67
|
+
const { contains } = reactAriaComponents.useFilter({ sensitivity: "base" });
|
|
39
68
|
const layoutOptions = $670gB$react.useMemo(() => {
|
|
40
69
|
return {
|
|
41
70
|
estimatedRowHeight: calculateEstimatedRowHeight(
|
|
@@ -44,6 +73,37 @@ function Select({
|
|
|
44
73
|
...listLayoutOptions
|
|
45
74
|
};
|
|
46
75
|
}, [listLayoutOptions, variantProps.size]);
|
|
76
|
+
const renderedSearchIcon = $670gB$react.useMemo(() => {
|
|
77
|
+
if (!enableSearch || !searchIcon) return null;
|
|
78
|
+
if ($670gB$react.isValidElement(searchIcon)) {
|
|
79
|
+
const iconElement = searchIcon;
|
|
80
|
+
return $670gB$react.cloneElement(iconElement, {
|
|
81
|
+
className: styles.searchIcon({
|
|
82
|
+
className: ouiTheme.cn(classNames?.searchIcon, iconElement.props.className)
|
|
83
|
+
})
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
87
|
+
"span",
|
|
88
|
+
{
|
|
89
|
+
className: styles.searchIcon({ className: classNames?.searchIcon }),
|
|
90
|
+
children: searchIcon
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}, [classNames?.searchIcon, enableSearch, searchIcon, styles]);
|
|
94
|
+
const listContent = /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Virtualizer, { layout: reactAriaComponents.ListLayout, layoutOptions, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
95
|
+
reactAriaComponents.ListBox,
|
|
96
|
+
{
|
|
97
|
+
autoFocus: !enableSearch,
|
|
98
|
+
items,
|
|
99
|
+
shouldFocusWrap: true,
|
|
100
|
+
className: ouiTheme.composeRenderProps(
|
|
101
|
+
classNames?.list,
|
|
102
|
+
(className, renderProps) => styles.list({ className, ...renderProps })
|
|
103
|
+
),
|
|
104
|
+
children
|
|
105
|
+
}
|
|
106
|
+
) });
|
|
47
107
|
return /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.Provider, { values: [[selectVariantContext.SelectVariantContext, variantProps]], children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
48
108
|
reactAriaComponents.Select,
|
|
49
109
|
{
|
|
@@ -93,19 +153,31 @@ function Select({
|
|
|
93
153
|
}
|
|
94
154
|
),
|
|
95
155
|
/* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { size: variantProps.size, className: classNames?.error, children: errorMessage }),
|
|
96
|
-
/* @__PURE__ */ jsxRuntime.jsx(popover.Popover, { className: styles.popover({ className: classNames?.popover }), children: /* @__PURE__ */ jsxRuntime.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
156
|
+
/* @__PURE__ */ jsxRuntime.jsx(popover.Popover, { className: styles.popover({ className: classNames?.popover }), children: enableSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.Autocomplete, { filter: contains, children: [
|
|
157
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
158
|
+
reactAriaComponents.SearchField,
|
|
159
|
+
{
|
|
160
|
+
autoFocus: true,
|
|
161
|
+
"aria-label": formatter.format("searchAriaLabel"),
|
|
162
|
+
className: styles.searchField({
|
|
163
|
+
className: classNames?.searchField
|
|
164
|
+
}),
|
|
165
|
+
children: [
|
|
166
|
+
renderedSearchIcon,
|
|
167
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
168
|
+
reactAriaComponents.Input,
|
|
169
|
+
{
|
|
170
|
+
placeholder: searchPlaceholder ?? formatter.format("searchPlaceholder"),
|
|
171
|
+
className: styles.searchInput({
|
|
172
|
+
className: classNames?.searchInput
|
|
173
|
+
})
|
|
174
|
+
}
|
|
175
|
+
)
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
),
|
|
179
|
+
listContent
|
|
180
|
+
] }) : listContent })
|
|
109
181
|
]
|
|
110
182
|
}
|
|
111
183
|
) });
|
|
@@ -6,15 +6,15 @@ 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 field = require('../field/field.cjs');
|
|
10
|
-
var input = require('../input/input.cjs');
|
|
11
|
-
var popover = require('../popover/popover.cjs');
|
|
12
9
|
var tagFieldItem = require('./tag-field-item.cjs');
|
|
13
10
|
var tagFieldList = require('./tag-field-list.cjs');
|
|
14
11
|
var tagFieldRoot = require('./tag-field-root.cjs');
|
|
15
12
|
var tagFieldTagList = require('./tag-field-tag-list.cjs');
|
|
16
13
|
var tagFieldTrigger = require('./tag-field-trigger.cjs');
|
|
17
14
|
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');
|
|
15
|
+
var field = require('../field/field.cjs');
|
|
16
|
+
var input = require('../input/input.cjs');
|
|
17
|
+
var popover = require('../popover/popover.cjs');
|
|
18
18
|
|
|
19
19
|
function TagField({
|
|
20
20
|
classNames,
|
|
@@ -5,8 +5,8 @@
|
|
|
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');
|
|
9
8
|
var textArea = require('../text-area/text-area.cjs');
|
|
9
|
+
var field = require('../field/field.cjs');
|
|
10
10
|
|
|
11
11
|
function TextAreaField({
|
|
12
12
|
label,
|
|
@@ -5,8 +5,8 @@
|
|
|
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');
|
|
9
8
|
var input = require('../input/input.cjs');
|
|
9
|
+
var field = require('../field/field.cjs');
|
|
10
10
|
|
|
11
11
|
function TextField({
|
|
12
12
|
label,
|
package/dist/cjs/toast/toast.cjs
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var sonner = require('sonner');
|
|
7
7
|
var ouiTheme = require('@opengovsg/oui-theme');
|
|
8
|
-
var spinner = require('../spinner/spinner.cjs');
|
|
9
8
|
var utils = require('../system/utils.cjs');
|
|
10
9
|
var x = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/x.cjs');
|
|
10
|
+
var spinner = require('../spinner/spinner.cjs');
|
|
11
11
|
|
|
12
12
|
function Toaster(originalProps) {
|
|
13
13
|
const [{ toastOptions, closeButton = true, ...props }, variantProps] = utils.mapPropsVariants(originalProps, ouiTheme.toastStyles.variantKeys);
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { useMemo, cloneElement } from 'react';
|
|
3
|
+
import { avatarGroupStyles, cn } from '@opengovsg/oui-theme';
|
|
4
|
+
import { getValidChildren } from '../system/react-utils/children.js';
|
|
5
|
+
import { createContext } from '../system/react-utils/context.js';
|
|
6
|
+
import { useDomRef } from '../system/react-utils/refs.js';
|
|
7
|
+
|
|
8
|
+
const [AvatarGroupProvider, useAvatarGroupContext] = createContext({
|
|
9
|
+
name: "AvatarGroupContext",
|
|
10
|
+
strict: false
|
|
11
|
+
});
|
|
12
|
+
function useAvatarGroup(props = {}) {
|
|
13
|
+
const {
|
|
14
|
+
as,
|
|
15
|
+
ref,
|
|
16
|
+
max = 5,
|
|
17
|
+
total,
|
|
18
|
+
size,
|
|
19
|
+
color,
|
|
20
|
+
prominence,
|
|
21
|
+
radius,
|
|
22
|
+
children,
|
|
23
|
+
renderCount,
|
|
24
|
+
className,
|
|
25
|
+
classNames,
|
|
26
|
+
countProps,
|
|
27
|
+
...otherProps
|
|
28
|
+
} = props;
|
|
29
|
+
const domRef = useDomRef(ref);
|
|
30
|
+
const Component = as || "div";
|
|
31
|
+
const context = useMemo(
|
|
32
|
+
() => ({
|
|
33
|
+
size,
|
|
34
|
+
color,
|
|
35
|
+
radius,
|
|
36
|
+
prominence
|
|
37
|
+
}),
|
|
38
|
+
[size, color, radius, prominence]
|
|
39
|
+
);
|
|
40
|
+
const slots = useMemo(
|
|
41
|
+
() => avatarGroupStyles({ className: className ?? classNames?.base }),
|
|
42
|
+
[className, classNames?.base]
|
|
43
|
+
);
|
|
44
|
+
const validChildren = getValidChildren(children);
|
|
45
|
+
const childrenWithinMax = max ? validChildren.slice(0, max) : validChildren;
|
|
46
|
+
const remainingCount = total ? total : max != null ? validChildren.length - max : -1;
|
|
47
|
+
const clones = childrenWithinMax.map((child, index) => {
|
|
48
|
+
return cloneElement(child, {
|
|
49
|
+
// @ts-expect-error: CSS variable is not recognized as a valid style property
|
|
50
|
+
style: {
|
|
51
|
+
"--avatar-zindex": childrenWithinMax.length - index
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
const getAvatarGroupProps = () => {
|
|
56
|
+
return {
|
|
57
|
+
ref: domRef,
|
|
58
|
+
className: slots.base({
|
|
59
|
+
class: cn(classNames?.base, className)
|
|
60
|
+
}),
|
|
61
|
+
role: "group",
|
|
62
|
+
...otherProps
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
const getAvatarGroupCountProps = () => {
|
|
66
|
+
return {
|
|
67
|
+
className: slots.counter({
|
|
68
|
+
class: classNames?.counter
|
|
69
|
+
}),
|
|
70
|
+
...countProps
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
return {
|
|
74
|
+
Component,
|
|
75
|
+
context,
|
|
76
|
+
remainingCount,
|
|
77
|
+
clones,
|
|
78
|
+
renderCount,
|
|
79
|
+
getAvatarGroupProps,
|
|
80
|
+
getAvatarGroupCountProps
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export { AvatarGroupProvider, useAvatarGroup, useAvatarGroupContext };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { forwardRef } from '../system/utils.js';
|
|
5
|
+
import { AvatarRoot, AvatarFallback } from './avatar.js';
|
|
6
|
+
import { useAvatarGroup, AvatarGroupProvider } from './avatar-group-context.js';
|
|
7
|
+
|
|
8
|
+
const AvatarGroup = forwardRef((props, ref) => {
|
|
9
|
+
const {
|
|
10
|
+
Component,
|
|
11
|
+
clones,
|
|
12
|
+
context,
|
|
13
|
+
remainingCount,
|
|
14
|
+
getAvatarGroupCountProps,
|
|
15
|
+
getAvatarGroupProps,
|
|
16
|
+
renderCount
|
|
17
|
+
} = useAvatarGroup({
|
|
18
|
+
...props,
|
|
19
|
+
ref
|
|
20
|
+
});
|
|
21
|
+
const renderedCount = useMemo(() => {
|
|
22
|
+
if (remainingCount <= 0) return null;
|
|
23
|
+
if (renderCount) {
|
|
24
|
+
return renderCount(remainingCount);
|
|
25
|
+
}
|
|
26
|
+
const countAvatarVariantProps = {
|
|
27
|
+
prominence: "subtle",
|
|
28
|
+
color: "primary"
|
|
29
|
+
};
|
|
30
|
+
if (context.prominence === "subtle") {
|
|
31
|
+
countAvatarVariantProps.color = "white";
|
|
32
|
+
}
|
|
33
|
+
return /* @__PURE__ */ jsx(
|
|
34
|
+
AvatarRoot,
|
|
35
|
+
{
|
|
36
|
+
...countAvatarVariantProps,
|
|
37
|
+
...getAvatarGroupCountProps(),
|
|
38
|
+
name: `+${remainingCount}`,
|
|
39
|
+
children: /* @__PURE__ */ jsxs(AvatarFallback, { children: [
|
|
40
|
+
"+",
|
|
41
|
+
remainingCount
|
|
42
|
+
] })
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
}, [
|
|
46
|
+
context.prominence,
|
|
47
|
+
getAvatarGroupCountProps,
|
|
48
|
+
remainingCount,
|
|
49
|
+
renderCount
|
|
50
|
+
]);
|
|
51
|
+
return /* @__PURE__ */ jsx(Component, { ...getAvatarGroupProps(), children: /* @__PURE__ */ jsxs(AvatarGroupProvider, { value: context, children: [
|
|
52
|
+
clones,
|
|
53
|
+
renderedCount
|
|
54
|
+
] }) });
|
|
55
|
+
});
|
|
56
|
+
AvatarGroup.displayName = "AvatarGroup";
|
|
57
|
+
|
|
58
|
+
export { AvatarGroup };
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { useState, useMemo } from 'react';
|
|
5
|
+
import { useLayoutEffect } from '@react-aria/utils';
|
|
6
|
+
import { avatarStyles, dataAttr } from '@opengovsg/oui-theme';
|
|
7
|
+
import { forwardRef, mapPropsVariants } from '../system/utils.js';
|
|
8
|
+
import { AvatarContext, useAvatarContext } from './avatar-context.js';
|
|
9
|
+
import { useAvatarGroupContext } from './avatar-group-context.js';
|
|
10
|
+
import { useImageLoadingStatus } from './hooks/use-img-loading-status.js';
|
|
11
|
+
import { getInitialsFromText } from './utils.js';
|
|
12
|
+
import { useDomRef } from '../system/react-utils/refs.js';
|
|
13
|
+
import User from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/user.js';
|
|
14
|
+
|
|
15
|
+
const AvatarRoot = forwardRef(
|
|
16
|
+
(originalProps, ref) => {
|
|
17
|
+
const groupContext = useAvatarGroupContext();
|
|
18
|
+
const [
|
|
19
|
+
{
|
|
20
|
+
name,
|
|
21
|
+
getInitials = getInitialsFromText,
|
|
22
|
+
classNames,
|
|
23
|
+
className,
|
|
24
|
+
children,
|
|
25
|
+
as,
|
|
26
|
+
...props
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
color = groupContext?.color,
|
|
30
|
+
prominence = groupContext?.prominence,
|
|
31
|
+
size = groupContext?.size,
|
|
32
|
+
radius = groupContext?.radius,
|
|
33
|
+
...variantProps
|
|
34
|
+
}
|
|
35
|
+
] = mapPropsVariants(originalProps, avatarStyles.variantKeys);
|
|
36
|
+
const isInGroup = !!groupContext;
|
|
37
|
+
const domRef = useDomRef(ref);
|
|
38
|
+
const slots = avatarStyles({
|
|
39
|
+
color,
|
|
40
|
+
prominence,
|
|
41
|
+
size,
|
|
42
|
+
radius,
|
|
43
|
+
isInGroup,
|
|
44
|
+
...variantProps
|
|
45
|
+
});
|
|
46
|
+
const [imageLoadingStatus, setImageLoadingStatus] = useState("idle");
|
|
47
|
+
const Component = as || "span";
|
|
48
|
+
return /* @__PURE__ */ jsx(
|
|
49
|
+
AvatarContext,
|
|
50
|
+
{
|
|
51
|
+
value: {
|
|
52
|
+
imageLoadingStatus,
|
|
53
|
+
setImageLoadingStatus,
|
|
54
|
+
slots,
|
|
55
|
+
classNames,
|
|
56
|
+
getInitials,
|
|
57
|
+
name
|
|
58
|
+
},
|
|
59
|
+
children: /* @__PURE__ */ jsx(
|
|
60
|
+
Component,
|
|
61
|
+
{
|
|
62
|
+
ref: domRef,
|
|
63
|
+
...props,
|
|
64
|
+
className: slots.base({ className: className ?? classNames?.base }),
|
|
65
|
+
children
|
|
66
|
+
}
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
const AvatarImage = forwardRef(
|
|
73
|
+
({ src, as, ...props }, ref) => {
|
|
74
|
+
const domRef = useDomRef(ref);
|
|
75
|
+
const {
|
|
76
|
+
setImageLoadingStatus,
|
|
77
|
+
imageLoadingStatus,
|
|
78
|
+
slots,
|
|
79
|
+
name,
|
|
80
|
+
classNames
|
|
81
|
+
} = useAvatarContext();
|
|
82
|
+
const currentImageStatus = useImageLoadingStatus(src, props);
|
|
83
|
+
const Component = as || "img";
|
|
84
|
+
useLayoutEffect(() => {
|
|
85
|
+
setImageLoadingStatus(currentImageStatus);
|
|
86
|
+
}, [currentImageStatus, setImageLoadingStatus]);
|
|
87
|
+
return /* @__PURE__ */ jsx(
|
|
88
|
+
Component,
|
|
89
|
+
{
|
|
90
|
+
ref: domRef,
|
|
91
|
+
alt: name,
|
|
92
|
+
"data-loaded": dataAttr(imageLoadingStatus === "loaded"),
|
|
93
|
+
...props,
|
|
94
|
+
src,
|
|
95
|
+
className: slots.image({ className: classNames?.image })
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
const AvatarFallback = forwardRef(
|
|
101
|
+
({ children, as, ...props }, ref) => {
|
|
102
|
+
const domRef = useDomRef(ref);
|
|
103
|
+
const { slots, classNames, imageLoadingStatus, name, getInitials } = useAvatarContext();
|
|
104
|
+
const childrenToRender = useMemo(() => {
|
|
105
|
+
if (children) return children;
|
|
106
|
+
if (name) {
|
|
107
|
+
return getInitials(name);
|
|
108
|
+
}
|
|
109
|
+
return /* @__PURE__ */ jsx(User, { className: slots.icon({ className: classNames?.icon }) });
|
|
110
|
+
}, [children, classNames?.icon, getInitials, name, slots]);
|
|
111
|
+
const Component = as || "div";
|
|
112
|
+
if (imageLoadingStatus === "loaded") {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return /* @__PURE__ */ jsx(
|
|
116
|
+
Component,
|
|
117
|
+
{
|
|
118
|
+
title: name,
|
|
119
|
+
className: slots.fallback({ className: classNames?.fallback }),
|
|
120
|
+
ref: domRef,
|
|
121
|
+
...props,
|
|
122
|
+
children: childrenToRender
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
export { AvatarFallback, AvatarImage, AvatarRoot };
|