@bigtablet/design-system 1.24.1 → 1.25.0
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/README.md +10 -32
- package/dist/index.css +1466 -811
- package/dist/index.d.ts +330 -215
- package/dist/index.js +872 -584
- package/dist/styles/{scss/_a11y.scss → a11y/_index.scss} +1 -1
- package/dist/styles/border-width/_index.scss +11 -0
- package/dist/styles/{scss/_colors.scss → colors/_index.scss} +8 -0
- package/dist/styles/elevation/_index.scss +5 -0
- package/dist/styles/opacity/_index.scss +12 -0
- package/dist/styles/{scss/token.scss → token.scss} +3 -1
- package/dist/styles/{scss/_typography.scss → typography/_index.scss} +9 -2
- package/dist/vanilla/bigtablet.min.css +1 -1
- package/package.json +8 -14
- package/dist/next.css +0 -133
- package/dist/next.d.ts +0 -53
- package/dist/next.js +0 -148
- package/dist/styles/scss/_shadows.scss +0 -5
- /package/dist/styles/{scss/_breakpoints.scss → breakpoints/_index.scss} +0 -0
- /package/dist/styles/{scss/_layout.scss → layout/_index.scss} +0 -0
- /package/dist/styles/{scss/_motion.scss → motion/_index.scss} +0 -0
- /package/dist/styles/{scss/_radius.scss → radius/_index.scss} +0 -0
- /package/dist/styles/{scss/_skeleton.scss → skeleton/_index.scss} +0 -0
- /package/dist/styles/{scss/_spacing.scss → spacing/_index.scss} +0 -0
- /package/dist/styles/{scss/_z-index.scss → z-index/_index.scss} +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// ── Base border-width ────────────────────────────────────────────────────────
|
|
2
|
+
|
|
3
|
+
$border_width_0: 0px;
|
|
4
|
+
$border_width_1: 1px;
|
|
5
|
+
$border_width_2: 2px;
|
|
6
|
+
|
|
7
|
+
// ── Semantic border-width ────────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
$border_width_none: $border_width_0;
|
|
10
|
+
$border_width_standard: $border_width_1;
|
|
11
|
+
$border_width_indicator: $border_width_2;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
// ── Base colors ───────────────────────────────────────────────────────────────
|
|
2
2
|
|
|
3
3
|
$color_base_brand_primary: #121212;
|
|
4
|
+
$color_base_blue_600: #1A73E8;
|
|
4
5
|
$color_base_neutral_0: #FFFFFF;
|
|
5
6
|
$color_base_neutral_50: #F4F4F4;
|
|
6
7
|
$color_base_neutral_200: #E5E5E5;
|
|
7
8
|
$color_base_neutral_300: #999999;
|
|
8
9
|
$color_base_neutral_400: #B3B3B3;
|
|
9
10
|
$color_base_neutral_500: #888888;
|
|
11
|
+
$color_base_neutral_600: #6B6B6B;
|
|
10
12
|
$color_base_neutral_700: #666666;
|
|
11
13
|
$color_base_neutral_900: #121212;
|
|
12
14
|
$color_base_status_error: #EF4444;
|
|
@@ -51,6 +53,12 @@ $color_state_pressed_on_light: $color_base_alpha_black_12;
|
|
|
51
53
|
$color_state_hover_on_dark: $color_base_alpha_white_5;
|
|
52
54
|
$color_state_pressed_on_dark: $color_base_alpha_white_12;
|
|
53
55
|
|
|
56
|
+
// ── Extended: tokens.json에 없지만 컴포넌트에서 사용 중 ─────────────────────
|
|
57
|
+
|
|
58
|
+
$color_state_focus_on_light: $color_base_alpha_black_8;
|
|
59
|
+
$color_state_focus_on_dark: $color_base_alpha_white_8;
|
|
60
|
+
$color_brand_primary_container: $color_base_alpha_black_5;
|
|
61
|
+
|
|
54
62
|
// ── Semantic: Border ──────────────────────────────────────────────────────────
|
|
55
63
|
|
|
56
64
|
$color_border_default: $color_base_neutral_200;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
$elevation_level1: 0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12);
|
|
2
|
+
$elevation_level2: 0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12);
|
|
3
|
+
$elevation_level3: 0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12);
|
|
4
|
+
$elevation_level4: 0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12);
|
|
5
|
+
$elevation_level5: 0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// ── Base opacity ─────────────────────────────────────────────────────────────
|
|
2
|
+
|
|
3
|
+
$opacity_0: 0;
|
|
4
|
+
$opacity_5: 0.05;
|
|
5
|
+
$opacity_8: 0.08;
|
|
6
|
+
$opacity_12: 0.12;
|
|
7
|
+
$opacity_16: 0.16;
|
|
8
|
+
$opacity_38: 0.38;
|
|
9
|
+
$opacity_50: 0.5;
|
|
10
|
+
$opacity_80: 0.8;
|
|
11
|
+
$opacity_90: 0.9;
|
|
12
|
+
$opacity_100: 1;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
@forward "a11y";
|
|
2
|
+
@forward "border-width";
|
|
2
3
|
@forward "breakpoints";
|
|
3
4
|
@forward "colors";
|
|
4
5
|
@forward "layout";
|
|
5
6
|
@forward "motion";
|
|
7
|
+
@forward "opacity";
|
|
6
8
|
@forward "radius";
|
|
7
|
-
@forward "
|
|
9
|
+
@forward "elevation";
|
|
8
10
|
@forward "skeleton";
|
|
9
11
|
@forward "spacing";
|
|
10
12
|
@forward "typography";
|
|
@@ -17,8 +17,15 @@ $font_size_48: 48px;
|
|
|
17
17
|
|
|
18
18
|
// ── Base: Font weight ─────────────────────────────────────────────────────────
|
|
19
19
|
|
|
20
|
-
$
|
|
21
|
-
$
|
|
20
|
+
$font_weight_thin: 100;
|
|
21
|
+
$font_weight_extra_light: 200;
|
|
22
|
+
$font_weight_light: 300;
|
|
23
|
+
$font_weight_regular: 400;
|
|
24
|
+
$font_weight_medium: 500;
|
|
25
|
+
$font_weight_semi_bold: 600;
|
|
26
|
+
$font_weight_bold: 700;
|
|
27
|
+
$font_weight_extra_bold: 800;
|
|
28
|
+
$font_weight_black: 900;
|
|
22
29
|
|
|
23
30
|
// ── Base: Line height ─────────────────────────────────────────────────────────
|
|
24
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@keyframes skeleton_loading{0%{background-position:100% 0}100%{background-position:0 0}}:root{--bt-color-primary: #121212;--bt-color-on-primary: #FFFFFF;--bt-color-background: #FFFFFF;--bt-color-background-dim: #F4F4F4;--bt-color-background-overlay: rgba(0, 0, 0, 0.5);--bt-color-text-heading: #121212;--bt-color-text-body: #666666;--bt-color-text-caption: #888888;--bt-color-text-inverse: #FFFFFF;--bt-color-text-disabled: rgba(26, 26, 26, 0.38);--bt-color-border: #E5E5E5;--bt-color-border-subtle: rgba(0, 0, 0, 0.08);--bt-color-border-focus: #121212;--bt-color-hover: rgba(0, 0, 0, 0.05);--bt-color-pressed: rgba(26, 26, 26, 0.12);--bt-color-success: #10B981;--bt-color-error: #EF4444;--bt-color-warning: #F59E0B;--bt-color-info: #3B82F6;--bt-spacing-4: 4px;--bt-spacing-8: 8px;--bt-spacing-12: 12px;--bt-spacing-16: 16px;--bt-spacing-20: 20px;--bt-spacing-24: 24px;--bt-spacing-32: 32px;--bt-spacing-40: 40px;--bt-spacing-48: 48px;--bt-font-family: Pretendard, sans-serif;--bt-font-size-12: 12px;--bt-font-size-14: 14px;--bt-font-size-15: 15px;--bt-font-size-16: 16px;--bt-font-size-18: 18px;--bt-font-size-20: 20px;--bt-font-weight-regular: 400;--bt-font-weight-medium: 500;--bt-line-height-20: 20px;--bt-line-height-24: 24px;--bt-radius-sm: 6px;--bt-radius-md: 8px;--bt-radius-lg: 12px;--bt-radius-full: 9999px;--bt-shadow-sm: 0 1px 1px -1px rgba(0, 0, 0, 0.2), 0 3px 3px 0px rgba(0, 0, 0, 0.12);--bt-shadow-md: 0 2px 2px -2px rgba(0, 0, 0, 0.2), 0 6px 6px 0px rgba(0, 0, 0, 0.12);--bt-shadow-lg: 0 3px 3px -3px rgba(0, 0, 0, 0.2), 0 9px 9px 0px rgba(0, 0, 0, 0.12);--bt-shadow-xl: 0 5px 5px -5px rgba(0, 0, 0, 0.2), 0 15px 15px 0px rgba(0, 0, 0, 0.12);--bt-transition-fast: 0.1s ease-in-out;--bt-transition-base: 0.2s ease-in-out;--bt-transition-slow: 0.3s ease-in-out;--bt-z-modal: 1000;--bt-z-toast: 1000}.bt-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);border-radius:var(--bt-radius-md);border:none;cursor:pointer;font-family:var(--bt-font-family);font-weight:var(--bt-font-weight-medium);transition:background var(--bt-transition-base),color var(--bt-transition-base),box-shadow var(--bt-transition-base),transform var(--bt-transition-base)}.bt-button:disabled{cursor:not-allowed;opacity:.6}.bt-button--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-button--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-button--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-button--primary{background:var(--bt-color-primary);color:var(--bt-color-background)}.bt-button--primary:hover:not(:disabled){background:var(--bt-color-primary-hover)}.bt-button--primary:active:not(:disabled){transform:scale(0.98)}.bt-button--secondary{background:rgba(0,0,0,0);border:1px solid var(--bt-color-border);color:var(--bt-color-text-primary)}.bt-button--secondary:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-button--secondary:active:not(:disabled){transform:scale(0.98)}.bt-button--ghost{background:rgba(0,0,0,0);color:var(--bt-color-text-primary)}.bt-button--ghost:hover:not(:disabled){background:rgba(0,0,0,.05)}.bt-button--ghost:active:not(:disabled){transform:scale(0.96)}.bt-button--danger{background:var(--bt-color-error);color:var(--bt-color-background)}.bt-button--danger:hover:not(:disabled){background:rgb(235.7842364532, 30.4157635468, 30.4157635468)}.bt-button--danger:active:not(:disabled){transform:scale(0.98)}.bt-button--full-width{width:100%}.bt-text-field{display:flex;flex-direction:column}.bt-text-field--full-width{width:100%}.bt-text-field__label{margin-bottom:var(--bt-spacing-xs);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal)}.bt-text-field__wrap{position:relative;display:inline-flex;width:100%;align-items:center}.bt-text-field__input{width:100%;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary);background:var(--bt-color-background);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base)}.bt-text-field__input::placeholder{color:var(--bt-color-text-tertiary)}.bt-text-field__input:disabled{cursor:not-allowed;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary);opacity:.7}.bt-text-field__input--outline{border:1px solid var(--bt-color-border)}.bt-text-field__input--outline:hover:not(:disabled){border-color:var(--bt-color-border-light)}.bt-text-field__input--outline:focus-visible{outline:none;border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-text-field__input--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-text-field__input--filled:focus-visible{outline:none;border-color:var(--bt-color-primary);background:var(--bt-color-background);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-text-field__input--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-text-field__input--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-text-field__input--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-text-field__input--error{border-color:var(--bt-color-error) !important;box-shadow:0 0 0 3px rgba(239,68,68,.15) !important}.bt-text-field__input--success{border-color:var(--bt-color-success) !important;box-shadow:0 0 0 3px rgba(16,185,129,.15) !important}.bt-text-field__helper{margin-top:var(--bt-spacing-xs);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary)}.bt-text-field__helper--error{color:var(--bt-color-error)}.bt-text-field__helper--success{color:var(--bt-color-success)}.bt-text-field__icon{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;color:var(--bt-color-text-secondary)}.bt-text-field__icon--left{left:var(--bt-spacing-md)}.bt-text-field__icon--right{right:var(--bt-spacing-md)}.bt-checkbox{display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none;position:relative}.bt-checkbox__input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.bt-checkbox__box{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);display:inline-block;position:relative}.bt-checkbox__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-checkbox--sm .bt-checkbox__box{width:1rem;height:1rem}.bt-checkbox--sm .bt-checkbox__label{font-size:var(--bt-font-size-sm)}.bt-checkbox--lg .bt-checkbox__box{width:1.25rem;height:1.25rem}.bt-checkbox--lg .bt-checkbox__label{font-size:var(--bt-font-size-md)}.bt-checkbox__input:focus-visible+.bt-checkbox__box{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-checkbox__input:disabled+.bt-checkbox__box,.bt-checkbox__input:disabled~.bt-checkbox__label{opacity:.6;cursor:not-allowed}.bt-checkbox__input:checked+.bt-checkbox__box{background:var(--bt-color-primary);border-color:var(--bt-color-primary)}.bt-checkbox__input:checked+.bt-checkbox__box::after{content:"";position:absolute;left:50%;top:50%;width:.28rem;height:.55rem;border:2px solid var(--bt-color-background);border-top:0;border-left:0;transform:translate(-50%, -58%) rotate(45deg)}.bt-radio{position:relative;display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none}.bt-radio__input{position:absolute;inset:0;opacity:0;cursor:pointer;margin:0}.bt-radio__dot{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-full);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);position:relative;display:inline-block}.bt-radio__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-radio--sm .bt-radio__dot{width:1rem;height:1rem}.bt-radio--sm .bt-radio__label{font-size:var(--bt-font-size-sm)}.bt-radio--lg .bt-radio__dot{width:1.25rem;height:1.25rem}.bt-radio--lg .bt-radio__label{font-size:var(--bt-font-size-md)}.bt-radio__input:focus-visible+.bt-radio__dot{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-radio__input:checked+.bt-radio__dot{border-color:var(--bt-color-primary)}.bt-radio__input:checked+.bt-radio__dot::after{content:"";position:absolute;left:50%;top:50%;width:60%;height:60%;transform:translate(-50%, -50%);background:var(--bt-color-primary);border-radius:9999px}.bt-radio__input:disabled+.bt-radio__dot,.bt-radio__input:disabled~.bt-radio__label{opacity:.6;cursor:not-allowed}.bt-switch{position:relative;display:inline-flex;align-items:center;width:40px;height:22px;padding:2px;border-radius:var(--bt-radius-full);background:var(--bt-color-border);transition:background var(--bt-transition-base);cursor:pointer;border:none}.bt-switch__thumb{width:18px;height:18px;background:var(--bt-color-background);border-radius:var(--bt-radius-full);transition:transform var(--bt-transition-base);transform:translateX(0)}.bt-switch--on{background:var(--bt-color-primary)}.bt-switch--on .bt-switch__thumb{transform:translateX(18px)}.bt-switch--sm{width:34px;height:18px}.bt-switch--sm .bt-switch__thumb{width:14px;height:14px}.bt-switch--sm.bt-switch--on .bt-switch__thumb{transform:translateX(16px)}.bt-switch--lg{width:48px;height:26px}.bt-switch--lg .bt-switch__thumb{width:22px;height:22px}.bt-switch--lg.bt-switch--on .bt-switch__thumb{transform:translateX(22px)}.bt-switch--disabled{opacity:.6;cursor:not-allowed}.bt-select{position:relative;display:inline-flex;flex-direction:column;width:100%;gap:var(--bt-spacing-xs);font-family:var(--bt-font-family)}.bt-select__label{font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-select__control{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);cursor:pointer;color:var(--bt-color-text-primary);background:var(--bt-color-background);border-radius:var(--bt-radius-md);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);border:none;text-align:left}.bt-select__control:disabled,.bt-select__control.is-disabled{cursor:not-allowed;opacity:.7;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary)}.bt-select__control--outline{border:1px solid var(--bt-color-border)}.bt-select__control--outline:hover:not(.is-disabled){border-color:var(--bt-color-border-light)}.bt-select__control--outline.is-open{border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-select__control--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-select__control--filled.is-open{background:var(--bt-color-background);border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-select__control--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-select__control--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-select__control--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-select__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bt-select__placeholder{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bt-color-text-tertiary)}.bt-select__icon{display:inline-flex;align-items:center;justify-content:center;color:var(--bt-color-text-secondary);transition:transform var(--bt-transition-base)}.bt-select__icon.is-open{transform:rotate(180deg)}.bt-select__list{position:absolute;z-index:var(--bt-z-modal);top:100%;left:0;width:100%;min-width:100%;box-sizing:border-box;margin-top:var(--bt-spacing-xs);background:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);box-shadow:var(--bt-shadow-md);max-height:18rem;overflow-y:auto;overflow-x:hidden;padding:var(--bt-spacing-xs) 0;list-style:none;margin:var(--bt-spacing-xs) 0 0 0}.bt-select__list--up{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bt-spacing-xs)}.bt-select__option{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);cursor:pointer;color:var(--bt-color-text-primary);background:rgba(0,0,0,0);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal)}.bt-select__option:hover,.bt-select__option.is-active{background:var(--bt-color-background-secondary)}.bt-select__option.is-selected{font-weight:var(--bt-font-weight-medium)}.bt-select__option.is-disabled{cursor:not-allowed;color:var(--bt-color-text-tertiary)}.bt-modal{position:fixed;inset:0;display:none;place-items:center;background:var(--bt-color-overlay);z-index:var(--bt-z-modal)}.bt-modal.is-open{display:grid}.bt-modal__panel{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);box-shadow:var(--bt-shadow-lg);max-width:calc(100% - 32px);overflow:hidden}.bt-modal__header{padding:var(--bt-spacing-lg);border-bottom:1px solid var(--bt-color-border);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3}.bt-modal__body{padding:var(--bt-spacing-lg)}.bt-modal__footer{padding:var(--bt-spacing-lg);border-top:1px solid var(--bt-color-border);display:flex;justify-content:flex-end;gap:var(--bt-spacing-sm)}@keyframes bt-alert-fade-in{from{opacity:0}to{opacity:1}}@keyframes bt-alert-slide-up{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.bt-alert__overlay{position:fixed;inset:0;background:var(--bt-color-overlay);display:none;align-items:center;justify-content:center;z-index:var(--bt-z-modal);animation:bt-alert-fade-in var(--bt-transition-base)}.bt-alert__overlay.is-open{display:flex}.bt-alert__modal{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);min-width:320px;max-width:480px;box-shadow:var(--bt-shadow-xl);animation:bt-alert-slide-up var(--bt-transition-slow);overflow:hidden}.bt-alert__title{font-size:var(--bt-font-size-lg);font-weight:var(--bt-font-weight-semibold);line-height:var(--bt-line-height-normal);color:var(--bt-color-info);padding:var(--bt-spacing-md) var(--bt-spacing-xl) var(--bt-spacing-xs)}.bt-alert__message{font-size:var(--bt-font-size-base);color:var(--bt-color-text-secondary);padding:var(--bt-spacing-xl);line-height:1.75}.bt-alert__actions{display:flex;gap:var(--bt-spacing-sm);align-items:center;padding:0 var(--bt-spacing-xl) var(--bt-spacing-xl);justify-content:flex-end}.bt-alert--info .bt-alert__title{color:var(--bt-color-info)}.bt-alert--success .bt-alert__title{color:var(--bt-color-success)}.bt-alert--warning .bt-alert__title{color:var(--bt-color-warning)}.bt-alert--error .bt-alert__title{color:var(--bt-color-error)}.bt-card{background:var(--bt-color-background);border-radius:var(--bt-radius-lg)}.bt-card--bordered{border:1px solid var(--bt-color-border)}.bt-card--shadow-sm{box-shadow:var(--bt-shadow-sm)}.bt-card--shadow-md{box-shadow:var(--bt-shadow-md)}.bt-card--shadow-lg{box-shadow:var(--bt-shadow-lg)}.bt-card--p-sm{padding:var(--bt-spacing-sm)}.bt-card--p-md{padding:var(--bt-spacing-lg)}.bt-card--p-lg{padding:var(--bt-spacing-2xl)}.bt-card__title{font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3;margin-bottom:var(--bt-spacing-md);color:var(--bt-color-text-primary)}@keyframes bt-spinner-spin{to{transform:rotate(360deg)}}.bt-spinner{display:inline-block;box-sizing:border-box;border-radius:50%;border:2px solid var(--bt-color-border);border-top-color:var(--bt-color-primary);animation:bt-spinner-spin .8s linear infinite}.bt-spinner--sm{width:16px;height:16px}.bt-spinner--md{width:24px;height:24px}.bt-spinner--lg{width:32px;height:32px}.bt-spinner--xl{width:48px;height:48px}.bt-pagination{display:flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);margin-top:var(--bt-spacing-3xl)}.bt-pagination__item{border:1px solid var(--bt-color-border);background:var(--bt-color-background);border-radius:var(--bt-radius-md);padding:6px 10px;min-width:36px;font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-primary);cursor:pointer;transition:background var(--bt-transition-base),border-color var(--bt-transition-base)}.bt-pagination__item:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-pagination__item:disabled{opacity:.5;cursor:not-allowed}.bt-pagination__pages{display:flex;align-items:center;gap:6px}.bt-pagination__page{border:0;background:rgba(0,0,0,0);min-width:36px;height:36px;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary);cursor:pointer;transition:background var(--bt-transition-base),color var(--bt-transition-base)}.bt-pagination__page:hover{background:var(--bt-color-background-secondary);color:var(--bt-color-text-primary)}.bt-pagination__page--active{color:var(--bt-color-text-primary);font-weight:var(--bt-font-weight-semibold)}.bt-pagination__ellipsis{min-width:20px;text-align:center;font-size:var(--bt-font-size-sm);color:var(--bt-color-text-tertiary)}.bt-date-picker{display:flex;flex-direction:column;gap:var(--bt-spacing-xs)}.bt-date-picker__label{color:var(--bt-color-text-primary);margin-bottom:var(--bt-spacing-xs);font-weight:var(--bt-font-weight-medium);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal)}.bt-date-picker__label-required{margin-left:var(--bt-spacing-xs);color:var(--bt-color-error)}.bt-date-picker__fields{display:flex;gap:var(--bt-spacing-sm)}.bt-date-picker__select{min-width:88px;height:44px;padding:0 var(--bt-spacing-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);background-color:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);cursor:pointer;transition:border-color var(--bt-transition-fast),box-shadow var(--bt-transition-fast),background-color var(--bt-transition-fast);appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--bt-color-text-secondary) 50%),linear-gradient(135deg, var(--bt-color-text-secondary) 50%, transparent 50%);background-position:calc(100% - 16px) calc(50% - 3px),calc(100% - 11px) calc(50% - 3px);background-size:5px 5px;background-repeat:no-repeat}.bt-date-picker__select:hover:not(:disabled){border-color:var(--bt-color-primary);background-color:var(--bt-color-background-secondary)}.bt-date-picker__select:focus-visible{outline:none;border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-date-picker__select:disabled{cursor:not-allowed;color:var(--bt-text-disabled);background-color:var(--bt-color-background-secondary);border-color:var(--bt-color-border-light)}.bt-date-picker--full-width{width:100%}.bt-date-picker--full-width .bt-date-picker__fields{width:100%}.bt-date-picker--full-width .bt-date-picker__select{flex:1;min-width:0}.bt-file-input{position:relative;display:inline-flex;align-items:center}.bt-file-input:hover .bt-file-input__label{border-color:var(--bt-color-border-light)}.bt-file-input__control{position:absolute;inset:0;opacity:0;cursor:pointer}.bt-file-input__label{border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);background:var(--bt-color-background);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base)}.bt-file-input__control:focus-visible+.bt-file-input__label{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-file-input--disabled{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__control{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__label{opacity:.6;cursor:not-allowed}.bt-file-input--disabled:hover .bt-file-input__label{border-color:var(--bt-color-border)}.bt-toast{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);border-radius:var(--bt-radius-md);box-shadow:var(--bt-shadow-lg)}.bt-hidden{display:none !important}.bt-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}
|
|
1
|
+
@keyframes skeleton_loading{0%{background-position:100% 0}100%{background-position:0 0}}:root{--bt-color-primary: #121212;--bt-color-on-primary: #FFFFFF;--bt-color-background: #FFFFFF;--bt-color-background-dim: #F4F4F4;--bt-color-background-overlay: rgba(0, 0, 0, 0.5);--bt-color-text-heading: #121212;--bt-color-text-body: #666666;--bt-color-text-caption: #888888;--bt-color-text-inverse: #FFFFFF;--bt-color-text-disabled: rgba(26, 26, 26, 0.38);--bt-color-border: #E5E5E5;--bt-color-border-subtle: rgba(0, 0, 0, 0.08);--bt-color-border-focus: #121212;--bt-color-text-primary: var(--bt-color-text-heading);--bt-color-text-secondary: var(--bt-color-text-body);--bt-color-text-tertiary: var(--bt-color-text-caption);--bt-color-background-secondary: var(--bt-color-background-dim);--bt-color-border-light: #B3B3B3;--bt-color-hover: rgba(0, 0, 0, 0.05);--bt-color-pressed: rgba(26, 26, 26, 0.12);--bt-color-primary-hover: rgb(56.25, 56.25, 56.25);--bt-color-overlay: rgba(0, 0, 0, 0.5);--bt-color-success: #10B981;--bt-color-error: #EF4444;--bt-color-warning: #F59E0B;--bt-color-info: #3B82F6;--bt-spacing-4: 4px;--bt-spacing-8: 8px;--bt-spacing-12: 12px;--bt-spacing-16: 16px;--bt-spacing-20: 20px;--bt-spacing-24: 24px;--bt-spacing-32: 32px;--bt-spacing-40: 40px;--bt-spacing-48: 48px;--bt-spacing-xs: var(--bt-spacing-4);--bt-spacing-sm: var(--bt-spacing-8);--bt-spacing-md: var(--bt-spacing-12);--bt-spacing-lg: var(--bt-spacing-16);--bt-spacing-xl: var(--bt-spacing-20);--bt-spacing-2xl: var(--bt-spacing-24);--bt-spacing-3xl: var(--bt-spacing-32);--bt-font-family: Pretendard, sans-serif;--bt-font-size-12: 12px;--bt-font-size-14: 14px;--bt-font-size-15: 15px;--bt-font-size-16: 16px;--bt-font-size-18: 18px;--bt-font-size-20: 20px;--bt-font-weight-regular: 400;--bt-font-weight-medium: 500;--bt-font-weight-semibold: 600;--bt-line-height-20: 20px;--bt-line-height-24: 24px;--bt-font-size-sm: var(--bt-font-size-14);--bt-font-size-base: var(--bt-font-size-15);--bt-font-size-md: var(--bt-font-size-16);--bt-font-size-lg: var(--bt-font-size-18);--bt-font-size-xl: var(--bt-font-size-20);--bt-line-height-normal: 1.5;--bt-radius-sm: 6px;--bt-radius-md: 8px;--bt-radius-lg: 12px;--bt-radius-full: 9999px;--bt-elevation-1: 0 1px 1px -1px rgba(0, 0, 0, 0.2), 0 3px 3px 0px rgba(0, 0, 0, 0.12);--bt-elevation-2: 0 2px 2px -2px rgba(0, 0, 0, 0.2), 0 6px 6px 0px rgba(0, 0, 0, 0.12);--bt-elevation-3: 0 3px 3px -3px rgba(0, 0, 0, 0.2), 0 9px 9px 0px rgba(0, 0, 0, 0.12);--bt-elevation-4: 0 5px 5px -5px rgba(0, 0, 0, 0.2), 0 15px 15px 0px rgba(0, 0, 0, 0.12);--bt-elevation-5: 0 8px 10px -5px rgba(0, 0, 0, 0.2), 0 20px 20px 0px rgba(0, 0, 0, 0.12);--bt-transition-fast: 0.1s ease-in-out;--bt-transition-base: 0.2s ease-in-out;--bt-transition-slow: 0.3s ease-in-out;--bt-z-modal: 1000;--bt-z-toast: 1000}.bt-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);border-radius:var(--bt-radius-md);border:none;cursor:pointer;font-family:var(--bt-font-family);font-weight:var(--bt-font-weight-medium);transition:background var(--bt-transition-base),color var(--bt-transition-base),box-shadow var(--bt-transition-base),transform var(--bt-transition-base)}.bt-button:disabled{cursor:not-allowed;opacity:.6}.bt-button--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-button--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-button--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-button--primary{background:var(--bt-color-primary);color:var(--bt-color-background)}.bt-button--primary:hover:not(:disabled){background:var(--bt-color-primary-hover)}.bt-button--primary:active:not(:disabled){transform:scale(0.98)}.bt-button--secondary{background:rgba(0,0,0,0);border:1px solid var(--bt-color-border);color:var(--bt-color-text-primary)}.bt-button--secondary:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-button--secondary:active:not(:disabled){transform:scale(0.98)}.bt-button--ghost{background:rgba(0,0,0,0);color:var(--bt-color-text-primary)}.bt-button--ghost:hover:not(:disabled){background:rgba(0,0,0,.05)}.bt-button--ghost:active:not(:disabled){transform:scale(0.96)}.bt-button--danger{background:var(--bt-color-error);color:var(--bt-color-background)}.bt-button--danger:hover:not(:disabled){background:rgb(235.7842364532, 30.4157635468, 30.4157635468)}.bt-button--danger:active:not(:disabled){transform:scale(0.98)}.bt-button--full-width{width:100%}.bt-text-field{display:flex;flex-direction:column}.bt-text-field--full-width{width:100%}.bt-text-field__label{margin-bottom:var(--bt-spacing-xs);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal)}.bt-text-field__wrap{position:relative;display:inline-flex;width:100%;align-items:center}.bt-text-field__input{width:100%;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary);background:var(--bt-color-background);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base)}.bt-text-field__input::placeholder{color:var(--bt-color-text-tertiary)}.bt-text-field__input:disabled{cursor:not-allowed;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary);opacity:.7}.bt-text-field__input--outline{border:1px solid var(--bt-color-border)}.bt-text-field__input--outline:hover:not(:disabled){border-color:var(--bt-color-border-light)}.bt-text-field__input--outline:focus-visible{outline:none;border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-text-field__input--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-text-field__input--filled:focus-visible{outline:none;border-color:var(--bt-color-primary);background:var(--bt-color-background);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-text-field__input--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-text-field__input--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-text-field__input--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-text-field__input--error{border-color:var(--bt-color-error) !important;box-shadow:0 0 0 3px rgba(239,68,68,.15) !important}.bt-text-field__input--success{border-color:var(--bt-color-success) !important;box-shadow:0 0 0 3px rgba(16,185,129,.15) !important}.bt-text-field__helper{margin-top:var(--bt-spacing-xs);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary)}.bt-text-field__helper--error{color:var(--bt-color-error)}.bt-text-field__helper--success{color:var(--bt-color-success)}.bt-text-field__icon{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;color:var(--bt-color-text-secondary)}.bt-text-field__icon--left{left:var(--bt-spacing-md)}.bt-text-field__icon--right{right:var(--bt-spacing-md)}.bt-checkbox{display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none;position:relative}.bt-checkbox__input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.bt-checkbox__box{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);display:inline-block;position:relative}.bt-checkbox__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-checkbox--sm .bt-checkbox__box{width:1rem;height:1rem}.bt-checkbox--sm .bt-checkbox__label{font-size:var(--bt-font-size-sm)}.bt-checkbox--lg .bt-checkbox__box{width:1.25rem;height:1.25rem}.bt-checkbox--lg .bt-checkbox__label{font-size:var(--bt-font-size-md)}.bt-checkbox__input:focus-visible+.bt-checkbox__box{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-checkbox__input:disabled+.bt-checkbox__box,.bt-checkbox__input:disabled~.bt-checkbox__label{opacity:.6;cursor:not-allowed}.bt-checkbox__input:checked+.bt-checkbox__box{background:var(--bt-color-primary);border-color:var(--bt-color-primary)}.bt-checkbox__input:checked+.bt-checkbox__box::after{content:"";position:absolute;left:50%;top:50%;width:.28rem;height:.55rem;border:2px solid var(--bt-color-background);border-top:0;border-left:0;transform:translate(-50%, -58%) rotate(45deg)}.bt-radio{position:relative;display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none}.bt-radio__input{position:absolute;inset:0;opacity:0;cursor:pointer;margin:0}.bt-radio__dot{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-full);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);position:relative;display:inline-block}.bt-radio__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-radio--sm .bt-radio__dot{width:1rem;height:1rem}.bt-radio--sm .bt-radio__label{font-size:var(--bt-font-size-sm)}.bt-radio--lg .bt-radio__dot{width:1.25rem;height:1.25rem}.bt-radio--lg .bt-radio__label{font-size:var(--bt-font-size-md)}.bt-radio__input:focus-visible+.bt-radio__dot{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-radio__input:checked+.bt-radio__dot{border-color:var(--bt-color-primary)}.bt-radio__input:checked+.bt-radio__dot::after{content:"";position:absolute;left:50%;top:50%;width:60%;height:60%;transform:translate(-50%, -50%);background:var(--bt-color-primary);border-radius:9999px}.bt-radio__input:disabled+.bt-radio__dot,.bt-radio__input:disabled~.bt-radio__label{opacity:.6;cursor:not-allowed}.bt-switch{position:relative;display:inline-flex;align-items:center;width:40px;height:22px;padding:2px;border-radius:var(--bt-radius-full);background:var(--bt-color-border);transition:background var(--bt-transition-base);cursor:pointer;border:none}.bt-switch__thumb{width:18px;height:18px;background:var(--bt-color-background);border-radius:var(--bt-radius-full);transition:transform var(--bt-transition-base);transform:translateX(0)}.bt-switch--on{background:var(--bt-color-primary)}.bt-switch--on .bt-switch__thumb{transform:translateX(18px)}.bt-switch--sm{width:34px;height:18px}.bt-switch--sm .bt-switch__thumb{width:14px;height:14px}.bt-switch--sm.bt-switch--on .bt-switch__thumb{transform:translateX(16px)}.bt-switch--lg{width:48px;height:26px}.bt-switch--lg .bt-switch__thumb{width:22px;height:22px}.bt-switch--lg.bt-switch--on .bt-switch__thumb{transform:translateX(22px)}.bt-switch--disabled{opacity:.6;cursor:not-allowed}.bt-select{position:relative;display:inline-flex;flex-direction:column;width:100%;gap:var(--bt-spacing-xs);font-family:var(--bt-font-family)}.bt-select__label{font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-select__control{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);cursor:pointer;color:var(--bt-color-text-primary);background:var(--bt-color-background);border-radius:var(--bt-radius-md);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);border:none;text-align:left}.bt-select__control:disabled,.bt-select__control.is-disabled{cursor:not-allowed;opacity:.7;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary)}.bt-select__control--outline{border:1px solid var(--bt-color-border)}.bt-select__control--outline:hover:not(.is-disabled){border-color:var(--bt-color-border-light)}.bt-select__control--outline.is-open{border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-select__control--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-select__control--filled.is-open{background:var(--bt-color-background);border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-select__control--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-select__control--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-select__control--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-select__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bt-select__placeholder{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bt-color-text-tertiary)}.bt-select__icon{display:inline-flex;align-items:center;justify-content:center;color:var(--bt-color-text-secondary);transition:transform var(--bt-transition-base)}.bt-select__icon.is-open{transform:rotate(180deg)}.bt-select__list{position:absolute;z-index:var(--bt-z-modal);top:100%;left:0;width:100%;min-width:100%;box-sizing:border-box;margin-top:var(--bt-spacing-xs);background:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);box-shadow:var(--bt-elevation-2);max-height:18rem;overflow-y:auto;overflow-x:hidden;padding:var(--bt-spacing-xs) 0;list-style:none;margin:var(--bt-spacing-xs) 0 0 0}.bt-select__list--up{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bt-spacing-xs)}.bt-select__option{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);cursor:pointer;color:var(--bt-color-text-primary);background:rgba(0,0,0,0);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal)}.bt-select__option:hover,.bt-select__option.is-active{background:var(--bt-color-background-secondary)}.bt-select__option.is-selected{font-weight:var(--bt-font-weight-medium)}.bt-select__option.is-disabled{cursor:not-allowed;color:var(--bt-color-text-tertiary)}.bt-modal{position:fixed;inset:0;display:none;place-items:center;background:var(--bt-color-overlay);z-index:var(--bt-z-modal)}.bt-modal.is-open{display:grid}.bt-modal__panel{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);box-shadow:var(--bt-elevation-3);max-width:calc(100% - 32px);overflow:hidden}.bt-modal__header{padding:var(--bt-spacing-lg);border-bottom:1px solid var(--bt-color-border);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3}.bt-modal__body{padding:var(--bt-spacing-lg)}.bt-modal__footer{padding:var(--bt-spacing-lg);border-top:1px solid var(--bt-color-border);display:flex;justify-content:flex-end;gap:var(--bt-spacing-sm)}@keyframes bt-alert-fade-in{from{opacity:0}to{opacity:1}}@keyframes bt-alert-slide-up{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.bt-alert__overlay{position:fixed;inset:0;background:var(--bt-color-overlay);display:none;align-items:center;justify-content:center;z-index:var(--bt-z-modal);animation:bt-alert-fade-in var(--bt-transition-base)}.bt-alert__overlay.is-open{display:flex}.bt-alert__modal{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);min-width:320px;max-width:480px;box-shadow:var(--bt-elevation-4);animation:bt-alert-slide-up var(--bt-transition-slow);overflow:hidden}.bt-alert__title{font-size:var(--bt-font-size-lg);font-weight:var(--bt-font-weight-semibold);line-height:var(--bt-line-height-normal);color:var(--bt-color-info);padding:var(--bt-spacing-md) var(--bt-spacing-xl) var(--bt-spacing-xs)}.bt-alert__message{font-size:var(--bt-font-size-base);color:var(--bt-color-text-secondary);padding:var(--bt-spacing-xl);line-height:1.75}.bt-alert__actions{display:flex;gap:var(--bt-spacing-sm);align-items:center;padding:0 var(--bt-spacing-xl) var(--bt-spacing-xl);justify-content:flex-end}.bt-alert--info .bt-alert__title{color:var(--bt-color-info)}.bt-alert--success .bt-alert__title{color:var(--bt-color-success)}.bt-alert--warning .bt-alert__title{color:var(--bt-color-warning)}.bt-alert--error .bt-alert__title{color:var(--bt-color-error)}.bt-card{background:var(--bt-color-background);border-radius:var(--bt-radius-lg)}.bt-card--bordered{border:1px solid var(--bt-color-border)}.bt-card--elevation-1{box-shadow:var(--bt-elevation-1)}.bt-card--elevation-2{box-shadow:var(--bt-elevation-2)}.bt-card--elevation-3{box-shadow:var(--bt-elevation-3)}.bt-card--p-sm{padding:var(--bt-spacing-sm)}.bt-card--p-md{padding:var(--bt-spacing-lg)}.bt-card--p-lg{padding:var(--bt-spacing-2xl)}.bt-card__title{font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3;margin-bottom:var(--bt-spacing-md);color:var(--bt-color-text-primary)}@keyframes bt-spinner-spin{to{transform:rotate(360deg)}}.bt-spinner{display:inline-block;box-sizing:border-box;border-radius:50%;border:2px solid var(--bt-color-border);border-top-color:var(--bt-color-primary);animation:bt-spinner-spin .8s linear infinite}.bt-spinner--sm{width:16px;height:16px}.bt-spinner--md{width:24px;height:24px}.bt-spinner--lg{width:32px;height:32px}.bt-spinner--xl{width:48px;height:48px}.bt-pagination{display:flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);margin-top:var(--bt-spacing-3xl)}.bt-pagination__item{border:1px solid var(--bt-color-border);background:var(--bt-color-background);border-radius:var(--bt-radius-md);padding:6px 10px;min-width:36px;font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-primary);cursor:pointer;transition:background var(--bt-transition-base),border-color var(--bt-transition-base)}.bt-pagination__item:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-pagination__item:disabled{opacity:.5;cursor:not-allowed}.bt-pagination__pages{display:flex;align-items:center;gap:6px}.bt-pagination__page{border:0;background:rgba(0,0,0,0);min-width:36px;height:36px;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary);cursor:pointer;transition:background var(--bt-transition-base),color var(--bt-transition-base)}.bt-pagination__page:hover{background:var(--bt-color-background-secondary);color:var(--bt-color-text-primary)}.bt-pagination__page--active{color:var(--bt-color-text-primary);font-weight:var(--bt-font-weight-semibold)}.bt-pagination__ellipsis{min-width:20px;text-align:center;font-size:var(--bt-font-size-sm);color:var(--bt-color-text-tertiary)}.bt-date-picker{display:flex;flex-direction:column;gap:var(--bt-spacing-xs)}.bt-date-picker__label{color:var(--bt-color-text-primary);margin-bottom:var(--bt-spacing-xs);font-weight:var(--bt-font-weight-medium);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal)}.bt-date-picker__label-required{margin-left:var(--bt-spacing-xs);color:var(--bt-color-error)}.bt-date-picker__fields{display:flex;gap:var(--bt-spacing-sm)}.bt-date-picker__select{min-width:88px;height:44px;padding:0 var(--bt-spacing-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);background-color:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);cursor:pointer;transition:border-color var(--bt-transition-fast),box-shadow var(--bt-transition-fast),background-color var(--bt-transition-fast);appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--bt-color-text-secondary) 50%),linear-gradient(135deg, var(--bt-color-text-secondary) 50%, transparent 50%);background-position:calc(100% - 16px) calc(50% - 3px),calc(100% - 11px) calc(50% - 3px);background-size:5px 5px;background-repeat:no-repeat}.bt-date-picker__select:hover:not(:disabled){border-color:var(--bt-color-primary);background-color:var(--bt-color-background-secondary)}.bt-date-picker__select:focus-visible{outline:none;border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-date-picker__select:disabled{cursor:not-allowed;color:var(--bt-color-text-disabled);background-color:var(--bt-color-background-secondary);border-color:var(--bt-color-border-light)}.bt-date-picker--full-width{width:100%}.bt-date-picker--full-width .bt-date-picker__fields{width:100%}.bt-date-picker--full-width .bt-date-picker__select{flex:1;min-width:0}.bt-file-input{position:relative;display:inline-flex;align-items:center}.bt-file-input:hover .bt-file-input__label{border-color:var(--bt-color-border-light)}.bt-file-input__control{position:absolute;inset:0;opacity:0;cursor:pointer}.bt-file-input__label{border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);background:var(--bt-color-background);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base)}.bt-file-input__control:focus-visible+.bt-file-input__label{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-file-input--disabled{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__control{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__label{opacity:.6;cursor:not-allowed}.bt-file-input--disabled:hover .bt-file-input__label{border-color:var(--bt-color-border)}.bt-toast{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);border-radius:var(--bt-radius-md);box-shadow:var(--bt-elevation-3)}.bt-hidden{display:none !important}.bt-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigtablet/design-system",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.25.0",
|
|
4
4
|
"description": "Bigtablet Design System UI Components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -14,12 +14,8 @@
|
|
|
14
14
|
"types": "./dist/index.d.ts",
|
|
15
15
|
"import": "./dist/index.js"
|
|
16
16
|
},
|
|
17
|
-
"./next": {
|
|
18
|
-
"types": "./dist/next.d.ts",
|
|
19
|
-
"import": "./dist/next.js"
|
|
20
|
-
},
|
|
21
17
|
"./style.css": "./dist/index.css",
|
|
22
|
-
"./scss/token": "./dist/styles/
|
|
18
|
+
"./scss/token": "./dist/styles/token.scss",
|
|
23
19
|
"./vanilla": {
|
|
24
20
|
"style": "./dist/vanilla/bigtablet.min.css",
|
|
25
21
|
"default": "./dist/vanilla/bigtablet.min.js"
|
|
@@ -50,11 +46,8 @@
|
|
|
50
46
|
"test": "vitest run --project unit",
|
|
51
47
|
"test:watch": "vitest --project unit",
|
|
52
48
|
"test:coverage": "vitest run --project unit --coverage",
|
|
49
|
+
"test:storybook": "vitest run --project storybook",
|
|
53
50
|
"chromatic": "npx chromatic --project-token=$CHROMATIC_TOKEN --build-script-name=build:sb",
|
|
54
|
-
"figma:test": "tsx scripts/figma-connect.ts",
|
|
55
|
-
"figma:snapshot": "tsx scripts/figma-snapshot.ts",
|
|
56
|
-
"figma:diff": "tsx scripts/figma-diff.ts",
|
|
57
|
-
"figma:apply": "tsx scripts/figma-apply.ts",
|
|
58
51
|
"size": "size-limit",
|
|
59
52
|
"prepare": "husky"
|
|
60
53
|
},
|
|
@@ -83,6 +76,7 @@
|
|
|
83
76
|
}
|
|
84
77
|
},
|
|
85
78
|
"devDependencies": {
|
|
79
|
+
"@biomejs/biome": "^2.4.10",
|
|
86
80
|
"@commitlint/cli": "^20.5.0",
|
|
87
81
|
"@commitlint/core": "^20.5.0",
|
|
88
82
|
"@semantic-release/changelog": "^6.0.3",
|
|
@@ -90,6 +84,7 @@
|
|
|
90
84
|
"@semantic-release/github": "^12.0.1",
|
|
91
85
|
"@semantic-release/npm": "^13.1.1",
|
|
92
86
|
"@size-limit/preset-small-lib": "^12.0.1",
|
|
87
|
+
"@storybook/addon-a11y": "^10.3.5",
|
|
93
88
|
"@storybook/addon-docs": "^10.3.3",
|
|
94
89
|
"@storybook/addon-vitest": "^10.3.3",
|
|
95
90
|
"@storybook/react": "^10.3.3",
|
|
@@ -108,7 +103,7 @@
|
|
|
108
103
|
"husky": "^9.1.7",
|
|
109
104
|
"jsdom": "^29.0.1",
|
|
110
105
|
"lucide-react": "^1.7.0",
|
|
111
|
-
"next": "^16.2.
|
|
106
|
+
"next": "^16.2.2",
|
|
112
107
|
"playwright": "^1.57.0",
|
|
113
108
|
"react": "^19.2.4",
|
|
114
109
|
"react-dom": "^19.2.4",
|
|
@@ -120,8 +115,7 @@
|
|
|
120
115
|
"tsx": "^4.21.0",
|
|
121
116
|
"typescript": "^6.0.2",
|
|
122
117
|
"vite": "^6.4.1",
|
|
123
|
-
"vitest": "^4.1.2"
|
|
124
|
-
"@biomejs/biome": "^2.4.10"
|
|
118
|
+
"vitest": "^4.1.2"
|
|
125
119
|
},
|
|
126
120
|
"publishConfig": {
|
|
127
121
|
"access": "public",
|
|
@@ -130,7 +124,7 @@
|
|
|
130
124
|
"size-limit": [
|
|
131
125
|
{
|
|
132
126
|
"path": "dist/index.js",
|
|
133
|
-
"limit": "
|
|
127
|
+
"limit": "15 kB"
|
|
134
128
|
},
|
|
135
129
|
{
|
|
136
130
|
"path": "dist/vanilla/bigtablet.min.js",
|
package/dist/next.css
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/* src/ui/navigation/sidebar/style.scss */
|
|
2
|
-
@keyframes skeleton_loading {
|
|
3
|
-
0% {
|
|
4
|
-
background-position: 100% 0;
|
|
5
|
-
}
|
|
6
|
-
100% {
|
|
7
|
-
background-position: 0 0;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
.sidebar {
|
|
11
|
-
display: flex;
|
|
12
|
-
flex-direction: column;
|
|
13
|
-
height: 100%;
|
|
14
|
-
width: 240px;
|
|
15
|
-
background: #FFFFFF;
|
|
16
|
-
border-right: 1px solid #E5E5E5;
|
|
17
|
-
padding: 8px;
|
|
18
|
-
gap: 8px;
|
|
19
|
-
overflow: hidden;
|
|
20
|
-
transition: width 0.3s ease-in-out;
|
|
21
|
-
}
|
|
22
|
-
.sidebar_is_closed {
|
|
23
|
-
width: 56px;
|
|
24
|
-
}
|
|
25
|
-
.sidebar_brand {
|
|
26
|
-
padding: 8px;
|
|
27
|
-
margin-bottom: 8px;
|
|
28
|
-
border-bottom: 1px solid #E5E5E5;
|
|
29
|
-
}
|
|
30
|
-
.sidebar_brand_link {
|
|
31
|
-
display: flex;
|
|
32
|
-
align-items: center;
|
|
33
|
-
justify-content: space-between;
|
|
34
|
-
align-items: center;
|
|
35
|
-
}
|
|
36
|
-
.sidebar_nav {
|
|
37
|
-
display: grid;
|
|
38
|
-
gap: 4px;
|
|
39
|
-
}
|
|
40
|
-
.sidebar_group {
|
|
41
|
-
display: grid;
|
|
42
|
-
gap: 4px;
|
|
43
|
-
}
|
|
44
|
-
.sidebar_item {
|
|
45
|
-
border: none;
|
|
46
|
-
display: flex;
|
|
47
|
-
align-items: center;
|
|
48
|
-
justify-content: space-between;
|
|
49
|
-
padding: 8px 12px;
|
|
50
|
-
border-radius: 8px;
|
|
51
|
-
color: #121212;
|
|
52
|
-
cursor: pointer;
|
|
53
|
-
background: transparent;
|
|
54
|
-
transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
|
|
55
|
-
}
|
|
56
|
-
.sidebar_item:hover {
|
|
57
|
-
background: #F4F4F4;
|
|
58
|
-
color: #121212;
|
|
59
|
-
}
|
|
60
|
-
.sidebar_item_active {
|
|
61
|
-
background: #FFFFFF;
|
|
62
|
-
color: #121212;
|
|
63
|
-
box-shadow: inset 0 0 0 1px #E5E5E5;
|
|
64
|
-
}
|
|
65
|
-
.sidebar_item_left {
|
|
66
|
-
display: flex;
|
|
67
|
-
align-items: center;
|
|
68
|
-
gap: 8px;
|
|
69
|
-
}
|
|
70
|
-
.sidebar_item_right {
|
|
71
|
-
display: flex;
|
|
72
|
-
align-items: center;
|
|
73
|
-
}
|
|
74
|
-
.sidebar_icon {
|
|
75
|
-
display: grid;
|
|
76
|
-
place-items: center;
|
|
77
|
-
}
|
|
78
|
-
.sidebar_chevron {
|
|
79
|
-
transition: transform 0.2s ease-in-out;
|
|
80
|
-
}
|
|
81
|
-
.sidebar_chevron_open {
|
|
82
|
-
transform: rotate(180deg);
|
|
83
|
-
}
|
|
84
|
-
.sidebar_label {
|
|
85
|
-
font-size: 16px;
|
|
86
|
-
white-space: nowrap;
|
|
87
|
-
}
|
|
88
|
-
.sidebar_sub {
|
|
89
|
-
display: grid;
|
|
90
|
-
gap: 4px;
|
|
91
|
-
padding-left: 12px;
|
|
92
|
-
max-height: 0;
|
|
93
|
-
opacity: 0;
|
|
94
|
-
overflow: hidden;
|
|
95
|
-
transform: translateY(-4px);
|
|
96
|
-
transition:
|
|
97
|
-
max-height 0.3s ease-in-out,
|
|
98
|
-
opacity 0.2s ease-in-out,
|
|
99
|
-
transform 0.2s ease-in-out;
|
|
100
|
-
}
|
|
101
|
-
.sidebar_sub_open {
|
|
102
|
-
max-height: 500px;
|
|
103
|
-
opacity: 1;
|
|
104
|
-
transform: translateY(0);
|
|
105
|
-
}
|
|
106
|
-
.sidebar_sub_item {
|
|
107
|
-
display: flex;
|
|
108
|
-
align-items: center;
|
|
109
|
-
gap: 12px;
|
|
110
|
-
padding: 4px 12px;
|
|
111
|
-
border-radius: 8px;
|
|
112
|
-
color: #121212;
|
|
113
|
-
cursor: pointer;
|
|
114
|
-
background: transparent;
|
|
115
|
-
transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
|
|
116
|
-
}
|
|
117
|
-
.sidebar_sub_item:hover {
|
|
118
|
-
background: #F4F4F4;
|
|
119
|
-
color: #121212;
|
|
120
|
-
}
|
|
121
|
-
.sidebar_sub_item_active {
|
|
122
|
-
color: #121212;
|
|
123
|
-
font-weight: 500;
|
|
124
|
-
}
|
|
125
|
-
.sidebar_sub_icon {
|
|
126
|
-
display: grid;
|
|
127
|
-
place-items: center;
|
|
128
|
-
color: #121212;
|
|
129
|
-
}
|
|
130
|
-
.sidebar_sub_label {
|
|
131
|
-
font-size: 14px;
|
|
132
|
-
white-space: nowrap;
|
|
133
|
-
}
|
package/dist/next.d.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { LucideIcon } from 'lucide-react';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
|
|
5
|
-
type MatchMode = "startsWith" | "exact";
|
|
6
|
-
interface SidebarLinkItem {
|
|
7
|
-
/** 항목 타입 (생략 시 "link"로 간주) */
|
|
8
|
-
type?: "link";
|
|
9
|
-
/** 링크 경로 */
|
|
10
|
-
href: string;
|
|
11
|
-
/** 메뉴 항목에 표시할 라벨 */
|
|
12
|
-
label: React.ReactNode;
|
|
13
|
-
/** 메뉴 항목 앞에 표시할 아이콘 */
|
|
14
|
-
icon?: LucideIcon;
|
|
15
|
-
}
|
|
16
|
-
interface SidebarGroupItem {
|
|
17
|
-
/** 항목 타입 ("group"으로 고정) */
|
|
18
|
-
type: "group";
|
|
19
|
-
/** 그룹 고유 식별자 */
|
|
20
|
-
id: string;
|
|
21
|
-
/** 그룹 헤더에 표시할 라벨 */
|
|
22
|
-
label: React.ReactNode;
|
|
23
|
-
/** 그룹 헤더 앞에 표시할 아이콘 */
|
|
24
|
-
icon?: LucideIcon;
|
|
25
|
-
/** 그룹 하위 링크 항목 목록 */
|
|
26
|
-
children: SidebarLinkItem[];
|
|
27
|
-
}
|
|
28
|
-
type SidebarItem = SidebarLinkItem | SidebarGroupItem;
|
|
29
|
-
interface SidebarProps {
|
|
30
|
-
/** 사이드바에 표시할 메뉴 항목 목록 */
|
|
31
|
-
items?: SidebarItem[];
|
|
32
|
-
/** 현재 활성 경로 (활성 메뉴 항목 하이라이트에 사용) */
|
|
33
|
-
activePath?: string;
|
|
34
|
-
/** 메뉴 항목 클릭 시 호출되는 콜백 */
|
|
35
|
-
onItemSelect?: (href: string) => void;
|
|
36
|
-
/** 루트 요소에 추가할 className */
|
|
37
|
-
className?: string;
|
|
38
|
-
/** 루트 요소에 적용할 인라인 스타일 */
|
|
39
|
-
style?: React.CSSProperties;
|
|
40
|
-
/** 활성 경로 매칭 방식 (기본값: "startsWith") */
|
|
41
|
-
match?: MatchMode;
|
|
42
|
-
/** 브랜드 로고 클릭 시 이동할 경로 (기본값: "/main") */
|
|
43
|
-
brandHref?: string;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* 사이드바를 렌더링한다.
|
|
47
|
-
* 활성 경로를 기준으로 메뉴 상태를 계산하고 그룹 열림/닫힘을 관리한다.
|
|
48
|
-
* @param props 사이드바 속성
|
|
49
|
-
* @returns 렌더링된 사이드바 UI
|
|
50
|
-
*/
|
|
51
|
-
declare const Sidebar: ({ items, activePath, onItemSelect, className, style, match, brandHref, }: SidebarProps) => react_jsx_runtime.JSX.Element;
|
|
52
|
-
|
|
53
|
-
export { Sidebar, type SidebarItem, type SidebarProps };
|
package/dist/next.js
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import './next.css';
|
|
3
|
-
import { ChevronDown, CornerDownRight } from 'lucide-react';
|
|
4
|
-
import Image from 'next/image';
|
|
5
|
-
import Link from 'next/link';
|
|
6
|
-
import * as React from 'react';
|
|
7
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
8
|
-
|
|
9
|
-
// src/ui/navigation/sidebar/index.tsx
|
|
10
|
-
var Sidebar = ({
|
|
11
|
-
items = [],
|
|
12
|
-
activePath,
|
|
13
|
-
onItemSelect,
|
|
14
|
-
className,
|
|
15
|
-
style,
|
|
16
|
-
match = "startsWith",
|
|
17
|
-
brandHref = "/main"
|
|
18
|
-
}) => {
|
|
19
|
-
const isActive = React.useCallback(
|
|
20
|
-
(href) => {
|
|
21
|
-
if (!activePath) return false;
|
|
22
|
-
return match === "exact" ? activePath === href : activePath.startsWith(href);
|
|
23
|
-
},
|
|
24
|
-
[activePath, match]
|
|
25
|
-
);
|
|
26
|
-
const [openGroups, setOpenGroups] = React.useState([]);
|
|
27
|
-
const [isOpen, setIsOpen] = React.useState(true);
|
|
28
|
-
const toggleSidebar = (next) => {
|
|
29
|
-
setIsOpen(next);
|
|
30
|
-
localStorage.setItem("isOpen", JSON.stringify(next));
|
|
31
|
-
};
|
|
32
|
-
React.useEffect(() => {
|
|
33
|
-
if (!activePath) return;
|
|
34
|
-
const autoOpen = items.filter(
|
|
35
|
-
(item) => item.type === "group" && item.children.some((c) => isActive(c.href))
|
|
36
|
-
).map((g) => g.id);
|
|
37
|
-
setOpenGroups((prev) => Array.from(/* @__PURE__ */ new Set([...prev, ...autoOpen])));
|
|
38
|
-
}, [activePath, items, isActive]);
|
|
39
|
-
const toggleGroup = (id) => {
|
|
40
|
-
setOpenGroups((prev) => prev.includes(id) ? prev.filter((v) => v !== id) : [...prev, id]);
|
|
41
|
-
};
|
|
42
|
-
const sidebarClassName = [
|
|
43
|
-
"sidebar",
|
|
44
|
-
isOpen ? "sidebar_is_open" : "sidebar_is_closed",
|
|
45
|
-
className ?? ""
|
|
46
|
-
].filter(Boolean).join(" ");
|
|
47
|
-
return /* @__PURE__ */ jsx("aside", { className: sidebarClassName, style, children: isOpen ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
48
|
-
/* @__PURE__ */ jsxs("div", { className: "sidebar_brand", children: [
|
|
49
|
-
/* @__PURE__ */ jsxs(Link, { href: brandHref, className: "sidebar_brand_link", children: [
|
|
50
|
-
/* @__PURE__ */ jsx("div", {}),
|
|
51
|
-
/* @__PURE__ */ jsx(
|
|
52
|
-
Image,
|
|
53
|
-
{
|
|
54
|
-
src: "/images/logo/bigtablet.png",
|
|
55
|
-
alt: "Bigtablet",
|
|
56
|
-
width: 96,
|
|
57
|
-
height: 30,
|
|
58
|
-
priority: true
|
|
59
|
-
}
|
|
60
|
-
)
|
|
61
|
-
] }),
|
|
62
|
-
/* @__PURE__ */ jsx(
|
|
63
|
-
"button",
|
|
64
|
-
{
|
|
65
|
-
type: "button",
|
|
66
|
-
className: "sidebar_close_btn",
|
|
67
|
-
onClick: () => toggleSidebar(false),
|
|
68
|
-
children: /* @__PURE__ */ jsx(
|
|
69
|
-
Image,
|
|
70
|
-
{
|
|
71
|
-
src: "/images/sidebar/arrow-close.svg",
|
|
72
|
-
alt: "\uC0AC\uC774\uB4DC\uBC14 \uB2EB\uAE30",
|
|
73
|
-
width: 24,
|
|
74
|
-
height: 24
|
|
75
|
-
}
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
)
|
|
79
|
-
] }),
|
|
80
|
-
/* @__PURE__ */ jsx("nav", { className: "sidebar_nav", "aria-label": "\uBA54\uC778 \uBA54\uB274", children: items.map((item) => {
|
|
81
|
-
if (item.type === "group") {
|
|
82
|
-
const open = openGroups.includes(item.id);
|
|
83
|
-
const subClassName = ["sidebar_sub", open && "sidebar_sub_open"].filter(Boolean).join(" ");
|
|
84
|
-
const chevronClassName = ["sidebar_chevron", open && "sidebar_chevron_open"].filter(Boolean).join(" ");
|
|
85
|
-
const subId = `sidebar_sub_${item.id}`;
|
|
86
|
-
return /* @__PURE__ */ jsxs("div", { className: "sidebar_group", children: [
|
|
87
|
-
/* @__PURE__ */ jsxs(
|
|
88
|
-
"button",
|
|
89
|
-
{
|
|
90
|
-
type: "button",
|
|
91
|
-
className: "sidebar_item",
|
|
92
|
-
"aria-expanded": open,
|
|
93
|
-
"aria-controls": subId,
|
|
94
|
-
onClick: () => toggleGroup(item.id),
|
|
95
|
-
children: [
|
|
96
|
-
/* @__PURE__ */ jsxs("div", { className: "sidebar_item_left", children: [
|
|
97
|
-
item.icon && /* @__PURE__ */ jsx("span", { className: "sidebar_icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx(item.icon, { size: 16 }) }),
|
|
98
|
-
/* @__PURE__ */ jsx("span", { className: "sidebar_label", children: item.label })
|
|
99
|
-
] }),
|
|
100
|
-
/* @__PURE__ */ jsx("span", { className: "sidebar_item_right", "aria-hidden": "true", children: /* @__PURE__ */ jsx(ChevronDown, { size: 16, className: chevronClassName }) })
|
|
101
|
-
]
|
|
102
|
-
}
|
|
103
|
-
),
|
|
104
|
-
/* @__PURE__ */ jsx("div", { id: subId, className: subClassName, children: item.children.map((child) => {
|
|
105
|
-
const active2 = isActive(child.href);
|
|
106
|
-
const subItemClassName = [
|
|
107
|
-
"sidebar_sub_item",
|
|
108
|
-
active2 && "sidebar_sub_item_active"
|
|
109
|
-
].filter(Boolean).join(" ");
|
|
110
|
-
return /* @__PURE__ */ jsxs(
|
|
111
|
-
Link,
|
|
112
|
-
{
|
|
113
|
-
href: child.href,
|
|
114
|
-
className: subItemClassName,
|
|
115
|
-
"aria-current": active2 ? "page" : void 0,
|
|
116
|
-
tabIndex: open ? void 0 : -1,
|
|
117
|
-
onClick: () => onItemSelect?.(child.href),
|
|
118
|
-
children: [
|
|
119
|
-
/* @__PURE__ */ jsx("span", { className: "sidebar_sub_icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx(CornerDownRight, { size: 14 }) }),
|
|
120
|
-
/* @__PURE__ */ jsx("span", { className: "sidebar_sub_label", children: child.label })
|
|
121
|
-
]
|
|
122
|
-
},
|
|
123
|
-
child.href
|
|
124
|
-
);
|
|
125
|
-
}) })
|
|
126
|
-
] }, item.id);
|
|
127
|
-
}
|
|
128
|
-
const active = isActive(item.href);
|
|
129
|
-
const itemClassName = ["sidebar_item", active && "sidebar_item_active"].filter(Boolean).join(" ");
|
|
130
|
-
return /* @__PURE__ */ jsx(
|
|
131
|
-
Link,
|
|
132
|
-
{
|
|
133
|
-
href: item.href,
|
|
134
|
-
className: itemClassName,
|
|
135
|
-
"aria-current": active ? "page" : void 0,
|
|
136
|
-
onClick: () => onItemSelect?.(item.href),
|
|
137
|
-
children: /* @__PURE__ */ jsxs("div", { className: "sidebar_item_left", children: [
|
|
138
|
-
item.icon && /* @__PURE__ */ jsx("span", { className: "sidebar_icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx(item.icon, { size: 16 }) }),
|
|
139
|
-
/* @__PURE__ */ jsx("span", { className: "sidebar_label", children: item.label })
|
|
140
|
-
] })
|
|
141
|
-
},
|
|
142
|
-
item.href
|
|
143
|
-
);
|
|
144
|
-
}) })
|
|
145
|
-
] }) : /* @__PURE__ */ jsx("button", { type: "button", className: "sidebar_open_btn", onClick: () => toggleSidebar(true), children: /* @__PURE__ */ jsx(Image, { src: "/images/sidebar/menu.svg", alt: "\uC0AC\uC774\uB4DC\uBC14 \uC5F4\uAE30", width: 24, height: 24 }) }) });
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
export { Sidebar };
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
$shadow_level1: 0 1px 1px -1px rgba(0, 0, 0, 0.20), 0 3px 3px 0px rgba(0, 0, 0, 0.12);
|
|
2
|
-
$shadow_level2: 0 2px 2px -2px rgba(0, 0, 0, 0.20), 0 6px 6px 0px rgba(0, 0, 0, 0.12);
|
|
3
|
-
$shadow_level3: 0 3px 3px -3px rgba(0, 0, 0, 0.20), 0 9px 9px 0px rgba(0, 0, 0, 0.12);
|
|
4
|
-
$shadow_level4: 0 5px 5px -5px rgba(0, 0, 0, 0.20), 0 15px 15px 0px rgba(0, 0, 0, 0.12);
|
|
5
|
-
$shadow_level5: 0 8px 10px -5px rgba(0, 0, 0, 0.20), 0 20px 20px 0px rgba(0, 0, 0, 0.12);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|