@teamturing/react-kit 1.4.0 → 2.0.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/dist/core/GradientText/index.d.ts +1 -1
- package/dist/core/Image/index.d.ts +7 -0
- package/dist/enigma/EnigmaUI/index.d.ts +6 -0
- package/dist/enigma/Layout/SingleColumnLayout/index.d.ts +8 -0
- package/dist/enigma/Layout/index.d.ts +1 -0
- package/dist/enigma/View/ImageView/index.d.ts +6 -0
- package/dist/enigma/View/TextView/index.d.ts +6 -0
- package/dist/enigma/View/index.d.ts +2 -0
- package/dist/enigma/types/index.d.ts +55 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +145 -8
- package/esm/core/IconToggleButton/index.js +1 -1
- package/esm/core/Image/index.js +11 -0
- package/esm/enigma/EnigmaUI/index.js +48 -0
- package/esm/enigma/Layout/SingleColumnLayout/index.js +29 -0
- package/esm/enigma/View/ImageView/index.js +13 -0
- package/esm/enigma/View/TextView/index.js +14 -0
- package/esm/hook/useMediaQuery.js +40 -0
- package/esm/index.js +2 -0
- package/esm/packages/token-studio/esm/foundation/breakpoint/device.js +7 -0
- package/esm/packages/token-studio/esm/token/breakpoints/index.js +6 -0
- package/esm/packages/token-studio/esm/token/color/index.js +8 -7
- package/package.json +3 -3
|
@@ -274,7 +274,7 @@ declare const GradientText: import("styled-components").IStyledComponent<"web",
|
|
|
274
274
|
onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
|
|
275
275
|
} & {
|
|
276
276
|
typography?: import("styled-system").ResponsiveValue<"s" | "m" | "xxs" | "xs" | "l" | "xl" | "xxl" | "display1" | "display2" | "display3" | "display4" | "xxl/regular" | "xxl/bold" | "xl/regular" | "xl/bold" | "l/regular" | "l/bold" | "m/regular" | "m/bold" | "s/regular" | "s/bold" | "xs/regular" | "xs/bold" | "xxs/regular" | "xxs/bold"> | undefined;
|
|
277
|
-
} & import("../../utils/styled-system").SxProp & import("../../utils/styled-system").WordBreakProps & import("../../utils/styled-system").WhiteSpaceProps & import("../../utils/styled-system").TextDecorationProps & import("styled-system").FontSizeProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, "s" | "m" | "xxs" | "xs" | "l" | "xl" | "xxl" | "display1" | "display2" | "display3" | "display4"> & import("styled-system").FontWeightProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, "bold" | "medium" | "regular"> & import("styled-system").LineHeightProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, 2 | 1> & import("styled-system").TextAlignProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & import("styled-system").ColorProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, "link" | "icon/neutral" | "scale/violet/0" | "scale/violet/1" | "scale/violet/2" | "scale/violet/3" | "scale/violet/4" | "scale/violet/5" | "scale/violet/6" | "scale/violet/7" | "scale/violet/8" | "scale/violet/9" | "dim" | "link/hovered" | "link/pressed" | "link/neutral" | "link/neutral/hovered" | "link/neutral/pressed" | "link/neutral/bold" | "link/neutral/bold/hovered" | "link/neutral/bold/pressed" | "link/disabled" | "icon/neutral/bold" | "icon/neutral/bolder" | "icon/accent/gray" | "icon/accent/blue" | "icon/accent/blue/bold" | "icon/accent/green" | "icon/accent/yellow" | "icon/accent/red" | "icon/inverse" | "icon/disabled" | "icon/disabled/subtler" | "icon/selected/
|
|
277
|
+
} & import("../../utils/styled-system").SxProp & import("../../utils/styled-system").WordBreakProps & import("../../utils/styled-system").WhiteSpaceProps & import("../../utils/styled-system").TextDecorationProps & import("styled-system").FontSizeProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, "s" | "m" | "xxs" | "xs" | "l" | "xl" | "xxl" | "display1" | "display2" | "display3" | "display4"> & import("styled-system").FontWeightProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, "bold" | "medium" | "regular"> & import("styled-system").LineHeightProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, 2 | 1> & import("styled-system").TextAlignProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> & import("styled-system").ColorProps<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>, "link" | "icon/neutral" | "scale/violet/0" | "scale/violet/1" | "scale/violet/2" | "scale/violet/3" | "scale/violet/4" | "scale/violet/5" | "scale/violet/6" | "scale/violet/7" | "scale/violet/8" | "scale/violet/9" | "dim" | "link/hovered" | "link/pressed" | "link/neutral" | "link/neutral/hovered" | "link/neutral/pressed" | "link/neutral/bold" | "link/neutral/bold/hovered" | "link/neutral/bold/pressed" | "link/disabled" | "icon/neutral/bold" | "icon/neutral/bolder" | "icon/accent/gray" | "icon/accent/blue" | "icon/accent/blue/bold" | "icon/accent/green" | "icon/accent/yellow" | "icon/accent/red" | "icon/inverse" | "icon/disabled" | "icon/disabled/subtler" | "icon/selected/violet" | "icon/selected" | "icon/primary/subtle" | "icon/primary" | "icon/primary/bold" | "icon/success" | "icon/warning" | "icon/danger" | "border/neutral/subtle" | "border/neutral" | "border/neutral/bolder" | "border/input" | "border/inverse" | "border/selected" | "border/disabled" | "border/primary" | "border/hovered" | "border/focused" | "border/danger" | "border/success" | "bg/secondary" | "bg/secondary/hovered" | "bg/secondary/pressed" | "bg/primary" | "bg/primary/hovered" | "bg/primary/pressed" | "bg/neutral/subtler" | "bg/neutral/subtler/hovered" | "bg/neutral/subtler/pressed" | "bg/neutral/subtle" | "bg/neutral/subtle/hovered" | "bg/neutral/subtle/pressed" | "bg/neutral" | "bg/neutral/hovered" | "bg/neutral/pressed" | "bg/neutral/bold" | "bg/neutral/bold/hovered" | "bg/neutral/bold/pressed" | "bg/neutral/bolder" | "bg/neutral/bolder/hovered" | "bg/neutral/bolder/pressed" | "bg/disabled" | "bg/disabled/subtlest" | "bg/input" | "bg/accent/blue/subtlest" | "bg/accent/green/subtlest" | "bg/accent/yellow/subtlest" | "bg/accent/red/subtlest" | "bg/accent/red/subtle" | "bg/accent/red" | "bg/accent/gray/subtlest" | "bg/selected/violet" | "bg/selected" | "bg/selected/subtle" | "bg/inverse" | "bg/inverse/subtlest" | "bg/success" | "bg/success/bold" | "bg/warning" | "bg/warning/bold" | "bg/danger" | "bg/danger/bold" | "bg/danger/bold/hovered" | "bg/danger/bold/pressed" | "text/primary" | "text/accent/blue" | "text/accent/green" | "text/accent/yellow" | "text/accent/red" | "text/neutral/subtlest" | "text/neutral/subtler" | "text/neutral/subtle" | "text/neutral" | "text/inverse" | "text/inverse/subtle" | "text/inverse/subtler" | "text/disabled" | "text/success" | "text/warning" | "text/danger" | "text/selected">, "ref"> & {
|
|
278
278
|
ref?: ((instance: HTMLSpanElement | null) => void) | import("react").RefObject<HTMLSpanElement> | null | undefined;
|
|
279
279
|
}, Props>>;
|
|
280
280
|
export default GradientText;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { LayoutProps } from 'styled-system';
|
|
3
|
+
import { SxProp } from '../../utils/styled-system';
|
|
4
|
+
type Props = {} & SxProp & LayoutProps;
|
|
5
|
+
declare const Image: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, Props>>;
|
|
6
|
+
export default Image;
|
|
7
|
+
export type { Props as ImageProps };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SingleColumnLayout as SingleColumnLayoutType } from '../../types';
|
|
2
|
+
type Props = {
|
|
3
|
+
layout: SingleColumnLayoutType;
|
|
4
|
+
viewsObject: any;
|
|
5
|
+
viewComponentsObject: any;
|
|
6
|
+
};
|
|
7
|
+
declare const SingleColumnLayout: ({ layout, viewsObject, viewComponentsObject }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default SingleColumnLayout;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as SingleColumnLayout } from './SingleColumnLayout';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default Types
|
|
3
|
+
*/
|
|
4
|
+
type TextProps = any;
|
|
5
|
+
type SpaceProps = any;
|
|
6
|
+
/**
|
|
7
|
+
* View Related Model
|
|
8
|
+
*/
|
|
9
|
+
export type TextView = {
|
|
10
|
+
text: string;
|
|
11
|
+
textProps?: TextProps;
|
|
12
|
+
};
|
|
13
|
+
export type ImageView = {
|
|
14
|
+
src: string;
|
|
15
|
+
alt: string;
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
};
|
|
19
|
+
export type View = TextView | ImageView;
|
|
20
|
+
export type ViewComponentType = 'TextView' | 'ImageView';
|
|
21
|
+
export interface IViewContainer {
|
|
22
|
+
id: string;
|
|
23
|
+
viewComponentType: ViewComponentType;
|
|
24
|
+
view: View;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Layout Related Model
|
|
28
|
+
*/
|
|
29
|
+
export interface IViewContainerDetail {
|
|
30
|
+
viewContainerId: string;
|
|
31
|
+
spaceProps: SpaceProps;
|
|
32
|
+
}
|
|
33
|
+
export type SingleColumnLayout = {
|
|
34
|
+
main: IViewContainerDetail[];
|
|
35
|
+
};
|
|
36
|
+
export type Layout = SingleColumnLayout;
|
|
37
|
+
export type LayoutComponentType = 'SingleColumnLayout';
|
|
38
|
+
export interface ILayoutContainer {
|
|
39
|
+
layoutComponentType: LayoutComponentType;
|
|
40
|
+
layout: Layout;
|
|
41
|
+
}
|
|
42
|
+
export interface IResponsiveLayoutContainer {
|
|
43
|
+
mobile: ILayoutContainer;
|
|
44
|
+
tablet?: ILayoutContainer;
|
|
45
|
+
desktop?: ILayoutContainer;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Section Related Model
|
|
49
|
+
*/
|
|
50
|
+
export interface ISection {
|
|
51
|
+
id: string;
|
|
52
|
+
views: IViewContainer[];
|
|
53
|
+
responsiveLayout: IResponsiveLayoutContainer;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* core components
|
|
3
|
+
*/
|
|
1
4
|
export { default as Button } from './core/Button';
|
|
2
5
|
export type { ButtonProps } from './core/Button';
|
|
3
6
|
export { default as Chip } from './core/Chip';
|
|
@@ -10,6 +13,8 @@ export { default as IconButton } from './core/IconButton';
|
|
|
10
13
|
export type { IconButtonProps } from './core/IconButton';
|
|
11
14
|
export { default as IconToggleButton } from './core/IconToggleButton';
|
|
12
15
|
export type { IconToggleButtonProps } from './core/IconToggleButton';
|
|
16
|
+
export { default as Image } from './core/Image';
|
|
17
|
+
export type { ImageProps } from './core/Image';
|
|
13
18
|
export { default as ItemList } from './core/ItemList';
|
|
14
19
|
export type { ItemListProps } from './core/ItemList';
|
|
15
20
|
export { default as Space } from './core/Space';
|
|
@@ -26,6 +31,13 @@ export { default as View } from './core/View';
|
|
|
26
31
|
export type { ViewProps } from './core/View';
|
|
27
32
|
export { default as UnstyledButton } from './core/_UnstyledButton';
|
|
28
33
|
export type { UnstyledButtonProps } from './core/_UnstyledButton';
|
|
34
|
+
/**
|
|
35
|
+
* enigma component
|
|
36
|
+
*/
|
|
37
|
+
export { default as EnigmaUI } from './enigma/EnigmaUI';
|
|
38
|
+
/**
|
|
39
|
+
* hooks
|
|
40
|
+
*/
|
|
29
41
|
export { default as useDevice } from './hook/useDevice';
|
|
30
42
|
export { default as useOutsideClick } from './hook/useOutsideClick';
|
|
31
43
|
export { default as useProvidedOrCreatedRef } from './hook/useProvidedOrCreatedRef';
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,15 @@ function _interopNamespace(e) {
|
|
|
26
26
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
27
27
|
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
28
28
|
|
|
29
|
+
const device = {
|
|
30
|
+
deviceDesktop: 1280,
|
|
31
|
+
deviceTablet: 900,
|
|
32
|
+
deviceMobile: 640
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const baseBreakpoints = [device.deviceMobile, device.deviceTablet, device.deviceDesktop];
|
|
36
|
+
const breakpoints = baseBreakpoints.map(value => `${value + 1}px`);
|
|
37
|
+
|
|
29
38
|
const gray = {
|
|
30
39
|
gray50: '#F9FAFB',
|
|
31
40
|
gray100: '#F3F4F6',
|
|
@@ -132,7 +141,7 @@ const textColor = {
|
|
|
132
141
|
'text/success': palette.green500,
|
|
133
142
|
'text/warning': palette.yellow500,
|
|
134
143
|
'text/danger': palette.red500,
|
|
135
|
-
'text/selected
|
|
144
|
+
'text/selected': palette.gray900
|
|
136
145
|
};
|
|
137
146
|
const bgColor = {
|
|
138
147
|
'bg/secondary': palette.violet50,
|
|
@@ -159,16 +168,16 @@ const bgColor = {
|
|
|
159
168
|
'bg/disabled': palette.gray100,
|
|
160
169
|
'bg/disabled/subtlest': palette.transparent,
|
|
161
170
|
'bg/input': palette.white,
|
|
171
|
+
'bg/accent/blue/subtlest': palette.blue50,
|
|
162
172
|
'bg/accent/green/subtlest': palette.green50,
|
|
163
173
|
'bg/accent/yellow/subtlest': palette.yellow50,
|
|
164
174
|
'bg/accent/red/subtlest': palette.red50,
|
|
165
175
|
'bg/accent/red/subtle': palette.red400,
|
|
166
176
|
'bg/accent/red': palette.red500,
|
|
167
177
|
'bg/accent/gray/subtlest': palette.gray200,
|
|
168
|
-
'bg/accent/blue/subtlest': palette.blue50,
|
|
169
178
|
'bg/selected/violet': palette.violet500,
|
|
170
|
-
'bg/selected
|
|
171
|
-
'bg/selected/
|
|
179
|
+
'bg/selected': palette.gray900,
|
|
180
|
+
'bg/selected/subtle': palette.gray100,
|
|
172
181
|
'bg/inverse': palette.black,
|
|
173
182
|
'bg/inverse/subtlest': palette.white10A,
|
|
174
183
|
'bg/success': palette.green50,
|
|
@@ -186,6 +195,7 @@ const borderColor = {
|
|
|
186
195
|
'border/neutral/bolder': palette.gray300,
|
|
187
196
|
'border/input': palette.gray200,
|
|
188
197
|
'border/inverse': palette.white10A,
|
|
198
|
+
'border/selected': palette.gray900,
|
|
189
199
|
'border/disabled': palette.gray100,
|
|
190
200
|
'border/primary': palette.violet500,
|
|
191
201
|
'border/hovered': palette.blue300,
|
|
@@ -206,10 +216,10 @@ const iconColor = {
|
|
|
206
216
|
'icon/inverse': palette.white,
|
|
207
217
|
'icon/disabled': palette.gray300,
|
|
208
218
|
'icon/disabled/subtler': palette.gray200,
|
|
209
|
-
'icon/selected/
|
|
210
|
-
'icon/selected
|
|
211
|
-
'icon/primary': palette.violet500,
|
|
219
|
+
'icon/selected/violet': palette.violet500,
|
|
220
|
+
'icon/selected': palette.gray900,
|
|
212
221
|
'icon/primary/subtle': palette.violet300,
|
|
222
|
+
'icon/primary': palette.violet500,
|
|
213
223
|
'icon/primary/bold': palette.violet700,
|
|
214
224
|
'icon/success': palette.green500,
|
|
215
225
|
'icon/warning': palette.yellow500,
|
|
@@ -3837,7 +3847,7 @@ const BaseIconToggleButton = styled__default.default(UnstyledButton)(({
|
|
|
3837
3847
|
plain: {
|
|
3838
3848
|
backgroundColor: color$1['bg/neutral/subtler'],
|
|
3839
3849
|
...(selected ? {
|
|
3840
|
-
color: color$1['icon/selected/
|
|
3850
|
+
color: color$1['icon/selected/violet']
|
|
3841
3851
|
} : {
|
|
3842
3852
|
color: color$1['icon/neutral']
|
|
3843
3853
|
}),
|
|
@@ -3849,6 +3859,11 @@ const BaseIconToggleButton = styled__default.default(UnstyledButton)(({
|
|
|
3849
3859
|
}
|
|
3850
3860
|
}), sx);
|
|
3851
3861
|
|
|
3862
|
+
const Image = styled__default.default.img`
|
|
3863
|
+
${layout}
|
|
3864
|
+
${sx}
|
|
3865
|
+
`;
|
|
3866
|
+
|
|
3852
3867
|
const ItemList = ({
|
|
3853
3868
|
items,
|
|
3854
3869
|
renderItem,
|
|
@@ -3937,6 +3952,126 @@ const StyledIcon = ({
|
|
|
3937
3952
|
children: /*#__PURE__*/jsxRuntimeExports.jsx(Icon, {})
|
|
3938
3953
|
});
|
|
3939
3954
|
|
|
3955
|
+
const useMediaQuery = query => {
|
|
3956
|
+
const getMatches = query => {
|
|
3957
|
+
/**
|
|
3958
|
+
* SSR 문제를 방지하기 위해 있습니다.
|
|
3959
|
+
*/
|
|
3960
|
+
if (typeof window !== 'undefined') {
|
|
3961
|
+
return window.matchMedia(query).matches;
|
|
3962
|
+
}
|
|
3963
|
+
return false;
|
|
3964
|
+
};
|
|
3965
|
+
const [matches, setMatches] = React.useState(getMatches(query));
|
|
3966
|
+
function handleChange() {
|
|
3967
|
+
setMatches(getMatches(query));
|
|
3968
|
+
}
|
|
3969
|
+
React.useEffect(() => {
|
|
3970
|
+
const matchMedia = window.matchMedia(query);
|
|
3971
|
+
|
|
3972
|
+
/**
|
|
3973
|
+
* 클라이언트에서 mediaQuery를 반영하기 위해 로드됩니다.
|
|
3974
|
+
*/
|
|
3975
|
+
handleChange();
|
|
3976
|
+
if (matchMedia.addListener) {
|
|
3977
|
+
matchMedia.addListener(handleChange);
|
|
3978
|
+
} else {
|
|
3979
|
+
matchMedia.addEventListener('change', handleChange);
|
|
3980
|
+
}
|
|
3981
|
+
return () => {
|
|
3982
|
+
if (matchMedia.removeListener) {
|
|
3983
|
+
matchMedia.removeListener(handleChange);
|
|
3984
|
+
} else {
|
|
3985
|
+
matchMedia.removeEventListener('change', handleChange);
|
|
3986
|
+
}
|
|
3987
|
+
};
|
|
3988
|
+
}, [query]);
|
|
3989
|
+
return matches;
|
|
3990
|
+
};
|
|
3991
|
+
|
|
3992
|
+
const SingleColumnLayout = ({
|
|
3993
|
+
layout,
|
|
3994
|
+
viewsObject,
|
|
3995
|
+
viewComponentsObject
|
|
3996
|
+
}) => /*#__PURE__*/jsxRuntimeExports.jsx(ItemList, {
|
|
3997
|
+
items: layout.main,
|
|
3998
|
+
renderItem: ({
|
|
3999
|
+
viewContainerId
|
|
4000
|
+
}) => {
|
|
4001
|
+
const view = viewsObject[viewContainerId];
|
|
4002
|
+
const ViewComponent = viewComponentsObject[viewContainerId];
|
|
4003
|
+
return ViewComponent ? /*#__PURE__*/jsxRuntimeExports.jsx(ViewComponent, {
|
|
4004
|
+
view: view
|
|
4005
|
+
}) : null;
|
|
4006
|
+
},
|
|
4007
|
+
renderItemWrapper: (children, {
|
|
4008
|
+
viewContainerId,
|
|
4009
|
+
spaceProps
|
|
4010
|
+
}, i) => /*#__PURE__*/jsxRuntimeExports.jsx(Space, {
|
|
4011
|
+
...spaceProps,
|
|
4012
|
+
children: children
|
|
4013
|
+
}, [viewContainerId, `${i}`].join('-'))
|
|
4014
|
+
});
|
|
4015
|
+
|
|
4016
|
+
const ImageView = ({
|
|
4017
|
+
view: {
|
|
4018
|
+
...props
|
|
4019
|
+
}
|
|
4020
|
+
}) => /*#__PURE__*/jsxRuntimeExports.jsx(Image, {
|
|
4021
|
+
loading: 'lazy',
|
|
4022
|
+
...props
|
|
4023
|
+
});
|
|
4024
|
+
|
|
4025
|
+
const TextView = ({
|
|
4026
|
+
view: {
|
|
4027
|
+
text,
|
|
4028
|
+
textProps
|
|
4029
|
+
}
|
|
4030
|
+
}) => /*#__PURE__*/jsxRuntimeExports.jsx(Text, {
|
|
4031
|
+
...textProps,
|
|
4032
|
+
children: text
|
|
4033
|
+
});
|
|
4034
|
+
|
|
4035
|
+
const EnigmaUI = ({
|
|
4036
|
+
section: {
|
|
4037
|
+
views,
|
|
4038
|
+
responsiveLayout
|
|
4039
|
+
}
|
|
4040
|
+
}) => {
|
|
4041
|
+
const isMatchDesktop = useMediaQuery(`screen and (min-width: ${breakpoints[1]})`);
|
|
4042
|
+
const isMatchTablet = useMediaQuery(`screen and (min-width: ${breakpoints[0]})`);
|
|
4043
|
+
const media = isMatchDesktop ? 'desktop' : !isMatchDesktop && isMatchTablet ? 'tablet' : 'mobile';
|
|
4044
|
+
const layoutContainer = responsiveLayout[media] || responsiveLayout['desktop'] || responsiveLayout['tablet'] || responsiveLayout['mobile'];
|
|
4045
|
+
const LayoutComponent = getLayoutComponent(layoutContainer);
|
|
4046
|
+
const layout = layoutContainer.layout;
|
|
4047
|
+
const viewsObject = Object.fromEntries(views.map(viewContainer => {
|
|
4048
|
+
return [viewContainer.id, viewContainer.view];
|
|
4049
|
+
}));
|
|
4050
|
+
const viewComponentsObject = Object.fromEntries(views.map(view => {
|
|
4051
|
+
return [view.id, getViewComponent(view)];
|
|
4052
|
+
}));
|
|
4053
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(LayoutComponent, {
|
|
4054
|
+
layout: layout,
|
|
4055
|
+
viewsObject: viewsObject,
|
|
4056
|
+
viewComponentsObject: viewComponentsObject
|
|
4057
|
+
});
|
|
4058
|
+
};
|
|
4059
|
+
const getLayoutComponent = layoutContainer => {
|
|
4060
|
+
const renderableLayoutComponent = {
|
|
4061
|
+
SingleColumnLayout: SingleColumnLayout
|
|
4062
|
+
};
|
|
4063
|
+
const LayoutComponent = renderableLayoutComponent[layoutContainer.layoutComponentType];
|
|
4064
|
+
return LayoutComponent;
|
|
4065
|
+
};
|
|
4066
|
+
const getViewComponent = viewContainer => {
|
|
4067
|
+
const renderableViewComponent = {
|
|
4068
|
+
TextView: TextView,
|
|
4069
|
+
ImageView: ImageView
|
|
4070
|
+
};
|
|
4071
|
+
const ViewComponent = renderableViewComponent[viewContainer.viewComponentType];
|
|
4072
|
+
return ViewComponent;
|
|
4073
|
+
};
|
|
4074
|
+
|
|
3940
4075
|
/**
|
|
3941
4076
|
* lodash (Custom Build) <https://lodash.com/>
|
|
3942
4077
|
* Build: `lodash modularize exports="npm" -o ./`
|
|
@@ -4441,10 +4576,12 @@ const useToggleHandler = ({
|
|
|
4441
4576
|
|
|
4442
4577
|
exports.Button = Button;
|
|
4443
4578
|
exports.Chip = Chip;
|
|
4579
|
+
exports.EnigmaUI = EnigmaUI;
|
|
4444
4580
|
exports.GradientText = GradientText;
|
|
4445
4581
|
exports.Grid = index$1;
|
|
4446
4582
|
exports.IconButton = IconButton;
|
|
4447
4583
|
exports.IconToggleButton = IconToggleButton;
|
|
4584
|
+
exports.Image = Image;
|
|
4448
4585
|
exports.ItemList = ItemList;
|
|
4449
4586
|
exports.Space = Space;
|
|
4450
4587
|
exports.Spinner = Spinner;
|
|
@@ -92,7 +92,7 @@ const BaseIconToggleButton = styled(UnstyledButton)(({
|
|
|
92
92
|
plain: {
|
|
93
93
|
backgroundColor: color['bg/neutral/subtler'],
|
|
94
94
|
...(selected ? {
|
|
95
|
-
color: color['icon/selected/
|
|
95
|
+
color: color['icon/selected/violet']
|
|
96
96
|
} : {
|
|
97
97
|
color: color['icon/neutral']
|
|
98
98
|
}),
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
import '../../node_modules/styled-system/dist/index.esm.js';
|
|
3
|
+
import { sx } from '../../utils/styled-system/index.js';
|
|
4
|
+
import { layout } from '../../node_modules/@styled-system/layout/dist/index.esm.js';
|
|
5
|
+
|
|
6
|
+
const Image = styled.img`
|
|
7
|
+
${layout}
|
|
8
|
+
${sx}
|
|
9
|
+
`;
|
|
10
|
+
|
|
11
|
+
export { Image as default };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import breakpoints from '../../packages/token-studio/esm/token/breakpoints/index.js';
|
|
2
|
+
import useMediaQuery from '../../hook/useMediaQuery.js';
|
|
3
|
+
import SingleColumnLayout from '../Layout/SingleColumnLayout/index.js';
|
|
4
|
+
import ImageView from '../View/ImageView/index.js';
|
|
5
|
+
import TextView from '../View/TextView/index.js';
|
|
6
|
+
import { j as jsxRuntimeExports } from '../../node_modules/react/jsx-runtime.js';
|
|
7
|
+
|
|
8
|
+
const EnigmaUI = ({
|
|
9
|
+
section: {
|
|
10
|
+
views,
|
|
11
|
+
responsiveLayout
|
|
12
|
+
}
|
|
13
|
+
}) => {
|
|
14
|
+
const isMatchDesktop = useMediaQuery(`screen and (min-width: ${breakpoints[1]})`);
|
|
15
|
+
const isMatchTablet = useMediaQuery(`screen and (min-width: ${breakpoints[0]})`);
|
|
16
|
+
const media = isMatchDesktop ? 'desktop' : !isMatchDesktop && isMatchTablet ? 'tablet' : 'mobile';
|
|
17
|
+
const layoutContainer = responsiveLayout[media] || responsiveLayout['desktop'] || responsiveLayout['tablet'] || responsiveLayout['mobile'];
|
|
18
|
+
const LayoutComponent = getLayoutComponent(layoutContainer);
|
|
19
|
+
const layout = layoutContainer.layout;
|
|
20
|
+
const viewsObject = Object.fromEntries(views.map(viewContainer => {
|
|
21
|
+
return [viewContainer.id, viewContainer.view];
|
|
22
|
+
}));
|
|
23
|
+
const viewComponentsObject = Object.fromEntries(views.map(view => {
|
|
24
|
+
return [view.id, getViewComponent(view)];
|
|
25
|
+
}));
|
|
26
|
+
return /*#__PURE__*/jsxRuntimeExports.jsx(LayoutComponent, {
|
|
27
|
+
layout: layout,
|
|
28
|
+
viewsObject: viewsObject,
|
|
29
|
+
viewComponentsObject: viewComponentsObject
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
const getLayoutComponent = layoutContainer => {
|
|
33
|
+
const renderableLayoutComponent = {
|
|
34
|
+
SingleColumnLayout: SingleColumnLayout
|
|
35
|
+
};
|
|
36
|
+
const LayoutComponent = renderableLayoutComponent[layoutContainer.layoutComponentType];
|
|
37
|
+
return LayoutComponent;
|
|
38
|
+
};
|
|
39
|
+
const getViewComponent = viewContainer => {
|
|
40
|
+
const renderableViewComponent = {
|
|
41
|
+
TextView: TextView,
|
|
42
|
+
ImageView: ImageView
|
|
43
|
+
};
|
|
44
|
+
const ViewComponent = renderableViewComponent[viewContainer.viewComponentType];
|
|
45
|
+
return ViewComponent;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export { EnigmaUI as default };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ItemList from '../../../core/ItemList/index.js';
|
|
2
|
+
import Space from '../../../core/Space/index.js';
|
|
3
|
+
import { j as jsxRuntimeExports } from '../../../node_modules/react/jsx-runtime.js';
|
|
4
|
+
|
|
5
|
+
const SingleColumnLayout = ({
|
|
6
|
+
layout,
|
|
7
|
+
viewsObject,
|
|
8
|
+
viewComponentsObject
|
|
9
|
+
}) => /*#__PURE__*/jsxRuntimeExports.jsx(ItemList, {
|
|
10
|
+
items: layout.main,
|
|
11
|
+
renderItem: ({
|
|
12
|
+
viewContainerId
|
|
13
|
+
}) => {
|
|
14
|
+
const view = viewsObject[viewContainerId];
|
|
15
|
+
const ViewComponent = viewComponentsObject[viewContainerId];
|
|
16
|
+
return ViewComponent ? /*#__PURE__*/jsxRuntimeExports.jsx(ViewComponent, {
|
|
17
|
+
view: view
|
|
18
|
+
}) : null;
|
|
19
|
+
},
|
|
20
|
+
renderItemWrapper: (children, {
|
|
21
|
+
viewContainerId,
|
|
22
|
+
spaceProps
|
|
23
|
+
}, i) => /*#__PURE__*/jsxRuntimeExports.jsx(Space, {
|
|
24
|
+
...spaceProps,
|
|
25
|
+
children: children
|
|
26
|
+
}, [viewContainerId, `${i}`].join('-'))
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export { SingleColumnLayout as default };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Image from '../../../core/Image/index.js';
|
|
2
|
+
import { j as jsxRuntimeExports } from '../../../node_modules/react/jsx-runtime.js';
|
|
3
|
+
|
|
4
|
+
const ImageView = ({
|
|
5
|
+
view: {
|
|
6
|
+
...props
|
|
7
|
+
}
|
|
8
|
+
}) => /*#__PURE__*/jsxRuntimeExports.jsx(Image, {
|
|
9
|
+
loading: 'lazy',
|
|
10
|
+
...props
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export { ImageView as default };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Text from '../../../core/Text/index.js';
|
|
2
|
+
import { j as jsxRuntimeExports } from '../../../node_modules/react/jsx-runtime.js';
|
|
3
|
+
|
|
4
|
+
const TextView = ({
|
|
5
|
+
view: {
|
|
6
|
+
text,
|
|
7
|
+
textProps
|
|
8
|
+
}
|
|
9
|
+
}) => /*#__PURE__*/jsxRuntimeExports.jsx(Text, {
|
|
10
|
+
...textProps,
|
|
11
|
+
children: text
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export { TextView as default };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const useMediaQuery = query => {
|
|
4
|
+
const getMatches = query => {
|
|
5
|
+
/**
|
|
6
|
+
* SSR 문제를 방지하기 위해 있습니다.
|
|
7
|
+
*/
|
|
8
|
+
if (typeof window !== 'undefined') {
|
|
9
|
+
return window.matchMedia(query).matches;
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
};
|
|
13
|
+
const [matches, setMatches] = useState(getMatches(query));
|
|
14
|
+
function handleChange() {
|
|
15
|
+
setMatches(getMatches(query));
|
|
16
|
+
}
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const matchMedia = window.matchMedia(query);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 클라이언트에서 mediaQuery를 반영하기 위해 로드됩니다.
|
|
22
|
+
*/
|
|
23
|
+
handleChange();
|
|
24
|
+
if (matchMedia.addListener) {
|
|
25
|
+
matchMedia.addListener(handleChange);
|
|
26
|
+
} else {
|
|
27
|
+
matchMedia.addEventListener('change', handleChange);
|
|
28
|
+
}
|
|
29
|
+
return () => {
|
|
30
|
+
if (matchMedia.removeListener) {
|
|
31
|
+
matchMedia.removeListener(handleChange);
|
|
32
|
+
} else {
|
|
33
|
+
matchMedia.removeEventListener('change', handleChange);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}, [query]);
|
|
37
|
+
return matches;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { useMediaQuery as default };
|
package/esm/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { default as GradientText } from './core/GradientText/index.js';
|
|
|
4
4
|
export { default as Grid } from './core/Grid/index.js';
|
|
5
5
|
export { default as IconButton } from './core/IconButton/index.js';
|
|
6
6
|
export { default as IconToggleButton } from './core/IconToggleButton/index.js';
|
|
7
|
+
export { default as Image } from './core/Image/index.js';
|
|
7
8
|
export { default as ItemList } from './core/ItemList/index.js';
|
|
8
9
|
export { default as Space } from './core/Space/index.js';
|
|
9
10
|
export { default as Spinner } from './core/Spinner/index.js';
|
|
@@ -12,6 +13,7 @@ export { default as StyledIcon } from './core/StyledIcon/index.js';
|
|
|
12
13
|
export { default as Text } from './core/Text/index.js';
|
|
13
14
|
export { default as View } from './core/View/index.js';
|
|
14
15
|
export { default as UnstyledButton } from './core/_UnstyledButton.js';
|
|
16
|
+
export { default as EnigmaUI } from './enigma/EnigmaUI/index.js';
|
|
15
17
|
export { default as useDevice } from './hook/useDevice.js';
|
|
16
18
|
export { default as useOutsideClick } from './hook/useOutsideClick.js';
|
|
17
19
|
export { default as useProvidedOrCreatedRef } from './hook/useProvidedOrCreatedRef.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import device from '../../foundation/breakpoint/device.js';
|
|
2
|
+
|
|
3
|
+
const baseBreakpoints = [device.deviceMobile, device.deviceTablet, device.deviceDesktop];
|
|
4
|
+
const breakpoints = baseBreakpoints.map(value => `${value + 1}px`);
|
|
5
|
+
|
|
6
|
+
export { baseBreakpoints, breakpoints as default };
|
|
@@ -17,7 +17,7 @@ const textColor = {
|
|
|
17
17
|
'text/success': palette.green500,
|
|
18
18
|
'text/warning': palette.yellow500,
|
|
19
19
|
'text/danger': palette.red500,
|
|
20
|
-
'text/selected
|
|
20
|
+
'text/selected': palette.gray900
|
|
21
21
|
};
|
|
22
22
|
const bgColor = {
|
|
23
23
|
'bg/secondary': palette.violet50,
|
|
@@ -44,16 +44,16 @@ const bgColor = {
|
|
|
44
44
|
'bg/disabled': palette.gray100,
|
|
45
45
|
'bg/disabled/subtlest': palette.transparent,
|
|
46
46
|
'bg/input': palette.white,
|
|
47
|
+
'bg/accent/blue/subtlest': palette.blue50,
|
|
47
48
|
'bg/accent/green/subtlest': palette.green50,
|
|
48
49
|
'bg/accent/yellow/subtlest': palette.yellow50,
|
|
49
50
|
'bg/accent/red/subtlest': palette.red50,
|
|
50
51
|
'bg/accent/red/subtle': palette.red400,
|
|
51
52
|
'bg/accent/red': palette.red500,
|
|
52
53
|
'bg/accent/gray/subtlest': palette.gray200,
|
|
53
|
-
'bg/accent/blue/subtlest': palette.blue50,
|
|
54
54
|
'bg/selected/violet': palette.violet500,
|
|
55
|
-
'bg/selected
|
|
56
|
-
'bg/selected/
|
|
55
|
+
'bg/selected': palette.gray900,
|
|
56
|
+
'bg/selected/subtle': palette.gray100,
|
|
57
57
|
'bg/inverse': palette.black,
|
|
58
58
|
'bg/inverse/subtlest': palette.white10A,
|
|
59
59
|
'bg/success': palette.green50,
|
|
@@ -71,6 +71,7 @@ const borderColor = {
|
|
|
71
71
|
'border/neutral/bolder': palette.gray300,
|
|
72
72
|
'border/input': palette.gray200,
|
|
73
73
|
'border/inverse': palette.white10A,
|
|
74
|
+
'border/selected': palette.gray900,
|
|
74
75
|
'border/disabled': palette.gray100,
|
|
75
76
|
'border/primary': palette.violet500,
|
|
76
77
|
'border/hovered': palette.blue300,
|
|
@@ -91,10 +92,10 @@ const iconColor = {
|
|
|
91
92
|
'icon/inverse': palette.white,
|
|
92
93
|
'icon/disabled': palette.gray300,
|
|
93
94
|
'icon/disabled/subtler': palette.gray200,
|
|
94
|
-
'icon/selected/
|
|
95
|
-
'icon/selected
|
|
96
|
-
'icon/primary': palette.violet500,
|
|
95
|
+
'icon/selected/violet': palette.violet500,
|
|
96
|
+
'icon/selected': palette.gray900,
|
|
97
97
|
'icon/primary/subtle': palette.violet300,
|
|
98
|
+
'icon/primary': palette.violet500,
|
|
98
99
|
'icon/primary/bold': palette.violet700,
|
|
99
100
|
'icon/success': palette.green500,
|
|
100
101
|
'icon/warning': palette.yellow500,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teamturing/react-kit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "React components, hooks for create teamturing web application",
|
|
5
5
|
"author": "Sungchang Park <psch300@gmail.com> (https://github.com/psch300)",
|
|
6
6
|
"homepage": "https://github.com/weareteamturing/bombe#readme",
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@teamturing/icons": "^1.19.0",
|
|
53
|
-
"@teamturing/token-studio": "^1.1.
|
|
53
|
+
"@teamturing/token-studio": "^1.1.7",
|
|
54
54
|
"lodash.debounce": "^4.0.8",
|
|
55
55
|
"lodash.throttle": "^4.1.1",
|
|
56
56
|
"styled-system": "^5.1.5"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "f109beda81cc597a7c045964c71a1c0f209a30ec"
|
|
59
59
|
}
|