boottent-design 0.1.82 → 0.1.84

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.
Files changed (62) hide show
  1. package/README.md +2 -277
  2. package/dist/boottent-design.components/ads.cjs.js +1 -0
  3. package/dist/{boottent-design.ads.es.js → boottent-design.components/ads.es.js} +519 -542
  4. package/dist/boottent-design.components/form.cjs.js +1 -0
  5. package/dist/{UrlFormField-CPqQHGM4.js → boottent-design.components/form.es.js} +127 -128
  6. package/dist/boottent-design.components/hooks.cjs.js +1 -0
  7. package/dist/{boottent-design.hooks.es.js → boottent-design.components/hooks.es.js} +1 -1
  8. package/dist/boottent-design.components/provider.cjs.js +1 -0
  9. package/dist/{boottent-design.provider.es.js → boottent-design.components/provider.es.js} +26 -27
  10. package/dist/boottent-design.tokens.cjs.js +1 -0
  11. package/dist/boottent-design.tokens.es.js +36 -0
  12. package/dist/boottent-design.ui.cjs.js +1 -1
  13. package/dist/boottent-design.ui.es.js +242 -184
  14. package/dist/index-B5MTxQUY.js +170 -0
  15. package/dist/index-B7Y52_26.cjs +1 -0
  16. package/dist/index-BEUVT_rO.js +506 -0
  17. package/dist/{index-Akpc2UCv.js → index-CCD82LDc.js} +1 -1
  18. package/dist/index-D1ZCO8Bq.cjs +1 -0
  19. package/dist/index-D2yRYgbt.cjs +1 -0
  20. package/dist/index-DifAV-Cw.js +12051 -0
  21. package/dist/index-X01gQR_D.cjs +52 -0
  22. package/dist/portal-container-CK5qZ-PZ.cjs +1 -0
  23. package/dist/portal-container-DEx98_zU.js +147 -0
  24. package/dist/types/ads.d.ts +4 -553
  25. package/dist/types/components/ads.d.ts +124 -0
  26. package/dist/types/components/form.d.ts +124 -0
  27. package/dist/types/components/hooks.d.ts +124 -0
  28. package/dist/types/components/provider.d.ts +124 -0
  29. package/dist/types/form.d.ts +95 -0
  30. package/dist/types/hooks.d.ts +0 -552
  31. package/dist/types/provider.d.ts +0 -552
  32. package/dist/types/tokens.d.ts +174 -0
  33. package/dist/types/types.d.ts +7 -437
  34. package/dist/types/ui.d.ts +117 -529
  35. package/package.json +23 -33
  36. package/dist/UrlFormField-C7DgIYeh.cjs +0 -1
  37. package/dist/boottent-design.ads.cjs.js +0 -1
  38. package/dist/boottent-design.feature.cjs.js +0 -1
  39. package/dist/boottent-design.feature.es.js +0 -10
  40. package/dist/boottent-design.hooks.cjs.js +0 -1
  41. package/dist/boottent-design.layout.cjs.js +0 -1
  42. package/dist/boottent-design.layout.es.js +0 -58
  43. package/dist/boottent-design.provider.cjs.js +0 -1
  44. package/dist/boottent-design.styles.cjs.js +0 -1
  45. package/dist/boottent-design.styles.es.js +0 -76
  46. package/dist/boottent-design.utils.cjs.js +0 -1
  47. package/dist/boottent-design.utils.es.js +0 -11
  48. package/dist/index-B21JbtdU.cjs +0 -1
  49. package/dist/index-BYinJUBt.cjs +0 -1
  50. package/dist/index-CQACG110.js +0 -2392
  51. package/dist/index-Cw9G_f7P.cjs +0 -1
  52. package/dist/index-KZYAVDUp.js +0 -3199
  53. package/dist/index-T715hKYb.cjs +0 -1
  54. package/dist/index-goQ6Sq3Z.js +0 -113
  55. package/dist/portal-container-B7fNqDpv.cjs +0 -1
  56. package/dist/portal-container-oVJMu2rm.js +0 -56
  57. package/dist/toggleButtonGroup-primitive-BawO6QQP.js +0 -6598
  58. package/dist/toggleButtonGroup-primitive-DLsmj_zA.cjs +0 -52
  59. package/dist/types/feature.d.ts +0 -647
  60. package/dist/types/layout.d.ts +0 -587
  61. package/dist/types/styles.d.ts +0 -557
  62. package/dist/types/utils.d.ts +0 -737
package/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # boottent-design
2
2
 
3
- React, Vite, TypeScript, TailwindCSS, Radix-UI를 사용해 만든 부트텐트 디자인 시스템 라이브러리입니다.
4
-
5
3
  ## 목차
6
4
 
7
5
  - [소개](#소개)
@@ -9,19 +7,11 @@ React, Vite, TypeScript, TailwindCSS, Radix-UI를 사용해 만든 부트텐트
9
7
  - [시작하기](#시작하기)
10
8
  - [설치](#설치)
11
9
  - [프로젝트 설정](#프로젝트-설정)
12
- - [사용 예제](#사용-예제)
13
- - [예제 1: 기본 컴포넌트](#예제-1-기본-컴포넌트)
14
- - [예제 2: 모달, 알림, 다이얼로그, 토스트](#예제-2-모달-알림-다이얼로그-토스트)
15
- - [예제 3: 드롭다운](#예제-3-드롭다운)
16
- - [예제 4: 토글 버튼 그룹](#예제-4-토글-버튼-그룹)
17
- - [예제 5: 툴팁](#예제-5-툴팁)
18
10
  - [제작 및 배포](#제작-및-배포)
19
11
 
20
12
  ## 소개
21
13
 
22
- - `boottent-design`은 [부트텐트](https://boottent.com)의 디자인 시스템 라이브러리입니다.
23
- - React와 TypeScript를 기반으로 하며, TailwindCSS와 Radix-UI를 활용하여 높은 유연성과 접근성을 제공합니다.
24
- - 다양한 UI 컴포넌트를 제공하여 빠르고 효율적인 개발을 지원합니다.
14
+ - [부트텐트](https://boottent.com)의 디자인 시스템 라이브러리입니다.
25
15
 
26
16
  ## 시작하기
27
17
 
@@ -39,7 +29,7 @@ npm install boottent-design@latest
39
29
 
40
30
  ### 프로젝트 설정
41
31
 
42
- boottent-design을 프로젝트에 적용하기 위해 Vite와 TailwindCSS 설정이 필요합니다. 다음 단계를 따라 프로젝트를 설정하세요.
32
+ boottent-design을 프로젝트에 적용하기 위해 Vite와 TailwindCSS 설정이 필요합니다.
43
33
 
44
34
  #### 1. React + TypeScript 프로젝트 생성
45
35
 
@@ -321,271 +311,6 @@ ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
321
311
  );
322
312
  ```
323
313
 
324
- ## 사용 예제
325
-
326
- ### 예제 1: 기본 컴포넌트
327
-
328
- Icon, Symbols, Input, Button, Stack, Box, FlexBox 사용 예시입니다.
329
-
330
- ```tsx
331
- import { Input, Icon, Symbols } from "boottent-design/ui";
332
- import { FlexBox } from "boottent-design/layout";
333
- import { cn } from "boottent-design/utils";
334
- import { colors } from "boottent-design/styles";
335
-
336
- export default function Test() {
337
- return (
338
- <FlexBox.Col className="bg-grey-100 min-h-60 w-full items-center gap-4 rounded-lg p-10">
339
- <Input className={cn("w-full min-w-[500px]")} placeholder="입력해주세요." />
340
- <FlexBox.Row className="mx-auto w-full items-center justify-center gap-4 p-4">
341
- <Icon.Calendar fill={colors.lime[500]} />
342
- <Symbols.Boottent />
343
- <Symbols.Apple />
344
- </FlexBox.Row>
345
- </FlexBox.Col>
346
- );
347
- }
348
- ```
349
-
350
- ### 예제 2: 모달, 알림, 다이얼로그, 토스트
351
-
352
- usePortal 훅을 사용하여 모달, 다이얼로그, 토스트, 알람 창을 띄우려면 PortalProvider를 앱의 루트에 추가해주세요.
353
-
354
- ```tsx
355
- import { PortalProvider } from "boottent-design/provider";
356
-
357
- ReactDOM.createRoot(document.getElementById("root")!).render(
358
- <>
359
- <App />
360
- <PortalProvider />
361
- </>,
362
- );
363
- ```
364
-
365
- 모달, 알람창, 다이얼로그, 토스트를 사용하는 예시입니다.
366
-
367
- ```tsx
368
- import { Button } from "boottent-design/ui";
369
- import { Box, FlexBox } from "boottent-design/layout";
370
- import { cn } from "boottent-design/utils";
371
- import { usePortal } from "boottent-design/hooks";
372
-
373
- export default function Test() {
374
- const { toast, modal, alert, dialog } = usePortal();
375
-
376
- return (
377
- <FlexBox.Col className="bg-grey-100 min-h-60 w-full items-center gap-4 rounded-lg p-10">
378
- <Box className="flex gap-4">
379
- <Button
380
- variant={"outline"}
381
- theme={"primary"}
382
- size={"lg"}
383
- className={cn("w-full")}
384
- onClick={() =>
385
- toast({
386
- description: "토스트 메시지입니다.",
387
- position: "top-center",
388
- })
389
- }
390
- >
391
- 토스트
392
- </Button>
393
- <Button
394
- theme={"primary"}
395
- size={"lg"}
396
- className={cn("w-full")}
397
- onClick={() =>
398
- modal({
399
- title: "모달",
400
- description: "모달 메시지입니다.",
401
- onClose: () =>
402
- toast({
403
- title: "알림",
404
- description: "토스트 메시지입니다.",
405
- action: () => alert("토스트 액션!"),
406
- }),
407
- })
408
- }
409
- >
410
- 모달
411
- </Button>
412
- <Button
413
- theme={"secondary"}
414
- variant={"outline"}
415
- size={"lg"}
416
- className={cn("w-full")}
417
- onClick={() =>
418
- dialog({
419
- title: "알림",
420
- content: "다이얼로그 메시지입니다.",
421
- onConfirm: () => toast("알림창 닫힘!"),
422
- })
423
- }
424
- >
425
- 다이얼로그
426
- </Button>
427
- <Button
428
- theme={"secondary"}
429
- size={"lg"}
430
- className={cn("w-full")}
431
- onClick={() =>
432
- alert({
433
- title: "알림",
434
- description: "알림 메시지입니다.",
435
- onConfirm: () => toast("알림창 닫힘!"),
436
- })
437
- }
438
- >
439
- 알림
440
- </Button>
441
- </Box>
442
- </FlexBox.Col>
443
- );
444
- }
445
- ```
446
-
447
- ### 예제 3: 드롭다운
448
-
449
- ```tsx
450
- import { useEffect, useState } from "react";
451
- import { Dropdown, Icon, Button } from "boottent-design/ui";
452
- import { Box } from "boottent-design/layout";
453
- import { SelectedDropdownItem, DropdownContainerOptionsType } from "boottent-design/types";
454
- import { getDropdownButtonText } from "boottent-design/utils";
455
-
456
- const DropdownExample = ({ defaultValue }: { defaultValue?: SelectedDropdownItem[] }) => {
457
- const [selectedItems, setSelectedItems] = useState<SelectedDropdownItem[]>(defaultValue || []);
458
-
459
- const dropdownItems: DropdownContainerOptionsType[] = [
460
- {
461
- containerType: "default", // "default" | "checkbox" | "radio" => 컨테이너 묶음의 전체적인 타입입니다
462
- containerKey: "interactiveDefault1", // 컨테이너 묶음의 키입니다.
463
- containerTitle: "기본 드롭다운 컨테이너", // 컨테이너 타이틀입니다.
464
- isShowTitle: true, // 컨테이너 타이틀의 표시 여부입니다.
465
- isShowSeparator: true, // 컨테이너 묶음들 사이의 구분선 표시 여부입니다.
466
- items: [
467
- {
468
- type: "default", // "default" | "checkbox" | "radio" | "separator" | "title" | 'action' | "sub"
469
- label: "기본 아이템 1",
470
- value: "default item 1",
471
- },
472
- {
473
- type: "separator", // 각 드롭다운 아이템 요소의 타입입니다.
474
- }
475
- {
476
- type: "default",
477
- label: "기본 아이템 2",
478
- value: "default_item_2",
479
- },
480
- ],
481
- },
482
- ];
483
-
484
- useEffect(() => {
485
- console.log("Selected Items:", selectedItems);
486
- }, [selectedItems]);
487
-
488
- // Dropdown의 size 설정
489
-
490
- return (
491
- <Box className="w-full space-y-8 py-10">
492
- <Dropdown items={dropdownItems} onChange={setSelectedItems}>
493
- <Button
494
- size="sm"
495
- variant="outline"
496
- theme="secondary"
497
- icRight={<Icon.ArrowDown size="12" />}
498
- className="text-medium14 min-w-fit justify-between"
499
- >
500
- {getDropdownButtonText(selectedItems, "Open Dropdown")}
501
- </Button>
502
- </Dropdown>
503
- </Box>
504
- );
505
- };
506
- ```
507
-
508
- ### 예제 4: 토글 버튼 그룹
509
-
510
- ```tsx
511
- import { useState } from "react";
512
- import { FlexBox, Box } from "boottent-design/layout";
513
- import { ToggleButtonGroup } from "boottent-design/ui";
514
-
515
- export const ToggleButtonExamples = () => {
516
- const [value, setValue] = useState<string>("option1");
517
-
518
- return (
519
- <FlexBox.Col className="items-center gap-4">
520
- <h3>Single Toggle with Tooltip</h3>
521
- <ToggleButtonGroup.Single
522
- theme="primary"
523
- size="md"
524
- shape="square"
525
- variant="outline"
526
- value={value}
527
- onChange={setValue}
528
- options={[
529
- {
530
- value: "option1",
531
- label: "Option 1",
532
- tooltip: { label: "Tooltip for Option 1", position: "bottom-left", bubbleTip: false },
533
- },
534
- {
535
- value: "option2",
536
- label: "Option 2",
537
- },
538
- {
539
- value: "option3",
540
- label: "Option 3",
541
- },
542
- ]}
543
- />
544
- <Box className="mt-2 text-sm text-gray-600">선택된 옵션: {value}</Box>
545
- </FlexBox.Col>
546
- );
547
- };
548
- ```
549
-
550
- ### 예제 5: 툴팁
551
-
552
- ```tsx
553
- import { Tooltip, Button } from "boottent-design/ui";
554
- import { FlexBox } from "boottent-design/layout";
555
-
556
- export const TooltipExamples = () => {
557
- const variants = [
558
- {
559
- variant: "primary",
560
- text: "Primary Tooltip",
561
- label: "This is a primary tooltip!",
562
- },
563
- {
564
- variant: "secondary",
565
- text: "Secondary Tooltip",
566
- label: "This is a secondary tooltip!",
567
- },
568
- {
569
- variant: "white",
570
- text: "White Tooltip",
571
- label: "This is a white tooltip!",
572
- },
573
- ];
574
-
575
- return (
576
- <FlexBox.Col className="justify-center gap-10 py-40">
577
- {variants.map(({ variant, text, label }) => (
578
- <Tooltip key={variant} variant={variant} label={label} bubbleTip={false}>
579
- <Button theme={"primary"} variant="outline">
580
- {text}
581
- </Button>
582
- </Tooltip>
583
- ))}
584
- </FlexBox.Col>
585
- );
586
- };
587
- ```
588
-
589
314
  ## 제작 및 배포
590
315
 
591
316
  - 김동성 (Boottent Frontend-Developer)
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react/jsx-runtime"),k=require("../index-D2yRYgbt.cjs"),m=require("../index-X01gQR_D.cjs");require("../index-B7Y52_26.cjs");require("react");require("react-dom");const b=require("../index-D1ZCO8Bq.cjs"),X=({src:t,alt:e,object:n="cover",lazy:r=!0,size:a="auto",className:i,...s})=>{const o={contain:"object-contain h-full",cover:"object-cover h-full",fill:"object-fill h-full","scale-down":"object-scale-down",none:"object-none"},c={full:"w-full",fit:"w-fit",auto:"w-auto"};let u="",f={};return typeof a=="string"?u=c[a]:typeof a=="number"&&(f={width:`${a}px`}),d.jsx("img",{src:t,alt:e?`${e} 이미지`:"이미지",loading:r?"lazy":"eager",className:m.cn(o[n],u,i),style:f,...s})},U=6048e5,ie=864e5,G=6e4,A=36e5,B=Symbol.for("constructDateFrom");function x(t,e){return typeof t=="function"?t(e):t&&typeof t=="object"&&B in t?t[B](e):t instanceof Date?new t.constructor(e):new Date(e)}function w(t,e){return x(e||t,t)}let se={};function C(){return se}function N(t,e){var o,c,u,f;const n=C(),r=(e==null?void 0:e.weekStartsOn)??((c=(o=e==null?void 0:e.locale)==null?void 0:o.options)==null?void 0:c.weekStartsOn)??n.weekStartsOn??((f=(u=n.locale)==null?void 0:u.options)==null?void 0:f.weekStartsOn)??0,a=w(t,e==null?void 0:e.in),i=a.getDay(),s=(i<r?7:0)+i-r;return a.setDate(a.getDate()-s),a.setHours(0,0,0,0),a}function Y(t,e){return N(t,{...e,weekStartsOn:1})}function V(t,e){const n=w(t,e==null?void 0:e.in),r=n.getFullYear(),a=x(n,0);a.setFullYear(r+1,0,4),a.setHours(0,0,0,0);const i=Y(a),s=x(n,0);s.setFullYear(r,0,4),s.setHours(0,0,0,0);const o=Y(s);return n.getTime()>=i.getTime()?r+1:n.getTime()>=o.getTime()?r:r-1}function $(t){const e=w(t),n=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return n.setUTCFullYear(e.getFullYear()),+t-+n}function z(t,...e){const n=x.bind(null,e.find(r=>typeof r=="object"));return e.map(n)}function H(t,e){const n=w(t,e==null?void 0:e.in);return n.setHours(0,0,0,0),n}function J(t,e,n){const[r,a]=z(n==null?void 0:n.in,t,e),i=H(r),s=H(a),o=+i-$(i),c=+s-$(s);return Math.round((o-c)/ie)}function oe(t,e){const n=V(t,e),r=x(t,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),Y(r)}function ue(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function ce(t){return!(!ue(t)&&typeof t!="number"||isNaN(+w(t)))}function de(t,e,n){const[r,a]=z(n==null?void 0:n.in,t,e),i=I(r,a),s=Math.abs(J(r,a));r.setDate(r.getDate()-i*s);const o=+(I(r,a)===-i),c=i*(s-o);return c===0?0:c}function I(t,e){const n=t.getFullYear()-e.getFullYear()||t.getMonth()-e.getMonth()||t.getDate()-e.getDate()||t.getHours()-e.getHours()||t.getMinutes()-e.getMinutes()||t.getSeconds()-e.getSeconds()||t.getMilliseconds()-e.getMilliseconds();return n<0?-1:n>0?1:n}function le(t,e){const n=w(t,e==null?void 0:e.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}const fe={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},me=(t,e,n)=>{let r;const a=fe[t];return typeof a=="string"?r=a:e===1?r=a.one:r=a.other.replace("{{count}}",e.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function F(t){return(e={})=>{const n=e.width?String(e.width):t.defaultWidth;return t.formats[n]||t.formats[t.defaultWidth]}}const he={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},ge={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},we={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},ye={date:F({formats:he,defaultWidth:"full"}),time:F({formats:ge,defaultWidth:"full"}),dateTime:F({formats:we,defaultWidth:"full"})},be={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},xe=(t,e,n,r)=>be[t];function p(t){return(e,n)=>{const r=n!=null&&n.context?String(n.context):"standalone";let a;if(r==="formatting"&&t.formattingValues){const s=t.defaultFormattingWidth||t.defaultWidth,o=n!=null&&n.width?String(n.width):s;a=t.formattingValues[o]||t.formattingValues[s]}else{const s=t.defaultWidth,o=n!=null&&n.width?String(n.width):t.defaultWidth;a=t.values[o]||t.values[s]}const i=t.argumentCallback?t.argumentCallback(e):e;return a[i]}}const Me={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},ve={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},ke={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},De={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Pe={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Oe={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},pe=(t,e)=>{const n=Number(t),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},Se={ordinalNumber:pe,era:p({values:Me,defaultWidth:"wide"}),quarter:p({values:ve,defaultWidth:"wide",argumentCallback:t=>t-1}),month:p({values:ke,defaultWidth:"wide"}),day:p({values:De,defaultWidth:"wide"}),dayPeriod:p({values:Pe,defaultWidth:"wide",formattingValues:Oe,defaultFormattingWidth:"wide"})};function S(t){return(e,n={})=>{const r=n.width,a=r&&t.matchPatterns[r]||t.matchPatterns[t.defaultMatchWidth],i=e.match(a);if(!i)return null;const s=i[0],o=r&&t.parsePatterns[r]||t.parsePatterns[t.defaultParseWidth],c=Array.isArray(o)?Ne(o,y=>y.test(s)):Te(o,y=>y.test(s));let u;u=t.valueCallback?t.valueCallback(c):c,u=n.valueCallback?n.valueCallback(u):u;const f=e.slice(s.length);return{value:u,rest:f}}}function Te(t,e){for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(t[n]))return n}function Ne(t,e){for(let n=0;n<t.length;n++)if(e(t[n]))return n}function We(t){return(e,n={})=>{const r=e.match(t.matchPattern);if(!r)return null;const a=r[0],i=e.match(t.parsePattern);if(!i)return null;let s=t.valueCallback?t.valueCallback(i[0]):i[0];s=n.valueCallback?n.valueCallback(s):s;const o=e.slice(a.length);return{value:s,rest:o}}}const Ye=/^(\d+)(th|st|nd|rd)?/i,Ce=/\d+/i,je={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Fe={any:[/^b/i,/^(a|c)/i]},qe={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Ee={any:[/1/i,/2/i,/3/i,/4/i]},Be={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},$e={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},He={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Ie={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},_e={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Qe={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Re={ordinalNumber:We({matchPattern:Ye,parsePattern:Ce,valueCallback:t=>parseInt(t,10)}),era:S({matchPatterns:je,defaultMatchWidth:"wide",parsePatterns:Fe,defaultParseWidth:"any"}),quarter:S({matchPatterns:qe,defaultMatchWidth:"wide",parsePatterns:Ee,defaultParseWidth:"any",valueCallback:t=>t+1}),month:S({matchPatterns:Be,defaultMatchWidth:"wide",parsePatterns:$e,defaultParseWidth:"any"}),day:S({matchPatterns:He,defaultMatchWidth:"wide",parsePatterns:Ie,defaultParseWidth:"any"}),dayPeriod:S({matchPatterns:_e,defaultMatchWidth:"any",parsePatterns:Qe,defaultParseWidth:"any"})},Le={code:"en-US",formatDistance:me,formatLong:ye,formatRelative:xe,localize:Se,match:Re,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Xe(t,e){const n=w(t,e==null?void 0:e.in);return J(n,le(n))+1}function Ue(t,e){const n=w(t,e==null?void 0:e.in),r=+Y(n)-+oe(n);return Math.round(r/U)+1}function Z(t,e){var f,y,M,O;const n=w(t,e==null?void 0:e.in),r=n.getFullYear(),a=C(),i=(e==null?void 0:e.firstWeekContainsDate)??((y=(f=e==null?void 0:e.locale)==null?void 0:f.options)==null?void 0:y.firstWeekContainsDate)??a.firstWeekContainsDate??((O=(M=a.locale)==null?void 0:M.options)==null?void 0:O.firstWeekContainsDate)??1,s=x((e==null?void 0:e.in)||t,0);s.setFullYear(r+1,0,i),s.setHours(0,0,0,0);const o=N(s,e),c=x((e==null?void 0:e.in)||t,0);c.setFullYear(r,0,i),c.setHours(0,0,0,0);const u=N(c,e);return+n>=+o?r+1:+n>=+u?r:r-1}function Ge(t,e){var o,c,u,f;const n=C(),r=(e==null?void 0:e.firstWeekContainsDate)??((c=(o=e==null?void 0:e.locale)==null?void 0:o.options)==null?void 0:c.firstWeekContainsDate)??n.firstWeekContainsDate??((f=(u=n.locale)==null?void 0:u.options)==null?void 0:f.firstWeekContainsDate)??1,a=Z(t,e),i=x((e==null?void 0:e.in)||t,0);return i.setFullYear(a,0,r),i.setHours(0,0,0,0),N(i,e)}function Ae(t,e){const n=w(t,e==null?void 0:e.in),r=+N(n,e)-+Ge(n,e);return Math.round(r/U)+1}function l(t,e){const n=t<0?"-":"",r=Math.abs(t).toString().padStart(e,"0");return n+r}const v={y(t,e){const n=t.getFullYear(),r=n>0?n:1-n;return l(e==="yy"?r%100:r,e.length)},M(t,e){const n=t.getMonth();return e==="M"?String(n+1):l(n+1,2)},d(t,e){return l(t.getDate(),e.length)},a(t,e){const n=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(t,e){return l(t.getHours()%12||12,e.length)},H(t,e){return l(t.getHours(),e.length)},m(t,e){return l(t.getMinutes(),e.length)},s(t,e){return l(t.getSeconds(),e.length)},S(t,e){const n=e.length,r=t.getMilliseconds(),a=Math.trunc(r*Math.pow(10,n-3));return l(a,e.length)}},P={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},_={G:function(t,e,n){const r=t.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(t,e,n){if(e==="yo"){const r=t.getFullYear(),a=r>0?r:1-r;return n.ordinalNumber(a,{unit:"year"})}return v.y(t,e)},Y:function(t,e,n,r){const a=Z(t,r),i=a>0?a:1-a;if(e==="YY"){const s=i%100;return l(s,2)}return e==="Yo"?n.ordinalNumber(i,{unit:"year"}):l(i,e.length)},R:function(t,e){const n=V(t);return l(n,e.length)},u:function(t,e){const n=t.getFullYear();return l(n,e.length)},Q:function(t,e,n){const r=Math.ceil((t.getMonth()+1)/3);switch(e){case"Q":return String(r);case"QQ":return l(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(t,e,n){const r=Math.ceil((t.getMonth()+1)/3);switch(e){case"q":return String(r);case"qq":return l(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(t,e,n){const r=t.getMonth();switch(e){case"M":case"MM":return v.M(t,e);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(t,e,n){const r=t.getMonth();switch(e){case"L":return String(r+1);case"LL":return l(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(t,e,n,r){const a=Ae(t,r);return e==="wo"?n.ordinalNumber(a,{unit:"week"}):l(a,e.length)},I:function(t,e,n){const r=Ue(t);return e==="Io"?n.ordinalNumber(r,{unit:"week"}):l(r,e.length)},d:function(t,e,n){return e==="do"?n.ordinalNumber(t.getDate(),{unit:"date"}):v.d(t,e)},D:function(t,e,n){const r=Xe(t);return e==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):l(r,e.length)},E:function(t,e,n){const r=t.getDay();switch(e){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(t,e,n,r){const a=t.getDay(),i=(a-r.weekStartsOn+8)%7||7;switch(e){case"e":return String(i);case"ee":return l(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(a,{width:"short",context:"formatting"});case"eeee":default:return n.day(a,{width:"wide",context:"formatting"})}},c:function(t,e,n,r){const a=t.getDay(),i=(a-r.weekStartsOn+8)%7||7;switch(e){case"c":return String(i);case"cc":return l(i,e.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(a,{width:"narrow",context:"standalone"});case"cccccc":return n.day(a,{width:"short",context:"standalone"});case"cccc":default:return n.day(a,{width:"wide",context:"standalone"})}},i:function(t,e,n){const r=t.getDay(),a=r===0?7:r;switch(e){case"i":return String(a);case"ii":return l(a,e.length);case"io":return n.ordinalNumber(a,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(t,e,n){const a=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},b:function(t,e,n){const r=t.getHours();let a;switch(r===12?a=P.noon:r===0?a=P.midnight:a=r/12>=1?"pm":"am",e){case"b":case"bb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},B:function(t,e,n){const r=t.getHours();let a;switch(r>=17?a=P.evening:r>=12?a=P.afternoon:r>=4?a=P.morning:a=P.night,e){case"B":case"BB":case"BBB":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},h:function(t,e,n){if(e==="ho"){let r=t.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return v.h(t,e)},H:function(t,e,n){return e==="Ho"?n.ordinalNumber(t.getHours(),{unit:"hour"}):v.H(t,e)},K:function(t,e,n){const r=t.getHours()%12;return e==="Ko"?n.ordinalNumber(r,{unit:"hour"}):l(r,e.length)},k:function(t,e,n){let r=t.getHours();return r===0&&(r=24),e==="ko"?n.ordinalNumber(r,{unit:"hour"}):l(r,e.length)},m:function(t,e,n){return e==="mo"?n.ordinalNumber(t.getMinutes(),{unit:"minute"}):v.m(t,e)},s:function(t,e,n){return e==="so"?n.ordinalNumber(t.getSeconds(),{unit:"second"}):v.s(t,e)},S:function(t,e){return v.S(t,e)},X:function(t,e,n){const r=t.getTimezoneOffset();if(r===0)return"Z";switch(e){case"X":return R(r);case"XXXX":case"XX":return D(r);case"XXXXX":case"XXX":default:return D(r,":")}},x:function(t,e,n){const r=t.getTimezoneOffset();switch(e){case"x":return R(r);case"xxxx":case"xx":return D(r);case"xxxxx":case"xxx":default:return D(r,":")}},O:function(t,e,n){const r=t.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+Q(r,":");case"OOOO":default:return"GMT"+D(r,":")}},z:function(t,e,n){const r=t.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+Q(r,":");case"zzzz":default:return"GMT"+D(r,":")}},t:function(t,e,n){const r=Math.trunc(+t/1e3);return l(r,e.length)},T:function(t,e,n){return l(+t,e.length)}};function Q(t,e=""){const n=t>0?"-":"+",r=Math.abs(t),a=Math.trunc(r/60),i=r%60;return i===0?n+String(a):n+String(a)+e+l(i,2)}function R(t,e){return t%60===0?(t>0?"-":"+")+l(Math.abs(t)/60,2):D(t,e)}function D(t,e=""){const n=t>0?"-":"+",r=Math.abs(t),a=l(Math.trunc(r/60),2),i=l(r%60,2);return n+a+e+i}const L=(t,e)=>{switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});case"PPPP":default:return e.date({width:"full"})}},K=(t,e)=>{switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});case"pppp":default:return e.time({width:"full"})}},Ve=(t,e)=>{const n=t.match(/(P+)(p+)?/)||[],r=n[1],a=n[2];if(!a)return L(t,e);let i;switch(r){case"P":i=e.dateTime({width:"short"});break;case"PP":i=e.dateTime({width:"medium"});break;case"PPP":i=e.dateTime({width:"long"});break;case"PPPP":default:i=e.dateTime({width:"full"});break}return i.replace("{{date}}",L(r,e)).replace("{{time}}",K(a,e))},ze={p:K,P:Ve},Je=/^D+$/,Ze=/^Y+$/,Ke=["D","DD","YY","YYYY"];function et(t){return Je.test(t)}function tt(t){return Ze.test(t)}function nt(t,e,n){const r=rt(t,e,n);if(console.warn(r),Ke.includes(t))throw new RangeError(r)}function rt(t,e,n){const r=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${e}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const at=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,it=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,st=/^'([^]*?)'?$/,ot=/''/g,ut=/[a-zA-Z]/;function q(t,e,n){var f,y,M,O;const r=C(),a=r.locale??Le,i=r.firstWeekContainsDate??((y=(f=r.locale)==null?void 0:f.options)==null?void 0:y.firstWeekContainsDate)??1,s=r.weekStartsOn??((O=(M=r.locale)==null?void 0:M.options)==null?void 0:O.weekStartsOn)??0,o=w(t,n==null?void 0:n.in);if(!ce(o))throw new RangeError("Invalid time value");let c=e.match(it).map(g=>{const h=g[0];if(h==="p"||h==="P"){const j=ze[h];return j(g,a.formatLong)}return g}).join("").match(at).map(g=>{if(g==="''")return{isToken:!1,value:"'"};const h=g[0];if(h==="'")return{isToken:!1,value:ct(g)};if(_[h])return{isToken:!0,value:g};if(h.match(ut))throw new RangeError("Format string contains an unescaped latin alphabet character `"+h+"`");return{isToken:!1,value:g}});a.localize.preprocessor&&(c=a.localize.preprocessor(o,c));const u={firstWeekContainsDate:i,weekStartsOn:s,locale:a};return c.map(g=>{if(!g.isToken)return g.value;const h=g.value;(tt(h)||et(h))&&nt(h,e,String(t));const j=_[h[0]];return j(o,h,a.localize,u)}).join("")}function ct(t){const e=t.match(st);return e?e[1].replace(ot,"'"):t}function ee(t,e){const n=()=>x(e==null?void 0:e.in,NaN),a=mt(t);let i;if(a.date){const u=ht(a.date,2);i=gt(u.restDateString,u.year)}if(!i||isNaN(+i))return n();const s=+i;let o=0,c;if(a.time&&(o=wt(a.time),isNaN(o)))return n();if(a.timezone){if(c=yt(a.timezone),isNaN(c))return n()}else{const u=new Date(s+o),f=w(0,e==null?void 0:e.in);return f.setFullYear(u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()),f.setHours(u.getUTCHours(),u.getUTCMinutes(),u.getUTCSeconds(),u.getUTCMilliseconds()),f}return w(s+o+c,e==null?void 0:e.in)}const W={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},dt=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,lt=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,ft=/^([+-])(\d{2})(?::?(\d{2}))?$/;function mt(t){const e={},n=t.split(W.dateTimeDelimiter);let r;if(n.length>2)return e;if(/:/.test(n[0])?r=n[0]:(e.date=n[0],r=n[1],W.timeZoneDelimiter.test(e.date)&&(e.date=t.split(W.timeZoneDelimiter)[0],r=t.substr(e.date.length,t.length))),r){const a=W.timezone.exec(r);a?(e.time=r.replace(a[1],""),e.timezone=a[1]):e.time=r}return e}function ht(t,e){const n=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+e)+"})|(\\d{2}|[+-]\\d{"+(2+e)+"})$)"),r=t.match(n);if(!r)return{year:NaN,restDateString:""};const a=r[1]?parseInt(r[1]):null,i=r[2]?parseInt(r[2]):null;return{year:i===null?a:i*100,restDateString:t.slice((r[1]||r[2]).length)}}function gt(t,e){if(e===null)return new Date(NaN);const n=t.match(dt);if(!n)return new Date(NaN);const r=!!n[4],a=T(n[1]),i=T(n[2])-1,s=T(n[3]),o=T(n[4]),c=T(n[5])-1;if(r)return kt(e,o,c)?bt(e,o,c):new Date(NaN);{const u=new Date(0);return!Mt(e,i,s)||!vt(e,a)?new Date(NaN):(u.setUTCFullYear(e,i,Math.max(a,s)),u)}}function T(t){return t?parseInt(t):1}function wt(t){const e=t.match(lt);if(!e)return NaN;const n=E(e[1]),r=E(e[2]),a=E(e[3]);return Dt(n,r,a)?n*A+r*G+a*1e3:NaN}function E(t){return t&&parseFloat(t.replace(",","."))||0}function yt(t){if(t==="Z")return 0;const e=t.match(ft);if(!e)return 0;const n=e[1]==="+"?-1:1,r=parseInt(e[2]),a=e[3]&&parseInt(e[3])||0;return Pt(r,a)?n*(r*A+a*G):NaN}function bt(t,e,n){const r=new Date(0);r.setUTCFullYear(t,0,4);const a=r.getUTCDay()||7,i=(e-1)*7+n+1-a;return r.setUTCDate(r.getUTCDate()+i),r}const xt=[31,null,31,30,31,30,31,31,30,31,30,31];function te(t){return t%400===0||t%4===0&&t%100!==0}function Mt(t,e,n){return e>=0&&e<=11&&n>=1&&n<=(xt[e]||(te(t)?29:28))}function vt(t,e){return e>=1&&e<=(te(t)?366:365)}function kt(t,e,n){return e>=1&&e<=53&&n>=0&&n<=6}function Dt(t,e,n){return t===24?e===0&&n===0:n>=0&&n<60&&e>=0&&e<60&&t>=0&&t<25}function Pt(t,e){return e>=0&&e<=59}function Ot({logo:t,title:e,batchName:n="",adTitle:r,startDate:a,tuition:i,nbCardRequired:s,isLoading:o=!1,regEndDate:c}){if(o)return d.jsx(re,{});const u=`${pt(a)} · ${St(i,s)}`;return d.jsx(ne,{logo:t,title:`${e} ${n}`,adTitle:r,footerText:u,regEndDate:c})}function ne({logo:t,title:e,adTitle:n,footerText:r,regEndDate:a}){return d.jsxs(m.FlexBox.Col,{className:"relative z-10 h-full w-full items-start justify-between gap-2 overflow-hidden rounded-[10px] border border-grey-200 bg-white p-4 text-grey-800 md:p-5 lg:p-6",children:[d.jsx(m.Tag,{variant:"ad",style:{background:k.adProducts.event.background,color:k.adProducts.event.color},children:a?Tt(a):k.adProducts.event.value.toUpperCase()}),d.jsx(X,{src:t,alt:`${e} 로고`,className:"h-4 object-contain"}),d.jsxs(m.FlexBox.Col,{className:"w-full gap-2",children:[d.jsx("h3",{className:"line-clamp-2 h-auto text-sm font-normal md:text-base lg:h-12",title:e,children:e}),d.jsx("p",{className:"line-clamp-2 h-auto w-full break-keep rounded bg-grey-100 px-2 py-1 text-[13px] font-semibold text-grey-600 md:h-[54px] md:text-[15px] md:text-grey-800",children:n}),d.jsx(m.Box,{className:"text-[13px] leading-[19px] text-grey-600",children:r})]})]})}function re(){return d.jsxs(b.Skeleton,{type:"background",className:"relative z-10 flex h-full w-full flex-col justify-between gap-2 overflow-hidden rounded-[10px] p-4 md:p-5 lg:p-6",children:[d.jsx(m.Tag,{variant:"ad",style:{background:k.adProducts.event.background,color:k.adProducts.event.color},className:m.cn("h-7 w-20 animate-pulse"),children:""}),d.jsx(b.Skeleton,{className:"h-4 w-1/2"}),d.jsxs(m.FlexBox.Col,{className:"gap-2",children:[d.jsx(m.Box,{className:"h-10 w-full",children:d.jsx(b.Skeleton,{className:"h-5 w-4/5"})}),d.jsx(b.Skeleton,{className:"h-8 w-full"})]}),d.jsx(b.Skeleton,{className:"mt-2 h-4 w-2/3"})]})}const pt=t=>{if(!t)return"";const e=ee(t),n=q(e,"MM/dd");return n.includes("98")?`${q(e,"MM")}월중 개강`:n.includes("99")?`${q(e,"MM")}월중(예상) 개강`:`${n} 개강`},St=(t,e)=>{const n=e?"(내배카💳)":"";return t===0||t===void 0?`무료 ${n}`:`유료 ${n}`},Tt=t=>{const e=de(ee(t),new Date);return e<=0?"마감임박":`D-${e}`},Nt={homepage:{label:"홈페이지",value:"homepage",query:!1},boottent:{label:"자세히보기",value:"boottent",query:!1},curriculum:{label:"커리큘럼 보기",value:"curriculum",query:"curriculum"},event:{label:"이벤트",value:"event",query:"event"},reviews:{label:"후기보기",value:"reviews",query:"reviews"}};function Wt({adKey:t,filename:e,title:n,backgroundColor:r,hideButton:a=!1,buttonColors:i,linkType:s="homepage",isLoading:o=!1}){var M;const c=t&&e,u=`https://cdn.sayun.studio/boottent/images/banners/${t}/${e}`,f={background:i?i.button:k.defaultBannerColor.button,color:i?i.buttonText:k.defaultBannerColor.buttonText,border:i?i.button:k.defaultBannerColor.button},y=o?b.Skeleton:m.Box;return d.jsx(y,{style:{backgroundColor:o?void 0:r},type:o?"background":void 0,className:m.cn("relative flex h-40 w-full items-start justify-center overflow-hidden pb-6 pt-0 md:h-[200px] md:pb-0 md:pt-10 lg:pt-6",!o&&"border-y border-y-grey-200"),children:o?d.jsx(ae,{}):d.jsxs(d.Fragment,{children:[d.jsx(m.FlexBox.Row,{className:"flex h-full w-full max-w-screen-xl items-center justify-center px-0 md:h-auto md:px-6 lg:px-10",children:c?d.jsx(X,{loading:"lazy",src:u,alt:`${n} 이미지`,className:"h-full w-full object-contain"}):d.jsx(m.Box,{className:"h-full w-full bg-grey-100 text-muted",children:n})}),!a&&d.jsx(m.Box,{className:"absolute inset-0 mx-auto max-w-screen-xl px-4 md:px-6 lg:px-10",children:d.jsx(m.Button,{style:f,theme:"etc",variant:"solid",className:"absolute bottom-4 right-4 w-24 md:bottom-6 md:right-6 md:w-32 lg:bottom-4 lg:right-10",children:((M=Nt[s])==null?void 0:M.label)+" →"||"홈페이지 →"})})]})})}function ae(){return d.jsxs(m.FlexBox.Col,{className:"mx-auto flex h-full w-full max-w-screen-xl items-start gap-5 px-4 pt-4 md:px-6 md:pt-0 lg:px-10",children:[d.jsx(b.Skeleton,{type:"text",className:"h-6 w-4/5 rounded-[10px] md:h-10"}),d.jsx(b.Skeleton,{type:"text",className:"h-10 w-1/2 rounded-[10px] md:h-16 lg:w-3/5"}),d.jsx(b.Skeleton,{type:"text",className:"absolute bottom-4 right-4 aspect-[3/1] w-[120px] shrink-0 md:right-6 md:w-[140px] lg:right-10"})]})}exports.BannerLoading=ae;exports.ContentsCard=ne;exports.EventCard=Ot;exports.LoadingCard=re;exports.MainBannerImage=Wt;