@opengovsg/oui 0.0.30 → 0.0.31
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/checkbox/checkbox.cjs +2 -2
- package/dist/cjs/index.cjs +18 -4
- 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/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/checkbox/checkbox.js +2 -2
- package/dist/esm/index.js +7 -2
- 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/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/system/react-utils/context.d.ts +4 -4
- package/dist/types/system/react-utils/context.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var context = require('../system/react-utils/context.cjs');
|
|
5
|
+
|
|
6
|
+
const [AvatarContext, useAvatarContext] = context.createContext({
|
|
7
|
+
name: "AvatarContext",
|
|
8
|
+
strict: true
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
exports.AvatarContext = AvatarContext;
|
|
12
|
+
exports.useAvatarContext = useAvatarContext;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var $670gB$react = require('react');
|
|
5
|
+
var ouiTheme = require('@opengovsg/oui-theme');
|
|
6
|
+
var children = require('../system/react-utils/children.cjs');
|
|
7
|
+
var context = require('../system/react-utils/context.cjs');
|
|
8
|
+
var refs = require('../system/react-utils/refs.cjs');
|
|
9
|
+
|
|
10
|
+
const [AvatarGroupProvider, useAvatarGroupContext] = context.createContext({
|
|
11
|
+
name: "AvatarGroupContext",
|
|
12
|
+
strict: false
|
|
13
|
+
});
|
|
14
|
+
function useAvatarGroup(props = {}) {
|
|
15
|
+
const {
|
|
16
|
+
as,
|
|
17
|
+
ref,
|
|
18
|
+
max = 5,
|
|
19
|
+
total,
|
|
20
|
+
size,
|
|
21
|
+
color,
|
|
22
|
+
prominence,
|
|
23
|
+
radius,
|
|
24
|
+
children: children$1,
|
|
25
|
+
renderCount,
|
|
26
|
+
className,
|
|
27
|
+
classNames,
|
|
28
|
+
countProps,
|
|
29
|
+
...otherProps
|
|
30
|
+
} = props;
|
|
31
|
+
const domRef = refs.useDomRef(ref);
|
|
32
|
+
const Component = as || "div";
|
|
33
|
+
const context = $670gB$react.useMemo(
|
|
34
|
+
() => ({
|
|
35
|
+
size,
|
|
36
|
+
color,
|
|
37
|
+
radius,
|
|
38
|
+
prominence
|
|
39
|
+
}),
|
|
40
|
+
[size, color, radius, prominence]
|
|
41
|
+
);
|
|
42
|
+
const slots = $670gB$react.useMemo(
|
|
43
|
+
() => ouiTheme.avatarGroupStyles({ className: className ?? classNames?.base }),
|
|
44
|
+
[className, classNames?.base]
|
|
45
|
+
);
|
|
46
|
+
const validChildren = children.getValidChildren(children$1);
|
|
47
|
+
const childrenWithinMax = max ? validChildren.slice(0, max) : validChildren;
|
|
48
|
+
const remainingCount = total ? total : max != null ? validChildren.length - max : -1;
|
|
49
|
+
const clones = childrenWithinMax.map((child, index) => {
|
|
50
|
+
return $670gB$react.cloneElement(child, {
|
|
51
|
+
// @ts-expect-error: CSS variable is not recognized as a valid style property
|
|
52
|
+
style: {
|
|
53
|
+
"--avatar-zindex": childrenWithinMax.length - index
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
const getAvatarGroupProps = () => {
|
|
58
|
+
return {
|
|
59
|
+
ref: domRef,
|
|
60
|
+
className: slots.base({
|
|
61
|
+
class: ouiTheme.cn(classNames?.base, className)
|
|
62
|
+
}),
|
|
63
|
+
role: "group",
|
|
64
|
+
...otherProps
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
const getAvatarGroupCountProps = () => {
|
|
68
|
+
return {
|
|
69
|
+
className: slots.counter({
|
|
70
|
+
class: classNames?.counter
|
|
71
|
+
}),
|
|
72
|
+
...countProps
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
return {
|
|
76
|
+
Component,
|
|
77
|
+
context,
|
|
78
|
+
remainingCount,
|
|
79
|
+
clones,
|
|
80
|
+
renderCount,
|
|
81
|
+
getAvatarGroupProps,
|
|
82
|
+
getAvatarGroupCountProps
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
exports.AvatarGroupProvider = AvatarGroupProvider;
|
|
87
|
+
exports.useAvatarGroup = useAvatarGroup;
|
|
88
|
+
exports.useAvatarGroupContext = useAvatarGroupContext;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var $670gB$react = require('react');
|
|
6
|
+
var utils = require('../system/utils.cjs');
|
|
7
|
+
var avatar = require('./avatar.cjs');
|
|
8
|
+
var avatarGroupContext = require('./avatar-group-context.cjs');
|
|
9
|
+
|
|
10
|
+
const AvatarGroup = utils.forwardRef((props, ref) => {
|
|
11
|
+
const {
|
|
12
|
+
Component,
|
|
13
|
+
clones,
|
|
14
|
+
context,
|
|
15
|
+
remainingCount,
|
|
16
|
+
getAvatarGroupCountProps,
|
|
17
|
+
getAvatarGroupProps,
|
|
18
|
+
renderCount
|
|
19
|
+
} = avatarGroupContext.useAvatarGroup({
|
|
20
|
+
...props,
|
|
21
|
+
ref
|
|
22
|
+
});
|
|
23
|
+
const renderedCount = $670gB$react.useMemo(() => {
|
|
24
|
+
if (remainingCount <= 0) return null;
|
|
25
|
+
if (renderCount) {
|
|
26
|
+
return renderCount(remainingCount);
|
|
27
|
+
}
|
|
28
|
+
const countAvatarVariantProps = {
|
|
29
|
+
prominence: "subtle",
|
|
30
|
+
color: "primary"
|
|
31
|
+
};
|
|
32
|
+
if (context.prominence === "subtle") {
|
|
33
|
+
countAvatarVariantProps.color = "white";
|
|
34
|
+
}
|
|
35
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
36
|
+
avatar.AvatarRoot,
|
|
37
|
+
{
|
|
38
|
+
...countAvatarVariantProps,
|
|
39
|
+
...getAvatarGroupCountProps(),
|
|
40
|
+
name: `+${remainingCount}`,
|
|
41
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(avatar.AvatarFallback, { children: [
|
|
42
|
+
"+",
|
|
43
|
+
remainingCount
|
|
44
|
+
] })
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}, [
|
|
48
|
+
context.prominence,
|
|
49
|
+
getAvatarGroupCountProps,
|
|
50
|
+
remainingCount,
|
|
51
|
+
renderCount
|
|
52
|
+
]);
|
|
53
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, { ...getAvatarGroupProps(), children: /* @__PURE__ */ jsxRuntime.jsxs(avatarGroupContext.AvatarGroupProvider, { value: context, children: [
|
|
54
|
+
clones,
|
|
55
|
+
renderedCount
|
|
56
|
+
] }) });
|
|
57
|
+
});
|
|
58
|
+
AvatarGroup.displayName = "AvatarGroup";
|
|
59
|
+
|
|
60
|
+
exports.AvatarGroup = AvatarGroup;
|
|
@@ -0,0 +1,132 @@
|
|
|
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 utils$2 = require('@react-aria/utils');
|
|
8
|
+
var ouiTheme = require('@opengovsg/oui-theme');
|
|
9
|
+
var utils = require('../system/utils.cjs');
|
|
10
|
+
var avatarContext = require('./avatar-context.cjs');
|
|
11
|
+
var avatarGroupContext = require('./avatar-group-context.cjs');
|
|
12
|
+
var useImgLoadingStatus = require('./hooks/use-img-loading-status.cjs');
|
|
13
|
+
var utils$1 = require('./utils.cjs');
|
|
14
|
+
var refs = require('../system/react-utils/refs.cjs');
|
|
15
|
+
var user = require('../node_modules/.pnpm/lucide-react@0.475.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/user.cjs');
|
|
16
|
+
|
|
17
|
+
const AvatarRoot = utils.forwardRef(
|
|
18
|
+
(originalProps, ref) => {
|
|
19
|
+
const groupContext = avatarGroupContext.useAvatarGroupContext();
|
|
20
|
+
const [
|
|
21
|
+
{
|
|
22
|
+
name,
|
|
23
|
+
getInitials = utils$1.getInitialsFromText,
|
|
24
|
+
classNames,
|
|
25
|
+
className,
|
|
26
|
+
children,
|
|
27
|
+
as,
|
|
28
|
+
...props
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
color = groupContext?.color,
|
|
32
|
+
prominence = groupContext?.prominence,
|
|
33
|
+
size = groupContext?.size,
|
|
34
|
+
radius = groupContext?.radius,
|
|
35
|
+
...variantProps
|
|
36
|
+
}
|
|
37
|
+
] = utils.mapPropsVariants(originalProps, ouiTheme.avatarStyles.variantKeys);
|
|
38
|
+
const isInGroup = !!groupContext;
|
|
39
|
+
const domRef = refs.useDomRef(ref);
|
|
40
|
+
const slots = ouiTheme.avatarStyles({
|
|
41
|
+
color,
|
|
42
|
+
prominence,
|
|
43
|
+
size,
|
|
44
|
+
radius,
|
|
45
|
+
isInGroup,
|
|
46
|
+
...variantProps
|
|
47
|
+
});
|
|
48
|
+
const [imageLoadingStatus, setImageLoadingStatus] = $670gB$react.useState("idle");
|
|
49
|
+
const Component = as || "span";
|
|
50
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
51
|
+
avatarContext.AvatarContext,
|
|
52
|
+
{
|
|
53
|
+
value: {
|
|
54
|
+
imageLoadingStatus,
|
|
55
|
+
setImageLoadingStatus,
|
|
56
|
+
slots,
|
|
57
|
+
classNames,
|
|
58
|
+
getInitials,
|
|
59
|
+
name
|
|
60
|
+
},
|
|
61
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
62
|
+
Component,
|
|
63
|
+
{
|
|
64
|
+
ref: domRef,
|
|
65
|
+
...props,
|
|
66
|
+
className: slots.base({ className: className ?? classNames?.base }),
|
|
67
|
+
children
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
const AvatarImage = utils.forwardRef(
|
|
75
|
+
({ src, as, ...props }, ref) => {
|
|
76
|
+
const domRef = refs.useDomRef(ref);
|
|
77
|
+
const {
|
|
78
|
+
setImageLoadingStatus,
|
|
79
|
+
imageLoadingStatus,
|
|
80
|
+
slots,
|
|
81
|
+
name,
|
|
82
|
+
classNames
|
|
83
|
+
} = avatarContext.useAvatarContext();
|
|
84
|
+
const currentImageStatus = useImgLoadingStatus.useImageLoadingStatus(src, props);
|
|
85
|
+
const Component = as || "img";
|
|
86
|
+
utils$2.useLayoutEffect(() => {
|
|
87
|
+
setImageLoadingStatus(currentImageStatus);
|
|
88
|
+
}, [currentImageStatus, setImageLoadingStatus]);
|
|
89
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
90
|
+
Component,
|
|
91
|
+
{
|
|
92
|
+
ref: domRef,
|
|
93
|
+
alt: name,
|
|
94
|
+
"data-loaded": ouiTheme.dataAttr(imageLoadingStatus === "loaded"),
|
|
95
|
+
...props,
|
|
96
|
+
src,
|
|
97
|
+
className: slots.image({ className: classNames?.image })
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
const AvatarFallback = utils.forwardRef(
|
|
103
|
+
({ children, as, ...props }, ref) => {
|
|
104
|
+
const domRef = refs.useDomRef(ref);
|
|
105
|
+
const { slots, classNames, imageLoadingStatus, name, getInitials } = avatarContext.useAvatarContext();
|
|
106
|
+
const childrenToRender = $670gB$react.useMemo(() => {
|
|
107
|
+
if (children) return children;
|
|
108
|
+
if (name) {
|
|
109
|
+
return getInitials(name);
|
|
110
|
+
}
|
|
111
|
+
return /* @__PURE__ */ jsxRuntime.jsx(user.default, { className: slots.icon({ className: classNames?.icon }) });
|
|
112
|
+
}, [children, classNames?.icon, getInitials, name, slots]);
|
|
113
|
+
const Component = as || "div";
|
|
114
|
+
if (imageLoadingStatus === "loaded") {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
118
|
+
Component,
|
|
119
|
+
{
|
|
120
|
+
title: name,
|
|
121
|
+
className: slots.fallback({ className: classNames?.fallback }),
|
|
122
|
+
ref: domRef,
|
|
123
|
+
...props,
|
|
124
|
+
children: childrenToRender
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
exports.AvatarFallback = AvatarFallback;
|
|
131
|
+
exports.AvatarImage = AvatarImage;
|
|
132
|
+
exports.AvatarRoot = AvatarRoot;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var $670gB$react = require('react');
|
|
5
|
+
|
|
6
|
+
function useIsHydrated() {
|
|
7
|
+
return $670gB$react.useSyncExternalStore(
|
|
8
|
+
subscribe,
|
|
9
|
+
() => true,
|
|
10
|
+
() => false
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
function subscribe() {
|
|
14
|
+
return () => {
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function resolveLoadingStatus(image, src) {
|
|
18
|
+
if (!image) {
|
|
19
|
+
return "idle";
|
|
20
|
+
}
|
|
21
|
+
if (!src) {
|
|
22
|
+
return "error";
|
|
23
|
+
}
|
|
24
|
+
if (image.src !== src) {
|
|
25
|
+
image.src = src;
|
|
26
|
+
}
|
|
27
|
+
return image.complete && image.naturalWidth > 0 ? "loaded" : "loading";
|
|
28
|
+
}
|
|
29
|
+
function useImageLoadingStatus(src, { referrerPolicy, crossOrigin }) {
|
|
30
|
+
const isHydrated = useIsHydrated();
|
|
31
|
+
const imageRef = $670gB$react.useRef(null);
|
|
32
|
+
const image = (() => {
|
|
33
|
+
if (!isHydrated) return null;
|
|
34
|
+
if (!imageRef.current) {
|
|
35
|
+
imageRef.current = new window.Image();
|
|
36
|
+
}
|
|
37
|
+
return imageRef.current;
|
|
38
|
+
})();
|
|
39
|
+
const [loadingStatus, setLoadingStatus] = $670gB$react.useState(
|
|
40
|
+
() => resolveLoadingStatus(image, src)
|
|
41
|
+
);
|
|
42
|
+
$670gB$react.useLayoutEffect(() => {
|
|
43
|
+
setLoadingStatus(resolveLoadingStatus(image, src));
|
|
44
|
+
}, [image, src]);
|
|
45
|
+
$670gB$react.useLayoutEffect(() => {
|
|
46
|
+
const updateStatus = (status) => () => {
|
|
47
|
+
setLoadingStatus(status);
|
|
48
|
+
};
|
|
49
|
+
if (!image) return;
|
|
50
|
+
const handleLoad = updateStatus("loaded");
|
|
51
|
+
const handleError = updateStatus("error");
|
|
52
|
+
image.addEventListener("load", handleLoad);
|
|
53
|
+
image.addEventListener("error", handleError);
|
|
54
|
+
if (referrerPolicy) {
|
|
55
|
+
image.referrerPolicy = referrerPolicy;
|
|
56
|
+
}
|
|
57
|
+
if (typeof crossOrigin === "string") {
|
|
58
|
+
image.crossOrigin = crossOrigin;
|
|
59
|
+
}
|
|
60
|
+
return () => {
|
|
61
|
+
image.removeEventListener("load", handleLoad);
|
|
62
|
+
image.removeEventListener("error", handleError);
|
|
63
|
+
};
|
|
64
|
+
}, [image, crossOrigin, referrerPolicy]);
|
|
65
|
+
return loadingStatus;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
exports.useImageLoadingStatus = useImageLoadingStatus;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var avatar = require('./avatar.cjs');
|
|
5
|
+
var avatarContext = require('./avatar-context.cjs');
|
|
6
|
+
var avatarGroup = require('./avatar-group.cjs');
|
|
7
|
+
var avatarGroupContext = require('./avatar-group-context.cjs');
|
|
8
|
+
|
|
9
|
+
const Avatar = Object.assign(avatar.AvatarRoot, {
|
|
10
|
+
Root: avatar.AvatarRoot,
|
|
11
|
+
Image: avatar.AvatarImage,
|
|
12
|
+
Fallback: avatar.AvatarFallback
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
exports.AvatarFallback = avatar.AvatarFallback;
|
|
16
|
+
exports.AvatarImage = avatar.AvatarImage;
|
|
17
|
+
exports.AvatarRoot = avatar.AvatarRoot;
|
|
18
|
+
exports.AvatarContext = avatarContext.AvatarContext;
|
|
19
|
+
exports.useAvatarContext = avatarContext.useAvatarContext;
|
|
20
|
+
exports.AvatarGroup = avatarGroup.AvatarGroup;
|
|
21
|
+
exports.AvatarGroupProvider = avatarGroupContext.AvatarGroupProvider;
|
|
22
|
+
exports.useAvatarGroup = avatarGroupContext.useAvatarGroup;
|
|
23
|
+
exports.Avatar = Avatar;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const getInitialsFromText = (text, limit = 2) => {
|
|
5
|
+
const initials = text?.trim().split(/[\s\-_.]+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase()).join("") || "";
|
|
6
|
+
return initials.slice(0, limit);
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
exports.getInitialsFromText = getInitialsFromText;
|
|
@@ -20,8 +20,8 @@ const Checkbox = ({
|
|
|
20
20
|
originalProps,
|
|
21
21
|
ouiTheme.checkboxStyles.variantKeys
|
|
22
22
|
);
|
|
23
|
-
const
|
|
24
|
-
const styles = ouiTheme.checkboxStyles({ size, ...variants });
|
|
23
|
+
const context = checkboxGroupStyleContext.useCheckboxGroupStyleContext();
|
|
24
|
+
const styles = ouiTheme.checkboxStyles({ size: context?.size, ...variants });
|
|
25
25
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26
26
|
reactAriaComponents.Checkbox,
|
|
27
27
|
{
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -20,13 +20,11 @@ var comboBox = require('./combo-box/combo-box.cjs');
|
|
|
20
20
|
var comboBoxFuzzy = require('./combo-box/combo-box-fuzzy.cjs');
|
|
21
21
|
var comboBoxItem = require('./combo-box/combo-box-item.cjs');
|
|
22
22
|
var comboBoxVariantContext = require('./combo-box/combo-box-variant-context.cjs');
|
|
23
|
-
var banner = require('./banner/banner.cjs');
|
|
24
23
|
var tagField = require('./tag-field/tag-field.cjs');
|
|
25
24
|
var tagFieldItem = require('./tag-field/tag-field-item.cjs');
|
|
26
25
|
var select = require('./select/select.cjs');
|
|
27
26
|
var selectItem = require('./select/select-item.cjs');
|
|
28
27
|
var selectVariantContext = require('./select/select-variant-context.cjs');
|
|
29
|
-
var badge = require('./badge/badge.cjs');
|
|
30
28
|
var calendar = require('./calendar/calendar.cjs');
|
|
31
29
|
var calendarStyleContext = require('./calendar/calendar-style-context.cjs');
|
|
32
30
|
var utils = require('./calendar/utils.cjs');
|
|
@@ -65,7 +63,14 @@ var toggle$1 = require('./navbar/navbar-menu/toggle.cjs');
|
|
|
65
63
|
var navbarItem = require('./navbar/navbar-item.cjs');
|
|
66
64
|
var useNavbar = require('./navbar/use-navbar.cjs');
|
|
67
65
|
var navbarContext = require('./navbar/navbar-context.cjs');
|
|
66
|
+
var index = require('./avatar/index.cjs');
|
|
67
|
+
var banner = require('./banner/banner.cjs');
|
|
68
|
+
var badge = require('./badge/badge.cjs');
|
|
68
69
|
var sonner = require('sonner');
|
|
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
|
|
|
@@ -94,14 +99,12 @@ exports.ComboBoxFuzzy = comboBoxFuzzy.ComboBoxFuzzy;
|
|
|
94
99
|
exports.ComboBoxItem = comboBoxItem.ComboBoxItem;
|
|
95
100
|
exports.ComboBoxVariantContext = comboBoxVariantContext.ComboBoxVariantContext;
|
|
96
101
|
exports.useComboBoxVariantContext = comboBoxVariantContext.useComboBoxVariantContext;
|
|
97
|
-
exports.Banner = banner.Banner;
|
|
98
102
|
exports.TagField = tagField.TagField;
|
|
99
103
|
exports.TagFieldItem = tagFieldItem.TagFieldItem;
|
|
100
104
|
exports.Select = select.Select;
|
|
101
105
|
exports.SelectItem = selectItem.SelectItem;
|
|
102
106
|
exports.SelectVariantContext = selectVariantContext.SelectVariantContext;
|
|
103
107
|
exports.useSelectVariantContext = selectVariantContext.useSelectVariantContext;
|
|
104
|
-
exports.Badge = badge.Badge;
|
|
105
108
|
exports.Calendar = calendar.Calendar;
|
|
106
109
|
exports.CalendarStateWrapper = calendar.CalendarStateWrapper;
|
|
107
110
|
exports.CalendarStyleContext = calendarStyleContext.CalendarStyleContext;
|
|
@@ -169,7 +172,18 @@ exports.NavbarItem = navbarItem.NavbarItem;
|
|
|
169
172
|
exports.useNavbar = useNavbar.useNavbar;
|
|
170
173
|
exports.NavbarProvider = navbarContext.NavbarProvider;
|
|
171
174
|
exports.useNavbarContext = navbarContext.useNavbarContext;
|
|
175
|
+
exports.Avatar = index.Avatar;
|
|
176
|
+
exports.Banner = banner.Banner;
|
|
177
|
+
exports.Badge = badge.Badge;
|
|
172
178
|
Object.defineProperty(exports, "toast", {
|
|
173
179
|
enumerable: true,
|
|
174
180
|
get: function () { return sonner.toast; }
|
|
175
181
|
});
|
|
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;
|
|
@@ -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;
|
|
@@ -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 };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { useRef, useState, useLayoutEffect, useSyncExternalStore } from 'react';
|
|
3
|
+
|
|
4
|
+
function useIsHydrated() {
|
|
5
|
+
return useSyncExternalStore(
|
|
6
|
+
subscribe,
|
|
7
|
+
() => true,
|
|
8
|
+
() => false
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
function subscribe() {
|
|
12
|
+
return () => {
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function resolveLoadingStatus(image, src) {
|
|
16
|
+
if (!image) {
|
|
17
|
+
return "idle";
|
|
18
|
+
}
|
|
19
|
+
if (!src) {
|
|
20
|
+
return "error";
|
|
21
|
+
}
|
|
22
|
+
if (image.src !== src) {
|
|
23
|
+
image.src = src;
|
|
24
|
+
}
|
|
25
|
+
return image.complete && image.naturalWidth > 0 ? "loaded" : "loading";
|
|
26
|
+
}
|
|
27
|
+
function useImageLoadingStatus(src, { referrerPolicy, crossOrigin }) {
|
|
28
|
+
const isHydrated = useIsHydrated();
|
|
29
|
+
const imageRef = useRef(null);
|
|
30
|
+
const image = (() => {
|
|
31
|
+
if (!isHydrated) return null;
|
|
32
|
+
if (!imageRef.current) {
|
|
33
|
+
imageRef.current = new window.Image();
|
|
34
|
+
}
|
|
35
|
+
return imageRef.current;
|
|
36
|
+
})();
|
|
37
|
+
const [loadingStatus, setLoadingStatus] = useState(
|
|
38
|
+
() => resolveLoadingStatus(image, src)
|
|
39
|
+
);
|
|
40
|
+
useLayoutEffect(() => {
|
|
41
|
+
setLoadingStatus(resolveLoadingStatus(image, src));
|
|
42
|
+
}, [image, src]);
|
|
43
|
+
useLayoutEffect(() => {
|
|
44
|
+
const updateStatus = (status) => () => {
|
|
45
|
+
setLoadingStatus(status);
|
|
46
|
+
};
|
|
47
|
+
if (!image) return;
|
|
48
|
+
const handleLoad = updateStatus("loaded");
|
|
49
|
+
const handleError = updateStatus("error");
|
|
50
|
+
image.addEventListener("load", handleLoad);
|
|
51
|
+
image.addEventListener("error", handleError);
|
|
52
|
+
if (referrerPolicy) {
|
|
53
|
+
image.referrerPolicy = referrerPolicy;
|
|
54
|
+
}
|
|
55
|
+
if (typeof crossOrigin === "string") {
|
|
56
|
+
image.crossOrigin = crossOrigin;
|
|
57
|
+
}
|
|
58
|
+
return () => {
|
|
59
|
+
image.removeEventListener("load", handleLoad);
|
|
60
|
+
image.removeEventListener("error", handleError);
|
|
61
|
+
};
|
|
62
|
+
}, [image, crossOrigin, referrerPolicy]);
|
|
63
|
+
return loadingStatus;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { useImageLoadingStatus };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { AvatarRoot, AvatarFallback, AvatarImage } from './avatar.js';
|
|
3
|
+
export { AvatarContext, useAvatarContext } from './avatar-context.js';
|
|
4
|
+
export { AvatarGroup } from './avatar-group.js';
|
|
5
|
+
export { AvatarGroupProvider, useAvatarGroup } from './avatar-group-context.js';
|
|
6
|
+
|
|
7
|
+
const Avatar = Object.assign(AvatarRoot, {
|
|
8
|
+
Root: AvatarRoot,
|
|
9
|
+
Image: AvatarImage,
|
|
10
|
+
Fallback: AvatarFallback
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export { Avatar, AvatarFallback, AvatarImage, AvatarRoot };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const getInitialsFromText = (text, limit = 2) => {
|
|
3
|
+
const initials = text?.trim().split(/[\s\-_.]+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase()).join("") || "";
|
|
4
|
+
return initials.slice(0, limit);
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export { getInitialsFromText };
|
|
@@ -18,8 +18,8 @@ const Checkbox = ({
|
|
|
18
18
|
originalProps,
|
|
19
19
|
checkboxStyles.variantKeys
|
|
20
20
|
);
|
|
21
|
-
const
|
|
22
|
-
const styles = checkboxStyles({ size, ...variants });
|
|
21
|
+
const context = useCheckboxGroupStyleContext();
|
|
22
|
+
const styles = checkboxStyles({ size: context?.size, ...variants });
|
|
23
23
|
return /* @__PURE__ */ jsx(
|
|
24
24
|
Checkbox$1,
|
|
25
25
|
{
|
package/dist/esm/index.js
CHANGED
|
@@ -18,13 +18,11 @@ export { ComboBox, ComboBoxEmptyState } from './combo-box/combo-box.js';
|
|
|
18
18
|
export { ComboBoxFuzzy } from './combo-box/combo-box-fuzzy.js';
|
|
19
19
|
export { ComboBoxItem } from './combo-box/combo-box-item.js';
|
|
20
20
|
export { ComboBoxVariantContext, useComboBoxVariantContext } from './combo-box/combo-box-variant-context.js';
|
|
21
|
-
export { Banner } from './banner/banner.js';
|
|
22
21
|
export { TagField } from './tag-field/tag-field.js';
|
|
23
22
|
export { TagFieldItem } from './tag-field/tag-field-item.js';
|
|
24
23
|
export { Select } from './select/select.js';
|
|
25
24
|
export { SelectItem } from './select/select-item.js';
|
|
26
25
|
export { SelectVariantContext, useSelectVariantContext } from './select/select-variant-context.js';
|
|
27
|
-
export { Badge } from './badge/badge.js';
|
|
28
26
|
export { Calendar, CalendarStateWrapper } from './calendar/calendar.js';
|
|
29
27
|
export { CalendarStyleContext, useCalendarStyleContext } from './calendar/calendar-style-context.js';
|
|
30
28
|
export { getEraFormat, useGenerateLocalizedMonths, useGenerateLocalizedYears, useLocalizedMonthYear } from './calendar/utils.js';
|
|
@@ -63,4 +61,11 @@ export { NavbarMenuToggle } from './navbar/navbar-menu/toggle.js';
|
|
|
63
61
|
export { NavbarItem } from './navbar/navbar-item.js';
|
|
64
62
|
export { useNavbar } from './navbar/use-navbar.js';
|
|
65
63
|
export { NavbarProvider, useNavbarContext } from './navbar/navbar-context.js';
|
|
64
|
+
export { Avatar } from './avatar/index.js';
|
|
65
|
+
export { Banner } from './banner/banner.js';
|
|
66
|
+
export { Badge } from './badge/badge.js';
|
|
66
67
|
export { toast } from 'sonner';
|
|
68
|
+
export { AvatarContext, useAvatarContext } from './avatar/avatar-context.js';
|
|
69
|
+
export { AvatarGroup } from './avatar/avatar-group.js';
|
|
70
|
+
export { AvatarGroupProvider, useAvatarGroup } from './avatar/avatar-group-context.js';
|
|
71
|
+
export { AvatarFallback, AvatarImage, AvatarRoot } from './avatar/avatar.js';
|
|
@@ -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
|
+
["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2", key: "975kel" }],
|
|
13
|
+
["circle", { cx: "12", cy: "7", r: "4", key: "17ys0d" }]
|
|
14
|
+
];
|
|
15
|
+
const User = createLucideIcon("User", __iconNode);
|
|
16
|
+
|
|
17
|
+
export { __iconNode, User as default };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AvatarSlots, avatarStyles, SlotsToClasses } from "@opengovsg/oui-theme";
|
|
2
|
+
import type { ImageLoadingStatus } from "./hooks/use-img-loading-status";
|
|
3
|
+
export interface UseAvatarContextReturn {
|
|
4
|
+
imageLoadingStatus: ImageLoadingStatus;
|
|
5
|
+
setImageLoadingStatus: React.Dispatch<React.SetStateAction<ImageLoadingStatus>>;
|
|
6
|
+
slots: ReturnType<typeof avatarStyles>;
|
|
7
|
+
classNames?: SlotsToClasses<AvatarSlots>;
|
|
8
|
+
name?: string;
|
|
9
|
+
getInitials: (name: string) => string;
|
|
10
|
+
}
|
|
11
|
+
export declare const AvatarContext: import("react").Context<UseAvatarContextReturn>, useAvatarContext: () => UseAvatarContextReturn;
|
|
12
|
+
//# sourceMappingURL=avatar-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-context.d.ts","sourceRoot":"","sources":["../../../src/avatar/avatar-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACf,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAGxE,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CACnC,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CACzC,CAAA;IACD,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;IACtC,UAAU,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CACtC;AACD,eAAO,MAAO,aAAa,mDAAE,gBAAgB,8BAIzC,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { AvatarGroupSlots, AvatarGroupVariantProps, AvatarVariantProps, SlotsToClasses } from "@opengovsg/oui-theme";
|
|
3
|
+
import type { ReactRef } from "../system/react-utils";
|
|
4
|
+
import type { HtmlUiProps, PropGetter } from "../system/types";
|
|
5
|
+
import type { AvatarProps } from "./index";
|
|
6
|
+
export type UseAvatarGroupContextReturn = {
|
|
7
|
+
size?: UseAvatarGroupProps["size"];
|
|
8
|
+
color?: UseAvatarGroupProps["color"];
|
|
9
|
+
radius?: UseAvatarGroupProps["radius"];
|
|
10
|
+
prominence?: UseAvatarGroupProps["prominence"];
|
|
11
|
+
};
|
|
12
|
+
export declare const AvatarGroupProvider: import("react").Context<UseAvatarGroupContextReturn | undefined>, useAvatarGroupContext: () => UseAvatarGroupContextReturn | undefined;
|
|
13
|
+
export interface UseAvatarGroupProps extends HtmlUiProps<"div">, AvatarGroupVariantProps, Pick<AvatarVariantProps, "size" | "color" | "prominence" | "radius"> {
|
|
14
|
+
/**
|
|
15
|
+
* Ref to the DOM node.
|
|
16
|
+
*/
|
|
17
|
+
ref?: ReactRef<HTMLDivElement | null>;
|
|
18
|
+
/**
|
|
19
|
+
* The maximum number of visible avatars
|
|
20
|
+
* @default 5
|
|
21
|
+
*/
|
|
22
|
+
max?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Control the number of avatar not visible
|
|
25
|
+
*/
|
|
26
|
+
total?: number;
|
|
27
|
+
/**
|
|
28
|
+
* This allows you to render a custom count component.
|
|
29
|
+
*/
|
|
30
|
+
renderCount?: (count: number) => ReactNode;
|
|
31
|
+
/**
|
|
32
|
+
* Props to be passed to the count component.
|
|
33
|
+
*/
|
|
34
|
+
countProps?: Partial<AvatarProps>;
|
|
35
|
+
/**
|
|
36
|
+
* Classname or List of classes to change the classNames of the avatar group.
|
|
37
|
+
* if `className` is passed, it will be added to the base slot.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* <AvatarGroup classNames={{
|
|
42
|
+
* base: "base-classes",
|
|
43
|
+
* count: "count-classes"
|
|
44
|
+
* }} />
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
classNames?: SlotsToClasses<AvatarGroupSlots>;
|
|
48
|
+
}
|
|
49
|
+
export declare function useAvatarGroup(props?: UseAvatarGroupProps): {
|
|
50
|
+
Component: import("../system/types").As<any>;
|
|
51
|
+
context: UseAvatarGroupContextReturn;
|
|
52
|
+
remainingCount: number;
|
|
53
|
+
clones: import("react").DetailedReactHTMLElement<import("react").HTMLAttributes<HTMLElement>, HTMLElement>[];
|
|
54
|
+
renderCount: ((count: number) => ReactNode) | undefined;
|
|
55
|
+
getAvatarGroupProps: PropGetter;
|
|
56
|
+
getAvatarGroupCountProps: () => {
|
|
57
|
+
classNames?: SlotsToClasses<import("@opengovsg/oui-theme").AvatarSlots>;
|
|
58
|
+
className: string;
|
|
59
|
+
name?: string;
|
|
60
|
+
getInitials?: (name: string) => string;
|
|
61
|
+
size?: "md" | "sm" | "xs" | "2xs" | undefined;
|
|
62
|
+
color?: "white" | "primary" | undefined;
|
|
63
|
+
radius?: "none" | "lg" | "md" | "sm" | "full" | undefined;
|
|
64
|
+
prominence?: "subtle" | "strong" | undefined;
|
|
65
|
+
isInGroup?: boolean | undefined;
|
|
66
|
+
children?: ReactNode | undefined;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export type UseAvatarReturn = ReturnType<typeof useAvatarGroup>;
|
|
70
|
+
//# sourceMappingURL=avatar-group-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-group-context.d.ts","sourceRoot":"","sources":["../../../src/avatar/avatar-group-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1C,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAClC,KAAK,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IACtC,UAAU,CAAC,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAA;CAC/C,CAAA;AAED,eAAO,MAAO,mBAAmB,oEAAE,qBAAqB,+CAMtD,CAAA;AAEF,MAAM,WAAW,mBACf,SAAQ,WAAW,CAAC,KAAK,CAAC,EACxB,uBAAuB,EACvB,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAC;IACtE;;OAEG;IACH,GAAG,CAAC,EAAE,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IACrC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;IAE1C;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAEjC;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAA;CAC9C;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,mBAAwB;;;;;0BAtBtC,MAAM,KAAK,SAAS;;;;;;;;;;;;;;EAyG3C;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { UseAvatarGroupProps } from "./avatar-group-context";
|
|
2
|
+
export interface AvatarGroupProps extends UseAvatarGroupProps {
|
|
3
|
+
}
|
|
4
|
+
export declare const AvatarGroup: import("../system/utils").InternalForwardRefRenderFunction<"div", AvatarGroupProps, never>;
|
|
5
|
+
//# sourceMappingURL=avatar-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-group.d.ts","sourceRoot":"","sources":["../../../src/avatar/avatar-group.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAMjE,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;CAAG;AAEhE,eAAO,MAAM,WAAW,4FAoDtB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PropsWithChildren } from "react";
|
|
2
|
+
import type { AvatarSlots, AvatarVariantProps, SlotsToClasses } from "@opengovsg/oui-theme";
|
|
3
|
+
export interface AvatarProps extends AvatarVariantProps, PropsWithChildren {
|
|
4
|
+
classNames?: SlotsToClasses<AvatarSlots>;
|
|
5
|
+
className?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
getInitials?: (name: string) => string;
|
|
8
|
+
}
|
|
9
|
+
export declare const AvatarRoot: import("../system/utils").InternalForwardRefRenderFunction<"span", AvatarProps, never>;
|
|
10
|
+
export interface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
11
|
+
src?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const AvatarImage: import("../system/utils").InternalForwardRefRenderFunction<"img", AvatarImageProps, never>;
|
|
14
|
+
export interface AvatarFallbackProps {
|
|
15
|
+
children?: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare const AvatarFallback: import("../system/utils").InternalForwardRefRenderFunction<"div", AvatarFallbackProps, never>;
|
|
18
|
+
//# sourceMappingURL=avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/avatar/avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAK9C,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAW7B,MAAM,WAAW,WAAY,SAAQ,kBAAkB,EAAE,iBAAiB;IACxE,UAAU,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAA;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CACvC;AAED,eAAO,MAAM,UAAU,wFA8DtB,CAAA;AAED,MAAM,WAAW,gBACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,WAAW,4FA8BvB,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AACD,eAAO,MAAM,cAAc,+FAiC1B,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ComponentPropsWithoutRef } from "react";
|
|
2
|
+
export type ImageLoadingStatus = "idle" | "loading" | "loaded" | "error";
|
|
3
|
+
export declare function useImageLoadingStatus(src: string | undefined, { referrerPolicy, crossOrigin }: ComponentPropsWithoutRef<"img">): ImageLoadingStatus;
|
|
4
|
+
//# sourceMappingURL=use-img-loading-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-img-loading-status.d.ts","sourceRoot":"","sources":["../../../../src/avatar/hooks/use-img-loading-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAA;AAGrD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAiCxE,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,wBAAwB,CAAC,KAAK,CAAC,sBA6CjE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AvatarFallback, AvatarImage, AvatarRoot } from "./avatar";
|
|
2
|
+
export type { AvatarFallbackProps, AvatarImageProps, AvatarProps, } from "./avatar";
|
|
3
|
+
export declare const Avatar: import("../system/utils").InternalForwardRefRenderFunction<"span", import("./avatar").AvatarProps, never> & {
|
|
4
|
+
Root: import("../system/utils").InternalForwardRefRenderFunction<"span", import("./avatar").AvatarProps, never>;
|
|
5
|
+
Image: import("../system/utils").InternalForwardRefRenderFunction<"img", import("./avatar").AvatarImageProps, never>;
|
|
6
|
+
Fallback: import("../system/utils").InternalForwardRefRenderFunction<"div", import("./avatar").AvatarFallbackProps, never>;
|
|
7
|
+
};
|
|
8
|
+
export { AvatarRoot, AvatarImage, AvatarFallback };
|
|
9
|
+
export { AvatarContext, useAvatarContext } from "./avatar-context";
|
|
10
|
+
export type { UseAvatarContextReturn } from "./avatar-context";
|
|
11
|
+
export { AvatarGroup } from "./avatar-group";
|
|
12
|
+
export type { AvatarGroupProps } from "./avatar-group";
|
|
13
|
+
export { AvatarGroupProvider, useAvatarGroup } from "./avatar-group-context";
|
|
14
|
+
export type { UseAvatarGroupContextReturn, UseAvatarGroupProps, } from "./avatar-group-context";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/avatar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAElE,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GACZ,MAAM,UAAU,CAAA;AAEjB,eAAO,MAAM,MAAM;;;;CAIjB,CAAA;AAGF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA;AAGlD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAClE,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGtD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5E,YAAY,EACV,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/avatar/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,SAAU,MAAM,qBAAc,MAU7D,CAAA"}
|
|
@@ -2,5 +2,5 @@ import type { CheckboxProps } from "./checkbox";
|
|
|
2
2
|
export interface UseProvideCheckboxGroupStylesReturn {
|
|
3
3
|
size: CheckboxProps["size"];
|
|
4
4
|
}
|
|
5
|
-
export declare const CheckboxGroupStyleContext: import("react").Context<UseProvideCheckboxGroupStylesReturn>, useCheckboxGroupStyleContext: () => UseProvideCheckboxGroupStylesReturn;
|
|
5
|
+
export declare const CheckboxGroupStyleContext: import("react").Context<UseProvideCheckboxGroupStylesReturn | undefined>, useCheckboxGroupStyleContext: () => UseProvideCheckboxGroupStylesReturn | undefined;
|
|
6
6
|
//# sourceMappingURL=checkbox-group-style-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-group-style-context.d.ts","sourceRoot":"","sources":["../../../src/checkbox/checkbox-group-style-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG/C,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED,eAAO,MAAO,yBAAyB,
|
|
1
|
+
{"version":3,"file":"checkbox-group-style-context.d.ts","sourceRoot":"","sources":["../../../src/checkbox/checkbox-group-style-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG/C,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED,eAAO,MAAO,yBAAyB,4EAAE,4BAA4B,uDAOjE,CAAA"}
|
package/dist/types/index.d.mts
CHANGED
package/dist/types/index.d.ts
CHANGED
|
@@ -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"}
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/menu/menu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,IAAI,iBAAiB,EAClC,SAAS,IAAI,aAAa,EAC1B,gBAAgB,IAAI,oBAAoB,EACxC,YAAY,EAEZ,cAAc,EACf,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAIL,WAAW,IAAI,eAAe,EAQ/B,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAS7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,eAAO,MAAO,kBAAkB,gEAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/menu/menu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,IAAI,iBAAiB,EAClC,SAAS,IAAI,aAAa,EAC1B,gBAAgB,IAAI,oBAAoB,EACxC,YAAY,EAEZ,cAAc,EACf,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAIL,WAAW,IAAI,eAAe,EAQ/B,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAS7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,eAAO,MAAO,kBAAkB,gEAAE,qBAAqB,2CAOrD,CAAA;AACF,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,gBAAgB;IACtE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;IACrC,UAAU,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAA;CAC9C;AA4CD,eAAO,MAAM,IAAI,GA1CE,CAAC,SAAS,MAAM,0EAY/B,MAAK,SA8BuC,CAAA;AAEhD,MAAM,WAAW,aACf,SAAQ,iBAAiB,EACvB,uBAAuB;IACzB,UAAU,CAAC,EAAE,cAAc,CAAC,oBAAoB,CAAC,CAAA;IACjD,qBAAqB,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAC9C,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAE5C;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC9B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC7B;AAED,eAAO,MAAM,QAAQ,kGA+HnB,CAAA;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,2CASlD;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,CACjC,SAAQ,oBAAoB,CAAC,CAAC,CAAC,EAC7B,uBAAuB;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;IACX,UAAU,CAAC,EAAE,cAAc,CAAC,uBAAuB,CAAC,CAAA;CACrD;AAwCD,eAAO,MAAM,WAAW,GAtCE,CAAC,SAAS,MAAM,8EAzMtC,MAAK,SA+OqD,CAAA;AAE9D,eAAO,MAAM,WAAW,wBAAkB,CAAA;AAC1C,eAAO,MAAM,cAAc,gEAC0xtD,MAAO,aAAa,wDADzxtD,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export interface CreateContextOptions<T = any> {
|
|
1
|
+
export interface CreateContextOptions<T = any, S extends boolean = true> {
|
|
2
2
|
/**
|
|
3
3
|
* If `true`, React will throw if context is `null` or `undefined`
|
|
4
4
|
* In some cases, you might want to support nested context, so you can set it to `false`
|
|
5
5
|
*/
|
|
6
|
-
strict?:
|
|
6
|
+
strict?: S;
|
|
7
7
|
/**
|
|
8
8
|
* Error message to throw if the context is `undefined`
|
|
9
9
|
*/
|
|
@@ -14,11 +14,11 @@ export interface CreateContextOptions<T = any> {
|
|
|
14
14
|
name?: string;
|
|
15
15
|
defaultValue?: T;
|
|
16
16
|
}
|
|
17
|
-
export type CreateContextReturn<T> = [React.Context<T>, () => T];
|
|
17
|
+
export type CreateContextReturn<T, S extends boolean> = S extends true ? [React.Context<T>, () => T] : [React.Context<T | undefined>, () => T | undefined];
|
|
18
18
|
/**
|
|
19
19
|
* Creates a named context, provider, and hook.
|
|
20
20
|
*
|
|
21
21
|
* @param options - create context options
|
|
22
22
|
*/
|
|
23
|
-
export declare function createContext<ContextType>(options?: CreateContextOptions<ContextType>): CreateContextReturn<ContextType>;
|
|
23
|
+
export declare function createContext<ContextType, S extends boolean = true>(options?: CreateContextOptions<ContextType, S>): CreateContextReturn<ContextType, S>;
|
|
24
24
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/system/react-utils/context.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,GAAG;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/system/react-utils/context.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,OAAO,GAAG,IAAI;IACrE;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,CAAA;IACV;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,YAAY,CAAC,EAAE,CAAC,CAAA;CACjB;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,IAAI,CAAC,SAAS,IAAI,GAClE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAA;AAEvD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,OAAO,GAAG,IAAI,EACjE,OAAO,GAAE,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAM,GACjD,mBAAmB,CAAC,WAAW,EAAE,CAAC,CAAC,CA2BrC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengovsg/oui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.31",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"type": "module",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"storybook": "10.1.2",
|
|
51
51
|
"tsx": "^4.21.0",
|
|
52
52
|
"typescript": "5.7.3",
|
|
53
|
-
"@opengovsg/oui-theme": "0.0.
|
|
53
|
+
"@opengovsg/oui-theme": "0.0.31",
|
|
54
54
|
"@oui/chromatic": "0.0.0",
|
|
55
55
|
"@oui/eslint-config": "0.0.0",
|
|
56
56
|
"@oui/prettier-config": "0.0.0",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"motion": ">=11.12.0 || >=12.0.0-alpha.1",
|
|
89
89
|
"react": ">= 18",
|
|
90
90
|
"react-aria-components": "^1.13.0",
|
|
91
|
-
"@opengovsg/oui-theme": "0.0.
|
|
91
|
+
"@opengovsg/oui-theme": "0.0.31"
|
|
92
92
|
},
|
|
93
93
|
"scripts": {
|
|
94
94
|
"build": "tsx ../../tooling/build-scripts/main.ts --dts --clean",
|