@designbasekorea/ui-wc 0.5.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/lottie-0e23d630.js +1 -0
- package/dist/esm/components/animation-background/canvas-controller.js +1 -121
- package/dist/esm/components/animation-background/controls.js +1 -180
- package/dist/esm/components/animation-background/graphite-controller.js +1 -196
- package/dist/esm/components/animation-background/graphite-presets.js +1 -42
- package/dist/esm/components/animation-background/graphite-shader.js +1 -111
- package/dist/esm/components/animation-background/layers.js +1 -369
- package/dist/esm/components/animation-background/lumina-presets.js +1 -53
- package/dist/esm/components/animation-background/lumina-shaders.js +1 -181
- package/dist/esm/components/animation-background/lumina-utils.js +1 -60
- package/dist/esm/components/animation-background/particle-defaults.js +1 -36
- package/dist/esm/components/animation-background/renderers.js +1 -167
- package/dist/esm/components/animation-background/shader-controller.js +1 -154
- package/dist/esm/components/color-picker-utils.js +1 -134
- package/dist/esm/components/date-picker-utils.js +1 -140
- package/dist/esm/components/db-accordion.js +1 -304
- package/dist/esm/components/db-ad-banner.js +1 -455
- package/dist/esm/components/db-ai-chat-list.d.ts +43 -0
- package/dist/esm/components/db-ai-chat-list.js +1 -0
- package/dist/esm/components/db-ai-chat.d.ts +159 -0
- package/dist/esm/components/db-ai-chat.js +1 -0
- package/dist/esm/components/db-alert.js +1 -149
- package/dist/esm/components/db-animation-background.js +1 -486
- package/dist/esm/components/db-animation-text.js +1 -601
- package/dist/esm/components/db-app-badge.js +1 -88
- package/dist/esm/components/db-audio-player.js +1 -752
- package/dist/esm/components/db-avatar.js +1 -188
- package/dist/esm/components/db-backdrop.js +1 -139
- package/dist/esm/components/db-badge.js +1 -91
- package/dist/esm/components/db-banner.js +1 -188
- package/dist/esm/components/db-bottom-navigation.js +1 -146
- package/dist/esm/components/db-bottom-sheet.js +1 -481
- package/dist/esm/components/db-breadcrumbs.js +1 -329
- package/dist/esm/components/db-button.js +1 -316
- package/dist/esm/components/db-calendar.js +1 -675
- package/dist/esm/components/db-card.js +1 -265
- package/dist/esm/components/db-carousel.js +1 -264
- package/dist/esm/components/db-chat-composer.d.ts +134 -0
- package/dist/esm/components/db-chat-composer.js +1 -0
- package/dist/esm/components/db-chat-list.d.ts +47 -0
- package/dist/esm/components/db-chat-list.js +1 -0
- package/dist/esm/components/db-chat-message.d.ts +39 -0
- package/dist/esm/components/db-chat-message.js +1 -0
- package/dist/esm/components/db-chat-orb.d.ts +99 -0
- package/dist/esm/components/db-chat-orb.js +1 -0
- package/dist/esm/components/db-chat-room.d.ts +71 -0
- package/dist/esm/components/db-chat-room.js +1 -0
- package/dist/esm/components/db-chat-suggestions.d.ts +44 -0
- package/dist/esm/components/db-chat-suggestions.js +1 -0
- package/dist/esm/components/db-chat-typing.d.ts +22 -0
- package/dist/esm/components/db-chat-typing.js +1 -0
- package/dist/esm/components/db-chat-welcome.d.ts +32 -0
- package/dist/esm/components/db-chat-welcome.js +1 -0
- package/dist/esm/components/db-chat-widget.d.ts +146 -0
- package/dist/esm/components/db-chat-widget.js +1 -0
- package/dist/esm/components/db-checkbox.js +1 -202
- package/dist/esm/components/db-chip.js +1 -104
- package/dist/esm/components/db-code-block.js +1 -304
- package/dist/esm/components/db-color-picker.js +1 -746
- package/dist/esm/components/db-confirm.js +1 -191
- package/dist/esm/components/db-container.js +1 -39
- package/dist/esm/components/db-context-menu.js +1 -265
- package/dist/esm/components/db-countdown.js +1 -146
- package/dist/esm/components/db-cursor-follower.js +1 -173
- package/dist/esm/components/db-date-picker.js +1 -837
- package/dist/esm/components/db-divider.js +1 -66
- package/dist/esm/components/db-download-progress.d.ts +89 -0
- package/dist/esm/components/db-download-progress.js +1 -0
- package/dist/esm/components/db-drawer.js +1 -245
- package/dist/esm/components/db-dropdown.js +1 -493
- package/dist/esm/components/db-dropzone.js +1 -266
- package/dist/esm/components/db-email-verify.d.ts +62 -0
- package/dist/esm/components/db-email-verify.js +1 -0
- package/dist/esm/components/db-empty-state.js +1 -97
- package/dist/esm/components/db-file-uploader.js +1 -256
- package/dist/esm/components/db-floating-action-button.js +1 -139
- package/dist/esm/components/db-footer.js +1 -385
- package/dist/esm/components/db-form.js +1 -566
- package/dist/esm/components/db-gantt.js +1 -882
- package/dist/esm/components/db-gradient.js +1 -133
- package/dist/esm/components/db-grid-background.js +1 -909
- package/dist/esm/components/db-grid.js +1 -73
- package/dist/esm/components/db-icons.d.ts +3 -0
- package/dist/esm/components/db-icons.js +1 -82
- package/dist/esm/components/db-image-list.js +1 -214
- package/dist/esm/components/db-image-placeholder.js +1 -96
- package/dist/esm/components/db-image.js +1 -289
- package/dist/esm/components/db-indicator.js +1 -517
- package/dist/esm/components/db-input.js +1 -420
- package/dist/esm/components/db-kanban.js +1 -538
- package/dist/esm/components/db-label.js +1 -66
- package/dist/esm/components/db-lightbox.js +1 -372
- package/dist/esm/components/db-list.js +1 -340
- package/dist/esm/components/db-logo-svg.js +1 -72
- package/dist/esm/components/db-logo.js +1 -106
- package/dist/esm/components/db-lottie.js +1 -109
- package/dist/esm/components/db-markdown-editor.js +1 -458
- package/dist/esm/components/db-marquee.js +1 -402
- package/dist/esm/components/db-masonry.js +1 -94
- package/dist/esm/components/db-menu-item.js +1 -211
- package/dist/esm/components/db-modal.js +1 -522
- package/dist/esm/components/db-navbar.js +1 -680
- package/dist/esm/components/db-onboarding-modal.js +1 -322
- package/dist/esm/components/db-otp-input.d.ts +53 -0
- package/dist/esm/components/db-otp-input.js +1 -0
- package/dist/esm/components/db-page-header.js +1 -312
- package/dist/esm/components/db-pagination.js +1 -271
- package/dist/esm/components/db-phone-verify.d.ts +61 -0
- package/dist/esm/components/db-phone-verify.js +1 -0
- package/dist/esm/components/db-popover.js +1 -580
- package/dist/esm/components/db-progress-step.js +1 -166
- package/dist/esm/components/db-progress.js +1 -171
- package/dist/esm/components/db-progressbar.js +1 -72
- package/dist/esm/components/db-radio.js +1 -172
- package/dist/esm/components/db-random-gradient.js +1 -121
- package/dist/esm/components/db-range-slider.js +1 -811
- package/dist/esm/components/db-rating.js +1 -325
- package/dist/esm/components/db-reorder.js +1 -286
- package/dist/esm/components/db-resizable-panels.js +1 -282
- package/dist/esm/components/db-scroll-area.js +1 -126
- package/dist/esm/components/db-search-bar.js +1 -668
- package/dist/esm/components/db-section-app-download.js +1 -101
- package/dist/esm/components/db-section-contact.js +1 -102
- package/dist/esm/components/db-section-cta.js +1 -150
- package/dist/esm/components/db-section-faq.js +1 -120
- package/dist/esm/components/db-section-feature-grid.js +1 -137
- package/dist/esm/components/db-section-feature.js +1 -179
- package/dist/esm/components/db-section-hero.js +1 -243
- package/dist/esm/components/db-section-logo-cloud.js +1 -138
- package/dist/esm/components/db-section-pricing.js +1 -166
- package/dist/esm/components/db-section-stats.js +1 -129
- package/dist/esm/components/db-section-testimonials.js +1 -252
- package/dist/esm/components/db-section.js +1 -385
- package/dist/esm/components/db-segment-control.js +1 -231
- package/dist/esm/components/db-select.js +1 -571
- package/dist/esm/components/db-share-icons.js +1 -40
- package/dist/esm/components/db-share.js +1 -489
- package/dist/esm/components/db-sidebar.js +1 -1068
- package/dist/esm/components/db-skeleton.js +1 -94
- package/dist/esm/components/db-spinner.js +1 -102
- package/dist/esm/components/db-split-view.js +1 -297
- package/dist/esm/components/db-stack.js +1 -46
- package/dist/esm/components/db-stat.js +1 -218
- package/dist/esm/components/db-stepper.js +1 -398
- package/dist/esm/components/db-table.js +1 -412
- package/dist/esm/components/db-tabs.js +1 -335
- package/dist/esm/components/db-testimonial.d.ts +2 -0
- package/dist/esm/components/db-testimonial.js +1 -162
- package/dist/esm/components/db-textarea.js +1 -233
- package/dist/esm/components/db-time-picker.js +1 -523
- package/dist/esm/components/db-timeline.js +1 -174
- package/dist/esm/components/db-toast.js +1 -158
- package/dist/esm/components/db-toggle.js +1 -162
- package/dist/esm/components/db-toolbar.js +1 -94
- package/dist/esm/components/db-tooltip.js +1 -440
- package/dist/esm/components/db-top-banner.js +1 -121
- package/dist/esm/components/db-tutorial.js +1 -324
- package/dist/esm/components/db-two-factor.d.ts +60 -0
- package/dist/esm/components/db-two-factor.js +1 -0
- package/dist/esm/components/db-video-player.js +1 -503
- package/dist/esm/components/db-youtube-player.js +1 -194
- package/dist/esm/components/highlight-code.js +1 -65
- package/dist/esm/components/input-validation.js +1 -50
- package/dist/esm/components/marketing-block-host-utils.js +1 -9
- package/dist/esm/components/number-scrub.js +1 -117
- package/dist/esm/components/random-gradient-palettes.js +1 -67
- package/dist/esm/components/section-block-header-utils.js +1 -48
- package/dist/esm/helpers/confirm.js +1 -52
- package/dist/esm/helpers/toast.js +1 -73
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.js +1 -111
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-bash.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-clike.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-css.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-javascript.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-json.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-jsx.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markup.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-scss.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-tsx.js +1 -0
- package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-typescript.js +1 -0
- package/dist/index.cjs +1 -55414
- package/dist/index.css +1 -1
- package/dist/index.d.ts +1091 -2
- package/dist/index.esm.js +1 -38284
- package/dist/react/chunks/lottie-14e7addb.js +1 -0
- package/dist/react/index.cjs +1 -56503
- package/dist/react/index.d.ts +1620 -54
- package/dist/react/index.esm.js +1 -39373
- package/package.json +1 -1
- package/dist/chunks/lottie-e273b936.js +0 -17032
- package/dist/esm/node_modules/prismjs/components/prism-bash.js +0 -235
- package/dist/esm/node_modules/prismjs/components/prism-clike.js +0 -31
- package/dist/esm/node_modules/prismjs/components/prism-css.js +0 -64
- package/dist/esm/node_modules/prismjs/components/prism-javascript.js +0 -172
- package/dist/esm/node_modules/prismjs/components/prism-json.js +0 -27
- package/dist/esm/node_modules/prismjs/components/prism-jsx.js +0 -143
- package/dist/esm/node_modules/prismjs/components/prism-markup.js +0 -186
- package/dist/esm/node_modules/prismjs/components/prism-scss.js +0 -81
- package/dist/esm/node_modules/prismjs/components/prism-tsx.js +0 -15
- package/dist/esm/node_modules/prismjs/components/prism-typescript.js +0 -60
- package/dist/react/chunks/lottie-72a4c6d4.js +0 -17032
|
@@ -1,66 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
class DbDivider extends HTMLElement {
|
|
3
|
-
static get observedAttributes() {
|
|
4
|
-
return ['orientation', 'thickness', 'color', 'length', 'variant', 'margin'];
|
|
5
|
-
}
|
|
6
|
-
connectedCallback() {
|
|
7
|
-
this.render();
|
|
8
|
-
}
|
|
9
|
-
attributeChangedCallback() {
|
|
10
|
-
this.render();
|
|
11
|
-
}
|
|
12
|
-
render() {
|
|
13
|
-
const orientation = this.getAttribute('orientation') || 'horizontal';
|
|
14
|
-
const variant = this.getAttribute('variant') || 'solid';
|
|
15
|
-
const thickness = Number(this.getAttribute('thickness') || 1);
|
|
16
|
-
const color = this.getAttribute('color');
|
|
17
|
-
const length = this.getAttribute('length');
|
|
18
|
-
const margin = this.getAttribute('margin');
|
|
19
|
-
this.className = [
|
|
20
|
-
'designbase-wc-divider',
|
|
21
|
-
`designbase-wc-divider--${orientation}`,
|
|
22
|
-
`designbase-wc-divider--${variant}`,
|
|
23
|
-
color && COLOR_PRESETS.includes(color)
|
|
24
|
-
? `designbase-wc-divider--${color}`
|
|
25
|
-
: '',
|
|
26
|
-
]
|
|
27
|
-
.filter(Boolean)
|
|
28
|
-
.join(' ');
|
|
29
|
-
this.setAttribute('role', 'separator');
|
|
30
|
-
this.setAttribute('aria-orientation', orientation);
|
|
31
|
-
this.style.border = 'none';
|
|
32
|
-
this.style.background = 'none';
|
|
33
|
-
this.style.margin = '';
|
|
34
|
-
this.style.width = '';
|
|
35
|
-
this.style.height = '';
|
|
36
|
-
if (orientation === 'vertical') {
|
|
37
|
-
this.style.display = 'inline-block';
|
|
38
|
-
this.style.borderLeft = `${thickness}px ${variant} var(--db-border-base)`;
|
|
39
|
-
this.style.verticalAlign = 'middle';
|
|
40
|
-
if (length) {
|
|
41
|
-
this.style.height = length.endsWith('px') || length.endsWith('%') ? length : `${length}px`;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.style.display = 'block';
|
|
46
|
-
this.style.width = '100%';
|
|
47
|
-
this.style.borderTop = `${thickness}px ${variant} var(--db-border-base)`;
|
|
48
|
-
}
|
|
49
|
-
if (color && !COLOR_PRESETS.includes(color)) {
|
|
50
|
-
if (orientation === 'vertical') {
|
|
51
|
-
this.style.borderLeftColor = color;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.style.borderTopColor = color;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (margin) {
|
|
58
|
-
this.style.margin = /^\d+$/.test(margin) ? `${margin}px` : margin;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
if (!customElements.get('db-divider')) {
|
|
63
|
-
customElements.define('db-divider', DbDivider);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export { DbDivider };
|
|
1
|
+
const t=["primary","secondary","success","warning","danger","muted"];class DbDivider extends HTMLElement{static get observedAttributes(){return["orientation","thickness","color","length","variant","margin"]}connectedCallback(){this.render()}attributeChangedCallback(){this.render()}render(){const e=this.getAttribute("orientation")||"horizontal",i=this.getAttribute("variant")||"solid",s=Number(this.getAttribute("thickness")||1),r=this.getAttribute("color"),d=this.getAttribute("length"),n=this.getAttribute("margin");this.className=["designbase-wc-divider",`designbase-wc-divider--${e}`,`designbase-wc-divider--${i}`,r&&t.includes(r)?`designbase-wc-divider--${r}`:""].filter(Boolean).join(" "),this.setAttribute("role","separator"),this.setAttribute("aria-orientation",e),this.style.border="none",this.style.background="none",this.style.margin="",this.style.width="",this.style.height="","vertical"===e?(this.style.display="inline-block",this.style.borderLeft=`${s}px ${i} var(--db-border-base)`,this.style.verticalAlign="middle",d&&(this.style.height=d.endsWith("px")||d.endsWith("%")?d:`${d}px`)):(this.style.display="block",this.style.width="100%",this.style.borderTop=`${s}px ${i} var(--db-border-base)`),r&&!t.includes(r)&&("vertical"===e?this.style.borderLeftColor=r:this.style.borderTopColor=r),n&&(this.style.margin=/^\d+$/.test(n)?`${n}px`:n)}}customElements.get("db-divider")||customElements.define("db-divider",DbDivider);export{DbDivider};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import './db-progressbar.js';
|
|
2
|
+
import './db-button.js';
|
|
3
|
+
|
|
4
|
+
declare const STATUSES: readonly ["downloading", "paused", "error", "complete"];
|
|
5
|
+
type DownloadStatus = (typeof STATUSES)[number];
|
|
6
|
+
declare const POSITIONS: readonly ["bottom-right", "bottom-left", "bottom-center", "top-right", "top-left", "top-center"];
|
|
7
|
+
type DownloadPosition = (typeof POSITIONS)[number];
|
|
8
|
+
/**
|
|
9
|
+
* 우측 하단(기본)에 떠 있는 다운로드 진행률 위젯.
|
|
10
|
+
*
|
|
11
|
+
* 진행 바는 `<db-progressbar>`, 액션 버튼은 `<db-button>` 을 그대로 재사용합니다.
|
|
12
|
+
* 같은 위치에 여러 개가 뜨면 `stack-mode`에 따라 위로 쌓이거나(deck) 세로로 쌓입니다.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const dl = document.createElement('db-download-progress');
|
|
16
|
+
* dl.setAttribute('file-name', 'ui-kit-icons.figma');
|
|
17
|
+
* dl.setAttribute('value', '43');
|
|
18
|
+
* dl.setAttribute('auto-remove', '');
|
|
19
|
+
* document.body.appendChild(dl);
|
|
20
|
+
* dl.setProgress(80);
|
|
21
|
+
* dl.setStatus('complete');
|
|
22
|
+
*/
|
|
23
|
+
declare class DbDownloadProgress extends HTMLElement {
|
|
24
|
+
static get observedAttributes(): string[];
|
|
25
|
+
private built;
|
|
26
|
+
private renderedStatus;
|
|
27
|
+
private closeTimerId;
|
|
28
|
+
private resizeObserver;
|
|
29
|
+
private registeredPosition;
|
|
30
|
+
closed: boolean;
|
|
31
|
+
private iconEl;
|
|
32
|
+
private labelEl;
|
|
33
|
+
private fileEl;
|
|
34
|
+
private subtitleEl;
|
|
35
|
+
private inlinePercentEl;
|
|
36
|
+
private percentEl;
|
|
37
|
+
private remainingEl;
|
|
38
|
+
private metaDotEl;
|
|
39
|
+
private toggleBtn;
|
|
40
|
+
private closeBtn;
|
|
41
|
+
private actionsEl;
|
|
42
|
+
private mainRow;
|
|
43
|
+
private bodyBar;
|
|
44
|
+
private edgeBar;
|
|
45
|
+
get value(): number;
|
|
46
|
+
set value(v: number);
|
|
47
|
+
get max(): number;
|
|
48
|
+
set max(v: number);
|
|
49
|
+
get status(): DownloadStatus;
|
|
50
|
+
set status(v: DownloadStatus);
|
|
51
|
+
get fileName(): string;
|
|
52
|
+
set fileName(v: string);
|
|
53
|
+
get position(): DownloadPosition;
|
|
54
|
+
set position(v: DownloadPosition);
|
|
55
|
+
get minimized(): boolean;
|
|
56
|
+
set minimized(v: boolean);
|
|
57
|
+
/** `stack` = 세로로 위로 쌓기(기본), `deck` = 스케일·z-index 카드 덱 */
|
|
58
|
+
get stackMode(): 'stack' | 'deck';
|
|
59
|
+
set stackMode(v: 'stack' | 'deck');
|
|
60
|
+
connectedCallback(): void;
|
|
61
|
+
disconnectedCallback(): void;
|
|
62
|
+
attributeChangedCallback(name: string): void;
|
|
63
|
+
private registerStack;
|
|
64
|
+
private unregisterStack;
|
|
65
|
+
private build;
|
|
66
|
+
private sync;
|
|
67
|
+
private renderActions;
|
|
68
|
+
private handleMainClick;
|
|
69
|
+
private handleToggleClick;
|
|
70
|
+
private handleCloseClick;
|
|
71
|
+
minimize(): void;
|
|
72
|
+
expand(): void;
|
|
73
|
+
toggle(): void;
|
|
74
|
+
setProgress(value: number): void;
|
|
75
|
+
setStatus(status: DownloadStatus): void;
|
|
76
|
+
/**
|
|
77
|
+
* 닫기(슬라이드 아웃).
|
|
78
|
+
* React 등 호스트가 DOM을 소유할 때는 `auto-remove` 없이 `db-close`만 받고 언마운트하세요.
|
|
79
|
+
* body에 직접 append한 경우 `auto-remove`를 주면 DOM에서 제거됩니다.
|
|
80
|
+
*/
|
|
81
|
+
close(): void;
|
|
82
|
+
}
|
|
83
|
+
declare global {
|
|
84
|
+
interface HTMLElementTagNameMap {
|
|
85
|
+
'db-download-progress': DbDownloadProgress;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export { DbDownloadProgress };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createDbIcon as e}from"./db-icons.js";import"./db-progressbar.js";import"./db-button.js";const t=["downloading","paused","error","complete"],s=["bottom-right","bottom-left","bottom-center","top-right","top-left","top-center"],i={downloading:"download",paused:"pause",error:"error-filled",complete:"circle-checked"},o={downloading:"다운로드 중",paused:"일시정지됨",error:"다운로드 실패",complete:"다운로드 완료"},n={downloading:"완료될 때까지 기다려 주세요.",paused:"다운로드가 일시정지되었습니다.",error:"문제가 발생했어요. 다시 시도해 주세요.",complete:"파일 다운로드가 완료되었습니다."},r={downloading:"primary",paused:"default",error:"danger",complete:"success"},a=new Map;function getStackSet(e){let t=a.get(e);return t||(t=new Set,a.set(e,t)),t}function isStackParticipant(e){return!(!e.isConnected||e.closed||e.hasAttribute("no-stack"))&&"fixed"===getComputedStyle(e).position}function relayoutStack(e){const t=a.get(e);if(!t)return;const s=[...t].filter(isStackParticipant),i=e.startsWith("top"),o=s[0]?.stackMode??"stack";s.forEach((e,t)=>{const n=s.length-1-t;if(e.dataset.stackIndex=String(n),e.style.setProperty("--dbdl-stack-index",String(n)),e.style.zIndex=String(9999+t),"deck"===o){const t=Math.max(.88,1-.04*n),s=10*n;e.style.setProperty("--dbdl-stack-offset","0px"),e.style.setProperty("--dbdl-stack-scale",String(t)),e.style.setProperty("--dbdl-stack-shift",`${i?s:-s}px`),e.classList.add("designbase-wc-download-progress--stacked-deck"),e.classList.remove("designbase-wc-download-progress--stacked-list")}else{let i=0;for(let e=s.length-1;e>t;e-=1)i+=s[e].offsetHeight+12;e.style.setProperty("--dbdl-stack-offset",`${i}px`),e.style.setProperty("--dbdl-stack-scale","1"),e.style.setProperty("--dbdl-stack-shift","0px"),e.classList.add("designbase-wc-download-progress--stacked-list"),e.classList.remove("designbase-wc-download-progress--stacked-deck")}}),t.forEach(e=>{s.includes(e)||(e.style.removeProperty("--dbdl-stack-offset"),e.style.removeProperty("--dbdl-stack-scale"),e.style.removeProperty("--dbdl-stack-shift"),e.style.removeProperty("z-index"),e.classList.remove("designbase-wc-download-progress--stacked-list","designbase-wc-download-progress--stacked-deck"),delete e.dataset.stackIndex)})}class DbDownloadProgress extends HTMLElement{constructor(){super(...arguments),this.built=!1,this.renderedStatus=null,this.closeTimerId=null,this.resizeObserver=null,this.registeredPosition=null,this.closed=!1,this.handleMainClick=e=>{e.target.closest(".designbase-wc-download-progress__header-actions")||this.toggle()},this.handleToggleClick=e=>{e.stopPropagation(),this.toggle()},this.handleCloseClick=e=>{e.stopPropagation(),this.close()}}static get observedAttributes(){return["file-name","value","max","status","position","minimized","label","description","remaining","size-label","error-text","closable","stack-mode","no-stack","auto-remove"]}get value(){return Number(this.getAttribute("value")||0)}set value(e){this.setAttribute("value",String(e))}get max(){return Number(this.getAttribute("max")||100)}set max(e){this.setAttribute("max",String(e))}get status(){const e=this.getAttribute("status");return t.includes(e)?e:"downloading"}set status(e){this.setAttribute("status",e)}get fileName(){return this.getAttribute("file-name")||""}set fileName(e){this.setAttribute("file-name",e)}get position(){const e=this.getAttribute("position");return s.includes(e)?e:"bottom-right"}set position(e){this.setAttribute("position",e)}get minimized(){return this.hasAttribute("minimized")}set minimized(e){this.toggleAttribute("minimized",e)}get stackMode(){return"deck"===this.getAttribute("stack-mode")?"deck":"stack"}set stackMode(e){this.setAttribute("stack-mode",e)}connectedCallback(){this.build(),this.sync(),this.registerStack(),requestAnimationFrame(()=>{this.classList.add("designbase-wc-download-progress--visible"),relayoutStack(this.position)}),"undefined"!=typeof ResizeObserver&&(this.resizeObserver=new ResizeObserver(()=>{this.registeredPosition&&relayoutStack(this.registeredPosition)}),this.resizeObserver.observe(this))}disconnectedCallback(){this.closeTimerId&&clearTimeout(this.closeTimerId),this.closeTimerId=null,this.resizeObserver?.disconnect(),this.resizeObserver=null,this.unregisterStack()}attributeChangedCallback(e){this.built&&(this.sync(),"position"!==e&&"stack-mode"!==e&&"no-stack"!==e&&"minimized"!==e||(this.registerStack(),this.registeredPosition&&relayoutStack(this.registeredPosition),s.forEach(e=>{e!==this.registeredPosition&&relayoutStack(e)})))}registerStack(){const e=this.position;this.registeredPosition&&this.registeredPosition!==e&&(getStackSet(this.registeredPosition).delete(this),relayoutStack(this.registeredPosition)),getStackSet(e).add(this),this.registeredPosition=e}unregisterStack(){if(!this.registeredPosition)return;const e=this.registeredPosition;getStackSet(e).delete(this),this.registeredPosition=null,relayoutStack(e)}build(){if(this.built)return;this.built=!0,this.classList.add("designbase-wc-download-progress"),this.replaceChildren();const t=el("div","designbase-wc-download-progress__shell");this.mainRow=el("button","designbase-wc-download-progress__main"),this.mainRow.type="button",this.mainRow.setAttribute("aria-label","다운로드 상세 펼치기/접기"),this.mainRow.addEventListener("click",this.handleMainClick),this.iconEl=el("span","designbase-wc-download-progress__icon"),this.iconEl.setAttribute("aria-hidden","true");const s=el("span","designbase-wc-download-progress__text"),i=el("span","designbase-wc-download-progress__title");this.labelEl=el("span","designbase-wc-download-progress__label"),this.fileEl=el("span","designbase-wc-download-progress__file"),i.append(this.labelEl,this.fileEl),this.subtitleEl=el("span","designbase-wc-download-progress__subtitle"),s.append(i,this.subtitleEl),this.inlinePercentEl=el("span","designbase-wc-download-progress__inline-percent");const o=el("span","designbase-wc-download-progress__header-actions");this.toggleBtn=el("button","designbase-wc-download-progress__icon-button"),this.toggleBtn.type="button",this.toggleBtn.addEventListener("click",this.handleToggleClick),this.closeBtn=el("button","designbase-wc-download-progress__icon-button"),this.closeBtn.type="button",this.closeBtn.setAttribute("aria-label","닫기"),this.closeBtn.append(e("close",18)),this.closeBtn.addEventListener("click",this.handleCloseClick),o.append(this.toggleBtn,this.closeBtn),this.mainRow.append(this.iconEl,s,this.inlinePercentEl,o);const n=el("div","designbase-wc-download-progress__collapsible"),r=el("div","designbase-wc-download-progress__collapse-inner"),a=el("div","designbase-wc-download-progress__body");this.bodyBar=document.createElement("db-progressbar"),this.bodyBar.setAttribute("full-width",""),this.bodyBar.setAttribute("size","s");const d=el("div","designbase-wc-download-progress__meta");this.percentEl=el("span","designbase-wc-download-progress__percent"),this.metaDotEl=el("span","designbase-wc-download-progress__meta-dot"),this.metaDotEl.textContent="•",this.remainingEl=el("span","designbase-wc-download-progress__remaining"),d.append(this.percentEl,this.metaDotEl,this.remainingEl),a.append(this.bodyBar,d);const l=el("div","designbase-wc-download-progress__footer");this.actionsEl=el("div","designbase-wc-download-progress__actions"),l.append(this.actionsEl),r.append(a,l),n.append(r);const c=el("div","designbase-wc-download-progress__edge");this.edgeBar=document.createElement("db-progressbar"),this.edgeBar.setAttribute("full-width",""),this.edgeBar.setAttribute("size","s"),c.append(this.edgeBar),t.append(this.mainRow,n,c),this.append(t)}sync(){const a=this.status,d=this.max,l="complete"===a?d:this.value,c=Math.max(0,Math.min(d,l)),h=0===d?0:Math.round((c-0)/(d-0)*100);this.classList.add("designbase-wc-download-progress"),s.forEach(e=>this.classList.toggle(`designbase-wc-download-progress--${e}`,e===this.position)),t.forEach(e=>this.classList.toggle(`designbase-wc-download-progress--${e}`,e===a)),this.classList.toggle("designbase-wc-download-progress--minimized",this.minimized),this.renderedStatus!==a&&(this.iconEl.className=`designbase-wc-download-progress__icon designbase-wc-download-progress__icon--${a}`,this.iconEl.replaceChildren(e(i[a],20)),this.renderActions(a),"complete"===a&&(this.iconEl.classList.remove("designbase-wc-download-progress__icon--pop"),this.iconEl.offsetWidth,this.iconEl.classList.add("designbase-wc-download-progress__icon--pop"),this.dispatchEvent(new CustomEvent("db-complete",{bubbles:!0,composed:!0}))),this.renderedStatus=a),this.labelEl.textContent=this.getAttribute("label")||o[a],this.fileEl.textContent=this.fileName,this.fileEl.hidden=!this.fileName,this.subtitleEl.textContent="error"===a&&this.getAttribute("error-text")||this.getAttribute("description")||n[a],this.inlinePercentEl.textContent="complete"===a?"100%":`${h}%`,this.percentEl.textContent=`${h}%`;const g=this.getAttribute("remaining")||"",b=this.getAttribute("size-label")||"";"complete"===a?(this.percentEl.textContent=b||"완료됨",this.metaDotEl.hidden=!0,this.remainingEl.hidden=!0):"error"===a?(this.percentEl.textContent=`${h}%`,this.metaDotEl.hidden=!g,this.remainingEl.hidden=!g,this.remainingEl.textContent=g):(this.metaDotEl.hidden=!g,this.remainingEl.hidden=!g,this.remainingEl.textContent=g);const p=r[a],u="downloading"===a?"animated":"solid";[this.bodyBar,this.edgeBar].forEach(e=>{e.setAttribute("value",String(c)),e.setAttribute("max",String(d)),e.setAttribute("variant",p),e.setAttribute("bar-style",u)}),this.toggleBtn.replaceChildren(e(this.minimized?"expand":"chevron-down",18)),this.toggleBtn.setAttribute("aria-label",this.minimized?"펼치기":"최소화"),this.toggleBtn.setAttribute("aria-expanded",String(!this.minimized));const m="true"===this.getAttribute("closable")||this.hasAttribute("closable")&&"false"!==this.getAttribute("closable")||"complete"===a;this.closeBtn.hidden=!m,this.mainRow.setAttribute("aria-label",this.minimized?"다운로드 펼치기":"다운로드 접기"),this.setAttribute("role","status"),this.setAttribute("aria-live","error"===a?"assertive":"polite")}renderActions(e){this.actionsEl.replaceChildren();const make=(e,t,s,i)=>{const o=document.createElement("db-button");return o.setAttribute("variant",t),o.setAttribute("size","s"),i&&o.setAttribute("start-icon",i),o.textContent=e,o.addEventListener("db-click",()=>{this.dispatchEvent(new CustomEvent(s,{bubbles:!0,composed:!0})),"db-cancel"!==s&&"db-dismiss"!==s||this.close()}),o};"downloading"===e?this.actionsEl.append(make("취소","ghost","db-cancel")):"paused"===e?this.actionsEl.append(make("취소","ghost","db-cancel"),make("재개","primary","db-resume","play")):"error"===e?this.actionsEl.append(make("취소","ghost","db-cancel"),make("다시 시도","primary","db-retry","refresh")):"complete"===e&&this.actionsEl.append(make("폴더 열기","secondary","db-open","folder-open"),make("닫기","ghost","db-dismiss"))}minimize(){this.minimized||(this.minimized=!0,this.dispatchEvent(new CustomEvent("db-minimize",{bubbles:!0,composed:!0})))}expand(){this.minimized&&(this.minimized=!1,this.dispatchEvent(new CustomEvent("db-expand",{bubbles:!0,composed:!0})))}toggle(){this.minimized?this.expand():this.minimize()}setProgress(e){this.value=e}setStatus(e){this.status=e}close(){this.closed||(this.closed=!0,this.classList.remove("designbase-wc-download-progress--visible"),this.classList.add("designbase-wc-download-progress--closing"),this.unregisterStack(),this.closeTimerId&&clearTimeout(this.closeTimerId),this.closeTimerId=setTimeout(()=>{this.dispatchEvent(new CustomEvent("db-close",{bubbles:!0,composed:!0})),this.setAttribute("closed",""),this.hidden=!0;("true"===this.getAttribute("auto-remove")||this.hasAttribute("auto-remove")&&"false"!==this.getAttribute("auto-remove"))&&this.remove()},260))}}function el(e,t){const s=document.createElement(e);return s.className=t,s}customElements.get("db-download-progress")||customElements.define("db-download-progress",DbDownloadProgress);export{DbDownloadProgress};
|
|
@@ -1,245 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
const SIZES = ['s', 'm', 'l', 'xl', 'full'];
|
|
3
|
-
class DbDrawer extends HTMLElement {
|
|
4
|
-
constructor() {
|
|
5
|
-
super(...arguments);
|
|
6
|
-
this.isMounted = false;
|
|
7
|
-
this.isActive = false;
|
|
8
|
-
this.previousActiveElement = null;
|
|
9
|
-
this.keyHandler = null;
|
|
10
|
-
}
|
|
11
|
-
static get observedAttributes() {
|
|
12
|
-
return [
|
|
13
|
-
'open',
|
|
14
|
-
'title',
|
|
15
|
-
'position',
|
|
16
|
-
'size',
|
|
17
|
-
'show-close-button',
|
|
18
|
-
'close-on-backdrop-click',
|
|
19
|
-
'close-on-escape',
|
|
20
|
-
'animation-duration',
|
|
21
|
-
'show-overlay',
|
|
22
|
-
'overlay-closable',
|
|
23
|
-
'z-index',
|
|
24
|
-
'trap-focus',
|
|
25
|
-
'drawer-id',
|
|
26
|
-
];
|
|
27
|
-
}
|
|
28
|
-
connectedCallback() {
|
|
29
|
-
this.style.display = 'contents';
|
|
30
|
-
this.render();
|
|
31
|
-
this.syncOpenState();
|
|
32
|
-
}
|
|
33
|
-
disconnectedCallback() {
|
|
34
|
-
this.clearTimers();
|
|
35
|
-
this.detachEscape();
|
|
36
|
-
this.root?.remove();
|
|
37
|
-
this.root = undefined;
|
|
38
|
-
document.body.style.overflow = '';
|
|
39
|
-
if (this.previousActiveElement) {
|
|
40
|
-
this.previousActiveElement.focus();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
attributeChangedCallback(name) {
|
|
44
|
-
if (!this.isConnected)
|
|
45
|
-
return;
|
|
46
|
-
if (name === 'open') {
|
|
47
|
-
this.syncOpenState();
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
this.render();
|
|
51
|
-
if (this.isMounted) {
|
|
52
|
-
this.syncActiveClasses();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
isOpenRequested() {
|
|
56
|
-
return this.hasAttribute('open') && this.getAttribute('open') !== 'false';
|
|
57
|
-
}
|
|
58
|
-
clearTimers() {
|
|
59
|
-
if (this.enterFrame != null) {
|
|
60
|
-
cancelAnimationFrame(this.enterFrame);
|
|
61
|
-
this.enterFrame = undefined;
|
|
62
|
-
}
|
|
63
|
-
if (this.exitTimer) {
|
|
64
|
-
clearTimeout(this.exitTimer);
|
|
65
|
-
this.exitTimer = undefined;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
attachEscape() {
|
|
69
|
-
if (this.keyHandler)
|
|
70
|
-
return;
|
|
71
|
-
this.keyHandler = (event) => {
|
|
72
|
-
if (event.key !== 'Escape')
|
|
73
|
-
return;
|
|
74
|
-
if (this.getAttribute('close-on-escape') === 'false')
|
|
75
|
-
return;
|
|
76
|
-
this.close();
|
|
77
|
-
};
|
|
78
|
-
document.addEventListener('keydown', this.keyHandler);
|
|
79
|
-
}
|
|
80
|
-
detachEscape() {
|
|
81
|
-
if (!this.keyHandler)
|
|
82
|
-
return;
|
|
83
|
-
document.removeEventListener('keydown', this.keyHandler);
|
|
84
|
-
this.keyHandler = null;
|
|
85
|
-
}
|
|
86
|
-
close() {
|
|
87
|
-
this.setAttribute('open', 'false');
|
|
88
|
-
this.dispatchEvent(new CustomEvent('db-close', { bubbles: true, composed: true }));
|
|
89
|
-
}
|
|
90
|
-
collectChildren() {
|
|
91
|
-
return Array.from(this.children).filter((child) => !child.hasAttribute('data-wc-internal'));
|
|
92
|
-
}
|
|
93
|
-
syncOpenState() {
|
|
94
|
-
const shouldOpen = this.isOpenRequested();
|
|
95
|
-
const duration = Number(this.getAttribute('animation-duration') || 300);
|
|
96
|
-
this.clearTimers();
|
|
97
|
-
if (shouldOpen) {
|
|
98
|
-
this.render();
|
|
99
|
-
this.isMounted = true;
|
|
100
|
-
this.isActive = false;
|
|
101
|
-
this.syncActiveClasses();
|
|
102
|
-
if (this.root && !this.root.isConnected) {
|
|
103
|
-
document.body.append(this.root);
|
|
104
|
-
}
|
|
105
|
-
if (this.getAttribute('trap-focus') !== 'false') {
|
|
106
|
-
this.previousActiveElement = document.activeElement;
|
|
107
|
-
}
|
|
108
|
-
this.enterFrame = requestAnimationFrame(() => {
|
|
109
|
-
this.enterFrame = requestAnimationFrame(() => {
|
|
110
|
-
this.enterFrame = undefined;
|
|
111
|
-
this.isActive = true;
|
|
112
|
-
this.syncActiveClasses();
|
|
113
|
-
if (this.getAttribute('trap-focus') !== 'false') {
|
|
114
|
-
this.container?.focus();
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
document.body.style.overflow = 'hidden';
|
|
119
|
-
this.attachEscape();
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
this.isActive = false;
|
|
123
|
-
this.syncActiveClasses();
|
|
124
|
-
this.exitTimer = setTimeout(() => {
|
|
125
|
-
this.exitTimer = undefined;
|
|
126
|
-
this.isMounted = false;
|
|
127
|
-
this.syncActiveClasses();
|
|
128
|
-
this.root?.remove();
|
|
129
|
-
document.body.style.overflow = '';
|
|
130
|
-
this.detachEscape();
|
|
131
|
-
if (this.getAttribute('trap-focus') !== 'false' && this.previousActiveElement) {
|
|
132
|
-
this.previousActiveElement.focus();
|
|
133
|
-
this.previousActiveElement = null;
|
|
134
|
-
}
|
|
135
|
-
}, duration);
|
|
136
|
-
this.detachEscape();
|
|
137
|
-
}
|
|
138
|
-
syncActiveClasses() {
|
|
139
|
-
if (!this.root)
|
|
140
|
-
return;
|
|
141
|
-
this.root.classList.toggle('designbase-wc-drawer--open', this.isActive);
|
|
142
|
-
this.root.classList.toggle('designbase-wc-drawer--closing', this.isMounted && !this.isActive);
|
|
143
|
-
this.overlay?.classList.toggle('designbase-wc-drawer__overlay--open', this.isActive);
|
|
144
|
-
this.container?.classList.toggle('designbase-wc-drawer__container--open', this.isActive);
|
|
145
|
-
}
|
|
146
|
-
render() {
|
|
147
|
-
const position = POSITIONS.includes((this.getAttribute('position') || 'right'))
|
|
148
|
-
? this.getAttribute('position') || 'right'
|
|
149
|
-
: 'right';
|
|
150
|
-
const size = SIZES.includes((this.getAttribute('size') || 'm'))
|
|
151
|
-
? this.getAttribute('size') || 'm'
|
|
152
|
-
: 'm';
|
|
153
|
-
const title = this.getAttribute('title');
|
|
154
|
-
const showClose = this.getAttribute('show-close-button') !== 'false';
|
|
155
|
-
const showOverlay = this.getAttribute('show-overlay') !== 'false';
|
|
156
|
-
const animationDuration = this.getAttribute('animation-duration') || '300';
|
|
157
|
-
const zIndex = this.getAttribute('z-index') || '1000';
|
|
158
|
-
const drawerId = this.getAttribute('drawer-id') || 'drawer';
|
|
159
|
-
const userChildren = this.collectChildren();
|
|
160
|
-
if (!this.root) {
|
|
161
|
-
this.root = document.createElement('div');
|
|
162
|
-
this.root.setAttribute('data-wc-internal', '');
|
|
163
|
-
this.overlay = document.createElement('div');
|
|
164
|
-
this.overlay.className = 'designbase-wc-drawer__overlay';
|
|
165
|
-
this.overlay.setAttribute('aria-hidden', 'true');
|
|
166
|
-
this.overlay.addEventListener('click', (event) => {
|
|
167
|
-
if (event.target !== this.overlay)
|
|
168
|
-
return;
|
|
169
|
-
const overlayClosable = this.getAttribute('overlay-closable') !== 'false';
|
|
170
|
-
const closeOnBackdrop = this.getAttribute('close-on-backdrop-click') !== 'false';
|
|
171
|
-
if (overlayClosable && closeOnBackdrop)
|
|
172
|
-
this.close();
|
|
173
|
-
});
|
|
174
|
-
this.container = document.createElement('div');
|
|
175
|
-
this.container.className = `designbase-wc-drawer__container designbase-wc-drawer__container--${position}`;
|
|
176
|
-
this.container.setAttribute('role', 'dialog');
|
|
177
|
-
this.container.setAttribute('aria-modal', 'true');
|
|
178
|
-
this.container.tabIndex = -1;
|
|
179
|
-
this.container.addEventListener('click', (event) => event.stopPropagation());
|
|
180
|
-
this.contentEl = document.createElement('div');
|
|
181
|
-
this.contentEl.className = 'designbase-wc-drawer__content';
|
|
182
|
-
this.container.append(this.contentEl);
|
|
183
|
-
}
|
|
184
|
-
this.root.className = [
|
|
185
|
-
'designbase-wc-drawer',
|
|
186
|
-
`designbase-wc-drawer--${position}`,
|
|
187
|
-
`designbase-wc-drawer--${size}`,
|
|
188
|
-
].join(' ');
|
|
189
|
-
this.root.style.setProperty('--drawer-animation-duration', `${animationDuration}ms`);
|
|
190
|
-
this.root.style.setProperty('--drawer-z-index', zIndex);
|
|
191
|
-
this.container.className = `designbase-wc-drawer__container designbase-wc-drawer__container--${position}`;
|
|
192
|
-
this.container.id = drawerId;
|
|
193
|
-
if (title) {
|
|
194
|
-
this.container.setAttribute('aria-labelledby', `${drawerId}-title`);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
this.container.removeAttribute('aria-labelledby');
|
|
198
|
-
}
|
|
199
|
-
this.contentEl.id = `${drawerId}-content`;
|
|
200
|
-
this.root.replaceChildren();
|
|
201
|
-
if (showOverlay && this.overlay) {
|
|
202
|
-
this.root.append(this.overlay);
|
|
203
|
-
}
|
|
204
|
-
const headerNeeded = Boolean(title) || showClose;
|
|
205
|
-
if (headerNeeded) {
|
|
206
|
-
const header = document.createElement('div');
|
|
207
|
-
header.className = 'designbase-wc-drawer__header';
|
|
208
|
-
if (title) {
|
|
209
|
-
const heading = document.createElement('h2');
|
|
210
|
-
heading.className = 'designbase-wc-drawer__title';
|
|
211
|
-
heading.id = `${drawerId}-title`;
|
|
212
|
-
heading.textContent = title;
|
|
213
|
-
header.append(heading);
|
|
214
|
-
}
|
|
215
|
-
if (showClose) {
|
|
216
|
-
const close = document.createElement('db-button');
|
|
217
|
-
close.className = 'designbase-wc-drawer__close-button';
|
|
218
|
-
close.setAttribute('variant', 'ghost');
|
|
219
|
-
close.setAttribute('size', 's');
|
|
220
|
-
close.setAttribute('icon-only', '');
|
|
221
|
-
close.setAttribute('start-icon', 'close');
|
|
222
|
-
close.setAttribute('aria-label', '닫기');
|
|
223
|
-
close.addEventListener('db-click', (event) => {
|
|
224
|
-
event.stopPropagation();
|
|
225
|
-
this.close();
|
|
226
|
-
});
|
|
227
|
-
header.append(close);
|
|
228
|
-
}
|
|
229
|
-
this.container.replaceChildren(header, this.contentEl);
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
this.container.replaceChildren(this.contentEl);
|
|
233
|
-
}
|
|
234
|
-
this.contentEl.replaceChildren(...userChildren);
|
|
235
|
-
this.root.append(this.container);
|
|
236
|
-
if (this.isMounted && !this.root.isConnected) {
|
|
237
|
-
document.body.append(this.root);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
if (!customElements.get('db-drawer')) {
|
|
242
|
-
customElements.define('db-drawer', DbDrawer);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
export { DbDrawer };
|
|
1
|
+
const t=["left","right","top","bottom"],e=["s","m","l","xl","full"];class DbDrawer extends HTMLElement{constructor(){super(...arguments),this.isMounted=!1,this.isActive=!1,this.previousActiveElement=null,this.keyHandler=null}static get observedAttributes(){return["open","title","position","size","show-close-button","close-on-backdrop-click","close-on-escape","animation-duration","show-overlay","overlay-closable","z-index","trap-focus","drawer-id"]}connectedCallback(){this.style.display="contents",this.render(),this.syncOpenState()}disconnectedCallback(){this.clearTimers(),this.detachEscape(),this.root?.remove(),this.root=void 0,document.body.style.overflow="",this.previousActiveElement&&this.previousActiveElement.focus()}attributeChangedCallback(t){this.isConnected&&("open"!==t?(this.render(),this.isMounted&&this.syncActiveClasses()):this.syncOpenState())}isOpenRequested(){return this.hasAttribute("open")&&"false"!==this.getAttribute("open")}clearTimers(){null!=this.enterFrame&&(cancelAnimationFrame(this.enterFrame),this.enterFrame=void 0),this.exitTimer&&(clearTimeout(this.exitTimer),this.exitTimer=void 0)}attachEscape(){this.keyHandler||(this.keyHandler=t=>{"Escape"===t.key&&"false"!==this.getAttribute("close-on-escape")&&this.close()},document.addEventListener("keydown",this.keyHandler))}detachEscape(){this.keyHandler&&(document.removeEventListener("keydown",this.keyHandler),this.keyHandler=null)}close(){this.setAttribute("open","false"),this.dispatchEvent(new CustomEvent("db-close",{bubbles:!0,composed:!0}))}collectChildren(){return Array.from(this.children).filter(t=>!t.hasAttribute("data-wc-internal"))}syncOpenState(){const t=this.isOpenRequested(),e=Number(this.getAttribute("animation-duration")||300);if(this.clearTimers(),t)return this.render(),this.isMounted=!0,this.isActive=!1,this.syncActiveClasses(),this.root&&!this.root.isConnected&&document.body.append(this.root),"false"!==this.getAttribute("trap-focus")&&(this.previousActiveElement=document.activeElement),this.enterFrame=requestAnimationFrame(()=>{this.enterFrame=requestAnimationFrame(()=>{this.enterFrame=void 0,this.isActive=!0,this.syncActiveClasses(),"false"!==this.getAttribute("trap-focus")&&this.container?.focus()})}),document.body.style.overflow="hidden",void this.attachEscape();this.isActive=!1,this.syncActiveClasses(),this.exitTimer=setTimeout(()=>{this.exitTimer=void 0,this.isMounted=!1,this.syncActiveClasses(),this.root?.remove(),document.body.style.overflow="",this.detachEscape(),"false"!==this.getAttribute("trap-focus")&&this.previousActiveElement&&(this.previousActiveElement.focus(),this.previousActiveElement=null)},e),this.detachEscape()}syncActiveClasses(){this.root&&(this.root.classList.toggle("designbase-wc-drawer--open",this.isActive),this.root.classList.toggle("designbase-wc-drawer--closing",this.isMounted&&!this.isActive),this.overlay?.classList.toggle("designbase-wc-drawer__overlay--open",this.isActive),this.container?.classList.toggle("designbase-wc-drawer__container--open",this.isActive))}render(){const i=t.includes(this.getAttribute("position")||"right")&&this.getAttribute("position")||"right",s=e.includes(this.getAttribute("size")||"m")&&this.getAttribute("size")||"m",r=this.getAttribute("title"),n="false"!==this.getAttribute("show-close-button"),o="false"!==this.getAttribute("show-overlay"),a=this.getAttribute("animation-duration")||"300",c=this.getAttribute("z-index")||"1000",l=this.getAttribute("drawer-id")||"drawer",h=this.collectChildren();this.root||(this.root=document.createElement("div"),this.root.setAttribute("data-wc-internal",""),this.overlay=document.createElement("div"),this.overlay.className="designbase-wc-drawer__overlay",this.overlay.setAttribute("aria-hidden","true"),this.overlay.addEventListener("click",t=>{if(t.target!==this.overlay)return;const e="false"!==this.getAttribute("overlay-closable"),i="false"!==this.getAttribute("close-on-backdrop-click");e&&i&&this.close()}),this.container=document.createElement("div"),this.container.className=`designbase-wc-drawer__container designbase-wc-drawer__container--${i}`,this.container.setAttribute("role","dialog"),this.container.setAttribute("aria-modal","true"),this.container.tabIndex=-1,this.container.addEventListener("click",t=>t.stopPropagation()),this.contentEl=document.createElement("div"),this.contentEl.className="designbase-wc-drawer__content",this.container.append(this.contentEl)),this.root.className=["designbase-wc-drawer",`designbase-wc-drawer--${i}`,`designbase-wc-drawer--${s}`].join(" "),this.root.style.setProperty("--drawer-animation-duration",`${a}ms`),this.root.style.setProperty("--drawer-z-index",c),this.container.className=`designbase-wc-drawer__container designbase-wc-drawer__container--${i}`,this.container.id=l,r?this.container.setAttribute("aria-labelledby",`${l}-title`):this.container.removeAttribute("aria-labelledby"),this.contentEl.id=`${l}-content`,this.root.replaceChildren(),o&&this.overlay&&this.root.append(this.overlay);if(Boolean(r)||n){const t=document.createElement("div");if(t.className="designbase-wc-drawer__header",r){const e=document.createElement("h2");e.className="designbase-wc-drawer__title",e.id=`${l}-title`,e.textContent=r,t.append(e)}if(n){const e=document.createElement("db-button");e.className="designbase-wc-drawer__close-button",e.setAttribute("variant","ghost"),e.setAttribute("size","s"),e.setAttribute("icon-only",""),e.setAttribute("start-icon","close"),e.setAttribute("aria-label","닫기"),e.addEventListener("db-click",t=>{t.stopPropagation(),this.close()}),t.append(e)}this.container.replaceChildren(t,this.contentEl)}else this.container.replaceChildren(this.contentEl);this.contentEl.replaceChildren(...h),this.root.append(this.container),this.isMounted&&!this.root.isConnected&&document.body.append(this.root)}}customElements.get("db-drawer")||customElements.define("db-drawer",DbDrawer);export{DbDrawer};
|