@edu-tosel/design 1.0.123 → 1.0.124
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/interface/Property.d.ts +1 -0
- package/interface/widget/index.d.ts +4 -3
- package/layout/template/Olympiad/Banner.js +1 -1
- package/layout/template/Olympiad/Features.js +31 -6
- package/modal/design/ConfirmModal.design.js +1 -1
- package/modal/template/Confirm/Confirm.js +1 -2
- package/package.json +1 -1
- package/version.txt +1 -1
- package/widget/design/Label.design.d.ts +1 -1
- package/widget/design/Label.design.js +9 -7
- package/widget/template/Input/Form.d.ts +1 -1
- package/widget/template/Input/Form.js +7 -3
- package/widget/template/Input/index.js +1 -1
- package/widget/template/Label.d.ts +1 -1
- package/widget/template/Label.js +2 -2
package/interface/Property.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export interface Button extends LabelWidget {
|
|
|
48
48
|
export type FileDisplay = string | ArrayBuffer | null;
|
|
49
49
|
export type FileRead = File | null;
|
|
50
50
|
export type Disabled = boolean | OnClick;
|
|
51
|
+
export type IsValid = undefined | boolean | ((value: string) => boolean | undefined);
|
|
51
52
|
export type Scripts = {
|
|
52
53
|
script?: string;
|
|
53
54
|
subscript?: string | string[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Color } from "../Color";
|
|
2
|
-
import { Disabled, OnClick, Size, State } from "../Property";
|
|
2
|
+
import { Disabled, IsValid, OnClick, Size, State } from "../Property";
|
|
3
3
|
import { SelectOptionInput } from "./Select";
|
|
4
4
|
export * from "./Box";
|
|
5
5
|
export * from "./Carousel";
|
|
@@ -29,15 +29,16 @@ export interface Widget {
|
|
|
29
29
|
export interface LabelWidget extends Widget {
|
|
30
30
|
title: string;
|
|
31
31
|
hoverState?: State<boolean>;
|
|
32
|
+
disabled?: Disabled;
|
|
32
33
|
onClick?: OnClick;
|
|
33
34
|
}
|
|
34
35
|
type InputType = "text" | "password" | "date" | "email" | "phone" | "number";
|
|
35
36
|
export interface InputWidget extends Widget {
|
|
36
37
|
title?: string;
|
|
37
38
|
state: State<string> | State<string | undefined>;
|
|
38
|
-
onKeyDown?: (e: React.KeyboardEvent) => void;
|
|
39
|
+
onKeyDown?: (e: React.KeyboardEvent, value: string) => void;
|
|
39
40
|
placeholder?: string;
|
|
40
|
-
isValid?:
|
|
41
|
+
isValid?: IsValid;
|
|
41
42
|
type?: InputType;
|
|
42
43
|
button?: LabelWidget;
|
|
43
44
|
maxLength?: number;
|
|
@@ -6,7 +6,7 @@ export default function Banner() {
|
|
|
6
6
|
displays: "flex justify-center items-center",
|
|
7
7
|
spacings: "px-5",
|
|
8
8
|
textstyles: "antialiased",
|
|
9
|
-
backgrounds: "bg-cover bg-center",
|
|
9
|
+
backgrounds: "bg-[url('images/olympiad/img-oly-bg-a.png')] bg-cover bg-center",
|
|
10
10
|
};
|
|
11
11
|
const explainer = {
|
|
12
12
|
textstyles: "text-xl md:text-2xl font-pretendard-medium text-gray-light mix-blend-difference sm:text-green-dark sm:mix-blend-normal",
|
|
@@ -3,17 +3,42 @@ import { cn } from "../../../util";
|
|
|
3
3
|
export default function Features() {
|
|
4
4
|
const container = {
|
|
5
5
|
sizes: "w-full h-fit p-5",
|
|
6
|
-
|
|
6
|
+
spacings: "p-5 my-12",
|
|
7
|
+
displays: "flex flex-col justify-center items-center",
|
|
8
|
+
graphics: "antialiased",
|
|
9
|
+
text: "break-keep",
|
|
7
10
|
};
|
|
8
11
|
const boxWrapper = {
|
|
9
12
|
sizes: "w-full h-fit",
|
|
10
|
-
displays: "flex flex-col
|
|
13
|
+
displays: "flex flex-col items-center md:flex-row md:items-start md:justify-center md:max-w-6xl",
|
|
14
|
+
spacings: "gap-8",
|
|
15
|
+
animations: "duration-300",
|
|
16
|
+
};
|
|
17
|
+
const sectiontitle = {
|
|
18
|
+
textstyles: "text-xl text-center text-green-dark mb-10 font-pretendard-bold md:text-2xl",
|
|
19
|
+
animations: "duration-300",
|
|
11
20
|
};
|
|
12
21
|
// styling of feature box components
|
|
13
22
|
const featureBox = {
|
|
14
|
-
sizes: "w-full h-
|
|
15
|
-
|
|
23
|
+
sizes: "w-full h-fit max-w-md",
|
|
24
|
+
displays: "flex flex-col items-center md:grow",
|
|
25
|
+
spacings: "py-4",
|
|
26
|
+
animations: "duration-300",
|
|
27
|
+
};
|
|
28
|
+
const boxTitle = {
|
|
29
|
+
textstyles: "font-pretendard-bold text-lg text-center text-green-dark my-4 md:text-xl",
|
|
30
|
+
animations: "duration-300",
|
|
31
|
+
};
|
|
32
|
+
const boxSubTitle = {
|
|
33
|
+
textstyles: "font-pretendard-medium text-base text-center text-green-dark mt-6",
|
|
34
|
+
animations: "duration-300",
|
|
35
|
+
};
|
|
36
|
+
// common svg attributes
|
|
37
|
+
const svgAttributes = {
|
|
38
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
39
|
+
fill: "none",
|
|
40
|
+
viewBox: "0 0 24 24",
|
|
41
|
+
className: "size-6 fill-green-dark",
|
|
16
42
|
};
|
|
17
|
-
|
|
18
|
-
return (_jsx("div", { className: cn(container), children: _jsxs("div", { className: cn(boxWrapper), children: [_jsx("div", { className: cn(featureBox) }), _jsx("div", { className: cn(featureBox) }), _jsx("div", { className: cn(featureBox) })] }) }));
|
|
43
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(sectiontitle), children: "\uC804\uAD6D \uB2E8\uC704 \uC62C\uB9BC\uD53C\uC544\uB4DC, \uC9D1\uC5D0\uC11C \uAC04\uD3B8\uD558\uAC8C \uACBD\uD5D8\uD558\uB2E4." }), _jsx("div", { className: "h-0.5 w-1/4 mb-8 bg-green-dark rounded-lg" }), _jsxs("div", { className: cn(boxWrapper), children: [_jsxs("div", { className: cn(featureBox), children: [_jsxs("svg", { ...svgAttributes, children: [_jsx("path", { d: "M11.47 3.841a.75.75 0 0 1 1.06 0l8.69 8.69a.75.75 0 1 0 1.06-1.061l-8.689-8.69a2.25 2.25 0 0 0-3.182 0l-8.69 8.69a.75.75 0 1 0 1.061 1.06l8.69-8.689Z" }), _jsx("path", { d: "m12 5.432 8.159 8.159c.03.03.06.058.091.086v6.198c0 1.035-.84 1.875-1.875 1.875H15a.75.75 0 0 1-.75-.75v-4.5a.75.75 0 0 0-.75-.75h-3a.75.75 0 0 0-.75.75V21a.75.75 0 0 1-.75.75H5.625a1.875 1.875 0 0 1-1.875-1.875v-6.198a2.29 2.29 0 0 0 .091-.086L12 5.432Z" })] }), _jsx("div", { className: cn(boxTitle), children: "\uC9D1\uC5D0\uC11C \uD3B8\uB9AC\uD558\uAC8C \uC751\uC2DC" }), _jsx("img", { src: "images/olympiad/img-oly-b1.png", alt: "\uCEF4\uD4E8\uD130\uB85C \uBB38\uC81C\uB97C \uD478\uB294 \uC5EC\uC131" }), _jsx("div", { className: cn(boxSubTitle), children: "\uC5B4\uB514\uC11C\uB098 \uC628\uB77C\uC778 \uBE0C\uB77C\uC6B0\uC800 \uC2DC\uD5D8 \uC751\uC2DC\uAC00 \uAC00\uB2A5\uD569\uB2C8\uB2E4." })] }), _jsxs("div", { className: cn(featureBox), children: [_jsx("svg", { ...svgAttributes, children: _jsx("path", { "fill-rule": "evenodd", d: "M5.166 2.621v.858c-1.035.148-2.059.33-3.071.543a.75.75 0 0 0-.584.859 6.753 6.753 0 0 0 6.138 5.6 6.73 6.73 0 0 0 2.743 1.346A6.707 6.707 0 0 1 9.279 15H8.54c-1.036 0-1.875.84-1.875 1.875V19.5h-.75a2.25 2.25 0 0 0-2.25 2.25c0 .414.336.75.75.75h15a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-2.25-2.25h-.75v-2.625c0-1.036-.84-1.875-1.875-1.875h-.739a6.706 6.706 0 0 1-1.112-3.173 6.73 6.73 0 0 0 2.743-1.347 6.753 6.753 0 0 0 6.139-5.6.75.75 0 0 0-.585-.858 47.077 47.077 0 0 0-3.07-.543V2.62a.75.75 0 0 0-.658-.744 49.22 49.22 0 0 0-6.093-.377c-2.063 0-4.096.128-6.093.377a.75.75 0 0 0-.657.744Zm0 2.629c0 1.196.312 2.32.857 3.294A5.266 5.266 0 0 1 3.16 5.337a45.6 45.6 0 0 1 2.006-.343v.256Zm13.5 0v-.256c.674.1 1.343.214 2.006.343a5.265 5.265 0 0 1-2.863 3.207 6.72 6.72 0 0 0 .857-3.294Z", "clip-rule": "evenodd" }) }), _jsx("div", { className: cn(boxTitle), children: "\uAD6D\uB0B4 \uC720\uC77C\uC758 \uC218\uC0C1\uD61C\uD0DD" }), _jsx("img", { src: "images/olympiad/img-oly-b2.png", alt: "\uD2B8\uB85C\uD53C\uB97C \uB4E4\uACE0 \uC88B\uC544\uD558\uB294 \uC0AC\uB78C" }), _jsx("div", { className: cn(boxSubTitle), children: "\uB300\uD68C \uC6B0\uC2B9\uC790\uC5D0\uAC8C\uB294 \uACE0\uB824\uB300\uD559\uAD50 \uAE30\uAD00\uC7A5\uC0C1\uC774 \uC218\uC5EC\uB429\uB2C8\uB2E4." })] }), _jsxs("div", { className: cn(featureBox), children: [_jsx("svg", { ...svgAttributes, children: _jsx("path", { "fill-rule": "evenodd", d: "M8.603 3.799A4.49 4.49 0 0 1 12 2.25c1.357 0 2.573.6 3.397 1.549a4.49 4.49 0 0 1 3.498 1.307 4.491 4.491 0 0 1 1.307 3.497A4.49 4.49 0 0 1 21.75 12a4.49 4.49 0 0 1-1.549 3.397 4.491 4.491 0 0 1-1.307 3.497 4.491 4.491 0 0 1-3.497 1.307A4.49 4.49 0 0 1 12 21.75a4.49 4.49 0 0 1-3.397-1.549 4.49 4.49 0 0 1-3.498-1.306 4.491 4.491 0 0 1-1.307-3.498A4.49 4.49 0 0 1 2.25 12c0-1.357.6-2.573 1.549-3.397a4.49 4.49 0 0 1 1.307-3.497 4.49 4.49 0 0 1 3.497-1.307Zm7.007 6.387a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z", "clip-rule": "evenodd" }) }), _jsx("div", { className: cn(boxTitle), children: "\uAC04\uD3B8\uD55C \uACB0\uACFC \uD655\uC778" }), _jsx("img", { src: "images/olympiad/img-oly-b3.png", alt: "\uD2B8\uB85C\uD53C\uB97C \uB4E4\uACE0 \uC88B\uC544\uD558\uB294 \uC0AC\uB78C" }), _jsx("div", { className: cn(boxSubTitle), children: "\uB300\uC2DC\uBCF4\uB4DC\uC5D0\uC11C \uC218\uC0C1\uC5EC\uBD80\uB97C \uAC04\uD3B8\uD558\uAC8C \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4." })] })] })] }));
|
|
19
44
|
}
|
|
@@ -10,7 +10,7 @@ export default function ConfirmModalDesign({ titles, showAction, buttons, childr
|
|
|
10
10
|
positions: "absolute bottom-4 md:bottom-5 right-2 md:right-5",
|
|
11
11
|
displays: "flex gap-1 md:gap-2.5",
|
|
12
12
|
};
|
|
13
|
-
return (_jsx(ModalDesign, { titles: titles, showAction: showAction, option: option, children: _jsxs("div", { className: cn(container), children: [children, _jsx("div", { className: cn(buttonBox), children: buttons.map(({ title, onClick, option }) => (_jsx(Label.Button, { title: title, onClick: onClick, option: {
|
|
13
|
+
return (_jsx(ModalDesign, { titles: titles, showAction: showAction, option: option, children: _jsxs("div", { className: cn(container), children: [children, _jsx("div", { className: cn(buttonBox), children: buttons.map(({ title, onClick, option, disabled }) => (_jsx(Label.Button, { title: title, onClick: onClick, disabled: disabled, option: {
|
|
14
14
|
...option,
|
|
15
15
|
width: "lg",
|
|
16
16
|
height: "sm",
|
|
@@ -7,9 +7,8 @@ export default function Confirm(props) {
|
|
|
7
7
|
const { className } = props.option ?? {};
|
|
8
8
|
const container = {
|
|
9
9
|
displays: "flex flex-col",
|
|
10
|
-
margins: "mt-2.5",
|
|
11
|
-
className,
|
|
12
10
|
sizes: "w-full h-60",
|
|
11
|
+
styles: className ?? "mt-2.5",
|
|
13
12
|
};
|
|
14
13
|
return (_jsx(ConfirmModalDesign, { ...props, children: _jsx("div", { className: cn(container), children: props.widgets?.map((widget, index) => (_createElement(ConfirmModalWidget, { ...widget, key: index }))) }), option: {
|
|
15
14
|
...props.option,
|
package/package.json
CHANGED
package/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.124
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { LabelWidget } from "../../interface";
|
|
2
|
-
export default function LabelDesign({ title, onClick, option, hoverState, }: LabelWidget): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export default function LabelDesign({ title, onClick, disabled, option, hoverState, }: LabelWidget): import("react/jsx-runtime").JSX.Element;
|
|
@@ -19,9 +19,13 @@ const heightSize = {
|
|
|
19
19
|
sm: "h-11.25",
|
|
20
20
|
md: "h-12.25",
|
|
21
21
|
};
|
|
22
|
-
export default function LabelDesign({ title, onClick, option, hoverState, }) {
|
|
22
|
+
export default function LabelDesign({ title, onClick, disabled, option, hoverState, }) {
|
|
23
23
|
const [hover, setHover] = hoverState ?? [false, () => { }];
|
|
24
|
-
const { width, height, text, background, className,
|
|
24
|
+
const { width, height, text, background, className, boundary } = option ?? {};
|
|
25
|
+
const container = {
|
|
26
|
+
positions: className ?? "relative",
|
|
27
|
+
sizes: `${widthSize[width ?? "sm"]} ${heightSize[height ?? "xs"]}`,
|
|
28
|
+
};
|
|
25
29
|
const body = {
|
|
26
30
|
positions: "relative z-10",
|
|
27
31
|
sizes: "w-full h-full",
|
|
@@ -38,9 +42,7 @@ export default function LabelDesign({ title, onClick, option, hoverState, }) {
|
|
|
38
42
|
? "rounded-md text-xs"
|
|
39
43
|
: "rounded-lgx",
|
|
40
44
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
};
|
|
45
|
-
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(body), onClick: onClick, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), children: title }), _jsx(Obstacle, { disabled: disabled })] }));
|
|
45
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("div", { className: cn(body), onClick: onClick, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), children: title }), _jsx(Obstacle, { disabled: disabled, option: {
|
|
46
|
+
background: "",
|
|
47
|
+
} })] }));
|
|
46
48
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { InputWidget } from "../../../interface";
|
|
2
|
-
export default function InputForm({ title, state, placeholder, isValid, type, button, maxLength, disabled, }: InputWidget): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export default function InputForm({ title, state, placeholder, isValid, type, onKeyDown, button, maxLength, disabled, }: InputWidget): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,7 +3,7 @@ import { useRef, useState } from "react";
|
|
|
3
3
|
import { cn, gradient } from "../../../util";
|
|
4
4
|
import Label from "../Label";
|
|
5
5
|
import Obstacle from "../Obstacle";
|
|
6
|
-
export default function InputForm({ title, state, placeholder, isValid, type, button, maxLength, disabled, }) {
|
|
6
|
+
export default function InputForm({ title, state, placeholder, isValid, type, onKeyDown, button, maxLength, disabled, }) {
|
|
7
7
|
const [value, setValue] = state;
|
|
8
8
|
const [onFocus, setOnFocus] = useState(false);
|
|
9
9
|
const ref = useRef(null);
|
|
@@ -23,7 +23,11 @@ export default function InputForm({ title, state, placeholder, isValid, type, bu
|
|
|
23
23
|
if (typeof isValid === "undefined")
|
|
24
24
|
return gray;
|
|
25
25
|
if (typeof isValid === "function")
|
|
26
|
-
return isValid(value ?? "")
|
|
26
|
+
return typeof isValid(value ?? "") === "undefined"
|
|
27
|
+
? gray
|
|
28
|
+
: isValid(value ?? "")
|
|
29
|
+
? green
|
|
30
|
+
: red;
|
|
27
31
|
if (isValid)
|
|
28
32
|
return green;
|
|
29
33
|
return red;
|
|
@@ -39,7 +43,7 @@ export default function InputForm({ title, state, placeholder, isValid, type, bu
|
|
|
39
43
|
!(isValid === false) &&
|
|
40
44
|
"shadow-[0px_0px_10px_0px_rgba(16,86,82,0.38)]",
|
|
41
45
|
};
|
|
42
|
-
return (_jsxs("div", { children: [title && _jsx("div", { className: "text-gray-dark", children: title }), _jsxs("div", { className: cn(container), children: [_jsx("div", { onClick: () => ref.current?.focus(), className: cn(placeholderBox), children: placeholder }), _jsx("input", { ref: ref, className: cn(inputBox), value: value, onFocus: () => setOnFocus(true), onBlur: () => setOnFocus(false), onChange: (e) => {
|
|
46
|
+
return (_jsxs("div", { children: [title && _jsx("div", { className: "text-gray-dark", children: title }), _jsxs("div", { className: cn(container), children: [_jsx("div", { onClick: () => ref.current?.focus(), className: cn(placeholderBox), children: placeholder }), _jsx("input", { ref: ref, className: cn(inputBox), value: value, onKeyDown: onKeyDown && ((e) => onKeyDown(e, value ?? "")), onFocus: () => setOnFocus(true), onBlur: () => setOnFocus(false), onChange: (e) => {
|
|
43
47
|
if (maxLength && e.target.value.length > maxLength)
|
|
44
48
|
return;
|
|
45
49
|
setValue(e.target.value);
|
|
@@ -28,7 +28,7 @@ function Input({ state, onKeyDown, placeholder, option }) {
|
|
|
28
28
|
pseudo: "focus:outline-none focus:bg-white focus:text-black box-shadow-focus",
|
|
29
29
|
effect: `transition-all`,
|
|
30
30
|
};
|
|
31
|
-
return (_jsxs("div", { className: cn(container), children: [_jsx("input", { className: cn(body), id: id, type: "text", value: value, placeholder: placeholder ?? "입력해주세요", onKeyDown: onKeyDown, onChange: (e) => setValue(e.target.value) }), _jsx(Obstacle, { disabled: disabled })] }));
|
|
31
|
+
return (_jsxs("div", { className: cn(container), children: [_jsx("input", { className: cn(body), id: id, type: "text", value: value, placeholder: placeholder ?? "입력해주세요", onKeyDown: onKeyDown && ((e) => onKeyDown(e, value ?? "")), onChange: (e) => setValue(e.target.value) }), _jsx(Obstacle, { disabled: disabled })] }));
|
|
32
32
|
}
|
|
33
33
|
Input.Form = Form;
|
|
34
34
|
export default Input;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LabelWidget } from "../../interface";
|
|
2
2
|
declare function Label({ title, option }: Omit<LabelWidget, "onClick">): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
declare namespace Label {
|
|
4
|
-
var Button: ({ title, hoverTitle, onClick, option, }: Omit<LabelWidget, "hoverState"> & {
|
|
4
|
+
var Button: ({ title, hoverTitle, onClick, disabled, option, }: Omit<LabelWidget, "hoverState"> & {
|
|
5
5
|
hoverTitle?: string | undefined;
|
|
6
6
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
}
|
package/widget/template/Label.js
CHANGED
|
@@ -5,9 +5,9 @@ function Label({ title, option }) {
|
|
|
5
5
|
const [hover, setHover] = useState(false);
|
|
6
6
|
return (_jsx(LabelDesign, { title: title, hoverState: [hover, setHover], option: { ...option, width: "sm", height: "xs" } }));
|
|
7
7
|
}
|
|
8
|
-
function Button({ title, hoverTitle, onClick, option, }) {
|
|
8
|
+
function Button({ title, hoverTitle, onClick, disabled, option, }) {
|
|
9
9
|
const [hover, setHover] = useState(false);
|
|
10
|
-
return (_jsx(LabelDesign, { title: hoverTitle ? (!hover ? title : hoverTitle) : title, onClick: onClick, hoverState: [hover, setHover], option: {
|
|
10
|
+
return (_jsx(LabelDesign, { title: hoverTitle ? (!hover ? title : hoverTitle) : title, onClick: onClick, disabled: disabled, hoverState: [hover, setHover], option: {
|
|
11
11
|
...option,
|
|
12
12
|
width: option?.width ?? "md",
|
|
13
13
|
height: option?.height ?? "sm",
|