@opengovsg/oui 0.0.45 → 0.0.46
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/banner/banner.cjs +1 -1
- package/dist/cjs/checkbox/checkbox.cjs +1 -1
- package/dist/cjs/combo-box/combo-box.cjs +1 -1
- package/dist/cjs/date-field/date-field.cjs +1 -1
- package/dist/cjs/date-picker/date-picker.cjs +5 -4
- package/dist/cjs/date-range-picker/date-range-picker.cjs +3 -3
- package/dist/cjs/field/field.cjs +15 -12
- 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 +98 -72
- package/dist/cjs/modal/modal-content.cjs +1 -1
- package/dist/cjs/number-field/number-field.cjs +2 -2
- package/dist/cjs/phone-number-field/constants.cjs +500 -0
- package/dist/cjs/phone-number-field/context.cjs +11 -0
- package/dist/cjs/phone-number-field/i18n.cjs +1043 -0
- package/dist/cjs/phone-number-field/index.cjs +32 -0
- package/dist/cjs/phone-number-field/phone-number-field.cjs +299 -0
- package/dist/cjs/phone-number-field/types.cjs +3 -0
- package/dist/cjs/range-calendar/range-calendar.cjs +1 -1
- package/dist/cjs/search-field/search-field.cjs +2 -2
- package/dist/cjs/select/i18n.cjs +23 -0
- package/dist/cjs/select/select.cjs +47 -47
- package/dist/cjs/sidebar/sidebar-list.cjs +1 -1
- package/dist/cjs/system/l10n.cjs +18 -0
- package/dist/cjs/system/react-utils/sizing.cjs +21 -0
- package/dist/cjs/tag-field/tag-field.cjs +1 -1
- 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/time-field/time-field.cjs +2 -2
- package/dist/esm/banner/banner.js +1 -1
- package/dist/esm/checkbox/checkbox.js +1 -1
- package/dist/esm/combo-box/combo-box.js +1 -1
- package/dist/esm/date-field/date-field.js +1 -1
- package/dist/esm/date-picker/date-picker.js +5 -4
- package/dist/esm/date-range-picker/date-range-picker.js +3 -3
- package/dist/esm/field/field.js +18 -15
- 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 +27 -25
- package/dist/esm/modal/modal-content.js +1 -1
- package/dist/esm/number-field/number-field.js +2 -2
- package/dist/esm/phone-number-field/constants.js +497 -0
- package/dist/esm/phone-number-field/context.js +8 -0
- package/dist/esm/phone-number-field/i18n.js +1041 -0
- package/dist/esm/phone-number-field/index.js +3 -0
- package/dist/esm/phone-number-field/phone-number-field.js +294 -0
- package/dist/esm/phone-number-field/types.js +1 -0
- package/dist/esm/range-calendar/range-calendar.js +1 -1
- package/dist/esm/search-field/search-field.js +2 -2
- package/dist/esm/select/i18n.js +21 -0
- package/dist/esm/select/select.js +47 -47
- package/dist/esm/sidebar/sidebar-list.js +1 -1
- package/dist/esm/system/l10n.js +16 -0
- package/dist/esm/system/react-utils/sizing.js +19 -0
- package/dist/esm/tag-field/tag-field.js +1 -1
- 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/time-field/time-field.js +2 -2
- package/dist/types/field/field.d.ts +1 -1
- package/dist/types/field/field.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/phone-number-field/constants.d.ts +495 -0
- package/dist/types/phone-number-field/constants.d.ts.map +1 -0
- package/dist/types/phone-number-field/context.d.ts +15 -0
- package/dist/types/phone-number-field/context.d.ts.map +1 -0
- package/dist/types/phone-number-field/i18n.d.ts +1039 -0
- package/dist/types/phone-number-field/i18n.d.ts.map +1 -0
- package/dist/types/phone-number-field/index.d.ts +9 -0
- package/dist/types/phone-number-field/index.d.ts.map +1 -0
- package/dist/types/phone-number-field/phone-number-field.d.ts +42 -0
- package/dist/types/phone-number-field/phone-number-field.d.ts.map +1 -0
- package/dist/types/phone-number-field/types.d.ts +21 -0
- package/dist/types/phone-number-field/types.d.ts.map +1 -0
- package/dist/types/select/i18n.d.ts +19 -0
- package/dist/types/select/i18n.d.ts.map +1 -0
- package/dist/types/select/select.d.ts +11 -1
- package/dist/types/select/select.d.ts.map +1 -1
- package/dist/types/system/l10n.d.ts +10 -0
- package/dist/types/system/l10n.d.ts.map +1 -0
- package/dist/types/system/react-utils/sizing.d.ts +8 -0
- package/dist/types/system/react-utils/sizing.d.ts.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var phoneNumberField = require('./phone-number-field.cjs');
|
|
5
|
+
var BasePhoneInput = require('react-phone-number-input');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.CountrySelect = phoneNumberField.CountrySelect;
|
|
10
|
+
exports.FlagComponent = phoneNumberField.FlagComponent;
|
|
11
|
+
exports.PhoneInput = phoneNumberField.PhoneInput;
|
|
12
|
+
exports.PhoneNumberField = phoneNumberField.PhoneNumberField;
|
|
13
|
+
Object.defineProperty(exports, "formatPhoneNumber", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return BasePhoneInput.formatPhoneNumber; }
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "formatPhoneNumberIntl", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return BasePhoneInput.formatPhoneNumberIntl; }
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(exports, "isPossiblePhoneNumber", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return BasePhoneInput.isPossiblePhoneNumber; }
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(exports, "isValidPhoneNumber", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () { return BasePhoneInput.isValidPhoneNumber; }
|
|
28
|
+
});
|
|
29
|
+
Object.defineProperty(exports, "parsePhoneNumber", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
get: function () { return BasePhoneInput.parsePhoneNumber; }
|
|
32
|
+
});
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var $670gB$react = require('react');
|
|
7
|
+
var reactAriaComponents = require('react-aria-components');
|
|
8
|
+
var BasePhoneInput = require('react-phone-number-input');
|
|
9
|
+
var flags = require('react-phone-number-input/flags');
|
|
10
|
+
var NonInternationalBasePhoneInput = require('react-phone-number-input/input');
|
|
11
|
+
var ouiTheme = require('@opengovsg/oui-theme');
|
|
12
|
+
var field = require('../field/field.cjs');
|
|
13
|
+
var useControllableState = require('../hooks/use-controllable-state.cjs');
|
|
14
|
+
var input = require('../input/input.cjs');
|
|
15
|
+
var select = require('../select/select.cjs');
|
|
16
|
+
var selectItem = require('../select/select-item.cjs');
|
|
17
|
+
var l10n = require('../system/l10n.cjs');
|
|
18
|
+
var utils = require('../system/utils.cjs');
|
|
19
|
+
var constants = require('./constants.cjs');
|
|
20
|
+
var context = require('./context.cjs');
|
|
21
|
+
var i18n = require('./i18n.cjs');
|
|
22
|
+
|
|
23
|
+
const PhoneInput = ({
|
|
24
|
+
onClear,
|
|
25
|
+
onKeyDown,
|
|
26
|
+
...props
|
|
27
|
+
}) => {
|
|
28
|
+
const {
|
|
29
|
+
placeholderMode,
|
|
30
|
+
examples,
|
|
31
|
+
selectedCountry,
|
|
32
|
+
styles,
|
|
33
|
+
size,
|
|
34
|
+
classNames,
|
|
35
|
+
stringFormatter
|
|
36
|
+
} = context.usePhoneInputContext();
|
|
37
|
+
const inputPlaceholder = $670gB$react.useMemo(() => {
|
|
38
|
+
const defaultPlaceholder = stringFormatter.format("Enter a phone number");
|
|
39
|
+
if (placeholderMode === "off") {
|
|
40
|
+
return props.placeholder ?? defaultPlaceholder;
|
|
41
|
+
}
|
|
42
|
+
const exampleNumber = selectedCountry && examples[selectedCountry];
|
|
43
|
+
if (placeholderMode === "aggressive") {
|
|
44
|
+
return exampleNumber ?? props.placeholder ?? defaultPlaceholder;
|
|
45
|
+
}
|
|
46
|
+
return props.placeholder ?? exampleNumber ?? defaultPlaceholder;
|
|
47
|
+
}, [
|
|
48
|
+
props.placeholder,
|
|
49
|
+
stringFormatter,
|
|
50
|
+
placeholderMode,
|
|
51
|
+
examples,
|
|
52
|
+
selectedCountry
|
|
53
|
+
]);
|
|
54
|
+
const handleKeyDown = $670gB$react.useCallback(
|
|
55
|
+
(event) => {
|
|
56
|
+
if (event.metaKey && event.key === "Backspace") {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
onClear?.();
|
|
59
|
+
} else {
|
|
60
|
+
onKeyDown?.(event);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
[onClear, onKeyDown]
|
|
64
|
+
);
|
|
65
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
66
|
+
input.Input,
|
|
67
|
+
{
|
|
68
|
+
variant: "unstyled",
|
|
69
|
+
placeholder: inputPlaceholder,
|
|
70
|
+
type: "tel",
|
|
71
|
+
autoComplete: "tel",
|
|
72
|
+
size,
|
|
73
|
+
...props,
|
|
74
|
+
onKeyDown: handleKeyDown,
|
|
75
|
+
className: styles.input({
|
|
76
|
+
className: ouiTheme.cn(classNames?.input, props.className)
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
};
|
|
81
|
+
const PhoneNumberField = (originalProps) => {
|
|
82
|
+
const [
|
|
83
|
+
{
|
|
84
|
+
placeholderMode = "polite",
|
|
85
|
+
examples = constants.MOBILE_EXAMPLES,
|
|
86
|
+
label,
|
|
87
|
+
description,
|
|
88
|
+
errorMessage,
|
|
89
|
+
classNames,
|
|
90
|
+
isInvalid,
|
|
91
|
+
...props
|
|
92
|
+
},
|
|
93
|
+
{ variant = "international", ...variantProps }
|
|
94
|
+
] = utils.mapPropsVariants(originalProps, ouiTheme.phoneNumberFieldStyles.variantKeys);
|
|
95
|
+
const stringFormatter = l10n.useLocalizedStringFormatter(i18n.i18nStrings);
|
|
96
|
+
const defaultCountry = $670gB$react.useMemo(
|
|
97
|
+
() => props.defaultCountry ?? "SG",
|
|
98
|
+
[props.defaultCountry]
|
|
99
|
+
);
|
|
100
|
+
const [selectedCountry, setSelectedCountry] = $670gB$react.useState(
|
|
101
|
+
defaultCountry
|
|
102
|
+
);
|
|
103
|
+
const [value, setValue] = useControllableState.useControllableState({
|
|
104
|
+
defaultValue: props.defaultValue,
|
|
105
|
+
value: props.value,
|
|
106
|
+
onChange: props.onChange
|
|
107
|
+
});
|
|
108
|
+
const triggerRef = $670gB$react.useRef(null);
|
|
109
|
+
const { size = "md", isDisabled } = variantProps;
|
|
110
|
+
const styles = ouiTheme.phoneNumberFieldStyles({
|
|
111
|
+
...variantProps,
|
|
112
|
+
variant,
|
|
113
|
+
isDisabled,
|
|
114
|
+
size
|
|
115
|
+
});
|
|
116
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
117
|
+
reactAriaComponents.TextField,
|
|
118
|
+
{
|
|
119
|
+
isDisabled,
|
|
120
|
+
className: styles.base({
|
|
121
|
+
className: classNames?.base
|
|
122
|
+
}),
|
|
123
|
+
isInvalid,
|
|
124
|
+
children: [
|
|
125
|
+
label && /* @__PURE__ */ jsxRuntime.jsx(field.Label, { size, className: classNames?.label, children: label }),
|
|
126
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
127
|
+
reactAriaComponents.Provider,
|
|
128
|
+
{
|
|
129
|
+
values: [
|
|
130
|
+
[
|
|
131
|
+
context.PhoneInputContext,
|
|
132
|
+
{
|
|
133
|
+
triggerRef,
|
|
134
|
+
placeholderMode,
|
|
135
|
+
examples,
|
|
136
|
+
selectedCountry,
|
|
137
|
+
classNames,
|
|
138
|
+
styles,
|
|
139
|
+
variant,
|
|
140
|
+
...variantProps,
|
|
141
|
+
size,
|
|
142
|
+
stringFormatter
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
],
|
|
146
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
147
|
+
field.FieldGroup,
|
|
148
|
+
{
|
|
149
|
+
isInvalid,
|
|
150
|
+
isDisabled,
|
|
151
|
+
"data-variant": variant,
|
|
152
|
+
ref: triggerRef,
|
|
153
|
+
className: styles.group({
|
|
154
|
+
className: classNames?.group
|
|
155
|
+
}),
|
|
156
|
+
children: variant === "international" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
+
BasePhoneInput,
|
|
158
|
+
{
|
|
159
|
+
disabled: isDisabled,
|
|
160
|
+
className: styles.wrapper({
|
|
161
|
+
className: classNames?.wrapper
|
|
162
|
+
}),
|
|
163
|
+
international: false,
|
|
164
|
+
addInternationalOption: false,
|
|
165
|
+
defaultCountry: selectedCountry,
|
|
166
|
+
countryOptionsOrder: [defaultCountry],
|
|
167
|
+
onCountryChange: setSelectedCountry,
|
|
168
|
+
countrySelectComponent: CountrySelect,
|
|
169
|
+
inputComponent: PhoneInput,
|
|
170
|
+
onClear: () => setValue(void 0),
|
|
171
|
+
...props,
|
|
172
|
+
value,
|
|
173
|
+
onChange: (v) => setValue(v)
|
|
174
|
+
}
|
|
175
|
+
) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles.wrapper({ className: classNames?.wrapper }), children: [
|
|
176
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
177
|
+
NonInternationalBasePhoneInput,
|
|
178
|
+
{
|
|
179
|
+
country: defaultCountry,
|
|
180
|
+
onClear: () => setValue(void 0),
|
|
181
|
+
...props,
|
|
182
|
+
inputComponent: PhoneInput,
|
|
183
|
+
value,
|
|
184
|
+
onChange: setValue
|
|
185
|
+
}
|
|
186
|
+
),
|
|
187
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
188
|
+
FlagComponent,
|
|
189
|
+
{
|
|
190
|
+
className: styles.flag({ className: classNames?.flag }),
|
|
191
|
+
country: defaultCountry,
|
|
192
|
+
countryName: stringFormatter.format(defaultCountry)
|
|
193
|
+
}
|
|
194
|
+
)
|
|
195
|
+
] })
|
|
196
|
+
}
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
),
|
|
200
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(field.Description, { size, className: classNames?.description, children: description }),
|
|
201
|
+
/* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { size, className: classNames?.error, children: errorMessage })
|
|
202
|
+
]
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
};
|
|
206
|
+
function CountrySelect(props) {
|
|
207
|
+
const { options, value, onChange, onBlur, onFocus } = props;
|
|
208
|
+
const { triggerRef, classNames, styles, size, isDisabled, stringFormatter } = context.usePhoneInputContext();
|
|
209
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
210
|
+
select.Select,
|
|
211
|
+
{
|
|
212
|
+
size,
|
|
213
|
+
popoverProps: {
|
|
214
|
+
// Position popover relative to the wrapping div instead of the Button
|
|
215
|
+
triggerRef
|
|
216
|
+
},
|
|
217
|
+
classNames: {
|
|
218
|
+
base: styles.select({ className: classNames?.select }),
|
|
219
|
+
trigger: styles.selectTrigger({
|
|
220
|
+
className: classNames?.selectTrigger
|
|
221
|
+
}),
|
|
222
|
+
icon: styles.selectIcon({ className: classNames?.selectIcon }),
|
|
223
|
+
// Apply same styles as trigger for consistent sizing
|
|
224
|
+
list: styles.selectList({ className: classNames?.selectList }),
|
|
225
|
+
popover: styles.selectPopover({ className: classNames?.selectPopover })
|
|
226
|
+
},
|
|
227
|
+
enableSearch: true,
|
|
228
|
+
variant: "unstyled",
|
|
229
|
+
isDisabled,
|
|
230
|
+
value,
|
|
231
|
+
onChange: (v) => onChange(v),
|
|
232
|
+
items: options,
|
|
233
|
+
renderSelectValue: () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
234
|
+
FlagComponent,
|
|
235
|
+
{
|
|
236
|
+
className: styles.flag({ className: classNames?.flag }),
|
|
237
|
+
country: value,
|
|
238
|
+
countryName: value && stringFormatter.format(value)
|
|
239
|
+
}
|
|
240
|
+
),
|
|
241
|
+
onBlur,
|
|
242
|
+
onFocus,
|
|
243
|
+
children: (country) => {
|
|
244
|
+
const l10nLabel = country.value ? stringFormatter.format(country.value) : "";
|
|
245
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
246
|
+
selectItem.SelectItem,
|
|
247
|
+
{
|
|
248
|
+
classNames: {
|
|
249
|
+
text: styles.selectItem({ className: classNames?.selectItem })
|
|
250
|
+
},
|
|
251
|
+
textValue: `${l10nLabel} ${country.label}`,
|
|
252
|
+
id: country.value,
|
|
253
|
+
children: [
|
|
254
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
+
FlagComponent,
|
|
256
|
+
{
|
|
257
|
+
className: styles.flag({ className: classNames?.flag }),
|
|
258
|
+
country: country.value,
|
|
259
|
+
countryName: l10nLabel
|
|
260
|
+
}
|
|
261
|
+
),
|
|
262
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
263
|
+
"span",
|
|
264
|
+
{
|
|
265
|
+
className: styles.selectItemLabel({
|
|
266
|
+
className: classNames?.selectItemLabel
|
|
267
|
+
}),
|
|
268
|
+
children: l10nLabel
|
|
269
|
+
}
|
|
270
|
+
),
|
|
271
|
+
country.value && /* @__PURE__ */ jsxRuntime.jsx(
|
|
272
|
+
"span",
|
|
273
|
+
{
|
|
274
|
+
className: styles.selectItemCountryCode({
|
|
275
|
+
className: classNames?.selectItemCountryCode
|
|
276
|
+
}),
|
|
277
|
+
children: `+${BasePhoneInput.getCountryCallingCode(country.value)}`
|
|
278
|
+
}
|
|
279
|
+
)
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
const FlagComponent = ({
|
|
288
|
+
country,
|
|
289
|
+
countryName,
|
|
290
|
+
className
|
|
291
|
+
}) => {
|
|
292
|
+
const Flag = country && flags[country];
|
|
293
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className, children: Flag && /* @__PURE__ */ jsxRuntime.jsx(Flag, { title: countryName }) });
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
exports.CountrySelect = CountrySelect;
|
|
297
|
+
exports.FlagComponent = FlagComponent;
|
|
298
|
+
exports.PhoneInput = PhoneInput;
|
|
299
|
+
exports.PhoneNumberField = PhoneNumberField;
|
|
@@ -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');
|
|
11
12
|
var agnosticCalendarStateContext = require('../calendar/agnostic-calendar-state-context.cjs');
|
|
12
13
|
var calendarBottomContent = require('../calendar/calendar-bottom-content.cjs');
|
|
13
14
|
var calendarGridHeader = require('../calendar/calendar-grid-header.cjs');
|
|
14
15
|
var calendarHeader = require('../calendar/calendar-header.cjs');
|
|
15
16
|
var utils = require('../system/utils.cjs');
|
|
16
|
-
var calendarStyleContext = require('../calendar/calendar-style-context.cjs');
|
|
17
17
|
|
|
18
18
|
const RangeCalendar = utils.forwardRefGeneric(function RangeCalendar2(originalProps, ref) {
|
|
19
19
|
const [props, variantProps] = utils.mapPropsVariants(
|
|
@@ -5,13 +5,13 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
5
5
|
var reactAria = require('react-aria');
|
|
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');
|
|
8
10
|
var input = require('../input/input.cjs');
|
|
9
11
|
var utils = require('../system/utils.cjs');
|
|
10
12
|
var i18n = require('./i18n.cjs');
|
|
11
13
|
var search = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/search.cjs');
|
|
12
14
|
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 field = require('../field/field.cjs');
|
|
14
|
-
var button = require('../button/button.cjs');
|
|
15
15
|
|
|
16
16
|
function SearchField(originalProps) {
|
|
17
17
|
const [
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const i18nStrings = {
|
|
5
|
+
"en-SG": {
|
|
6
|
+
"Search...": "Search...",
|
|
7
|
+
"Search options": "Search options"
|
|
8
|
+
},
|
|
9
|
+
"zh-SG": {
|
|
10
|
+
"Search...": "\u641C\u7D22...",
|
|
11
|
+
"Search options": "\u641C\u7D22\u9009\u9879"
|
|
12
|
+
},
|
|
13
|
+
"ms-SG": {
|
|
14
|
+
"Search...": "Cari...",
|
|
15
|
+
"Search options": "Cari pilihan"
|
|
16
|
+
},
|
|
17
|
+
"ta-SG": {
|
|
18
|
+
"Search...": "\u0BA4\u0BC7\u0B9F\u0BC1...",
|
|
19
|
+
"Search options": "\u0BA4\u0BC7\u0B9F\u0BB2\u0BCD \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0B99\u0BCD\u0B95\u0BB3\u0BCD"
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.i18nStrings = i18nStrings;
|
|
@@ -7,31 +7,15 @@ 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
|
+
var field = require('../field/field.cjs');
|
|
10
12
|
var popover = require('../popover/popover.cjs');
|
|
13
|
+
var sizing = require('../system/react-utils/sizing.cjs');
|
|
11
14
|
var utils = require('../system/utils.cjs');
|
|
15
|
+
var i18n = require('./i18n.cjs');
|
|
12
16
|
var selectVariantContext = require('./select-variant-context.cjs');
|
|
13
|
-
var field = require('../field/field.cjs');
|
|
14
17
|
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 button = require('../button/button.cjs');
|
|
16
18
|
|
|
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
|
-
};
|
|
35
19
|
const calculateEstimatedRowHeight = (size) => {
|
|
36
20
|
switch (size) {
|
|
37
21
|
case "xs":
|
|
@@ -49,7 +33,7 @@ function Select({
|
|
|
49
33
|
errorMessage,
|
|
50
34
|
...originalProps
|
|
51
35
|
}) {
|
|
52
|
-
const
|
|
36
|
+
const stringFormatter = reactAria.useLocalizedStringFormatter(i18n.i18nStrings);
|
|
53
37
|
const [_props, variantProps] = utils.mapPropsVariants(
|
|
54
38
|
originalProps,
|
|
55
39
|
ouiTheme.selectStyles.variantKeys
|
|
@@ -61,9 +45,12 @@ function Select({
|
|
|
61
45
|
enableSearch = false,
|
|
62
46
|
searchPlaceholder,
|
|
63
47
|
searchIcon,
|
|
48
|
+
renderSelectValue,
|
|
49
|
+
popoverProps,
|
|
64
50
|
...props
|
|
65
51
|
} = _props;
|
|
66
52
|
const styles = ouiTheme.selectStyles(variantProps);
|
|
53
|
+
const triggerWidth = sizing.useElementWidth(popoverProps?.triggerRef);
|
|
67
54
|
const { contains } = reactAriaComponents.useFilter({ sensitivity: "base" });
|
|
68
55
|
const layoutOptions = $670gB$react.useMemo(() => {
|
|
69
56
|
return {
|
|
@@ -130,7 +117,8 @@ function Select({
|
|
|
130
117
|
{
|
|
131
118
|
className: styles.selectedText({
|
|
132
119
|
className: classNames?.selectedText
|
|
133
|
-
})
|
|
120
|
+
}),
|
|
121
|
+
children: renderSelectValue
|
|
134
122
|
}
|
|
135
123
|
),
|
|
136
124
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -153,31 +141,43 @@ function Select({
|
|
|
153
141
|
}
|
|
154
142
|
),
|
|
155
143
|
/* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { size: variantProps.size, className: classNames?.error, children: errorMessage }),
|
|
156
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
{
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
144
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
145
|
+
popover.Popover,
|
|
146
|
+
{
|
|
147
|
+
className: styles.popover({ className: classNames?.popover }),
|
|
148
|
+
...triggerWidth !== null ? {
|
|
149
|
+
style: {
|
|
150
|
+
"--trigger-width": triggerWidth
|
|
151
|
+
}
|
|
152
|
+
} : {},
|
|
153
|
+
...popoverProps,
|
|
154
|
+
children: enableSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactAriaComponents.Autocomplete, { filter: contains, children: [
|
|
155
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
156
|
+
reactAriaComponents.SearchField,
|
|
157
|
+
{
|
|
158
|
+
autoFocus: true,
|
|
159
|
+
"aria-label": stringFormatter.format("Search options"),
|
|
160
|
+
className: styles.searchField({
|
|
161
|
+
className: classNames?.searchField
|
|
162
|
+
}),
|
|
163
|
+
children: [
|
|
164
|
+
renderedSearchIcon,
|
|
165
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
166
|
+
reactAriaComponents.Input,
|
|
167
|
+
{
|
|
168
|
+
placeholder: searchPlaceholder ?? stringFormatter.format("Search..."),
|
|
169
|
+
className: styles.searchInput({
|
|
170
|
+
className: classNames?.searchInput
|
|
171
|
+
})
|
|
172
|
+
}
|
|
173
|
+
)
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
),
|
|
177
|
+
listContent
|
|
178
|
+
] }) : listContent
|
|
179
|
+
}
|
|
180
|
+
)
|
|
181
181
|
]
|
|
182
182
|
}
|
|
183
183
|
) });
|
|
@@ -8,11 +8,11 @@ var reactAria = require('react-aria');
|
|
|
8
8
|
var reactAriaComponents = require('react-aria-components');
|
|
9
9
|
var reactStately = require('react-stately');
|
|
10
10
|
var ouiTheme = require('@opengovsg/oui-theme');
|
|
11
|
+
var button = require('../button/button.cjs');
|
|
11
12
|
var utils = require('../system/utils.cjs');
|
|
12
13
|
var context = require('./context.cjs');
|
|
13
14
|
var i18n = require('./i18n.cjs');
|
|
14
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');
|
|
15
|
-
var button = require('../button/button.cjs');
|
|
16
16
|
|
|
17
17
|
const SidebarListSection = ({
|
|
18
18
|
onlyCaretToggle,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var $670gB$react = require('react');
|
|
5
|
+
var string = require('@internationalized/string');
|
|
6
|
+
var i18n = require('@react-aria/i18n');
|
|
7
|
+
var reactAriaComponents = require('react-aria-components');
|
|
8
|
+
|
|
9
|
+
function useLocalizedStringFormatter(strings, packageName) {
|
|
10
|
+
const { locale } = reactAriaComponents.useLocale();
|
|
11
|
+
const dictionary = i18n.useLocalizedStringDictionary(strings, packageName);
|
|
12
|
+
return $670gB$react.useMemo(
|
|
13
|
+
() => new string.LocalizedStringFormatter(locale, dictionary),
|
|
14
|
+
[locale, dictionary]
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exports.useLocalizedStringFormatter = useLocalizedStringFormatter;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var $670gB$react = require('react');
|
|
5
|
+
var utils = require('@react-aria/utils');
|
|
6
|
+
|
|
7
|
+
function useElementWidth(ref) {
|
|
8
|
+
const [elementWidth, setElementWidth] = $670gB$react.useState(null);
|
|
9
|
+
const onResize = $670gB$react.useCallback(() => {
|
|
10
|
+
if (ref && ref.current && ref.current instanceof HTMLElement) {
|
|
11
|
+
setElementWidth(`${ref.current.offsetWidth}px`);
|
|
12
|
+
}
|
|
13
|
+
}, [ref]);
|
|
14
|
+
utils.useResizeObserver({
|
|
15
|
+
ref,
|
|
16
|
+
onResize
|
|
17
|
+
});
|
|
18
|
+
return elementWidth;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.useElementWidth = useElementWidth;
|
|
@@ -6,6 +6,7 @@ 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');
|
|
9
10
|
var input = require('../input/input.cjs');
|
|
10
11
|
var popover = require('../popover/popover.cjs');
|
|
11
12
|
var tagFieldItem = require('./tag-field-item.cjs');
|
|
@@ -14,7 +15,6 @@ var tagFieldRoot = require('./tag-field-root.cjs');
|
|
|
14
15
|
var tagFieldTagList = require('./tag-field-tag-list.cjs');
|
|
15
16
|
var tagFieldTrigger = require('./tag-field-trigger.cjs');
|
|
16
17
|
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');
|
|
17
|
-
var field = require('../field/field.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 textArea = require('../text-area/text-area.cjs');
|
|
9
8
|
var field = require('../field/field.cjs');
|
|
9
|
+
var textArea = require('../text-area/text-area.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 input = require('../input/input.cjs');
|
|
9
8
|
var field = require('../field/field.cjs');
|
|
9
|
+
var input = require('../input/input.cjs');
|
|
10
10
|
|
|
11
11
|
function TextField({
|
|
12
12
|
label,
|
|
@@ -5,9 +5,9 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
5
5
|
var $670gB$react = require('react');
|
|
6
6
|
var reactAriaComponents = require('react-aria-components');
|
|
7
7
|
var ouiTheme = require('@opengovsg/oui-theme');
|
|
8
|
-
var utils = require('../system/utils.cjs');
|
|
9
|
-
var field = require('../field/field.cjs');
|
|
10
8
|
var dateField = require('../date-field/date-field.cjs');
|
|
9
|
+
var field = require('../field/field.cjs');
|
|
10
|
+
var utils = require('../system/utils.cjs');
|
|
11
11
|
|
|
12
12
|
function TimeField(originalProps) {
|
|
13
13
|
const [
|
|
@@ -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';
|
|
8
9
|
import { i18nStrings } from './i18n.js';
|
|
9
10
|
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';
|
|
10
11
|
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,11 +3,11 @@
|
|
|
3
3
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
import { Checkbox as Checkbox$1, composeRenderProps, Provider, CheckboxGroup as CheckboxGroup$1 } from 'react-aria-components';
|
|
5
5
|
import { checkboxStyles, checkboxGroupStyles } from '@opengovsg/oui-theme';
|
|
6
|
+
import { Label, Description, FieldError } from '../field/field.js';
|
|
6
7
|
import { mapPropsVariants } from '../system/utils.js';
|
|
7
8
|
import { useCheckboxGroupStyleContext, CheckboxGroupStyleContext } from './checkbox-group-style-context.js';
|
|
8
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';
|
|
9
10
|
import Check from '../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/check.js';
|
|
10
|
-
import { Label, Description, FieldError } from '../field/field.js';
|
|
11
11
|
|
|
12
12
|
const Checkbox = ({
|
|
13
13
|
classNames,
|