@designbasekorea/ui-wc 0.5.3 → 0.5.6

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 (156) hide show
  1. package/dist/chunks/lottie-e273b936.js +17032 -0
  2. package/dist/esm/components/animation-background/canvas-controller.js +121 -1
  3. package/dist/esm/components/animation-background/controls.js +180 -1
  4. package/dist/esm/components/animation-background/graphite-controller.js +196 -1
  5. package/dist/esm/components/animation-background/graphite-presets.js +42 -1
  6. package/dist/esm/components/animation-background/graphite-shader.js +111 -1
  7. package/dist/esm/components/animation-background/layers.js +369 -1
  8. package/dist/esm/components/animation-background/lumina-presets.js +53 -1
  9. package/dist/esm/components/animation-background/lumina-shaders.js +181 -1
  10. package/dist/esm/components/animation-background/lumina-utils.js +60 -1
  11. package/dist/esm/components/animation-background/particle-defaults.js +36 -1
  12. package/dist/esm/components/animation-background/renderers.js +167 -1
  13. package/dist/esm/components/animation-background/shader-controller.js +154 -1
  14. package/dist/esm/components/color-picker-utils.js +134 -1
  15. package/dist/esm/components/date-picker-utils.js +140 -1
  16. package/dist/esm/components/db-accordion.js +304 -1
  17. package/dist/esm/components/db-ad-banner.js +455 -1
  18. package/dist/esm/components/db-alert.js +149 -1
  19. package/dist/esm/components/db-animation-background.js +486 -1
  20. package/dist/esm/components/db-animation-text.js +601 -1
  21. package/dist/esm/components/db-app-badge.js +88 -1
  22. package/dist/esm/components/db-audio-player.js +752 -1
  23. package/dist/esm/components/db-avatar.js +188 -1
  24. package/dist/esm/components/db-backdrop.js +139 -1
  25. package/dist/esm/components/db-badge.js +91 -1
  26. package/dist/esm/components/db-banner.js +188 -1
  27. package/dist/esm/components/db-bottom-navigation.js +146 -1
  28. package/dist/esm/components/db-bottom-sheet.js +481 -1
  29. package/dist/esm/components/db-breadcrumbs.js +329 -1
  30. package/dist/esm/components/db-button.js +316 -1
  31. package/dist/esm/components/db-calendar.js +675 -1
  32. package/dist/esm/components/db-card.js +265 -1
  33. package/dist/esm/components/db-carousel.js +264 -1
  34. package/dist/esm/components/db-checkbox.js +202 -1
  35. package/dist/esm/components/db-chip.js +104 -1
  36. package/dist/esm/components/db-code-block.js +304 -1
  37. package/dist/esm/components/db-color-picker.js +746 -1
  38. package/dist/esm/components/db-confirm.js +191 -1
  39. package/dist/esm/components/db-container.js +39 -1
  40. package/dist/esm/components/db-context-menu.js +265 -1
  41. package/dist/esm/components/db-countdown.js +146 -1
  42. package/dist/esm/components/db-cursor-follower.js +173 -1
  43. package/dist/esm/components/db-date-picker.js +837 -1
  44. package/dist/esm/components/db-divider.js +66 -1
  45. package/dist/esm/components/db-drawer.js +245 -1
  46. package/dist/esm/components/db-dropdown.js +493 -1
  47. package/dist/esm/components/db-dropzone.js +266 -1
  48. package/dist/esm/components/db-empty-state.js +97 -1
  49. package/dist/esm/components/db-file-uploader.js +256 -1
  50. package/dist/esm/components/db-floating-action-button.js +139 -1
  51. package/dist/esm/components/db-footer.js +385 -1
  52. package/dist/esm/components/db-form.js +566 -1
  53. package/dist/esm/components/db-gantt.js +882 -1
  54. package/dist/esm/components/db-gradient.js +133 -1
  55. package/dist/esm/components/db-grid-background.js +909 -1
  56. package/dist/esm/components/db-grid.js +73 -1
  57. package/dist/esm/components/db-icons.js +82 -1
  58. package/dist/esm/components/db-image-list.js +214 -1
  59. package/dist/esm/components/db-image-placeholder.js +96 -1
  60. package/dist/esm/components/db-image.js +289 -1
  61. package/dist/esm/components/db-indicator.js +517 -1
  62. package/dist/esm/components/db-input.js +420 -1
  63. package/dist/esm/components/db-kanban.js +538 -1
  64. package/dist/esm/components/db-label.js +66 -1
  65. package/dist/esm/components/db-lightbox.js +372 -1
  66. package/dist/esm/components/db-list.js +340 -1
  67. package/dist/esm/components/db-logo-svg.js +72 -1
  68. package/dist/esm/components/db-logo.js +106 -1
  69. package/dist/esm/components/db-lottie.js +109 -1
  70. package/dist/esm/components/db-markdown-editor.js +458 -1
  71. package/dist/esm/components/db-marquee.js +402 -1
  72. package/dist/esm/components/db-masonry.js +94 -1
  73. package/dist/esm/components/db-menu-item.js +211 -1
  74. package/dist/esm/components/db-modal.js +522 -1
  75. package/dist/esm/components/db-navbar.js +680 -1
  76. package/dist/esm/components/db-onboarding-modal.js +322 -1
  77. package/dist/esm/components/db-page-header.js +312 -1
  78. package/dist/esm/components/db-pagination.js +271 -1
  79. package/dist/esm/components/db-popover.js +580 -1
  80. package/dist/esm/components/db-progress-step.js +166 -1
  81. package/dist/esm/components/db-progress.js +171 -1
  82. package/dist/esm/components/db-progressbar.js +72 -1
  83. package/dist/esm/components/db-radio.js +172 -1
  84. package/dist/esm/components/db-random-gradient.js +121 -1
  85. package/dist/esm/components/db-range-slider.js +811 -1
  86. package/dist/esm/components/db-rating.js +325 -1
  87. package/dist/esm/components/db-reorder.js +286 -1
  88. package/dist/esm/components/db-resizable-panels.js +282 -1
  89. package/dist/esm/components/db-scroll-area.js +126 -1
  90. package/dist/esm/components/db-search-bar.js +668 -1
  91. package/dist/esm/components/db-section-app-download.js +101 -1
  92. package/dist/esm/components/db-section-contact.js +102 -1
  93. package/dist/esm/components/db-section-cta.js +150 -1
  94. package/dist/esm/components/db-section-faq.js +120 -1
  95. package/dist/esm/components/db-section-feature-grid.js +137 -1
  96. package/dist/esm/components/db-section-feature.js +179 -1
  97. package/dist/esm/components/db-section-hero.js +243 -1
  98. package/dist/esm/components/db-section-logo-cloud.js +138 -1
  99. package/dist/esm/components/db-section-pricing.js +166 -1
  100. package/dist/esm/components/db-section-stats.js +129 -1
  101. package/dist/esm/components/db-section-testimonials.js +252 -1
  102. package/dist/esm/components/db-section.js +385 -1
  103. package/dist/esm/components/db-segment-control.js +231 -1
  104. package/dist/esm/components/db-select.js +571 -1
  105. package/dist/esm/components/db-share-icons.js +40 -1
  106. package/dist/esm/components/db-share.js +489 -1
  107. package/dist/esm/components/db-sidebar.js +1068 -1
  108. package/dist/esm/components/db-skeleton.js +94 -1
  109. package/dist/esm/components/db-spinner.js +102 -1
  110. package/dist/esm/components/db-split-view.js +297 -1
  111. package/dist/esm/components/db-stack.js +46 -1
  112. package/dist/esm/components/db-stat.js +218 -1
  113. package/dist/esm/components/db-stepper.js +398 -1
  114. package/dist/esm/components/db-table.js +412 -1
  115. package/dist/esm/components/db-tabs.js +335 -1
  116. package/dist/esm/components/db-testimonial.js +162 -1
  117. package/dist/esm/components/db-textarea.js +233 -1
  118. package/dist/esm/components/db-time-picker.js +523 -1
  119. package/dist/esm/components/db-timeline.js +174 -1
  120. package/dist/esm/components/db-toast.js +158 -1
  121. package/dist/esm/components/db-toggle.js +162 -1
  122. package/dist/esm/components/db-toolbar.js +94 -1
  123. package/dist/esm/components/db-tooltip.js +440 -1
  124. package/dist/esm/components/db-top-banner.js +121 -1
  125. package/dist/esm/components/db-tutorial.js +324 -1
  126. package/dist/esm/components/db-video-player.js +503 -1
  127. package/dist/esm/components/db-youtube-player.js +194 -1
  128. package/dist/esm/components/highlight-code.js +65 -1
  129. package/dist/esm/components/input-validation.js +50 -1
  130. package/dist/esm/components/marketing-block-host-utils.js +9 -1
  131. package/dist/esm/components/number-scrub.js +117 -1
  132. package/dist/esm/components/random-gradient-palettes.js +67 -1
  133. package/dist/esm/components/section-block-header-utils.js +48 -1
  134. package/dist/esm/helpers/confirm.js +52 -1
  135. package/dist/esm/helpers/toast.js +73 -1
  136. package/dist/esm/index.js +111 -1
  137. package/dist/esm/node_modules/prismjs/components/prism-bash.js +235 -1
  138. package/dist/esm/node_modules/prismjs/components/prism-clike.js +31 -1
  139. package/dist/esm/node_modules/prismjs/components/prism-css.js +64 -1
  140. package/dist/esm/node_modules/prismjs/components/prism-javascript.js +172 -1
  141. package/dist/esm/node_modules/prismjs/components/prism-json.js +27 -1
  142. package/dist/esm/node_modules/prismjs/components/prism-jsx.js +143 -1
  143. package/dist/esm/node_modules/prismjs/components/prism-markup.js +186 -1
  144. package/dist/esm/node_modules/prismjs/components/prism-scss.js +81 -1
  145. package/dist/esm/node_modules/prismjs/components/prism-tsx.js +15 -1
  146. package/dist/esm/node_modules/prismjs/components/prism-typescript.js +60 -1
  147. package/dist/index.cjs +55414 -1
  148. package/dist/index.css +1 -1
  149. package/dist/index.esm.js +38284 -1
  150. package/dist/react/chunks/lottie-72a4c6d4.js +17032 -0
  151. package/dist/react/index.cjs +56503 -1
  152. package/dist/react/index.d.ts +1 -1
  153. package/dist/react/index.esm.js +39373 -1
  154. package/package.json +1 -1
  155. package/dist/chunks/lottie-2d1f6278.js +0 -1
  156. package/dist/react/chunks/lottie-14e7addb.js +0 -1
@@ -1 +1,194 @@
1
- class DbYouTubePlayer extends HTMLElement{constructor(){super(...arguments),this.isFullscreen=!1,this.playlistIndex=0,this.onFullscreenChange=()=>{this.isFullscreen=!!document.fullscreenElement,this.dispatchEvent(new CustomEvent("db-fullscreen-change",{detail:{isFullscreen:this.isFullscreen},bubbles:!0,composed:!0})),this.render()}}static get observedAttributes(){return["video-id","title","description","size","variant","theme","auto-play","loop","muted","show-controls","enable-fullscreen","enable-keyboard","enable-touch","show-subtitles","default-subtitle-lang","playback-rate","start-time","end-time","show-related-videos","show-info","show-channel-info","show-like-buttons","show-comments","playlist","current-index"]}connectedCallback(){this.style.display="block",this.playlistIndex=Number(this.getAttribute("current-index")||0),this.render(),document.addEventListener("fullscreenchange",this.onFullscreenChange)}disconnectedCallback(){document.removeEventListener("fullscreenchange",this.onFullscreenChange)}attributeChangedCallback(){this.render()}getBool(e,t=!1){if(!this.hasAttribute(e))return t;const s=this.getAttribute(e);return""===s||"true"===s}extractVideoId(e){if(!e)return"";if(11===e.length&&/^[a-zA-Z0-9_-]{11}$/.test(e))return e;const t=[/(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/|youtube\.com\/v\/|youtube\.com\/watch\?.*&v=)([^&\n?#]+)/,/youtube\.com\/watch\?.*v=([^&\n?#]+)/];for(const s of t){const t=e.match(s);if(t)return t[1]}return e}getPlaylist(){try{const e=this.getAttribute("playlist"),t=e?JSON.parse(e):[];return Array.isArray(t)?t:[]}catch{return[]}}getCurrentVideoId(){const e=this.getPlaylist();if(e.length>0){const t=Math.max(0,Math.min(e.length-1,this.playlistIndex));return this.extractVideoId(e[t])}return this.extractVideoId(this.getAttribute("video-id")||"")}generateEmbedUrl(e){const t=new URLSearchParams;if(this.getBool("auto-play")&&t.append("autoplay","1"),this.getBool("loop")&&t.append("loop","1"),this.getBool("muted")&&t.append("mute","1"),this.getBool("show-controls",!0)||t.append("controls","0"),this.getBool("enable-fullscreen",!0)||t.append("fs","0"),this.getBool("enable-keyboard",!0)||t.append("disablekb","1"),this.getBool("enable-touch",!0)||t.append("modestbranding","1"),this.getBool("show-subtitles")){t.append("cc_load_policy","1");const e=this.getAttribute("default-subtitle-lang")||"ko";e&&t.append("cc_lang_pref",e)}const s=this.getAttribute("playback-rate")||"1";"1"!==s&&t.append("vq",s);const n=Number(this.getAttribute("start-time")||0);n>0&&t.append("start",String(n));const o=Number(this.getAttribute("end-time")||0);o>0&&t.append("end",String(o)),this.getBool("show-related-videos",!0)||t.append("rel","0"),this.getBool("show-info",!0)||t.append("showinfo","0"),this.getBool("show-channel-info",!0)||t.append("modestbranding","1"),this.getBool("show-like-buttons",!0)||t.append("modestbranding","1"),this.getBool("show-comments",!1)||t.append("modestbranding","1");const i=this.getPlaylist().map(e=>this.extractVideoId(e)).filter(Boolean);i.length>0?t.append("playlist",i.join(",")):this.getBool("loop")&&t.append("playlist",e);const r=t.toString();return`https://www.youtube.com/embed/${e}${r?`?${r}`:""}`}render(){const e=this.getAttribute("size")||"m",t=this.getAttribute("variant")||"default",s=this.getAttribute("theme")||"auto";this.className=["designbase-wc-youtube-player",`designbase-wc-youtube-player--${e}`,`designbase-wc-youtube-player--${t}`,`designbase-wc-youtube-player--${s}`,this.isFullscreen&&"designbase-wc-youtube-player--fullscreen"].filter(Boolean).join(" ");const n=this.getCurrentVideoId();if(!n){const e=document.createElement("div");return e.className="designbase-wc-youtube-player__error",e.textContent="동영상을 불러올 수 없습니다.",void this.replaceChildren(e)}const o=document.createElement("div");o.className="designbase-wc-youtube-player__container";const i=document.createElement("iframe");i.className="designbase-wc-youtube-player__iframe",i.src=this.generateEmbedUrl(n),i.title=this.getAttribute("title")||`YouTube 동영상: ${n}`,i.setAttribute("frameborder","0"),i.setAttribute("allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"),i.setAttribute("referrerpolicy","strict-origin-when-cross-origin"),i.referrerPolicy="strict-origin-when-cross-origin",i.allowFullscreen=!0,o.append(i);const r=this.getAttribute("description"),a=document.createDocumentFragment();if(a.append(o),r&&"minimal"!==t){const e=document.createElement("div");e.className="designbase-wc-youtube-player__description";const t=document.createElement("p");t.textContent=r,e.append(t),a.append(e)}this.replaceChildren(a)}}customElements.get("db-youtube-player")||customElements.define("db-youtube-player",DbYouTubePlayer);export{DbYouTubePlayer};
1
+ class DbYouTubePlayer extends HTMLElement {
2
+ constructor() {
3
+ super(...arguments);
4
+ this.isFullscreen = false;
5
+ this.playlistIndex = 0;
6
+ this.onFullscreenChange = () => {
7
+ this.isFullscreen = !!document.fullscreenElement;
8
+ this.dispatchEvent(new CustomEvent('db-fullscreen-change', { detail: { isFullscreen: this.isFullscreen }, bubbles: true, composed: true }));
9
+ this.render();
10
+ };
11
+ }
12
+ static get observedAttributes() {
13
+ return [
14
+ 'video-id',
15
+ 'title',
16
+ 'description',
17
+ 'size',
18
+ 'variant',
19
+ 'theme',
20
+ 'auto-play',
21
+ 'loop',
22
+ 'muted',
23
+ 'show-controls',
24
+ 'enable-fullscreen',
25
+ 'enable-keyboard',
26
+ 'enable-touch',
27
+ 'show-subtitles',
28
+ 'default-subtitle-lang',
29
+ 'playback-rate',
30
+ 'start-time',
31
+ 'end-time',
32
+ 'show-related-videos',
33
+ 'show-info',
34
+ 'show-channel-info',
35
+ 'show-like-buttons',
36
+ 'show-comments',
37
+ 'playlist',
38
+ 'current-index',
39
+ ];
40
+ }
41
+ connectedCallback() {
42
+ this.style.display = 'block';
43
+ this.playlistIndex = Number(this.getAttribute('current-index') || 0);
44
+ this.render();
45
+ document.addEventListener('fullscreenchange', this.onFullscreenChange);
46
+ }
47
+ disconnectedCallback() {
48
+ document.removeEventListener('fullscreenchange', this.onFullscreenChange);
49
+ }
50
+ attributeChangedCallback() {
51
+ this.render();
52
+ }
53
+ getBool(name, fallback = false) {
54
+ if (!this.hasAttribute(name))
55
+ return fallback;
56
+ const value = this.getAttribute(name);
57
+ return value === '' || value === 'true';
58
+ }
59
+ extractVideoId(url) {
60
+ if (!url)
61
+ return '';
62
+ if (url.length === 11 && /^[a-zA-Z0-9_-]{11}$/.test(url))
63
+ return url;
64
+ const patterns = [
65
+ /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/|youtube\.com\/v\/|youtube\.com\/watch\?.*&v=)([^&\n?#]+)/,
66
+ /youtube\.com\/watch\?.*v=([^&\n?#]+)/,
67
+ ];
68
+ for (const pattern of patterns) {
69
+ const match = url.match(pattern);
70
+ if (match)
71
+ return match[1];
72
+ }
73
+ return url;
74
+ }
75
+ getPlaylist() {
76
+ try {
77
+ const raw = this.getAttribute('playlist');
78
+ const parsed = raw ? JSON.parse(raw) : [];
79
+ return Array.isArray(parsed) ? parsed : [];
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ }
85
+ getCurrentVideoId() {
86
+ const playlist = this.getPlaylist();
87
+ if (playlist.length > 0) {
88
+ const index = Math.max(0, Math.min(playlist.length - 1, this.playlistIndex));
89
+ return this.extractVideoId(playlist[index]);
90
+ }
91
+ return this.extractVideoId(this.getAttribute('video-id') || '');
92
+ }
93
+ generateEmbedUrl(videoId) {
94
+ const params = new URLSearchParams();
95
+ if (this.getBool('auto-play'))
96
+ params.append('autoplay', '1');
97
+ if (this.getBool('loop'))
98
+ params.append('loop', '1');
99
+ if (this.getBool('muted'))
100
+ params.append('mute', '1');
101
+ if (!this.getBool('show-controls', true))
102
+ params.append('controls', '0');
103
+ if (!this.getBool('enable-fullscreen', true))
104
+ params.append('fs', '0');
105
+ if (!this.getBool('enable-keyboard', true))
106
+ params.append('disablekb', '1');
107
+ if (!this.getBool('enable-touch', true))
108
+ params.append('modestbranding', '1');
109
+ if (this.getBool('show-subtitles')) {
110
+ params.append('cc_load_policy', '1');
111
+ const subtitleLang = this.getAttribute('default-subtitle-lang') || 'ko';
112
+ if (subtitleLang)
113
+ params.append('cc_lang_pref', subtitleLang);
114
+ }
115
+ const playbackRate = this.getAttribute('playback-rate') || '1';
116
+ if (playbackRate !== '1')
117
+ params.append('vq', playbackRate);
118
+ const start = Number(this.getAttribute('start-time') || 0);
119
+ if (start > 0)
120
+ params.append('start', String(start));
121
+ const end = Number(this.getAttribute('end-time') || 0);
122
+ if (end > 0)
123
+ params.append('end', String(end));
124
+ if (!this.getBool('show-related-videos', true))
125
+ params.append('rel', '0');
126
+ if (!this.getBool('show-info', true))
127
+ params.append('showinfo', '0');
128
+ if (!this.getBool('show-channel-info', true))
129
+ params.append('modestbranding', '1');
130
+ if (!this.getBool('show-like-buttons', true))
131
+ params.append('modestbranding', '1');
132
+ if (!this.getBool('show-comments', false))
133
+ params.append('modestbranding', '1');
134
+ const playlist = this.getPlaylist().map((entry) => this.extractVideoId(entry)).filter(Boolean);
135
+ if (playlist.length > 0) {
136
+ params.append('playlist', playlist.join(','));
137
+ }
138
+ else if (this.getBool('loop')) {
139
+ params.append('playlist', videoId);
140
+ }
141
+ const query = params.toString();
142
+ return `https://www.youtube.com/embed/${videoId}${query ? `?${query}` : ''}`;
143
+ }
144
+ render() {
145
+ const size = this.getAttribute('size') || 'm';
146
+ const variant = this.getAttribute('variant') || 'default';
147
+ const theme = this.getAttribute('theme') || 'auto';
148
+ this.className = [
149
+ 'designbase-wc-youtube-player',
150
+ `designbase-wc-youtube-player--${size}`,
151
+ `designbase-wc-youtube-player--${variant}`,
152
+ `designbase-wc-youtube-player--${theme}`,
153
+ this.isFullscreen && 'designbase-wc-youtube-player--fullscreen',
154
+ ]
155
+ .filter(Boolean)
156
+ .join(' ');
157
+ const currentVideoId = this.getCurrentVideoId();
158
+ if (!currentVideoId) {
159
+ const error = document.createElement('div');
160
+ error.className = 'designbase-wc-youtube-player__error';
161
+ error.textContent = '동영상을 불러올 수 없습니다.';
162
+ this.replaceChildren(error);
163
+ return;
164
+ }
165
+ const container = document.createElement('div');
166
+ container.className = 'designbase-wc-youtube-player__container';
167
+ const iframe = document.createElement('iframe');
168
+ iframe.className = 'designbase-wc-youtube-player__iframe';
169
+ iframe.src = this.generateEmbedUrl(currentVideoId);
170
+ iframe.title = this.getAttribute('title') || `YouTube 동영상: ${currentVideoId}`;
171
+ iframe.setAttribute('frameborder', '0');
172
+ iframe.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share');
173
+ iframe.setAttribute('referrerpolicy', 'strict-origin-when-cross-origin');
174
+ iframe.referrerPolicy = 'strict-origin-when-cross-origin';
175
+ iframe.allowFullscreen = true;
176
+ container.append(iframe);
177
+ const description = this.getAttribute('description');
178
+ const fragment = document.createDocumentFragment();
179
+ fragment.append(container);
180
+ if (description && variant !== 'minimal') {
181
+ const desc = document.createElement('div');
182
+ desc.className = 'designbase-wc-youtube-player__description';
183
+ const p = document.createElement('p');
184
+ p.textContent = description;
185
+ desc.append(p);
186
+ fragment.append(desc);
187
+ }
188
+ this.replaceChildren(fragment);
189
+ }
190
+ }
191
+ if (!customElements.get('db-youtube-player'))
192
+ customElements.define('db-youtube-player', DbYouTubePlayer);
193
+
194
+ export { DbYouTubePlayer };
@@ -1 +1,65 @@
1
- import*as s from"prismjs";import"../node_modules/prismjs/components/prism-clike.js";import"../node_modules/prismjs/components/prism-markup.js";import"../node_modules/prismjs/components/prism-css.js";import"../node_modules/prismjs/components/prism-scss.js";import"../node_modules/prismjs/components/prism-bash.js";import"../node_modules/prismjs/components/prism-json.js";import"../node_modules/prismjs/components/prism-javascript.js";import"../node_modules/prismjs/components/prism-typescript.js";import"../node_modules/prismjs/components/prism-jsx.js";import"../node_modules/prismjs/components/prism-tsx.js";const o={js:"javascript",ts:"typescript",sh:"bash",shell:"bash",html:"markup",xml:"markup",svg:"markup"},r={javascript:"JavaScript",typescript:"TypeScript",tsx:"TSX",jsx:"JSX",css:"CSS",scss:"SCSS",json:"JSON",bash:"Bash",markup:"HTML"},resolvePrismLanguage=s=>{const r=s.toLowerCase().trim();return o[r]??r},formatLanguageLabel=s=>{const o=resolvePrismLanguage(s);return r[o]??s.toUpperCase()},highlightWithPrism=(o,r)=>{const m=(()=>{const o=globalThis.Prism;return o?.languages?o:s.default??s})(),p=resolvePrismLanguage(r),t=m.languages[p];if(!t)return null;try{return m.highlight(o,t,p)}catch{return null}},ensureHighlightReady=()=>Promise.resolve(),highlightCodeSync=(s,o)=>highlightWithPrism(s,o);export{ensureHighlightReady,formatLanguageLabel,highlightCodeSync,resolvePrismLanguage};
1
+ import * as PrismNamespace from 'prismjs';
2
+ import '../node_modules/prismjs/components/prism-clike.js';
3
+ import '../node_modules/prismjs/components/prism-markup.js';
4
+ import '../node_modules/prismjs/components/prism-css.js';
5
+ import '../node_modules/prismjs/components/prism-scss.js';
6
+ import '../node_modules/prismjs/components/prism-bash.js';
7
+ import '../node_modules/prismjs/components/prism-json.js';
8
+ import '../node_modules/prismjs/components/prism-javascript.js';
9
+ import '../node_modules/prismjs/components/prism-typescript.js';
10
+ import '../node_modules/prismjs/components/prism-jsx.js';
11
+ import '../node_modules/prismjs/components/prism-tsx.js';
12
+
13
+ const LANGUAGE_ALIASES = {
14
+ js: 'javascript',
15
+ ts: 'typescript',
16
+ sh: 'bash',
17
+ shell: 'bash',
18
+ html: 'markup',
19
+ xml: 'markup',
20
+ svg: 'markup',
21
+ };
22
+ const LANGUAGE_LABELS = {
23
+ javascript: 'JavaScript',
24
+ typescript: 'TypeScript',
25
+ tsx: 'TSX',
26
+ jsx: 'JSX',
27
+ css: 'CSS',
28
+ scss: 'SCSS',
29
+ json: 'JSON',
30
+ bash: 'Bash',
31
+ markup: 'HTML',
32
+ };
33
+ /** prism language components mutate the global Prism singleton — not always the ESM namespace */
34
+ const getPrism = () => {
35
+ const globalPrism = globalThis.Prism;
36
+ if (globalPrism?.languages)
37
+ return globalPrism;
38
+ return PrismNamespace.default ?? PrismNamespace;
39
+ };
40
+ const resolvePrismLanguage = (language) => {
41
+ const normalized = language.toLowerCase().trim();
42
+ return LANGUAGE_ALIASES[normalized] ?? normalized;
43
+ };
44
+ const formatLanguageLabel = (language) => {
45
+ const resolved = resolvePrismLanguage(language);
46
+ return LANGUAGE_LABELS[resolved] ?? language.toUpperCase();
47
+ };
48
+ const highlightWithPrism = (code, language) => {
49
+ const Prism = getPrism();
50
+ const lang = resolvePrismLanguage(language);
51
+ const grammar = Prism.languages[lang];
52
+ if (!grammar) {
53
+ return null;
54
+ }
55
+ try {
56
+ return Prism.highlight(code, grammar, lang);
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ };
62
+ const ensureHighlightReady = () => Promise.resolve();
63
+ const highlightCodeSync = (code, language) => highlightWithPrism(code, language);
64
+
65
+ export { ensureHighlightReady, formatLanguageLabel, highlightCodeSync, resolvePrismLanguage };
@@ -1 +1,50 @@
1
- const e={weak:"약함",fair:"보통",good:"강함","very-strong":"아주 강함"};function getPasswordScore(e){switch(e){case"weak":return 1;case"fair":return 2;case"good":return 3;case"very-strong":return 4;default:return 0}}function getPasswordValidation(t,r=8){const s=[{id:"length",label:`최소 ${r}자 이상`,met:t.length>=r},{id:"lowercase",label:"소문자 포함",met:/[a-z]/.test(t)},{id:"uppercase",label:"대문자 포함",met:/[A-Z]/.test(t)},{id:"number",label:"숫자 포함",met:/\d/.test(t)},{id:"special",label:"특수문자 포함",met:/[!@#$%^&*(),.?":{}|<>]/.test(t)}],a=function getPasswordStrengthLevel(e,t){return!t||e<=1?"weak":2===e?"fair":3===e?"good":"very-strong"}(s.filter(e=>e.met).length,t.length>0);return{requirements:s,score:getPasswordScore(a),level:a,levelLabel:e[a],isValid:s.every(e=>e.met),isStrongEnough:"good"===a||"very-strong"===a}}export{getPasswordValidation};
1
+ const STRENGTH_LABELS = {
2
+ weak: '약함',
3
+ fair: '보통',
4
+ good: '강함',
5
+ 'very-strong': '아주 강함',
6
+ };
7
+ function getPasswordStrengthLevel(metCount, hasValue) {
8
+ if (!hasValue || metCount <= 1)
9
+ return 'weak';
10
+ if (metCount === 2)
11
+ return 'fair';
12
+ if (metCount === 3)
13
+ return 'good';
14
+ return 'very-strong';
15
+ }
16
+ function getPasswordScore(level) {
17
+ switch (level) {
18
+ case 'weak':
19
+ return 1;
20
+ case 'fair':
21
+ return 2;
22
+ case 'good':
23
+ return 3;
24
+ case 'very-strong':
25
+ return 4;
26
+ default:
27
+ return 0;
28
+ }
29
+ }
30
+ function getPasswordValidation(value, minLength = 8) {
31
+ const requirements = [
32
+ { id: 'length', label: `최소 ${minLength}자 이상`, met: value.length >= minLength },
33
+ { id: 'lowercase', label: '소문자 포함', met: /[a-z]/.test(value) },
34
+ { id: 'uppercase', label: '대문자 포함', met: /[A-Z]/.test(value) },
35
+ { id: 'number', label: '숫자 포함', met: /\d/.test(value) },
36
+ { id: 'special', label: '특수문자 포함', met: /[!@#$%^&*(),.?":{}|<>]/.test(value) },
37
+ ];
38
+ const metCount = requirements.filter((requirement) => requirement.met).length;
39
+ const level = getPasswordStrengthLevel(metCount, value.length > 0);
40
+ return {
41
+ requirements,
42
+ score: getPasswordScore(level),
43
+ level,
44
+ levelLabel: STRENGTH_LABELS[level],
45
+ isValid: requirements.every((requirement) => requirement.met),
46
+ isStrongEnough: level === 'good' || level === 'very-strong',
47
+ };
48
+ }
49
+
50
+ export { getPasswordValidation };
@@ -1 +1,9 @@
1
- const t=["full-width","full-height","overflow-visible"];function syncMarketingBlockHost(o,s){for(const l of t)o.classList.toggle(`${s}--${l}`,o.hasAttribute(l))}export{syncMarketingBlockHost};
1
+ const HOST_FLAGS = ['full-width', 'full-height', 'overflow-visible'];
2
+ /** Marketing blocks are standalone components — sync layout flags on the host, not nested db-section. */
3
+ function syncMarketingBlockHost(host, baseClass) {
4
+ for (const flag of HOST_FLAGS) {
5
+ host.classList.toggle(`${baseClass}--${flag}`, host.hasAttribute(flag));
6
+ }
7
+ }
8
+
9
+ export { syncMarketingBlockHost };
@@ -1 +1,117 @@
1
- function parseScrubNumericValue(e){const t=e.trim();if(""===t)return 0;const r=Number(t);return Number.isFinite(r)?r:null}function getStepDecimalPlaces(e){const t=String(e),r=t.indexOf(".");return-1===r?0:t.length-r-1}function formatScrubValue(e,t){const r=getStepDecimalPlaces(t);return r>0?e.toFixed(r):String(Math.round(e))}function computeScrubValue(e,t,r,n,o,u,i){const a=n*(o.shiftKey?10:o.altKey?.1:1);let c=e+Math.round(t/r)*a;void 0!==u&&(c=Math.max(u,c)),void 0!==i&&(c=Math.min(i,c));const s=getStepDecimalPlaces(a);return c=s>0?Number(c.toFixed(s)):Math.round(c),c}function readNumericAttribute(e,t){const r=e.getAttribute(t);if(null===r||""===r)return;const n=Number(r);return Number.isFinite(n)?n:void 0}function attachNumberScrub(e,t){let r=null;const endScrub=()=>{r=null,t.onScrubStateChange?.(!1),document.body.style.removeProperty("cursor"),document.body.style.removeProperty("user-select")},handlePointerDown=n=>{if(!t.isEnabled()||!t.isInteractive()||0!==n.button)return;const o=parseScrubNumericValue(t.getValue());null!==o&&(r={pointerId:n.pointerId,startX:n.clientX,startValue:o,moved:!1},e.setPointerCapture(n.pointerId))},handlePointerMove=e=>{if(!r||r.pointerId!==e.pointerId)return;const n=e.clientX-r.startX;!r.moved&&Math.abs(n)<3||(r.moved||(r.moved=!0,t.onScrubStateChange?.(!0),document.body.style.cursor="ew-resize",document.body.style.userSelect="none"),e.preventDefault(),((e,n)=>{if(!r)return;const o=e-r.startX,u=t.getStep(),i=computeScrubValue(r.startValue,o,t.getSensitivity(),u,n,t.getMin(),t.getMax());t.onValueChange(formatScrubValue(i,u))})(e.clientX,e))},handlePointerEnd=t=>{r&&r.pointerId===t.pointerId&&(r.moved&&t.preventDefault(),e.hasPointerCapture(t.pointerId)&&e.releasePointerCapture(t.pointerId),endScrub())};return e.addEventListener("pointerdown",handlePointerDown),e.addEventListener("pointermove",handlePointerMove),e.addEventListener("pointerup",handlePointerEnd),e.addEventListener("pointercancel",handlePointerEnd),()=>{endScrub(),e.removeEventListener("pointerdown",handlePointerDown),e.removeEventListener("pointermove",handlePointerMove),e.removeEventListener("pointerup",handlePointerEnd),e.removeEventListener("pointercancel",handlePointerEnd)}}export{attachNumberScrub,computeScrubValue,formatScrubValue,getStepDecimalPlaces,parseScrubNumericValue,readNumericAttribute};
1
+ function parseScrubNumericValue(raw) {
2
+ const trimmed = raw.trim();
3
+ if (trimmed === '')
4
+ return 0;
5
+ const parsed = Number(trimmed);
6
+ return Number.isFinite(parsed) ? parsed : null;
7
+ }
8
+ function getStepDecimalPlaces(step) {
9
+ const normalized = String(step);
10
+ const dotIndex = normalized.indexOf('.');
11
+ if (dotIndex === -1)
12
+ return 0;
13
+ return normalized.length - dotIndex - 1;
14
+ }
15
+ function formatScrubValue(value, step) {
16
+ const decimals = getStepDecimalPlaces(step);
17
+ if (decimals > 0) {
18
+ return value.toFixed(decimals);
19
+ }
20
+ return String(Math.round(value));
21
+ }
22
+ function computeScrubValue(startValue, deltaX, sensitivity, step, modifiers, min, max) {
23
+ const multiplier = modifiers.shiftKey ? 10 : modifiers.altKey ? 0.1 : 1;
24
+ const effectiveStep = step * multiplier;
25
+ const steps = Math.round(deltaX / sensitivity);
26
+ let next = startValue + steps * effectiveStep;
27
+ if (min !== undefined)
28
+ next = Math.max(min, next);
29
+ if (max !== undefined)
30
+ next = Math.min(max, next);
31
+ const decimals = getStepDecimalPlaces(effectiveStep);
32
+ if (decimals > 0) {
33
+ next = Number(next.toFixed(decimals));
34
+ }
35
+ else {
36
+ next = Math.round(next);
37
+ }
38
+ return next;
39
+ }
40
+ function readNumericAttribute(element, name) {
41
+ const raw = element.getAttribute(name);
42
+ if (raw === null || raw === '')
43
+ return undefined;
44
+ const parsed = Number(raw);
45
+ return Number.isFinite(parsed) ? parsed : undefined;
46
+ }
47
+ const SCRUB_DRAG_THRESHOLD = 3;
48
+ function attachNumberScrub(input, options) {
49
+ let session = null;
50
+ const endScrub = () => {
51
+ session = null;
52
+ options.onScrubStateChange?.(false);
53
+ document.body.style.removeProperty('cursor');
54
+ document.body.style.removeProperty('user-select');
55
+ };
56
+ const applyScrub = (clientX, modifiers) => {
57
+ if (!session)
58
+ return;
59
+ const deltaX = clientX - session.startX;
60
+ const step = options.getStep();
61
+ const next = computeScrubValue(session.startValue, deltaX, options.getSensitivity(), step, modifiers, options.getMin(), options.getMax());
62
+ options.onValueChange(formatScrubValue(next, step));
63
+ };
64
+ const handlePointerDown = (event) => {
65
+ if (!options.isEnabled() || !options.isInteractive() || event.button !== 0)
66
+ return;
67
+ const startValue = parseScrubNumericValue(options.getValue());
68
+ if (startValue === null)
69
+ return;
70
+ session = {
71
+ pointerId: event.pointerId,
72
+ startX: event.clientX,
73
+ startValue,
74
+ moved: false,
75
+ };
76
+ input.setPointerCapture(event.pointerId);
77
+ };
78
+ const handlePointerMove = (event) => {
79
+ if (!session || session.pointerId !== event.pointerId)
80
+ return;
81
+ const deltaX = event.clientX - session.startX;
82
+ if (!session.moved && Math.abs(deltaX) < SCRUB_DRAG_THRESHOLD)
83
+ return;
84
+ if (!session.moved) {
85
+ session.moved = true;
86
+ options.onScrubStateChange?.(true);
87
+ document.body.style.cursor = 'ew-resize';
88
+ document.body.style.userSelect = 'none';
89
+ }
90
+ event.preventDefault();
91
+ applyScrub(event.clientX, event);
92
+ };
93
+ const handlePointerEnd = (event) => {
94
+ if (!session || session.pointerId !== event.pointerId)
95
+ return;
96
+ if (session.moved) {
97
+ event.preventDefault();
98
+ }
99
+ if (input.hasPointerCapture(event.pointerId)) {
100
+ input.releasePointerCapture(event.pointerId);
101
+ }
102
+ endScrub();
103
+ };
104
+ input.addEventListener('pointerdown', handlePointerDown);
105
+ input.addEventListener('pointermove', handlePointerMove);
106
+ input.addEventListener('pointerup', handlePointerEnd);
107
+ input.addEventListener('pointercancel', handlePointerEnd);
108
+ return () => {
109
+ endScrub();
110
+ input.removeEventListener('pointerdown', handlePointerDown);
111
+ input.removeEventListener('pointermove', handlePointerMove);
112
+ input.removeEventListener('pointerup', handlePointerEnd);
113
+ input.removeEventListener('pointercancel', handlePointerEnd);
114
+ };
115
+ }
116
+
117
+ export { attachNumberScrub, computeScrubValue, formatScrubValue, getStepDecimalPlaces, parseScrubNumericValue, readNumericAttribute };
@@ -1 +1,67 @@
1
- const a={primary:{light:["#eff6ff","#dbeafe","#bfdbfe","#93c5fd"],vivid:["#3b82f6","#2563eb","#1d4ed8","#1e40af","#1e3a8a"],dark:["#0f172a","#1e293b","#334155","#475569","#64748b"]},secondary:{light:["#f8fafc","#f1f5f9","#e2e8f0","#cbd5e1"],vivid:["#6b7280","#4b5563","#374151","#1f2937","#111827"],dark:["#0f0f0f","#1a1a1a","#262626","#404040","#525252"]},success:{light:["#f0fdf4","#dcfce7","#bbf7d0","#86efac"],vivid:["#22c55e","#16a34a","#15803d","#166534","#14532d"],dark:["#052e16","#14532d","#166534","#15803d","#16a34a"]},warning:{light:["#fffbeb","#fef3c7","#fde68a"],vivid:["#f59e0b","#d97706","#b45309","#92400e","#78350f"],dark:["#451a03","#78350f","#92400e","#b45309","#d97706"]},error:{light:["#fef2f2","#fecaca","#fca5a5"],vivid:["#ef4444","#dc2626","#b91c1c","#991b1b","#7f1d1d"],dark:["#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626"]},info:{light:["#eff6ff","#dbeafe","#bfdbfe","#93c5fd"],vivid:["#3b82f6","#2563eb","#1d4ed8","#1e40af","#1e3a8a"],dark:["#0f172a","#1e293b","#334155","#475569","#64748b"]},purple:{light:["#faf5ff","#f3e8ff","#e9d5ff","#d8b4fe"],vivid:["#a855f7","#9333ea","#7c3aed","#6d28d9","#5b21b6"],dark:["#3b0764","#581c87","#6b21a8","#7c3aed","#9333ea"]},ocean:{light:["#f0fdfa","#ccfbf1","#99f6e4"],vivid:["#14b8a6","#0d9488","#0f766e","#115e59","#134e4a"],dark:["#042f2e","#134e4a","#115e59","#0f766e","#0d9488"]},sunset:{light:["#fff7ed","#fed7aa","#fdba74"],vivid:["#f97316","#ea580c","#c2410c","#9a3412","#7c2d12"],dark:["#431407","#7c2d12","#9a3412","#c2410c","#ea580c"]}};function createRandomGradientStyle(f,e,d,c,i,r){const b=a[f][e],t=Math.min(6,Math.max(3,d)),n=[];for(let a=0;a<t;a+=1)n.push(b[Math.floor(Math.random()*b.length)]);const o=Array.from({length:t},()=>100*Math.random()).sort((a,f)=>a-f),h=n.map((a,f)=>`${a} ${o[f]}%`).join(", ");return{background:`radial-gradient(circle at ${100*Math.random()}% ${100*Math.random()}%, ${h})`,filter:`blur(${Math.max(80,c)}px)`,transition:i?`background ${r}s ease-in-out`:"none"}}export{a as COLOR_PALETTES,createRandomGradientStyle};
1
+ const COLOR_PALETTES = {
2
+ primary: {
3
+ light: ['#eff6ff', '#dbeafe', '#bfdbfe', '#93c5fd'],
4
+ vivid: ['#3b82f6', '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a'],
5
+ dark: ['#0f172a', '#1e293b', '#334155', '#475569', '#64748b'],
6
+ },
7
+ secondary: {
8
+ light: ['#f8fafc', '#f1f5f9', '#e2e8f0', '#cbd5e1'],
9
+ vivid: ['#6b7280', '#4b5563', '#374151', '#1f2937', '#111827'],
10
+ dark: ['#0f0f0f', '#1a1a1a', '#262626', '#404040', '#525252'],
11
+ },
12
+ success: {
13
+ light: ['#f0fdf4', '#dcfce7', '#bbf7d0', '#86efac'],
14
+ vivid: ['#22c55e', '#16a34a', '#15803d', '#166534', '#14532d'],
15
+ dark: ['#052e16', '#14532d', '#166534', '#15803d', '#16a34a'],
16
+ },
17
+ warning: {
18
+ light: ['#fffbeb', '#fef3c7', '#fde68a'],
19
+ vivid: ['#f59e0b', '#d97706', '#b45309', '#92400e', '#78350f'],
20
+ dark: ['#451a03', '#78350f', '#92400e', '#b45309', '#d97706'],
21
+ },
22
+ error: {
23
+ light: ['#fef2f2', '#fecaca', '#fca5a5'],
24
+ vivid: ['#ef4444', '#dc2626', '#b91c1c', '#991b1b', '#7f1d1d'],
25
+ dark: ['#450a0a', '#7f1d1d', '#991b1b', '#b91c1c', '#dc2626'],
26
+ },
27
+ info: {
28
+ light: ['#eff6ff', '#dbeafe', '#bfdbfe', '#93c5fd'],
29
+ vivid: ['#3b82f6', '#2563eb', '#1d4ed8', '#1e40af', '#1e3a8a'],
30
+ dark: ['#0f172a', '#1e293b', '#334155', '#475569', '#64748b'],
31
+ },
32
+ purple: {
33
+ light: ['#faf5ff', '#f3e8ff', '#e9d5ff', '#d8b4fe'],
34
+ vivid: ['#a855f7', '#9333ea', '#7c3aed', '#6d28d9', '#5b21b6'],
35
+ dark: ['#3b0764', '#581c87', '#6b21a8', '#7c3aed', '#9333ea'],
36
+ },
37
+ ocean: {
38
+ light: ['#f0fdfa', '#ccfbf1', '#99f6e4'],
39
+ vivid: ['#14b8a6', '#0d9488', '#0f766e', '#115e59', '#134e4a'],
40
+ dark: ['#042f2e', '#134e4a', '#115e59', '#0f766e', '#0d9488'],
41
+ },
42
+ sunset: {
43
+ light: ['#fff7ed', '#fed7aa', '#fdba74'],
44
+ vivid: ['#f97316', '#ea580c', '#c2410c', '#9a3412', '#7c2d12'],
45
+ dark: ['#431407', '#7c2d12', '#9a3412', '#c2410c', '#ea580c'],
46
+ },
47
+ };
48
+ function createRandomGradientStyle(scheme, tone, colorCount, blur, animated, animationDuration) {
49
+ const schemeColors = COLOR_PALETTES[scheme][tone];
50
+ const numColors = Math.min(6, Math.max(3, colorCount));
51
+ const colors = [];
52
+ for (let index = 0; index < numColors; index += 1) {
53
+ colors.push(schemeColors[Math.floor(Math.random() * schemeColors.length)]);
54
+ }
55
+ const positions = Array.from({ length: numColors }, () => Math.random() * 100).sort((a, b) => a - b);
56
+ const gradientStops = colors.map((color, index) => `${color} ${positions[index]}%`).join(', ');
57
+ const centerX = Math.random() * 100;
58
+ const centerY = Math.random() * 100;
59
+ const minBlur = Math.max(80, blur);
60
+ return {
61
+ background: `radial-gradient(circle at ${centerX}% ${centerY}%, ${gradientStops})`,
62
+ filter: `blur(${minBlur}px)`,
63
+ transition: animated ? `background ${animationDuration}s ease-in-out` : 'none',
64
+ };
65
+ }
66
+
67
+ export { COLOR_PALETTES, createRandomGradientStyle };
@@ -1 +1,48 @@
1
- function applySectionBlockHeader(e,t){if(!e)return;const{headline:n="",subtitle:i="",description:s="",badge:a,align:d="center",extraClassName:o}=t;e.className=["designbase-wc-section-block-header",`designbase-wc-section-block-header--${d}`,o].filter(Boolean).join(" ");let r=e.querySelector("db-badge");a?.text?(r||(r=document.createElement("db-badge"),r.className="designbase-wc-section-block-header__badge",e.prepend(r)),r.removeAttribute("hidden"),r.style.display="",r.setAttribute("variant",a.variant||"primary"),r.setAttribute("badge-style",a.style||"text"),r.setAttribute("size",a.size||"m"),r.textContent=a.text):r&&(r.textContent="",r.setAttribute("hidden",""),r.style.display="none");const c=e.querySelector("h2"),l=e.querySelector(".designbase-wc-section-block-header__subtitle"),b=e.querySelector(".designbase-wc-section-block-header__description");c&&(c.textContent=n,c.hidden=!n),l&&(l.textContent=i,l.hidden=!i),b&&(b.textContent=s,b.hidden=!s)}export{applySectionBlockHeader};
1
+ function applySectionBlockHeader(headerEl, options) {
2
+ if (!headerEl)
3
+ return;
4
+ const { headline = '', subtitle = '', description = '', badge, align = 'center', extraClassName, } = options;
5
+ headerEl.className = [
6
+ 'designbase-wc-section-block-header',
7
+ `designbase-wc-section-block-header--${align}`,
8
+ extraClassName,
9
+ ]
10
+ .filter(Boolean)
11
+ .join(' ');
12
+ let badgeEl = headerEl.querySelector('db-badge');
13
+ if (badge?.text) {
14
+ if (!badgeEl) {
15
+ badgeEl = document.createElement('db-badge');
16
+ badgeEl.className = 'designbase-wc-section-block-header__badge';
17
+ headerEl.prepend(badgeEl);
18
+ }
19
+ badgeEl.removeAttribute('hidden');
20
+ badgeEl.style.display = '';
21
+ badgeEl.setAttribute('variant', badge.variant || 'primary');
22
+ badgeEl.setAttribute('badge-style', badge.style || 'text');
23
+ badgeEl.setAttribute('size', badge.size || 'm');
24
+ badgeEl.textContent = badge.text;
25
+ }
26
+ else if (badgeEl) {
27
+ badgeEl.textContent = '';
28
+ badgeEl.setAttribute('hidden', '');
29
+ badgeEl.style.display = 'none';
30
+ }
31
+ const headlineEl = headerEl.querySelector('h2');
32
+ const subtitleEl = headerEl.querySelector('.designbase-wc-section-block-header__subtitle');
33
+ const descriptionEl = headerEl.querySelector('.designbase-wc-section-block-header__description');
34
+ if (headlineEl) {
35
+ headlineEl.textContent = headline;
36
+ headlineEl.hidden = !headline;
37
+ }
38
+ if (subtitleEl) {
39
+ subtitleEl.textContent = subtitle;
40
+ subtitleEl.hidden = !subtitle;
41
+ }
42
+ if (descriptionEl) {
43
+ descriptionEl.textContent = description;
44
+ descriptionEl.hidden = !description;
45
+ }
46
+ }
47
+
48
+ export { applySectionBlockHeader };
@@ -1 +1,52 @@
1
- function confirm(e){if(!function isBrowser(){return"undefined"!=typeof document}())return Promise.resolve(!1);const{message:t,title:n,confirmText:i,cancelText:r,confirmVariant:s,variant:o,size:c,showIcon:a,initialFocus:u,closeOnEscape:m,closeOnBackdrop:b}=e,d=document.createElement("db-confirm");return d.setAttribute("message",t),n&&d.setAttribute("title",n),i&&d.setAttribute("confirm-text",i),r&&d.setAttribute("cancel-text",r),s&&d.setAttribute("confirm-variant",s),o&&d.setAttribute("variant",o),c&&d.setAttribute("size",c),!1===a&&d.setAttribute("show-icon","false"),u&&d.setAttribute("initial-focus",u),!1===m&&d.setAttribute("close-on-escape","false"),!1===b&&d.setAttribute("close-on-backdrop","false"),document.body.appendChild(d),new Promise(e=>{let t=!1;const finish=n=>{t||(t=!0,d.removeEventListener("db-confirm",onConfirm),d.removeEventListener("db-cancel",onCancel),d.remove(),e(n))},onConfirm=()=>finish(!0),onCancel=()=>finish(!1);d.addEventListener("db-confirm",onConfirm),d.addEventListener("db-cancel",onCancel),d.setAttribute("open","true")})}export{confirm};
1
+ function isBrowser() {
2
+ return typeof document !== 'undefined';
3
+ }
4
+ /** 확인 대화상자를 띄우고, 확인 시 true / 취소(ESC·배경 포함) 시 false 로 resolve 합니다. */
5
+ function confirm(options) {
6
+ if (!isBrowser())
7
+ return Promise.resolve(false);
8
+ const { message, title, confirmText, cancelText, confirmVariant, variant, size, showIcon, initialFocus, closeOnEscape, closeOnBackdrop, } = options;
9
+ const el = document.createElement('db-confirm');
10
+ el.setAttribute('message', message);
11
+ if (title)
12
+ el.setAttribute('title', title);
13
+ if (confirmText)
14
+ el.setAttribute('confirm-text', confirmText);
15
+ if (cancelText)
16
+ el.setAttribute('cancel-text', cancelText);
17
+ if (confirmVariant)
18
+ el.setAttribute('confirm-variant', confirmVariant);
19
+ if (variant)
20
+ el.setAttribute('variant', variant);
21
+ if (size)
22
+ el.setAttribute('size', size);
23
+ if (showIcon === false)
24
+ el.setAttribute('show-icon', 'false');
25
+ if (initialFocus)
26
+ el.setAttribute('initial-focus', initialFocus);
27
+ if (closeOnEscape === false)
28
+ el.setAttribute('close-on-escape', 'false');
29
+ if (closeOnBackdrop === false)
30
+ el.setAttribute('close-on-backdrop', 'false');
31
+ // 닫힌 상태(open=false)로 먼저 연결한 뒤 open 을 켜서 오버레이를 표시한다.
32
+ document.body.appendChild(el);
33
+ return new Promise((resolve) => {
34
+ let settled = false;
35
+ const finish = (result) => {
36
+ if (settled)
37
+ return;
38
+ settled = true;
39
+ el.removeEventListener('db-confirm', onConfirm);
40
+ el.removeEventListener('db-cancel', onCancel);
41
+ el.remove();
42
+ resolve(result);
43
+ };
44
+ const onConfirm = () => finish(true);
45
+ const onCancel = () => finish(false);
46
+ el.addEventListener('db-confirm', onConfirm);
47
+ el.addEventListener('db-cancel', onCancel);
48
+ el.setAttribute('open', 'true');
49
+ });
50
+ }
51
+
52
+ export { confirm };