@webority/mobile-ui 0.17.0 → 0.18.1
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/lib/commonjs/canvasKit/index.js +1 -1
- package/lib/commonjs/components/AppBar/AppBar.js +1 -1
- package/lib/commonjs/components/BottomNavigation/BottomNavigation.js +1 -1
- package/lib/commonjs/components/Button/Button.js +1 -1
- package/lib/commonjs/components/Chip/Chip.js +1 -1
- package/lib/commonjs/components/Descriptions/Descriptions.js +1 -1
- package/lib/commonjs/components/Dialog/Dialog.js +1 -1
- package/lib/commonjs/components/EmptyState/EmptyState.js +1 -1
- package/lib/commonjs/components/ForceUpdateDialog/ForceUpdateDialog.js +1 -1
- package/lib/commonjs/components/ListItem/ListItem.js +1 -1
- package/lib/commonjs/components/OTPInput/OTPInput.js +1 -1
- package/lib/commonjs/components/TagInput/TagInput.js +1 -1
- package/lib/commonjs/components/Tour/Tour.js +1 -1
- package/lib/commonjs/theme/tokens.js +1 -1
- package/lib/module/canvasKit/index.js +1 -1
- package/lib/module/components/AppBar/AppBar.js +1 -1
- package/lib/module/components/BottomNavigation/BottomNavigation.js +1 -1
- package/lib/module/components/Button/Button.js +1 -1
- package/lib/module/components/Chip/Chip.js +1 -1
- package/lib/module/components/Descriptions/Descriptions.js +1 -1
- package/lib/module/components/Dialog/Dialog.js +1 -1
- package/lib/module/components/EmptyState/EmptyState.js +1 -1
- package/lib/module/components/ForceUpdateDialog/ForceUpdateDialog.js +1 -1
- package/lib/module/components/ListItem/ListItem.js +1 -1
- package/lib/module/components/OTPInput/OTPInput.js +1 -1
- package/lib/module/components/TagInput/TagInput.js +1 -1
- package/lib/module/components/Tour/Tour.js +1 -1
- package/lib/module/theme/tokens.js +1 -1
- package/lib/typescript/commonjs/canvasKit/index.d.ts +8 -1
- package/lib/typescript/commonjs/components/BottomNavigation/BottomNavigation.d.ts +3 -2
- package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +1 -1
- package/lib/typescript/commonjs/components/FilePicker/FilePicker.d.ts +9 -9
- package/lib/typescript/commonjs/components/ListItem/ListItem.d.ts +5 -0
- package/lib/typescript/commonjs/components/OTPInput/OTPInput.d.ts +3 -1
- package/lib/typescript/commonjs/components/ProfilePicker/ProfilePicker.d.ts +6 -6
- package/lib/typescript/commonjs/components/TagInput/TagInput.d.ts +3 -1
- package/lib/typescript/commonjs/components/Tour/Tour.d.ts +7 -0
- package/lib/typescript/module/canvasKit/index.d.ts +8 -1
- package/lib/typescript/module/components/BottomNavigation/BottomNavigation.d.ts +3 -2
- package/lib/typescript/module/components/Dialog/Dialog.d.ts +1 -1
- package/lib/typescript/module/components/FilePicker/FilePicker.d.ts +9 -9
- package/lib/typescript/module/components/ListItem/ListItem.d.ts +5 -0
- package/lib/typescript/module/components/OTPInput/OTPInput.d.ts +3 -1
- package/lib/typescript/module/components/ProfilePicker/ProfilePicker.d.ts +6 -6
- package/lib/typescript/module/components/TagInput/TagInput.d.ts +3 -1
- package/lib/typescript/module/components/Tour/Tour.d.ts +7 -0
- package/package.json +3 -3
|
@@ -81,18 +81,18 @@ export interface FilePickerTriggerState {
|
|
|
81
81
|
}
|
|
82
82
|
export interface FilePickerLabels {
|
|
83
83
|
/** Trigger text when no files are attached. Default 'Attach file'. */
|
|
84
|
-
trigger
|
|
84
|
+
trigger?: string;
|
|
85
85
|
/** Add-affordance text/tile label once files exist. Default '+'. (card tile) / 'Add more' (list row). */
|
|
86
|
-
addMore
|
|
86
|
+
addMore?: string;
|
|
87
87
|
/** Source chooser sheet title. Default 'Add from'. */
|
|
88
|
-
sheetTitle
|
|
88
|
+
sheetTitle?: string;
|
|
89
89
|
/** A11y label template for a file's remove button. */
|
|
90
|
-
removeFile
|
|
90
|
+
removeFile?: (name: string) => string;
|
|
91
91
|
/** Retry affordance a11y label. Default 'Retry upload'. */
|
|
92
|
-
retry
|
|
93
|
-
errorTooMany
|
|
94
|
-
errorTooLarge
|
|
95
|
-
errorWrongType
|
|
92
|
+
retry?: string;
|
|
93
|
+
errorTooMany?: (maxFiles: number) => string;
|
|
94
|
+
errorTooLarge?: (name: string, maxSizeMB: number) => string;
|
|
95
|
+
errorWrongType?: (name: string) => string;
|
|
96
96
|
}
|
|
97
97
|
export interface FilePickerRef {
|
|
98
98
|
/** Open a source by key, or the chooser (sheet when >1 source). */
|
|
@@ -132,7 +132,7 @@ export interface FilePickerProps {
|
|
|
132
132
|
helperText?: string;
|
|
133
133
|
/** External error — wins over internal validation errors (form binding). */
|
|
134
134
|
error?: React.ReactNode;
|
|
135
|
-
labels?:
|
|
135
|
+
labels?: FilePickerLabels;
|
|
136
136
|
/** Haptics for pick/remove (selection) and rejections (error). Pass false to disable. */
|
|
137
137
|
haptic?: HapticType | false;
|
|
138
138
|
/** Files accepted by a pick (post-validation, post-process). */
|
|
@@ -40,6 +40,11 @@ export interface ListItemProps {
|
|
|
40
40
|
/** Text in the subtitle style, or any node drawn as is. */
|
|
41
41
|
subtitle?: React.ReactNode;
|
|
42
42
|
description?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Content drawn in the text column under the description, before a `right`
|
|
45
|
+
* slot placed below. Inside the row's press target.
|
|
46
|
+
*/
|
|
47
|
+
children?: React.ReactNode;
|
|
43
48
|
/** Lines a text title may take before it is truncated. Default 1; 0 for no limit. */
|
|
44
49
|
titleLines?: number;
|
|
45
50
|
/** Lines a text subtitle may take before it is truncated. Default 1; 0 for no limit. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import type { StyleProp, TextStyle, ViewStyle } from 'react-native';
|
|
2
|
+
import type { FocusEvent, StyleProp, TextStyle, ViewStyle } from 'react-native';
|
|
3
3
|
import type { HapticType } from '../../utils';
|
|
4
4
|
export type OTPInputSize = 'sm' | 'md' | 'lg';
|
|
5
5
|
export interface OTPInputRef {
|
|
@@ -33,6 +33,8 @@ export interface OTPInputProps {
|
|
|
33
33
|
* Haptic feedback for interactions. Off unless a HapticType is passed.
|
|
34
34
|
*/
|
|
35
35
|
haptic?: HapticType | false;
|
|
36
|
+
/** Called when any cell takes focus. */
|
|
37
|
+
onFocus?: (e: FocusEvent) => void;
|
|
36
38
|
accessibilityLabel?: string;
|
|
37
39
|
style?: StyleProp<ViewStyle>;
|
|
38
40
|
cellStyle?: StyleProp<ViewStyle>;
|
|
@@ -38,13 +38,13 @@ export type ProfilePickerTone = 'primary' | 'success' | 'warning' | 'error' | 'i
|
|
|
38
38
|
export type ProfilePickerVariant = 'solid' | 'soft' | 'outline';
|
|
39
39
|
export interface ProfilePickerLabels {
|
|
40
40
|
/** A11y label of the photo button. Default 'Change profile photo'. */
|
|
41
|
-
pick
|
|
41
|
+
pick?: string;
|
|
42
42
|
/** Label of the "Remove photo" row in the sheet. Default 'Remove photo'. */
|
|
43
|
-
remove
|
|
43
|
+
remove?: string;
|
|
44
44
|
/** Source chooser sheet title. Default 'Change photo'. */
|
|
45
|
-
sheetTitle
|
|
46
|
-
errorTooLarge
|
|
47
|
-
errorWrongType
|
|
45
|
+
sheetTitle?: string;
|
|
46
|
+
errorTooLarge?: (maxSizeMB: number) => string;
|
|
47
|
+
errorWrongType?: string;
|
|
48
48
|
}
|
|
49
49
|
export interface ProfilePickerProps {
|
|
50
50
|
/** Current photo URL or local URI, or null for none. */
|
|
@@ -109,7 +109,7 @@ export interface ProfilePickerProps {
|
|
|
109
109
|
subtitle?: React.ReactNode;
|
|
110
110
|
/** Renders the photo, e.g. an authenticated image loader (see Avatar). */
|
|
111
111
|
ImageComponent?: React.ComponentType<AvatarImageProps>;
|
|
112
|
-
labels?:
|
|
112
|
+
labels?: ProfilePickerLabels;
|
|
113
113
|
/** Haptic on an accepted pick and on remove; errors use `notificationError`. Pass false to disable. */
|
|
114
114
|
haptic?: HapticType | false;
|
|
115
115
|
/** Called with the message of a rejected or failed pick. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import type { TextInput as RNTextInput, StyleProp, ViewStyle } from 'react-native';
|
|
2
|
+
import type { FocusEvent, TextInput as RNTextInput, StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import type { HapticType } from '../../utils';
|
|
4
4
|
import type { FieldBaseSize, FieldBaseVariant } from '../FieldBase';
|
|
5
5
|
export interface TagInputProps {
|
|
@@ -28,6 +28,8 @@ export interface TagInputProps {
|
|
|
28
28
|
/** Characters that commit the current draft in addition to submit. Default [',']. */
|
|
29
29
|
separators?: string[];
|
|
30
30
|
haptic?: HapticType | false;
|
|
31
|
+
/** Called when the text field takes focus. */
|
|
32
|
+
onFocus?: (e: FocusEvent) => void;
|
|
31
33
|
style?: StyleProp<ViewStyle>;
|
|
32
34
|
testID?: string;
|
|
33
35
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
import type { View as RNView } from 'react-native';
|
|
3
|
+
import type { Theme } from '../../theme/types';
|
|
3
4
|
import type { HapticType } from '../../utils/hapticUtils';
|
|
4
5
|
export interface TourStep {
|
|
5
6
|
/**
|
|
@@ -10,6 +11,12 @@ export interface TourStep {
|
|
|
10
11
|
target: React.RefObject<RNView | null>;
|
|
11
12
|
title?: string;
|
|
12
13
|
description: string;
|
|
14
|
+
/**
|
|
15
|
+
* Corner radius of the target view, as a theme radius key, so the cutout and
|
|
16
|
+
* its outline follow a rounded card. The cutout's own padding is added to it.
|
|
17
|
+
* Default: `theme.radius.md` for the cutout.
|
|
18
|
+
*/
|
|
19
|
+
radius?: keyof Theme['radius'];
|
|
13
20
|
}
|
|
14
21
|
/**
|
|
15
22
|
* Where the app remembers that a person has seen a tour: one record per tour
|
|
@@ -12,16 +12,23 @@ export interface HomeIndicatorProps {
|
|
|
12
12
|
colorMode?: ColorMode;
|
|
13
13
|
}
|
|
14
14
|
export declare const HomeIndicator: ({ os, colorMode }: HomeIndicatorProps) => import("react").CElement<import("react-native").ViewProps, View>;
|
|
15
|
+
export interface NavigationBarProps {
|
|
16
|
+
os: PhoneChromeOs;
|
|
17
|
+
colorMode?: ColorMode;
|
|
18
|
+
}
|
|
19
|
+
export declare const NavigationBar: ({ os, colorMode }: NavigationBarProps) => import("react").CElement<import("react-native").ViewProps, View> | null;
|
|
15
20
|
export interface SafeAreaProps {
|
|
16
21
|
os: PhoneChromeOs;
|
|
17
22
|
children?: ReactNode;
|
|
18
23
|
}
|
|
19
24
|
export declare const SafeArea: ({ os, children }: SafeAreaProps) => import("react").CElement<import("react-native").ViewProps, View>;
|
|
25
|
+
export type KeyboardPreviewOs = 'ios' | 'android';
|
|
20
26
|
export interface KeyboardFrameProps {
|
|
21
27
|
colorMode?: ColorMode;
|
|
28
|
+
previewOs?: KeyboardPreviewOs;
|
|
22
29
|
children?: ReactNode;
|
|
23
30
|
}
|
|
24
|
-
export declare const KeyboardFrame: ({ colorMode, children }: KeyboardFrameProps) => import("react").CElement<import("react-native").ViewProps, View>;
|
|
31
|
+
export declare const KeyboardFrame: ({ colorMode, previewOs, children }: KeyboardFrameProps) => import("react").CElement<import("react-native").ViewProps, View>;
|
|
25
32
|
export interface PhoneChromeManifestProp {
|
|
26
33
|
name: string;
|
|
27
34
|
type: 'enum';
|
|
@@ -183,8 +183,9 @@ export interface BottomNavigationProps {
|
|
|
183
183
|
/**
|
|
184
184
|
* Air above and below the bar surface, in pixels. Default 16 for the
|
|
185
185
|
* `floating` and `tile` capsules and 0 for a docked bar. Above zero it
|
|
186
|
-
* lifts any variant off the screen edge
|
|
187
|
-
*
|
|
186
|
+
* lifts any variant off the screen edge. Over a safe-area inset (a home
|
|
187
|
+
* indicator or Android's system buttons) the lift is the inset plus
|
|
188
|
+
* `theme.spacing.sm`, never less than this margin.
|
|
188
189
|
*/
|
|
189
190
|
marginVertical?: number;
|
|
190
191
|
/**
|
|
@@ -2,7 +2,7 @@ import type React from 'react';
|
|
|
2
2
|
import type { StyleProp, TextStyle, ViewStyle } from 'react-native';
|
|
3
3
|
import type { HapticType } from '../../utils/hapticUtils.js';
|
|
4
4
|
export type DialogVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
|
|
5
|
-
export type DialogActionTone = 'primary' | 'neutral' | 'error';
|
|
5
|
+
export type DialogActionTone = 'primary' | 'neutral' | 'info' | 'error';
|
|
6
6
|
export interface DialogAction {
|
|
7
7
|
label: string;
|
|
8
8
|
onPress: () => void;
|
|
@@ -81,18 +81,18 @@ export interface FilePickerTriggerState {
|
|
|
81
81
|
}
|
|
82
82
|
export interface FilePickerLabels {
|
|
83
83
|
/** Trigger text when no files are attached. Default 'Attach file'. */
|
|
84
|
-
trigger
|
|
84
|
+
trigger?: string;
|
|
85
85
|
/** Add-affordance text/tile label once files exist. Default '+'. (card tile) / 'Add more' (list row). */
|
|
86
|
-
addMore
|
|
86
|
+
addMore?: string;
|
|
87
87
|
/** Source chooser sheet title. Default 'Add from'. */
|
|
88
|
-
sheetTitle
|
|
88
|
+
sheetTitle?: string;
|
|
89
89
|
/** A11y label template for a file's remove button. */
|
|
90
|
-
removeFile
|
|
90
|
+
removeFile?: (name: string) => string;
|
|
91
91
|
/** Retry affordance a11y label. Default 'Retry upload'. */
|
|
92
|
-
retry
|
|
93
|
-
errorTooMany
|
|
94
|
-
errorTooLarge
|
|
95
|
-
errorWrongType
|
|
92
|
+
retry?: string;
|
|
93
|
+
errorTooMany?: (maxFiles: number) => string;
|
|
94
|
+
errorTooLarge?: (name: string, maxSizeMB: number) => string;
|
|
95
|
+
errorWrongType?: (name: string) => string;
|
|
96
96
|
}
|
|
97
97
|
export interface FilePickerRef {
|
|
98
98
|
/** Open a source by key, or the chooser (sheet when >1 source). */
|
|
@@ -132,7 +132,7 @@ export interface FilePickerProps {
|
|
|
132
132
|
helperText?: string;
|
|
133
133
|
/** External error — wins over internal validation errors (form binding). */
|
|
134
134
|
error?: React.ReactNode;
|
|
135
|
-
labels?:
|
|
135
|
+
labels?: FilePickerLabels;
|
|
136
136
|
/** Haptics for pick/remove (selection) and rejections (error). Pass false to disable. */
|
|
137
137
|
haptic?: HapticType | false;
|
|
138
138
|
/** Files accepted by a pick (post-validation, post-process). */
|
|
@@ -40,6 +40,11 @@ export interface ListItemProps {
|
|
|
40
40
|
/** Text in the subtitle style, or any node drawn as is. */
|
|
41
41
|
subtitle?: React.ReactNode;
|
|
42
42
|
description?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Content drawn in the text column under the description, before a `right`
|
|
45
|
+
* slot placed below. Inside the row's press target.
|
|
46
|
+
*/
|
|
47
|
+
children?: React.ReactNode;
|
|
43
48
|
/** Lines a text title may take before it is truncated. Default 1; 0 for no limit. */
|
|
44
49
|
titleLines?: number;
|
|
45
50
|
/** Lines a text subtitle may take before it is truncated. Default 1; 0 for no limit. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import type { StyleProp, TextStyle, ViewStyle } from 'react-native';
|
|
2
|
+
import type { FocusEvent, StyleProp, TextStyle, ViewStyle } from 'react-native';
|
|
3
3
|
import type { HapticType } from '../../utils/index.js';
|
|
4
4
|
export type OTPInputSize = 'sm' | 'md' | 'lg';
|
|
5
5
|
export interface OTPInputRef {
|
|
@@ -33,6 +33,8 @@ export interface OTPInputProps {
|
|
|
33
33
|
* Haptic feedback for interactions. Off unless a HapticType is passed.
|
|
34
34
|
*/
|
|
35
35
|
haptic?: HapticType | false;
|
|
36
|
+
/** Called when any cell takes focus. */
|
|
37
|
+
onFocus?: (e: FocusEvent) => void;
|
|
36
38
|
accessibilityLabel?: string;
|
|
37
39
|
style?: StyleProp<ViewStyle>;
|
|
38
40
|
cellStyle?: StyleProp<ViewStyle>;
|
|
@@ -38,13 +38,13 @@ export type ProfilePickerTone = 'primary' | 'success' | 'warning' | 'error' | 'i
|
|
|
38
38
|
export type ProfilePickerVariant = 'solid' | 'soft' | 'outline';
|
|
39
39
|
export interface ProfilePickerLabels {
|
|
40
40
|
/** A11y label of the photo button. Default 'Change profile photo'. */
|
|
41
|
-
pick
|
|
41
|
+
pick?: string;
|
|
42
42
|
/** Label of the "Remove photo" row in the sheet. Default 'Remove photo'. */
|
|
43
|
-
remove
|
|
43
|
+
remove?: string;
|
|
44
44
|
/** Source chooser sheet title. Default 'Change photo'. */
|
|
45
|
-
sheetTitle
|
|
46
|
-
errorTooLarge
|
|
47
|
-
errorWrongType
|
|
45
|
+
sheetTitle?: string;
|
|
46
|
+
errorTooLarge?: (maxSizeMB: number) => string;
|
|
47
|
+
errorWrongType?: string;
|
|
48
48
|
}
|
|
49
49
|
export interface ProfilePickerProps {
|
|
50
50
|
/** Current photo URL or local URI, or null for none. */
|
|
@@ -109,7 +109,7 @@ export interface ProfilePickerProps {
|
|
|
109
109
|
subtitle?: React.ReactNode;
|
|
110
110
|
/** Renders the photo, e.g. an authenticated image loader (see Avatar). */
|
|
111
111
|
ImageComponent?: React.ComponentType<AvatarImageProps>;
|
|
112
|
-
labels?:
|
|
112
|
+
labels?: ProfilePickerLabels;
|
|
113
113
|
/** Haptic on an accepted pick and on remove; errors use `notificationError`. Pass false to disable. */
|
|
114
114
|
haptic?: HapticType | false;
|
|
115
115
|
/** Called with the message of a rejected or failed pick. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import type { TextInput as RNTextInput, StyleProp, ViewStyle } from 'react-native';
|
|
2
|
+
import type { FocusEvent, TextInput as RNTextInput, StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import type { HapticType } from '../../utils/index.js';
|
|
4
4
|
import type { FieldBaseSize, FieldBaseVariant } from '../FieldBase/index.js';
|
|
5
5
|
export interface TagInputProps {
|
|
@@ -28,6 +28,8 @@ export interface TagInputProps {
|
|
|
28
28
|
/** Characters that commit the current draft in addition to submit. Default [',']. */
|
|
29
29
|
separators?: string[];
|
|
30
30
|
haptic?: HapticType | false;
|
|
31
|
+
/** Called when the text field takes focus. */
|
|
32
|
+
onFocus?: (e: FocusEvent) => void;
|
|
31
33
|
style?: StyleProp<ViewStyle>;
|
|
32
34
|
testID?: string;
|
|
33
35
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
import type { View as RNView } from 'react-native';
|
|
3
|
+
import type { Theme } from '../../theme/types.js';
|
|
3
4
|
import type { HapticType } from '../../utils/hapticUtils.js';
|
|
4
5
|
export interface TourStep {
|
|
5
6
|
/**
|
|
@@ -10,6 +11,12 @@ export interface TourStep {
|
|
|
10
11
|
target: React.RefObject<RNView | null>;
|
|
11
12
|
title?: string;
|
|
12
13
|
description: string;
|
|
14
|
+
/**
|
|
15
|
+
* Corner radius of the target view, as a theme radius key, so the cutout and
|
|
16
|
+
* its outline follow a rounded card. The cutout's own padding is added to it.
|
|
17
|
+
* Default: `theme.radius.md` for the cutout.
|
|
18
|
+
*/
|
|
19
|
+
radius?: keyof Theme['radius'];
|
|
13
20
|
}
|
|
14
21
|
/**
|
|
15
22
|
* Where the app remembers that a person has seen a tour: one record per tour
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/mobile-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"description": "Beautiful, animated, accessible React Native components, theme and form engine for Webority projects.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"peerDependencies": {
|
|
73
|
-
"@webority/mobile-core": ">=0.
|
|
73
|
+
"@webority/mobile-core": ">=0.18.0 <0.19.0",
|
|
74
74
|
"expo": ">=57.0.0",
|
|
75
75
|
"expo-file-system": ">=57.0.0",
|
|
76
76
|
"expo-haptics": ">=57.0.0",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
]
|
|
118
118
|
},
|
|
119
119
|
"devDependencies": {
|
|
120
|
-
"@webority/mobile-core": "0.
|
|
120
|
+
"@webority/mobile-core": "0.18.1"
|
|
121
121
|
},
|
|
122
122
|
"scripts": {
|
|
123
123
|
"build": "bob build && node ../../scripts/minify-lib.mjs",
|