@nextlevel_korea/design-system 1.1.3 → 1.1.4

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 CHANGED
@@ -241,7 +241,7 @@ npm run storybook
241
241
 
242
242
  ### Header
243
243
 
244
- 커스터마이징 가능한 로고가 있는 유연한 헤더 컴포넌트입니다.
244
+ 커스터마이징 가능한 로고가 있는 유연한 헤더 컴포넌트입니다. 모든 화면 크기에서 최적화된 반응형 디자인을 제공합니다.
245
245
 
246
246
  ```tsx
247
247
  import { Header } from '@nextlevel_korea/design-system';
@@ -262,17 +262,26 @@ import '@nextlevel_korea/design-system/styles'; // 필수!
262
262
  - `logo` (string, optional) - 로고 이미지 URL
263
263
  - `title` (string, optional) - 헤더 제목
264
264
 
265
- **스타일 클래스:**
265
+ **반응형 스타일 클래스:**
266
266
 
267
- - `flex items-center justify-between` - 기본 레이아웃
268
- - `h-8` - 로고 높이
269
- - `text-xl text-success font-bold` - 제목 스타일
267
+ - **레이아웃**: `flex items-center justify-between`
268
+ - **패딩**: `px-4 py-3 sm:px-6 lg:px-8` (화면 크기에 따라 패딩 증가)
269
+ - **로고**: `h-6 sm:h-8 md:h-10 lg:h-12` (화면 크기에 따라 높이 증가)
270
+ - **제목**: `text-lg sm:text-xl md:text-2xl lg:text-3xl` (화면 크기에 따라 폰트 크기 증가)
271
+ - **제목 색상**: `text-success font-bold`
272
+
273
+ **반응형 동작:**
274
+
275
+ - **모바일 (320px-639px)**: 컴팩트한 레이아웃, 작은 로고와 텍스트
276
+ - **태블릿 (640px-1023px)**: 중간 크기 로고와 텍스트, 우측 텍스트 표시
277
+ - **데스크톱 (1024px+)**: 큰 로고와 텍스트, 넓은 패딩
270
278
 
271
279
  **Storybook 예제:**
272
280
 
273
281
  - 플레이스홀더 로고가 있는 기본 헤더
274
282
  - 커스텀 브랜드 헤더
275
283
  - 작은 컴팩트 헤더
284
+ - 반응형 테스트 (다양한 화면 크기)
276
285
 
277
286
  ## 🛠️ 개발
278
287
 
@@ -368,6 +377,133 @@ export const Primary: Story = {
368
377
  - **접근성** - WCAG 2.1 준수 컴포넌트
369
378
  - **커스터마이징 가능** - 쉬운 테마링과 커스터마이징
370
379
 
380
+ ## 📱 반응형 브레이크포인트
381
+
382
+ 이 디자인 시스템은 다음과 같은 반응형 브레이크포인트를 지원합니다:
383
+
384
+ ### 기본 브레이크포인트
385
+
386
+ - `xs`: 475px (초소형 모바일)
387
+ - `sm`: 640px (소형 모바일)
388
+ - `md`: 768px (태블릿)
389
+ - `lg`: 1024px (노트북)
390
+ - `xl`: 1280px (데스크톱)
391
+ - `2xl`: 1536px (대형 데스크톱)
392
+ - `3xl`: 1920px (초대형 화면)
393
+ - `4xl`: 2560px (울트라 와이드)
394
+ - `5xl`: 3840px (4K 이상)
395
+
396
+ ### 의미적 브레이크포인트
397
+
398
+ - `mobile`: 320px (모바일)
399
+ - `tablet`: 768px (태블릿)
400
+ - `laptop`: 1024px (노트북)
401
+ - `desktop`: 1280px (데스크톱)
402
+ - `wide`: 1536px (와이드 스크린)
403
+ - `ultra-wide`: 1920px (울트라 와이드)
404
+
405
+ ### 사용 예제
406
+
407
+ ```tsx
408
+ // 반응형 헤더 컴포넌트
409
+ <header
410
+ className="
411
+ px-4 py-3 // 기본 패딩
412
+ sm:px-6 // 640px 이상에서 패딩 증가
413
+ lg:px-8 // 1024px 이상에서 패딩 더 증가
414
+ "
415
+ >
416
+ <img
417
+ className="
418
+ h-6 // 기본 높이
419
+ sm:h-8 // 640px 이상에서 높이 증가
420
+ md:h-10 // 768px 이상에서 높이 증가
421
+ lg:h-12 // 1024px 이상에서 높이 증가
422
+ "
423
+ src="/logo.png"
424
+ alt="Logo"
425
+ />
426
+ <h1
427
+ className="
428
+ text-lg // 기본 폰트 크기
429
+ sm:text-xl // 640px 이상에서 폰트 크기 증가
430
+ md:text-2xl // 768px 이상에서 폰트 크기 증가
431
+ lg:text-3xl // 1024px 이상에서 폰트 크기 증가
432
+ "
433
+ >
434
+ 제목
435
+ </h1>
436
+ </header>
437
+ ```
438
+
439
+ ### 반응형 유틸리티 클래스
440
+
441
+ ```tsx
442
+ // 숨김/표시
443
+ <div className="hidden sm:block">태블릿 이상에서만 표시</div>
444
+ <div className="block sm:hidden">모바일에서만 표시</div>
445
+
446
+ // 그리드 시스템
447
+ <div className="
448
+ grid
449
+ grid-cols-1 // 모바일: 1열
450
+ sm:grid-cols-2 // 태블릿: 2열
451
+ md:grid-cols-3 // 노트북: 3열
452
+ lg:grid-cols-4 // 데스크톱: 4열
453
+ xl:grid-cols-5 // 대형 화면: 5열
454
+ gap-4
455
+ ">
456
+ {/* 그리드 아이템들 */}
457
+ </div>
458
+
459
+ // 텍스트 크기
460
+ <p className="
461
+ text-sm // 기본: 작은 텍스트
462
+ sm:text-base // 태블릿: 기본 텍스트
463
+ md:text-lg // 노트북: 큰 텍스트
464
+ lg:text-xl // 데스크톱: 더 큰 텍스트
465
+ ">
466
+ 반응형 텍스트
467
+ </p>
468
+
469
+ // 최대 너비 (Max Width)
470
+ <div className="
471
+ w-full // 전체 너비
472
+ max-w-xs // 320px
473
+ max-w-sm // 384px
474
+ max-w-md // 448px
475
+ max-w-lg // 512px
476
+ max-w-xl // 576px
477
+ max-w-2xl // 672px
478
+ max-w-3xl // 768px
479
+ max-w-4xl // 896px
480
+ max-w-5xl // 1024px
481
+ max-w-6xl // 1152px
482
+ max-w-7xl // 1280px
483
+ max-w-full // 100%
484
+ max-w-screen-sm // 640px
485
+ max-w-screen-md // 768px
486
+ max-w-screen-lg // 1024px
487
+ max-w-screen-xl // 1280px
488
+ max-w-screen-2xl // 1536px
489
+ ">
490
+ 컨테이너
491
+ </div>
492
+
493
+ // 반응형 최대 너비
494
+ <div className="
495
+ w-full
496
+ max-w-xs // 모바일: 320px
497
+ sm:max-w-md // 태블릿: 448px
498
+ md:max-w-lg // 노트북: 512px
499
+ lg:max-w-xl // 데스크톱: 576px
500
+ xl:max-w-2xl // 대형 화면: 672px
501
+ mx-auto // 중앙 정렬
502
+ ">
503
+ 반응형 컨테이너
504
+ </div>
505
+ ```
506
+
371
507
  ## 📚 Storybook 애드온
372
508
 
373
509
  우리 Storybook은 다음으로 구성되어 있습니다:
@@ -1,7 +1,42 @@
1
1
  import React from 'react';
2
2
  export interface IProps {
3
3
  logo?: string;
4
- title?: string;
4
+ navList?: {
5
+ idx: number;
6
+ name: string;
7
+ path: string;
8
+ sub?: {
9
+ idx: number;
10
+ name: string;
11
+ path: string;
12
+ }[];
13
+ }[];
14
+ sidebarPosition?: 'left' | 'right';
15
+ colors?: {
16
+ headerBg?: string;
17
+ sidebarBg?: string;
18
+ sidebarGradientFrom?: string;
19
+ sidebarGradientTo?: string;
20
+ dropdownBg?: string;
21
+ submenuBg?: string;
22
+ titleText?: string;
23
+ navText?: string;
24
+ navTextHover?: string;
25
+ sidebarTitleText?: string;
26
+ sidebarNavText?: string;
27
+ sidebarNavTextHover?: string;
28
+ submenuText?: string;
29
+ submenuTextHover?: string;
30
+ primary?: string;
31
+ primaryDark?: string;
32
+ accent?: string;
33
+ border?: string;
34
+ dropdownBorder?: string;
35
+ shadow?: string;
36
+ sidebarShadow?: string;
37
+ overlayBg?: string;
38
+ overlayOpacity?: string;
39
+ };
5
40
  }
6
41
  declare const Header: React.FC<IProps>;
7
42
  export default Header;
@@ -1 +1 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/Header/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAQ5B,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/Header/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACrD,EAAE,CAAC;IAEJ,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEnC,MAAM,CAAC,EAAE;QAEP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAE1B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QAEvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CA0X5B,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -4,4 +4,6 @@ declare const meta: Meta<typeof Header>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof meta>;
6
6
  export declare const Default: Story;
7
+ export declare const CustomColors: Story;
8
+ export declare const DarkTheme: Story;
7
9
  //# sourceMappingURL=Header.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Header.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Header/Header.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAiB7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC"}
1
+ {"version":3,"file":"Header.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Header/Header.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAqB7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAmCnC,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KA8B1B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KA8BvB,CAAC"}
Binary file
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ee=require("react");var P={exports:{}},R={};/**
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("react");var W={exports:{}},R={};/**
2
2
  * @license React
3
3
  * react-jsx-runtime.production.js
4
4
  *
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
- */var F;function re(){if(F)return R;F=1;var s=Symbol.for("react.transitional.element"),i=Symbol.for("react.fragment");function d(m,o,c){var E=null;if(c!==void 0&&(E=""+c),o.key!==void 0&&(E=""+o.key),"key"in o){c={};for(var b in o)b!=="key"&&(c[b]=o[b])}else c=o;return o=c.ref,{$$typeof:s,type:m,key:E,ref:o!==void 0?o:null,props:c}}return R.Fragment=i,R.jsx=d,R.jsxs=d,R}var _={};/**
9
+ */var J;function re(){if(J)return R;J=1;var f=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function w(p,c,d){var u=null;if(d!==void 0&&(u=""+d),c.key!==void 0&&(u=""+c.key),"key"in c){d={};for(var b in c)b!=="key"&&(d[b]=c[b])}else d=c;return c=d.ref,{$$typeof:f,type:p,key:u,ref:c!==void 0?c:null,props:d}}return R.Fragment=s,R.jsx=w,R.jsxs=w,R}var $={};/**
10
10
  * @license React
11
11
  * react-jsx-runtime.development.js
12
12
  *
@@ -14,9 +14,9 @@
14
14
  *
15
15
  * This source code is licensed under the MIT license found in the
16
16
  * LICENSE file in the root directory of this source tree.
17
- */var D;function te(){return D||(D=1,process.env.NODE_ENV!=="production"&&function(){function s(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===Z?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case T:return"Fragment";case q:return"Profiler";case U:return"StrictMode";case J:return"Suspense";case X:return"SuspenseList";case B:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case W:return"Portal";case V:return(e.displayName||"Context")+".Provider";case z:return(e._context.displayName||"Context")+".Consumer";case G:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case H:return r=e.displayName||null,r!==null?r:s(e.type)||"Memo";case h:r=e._payload,e=e._init;try{return s(e(r))}catch{}}return null}function i(e){return""+e}function d(e){try{i(e);var r=!1}catch{r=!0}if(r){r=console;var t=r.error,n=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return t.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",n),i(e)}}function m(e){if(e===T)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===h)return"<...>";try{var r=s(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function o(){var e=p.A;return e===null?null:e.getOwner()}function c(){return Error("react-stack-top-frame")}function E(e){if(y.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function b(e,r){function t(){N||(N=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",r))}t.isReactWarning=!0,Object.defineProperty(e,"key",{get:t,configurable:!0})}function L(){var e=s(this.type);return C[e]||(C[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function M(e,r,t,n,l,u,O,S){return t=u.ref,e={$$typeof:g,type:e,key:r,props:u,_owner:l},(t!==void 0?t:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:L}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:O}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:S}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function x(e,r,t,n,l,u,O,S){var a=r.children;if(a!==void 0)if(n)if(Q(a)){for(n=0;n<a.length;n++)w(a[n]);Object.freeze&&Object.freeze(a)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else w(a);if(y.call(r,"key")){a=s(e);var f=Object.keys(r).filter(function(K){return K!=="key"});n=0<f.length?"{key: someKey, "+f.join(": ..., ")+": ...}":"{key: someKey}",$[a+n]||(f=0<f.length?"{"+f.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
17
+ */var X;function te(){return X||(X=1,process.env.NODE_ENV!=="production"&&function(){function f(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===Q?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case E:return"Fragment";case P:return"Profiler";case C:return"StrictMode";case m:return"Suspense";case N:return"SuspenseList";case Z:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case t:return"Portal";case S:return(e.displayName||"Context")+".Provider";case _:return(e._context.displayName||"Context")+".Consumer";case a:var o=e.render;return e=e.displayName,e||(e=o.displayName||o.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case L:return o=e.displayName||null,o!==null?o:f(e.type)||"Memo";case H:o=e._payload,e=e._init;try{return f(e(o))}catch{}}return null}function s(e){return""+e}function w(e){try{s(e);var o=!1}catch{o=!0}if(o){o=console;var n=o.error,l=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return n.call(o,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",l),s(e)}}function p(e){if(e===E)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===H)return"<...>";try{var o=f(e);return o?"<"+o+">":"<...>"}catch{return"<...>"}}function c(){var e=B.A;return e===null?null:e.getOwner()}function d(){return Error("react-stack-top-frame")}function u(e){if(I.call(e,"key")){var o=Object.getOwnPropertyDescriptor(e,"key").get;if(o&&o.isReactWarning)return!1}return e.key!==void 0}function b(e,o){function n(){z||(z=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",o))}n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function k(){var e=f(this.type);return G[e]||(G[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function O(e,o,n,l,g,x,M,Y){return n=x.ref,e={$$typeof:A,type:e,key:o,props:x,_owner:g},(n!==void 0?n:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:k}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:M}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:Y}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function T(e,o,n,l,g,x,M,Y){var i=o.children;if(i!==void 0)if(l)if(K(i)){for(l=0;l<i.length;l++)y(i[l]);Object.freeze&&Object.freeze(i)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else y(i);if(I.call(o,"key")){i=f(e);var j=Object.keys(o).filter(function(ee){return ee!=="key"});l=0<j.length?"{key: someKey, "+j.join(": ..., ")+": ...}":"{key: someKey}",V[i+l]||(j=0<j.length?"{"+j.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
18
18
  let props = %s;
19
19
  <%s {...props} />
20
20
  React keys must be passed directly to JSX without using spread:
21
21
  let props = %s;
22
- <%s key={someKey} {...props} />`,n,a,f,a),$[a+n]=!0)}if(a=null,t!==void 0&&(d(t),a=""+t),E(r)&&(d(r.key),a=""+r.key),"key"in r){t={};for(var j in r)j!=="key"&&(t[j]=r[j])}else t=r;return a&&b(t,typeof e=="function"?e.displayName||e.name||"Unknown":e),M(e,a,u,l,o(),t,O,S)}function w(e){typeof e=="object"&&e!==null&&e.$$typeof===g&&e._store&&(e._store.validated=1)}var v=ee,g=Symbol.for("react.transitional.element"),W=Symbol.for("react.portal"),T=Symbol.for("react.fragment"),U=Symbol.for("react.strict_mode"),q=Symbol.for("react.profiler"),z=Symbol.for("react.consumer"),V=Symbol.for("react.context"),G=Symbol.for("react.forward_ref"),J=Symbol.for("react.suspense"),X=Symbol.for("react.suspense_list"),H=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),B=Symbol.for("react.activity"),Z=Symbol.for("react.client.reference"),p=v.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,y=Object.prototype.hasOwnProperty,Q=Array.isArray,k=console.createTask?console.createTask:function(){return null};v={"react-stack-bottom-frame":function(e){return e()}};var N,C={},Y=v["react-stack-bottom-frame"].bind(v,c)(),I=k(m(c)),$={};_.Fragment=T,_.jsx=function(e,r,t,n,l){var u=1e4>p.recentlyCreatedOwnerStacks++;return x(e,r,t,!1,n,l,u?Error("react-stack-top-frame"):Y,u?k(m(e)):I)},_.jsxs=function(e,r,t,n,l){var u=1e4>p.recentlyCreatedOwnerStacks++;return x(e,r,t,!0,n,l,u?Error("react-stack-top-frame"):Y,u?k(m(e)):I)}}()),_}process.env.NODE_ENV==="production"?P.exports=re():P.exports=te();var A=P.exports;const ne=({logo:s,title:i})=>A.jsxs("header",{className:"flex items-center justify-between",children:[s&&A.jsx("img",{src:s,alt:"Logo",className:"h-8"}),i&&A.jsx("h1",{className:"text-xl text-success font-bold",children:i}),"배포테스트"]});exports.Header=ne;
22
+ <%s key={someKey} {...props} />`,l,i,j,i),V[i+l]=!0)}if(i=null,n!==void 0&&(w(n),i=""+n),u(o)&&(w(o.key),i=""+o.key),"key"in o){n={};for(var F in o)F!=="key"&&(n[F]=o[F])}else n=o;return i&&b(n,typeof e=="function"?e.displayName||e.name||"Unknown":e),O(e,i,x,g,c(),n,M,Y)}function y(e){typeof e=="object"&&e!==null&&e.$$typeof===A&&e._store&&(e._store.validated=1)}var h=v,A=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),C=Symbol.for("react.strict_mode"),P=Symbol.for("react.profiler"),_=Symbol.for("react.consumer"),S=Symbol.for("react.context"),a=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),N=Symbol.for("react.suspense_list"),L=Symbol.for("react.memo"),H=Symbol.for("react.lazy"),Z=Symbol.for("react.activity"),Q=Symbol.for("react.client.reference"),B=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,I=Object.prototype.hasOwnProperty,K=Array.isArray,D=console.createTask?console.createTask:function(){return null};h={"react-stack-bottom-frame":function(e){return e()}};var z,G={},U=h["react-stack-bottom-frame"].bind(h,d)(),q=D(p(d)),V={};$.Fragment=E,$.jsx=function(e,o,n,l,g){var x=1e4>B.recentlyCreatedOwnerStacks++;return T(e,o,n,!1,l,g,x?Error("react-stack-top-frame"):U,x?D(p(e)):q)},$.jsxs=function(e,o,n,l,g){var x=1e4>B.recentlyCreatedOwnerStacks++;return T(e,o,n,!0,l,g,x?Error("react-stack-top-frame"):U,x?D(p(e)):q)}}()),$}process.env.NODE_ENV==="production"?W.exports=re():W.exports=te();var r=W.exports;const oe=({logo:f,navList:s,colors:w,sidebarPosition:p="left"})=>{const[c,d]=v.useState(null),[u,b]=v.useState(!1),[k,O]=v.useState(null),[T,y]=v.useState(!1),h=v.useRef(null),t={...{headerBg:"bg-white",sidebarBg:"bg-white",sidebarGradientFrom:"from-white",sidebarGradientTo:"to-gray-50",dropdownBg:"bg-white",submenuBg:"bg-gray-50/50",titleText:"bg-gradient-to-r from-primary to-primary-dark bg-clip-text text-transparent",navText:"text-gray-600",navTextHover:"hover:text-primary",sidebarTitleText:"bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent",sidebarNavText:"text-gray-700",sidebarNavTextHover:"hover:text-primary",submenuText:"text-gray-600",submenuTextHover:"hover:text-primary",primary:"bg-primary",primaryDark:"bg-primary-dark",accent:"bg-primary",border:"border-gray-100",dropdownBorder:"border-gray-200",shadow:"shadow-sm",sidebarShadow:"shadow-2xl",overlayBg:"bg-black",overlayOpacity:"bg-opacity-50"},...w||{}},E=a=>{d(c===a?null:a)},C=a=>{O(k===a?null:a)},P=()=>{y(!0),b(!u)},_=()=>{y(!0),b(!1)},S=()=>{y(!1),b(!1)};return v.useEffect(()=>{const a=m=>{h.current&&!h.current.contains(m.target)&&d(null)};return document.addEventListener("mousedown",a),()=>{document.removeEventListener("mousedown",a)}},[]),v.useEffect(()=>(u?document.body.style.overflow="hidden":document.body.style.overflow="unset",()=>{document.body.style.overflow="unset"}),[u]),r.jsxs(r.Fragment,{children:[r.jsx("header",{className:`w-full ${t.headerBg} ${t.shadow} border-b ${t.border} sticky top-0 z-99`,children:r.jsxs("div",{className:"w-full max-w-[1240px] px-5 mx-auto flex items-center justify-between h-14 md:h-16",children:[r.jsx("div",{className:"flex items-center space-x-4",children:f&&r.jsx("a",{href:"/",children:r.jsx("img",{src:f,alt:"Logo",className:"h-7 w-auto object-contain md:h-8 cursor-pointer"})})}),r.jsxs("div",{className:"flex items-center space-x-6",ref:h,children:[r.jsx("nav",{className:"hidden md:flex items-center space-x-6",children:s==null?void 0:s.map(a=>{var m;return r.jsxs("div",{className:"relative",children:[r.jsx("button",{onClick:()=>a.sub?E(a.idx):void 0,className:`${t.navText} ${t.navTextHover} transition-colors duration-200 font-medium flex items-center`,children:a.sub?r.jsxs(r.Fragment,{children:[a.name,r.jsx("svg",{className:"w-4 h-4 ml-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}):r.jsx("a",{href:a.path,children:a.name})}),r.jsxs("div",{className:`absolute top-[44px] min-w-[100px] w-auto ${t.dropdownBg} border ${t.dropdownBorder} rounded-lg shadow-lg z-50 transition-all duration-300 ease-in-out transform ${a.idx===(s==null?void 0:s.length)?"right-0":"left-1/2 transform -translate-x-1/2"} ${c===a.idx?"opacity-100 translate-y-0 pointer-events-auto":"opacity-0 -translate-y-2 pointer-events-none"}`,children:[r.jsx("div",{className:`absolute -top-2 w-4 h-4 ${t.dropdownBg} border-l border-t ${t.dropdownBorder} transform rotate-45 ${a.idx===(s==null?void 0:s.length)?"right-4":"left-1/2 -translate-x-1/2"}`}),r.jsx("div",{className:"py-2",children:(m=a.sub)==null?void 0:m.map(N=>r.jsx("a",{href:N.path,className:`block px-4 py-2 text-sm whitespace-nowrap ${t.submenuText} hover:bg-gray-100 ${t.submenuTextHover} transition-colors duration-200`,onClick:()=>d(null),children:N.name},N.idx))})]})]},a.idx)})}),r.jsx("button",{className:`md:hidden p-2 rounded-lg ${t.navText} hover:bg-gray-100 transition-colors duration-200`,onClick:P,children:r.jsx("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 12h16M4 18h16"})})})]})]})}),r.jsx("div",{className:`fixed inset-0 ${t.overlayBg} z-50 md:hidden ${u?`${t.overlayOpacity} backdrop-blur-sm`:"bg-opacity-0 backdrop-blur-none pointer-events-none"} ${T?"transition-all duration-300 ease-in-out":""}`,onClick:_}),r.jsx("div",{className:`fixed top-0 ${p==="left"?"left-0":"right-0"} h-full w-4/5 xsm:w-80 ${t.sidebarBg} ${t.sidebarShadow} transform z-50 md:hidden ${u?"translate-x-0":p==="left"?"-translate-x-full":"translate-x-full"} ${T?"transition-all duration-300 ease-in-out":""}`,children:r.jsxs("div",{className:`flex flex-col h-full bg-gradient-to-b ${t.sidebarGradientFrom} ${t.sidebarGradientTo}`,children:[r.jsxs("div",{className:`flex items-center justify-between p-4 border-b ${t.border} ${t.sidebarBg}/80 backdrop-blur-sm`,children:[r.jsxs("div",{className:"flex items-center space-x-3",children:[r.jsx("div",{className:`w-2 h-8 bg-gradient-to-b ${t.primary} ${t.primaryDark} rounded-full`}),r.jsx("h2",{className:`text-xl font-bold ${t.sidebarTitleText}`,children:"Menu"})]}),r.jsx("button",{onClick:_,className:"p-2 rounded-full text-gray-400 hover:text-gray-600 hover:bg-gray-100 transition-all duration-200",children:r.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),r.jsx("nav",{className:"flex-1 overflow-y-auto ",children:r.jsx("ul",{className:"",children:s==null?void 0:s.map(a=>r.jsx("li",{children:a.sub?r.jsxs("div",{className:`${t.dropdownBg} ${t.shadow} border-b ${t.border} overflow-hidden`,children:[r.jsxs("button",{onClick:()=>C(a.idx),className:`w-full flex items-center justify-between p-4 text-left ${t.sidebarNavText} hover:bg-gray-50 transition-all duration-200 group`,children:[r.jsxs("div",{className:"flex items-center space-x-3",children:[r.jsx("div",{className:`w-1.5 h-1.5 ${t.accent} rounded-full opacity-60 group-hover:opacity-100 transition-opacity duration-200`}),r.jsx("span",{className:`font-semibold text-gray-800 ${t.sidebarNavTextHover} transition-colors duration-200`,children:a.name})]}),r.jsx("svg",{className:`shrink-0 w-4 h-4 text-gray-400 transition-all duration-200 ${k===a.idx?"rotate-180 text-primary":"group-hover:text-gray-600"}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:r.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),r.jsx("div",{className:`overflow-hidden transition-all duration-300 ease-in-out ${k===a.idx?"max-h-96 opacity-100":"max-h-0 opacity-0"}`,children:r.jsx("div",{className:`${t.submenuBg} border-t ${t.border}`,children:r.jsx("ul",{className:"py-2",children:a.sub.map(m=>r.jsx("li",{children:r.jsxs("a",{href:m.path,className:`px-6 py-3 text-sm ${t.submenuText} hover:bg-white ${t.submenuTextHover} transition-all duration-200 flex items-center space-x-2 group`,onClick:S,children:[r.jsx("div",{className:"w-1 h-1 bg-gray-300 rounded-full group-hover:bg-primary transition-colors duration-200"}),r.jsx("span",{children:m.name})]})},m.idx))})})})]}):r.jsx("a",{href:a.path,className:`block p-4 ${t.sidebarNavText} hover:bg-white ${t.sidebarNavTextHover} transition-all duration-200 font-semibold ${t.dropdownBg} ${t.shadow} border-b ${t.border} group`,onClick:S,children:r.jsxs("div",{className:"flex items-center space-x-3",children:[r.jsx("div",{className:`w-1.5 h-1.5 ${t.accent} rounded-full opacity-60 group-hover:opacity-100 transition-opacity duration-200`}),r.jsx("span",{className:`text-gray-800 ${t.sidebarNavTextHover} transition-colors duration-200`,children:a.name})]})})},a.idx))})})]})})]})};exports.Header=oe;
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Pretendard,ui-sans-serif,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:Fira Mono,ui-monospace,SFMono-Regular,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}.flex{display:flex}.h-8{height:2rem}.items-center{align-items:center}.justify-between{justify-content:space-between}.text-\[36px\]{font-size:36px}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.text-success{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Pretendard,ui-sans-serif,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:Fira Mono,ui-monospace,SFMono-Regular,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-top-2{top:-.5rem}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-\[44px\]{top:44px}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.ml-1{margin-left:.25rem}.block{display:block}.flex{display:flex}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-14{height:3.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-\[3000px\]{height:3000px}.h-full{height:100%}.max-h-0{max-height:0px}.max-h-96{max-height:24rem}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-2{width:.5rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-auto{width:auto}.w-full{width:100%}.min-w-\[100px\]{min-width:100px}.max-w-\[1240px\]{max-width:1240px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-300{--tw-border-opacity: 1;border-color:rgb(216 180 254 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-50\/50{background-color:#f9fafb80}.bg-gray-700\/50{background-color:#37415180}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-primary-dark{--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-50\/50{background-color:#faf5ff80}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-purple-700{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity, 1))}.bg-purple-900{--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-opacity-0{--tw-bg-opacity: 0}.bg-opacity-40{--tw-bg-opacity: .4}.bg-opacity-50{--tw-bg-opacity: .5}.bg-opacity-70{--tw-bg-opacity: .7}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-gray-800{--tw-gradient-from: #1f2937 var(--tw-gradient-from-position);--tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from: #faf5ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-800{--tw-gradient-from: #6b21a8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(107 33 168 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-gray-300{--tw-gradient-to: #d1d5db var(--tw-gradient-to-position)}.to-gray-50{--tw-gradient-to: #f9fafb var(--tw-gradient-to-position)}.to-gray-600{--tw-gradient-to: #4b5563 var(--tw-gradient-to-position)}.to-gray-900{--tw-gradient-to: #111827 var(--tw-gradient-to-position)}.to-primary-dark{--tw-gradient-to: #1e40af var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.to-white{--tw-gradient-to: #fff var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{-o-object-fit:contain;object-fit:contain}.p-2{padding:.5rem}.p-4{padding:1rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.text-left{text-align:left}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-primary{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-60{opacity:.6}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.backdrop-blur-none{--tw-backdrop-blur: ;-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-primary:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-purple-800:hover{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.hover\:text-purple-900:hover{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:bg-primary{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.group:hover .group-hover\:text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width: 360px){.xsm\:w-80{width:20rem}}@media (min-width: 768px){.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:h-8{height:2rem}}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import ee from "react";
2
- var S = { exports: {} }, R = {};
1
+ import te, { useState as O, useRef as oe, useEffect as J } from "react";
2
+ var W = { exports: {} }, E = {};
3
3
  /**
4
4
  * @license React
5
5
  * react-jsx-runtime.production.js
@@ -9,29 +9,29 @@ var S = { exports: {} }, R = {};
9
9
  * This source code is licensed under the MIT license found in the
10
10
  * LICENSE file in the root directory of this source tree.
11
11
  */
12
- var F;
13
- function re() {
14
- if (F) return R;
15
- F = 1;
16
- var s = Symbol.for("react.transitional.element"), i = Symbol.for("react.fragment");
17
- function d(m, o, c) {
18
- var E = null;
19
- if (c !== void 0 && (E = "" + c), o.key !== void 0 && (E = "" + o.key), "key" in o) {
20
- c = {};
21
- for (var b in o)
22
- b !== "key" && (c[b] = o[b]);
23
- } else c = o;
24
- return o = c.ref, {
25
- $$typeof: s,
26
- type: m,
27
- key: E,
28
- ref: o !== void 0 ? o : null,
29
- props: c
12
+ var X;
13
+ function ae() {
14
+ if (X) return E;
15
+ X = 1;
16
+ var f = Symbol.for("react.transitional.element"), s = Symbol.for("react.fragment");
17
+ function v(p, c, d) {
18
+ var u = null;
19
+ if (d !== void 0 && (u = "" + d), c.key !== void 0 && (u = "" + c.key), "key" in c) {
20
+ d = {};
21
+ for (var b in c)
22
+ b !== "key" && (d[b] = c[b]);
23
+ } else d = c;
24
+ return c = d.ref, {
25
+ $$typeof: f,
26
+ type: p,
27
+ key: u,
28
+ ref: c !== void 0 ? c : null,
29
+ props: d
30
30
  };
31
31
  }
32
- return R.Fragment = i, R.jsx = d, R.jsxs = d, R;
32
+ return E.Fragment = s, E.jsx = v, E.jsxs = v, E;
33
33
  }
34
- var _ = {};
34
+ var R = {};
35
35
  /**
36
36
  * @license React
37
37
  * react-jsx-runtime.development.js
@@ -41,125 +41,125 @@ var _ = {};
41
41
  * This source code is licensed under the MIT license found in the
42
42
  * LICENSE file in the root directory of this source tree.
43
43
  */
44
- var D;
45
- function te() {
46
- return D || (D = 1, process.env.NODE_ENV !== "production" && function() {
47
- function s(e) {
44
+ var L;
45
+ function ne() {
46
+ return L || (L = 1, process.env.NODE_ENV !== "production" && function() {
47
+ function f(e) {
48
48
  if (e == null) return null;
49
49
  if (typeof e == "function")
50
- return e.$$typeof === Z ? null : e.displayName || e.name || null;
50
+ return e.$$typeof === K ? null : e.displayName || e.name || null;
51
51
  if (typeof e == "string") return e;
52
52
  switch (e) {
53
53
  case T:
54
54
  return "Fragment";
55
- case z:
55
+ case P:
56
56
  return "Profiler";
57
- case U:
57
+ case C:
58
58
  return "StrictMode";
59
- case J:
59
+ case m:
60
60
  return "Suspense";
61
- case X:
61
+ case N:
62
62
  return "SuspenseList";
63
- case B:
63
+ case Q:
64
64
  return "Activity";
65
65
  }
66
66
  if (typeof e == "object")
67
67
  switch (typeof e.tag == "number" && console.error(
68
68
  "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
69
69
  ), e.$$typeof) {
70
- case W:
70
+ case t:
71
71
  return "Portal";
72
- case q:
72
+ case _:
73
73
  return (e.displayName || "Context") + ".Provider";
74
- case V:
74
+ case $:
75
75
  return (e._context.displayName || "Context") + ".Consumer";
76
- case G:
77
- var r = e.render;
78
- return e = e.displayName, e || (e = r.displayName || r.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
79
- case H:
80
- return r = e.displayName || null, r !== null ? r : s(e.type) || "Memo";
81
- case g:
82
- r = e._payload, e = e._init;
76
+ case a:
77
+ var o = e.render;
78
+ return e = e.displayName, e || (e = o.displayName || o.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
79
+ case Z:
80
+ return o = e.displayName || null, o !== null ? o : f(e.type) || "Memo";
81
+ case I:
82
+ o = e._payload, e = e._init;
83
83
  try {
84
- return s(e(r));
84
+ return f(e(o));
85
85
  } catch {
86
86
  }
87
87
  }
88
88
  return null;
89
89
  }
90
- function i(e) {
90
+ function s(e) {
91
91
  return "" + e;
92
92
  }
93
- function d(e) {
93
+ function v(e) {
94
94
  try {
95
- i(e);
96
- var r = !1;
95
+ s(e);
96
+ var o = !1;
97
97
  } catch {
98
- r = !0;
98
+ o = !0;
99
99
  }
100
- if (r) {
101
- r = console;
102
- var t = r.error, n = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
103
- return t.call(
104
- r,
100
+ if (o) {
101
+ o = console;
102
+ var n = o.error, l = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
103
+ return n.call(
104
+ o,
105
105
  "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
106
- n
107
- ), i(e);
106
+ l
107
+ ), s(e);
108
108
  }
109
109
  }
110
- function m(e) {
110
+ function p(e) {
111
111
  if (e === T) return "<>";
112
- if (typeof e == "object" && e !== null && e.$$typeof === g)
112
+ if (typeof e == "object" && e !== null && e.$$typeof === I)
113
113
  return "<...>";
114
114
  try {
115
- var r = s(e);
116
- return r ? "<" + r + ">" : "<...>";
115
+ var o = f(e);
116
+ return o ? "<" + o + ">" : "<...>";
117
117
  } catch {
118
118
  return "<...>";
119
119
  }
120
120
  }
121
- function o() {
122
- var e = p.A;
121
+ function c() {
122
+ var e = B.A;
123
123
  return e === null ? null : e.getOwner();
124
124
  }
125
- function c() {
125
+ function d() {
126
126
  return Error("react-stack-top-frame");
127
127
  }
128
- function E(e) {
129
- if (N.call(e, "key")) {
130
- var r = Object.getOwnPropertyDescriptor(e, "key").get;
131
- if (r && r.isReactWarning) return !1;
128
+ function u(e) {
129
+ if (H.call(e, "key")) {
130
+ var o = Object.getOwnPropertyDescriptor(e, "key").get;
131
+ if (o && o.isReactWarning) return !1;
132
132
  }
133
133
  return e.key !== void 0;
134
134
  }
135
- function b(e, r) {
136
- function t() {
137
- y || (y = !0, console.error(
135
+ function b(e, o) {
136
+ function n() {
137
+ z || (z = !0, console.error(
138
138
  "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
139
- r
139
+ o
140
140
  ));
141
141
  }
142
- t.isReactWarning = !0, Object.defineProperty(e, "key", {
143
- get: t,
142
+ n.isReactWarning = !0, Object.defineProperty(e, "key", {
143
+ get: n,
144
144
  configurable: !0
145
145
  });
146
146
  }
147
- function L() {
148
- var e = s(this.type);
149
- return C[e] || (C[e] = !0, console.error(
147
+ function j() {
148
+ var e = f(this.type);
149
+ return G[e] || (G[e] = !0, console.error(
150
150
  "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
151
151
  )), e = this.props.ref, e !== void 0 ? e : null;
152
152
  }
153
- function M(e, r, t, n, l, u, O, A) {
154
- return t = u.ref, e = {
155
- $$typeof: h,
153
+ function S(e, o, n, l, g, x, Y, M) {
154
+ return n = x.ref, e = {
155
+ $$typeof: A,
156
156
  type: e,
157
- key: r,
158
- props: u,
159
- _owner: l
160
- }, (t !== void 0 ? t : null) !== null ? Object.defineProperty(e, "ref", {
157
+ key: o,
158
+ props: x,
159
+ _owner: g
160
+ }, (n !== void 0 ? n : null) !== null ? Object.defineProperty(e, "ref", {
161
161
  enumerable: !1,
162
- get: L
162
+ get: j
163
163
  }) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
164
164
  configurable: !1,
165
165
  enumerable: !1,
@@ -174,113 +174,428 @@ function te() {
174
174
  configurable: !1,
175
175
  enumerable: !1,
176
176
  writable: !0,
177
- value: O
177
+ value: Y
178
178
  }), Object.defineProperty(e, "_debugTask", {
179
179
  configurable: !1,
180
180
  enumerable: !1,
181
181
  writable: !0,
182
- value: A
182
+ value: M
183
183
  }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
184
184
  }
185
- function P(e, r, t, n, l, u, O, A) {
186
- var a = r.children;
187
- if (a !== void 0)
188
- if (n)
189
- if (Q(a)) {
190
- for (n = 0; n < a.length; n++)
191
- w(a[n]);
192
- Object.freeze && Object.freeze(a);
185
+ function k(e, o, n, l, g, x, Y, M) {
186
+ var i = o.children;
187
+ if (i !== void 0)
188
+ if (l)
189
+ if (ee(i)) {
190
+ for (l = 0; l < i.length; l++)
191
+ w(i[l]);
192
+ Object.freeze && Object.freeze(i);
193
193
  } else
194
194
  console.error(
195
195
  "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
196
196
  );
197
- else w(a);
198
- if (N.call(r, "key")) {
199
- a = s(e);
200
- var f = Object.keys(r).filter(function(K) {
201
- return K !== "key";
197
+ else w(i);
198
+ if (H.call(o, "key")) {
199
+ i = f(e);
200
+ var y = Object.keys(o).filter(function(re) {
201
+ return re !== "key";
202
202
  });
203
- n = 0 < f.length ? "{key: someKey, " + f.join(": ..., ") + ": ...}" : "{key: someKey}", $[a + n] || (f = 0 < f.length ? "{" + f.join(": ..., ") + ": ...}" : "{}", console.error(
203
+ l = 0 < y.length ? "{key: someKey, " + y.join(": ..., ") + ": ...}" : "{key: someKey}", q[i + l] || (y = 0 < y.length ? "{" + y.join(": ..., ") + ": ...}" : "{}", console.error(
204
204
  `A props object containing a "key" prop is being spread into JSX:
205
205
  let props = %s;
206
206
  <%s {...props} />
207
207
  React keys must be passed directly to JSX without using spread:
208
208
  let props = %s;
209
209
  <%s key={someKey} {...props} />`,
210
- n,
211
- a,
212
- f,
213
- a
214
- ), $[a + n] = !0);
210
+ l,
211
+ i,
212
+ y,
213
+ i
214
+ ), q[i + l] = !0);
215
215
  }
216
- if (a = null, t !== void 0 && (d(t), a = "" + t), E(r) && (d(r.key), a = "" + r.key), "key" in r) {
217
- t = {};
218
- for (var j in r)
219
- j !== "key" && (t[j] = r[j]);
220
- } else t = r;
221
- return a && b(
222
- t,
216
+ if (i = null, n !== void 0 && (v(n), i = "" + n), u(o) && (v(o.key), i = "" + o.key), "key" in o) {
217
+ n = {};
218
+ for (var F in o)
219
+ F !== "key" && (n[F] = o[F]);
220
+ } else n = o;
221
+ return i && b(
222
+ n,
223
223
  typeof e == "function" ? e.displayName || e.name || "Unknown" : e
224
- ), M(
224
+ ), S(
225
225
  e,
226
- a,
227
- u,
228
- l,
229
- o(),
230
- t,
231
- O,
232
- A
226
+ i,
227
+ x,
228
+ g,
229
+ c(),
230
+ n,
231
+ Y,
232
+ M
233
233
  );
234
234
  }
235
235
  function w(e) {
236
- typeof e == "object" && e !== null && e.$$typeof === h && e._store && (e._store.validated = 1);
236
+ typeof e == "object" && e !== null && e.$$typeof === A && e._store && (e._store.validated = 1);
237
237
  }
238
- var v = ee, h = Symbol.for("react.transitional.element"), W = Symbol.for("react.portal"), T = Symbol.for("react.fragment"), U = Symbol.for("react.strict_mode"), z = Symbol.for("react.profiler"), V = Symbol.for("react.consumer"), q = Symbol.for("react.context"), G = Symbol.for("react.forward_ref"), J = Symbol.for("react.suspense"), X = Symbol.for("react.suspense_list"), H = Symbol.for("react.memo"), g = Symbol.for("react.lazy"), B = Symbol.for("react.activity"), Z = Symbol.for("react.client.reference"), p = v.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, N = Object.prototype.hasOwnProperty, Q = Array.isArray, k = console.createTask ? console.createTask : function() {
238
+ var h = te, A = Symbol.for("react.transitional.element"), t = Symbol.for("react.portal"), T = Symbol.for("react.fragment"), C = Symbol.for("react.strict_mode"), P = Symbol.for("react.profiler"), $ = Symbol.for("react.consumer"), _ = Symbol.for("react.context"), a = Symbol.for("react.forward_ref"), m = Symbol.for("react.suspense"), N = Symbol.for("react.suspense_list"), Z = Symbol.for("react.memo"), I = Symbol.for("react.lazy"), Q = Symbol.for("react.activity"), K = Symbol.for("react.client.reference"), B = h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, H = Object.prototype.hasOwnProperty, ee = Array.isArray, D = console.createTask ? console.createTask : function() {
239
239
  return null;
240
240
  };
241
- v = {
241
+ h = {
242
242
  "react-stack-bottom-frame": function(e) {
243
243
  return e();
244
244
  }
245
245
  };
246
- var y, C = {}, Y = v["react-stack-bottom-frame"].bind(
247
- v,
248
- c
249
- )(), I = k(m(c)), $ = {};
250
- _.Fragment = T, _.jsx = function(e, r, t, n, l) {
251
- var u = 1e4 > p.recentlyCreatedOwnerStacks++;
252
- return P(
246
+ var z, G = {}, U = h["react-stack-bottom-frame"].bind(
247
+ h,
248
+ d
249
+ )(), V = D(p(d)), q = {};
250
+ R.Fragment = T, R.jsx = function(e, o, n, l, g) {
251
+ var x = 1e4 > B.recentlyCreatedOwnerStacks++;
252
+ return k(
253
253
  e,
254
- r,
255
- t,
256
- !1,
254
+ o,
257
255
  n,
256
+ !1,
258
257
  l,
259
- u ? Error("react-stack-top-frame") : Y,
260
- u ? k(m(e)) : I
258
+ g,
259
+ x ? Error("react-stack-top-frame") : U,
260
+ x ? D(p(e)) : V
261
261
  );
262
- }, _.jsxs = function(e, r, t, n, l) {
263
- var u = 1e4 > p.recentlyCreatedOwnerStacks++;
264
- return P(
262
+ }, R.jsxs = function(e, o, n, l, g) {
263
+ var x = 1e4 > B.recentlyCreatedOwnerStacks++;
264
+ return k(
265
265
  e,
266
- r,
267
- t,
268
- !0,
266
+ o,
269
267
  n,
268
+ !0,
270
269
  l,
271
- u ? Error("react-stack-top-frame") : Y,
272
- u ? k(m(e)) : I
270
+ g,
271
+ x ? Error("react-stack-top-frame") : U,
272
+ x ? D(p(e)) : V
273
273
  );
274
274
  };
275
- }()), _;
275
+ }()), R;
276
276
  }
277
- process.env.NODE_ENV === "production" ? S.exports = re() : S.exports = te();
278
- var x = S.exports;
279
- const ae = ({ logo: s, title: i }) => /* @__PURE__ */ x.jsxs("header", { className: "flex items-center justify-between", children: [
280
- s && /* @__PURE__ */ x.jsx("img", { src: s, alt: "Logo", className: "h-8" }),
281
- i && /* @__PURE__ */ x.jsx("h1", { className: "text-xl text-success font-bold", children: i }),
282
- "배포테스트"
283
- ] });
277
+ process.env.NODE_ENV === "production" ? W.exports = ae() : W.exports = ne();
278
+ var r = W.exports;
279
+ const le = ({
280
+ logo: f,
281
+ navList: s,
282
+ colors: v,
283
+ sidebarPosition: p = "left"
284
+ }) => {
285
+ const [c, d] = O(null), [u, b] = O(!1), [j, S] = O(
286
+ null
287
+ ), [k, w] = O(!1), h = oe(null), t = { ...{
288
+ headerBg: "bg-white",
289
+ sidebarBg: "bg-white",
290
+ sidebarGradientFrom: "from-white",
291
+ sidebarGradientTo: "to-gray-50",
292
+ dropdownBg: "bg-white",
293
+ submenuBg: "bg-gray-50/50",
294
+ titleText: "bg-gradient-to-r from-primary to-primary-dark bg-clip-text text-transparent",
295
+ navText: "text-gray-600",
296
+ navTextHover: "hover:text-primary",
297
+ sidebarTitleText: "bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent",
298
+ sidebarNavText: "text-gray-700",
299
+ sidebarNavTextHover: "hover:text-primary",
300
+ submenuText: "text-gray-600",
301
+ submenuTextHover: "hover:text-primary",
302
+ primary: "bg-primary",
303
+ primaryDark: "bg-primary-dark",
304
+ accent: "bg-primary",
305
+ border: "border-gray-100",
306
+ dropdownBorder: "border-gray-200",
307
+ shadow: "shadow-sm",
308
+ sidebarShadow: "shadow-2xl",
309
+ overlayBg: "bg-black",
310
+ overlayOpacity: "bg-opacity-50"
311
+ }, ...v || {} }, T = (a) => {
312
+ d(c === a ? null : a);
313
+ }, C = (a) => {
314
+ S(j === a ? null : a);
315
+ }, P = () => {
316
+ w(!0), b(!u);
317
+ }, $ = () => {
318
+ w(!0), b(!1);
319
+ }, _ = () => {
320
+ w(!1), b(!1);
321
+ };
322
+ return J(() => {
323
+ const a = (m) => {
324
+ h.current && !h.current.contains(m.target) && d(null);
325
+ };
326
+ return document.addEventListener("mousedown", a), () => {
327
+ document.removeEventListener("mousedown", a);
328
+ };
329
+ }, []), J(() => (u ? document.body.style.overflow = "hidden" : document.body.style.overflow = "unset", () => {
330
+ document.body.style.overflow = "unset";
331
+ }), [u]), /* @__PURE__ */ r.jsxs(r.Fragment, { children: [
332
+ /* @__PURE__ */ r.jsx(
333
+ "header",
334
+ {
335
+ className: `w-full ${t.headerBg} ${t.shadow} border-b ${t.border} sticky top-0 z-99`,
336
+ children: /* @__PURE__ */ r.jsxs("div", { className: "w-full max-w-[1240px] px-5 mx-auto flex items-center justify-between h-14 md:h-16", children: [
337
+ /* @__PURE__ */ r.jsx("div", { className: "flex items-center space-x-4", children: f && /* @__PURE__ */ r.jsx("a", { href: "/", children: /* @__PURE__ */ r.jsx(
338
+ "img",
339
+ {
340
+ src: f,
341
+ alt: "Logo",
342
+ className: "h-7 w-auto object-contain md:h-8 cursor-pointer"
343
+ }
344
+ ) }) }),
345
+ /* @__PURE__ */ r.jsxs("div", { className: "flex items-center space-x-6", ref: h, children: [
346
+ /* @__PURE__ */ r.jsx("nav", { className: "hidden md:flex items-center space-x-6", children: s == null ? void 0 : s.map((a) => {
347
+ var m;
348
+ return /* @__PURE__ */ r.jsxs("div", { className: "relative", children: [
349
+ /* @__PURE__ */ r.jsx(
350
+ "button",
351
+ {
352
+ onClick: () => a.sub ? T(a.idx) : void 0,
353
+ className: `${t.navText} ${t.navTextHover} transition-colors duration-200 font-medium flex items-center`,
354
+ children: a.sub ? /* @__PURE__ */ r.jsxs(r.Fragment, { children: [
355
+ a.name,
356
+ /* @__PURE__ */ r.jsx(
357
+ "svg",
358
+ {
359
+ className: "w-4 h-4 ml-1",
360
+ fill: "none",
361
+ stroke: "currentColor",
362
+ viewBox: "0 0 24 24",
363
+ children: /* @__PURE__ */ r.jsx(
364
+ "path",
365
+ {
366
+ strokeLinecap: "round",
367
+ strokeLinejoin: "round",
368
+ strokeWidth: 2,
369
+ d: "M19 9l-7 7-7-7"
370
+ }
371
+ )
372
+ }
373
+ )
374
+ ] }) : /* @__PURE__ */ r.jsx("a", { href: a.path, children: a.name })
375
+ }
376
+ ),
377
+ /* @__PURE__ */ r.jsxs(
378
+ "div",
379
+ {
380
+ className: `absolute top-[44px] min-w-[100px] w-auto ${t.dropdownBg} border ${t.dropdownBorder} rounded-lg shadow-lg z-50 transition-all duration-300 ease-in-out transform ${a.idx === (s == null ? void 0 : s.length) ? "right-0" : "left-1/2 transform -translate-x-1/2"} ${c === a.idx ? "opacity-100 translate-y-0 pointer-events-auto" : "opacity-0 -translate-y-2 pointer-events-none"}`,
381
+ children: [
382
+ /* @__PURE__ */ r.jsx(
383
+ "div",
384
+ {
385
+ className: `absolute -top-2 w-4 h-4 ${t.dropdownBg} border-l border-t ${t.dropdownBorder} transform rotate-45 ${a.idx === (s == null ? void 0 : s.length) ? "right-4" : "left-1/2 -translate-x-1/2"}`
386
+ }
387
+ ),
388
+ /* @__PURE__ */ r.jsx("div", { className: "py-2", children: (m = a.sub) == null ? void 0 : m.map((N) => /* @__PURE__ */ r.jsx(
389
+ "a",
390
+ {
391
+ href: N.path,
392
+ className: `block px-4 py-2 text-sm whitespace-nowrap ${t.submenuText} hover:bg-gray-100 ${t.submenuTextHover} transition-colors duration-200`,
393
+ onClick: () => d(null),
394
+ children: N.name
395
+ },
396
+ N.idx
397
+ )) })
398
+ ]
399
+ }
400
+ )
401
+ ] }, a.idx);
402
+ }) }),
403
+ /* @__PURE__ */ r.jsx(
404
+ "button",
405
+ {
406
+ className: `md:hidden p-2 rounded-lg ${t.navText} hover:bg-gray-100 transition-colors duration-200`,
407
+ onClick: P,
408
+ children: /* @__PURE__ */ r.jsx(
409
+ "svg",
410
+ {
411
+ className: "w-6 h-6",
412
+ fill: "none",
413
+ stroke: "currentColor",
414
+ viewBox: "0 0 24 24",
415
+ children: /* @__PURE__ */ r.jsx(
416
+ "path",
417
+ {
418
+ strokeLinecap: "round",
419
+ strokeLinejoin: "round",
420
+ strokeWidth: 2,
421
+ d: "M4 6h16M4 12h16M4 18h16"
422
+ }
423
+ )
424
+ }
425
+ )
426
+ }
427
+ )
428
+ ] })
429
+ ] })
430
+ }
431
+ ),
432
+ /* @__PURE__ */ r.jsx(
433
+ "div",
434
+ {
435
+ className: `fixed inset-0 ${t.overlayBg} z-50 md:hidden ${u ? `${t.overlayOpacity} backdrop-blur-sm` : "bg-opacity-0 backdrop-blur-none pointer-events-none"} ${k ? "transition-all duration-300 ease-in-out" : ""}`,
436
+ onClick: $
437
+ }
438
+ ),
439
+ /* @__PURE__ */ r.jsx(
440
+ "div",
441
+ {
442
+ className: `fixed top-0 ${p === "left" ? "left-0" : "right-0"} h-full w-4/5 xsm:w-80 ${t.sidebarBg} ${t.sidebarShadow} transform z-50 md:hidden ${u ? "translate-x-0" : p === "left" ? "-translate-x-full" : "translate-x-full"} ${k ? "transition-all duration-300 ease-in-out" : ""}`,
443
+ children: /* @__PURE__ */ r.jsxs(
444
+ "div",
445
+ {
446
+ className: `flex flex-col h-full bg-gradient-to-b ${t.sidebarGradientFrom} ${t.sidebarGradientTo}`,
447
+ children: [
448
+ /* @__PURE__ */ r.jsxs(
449
+ "div",
450
+ {
451
+ className: `flex items-center justify-between p-4 border-b ${t.border} ${t.sidebarBg}/80 backdrop-blur-sm`,
452
+ children: [
453
+ /* @__PURE__ */ r.jsxs("div", { className: "flex items-center space-x-3", children: [
454
+ /* @__PURE__ */ r.jsx(
455
+ "div",
456
+ {
457
+ className: `w-2 h-8 bg-gradient-to-b ${t.primary} ${t.primaryDark} rounded-full`
458
+ }
459
+ ),
460
+ /* @__PURE__ */ r.jsx(
461
+ "h2",
462
+ {
463
+ className: `text-xl font-bold ${t.sidebarTitleText}`,
464
+ children: "Menu"
465
+ }
466
+ )
467
+ ] }),
468
+ /* @__PURE__ */ r.jsx(
469
+ "button",
470
+ {
471
+ onClick: $,
472
+ className: "p-2 rounded-full text-gray-400 hover:text-gray-600 hover:bg-gray-100 transition-all duration-200",
473
+ children: /* @__PURE__ */ r.jsx(
474
+ "svg",
475
+ {
476
+ className: "w-5 h-5",
477
+ fill: "none",
478
+ stroke: "currentColor",
479
+ viewBox: "0 0 24 24",
480
+ children: /* @__PURE__ */ r.jsx(
481
+ "path",
482
+ {
483
+ strokeLinecap: "round",
484
+ strokeLinejoin: "round",
485
+ strokeWidth: 2,
486
+ d: "M6 18L18 6M6 6l12 12"
487
+ }
488
+ )
489
+ }
490
+ )
491
+ }
492
+ )
493
+ ]
494
+ }
495
+ ),
496
+ /* @__PURE__ */ r.jsx("nav", { className: "flex-1 overflow-y-auto ", children: /* @__PURE__ */ r.jsx("ul", { className: "", children: s == null ? void 0 : s.map((a) => /* @__PURE__ */ r.jsx("li", { children: a.sub ? /* @__PURE__ */ r.jsxs(
497
+ "div",
498
+ {
499
+ className: `${t.dropdownBg} ${t.shadow} border-b ${t.border} overflow-hidden`,
500
+ children: [
501
+ /* @__PURE__ */ r.jsxs(
502
+ "button",
503
+ {
504
+ onClick: () => C(a.idx),
505
+ className: `w-full flex items-center justify-between p-4 text-left ${t.sidebarNavText} hover:bg-gray-50 transition-all duration-200 group`,
506
+ children: [
507
+ /* @__PURE__ */ r.jsxs("div", { className: "flex items-center space-x-3", children: [
508
+ /* @__PURE__ */ r.jsx(
509
+ "div",
510
+ {
511
+ className: `w-1.5 h-1.5 ${t.accent} rounded-full opacity-60 group-hover:opacity-100 transition-opacity duration-200`
512
+ }
513
+ ),
514
+ /* @__PURE__ */ r.jsx(
515
+ "span",
516
+ {
517
+ className: `font-semibold text-gray-800 ${t.sidebarNavTextHover} transition-colors duration-200`,
518
+ children: a.name
519
+ }
520
+ )
521
+ ] }),
522
+ /* @__PURE__ */ r.jsx(
523
+ "svg",
524
+ {
525
+ className: `shrink-0 w-4 h-4 text-gray-400 transition-all duration-200 ${j === a.idx ? "rotate-180 text-primary" : "group-hover:text-gray-600"}`,
526
+ fill: "none",
527
+ stroke: "currentColor",
528
+ viewBox: "0 0 24 24",
529
+ children: /* @__PURE__ */ r.jsx(
530
+ "path",
531
+ {
532
+ strokeLinecap: "round",
533
+ strokeLinejoin: "round",
534
+ strokeWidth: 2,
535
+ d: "M19 9l-7 7-7-7"
536
+ }
537
+ )
538
+ }
539
+ )
540
+ ]
541
+ }
542
+ ),
543
+ /* @__PURE__ */ r.jsx(
544
+ "div",
545
+ {
546
+ className: `overflow-hidden transition-all duration-300 ease-in-out ${j === a.idx ? "max-h-96 opacity-100" : "max-h-0 opacity-0"}`,
547
+ children: /* @__PURE__ */ r.jsx(
548
+ "div",
549
+ {
550
+ className: `${t.submenuBg} border-t ${t.border}`,
551
+ children: /* @__PURE__ */ r.jsx("ul", { className: "py-2", children: a.sub.map((m) => /* @__PURE__ */ r.jsx("li", { children: /* @__PURE__ */ r.jsxs(
552
+ "a",
553
+ {
554
+ href: m.path,
555
+ className: `px-6 py-3 text-sm ${t.submenuText} hover:bg-white ${t.submenuTextHover} transition-all duration-200 flex items-center space-x-2 group`,
556
+ onClick: _,
557
+ children: [
558
+ /* @__PURE__ */ r.jsx("div", { className: "w-1 h-1 bg-gray-300 rounded-full group-hover:bg-primary transition-colors duration-200" }),
559
+ /* @__PURE__ */ r.jsx("span", { children: m.name })
560
+ ]
561
+ }
562
+ ) }, m.idx)) })
563
+ }
564
+ )
565
+ }
566
+ )
567
+ ]
568
+ }
569
+ ) : /* @__PURE__ */ r.jsx(
570
+ "a",
571
+ {
572
+ href: a.path,
573
+ className: `block p-4 ${t.sidebarNavText} hover:bg-white ${t.sidebarNavTextHover} transition-all duration-200 font-semibold ${t.dropdownBg} ${t.shadow} border-b ${t.border} group`,
574
+ onClick: _,
575
+ children: /* @__PURE__ */ r.jsxs("div", { className: "flex items-center space-x-3", children: [
576
+ /* @__PURE__ */ r.jsx(
577
+ "div",
578
+ {
579
+ className: `w-1.5 h-1.5 ${t.accent} rounded-full opacity-60 group-hover:opacity-100 transition-opacity duration-200`
580
+ }
581
+ ),
582
+ /* @__PURE__ */ r.jsx(
583
+ "span",
584
+ {
585
+ className: `text-gray-800 ${t.sidebarNavTextHover} transition-colors duration-200`,
586
+ children: a.name
587
+ }
588
+ )
589
+ ] })
590
+ }
591
+ ) }, a.idx)) }) })
592
+ ]
593
+ }
594
+ )
595
+ }
596
+ )
597
+ ] });
598
+ };
284
599
  export {
285
- ae as Header
600
+ le as Header
286
601
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextlevel_korea/design-system",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "type": "module",
5
5
  "description": "A modern React design system built with TypeScript and Tailwind CSS - The NextLevel Design System",
6
6
  "keywords": [