@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.
Files changed (202) hide show
  1. package/dist/chunks/lottie-0e23d630.js +1 -0
  2. package/dist/esm/components/animation-background/canvas-controller.js +1 -121
  3. package/dist/esm/components/animation-background/controls.js +1 -180
  4. package/dist/esm/components/animation-background/graphite-controller.js +1 -196
  5. package/dist/esm/components/animation-background/graphite-presets.js +1 -42
  6. package/dist/esm/components/animation-background/graphite-shader.js +1 -111
  7. package/dist/esm/components/animation-background/layers.js +1 -369
  8. package/dist/esm/components/animation-background/lumina-presets.js +1 -53
  9. package/dist/esm/components/animation-background/lumina-shaders.js +1 -181
  10. package/dist/esm/components/animation-background/lumina-utils.js +1 -60
  11. package/dist/esm/components/animation-background/particle-defaults.js +1 -36
  12. package/dist/esm/components/animation-background/renderers.js +1 -167
  13. package/dist/esm/components/animation-background/shader-controller.js +1 -154
  14. package/dist/esm/components/color-picker-utils.js +1 -134
  15. package/dist/esm/components/date-picker-utils.js +1 -140
  16. package/dist/esm/components/db-accordion.js +1 -304
  17. package/dist/esm/components/db-ad-banner.js +1 -455
  18. package/dist/esm/components/db-ai-chat-list.d.ts +43 -0
  19. package/dist/esm/components/db-ai-chat-list.js +1 -0
  20. package/dist/esm/components/db-ai-chat.d.ts +159 -0
  21. package/dist/esm/components/db-ai-chat.js +1 -0
  22. package/dist/esm/components/db-alert.js +1 -149
  23. package/dist/esm/components/db-animation-background.js +1 -486
  24. package/dist/esm/components/db-animation-text.js +1 -601
  25. package/dist/esm/components/db-app-badge.js +1 -88
  26. package/dist/esm/components/db-audio-player.js +1 -752
  27. package/dist/esm/components/db-avatar.js +1 -188
  28. package/dist/esm/components/db-backdrop.js +1 -139
  29. package/dist/esm/components/db-badge.js +1 -91
  30. package/dist/esm/components/db-banner.js +1 -188
  31. package/dist/esm/components/db-bottom-navigation.js +1 -146
  32. package/dist/esm/components/db-bottom-sheet.js +1 -481
  33. package/dist/esm/components/db-breadcrumbs.js +1 -329
  34. package/dist/esm/components/db-button.js +1 -316
  35. package/dist/esm/components/db-calendar.js +1 -675
  36. package/dist/esm/components/db-card.js +1 -265
  37. package/dist/esm/components/db-carousel.js +1 -264
  38. package/dist/esm/components/db-chat-composer.d.ts +134 -0
  39. package/dist/esm/components/db-chat-composer.js +1 -0
  40. package/dist/esm/components/db-chat-list.d.ts +47 -0
  41. package/dist/esm/components/db-chat-list.js +1 -0
  42. package/dist/esm/components/db-chat-message.d.ts +39 -0
  43. package/dist/esm/components/db-chat-message.js +1 -0
  44. package/dist/esm/components/db-chat-orb.d.ts +99 -0
  45. package/dist/esm/components/db-chat-orb.js +1 -0
  46. package/dist/esm/components/db-chat-room.d.ts +71 -0
  47. package/dist/esm/components/db-chat-room.js +1 -0
  48. package/dist/esm/components/db-chat-suggestions.d.ts +44 -0
  49. package/dist/esm/components/db-chat-suggestions.js +1 -0
  50. package/dist/esm/components/db-chat-typing.d.ts +22 -0
  51. package/dist/esm/components/db-chat-typing.js +1 -0
  52. package/dist/esm/components/db-chat-welcome.d.ts +32 -0
  53. package/dist/esm/components/db-chat-welcome.js +1 -0
  54. package/dist/esm/components/db-chat-widget.d.ts +146 -0
  55. package/dist/esm/components/db-chat-widget.js +1 -0
  56. package/dist/esm/components/db-checkbox.js +1 -202
  57. package/dist/esm/components/db-chip.js +1 -104
  58. package/dist/esm/components/db-code-block.js +1 -304
  59. package/dist/esm/components/db-color-picker.js +1 -746
  60. package/dist/esm/components/db-confirm.js +1 -191
  61. package/dist/esm/components/db-container.js +1 -39
  62. package/dist/esm/components/db-context-menu.js +1 -265
  63. package/dist/esm/components/db-countdown.js +1 -146
  64. package/dist/esm/components/db-cursor-follower.js +1 -173
  65. package/dist/esm/components/db-date-picker.js +1 -837
  66. package/dist/esm/components/db-divider.js +1 -66
  67. package/dist/esm/components/db-download-progress.d.ts +89 -0
  68. package/dist/esm/components/db-download-progress.js +1 -0
  69. package/dist/esm/components/db-drawer.js +1 -245
  70. package/dist/esm/components/db-dropdown.js +1 -493
  71. package/dist/esm/components/db-dropzone.js +1 -266
  72. package/dist/esm/components/db-email-verify.d.ts +62 -0
  73. package/dist/esm/components/db-email-verify.js +1 -0
  74. package/dist/esm/components/db-empty-state.js +1 -97
  75. package/dist/esm/components/db-file-uploader.js +1 -256
  76. package/dist/esm/components/db-floating-action-button.js +1 -139
  77. package/dist/esm/components/db-footer.js +1 -385
  78. package/dist/esm/components/db-form.js +1 -566
  79. package/dist/esm/components/db-gantt.js +1 -882
  80. package/dist/esm/components/db-gradient.js +1 -133
  81. package/dist/esm/components/db-grid-background.js +1 -909
  82. package/dist/esm/components/db-grid.js +1 -73
  83. package/dist/esm/components/db-icons.d.ts +3 -0
  84. package/dist/esm/components/db-icons.js +1 -82
  85. package/dist/esm/components/db-image-list.js +1 -214
  86. package/dist/esm/components/db-image-placeholder.js +1 -96
  87. package/dist/esm/components/db-image.js +1 -289
  88. package/dist/esm/components/db-indicator.js +1 -517
  89. package/dist/esm/components/db-input.js +1 -420
  90. package/dist/esm/components/db-kanban.js +1 -538
  91. package/dist/esm/components/db-label.js +1 -66
  92. package/dist/esm/components/db-lightbox.js +1 -372
  93. package/dist/esm/components/db-list.js +1 -340
  94. package/dist/esm/components/db-logo-svg.js +1 -72
  95. package/dist/esm/components/db-logo.js +1 -106
  96. package/dist/esm/components/db-lottie.js +1 -109
  97. package/dist/esm/components/db-markdown-editor.js +1 -458
  98. package/dist/esm/components/db-marquee.js +1 -402
  99. package/dist/esm/components/db-masonry.js +1 -94
  100. package/dist/esm/components/db-menu-item.js +1 -211
  101. package/dist/esm/components/db-modal.js +1 -522
  102. package/dist/esm/components/db-navbar.js +1 -680
  103. package/dist/esm/components/db-onboarding-modal.js +1 -322
  104. package/dist/esm/components/db-otp-input.d.ts +53 -0
  105. package/dist/esm/components/db-otp-input.js +1 -0
  106. package/dist/esm/components/db-page-header.js +1 -312
  107. package/dist/esm/components/db-pagination.js +1 -271
  108. package/dist/esm/components/db-phone-verify.d.ts +61 -0
  109. package/dist/esm/components/db-phone-verify.js +1 -0
  110. package/dist/esm/components/db-popover.js +1 -580
  111. package/dist/esm/components/db-progress-step.js +1 -166
  112. package/dist/esm/components/db-progress.js +1 -171
  113. package/dist/esm/components/db-progressbar.js +1 -72
  114. package/dist/esm/components/db-radio.js +1 -172
  115. package/dist/esm/components/db-random-gradient.js +1 -121
  116. package/dist/esm/components/db-range-slider.js +1 -811
  117. package/dist/esm/components/db-rating.js +1 -325
  118. package/dist/esm/components/db-reorder.js +1 -286
  119. package/dist/esm/components/db-resizable-panels.js +1 -282
  120. package/dist/esm/components/db-scroll-area.js +1 -126
  121. package/dist/esm/components/db-search-bar.js +1 -668
  122. package/dist/esm/components/db-section-app-download.js +1 -101
  123. package/dist/esm/components/db-section-contact.js +1 -102
  124. package/dist/esm/components/db-section-cta.js +1 -150
  125. package/dist/esm/components/db-section-faq.js +1 -120
  126. package/dist/esm/components/db-section-feature-grid.js +1 -137
  127. package/dist/esm/components/db-section-feature.js +1 -179
  128. package/dist/esm/components/db-section-hero.js +1 -243
  129. package/dist/esm/components/db-section-logo-cloud.js +1 -138
  130. package/dist/esm/components/db-section-pricing.js +1 -166
  131. package/dist/esm/components/db-section-stats.js +1 -129
  132. package/dist/esm/components/db-section-testimonials.js +1 -252
  133. package/dist/esm/components/db-section.js +1 -385
  134. package/dist/esm/components/db-segment-control.js +1 -231
  135. package/dist/esm/components/db-select.js +1 -571
  136. package/dist/esm/components/db-share-icons.js +1 -40
  137. package/dist/esm/components/db-share.js +1 -489
  138. package/dist/esm/components/db-sidebar.js +1 -1068
  139. package/dist/esm/components/db-skeleton.js +1 -94
  140. package/dist/esm/components/db-spinner.js +1 -102
  141. package/dist/esm/components/db-split-view.js +1 -297
  142. package/dist/esm/components/db-stack.js +1 -46
  143. package/dist/esm/components/db-stat.js +1 -218
  144. package/dist/esm/components/db-stepper.js +1 -398
  145. package/dist/esm/components/db-table.js +1 -412
  146. package/dist/esm/components/db-tabs.js +1 -335
  147. package/dist/esm/components/db-testimonial.d.ts +2 -0
  148. package/dist/esm/components/db-testimonial.js +1 -162
  149. package/dist/esm/components/db-textarea.js +1 -233
  150. package/dist/esm/components/db-time-picker.js +1 -523
  151. package/dist/esm/components/db-timeline.js +1 -174
  152. package/dist/esm/components/db-toast.js +1 -158
  153. package/dist/esm/components/db-toggle.js +1 -162
  154. package/dist/esm/components/db-toolbar.js +1 -94
  155. package/dist/esm/components/db-tooltip.js +1 -440
  156. package/dist/esm/components/db-top-banner.js +1 -121
  157. package/dist/esm/components/db-tutorial.js +1 -324
  158. package/dist/esm/components/db-two-factor.d.ts +60 -0
  159. package/dist/esm/components/db-two-factor.js +1 -0
  160. package/dist/esm/components/db-video-player.js +1 -503
  161. package/dist/esm/components/db-youtube-player.js +1 -194
  162. package/dist/esm/components/highlight-code.js +1 -65
  163. package/dist/esm/components/input-validation.js +1 -50
  164. package/dist/esm/components/marketing-block-host-utils.js +1 -9
  165. package/dist/esm/components/number-scrub.js +1 -117
  166. package/dist/esm/components/random-gradient-palettes.js +1 -67
  167. package/dist/esm/components/section-block-header-utils.js +1 -48
  168. package/dist/esm/helpers/confirm.js +1 -52
  169. package/dist/esm/helpers/toast.js +1 -73
  170. package/dist/esm/index.d.ts +16 -0
  171. package/dist/esm/index.js +1 -111
  172. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-bash.js +1 -0
  173. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-clike.js +1 -0
  174. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-css.js +1 -0
  175. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-javascript.js +1 -0
  176. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-json.js +1 -0
  177. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-jsx.js +1 -0
  178. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markup.js +1 -0
  179. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-scss.js +1 -0
  180. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-tsx.js +1 -0
  181. package/dist/esm/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-typescript.js +1 -0
  182. package/dist/index.cjs +1 -55414
  183. package/dist/index.css +1 -1
  184. package/dist/index.d.ts +1091 -2
  185. package/dist/index.esm.js +1 -38284
  186. package/dist/react/chunks/lottie-14e7addb.js +1 -0
  187. package/dist/react/index.cjs +1 -56503
  188. package/dist/react/index.d.ts +1620 -54
  189. package/dist/react/index.esm.js +1 -39373
  190. package/package.json +1 -1
  191. package/dist/chunks/lottie-e273b936.js +0 -17032
  192. package/dist/esm/node_modules/prismjs/components/prism-bash.js +0 -235
  193. package/dist/esm/node_modules/prismjs/components/prism-clike.js +0 -31
  194. package/dist/esm/node_modules/prismjs/components/prism-css.js +0 -64
  195. package/dist/esm/node_modules/prismjs/components/prism-javascript.js +0 -172
  196. package/dist/esm/node_modules/prismjs/components/prism-json.js +0 -27
  197. package/dist/esm/node_modules/prismjs/components/prism-jsx.js +0 -143
  198. package/dist/esm/node_modules/prismjs/components/prism-markup.js +0 -186
  199. package/dist/esm/node_modules/prismjs/components/prism-scss.js +0 -81
  200. package/dist/esm/node_modules/prismjs/components/prism-tsx.js +0 -15
  201. package/dist/esm/node_modules/prismjs/components/prism-typescript.js +0 -60
  202. package/dist/react/chunks/lottie-72a4c6d4.js +0 -17032
package/dist/index.d.ts CHANGED
@@ -3405,6 +3405,8 @@ declare class DbTestimonial extends HTMLElement {
3405
3405
  private built;
3406
3406
  private innerEl?;
3407
3407
  private quoteEl?;
3408
+ private backgroundEl?;
3409
+ private logoEl?;
3408
3410
  private footerEl?;
3409
3411
  private extraEl?;
3410
3412
  private avatarWrapEl?;
@@ -4181,6 +4183,1093 @@ declare global {
4181
4183
  }
4182
4184
  }
4183
4185
 
4186
+ declare const STATUSES: readonly ["downloading", "paused", "error", "complete"];
4187
+ type DownloadStatus = (typeof STATUSES)[number];
4188
+ declare const POSITIONS$1: readonly ["bottom-right", "bottom-left", "bottom-center", "top-right", "top-left", "top-center"];
4189
+ type DownloadPosition = (typeof POSITIONS$1)[number];
4190
+ /**
4191
+ * 우측 하단(기본)에 떠 있는 다운로드 진행률 위젯.
4192
+ *
4193
+ * 진행 바는 `<db-progressbar>`, 액션 버튼은 `<db-button>` 을 그대로 재사용합니다.
4194
+ * 같은 위치에 여러 개가 뜨면 `stack-mode`에 따라 위로 쌓이거나(deck) 세로로 쌓입니다.
4195
+ *
4196
+ * @example
4197
+ * const dl = document.createElement('db-download-progress');
4198
+ * dl.setAttribute('file-name', 'ui-kit-icons.figma');
4199
+ * dl.setAttribute('value', '43');
4200
+ * dl.setAttribute('auto-remove', '');
4201
+ * document.body.appendChild(dl);
4202
+ * dl.setProgress(80);
4203
+ * dl.setStatus('complete');
4204
+ */
4205
+ declare class DbDownloadProgress extends HTMLElement {
4206
+ static get observedAttributes(): string[];
4207
+ private built;
4208
+ private renderedStatus;
4209
+ private closeTimerId;
4210
+ private resizeObserver;
4211
+ private registeredPosition;
4212
+ closed: boolean;
4213
+ private iconEl;
4214
+ private labelEl;
4215
+ private fileEl;
4216
+ private subtitleEl;
4217
+ private inlinePercentEl;
4218
+ private percentEl;
4219
+ private remainingEl;
4220
+ private metaDotEl;
4221
+ private toggleBtn;
4222
+ private closeBtn;
4223
+ private actionsEl;
4224
+ private mainRow;
4225
+ private bodyBar;
4226
+ private edgeBar;
4227
+ get value(): number;
4228
+ set value(v: number);
4229
+ get max(): number;
4230
+ set max(v: number);
4231
+ get status(): DownloadStatus;
4232
+ set status(v: DownloadStatus);
4233
+ get fileName(): string;
4234
+ set fileName(v: string);
4235
+ get position(): DownloadPosition;
4236
+ set position(v: DownloadPosition);
4237
+ get minimized(): boolean;
4238
+ set minimized(v: boolean);
4239
+ /** `stack` = 세로로 위로 쌓기(기본), `deck` = 스케일·z-index 카드 덱 */
4240
+ get stackMode(): 'stack' | 'deck';
4241
+ set stackMode(v: 'stack' | 'deck');
4242
+ connectedCallback(): void;
4243
+ disconnectedCallback(): void;
4244
+ attributeChangedCallback(name: string): void;
4245
+ private registerStack;
4246
+ private unregisterStack;
4247
+ private build;
4248
+ private sync;
4249
+ private renderActions;
4250
+ private handleMainClick;
4251
+ private handleToggleClick;
4252
+ private handleCloseClick;
4253
+ minimize(): void;
4254
+ expand(): void;
4255
+ toggle(): void;
4256
+ setProgress(value: number): void;
4257
+ setStatus(status: DownloadStatus): void;
4258
+ /**
4259
+ * 닫기(슬라이드 아웃).
4260
+ * React 등 호스트가 DOM을 소유할 때는 `auto-remove` 없이 `db-close`만 받고 언마운트하세요.
4261
+ * body에 직접 append한 경우 `auto-remove`를 주면 DOM에서 제거됩니다.
4262
+ */
4263
+ close(): void;
4264
+ }
4265
+ declare global {
4266
+ interface HTMLElementTagNameMap {
4267
+ 'db-download-progress': DbDownloadProgress;
4268
+ }
4269
+ }
4270
+
4271
+ /**
4272
+ * ui-wc — db-otp-input (수동 작성, 자동 동기화 대상 아님)
4273
+ *
4274
+ * 분할 자릿수 OTP/PIN 입력. 붙여넣기·화살표·백스페이스를 지원합니다.
4275
+ */
4276
+ declare const SIZES$4: readonly ["s", "m", "l"];
4277
+ type OtpSize = (typeof SIZES$4)[number];
4278
+ declare class DbOtpInput extends HTMLElement {
4279
+ static formAssociated: boolean;
4280
+ static get observedAttributes(): string[];
4281
+ private internals;
4282
+ private built;
4283
+ private digits;
4284
+ private errorEl?;
4285
+ private suppressSync;
4286
+ private initialValue;
4287
+ private lastCompleteValue;
4288
+ get length(): number;
4289
+ set length(v: number);
4290
+ get value(): string;
4291
+ set value(v: string);
4292
+ get size(): OtpSize;
4293
+ set size(v: OtpSize);
4294
+ get disabled(): boolean;
4295
+ set disabled(v: boolean);
4296
+ get readOnly(): boolean;
4297
+ set readOnly(v: boolean);
4298
+ connectedCallback(): void;
4299
+ attributeChangedCallback(name: string): void;
4300
+ focus(): void;
4301
+ clear(): void;
4302
+ formResetCallback(): void;
4303
+ formDisabledCallback(disabled: boolean): void;
4304
+ private build;
4305
+ private sync;
4306
+ private emit;
4307
+ private setValueAttribute;
4308
+ private syncFormValue;
4309
+ private focusFirstEmpty;
4310
+ private focusAt;
4311
+ private applyValue;
4312
+ private onDigitFocus;
4313
+ private onDigitInput;
4314
+ private onDigitKeydown;
4315
+ private onPaste;
4316
+ }
4317
+ declare global {
4318
+ interface HTMLElementTagNameMap {
4319
+ 'db-otp-input': DbOtpInput;
4320
+ }
4321
+ }
4322
+
4323
+ /**
4324
+ * ui-wc — db-phone-verify (수동 작성, 자동 동기화 대상 아님)
4325
+ *
4326
+ * 한국형 휴대폰 본인인증: 통신사 → 번호 → 인증번호 발송 → OTP + 타이머/재전송.
4327
+ */
4328
+
4329
+ declare const SIZES$3: readonly ["s", "m", "l"];
4330
+ type Size$2 = (typeof SIZES$3)[number];
4331
+ declare class DbPhoneVerify extends HTMLElement {
4332
+ static get observedAttributes(): string[];
4333
+ private built;
4334
+ private timerId;
4335
+ private remaining;
4336
+ private carrierSelect;
4337
+ private phoneInput;
4338
+ private sendBtn;
4339
+ private otpInput;
4340
+ private timerEl;
4341
+ private resendBtn;
4342
+ private verifyBtn;
4343
+ private codeBlock;
4344
+ private errorEl;
4345
+ get size(): Size$2;
4346
+ get step(): 'phone' | 'code' | 'verified';
4347
+ set step(v: 'phone' | 'code' | 'verified');
4348
+ get phone(): string;
4349
+ set phone(v: string);
4350
+ get carrier(): string;
4351
+ set carrier(v: string);
4352
+ get code(): string;
4353
+ set code(v: string);
4354
+ get countdown(): number;
4355
+ connectedCallback(): void;
4356
+ disconnectedCallback(): void;
4357
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
4358
+ /** 인증번호 발송 단계로 전환하고 타이머를 시작합니다. */
4359
+ startCodeStep(): void;
4360
+ /** 수동 제어 모드에서 재전송 성공 후 카운트다운을 다시 시작합니다. */
4361
+ restartCountdown(): void;
4362
+ /** 인증 완료 상태로 전환합니다. */
4363
+ markVerified(): void;
4364
+ private clearTimer;
4365
+ private startTimer;
4366
+ private renderTimer;
4367
+ private build;
4368
+ private sync;
4369
+ private isPhoneValid;
4370
+ private requestVerify;
4371
+ }
4372
+ declare global {
4373
+ interface HTMLElementTagNameMap {
4374
+ 'db-phone-verify': DbPhoneVerify;
4375
+ }
4376
+ }
4377
+
4378
+ /**
4379
+ * ui-wc — db-email-verify (수동 작성, 자동 동기화 대상 아님)
4380
+ *
4381
+ * 이메일 인증: code(OTP) 모드 / confirm(메일함 확인) 모드.
4382
+ */
4383
+
4384
+ declare const SIZES$2: readonly ["s", "m", "l"];
4385
+ type Size$1 = (typeof SIZES$2)[number];
4386
+ declare class DbEmailVerify extends HTMLElement {
4387
+ static get observedAttributes(): string[];
4388
+ private built;
4389
+ private timerId;
4390
+ private remaining;
4391
+ private emailInput;
4392
+ private sendBtn;
4393
+ private otpInput;
4394
+ private timerEl;
4395
+ private resendBtn;
4396
+ private verifyBtn;
4397
+ private confirmBtn;
4398
+ private codeBlock;
4399
+ private confirmBlock;
4400
+ private verifiedBlock;
4401
+ private emailRow;
4402
+ private errorEl;
4403
+ private closeBtn?;
4404
+ get mode(): 'code' | 'confirm';
4405
+ set mode(v: 'code' | 'confirm');
4406
+ get size(): Size$1;
4407
+ get step(): 'email' | 'code' | 'sent' | 'verified';
4408
+ set step(v: 'email' | 'code' | 'sent' | 'verified');
4409
+ get email(): string;
4410
+ set email(v: string);
4411
+ get countdown(): number;
4412
+ connectedCallback(): void;
4413
+ disconnectedCallback(): void;
4414
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
4415
+ startCodeStep(): void;
4416
+ /** 수동 제어 모드에서 재전송 성공 후 카운트다운을 다시 시작합니다. */
4417
+ restartCountdown(): void;
4418
+ markSent(): void;
4419
+ markVerified(): void;
4420
+ private clearTimer;
4421
+ private startTimer;
4422
+ private renderTimer;
4423
+ private build;
4424
+ private sync;
4425
+ private isEmailValid;
4426
+ private requestVerify;
4427
+ private setEmphasizedText;
4428
+ }
4429
+ declare global {
4430
+ interface HTMLElementTagNameMap {
4431
+ 'db-email-verify': DbEmailVerify;
4432
+ }
4433
+ }
4434
+
4435
+ /**
4436
+ * ui-wc — db-two-factor (수동 작성, 자동 동기화 대상 아님)
4437
+ *
4438
+ * 2단계 인증(2FA): 인증앱 / SMS / 이메일 방식 + OTP.
4439
+ */
4440
+
4441
+ declare const METHODS: readonly [{
4442
+ readonly value: "app";
4443
+ readonly label: "인증 앱";
4444
+ }, {
4445
+ readonly value: "sms";
4446
+ readonly label: "SMS";
4447
+ }, {
4448
+ readonly value: "email";
4449
+ readonly label: "이메일";
4450
+ }];
4451
+ declare const SIZES$1: readonly ["s", "m", "l"];
4452
+ type Size = (typeof SIZES$1)[number];
4453
+ type Method = (typeof METHODS)[number]['value'];
4454
+ declare class DbTwoFactor extends HTMLElement {
4455
+ static get observedAttributes(): string[];
4456
+ private built;
4457
+ private timerId;
4458
+ private remaining;
4459
+ private segment;
4460
+ private otpInput;
4461
+ private hintEl;
4462
+ private timerEl;
4463
+ private resendBtn;
4464
+ private verifyBtn;
4465
+ private backupBtn;
4466
+ private errorEl;
4467
+ private channelActions;
4468
+ get method(): Method;
4469
+ set method(v: Method);
4470
+ get size(): Size;
4471
+ get countdown(): number;
4472
+ connectedCallback(): void;
4473
+ disconnectedCallback(): void;
4474
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
4475
+ /** 수동 제어 모드에서 코드 발송 성공 후 카운트다운을 시작합니다. */
4476
+ restartCountdown(): void;
4477
+ private clearTimer;
4478
+ private startTimer;
4479
+ private renderTimer;
4480
+ private build;
4481
+ private sync;
4482
+ private requestVerify;
4483
+ }
4484
+ declare global {
4485
+ interface HTMLElementTagNameMap {
4486
+ 'db-two-factor': DbTwoFactor;
4487
+ }
4488
+ }
4489
+
4490
+ declare const SIZES: readonly ["xs", "s", "m", "l", "xl"];
4491
+ declare const VARIANTS: readonly ["aurora", "ocean", "emerald", "violet", "mono"];
4492
+ declare const STATES: readonly ["idle", "thinking", "listening"];
4493
+ declare const THEMES: readonly ["auto", "light", "dark"];
4494
+ type OrbSize = (typeof SIZES)[number];
4495
+ type OrbVariant = (typeof VARIANTS)[number];
4496
+ type OrbState = (typeof STATES)[number];
4497
+ type OrbTheme = (typeof THEMES)[number];
4498
+ /**
4499
+ * AI 어시스턴트를 상징하는 캔버스 기반 애니메이션 오브(구체).
4500
+ * 광택 있는 3D 구체 위에 유체처럼 흐르는 내부 광원 + 프레넬 림 라이트 + 스페큘러 하이라이트로
4501
+ * 고품질 오브를 렌더링합니다. `state` 에 따라 모양(진폭·난류)·색(밝기)·인터랙션(리플)이 바뀌며,
4502
+ * 포인터를 올리면 하이라이트와 내부 광원이 살짝 따라옵니다. 순수 장식이라 `aria-hidden` 입니다.
4503
+ *
4504
+ * @example
4505
+ * <db-chat-orb variant="aurora" state="thinking"></db-chat-orb>
4506
+ *
4507
+ * @example
4508
+ * const orb = document.querySelector('db-chat-orb');
4509
+ * orb.state = 'listening';
4510
+ * orb.minScale = 0.86;
4511
+ * orb.maxScale = 1.2;
4512
+ * orb.audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
4513
+ */
4514
+ declare class DbChatOrb extends HTMLElement {
4515
+ static get observedAttributes(): string[];
4516
+ private canvas;
4517
+ private ctx;
4518
+ private dpr;
4519
+ private cssW;
4520
+ private cssH;
4521
+ private t0;
4522
+ private lastFrame;
4523
+ private resizeObs;
4524
+ private io;
4525
+ private themeObserver;
4526
+ private themeMedia;
4527
+ private visible;
4528
+ private hover;
4529
+ private ripples;
4530
+ private lastAutoRipple;
4531
+ private lastVoiceRipple;
4532
+ private previousVoiceLevel;
4533
+ private displayedVoiceLevel;
4534
+ private inputStream;
4535
+ private audioContext;
4536
+ private audioSource;
4537
+ private analyser;
4538
+ private analyserData;
4539
+ get size(): OrbSize;
4540
+ set size(v: OrbSize);
4541
+ get variant(): OrbVariant;
4542
+ set variant(v: OrbVariant);
4543
+ get state(): OrbState;
4544
+ set state(v: OrbState);
4545
+ get theme(): OrbTheme;
4546
+ set theme(v: OrbTheme);
4547
+ /** 외부 오디오 분석기가 전달하는 정규화 음성 레벨(0–1). */
4548
+ get voiceLevel(): number;
4549
+ set voiceLevel(v: number);
4550
+ /** listening 무음 구간의 최소 구체 배율. */
4551
+ get minScale(): number;
4552
+ set minScale(v: number);
4553
+ /** listening 최대 음량 구간의 최대 구체 배율. */
4554
+ get maxScale(): number;
4555
+ set maxScale(v: number);
4556
+ /**
4557
+ * 실제 마이크/통화 MediaStream. 내부 AnalyserNode로 RMS를 계산하며 오디오를 재생하거나
4558
+ * 전달받은 트랙을 stop()하지 않습니다. null을 할당하면 분석만 해제합니다.
4559
+ */
4560
+ get audioStream(): MediaStream | null;
4561
+ set audioStream(stream: MediaStream | null);
4562
+ connectedCallback(): void;
4563
+ disconnectedCallback(): void;
4564
+ attributeChangedCallback(name: string): void;
4565
+ private setVisible;
4566
+ private syncClasses;
4567
+ private build;
4568
+ private onPointerMove;
4569
+ private onPointerLeave;
4570
+ private onPointerDown;
4571
+ private addRipple;
4572
+ private observeTheme;
4573
+ private onThemeChange;
4574
+ private isDarkContext;
4575
+ private startAudioAnalysis;
4576
+ private stopAudioAnalysis;
4577
+ private sampleVoiceLevel;
4578
+ private resize;
4579
+ /** 공유 틱커가 호출 — 한 프레임 렌더 */
4580
+ frame(now: number): void;
4581
+ }
4582
+ declare global {
4583
+ interface HTMLElementTagNameMap {
4584
+ 'db-chat-orb': DbChatOrb;
4585
+ }
4586
+ }
4587
+
4588
+ /**
4589
+ * 채팅 시작 전 화면의 히어로 블록.
4590
+ * 오브(또는 로고 이미지) + 인사말 + 타이틀 + 서브타이틀을 렌더링합니다.
4591
+ * 타이틀의 `highlight` 부분은 그라디언트로 강조됩니다.
4592
+ *
4593
+ * 컴포저(`db-chat-composer`)와 추천(`db-chat-suggestions`)은 형제 요소로 배치합니다.
4594
+ *
4595
+ * @example
4596
+ * <db-chat-welcome
4597
+ * greeting="안녕하세요"
4598
+ * title="오늘은 무엇을 도와드릴까요?"
4599
+ * highlight="도와드릴까요"
4600
+ * orb-variant="aurora">
4601
+ * </db-chat-welcome>
4602
+ */
4603
+ declare class DbChatWelcome extends HTMLElement {
4604
+ static get observedAttributes(): string[];
4605
+ connectedCallback(): void;
4606
+ attributeChangedCallback(): void;
4607
+ private render;
4608
+ /** 타이틀에서 highlight 구간만 그라디언트 span 으로 감싼다. */
4609
+ private appendTitle;
4610
+ }
4611
+ declare global {
4612
+ interface HTMLElementTagNameMap {
4613
+ 'db-chat-welcome': DbChatWelcome;
4614
+ }
4615
+ }
4616
+
4617
+ type DbIconName = 'arrow-bar-left' | 'arrow-bar-right' | 'award' | 'apple' | 'play-store' | 'arrow-right' | 'star' | 'star-filled' | 'star-half' | 'trending-up' | 'cart' | 'bell-active' | 'caret-down-filled' | 'caret-updown-filled' | 'chevron-down' | 'chevron-up' | 'chevron-left' | 'chevron-right' | 'calendar' | 'camera' | 'clock' | 'bulb' | 'circle-checked' | 'cloud-close' | 'close' | 'done' | 'documentation' | 'doughnut-chart' | 'download' | 'error-filled' | 'edit' | 'eyedropper' | 'file-new' | 'folder-open' | 'gallery' | 'globe' | 'hide' | 'info-filled' | 'lock' | 'mail' | 'microphone' | 'minus' | 'moon' | 'more-vertical' | 'paperclip' | 'pause' | 'play' | 'plus' | 'copy' | 'code' | 'write' | 'upload' | 'video' | 'volume-up' | 'mute-filled' | 'package' | 'delivery-filled' | 'repeat' | 'settings' | 'refresh' | 'expand' | 'shrink' | 'grip-vertical' | 'grip-horizontal' | 'search' | 'send' | 'share-alt' | 'show' | 'sparkle' | 'stop' | 'sun' | 'thumb-down' | 'thumb-up' | 'trash' | 'user' | 'warning-filled';
4618
+
4619
+ interface DbChatTool {
4620
+ /** 고유 id (이벤트 detail 로 전달) */
4621
+ id: string;
4622
+ /** 표시 라벨 */
4623
+ label: string;
4624
+ /** 시작 아이콘 (DbIconName) */
4625
+ icon?: DbIconName;
4626
+ /** 활성 여부 */
4627
+ active?: boolean;
4628
+ }
4629
+ interface DbChatAttachOption {
4630
+ /** 고유 id (예: 'image', 'file', 'camera') */
4631
+ id: string;
4632
+ /** 표시 라벨 */
4633
+ label: string;
4634
+ /** 메뉴 아이콘 (DbIconName) */
4635
+ icon?: DbIconName;
4636
+ /** 파일 선택 시 accept 값. 지정하면 파일 선택창을 엽니다. 없으면 db-attach 이벤트만 발행 */
4637
+ accept?: string;
4638
+ /** 카메라/캡처 (모바일). 'user' | 'environment' */
4639
+ capture?: 'user' | 'environment';
4640
+ /** 다중 선택 허용 */
4641
+ multiple?: boolean;
4642
+ /** 보조 설명 (선택) */
4643
+ description?: string;
4644
+ }
4645
+ interface DbChatAttachment {
4646
+ id: string;
4647
+ name: string;
4648
+ /** 바이트 크기 */
4649
+ size: number;
4650
+ /** MIME 타입 */
4651
+ mime: string;
4652
+ /** 표시 종류 (아이콘 결정) */
4653
+ kind: 'image' | 'video' | 'file';
4654
+ /** 원본 File (파일 선택 시) */
4655
+ file?: File;
4656
+ /** 이미지 미리보기 objectURL */
4657
+ preview?: string;
4658
+ }
4659
+ /**
4660
+ * AI 채팅 입력 컴포저. 채팅 시작 전/중 모두에서 사용합니다.
4661
+ * 자동 높이 textarea + 툴바(첨부·툴 토글·음성·전송)로 구성되며,
4662
+ * 전송 버튼은 `db-button`, 툴 토글·첨부 미리보기는 `db-chip` 을 재사용합니다.
4663
+ *
4664
+ * - 툴 토글: `db-chip` 의 `default`↔`primary` variant 로 선택 상태를 표현합니다.
4665
+ * - 첨부: 첨부 버튼을 누르면 드롭다운이 열려 이미지·동영상·파일·카메라 등
4666
+ * 여러 종류를 선택할 수 있고, 고른 파일은 삭제 가능한 칩으로 미리보기됩니다.
4667
+ * - 전송 중(`streaming`)에는 전송 버튼이 정지 버튼으로 바뀝니다.
4668
+ *
4669
+ * @example
4670
+ * const c = document.querySelector('db-chat-composer');
4671
+ * c.tools = [{ id:'reason', label:'추론', icon:'bulb' }];
4672
+ * c.addEventListener('db-send', (e) => console.log(e.detail.value, e.detail.attachments));
4673
+ */
4674
+ declare class DbChatComposer extends HTMLElement {
4675
+ static get observedAttributes(): string[];
4676
+ private built;
4677
+ private _tools;
4678
+ private _attachOptions;
4679
+ private _attachments;
4680
+ private attachMenuOpen;
4681
+ private field;
4682
+ private attachmentsEl;
4683
+ private toolsEl;
4684
+ private attachWrap;
4685
+ private attachBtn;
4686
+ private attachMenu;
4687
+ private fileInput;
4688
+ private micBtn;
4689
+ private sendBtn;
4690
+ get value(): string;
4691
+ set value(v: string);
4692
+ get streaming(): boolean;
4693
+ set streaming(v: boolean);
4694
+ get disabled(): boolean;
4695
+ set disabled(v: boolean);
4696
+ /** 툴 토글 목록 (JSON 프로퍼티) */
4697
+ get tools(): DbChatTool[];
4698
+ set tools(list: DbChatTool[]);
4699
+ /** 첨부 드롭다운 옵션 목록 */
4700
+ get attachOptions(): DbChatAttachOption[];
4701
+ set attachOptions(list: DbChatAttachOption[]);
4702
+ /** 현재 첨부 목록 (읽기 전용 복사본) */
4703
+ get attachments(): DbChatAttachment[];
4704
+ connectedCallback(): void;
4705
+ disconnectedCallback(): void;
4706
+ attributeChangedCallback(name: string): void;
4707
+ private build;
4708
+ private makeIconButton;
4709
+ private sync;
4710
+ private renderTools;
4711
+ private renderAttachMenu;
4712
+ private renderAttachments;
4713
+ private renderSendButton;
4714
+ private syncSendState;
4715
+ private autoGrow;
4716
+ private handleAttachClick;
4717
+ private openAttachMenu;
4718
+ private closeAttachMenu;
4719
+ private handleOutsideClick;
4720
+ private chooseAttachOption;
4721
+ private handleFilePicked;
4722
+ private addFile;
4723
+ private attachmentMeta;
4724
+ private handleInput;
4725
+ private handleKeyDown;
4726
+ private handleSendClick;
4727
+ private submit;
4728
+ /** 입력 필드를 비웁니다. */
4729
+ clear(): void;
4730
+ /** 첨부를 하나 제거합니다. */
4731
+ removeAttachment(id: string): void;
4732
+ /** 모든 첨부를 제거합니다. */
4733
+ clearAttachments(): void;
4734
+ /** 프로그램적으로 첨부를 추가합니다(파일 또는 메타). */
4735
+ addAttachment(input: File | Omit<DbChatAttachment, 'id' | 'kind'>): void;
4736
+ /** 입력 필드에 포커스합니다. */
4737
+ focusInput(): void;
4738
+ /** 전송 중(정지 버튼) 상태를 설정합니다. */
4739
+ setStreaming(streaming: boolean): void;
4740
+ }
4741
+ declare global {
4742
+ interface HTMLElementTagNameMap {
4743
+ 'db-chat-composer': DbChatComposer;
4744
+ }
4745
+ }
4746
+
4747
+ interface DbChatSuggestion {
4748
+ /** 고유 id */
4749
+ id?: string;
4750
+ /** 제목 (카드/칩 라벨) */
4751
+ title: string;
4752
+ /** 설명 (카드 레이아웃에서만 표시) */
4753
+ description?: string;
4754
+ /** 아이콘 (DbIconName) */
4755
+ icon?: DbIconName;
4756
+ /** 선택 시 전달될 값 (기본값: title) */
4757
+ value?: string;
4758
+ }
4759
+ /**
4760
+ * 채팅 시작 화면의 추천 프롬프트 목록.
4761
+ * `layout="card"` 는 아이콘·제목·설명이 있는 카드 그리드,
4762
+ * `layout="chip"` 은 클릭 가능한 칩(db-chip 재사용) 행으로 렌더링합니다.
4763
+ *
4764
+ * @example
4765
+ * const s = document.querySelector('db-chat-suggestions');
4766
+ * s.items = [{ title:'Write Copy', description:'...', icon:'edit' }];
4767
+ * s.addEventListener('db-select', (e) => console.log(e.detail.value));
4768
+ */
4769
+ declare class DbChatSuggestions extends HTMLElement {
4770
+ static get observedAttributes(): string[];
4771
+ private _items;
4772
+ get items(): DbChatSuggestion[];
4773
+ set items(list: DbChatSuggestion[]);
4774
+ get layout(): string;
4775
+ connectedCallback(): void;
4776
+ attributeChangedCallback(): void;
4777
+ private select;
4778
+ private render;
4779
+ }
4780
+ declare global {
4781
+ interface HTMLElementTagNameMap {
4782
+ 'db-chat-suggestions': DbChatSuggestions;
4783
+ }
4784
+ }
4785
+
4786
+ declare const ROLES: readonly ["user", "assistant", "system"];
4787
+ type Role = (typeof ROLES)[number];
4788
+ /**
4789
+ * 채팅 메시지 한 줄. 본문은 라이트 DOM 자식으로 전달하며 컴포넌트가 감쌉니다.
4790
+ * 아바타는 `db-avatar` 를 재사용합니다.
4791
+ *
4792
+ * @example
4793
+ * <db-chat-message role="assistant" name="Orion" actions="copy,regenerate,like,dislike">
4794
+ * 안녕하세요! 무엇을 도와드릴까요?
4795
+ * </db-chat-message>
4796
+ */
4797
+ declare class DbChatMessage extends HTMLElement {
4798
+ static get observedAttributes(): string[];
4799
+ private built;
4800
+ private contentEl;
4801
+ private avatarWrap;
4802
+ private headerEl;
4803
+ private nameEl;
4804
+ private timeEl;
4805
+ private actionsEl;
4806
+ get role(): Role;
4807
+ set role(v: Role);
4808
+ connectedCallback(): void;
4809
+ attributeChangedCallback(name: string): void;
4810
+ private build;
4811
+ private sync;
4812
+ private renderAvatar;
4813
+ private renderActions;
4814
+ private handleAction;
4815
+ }
4816
+ declare global {
4817
+ interface HTMLElementTagNameMap {
4818
+ 'db-chat-message': DbChatMessage;
4819
+ }
4820
+ }
4821
+
4822
+ /**
4823
+ * AI 응답 대기(생성 중) 표시. 3점 바운스 인디케이터.
4824
+ * 아바타는 `db-avatar` 를 재사용합니다.
4825
+ *
4826
+ * @example
4827
+ * <db-chat-typing name="Orion" label="생각 중…"></db-chat-typing>
4828
+ */
4829
+ declare class DbChatTyping extends HTMLElement {
4830
+ static get observedAttributes(): string[];
4831
+ connectedCallback(): void;
4832
+ attributeChangedCallback(): void;
4833
+ private render;
4834
+ }
4835
+ declare global {
4836
+ interface HTMLElementTagNameMap {
4837
+ 'db-chat-typing': DbChatTyping;
4838
+ }
4839
+ }
4840
+
4841
+ declare const VIEWS: readonly ["home", "messages", "conversation", "help"];
4842
+ type ChatView = (typeof VIEWS)[number];
4843
+ declare const POSITIONS: readonly ["bottom-right", "bottom-left"];
4844
+ type ChatPosition = (typeof POSITIONS)[number];
4845
+ interface DbChatWidgetMessage {
4846
+ id?: string;
4847
+ /** `assistant`(상담원/봇) 또는 `user` */
4848
+ role?: 'assistant' | 'user';
4849
+ text: string;
4850
+ name?: string;
4851
+ time?: string;
4852
+ avatarSrc?: string;
4853
+ avatarInitials?: string;
4854
+ /** 말풍선 액션 (예: 'copy,like,dislike') — db-chat-message 로 전달 */
4855
+ actions?: string;
4856
+ }
4857
+ interface DbChatWidgetConversation {
4858
+ id?: string;
4859
+ name: string;
4860
+ avatarSrc?: string;
4861
+ avatarInitials?: string;
4862
+ preview?: string;
4863
+ time?: string;
4864
+ unread?: number;
4865
+ online?: boolean;
4866
+ }
4867
+ /**
4868
+ * FAB 로 열고 닫는 우측 하단 채팅 상담 위젯(껍데기).
4869
+ *
4870
+ * 홈·메시지·대화·도움말 4개 화면을 하단 탭으로 전환하며, 본문은 AI 채팅 프리미티브
4871
+ * (`db-chat-welcome` · `db-chat-message` · `db-chat-typing` · `db-chat-composer`
4872
+ * · `db-chat-suggestions` · `db-chat-orb`)를 조합해 구성합니다. 실제 백엔드 연동
4873
+ * 없이 UI 골격만 제공하고, 상호작용은 이벤트로 위임합니다.
4874
+ *
4875
+ * @fires db-open - 패널 열림
4876
+ * @fires db-close - 패널 닫힘
4877
+ * @fires db-toggle - FAB 토글 (detail: { open })
4878
+ * @fires db-view-change - 화면 전환 (detail: { view })
4879
+ * @fires db-send - 메시지 전송 (detail: { text })
4880
+ * @fires db-menu-select - 홈 메뉴 선택 (detail: { id, value })
4881
+ * @fires db-quick-reply - 빠른 답변 선택 (detail: { id, value })
4882
+ * @fires db-article-select - 도움말 문서 선택 (detail: { id, title })
4883
+ * @fires db-conversation-select - 대화 목록 선택 (detail: { id })
4884
+ * @fires db-message-action - 말풍선 액션 (detail: { action, text })
4885
+ *
4886
+ * @example
4887
+ * const chat = document.createElement('db-chat-widget');
4888
+ * chat.setAttribute('agent-name', '디지털 상담원');
4889
+ * chat.setAttribute('unread', '2');
4890
+ * document.body.appendChild(chat);
4891
+ * chat.addEventListener('db-send', (e) => {
4892
+ * chat.setTyping(true);
4893
+ * setTimeout(() => {
4894
+ * chat.setTyping(false);
4895
+ * chat.addMessage({ role: 'assistant', text: '확인했어요!' });
4896
+ * }, 900);
4897
+ * });
4898
+ */
4899
+ declare class DbChatWidget extends HTMLElement {
4900
+ static get observedAttributes(): string[];
4901
+ private built;
4902
+ private typing;
4903
+ private _messages;
4904
+ private _conversations;
4905
+ private _menuItems;
4906
+ private _quickReplies;
4907
+ private _articles;
4908
+ private launcher;
4909
+ private launcherBadge;
4910
+ private panel;
4911
+ private headerEl;
4912
+ private bodyEl;
4913
+ private footerEl;
4914
+ private navEl;
4915
+ private composer;
4916
+ private threadEl;
4917
+ get open(): boolean;
4918
+ set open(v: boolean);
4919
+ get view(): ChatView;
4920
+ set view(v: ChatView);
4921
+ get position(): ChatPosition;
4922
+ set position(v: ChatPosition);
4923
+ get unread(): number;
4924
+ set unread(v: number);
4925
+ set messages(v: DbChatWidgetMessage[]);
4926
+ get messages(): DbChatWidgetMessage[];
4927
+ set conversations(v: DbChatWidgetConversation[]);
4928
+ get conversations(): DbChatWidgetConversation[];
4929
+ set menuItems(v: DbChatSuggestion[]);
4930
+ get menuItems(): DbChatSuggestion[];
4931
+ set quickReplies(v: DbChatSuggestion[]);
4932
+ get quickReplies(): DbChatSuggestion[];
4933
+ set articles(v: DbChatSuggestion[]);
4934
+ get articles(): DbChatSuggestion[];
4935
+ connectedCallback(): void;
4936
+ attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void;
4937
+ private hydrateFromAttributes;
4938
+ private build;
4939
+ private sync;
4940
+ private syncOpenState;
4941
+ private renderBadge;
4942
+ private renderHeader;
4943
+ private iconButton;
4944
+ private renderBody;
4945
+ private renderHome;
4946
+ private renderMessages;
4947
+ private renderConversation;
4948
+ private renderHelp;
4949
+ private buildMessage;
4950
+ private buildTyping;
4951
+ private buildEmpty;
4952
+ private renderFooter;
4953
+ private renderNav;
4954
+ private scrollThreadToEnd;
4955
+ private nowLabel;
4956
+ private dispatch;
4957
+ openWidget(): void;
4958
+ close(): void;
4959
+ toggle(): void;
4960
+ setView(view: ChatView): void;
4961
+ /** 스레드에 메시지를 추가하고 대화 화면으로 전환/렌더 */
4962
+ addMessage(msg: DbChatWidgetMessage): void;
4963
+ /** 챗봇 입력중(...) 표시 토글 */
4964
+ setTyping(on: boolean): void;
4965
+ /** 전송 중(정지 버튼) 상태 — 컴포저에 위임 */
4966
+ setStreaming(on: boolean): void;
4967
+ /** 스레드 전체 교체 */
4968
+ setMessages(messages: DbChatWidgetMessage[]): void;
4969
+ }
4970
+ declare global {
4971
+ interface HTMLElementTagNameMap {
4972
+ 'db-chat-widget': DbChatWidget;
4973
+ }
4974
+ }
4975
+
4976
+ interface DbArtifactOptions {
4977
+ /** 패널 헤더 제목 */
4978
+ title?: string;
4979
+ /** 헤더 부제(선택) */
4980
+ subtitle?: string;
4981
+ /** 본문 HTML (setArtifactContent 로 요소를 직접 넣을 수도 있음) */
4982
+ html?: string;
4983
+ /** 인라인 카드와 동기화할 id (toggle 용) */
4984
+ id?: string;
4985
+ }
4986
+ /** 채팅 스레드 안에 노출되는 결과물(아티팩트) 카드 */
4987
+ interface DbChatArtifactRef {
4988
+ id?: string;
4989
+ title: string;
4990
+ subtitle?: string;
4991
+ icon?: string;
4992
+ html?: string;
4993
+ }
4994
+ interface DbChatMessageData {
4995
+ id?: string;
4996
+ role?: 'user' | 'assistant' | 'system';
4997
+ /** 평문 본문 */
4998
+ text?: string;
4999
+ /** HTML 본문 (text 대신) */
5000
+ html?: string;
5001
+ name?: string;
5002
+ time?: string;
5003
+ avatarSrc?: string;
5004
+ avatarInitials?: string;
5005
+ /** 말풍선 액션 (예: 'copy,regenerate,like,dislike') */
5006
+ actions?: string;
5007
+ status?: 'sending' | 'error';
5008
+ variant?: 'bubble' | 'plain';
5009
+ /** 스레드 인라인 결과물 카드 — 클릭 시 우측 아티팩트 패널 토글 */
5010
+ artifact?: DbChatArtifactRef;
5011
+ }
5012
+ /**
5013
+ * 전체 대화형 AI 채팅 화면. 시작 전(빈 상태)과 대화 중을 하나로 통합한 최상위 컴포넌트로,
5014
+ * 채팅 프리미티브(`db-chat-welcome` · `db-chat-suggestions` · `db-chat-message`
5015
+ * · `db-chat-typing` · `db-chat-composer`)를 조합합니다.
5016
+ *
5017
+ * - 메시지가 없으면 히어로(인사말 + 추천)를 중앙에 보여주고,
5018
+ * - 메시지가 생기면 스크롤 스레드로 전환하며, 컴포저는 항상 하단에 고정됩니다.
5019
+ *
5020
+ * @fires db-send - 전송 (detail: { value, attachments })
5021
+ * @fires db-stop - 생성 중지
5022
+ * @fires db-tool-toggle - 툴 토글 (detail: { id, active })
5023
+ * @fires db-attach - 첨부 종류 선택 (detail: { type })
5024
+ * @fires db-attach-files - 파일 선택 (detail: { type, files })
5025
+ * @fires db-voice - 음성 입력
5026
+ * @fires db-suggestion-select - 추천 선택 (detail: { id, title, value })
5027
+ * @fires db-message-action - 말풍선 액션 (detail: { action, text })
5028
+ *
5029
+ * @example
5030
+ * const chat = document.querySelector('db-chat');
5031
+ * chat.suggestions = [{ title:'카피 작성', icon:'edit' }];
5032
+ * chat.tools = [{ id:'reason', label:'Reasoning', icon:'bulb' }];
5033
+ * chat.addEventListener('db-send', (e) => {
5034
+ * chat.addMessage({ role:'user', text: e.detail.value });
5035
+ * chat.setTyping(true);
5036
+ * });
5037
+ */
5038
+ declare class DbAiChat extends HTMLElement {
5039
+ static get observedAttributes(): string[];
5040
+ private built;
5041
+ private typing;
5042
+ private _messages;
5043
+ private _suggestions;
5044
+ private _tools;
5045
+ private _attachOptions;
5046
+ private mainEl;
5047
+ private scrollEl;
5048
+ private dockEl;
5049
+ private composer;
5050
+ private threadEl;
5051
+ private artifactEl;
5052
+ private artifactTitleEl;
5053
+ private artifactSubtitleEl;
5054
+ private artifactBodyEl;
5055
+ private activeArtifactId;
5056
+ private artifactSeq;
5057
+ set messages(v: DbChatMessageData[]);
5058
+ get messages(): DbChatMessageData[];
5059
+ set suggestions(v: DbChatSuggestion[]);
5060
+ get suggestions(): DbChatSuggestion[];
5061
+ set tools(v: DbChatTool[]);
5062
+ get tools(): DbChatTool[];
5063
+ set attachOptions(v: DbChatAttachOption[]);
5064
+ get attachOptions(): DbChatAttachOption[];
5065
+ connectedCallback(): void;
5066
+ attributeChangedCallback(name: string): void;
5067
+ private build;
5068
+ private buildArtifact;
5069
+ private sync;
5070
+ private syncArtifact;
5071
+ private syncComposerToggles;
5072
+ private renderContent;
5073
+ private renderHero;
5074
+ private renderThread;
5075
+ private buildMessage;
5076
+ private ensureArtifactId;
5077
+ private buildArtifactCard;
5078
+ private syncArtifactCardStates;
5079
+ private toggleArtifactFromCard;
5080
+ private buildTyping;
5081
+ private renderDock;
5082
+ private onSend;
5083
+ private onSuggestionSelect;
5084
+ private relay;
5085
+ private scrollToEnd;
5086
+ /** 메시지를 추가하고 스레드로 전환/스크롤. 추가된 메시지 id 반환 */
5087
+ addMessage(msg: DbChatMessageData): string;
5088
+ /** 특정 메시지 본문/속성 갱신 */
5089
+ updateMessage(id: string, patch: Partial<DbChatMessageData>): void;
5090
+ /** 스트리밍용: 마지막(또는 지정) 메시지 본문에 청크 이어붙이기 */
5091
+ appendToMessage(id: string, chunk: string): void;
5092
+ /** 전체 메시지 교체 */
5093
+ setMessages(list: DbChatMessageData[]): void;
5094
+ /** 대화를 비우고 히어로(빈 상태)로 복귀 */
5095
+ clear(): void;
5096
+ /** 생각 중(…) 표시 토글 */
5097
+ setTyping(on: boolean): void;
5098
+ /** 전송 중(정지 버튼) 상태 — 컴포저에 위임 */
5099
+ setStreaming(on: boolean): void;
5100
+ /** 입력창 포커스 */
5101
+ focusInput(): void;
5102
+ /** 컴포저 인스턴스 접근 */
5103
+ getComposer(): DbChatComposer;
5104
+ get artifactOpen(): boolean;
5105
+ set artifactOpen(v: boolean);
5106
+ /**
5107
+ * 우측 아티팩트 패널을 엽니다(내용 지정 시 함께 세팅).
5108
+ * 열리면 채팅 본문이 좌측으로 밀립니다.
5109
+ * `id` 를 넘기면 스레드 인라인 카드 활성 상태가 동기화됩니다.
5110
+ */
5111
+ openArtifact(opts?: DbArtifactOptions): void;
5112
+ /** 아티팩트 패널을 닫습니다. */
5113
+ closeArtifact(): void;
5114
+ /** 아티팩트 열림/닫힘 토글. */
5115
+ toggleArtifact(): void;
5116
+ /** 아티팩트 본문 요소(커스텀 콘텐츠를 직접 마운트할 때). */
5117
+ getArtifactBody(): HTMLElement;
5118
+ /** 아티팩트 본문을 요소로 교체합니다. */
5119
+ setArtifactContent(node: Node): void;
5120
+ }
5121
+ declare global {
5122
+ interface HTMLElementTagNameMap {
5123
+ 'db-ai-chat': DbAiChat;
5124
+ }
5125
+ }
5126
+
5127
+ interface DbAiChatItem {
5128
+ id: string;
5129
+ /** 대화 제목 */
5130
+ title: string;
5131
+ /** 그룹 라벨 (예: '오늘', '어제', '지난 7일'). 없으면 '최근 항목' */
5132
+ group?: string;
5133
+ /** 행 아이콘(선택) */
5134
+ icon?: DbIconName;
5135
+ }
5136
+ /**
5137
+ * AI 대화 이력 목록. 상단 '새 대화' 버튼 + 그룹별 최근 대화 리스트로 구성됩니다.
5138
+ * (사람 간 대화 목록은 `db-chat-list` 를 사용하세요.)
5139
+ *
5140
+ * @fires db-new - 새 대화 시작
5141
+ * @fires db-select - 대화 선택 (detail: { id, title })
5142
+ *
5143
+ * @example
5144
+ * const list = document.querySelector('db-ai-chat-list');
5145
+ * list.items = [{ id:'1', title:'다운로드 진행바 컴포넌트', group:'오늘' }];
5146
+ * list.addEventListener('db-new', () => {});
5147
+ * list.addEventListener('db-select', (e) => console.log(e.detail.id));
5148
+ */
5149
+ declare class DbAiChatList extends HTMLElement {
5150
+ static get observedAttributes(): string[];
5151
+ private _items;
5152
+ get items(): DbAiChatItem[];
5153
+ set items(v: DbAiChatItem[]);
5154
+ get selectedId(): string;
5155
+ set selectedId(v: string);
5156
+ connectedCallback(): void;
5157
+ attributeChangedCallback(): void;
5158
+ private render;
5159
+ }
5160
+ declare global {
5161
+ interface HTMLElementTagNameMap {
5162
+ 'db-ai-chat-list': DbAiChatList;
5163
+ }
5164
+ }
5165
+
5166
+ interface DbChatListItem {
5167
+ id: string;
5168
+ /** 상대(대화방) 이름 */
5169
+ name: string;
5170
+ avatarSrc?: string;
5171
+ avatarInitials?: string;
5172
+ /** 마지막 메시지 미리보기 */
5173
+ preview?: string;
5174
+ /** 시간 라벨 (예: '방금', '어제') */
5175
+ time?: string;
5176
+ /** 안 읽은 수 */
5177
+ unread?: number;
5178
+ /** 온라인 표시 */
5179
+ online?: boolean;
5180
+ }
5181
+ /**
5182
+ * 사람 간 대화(메신저) 목록. 아바타 + 이름 + 미리보기 + 시간 + 안읽음 배지의 행 리스트로,
5183
+ * 아바타는 `db-avatar` 를 재사용합니다. AI 대화 이력은 `db-ai-chat-list` 를 쓰세요.
5184
+ *
5185
+ * @fires db-select - 대화 선택 (detail: { id })
5186
+ *
5187
+ * @example
5188
+ * const list = document.querySelector('db-chat-list');
5189
+ * list.items = [{ id:'1', name:'디지털 상담원', preview:'무엇을 도와드릴까요?', time:'방금', unread:1, online:true }];
5190
+ * list.addEventListener('db-select', (e) => console.log(e.detail.id));
5191
+ */
5192
+ declare class DbChatList extends HTMLElement {
5193
+ static get observedAttributes(): string[];
5194
+ private _items;
5195
+ get items(): DbChatListItem[];
5196
+ set items(v: DbChatListItem[]);
5197
+ get selectedId(): string;
5198
+ set selectedId(v: string);
5199
+ connectedCallback(): void;
5200
+ attributeChangedCallback(): void;
5201
+ private render;
5202
+ }
5203
+ declare global {
5204
+ interface HTMLElementTagNameMap {
5205
+ 'db-chat-list': DbChatList;
5206
+ }
5207
+ }
5208
+
5209
+ interface DbChatRoomMessage {
5210
+ id?: string;
5211
+ /** 내가 보낸 메시지면 true(우측 정렬). 아니면 상대(좌측) */
5212
+ mine?: boolean;
5213
+ text?: string;
5214
+ html?: string;
5215
+ time?: string;
5216
+ /** 상대 이름(그룹 채팅에서 유용) */
5217
+ name?: string;
5218
+ avatarSrc?: string;
5219
+ avatarInitials?: string;
5220
+ }
5221
+ /**
5222
+ * 사람 간 1:1/그룹 대화 화면. 상단 헤더(상대 정보) + 메시지 스레드 + 하단 컴포저.
5223
+ * 메시지·아바타·입력창은 `db-chat-message` · `db-avatar` · `db-chat-composer` 를 재사용합니다.
5224
+ * AI 대화 화면은 `db-ai-chat` 을 쓰세요.
5225
+ *
5226
+ * @fires db-send - 전송 (detail: { value, attachments })
5227
+ * @fires db-back - 뒤로가기
5228
+ *
5229
+ * @example
5230
+ * const room = document.querySelector('db-chat-room');
5231
+ * room.setAttribute('peer-name', '디지털 상담원');
5232
+ * room.messages = [{ mine:false, text:'무엇을 도와드릴까요?', time:'오후 2:31' }];
5233
+ * room.addEventListener('db-send', (e) => room.addMessage({ mine:true, text:e.detail.value }));
5234
+ */
5235
+ declare class DbChatRoom extends HTMLElement {
5236
+ static get observedAttributes(): string[];
5237
+ private built;
5238
+ private typing;
5239
+ private _messages;
5240
+ private headerEl;
5241
+ private scrollEl;
5242
+ private threadEl;
5243
+ private dockEl;
5244
+ private composer;
5245
+ set messages(v: DbChatRoomMessage[]);
5246
+ get messages(): DbChatRoomMessage[];
5247
+ connectedCallback(): void;
5248
+ attributeChangedCallback(): void;
5249
+ private build;
5250
+ private sync;
5251
+ private renderHeader;
5252
+ private renderThread;
5253
+ private buildMessage;
5254
+ private buildTyping;
5255
+ private scrollToEnd;
5256
+ /** 메시지 추가. 추가된 id 반환 */
5257
+ addMessage(msg: DbChatRoomMessage): string;
5258
+ /** 전체 메시지 교체 */
5259
+ setMessages(list: DbChatRoomMessage[]): void;
5260
+ /** 상대 입력중(…) 표시 토글 */
5261
+ setTyping(on: boolean): void;
5262
+ /** 입력창 포커스 */
5263
+ focusInput(): void;
5264
+ /** 컴포저 인스턴스 접근 */
5265
+ getComposer(): DbChatComposer;
5266
+ }
5267
+ declare global {
5268
+ interface HTMLElementTagNameMap {
5269
+ 'db-chat-room': DbChatRoom;
5270
+ }
5271
+ }
5272
+
4184
5273
  /**
4185
5274
  * 명령형 toast() 헬퍼 — 컨테이너/스택/제거를 자동 관리합니다.
4186
5275
  *
@@ -4261,5 +5350,5 @@ interface DbConfirmOptions {
4261
5350
  /** 확인 대화상자를 띄우고, 확인 시 true / 취소(ESC·배경 포함) 시 false 로 resolve 합니다. */
4262
5351
  declare function confirm(options: DbConfirmOptions): Promise<boolean>;
4263
5352
 
4264
- export { DbAccordion, DbAdBanner, DbAlert, DbAnimationBackground, DbAnimationText, DbAppBadge, DbAudioPlayer, DbAvatar, DbBackdrop, DbBadge, DbBanner, DbBottomNavigation, DbBottomSheet, DbBreadcrumbs, DbButton, DbCalendar, DbCard, DbCarousel, DbCheckbox, DbChip, DbCodeBlock, DbColorPicker, DbConfirm, DbContainer, DbContextMenu, DbCountdown, DbCursorFollower, DbDatePicker, DbDivider, DbDrawer, DbDropdown, DbDropzone, DbEmptyState, DbFileUploader, DbFloatingActionButton, DbFooter, DbForm, DbGantt, DbGradient, DbGrid, DbGridBackground, DbGridItem, DbImage, DbImageList, DbImagePlaceholder, DbIndicator, DbInput, DbKanban, DbLabel, DbLightbox, DbList, DbLogo, DbLottie, DbMarkdownEditor, DbMarquee, DbMasonry, DbMenuItem, DbModal, DbNavbar, DbOnboardingModal, DbPageHeader, DbPagination, DbPopover, DbProgress, DbProgressStep, DbProgressbar, DbRadio, DbRandomGradient, DbRangeSlider, DbRating, DbReorder, DbResizablePanels, DbScrollArea, DbSearchBar, DbSection, DbSectionAppDownload, DbSectionContact, DbSectionCta, DbSectionFaq, DbSectionFeature, DbSectionFeatureGrid, DbSectionHero, DbSectionLogoCloud, DbSectionPricing, DbSectionStats, DbSectionTestimonials, DbSegmentControl, DbSelect, DbShare, DbSidebar, DbSkeleton, DbSpinner, DbSplitView, DbStack, DbStat, DbStepper, DbTable, DbTabs, DbTestimonial, DbTextarea, DbTimePicker, DbTimeline, DbToast, DbToggle, DbToolbar, DbTooltip, DbTopBanner, DbTutorial, DbVideoPlayer, DbYouTubePlayer, confirm, confirm as dbConfirm, toast as dbToast, showToast, toast };
4265
- export type { CalendarEventData, CalendarEventType, DbAlertAction, DbBannerAction, DbBottomNavigationItem, DbConfirmOptions, DbConfirmVariant, DbFooterCompanyInfo, DbFooterFamilySite, DbFooterLink, DbFooterLinkColumn, DbFooterSocialLink, DbFormFieldData, DbGanttAssignee, DbGanttGroup, DbGanttItem, DbGanttItemStatus, DbGanttRow, DbImageListItem, DbKanbanAssignee, DbKanbanCard, DbKanbanColumn, DbKanbanPriority, DbKanbanTag, DbLightboxImage, DbNavbarItem, DbNavbarUserProfile, DbPageHeaderTabItem, DbSharePlatform, DbShareVariant, DbSidebarItem, DbSidebarProject, DbSidebarPromoBanner, DbSidebarSection, DbSidebarUserProfile, DbStatChange, DbTimelineItem, DbToastApi, DbToastHandle, DbToastOptions, DbToastPosition, DbToastStatus };
5353
+ export { DbAccordion, DbAdBanner, DbAiChat, DbAiChatList, DbAlert, DbAnimationBackground, DbAnimationText, DbAppBadge, DbAudioPlayer, DbAvatar, DbBackdrop, DbBadge, DbBanner, DbBottomNavigation, DbBottomSheet, DbBreadcrumbs, DbButton, DbCalendar, DbCard, DbCarousel, DbChatComposer, DbChatList, DbChatMessage, DbChatOrb, DbChatRoom, DbChatSuggestions, DbChatTyping, DbChatWelcome, DbChatWidget, DbCheckbox, DbChip, DbCodeBlock, DbColorPicker, DbConfirm, DbContainer, DbContextMenu, DbCountdown, DbCursorFollower, DbDatePicker, DbDivider, DbDownloadProgress, DbDrawer, DbDropdown, DbDropzone, DbEmailVerify, DbEmptyState, DbFileUploader, DbFloatingActionButton, DbFooter, DbForm, DbGantt, DbGradient, DbGrid, DbGridBackground, DbGridItem, DbImage, DbImageList, DbImagePlaceholder, DbIndicator, DbInput, DbKanban, DbLabel, DbLightbox, DbList, DbLogo, DbLottie, DbMarkdownEditor, DbMarquee, DbMasonry, DbMenuItem, DbModal, DbNavbar, DbOnboardingModal, DbOtpInput, DbPageHeader, DbPagination, DbPhoneVerify, DbPopover, DbProgress, DbProgressStep, DbProgressbar, DbRadio, DbRandomGradient, DbRangeSlider, DbRating, DbReorder, DbResizablePanels, DbScrollArea, DbSearchBar, DbSection, DbSectionAppDownload, DbSectionContact, DbSectionCta, DbSectionFaq, DbSectionFeature, DbSectionFeatureGrid, DbSectionHero, DbSectionLogoCloud, DbSectionPricing, DbSectionStats, DbSectionTestimonials, DbSegmentControl, DbSelect, DbShare, DbSidebar, DbSkeleton, DbSpinner, DbSplitView, DbStack, DbStat, DbStepper, DbTable, DbTabs, DbTestimonial, DbTextarea, DbTimePicker, DbTimeline, DbToast, DbToggle, DbToolbar, DbTooltip, DbTopBanner, DbTutorial, DbTwoFactor, DbVideoPlayer, DbYouTubePlayer, confirm, confirm as dbConfirm, toast as dbToast, showToast, toast };
5354
+ export type { CalendarEventData, CalendarEventType, DbAiChatItem, DbAlertAction, DbArtifactOptions, DbBannerAction, DbBottomNavigationItem, DbChatArtifactRef, DbChatAttachOption, DbChatListItem, DbChatMessageData, DbChatRoomMessage, DbChatSuggestion, DbChatTool, DbChatWidgetConversation, DbChatWidgetMessage, DbConfirmOptions, DbConfirmVariant, DbFooterCompanyInfo, DbFooterFamilySite, DbFooterLink, DbFooterLinkColumn, DbFooterSocialLink, DbFormFieldData, DbGanttAssignee, DbGanttGroup, DbGanttItem, DbGanttItemStatus, DbGanttRow, DbImageListItem, DbKanbanAssignee, DbKanbanCard, DbKanbanColumn, DbKanbanPriority, DbKanbanTag, DbLightboxImage, DbNavbarItem, DbNavbarUserProfile, DbPageHeaderTabItem, DbSharePlatform, DbShareVariant, DbSidebarItem, DbSidebarProject, DbSidebarPromoBanner, DbSidebarSection, DbSidebarUserProfile, DbStatChange, DbTimelineItem, DbToastApi, DbToastHandle, DbToastOptions, DbToastPosition, DbToastStatus };