@desktalk/ui 0.1.0-alpha.1

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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/dist/chart-entry.d.ts +7 -0
  3. package/dist/chart-entry.d.ts.map +1 -0
  4. package/dist/chart.umd.js +30 -0
  5. package/dist/chart.umd.js.map +7 -0
  6. package/dist/desktalk-ui.js +1681 -0
  7. package/dist/desktalk-ui.js.map +7 -0
  8. package/dist/dt-badge.d.ts +39 -0
  9. package/dist/dt-badge.d.ts.map +1 -0
  10. package/dist/dt-badge.stories.d.ts +34 -0
  11. package/dist/dt-badge.stories.d.ts.map +1 -0
  12. package/dist/dt-button.d.ts +51 -0
  13. package/dist/dt-button.d.ts.map +1 -0
  14. package/dist/dt-button.stories.d.ts +40 -0
  15. package/dist/dt-button.stories.d.ts.map +1 -0
  16. package/dist/dt-card.d.ts +30 -0
  17. package/dist/dt-card.d.ts.map +1 -0
  18. package/dist/dt-card.stories.d.ts +31 -0
  19. package/dist/dt-card.stories.d.ts.map +1 -0
  20. package/dist/dt-chart.d.ts +67 -0
  21. package/dist/dt-chart.d.ts.map +1 -0
  22. package/dist/dt-chart.stories.d.ts +26 -0
  23. package/dist/dt-chart.stories.d.ts.map +1 -0
  24. package/dist/dt-divider.d.ts +41 -0
  25. package/dist/dt-divider.d.ts.map +1 -0
  26. package/dist/dt-divider.stories.d.ts +38 -0
  27. package/dist/dt-divider.stories.d.ts.map +1 -0
  28. package/dist/dt-grid.d.ts +50 -0
  29. package/dist/dt-grid.d.ts.map +1 -0
  30. package/dist/dt-grid.stories.d.ts +49 -0
  31. package/dist/dt-grid.stories.d.ts.map +1 -0
  32. package/dist/dt-list-view.d.ts +94 -0
  33. package/dist/dt-list-view.d.ts.map +1 -0
  34. package/dist/dt-list-view.stories.d.ts +49 -0
  35. package/dist/dt-list-view.stories.d.ts.map +1 -0
  36. package/dist/dt-markdown-editor.d.ts +54 -0
  37. package/dist/dt-markdown-editor.d.ts.map +1 -0
  38. package/dist/dt-markdown-editor.stories.d.ts +22 -0
  39. package/dist/dt-markdown-editor.stories.d.ts.map +1 -0
  40. package/dist/dt-markdown.d.ts +47 -0
  41. package/dist/dt-markdown.d.ts.map +1 -0
  42. package/dist/dt-markdown.stories.d.ts +22 -0
  43. package/dist/dt-markdown.stories.d.ts.map +1 -0
  44. package/dist/dt-select.d.ts +71 -0
  45. package/dist/dt-select.d.ts.map +1 -0
  46. package/dist/dt-select.stories.d.ts +41 -0
  47. package/dist/dt-select.stories.d.ts.map +1 -0
  48. package/dist/dt-stack.d.ts +51 -0
  49. package/dist/dt-stack.d.ts.map +1 -0
  50. package/dist/dt-stack.stories.d.ts +48 -0
  51. package/dist/dt-stack.stories.d.ts.map +1 -0
  52. package/dist/dt-stat.d.ts +61 -0
  53. package/dist/dt-stat.d.ts.map +1 -0
  54. package/dist/dt-stat.stories.d.ts +47 -0
  55. package/dist/dt-stat.stories.d.ts.map +1 -0
  56. package/dist/dt-table-view.d.ts +119 -0
  57. package/dist/dt-table-view.d.ts.map +1 -0
  58. package/dist/dt-table-view.stories.d.ts +46 -0
  59. package/dist/dt-table-view.stories.d.ts.map +1 -0
  60. package/dist/dt-tooltip.d.ts +47 -0
  61. package/dist/dt-tooltip.d.ts.map +1 -0
  62. package/dist/dt-tooltip.stories.d.ts +41 -0
  63. package/dist/dt-tooltip.stories.d.ts.map +1 -0
  64. package/dist/index.d.ts +23 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +1681 -0
  67. package/dist/index.js.map +7 -0
  68. package/dist/lib/chart-loader.d.ts +10 -0
  69. package/dist/lib/chart-loader.d.ts.map +1 -0
  70. package/dist/lib/marked-loader.d.ts +13 -0
  71. package/dist/lib/marked-loader.d.ts.map +1 -0
  72. package/dist/lib/milkdown-loader.d.ts +12 -0
  73. package/dist/lib/milkdown-loader.d.ts.map +1 -0
  74. package/dist/lib/template-bind.d.ts +3 -0
  75. package/dist/lib/template-bind.d.ts.map +1 -0
  76. package/dist/lib/virtualizer.d.ts +35 -0
  77. package/dist/lib/virtualizer.d.ts.map +1 -0
  78. package/dist/marked-entry.d.ts +7 -0
  79. package/dist/marked-entry.d.ts.map +1 -0
  80. package/dist/marked.umd.js +61 -0
  81. package/dist/marked.umd.js.map +7 -0
  82. package/dist/milkdown-entry.d.ts +7 -0
  83. package/dist/milkdown-entry.d.ts.map +1 -0
  84. package/dist/milkdown.umd.js +1875 -0
  85. package/dist/milkdown.umd.js.map +7 -0
  86. package/dist/stores/all-components.stories.d.ts +6 -0
  87. package/dist/stores/all-components.stories.d.ts.map +1 -0
  88. package/dist/theme-css.d.ts +38 -0
  89. package/dist/theme-css.d.ts.map +1 -0
  90. package/dist/theme-css.js +193 -0
  91. package/dist/theme-css.js.map +7 -0
  92. package/dist/ui-elements.d.ts +213 -0
  93. package/dist/ui-elements.d.ts.map +1 -0
  94. package/package.json +65 -0
  95. package/src/fonts/OFL.txt +76 -0
  96. package/src/fonts/README.md +43 -0
  97. package/src/fonts/fonts.css +91 -0
  98. package/src/fonts/sora-400.ttf +0 -0
  99. package/src/fonts/sora-500.ttf +0 -0
  100. package/src/fonts/sora-600.ttf +0 -0
  101. package/src/fonts/sora-700.ttf +0 -0
  102. package/src/fonts/work-sans-400.ttf +0 -0
  103. package/src/fonts/work-sans-500.ttf +0 -0
  104. package/src/fonts/work-sans-600.ttf +0 -0
  105. package/src/fonts/work-sans-700.ttf +0 -0
  106. package/src/theme-css.ts +390 -0
  107. package/types.d.ts +249 -0
package/dist/index.js ADDED
@@ -0,0 +1,1681 @@
1
+ var J=`.dt-tooltip-popup {
2
+ position: fixed;
3
+ z-index: 2147483647;
4
+ padding: 6px 10px;
5
+ border: 1px solid var(--dt-accent);
6
+ border-radius: 2px;
7
+ background: var(--dt-surface);
8
+ color: var(--dt-text-secondary);
9
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
10
+ font-size: 12px;
11
+ font-weight: 500;
12
+ line-height: 1.4;
13
+ white-space: nowrap;
14
+ pointer-events: none;
15
+ user-select: none;
16
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
17
+ }
18
+
19
+ /* Tech corner accents */
20
+ .dt-tooltip-popup::before {
21
+ content: '';
22
+ position: absolute;
23
+ top: -1px;
24
+ left: -1px;
25
+ width: 4px;
26
+ height: 4px;
27
+ border-top: 1px solid var(--dt-accent);
28
+ border-left: 1px solid var(--dt-accent);
29
+ }
30
+
31
+ .dt-tooltip-popup::after {
32
+ content: '';
33
+ position: absolute;
34
+ bottom: -1px;
35
+ right: -1px;
36
+ width: 4px;
37
+ height: 4px;
38
+ border-bottom: 1px solid var(--dt-accent);
39
+ border-right: 1px solid var(--dt-accent);
40
+ }
41
+
42
+ /* Arrow styling - tech/minimal */
43
+ .dt-tooltip-popup[data-actual-placement='top'] {
44
+ transform: translateX(-50%);
45
+ }
46
+
47
+ .dt-tooltip-popup[data-actual-placement='top']::before {
48
+ top: auto;
49
+ bottom: -4px;
50
+ left: 50%;
51
+ transform: translateX(-50%);
52
+ width: 0;
53
+ height: 0;
54
+ border: 4px solid transparent;
55
+ border-top-color: var(--dt-accent);
56
+ border-left: none;
57
+ border-right: none;
58
+ }
59
+
60
+ .dt-tooltip-popup[data-actual-placement='bottom'] {
61
+ transform: translateX(-50%);
62
+ }
63
+
64
+ .dt-tooltip-popup[data-actual-placement='bottom']::before {
65
+ bottom: auto;
66
+ top: -4px;
67
+ left: 50%;
68
+ transform: translateX(-50%);
69
+ width: 0;
70
+ height: 0;
71
+ border: 4px solid transparent;
72
+ border-bottom-color: var(--dt-accent);
73
+ border-left: none;
74
+ border-right: none;
75
+ }
76
+
77
+ .dt-tooltip-popup[data-actual-placement='left'] {
78
+ transform: translateY(-50%);
79
+ }
80
+
81
+ .dt-tooltip-popup[data-actual-placement='left']::before {
82
+ left: auto;
83
+ top: 50%;
84
+ right: -4px;
85
+ transform: translateY(-50%);
86
+ width: 0;
87
+ height: 0;
88
+ border: 4px solid transparent;
89
+ border-left-color: var(--dt-accent);
90
+ border-top: none;
91
+ border-bottom: none;
92
+ }
93
+
94
+ .dt-tooltip-popup[data-actual-placement='right'] {
95
+ transform: translateY(-50%);
96
+ }
97
+
98
+ .dt-tooltip-popup[data-actual-placement='right']::before {
99
+ right: auto;
100
+ top: 50%;
101
+ left: -4px;
102
+ transform: translateY(-50%);
103
+ width: 0;
104
+ height: 0;
105
+ border: 4px solid transparent;
106
+ border-right-color: var(--dt-accent);
107
+ border-top: none;
108
+ border-bottom: none;
109
+ }
110
+ `;var vt="dt-tooltip-popup",u=8,W=!1;function ft(){if(W)return;let r=document.createElement("style");r.setAttribute("data-dt-tooltip",""),r.textContent=J,document.head.appendChild(r),W=!0}var x=class extends HTMLElement{_popup=null;_showTimeout=null;_tooltipId="";_visible=!1;static get observedAttributes(){return["content","placement","delay","disabled"]}get content(){return this.getAttribute("content")??""}set content(t){this.setAttribute("content",t)}get placement(){let t=this.getAttribute("placement");return t==="bottom"||t==="left"||t==="right"?t:"top"}set placement(t){this.setAttribute("placement",t)}get delay(){let t=Number(this.getAttribute("delay"));return Number.isFinite(t)&&t>0?t:0}set delay(t){this.setAttribute("delay",String(t))}get disabled(){return this.hasAttribute("disabled")}set disabled(t){t?this.setAttribute("disabled",""):this.removeAttribute("disabled")}constructor(){super();let t=this.attachShadow({mode:"open"});t.innerHTML="<slot></slot>",this._tooltipId=`dt-tip-${Math.random().toString(36).slice(2,9)}`}connectedCallback(){ft(),this.addEventListener("mouseenter",this._onEnter),this.addEventListener("mouseleave",this._onLeave),this.addEventListener("focusin",this._onEnter),this.addEventListener("focusout",this._onLeave)}disconnectedCallback(){this.removeEventListener("mouseenter",this._onEnter),this.removeEventListener("mouseleave",this._onLeave),this.removeEventListener("focusin",this._onEnter),this.removeEventListener("focusout",this._onLeave),this._hide()}attributeChangedCallback(t,e,n){t==="disabled"&&this.disabled&&this._hide(),t==="content"&&this._popup&&(this._popup.textContent=this.content)}_onEnter=()=>{if(this.disabled||!this.content)return;this._showTimeout!==null&&clearTimeout(this._showTimeout);let t=()=>{this._createPopup(),this._position(),this._visible=!0};this.delay>0?this._showTimeout=setTimeout(t,this.delay):t()};_onLeave=()=>{this._hide()};_createPopup(){if(this._popup)return;let t=document.createElement("div");t.className=vt,t.id=this._tooltipId,t.setAttribute("role","tooltip"),t.textContent=this.content,document.body.appendChild(t),this._popup=t;let e=this._getTrigger();e&&e.setAttribute("aria-describedby",this._tooltipId)}_hide(){if(this._showTimeout!==null&&(clearTimeout(this._showTimeout),this._showTimeout=null),this._popup){let t=this._getTrigger();t&&t.removeAttribute("aria-describedby"),this._popup.remove(),this._popup=null,this._visible=!1}}_getTrigger(){let e=this.shadowRoot?.querySelector("slot")?.assignedElements();return e&&e.length>0?e[0]:null}_position(){let t=this._popup;if(!t)return;let e=this.getBoundingClientRect(),n=t.getBoundingClientRect(),i=window.innerWidth,s=window.innerHeight,o=this.placement;o==="top"&&e.top-n.height-u<0?o="bottom":o==="bottom"&&e.bottom+n.height+u>s?o="top":o==="left"&&e.left-n.width-u<0?o="right":o==="right"&&e.right+n.width+u>i&&(o="left"),t.setAttribute("data-actual-placement",o);let a,d;switch(o){case"top":d=e.left+e.width/2,a=e.top-n.height-u;break;case"bottom":d=e.left+e.width/2,a=e.bottom+u;break;case"left":d=e.left-n.width-u,a=e.top+e.height/2;break;case"right":d=e.right+u,a=e.top+e.height/2;break}t.style.left=`${d}px`,t.style.top=`${a}px`}};var G=`:host {
111
+ display: block;
112
+ margin-bottom: 12px;
113
+ }
114
+
115
+ .dt-card-inner {
116
+ background: var(--dt-surface);
117
+ border: 1px solid var(--dt-accent);
118
+ border-radius: 2px;
119
+ padding: 12px;
120
+ color: var(--dt-text);
121
+ font-family: var(--font-ui, 'Work Sans', system-ui, sans-serif);
122
+ position: relative;
123
+ height: 100%;
124
+ }
125
+
126
+ /* Corner accents for sci-fi feel */
127
+ .dt-card-inner::before {
128
+ content: '';
129
+ position: absolute;
130
+ top: -1px;
131
+ left: -1px;
132
+ width: 8px;
133
+ height: 8px;
134
+ border-top: 2px solid var(--dt-accent);
135
+ border-left: 2px solid var(--dt-accent);
136
+ }
137
+
138
+ .dt-card-inner::after {
139
+ content: '';
140
+ position: absolute;
141
+ bottom: -1px;
142
+ right: -1px;
143
+ width: 8px;
144
+ height: 8px;
145
+ border-bottom: 2px solid var(--dt-accent);
146
+ border-right: 2px solid var(--dt-accent);
147
+ }
148
+
149
+ :host([variant='outlined']) .dt-card-inner {
150
+ background: transparent;
151
+ border-style: dashed;
152
+ }
153
+
154
+ :host([variant='filled']) .dt-card-inner {
155
+ background: var(--dt-accent-subtle);
156
+ border-style: solid;
157
+ }
158
+
159
+ ::slotted(h1),
160
+ ::slotted(h2),
161
+ ::slotted(h3),
162
+ ::slotted(h4),
163
+ ::slotted(h5),
164
+ ::slotted(h6) {
165
+ color: var(--dt-accent);
166
+ margin: 0 0 6px;
167
+ line-height: 1.2;
168
+ font-family: var(--font-display, 'Sora', system-ui, sans-serif);
169
+ font-weight: 600;
170
+ text-transform: uppercase;
171
+ letter-spacing: 0.1em;
172
+ font-size: 0.85rem;
173
+ }
174
+
175
+ ::slotted(p) {
176
+ color: var(--dt-text-secondary);
177
+ margin: 0 0 6px;
178
+ line-height: 1.4;
179
+ font-family: var(--font-ui, 'Work Sans', system-ui, sans-serif);
180
+ font-size: 0.8125rem;
181
+ }
182
+
183
+ ::slotted(p:last-child) {
184
+ margin-bottom: 0;
185
+ }
186
+ `;var _t="dt-card-inner",w=class extends HTMLElement{static get observedAttributes(){return["variant"]}get variant(){let t=this.getAttribute("variant");return t==="outlined"||t==="filled"?t:"default"}set variant(t){this.setAttribute("variant",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=G,t.appendChild(e);let n=document.createElement("div");n.className=_t,n.innerHTML="<slot></slot>",t.appendChild(n)}};var j=`.dt-select-menu {
187
+ position: fixed;
188
+ z-index: 2147483646;
189
+ display: flex;
190
+ min-width: 200px;
191
+ max-width: min(300px, 72vw);
192
+ max-height: 240px;
193
+ flex-direction: column;
194
+ overflow-y: auto;
195
+ border: 1px solid var(--dt-accent);
196
+ border-radius: 2px;
197
+ background: var(--dt-surface);
198
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
199
+ opacity: 0;
200
+ pointer-events: none;
201
+ transition: opacity 100ms ease;
202
+ }
203
+
204
+ .dt-select-menu[data-open] {
205
+ opacity: 1;
206
+ pointer-events: auto;
207
+ }
208
+
209
+ .dt-select-option {
210
+ display: flex;
211
+ width: 100%;
212
+ align-items: center;
213
+ justify-content: space-between;
214
+ padding: 8px 10px;
215
+ border: 0;
216
+ border-bottom: 1px solid var(--dt-border-subtle);
217
+ background: transparent;
218
+ color: var(--dt-text);
219
+ font-family: var(
220
+ --font-mono,
221
+ 'SF Mono',
222
+ Monaco,
223
+ 'Cascadia Code',
224
+ 'Roboto Mono',
225
+ Consolas,
226
+ monospace
227
+ );
228
+ font-size: 0.8125rem;
229
+ font-weight: 600;
230
+ letter-spacing: 0.04em;
231
+ text-align: left;
232
+ cursor: pointer;
233
+ transition: all 0.1s ease;
234
+ user-select: none;
235
+ }
236
+
237
+ .dt-select-option:last-child {
238
+ border-bottom: none;
239
+ }
240
+
241
+ .dt-select-option:hover {
242
+ background: var(--dt-accent);
243
+ color: var(--dt-text-on-accent);
244
+ }
245
+
246
+ .dt-select-option.dt-select-option--active {
247
+ background: var(--dt-accent-subtle);
248
+ color: var(--dt-accent);
249
+ }
250
+
251
+ .dt-select-option span {
252
+ overflow: hidden;
253
+ text-overflow: ellipsis;
254
+ white-space: nowrap;
255
+ }
256
+ `;var q=`:host {
257
+ display: block;
258
+ width: 100%;
259
+ min-width: 0;
260
+ position: relative;
261
+ }
262
+
263
+ :host([disabled]) .dt-select-trigger {
264
+ cursor: not-allowed;
265
+ opacity: 0.4;
266
+ }
267
+
268
+ .dt-select-trigger {
269
+ display: flex;
270
+ width: 100%;
271
+ min-width: 0;
272
+ max-width: 100%;
273
+ box-sizing: border-box;
274
+ align-items: center;
275
+ gap: 6px;
276
+ padding: 6px 10px;
277
+ border: 1px solid var(--dt-accent);
278
+ border-radius: 2px;
279
+ background: var(--dt-surface);
280
+ color: var(--dt-text);
281
+ font-family: var(
282
+ --font-mono,
283
+ 'SF Mono',
284
+ Monaco,
285
+ 'Cascadia Code',
286
+ 'Roboto Mono',
287
+ Consolas,
288
+ monospace
289
+ );
290
+ font-size: 0.8125rem;
291
+ font-weight: 600;
292
+ letter-spacing: 0.04em;
293
+ line-height: 1;
294
+ cursor: pointer;
295
+ transition: all 0.1s ease;
296
+ user-select: none;
297
+ position: relative;
298
+ }
299
+
300
+ /* Corner accents */
301
+ .dt-select-trigger::before {
302
+ content: '';
303
+ position: absolute;
304
+ top: 0;
305
+ left: 0;
306
+ width: 4px;
307
+ height: 4px;
308
+ border-top: 1px solid var(--dt-accent);
309
+ border-left: 1px solid var(--dt-accent);
310
+ }
311
+
312
+ .dt-select-trigger::after {
313
+ content: '';
314
+ position: absolute;
315
+ bottom: 0;
316
+ right: 0;
317
+ width: 4px;
318
+ height: 4px;
319
+ border-bottom: 1px solid var(--dt-accent);
320
+ border-right: 1px solid var(--dt-accent);
321
+ }
322
+
323
+ .dt-select-trigger:hover:not([disabled]) {
324
+ background: var(--dt-accent);
325
+ color: var(--dt-text-on-accent);
326
+ }
327
+
328
+ .dt-select-trigger:hover:not([disabled])::before,
329
+ .dt-select-trigger:hover:not([disabled])::after {
330
+ border-color: var(--dt-text-on-accent);
331
+ }
332
+
333
+ .dt-select-trigger[aria-expanded='true'] {
334
+ background: var(--dt-accent);
335
+ color: var(--dt-text-on-accent);
336
+ }
337
+
338
+ .dt-select-trigger[aria-expanded='true']::before,
339
+ .dt-select-trigger[aria-expanded='true']::after {
340
+ border-color: var(--dt-text-on-accent);
341
+ }
342
+
343
+ .dt-select-label {
344
+ overflow: hidden;
345
+ text-overflow: ellipsis;
346
+ white-space: nowrap;
347
+ }
348
+
349
+ .dt-select-chevron {
350
+ color: currentColor;
351
+ font-size: 10px;
352
+ transition: transform 140ms ease;
353
+ opacity: 0.7;
354
+ }
355
+
356
+ .dt-select-trigger[aria-expanded='true'] .dt-select-chevron {
357
+ transform: rotate(180deg);
358
+ }
359
+ `;var xt="dt-select-trigger",K="dt-select-label",wt="dt-select-chevron",yt="dt-select-menu",kt="dt-select-option",Ct="dt-select-option--active",U=!1;function Et(){if(U)return;let r=document.createElement("style");r.setAttribute("data-dt-select",""),r.textContent=j,document.head.appendChild(r),U=!0}var y=class extends HTMLElement{_menu=null;_trigger=null;_options=[];_open=!1;_menuId="";static get observedAttributes(){return["value","placeholder","disabled","align"]}get value(){return this.getAttribute("value")??""}set value(t){this.setAttribute("value",t)}get placeholder(){return this.getAttribute("placeholder")??"Select\u2026"}set placeholder(t){this.setAttribute("placeholder",t)}get disabled(){return this.hasAttribute("disabled")}set disabled(t){t?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get align(){return this.getAttribute("align")==="right"?"right":"left"}set align(t){this.setAttribute("align",t)}get options(){return this._options}set options(t){this._options=t,this._updateLabel(),this._open&&this._renderMenuItems()}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=q,t.appendChild(e);let n=document.createElement("button");n.type="button",n.className=xt,n.setAttribute("aria-haspopup","listbox"),n.setAttribute("aria-expanded","false");let i=document.createElement("span");i.className=K,n.appendChild(i);let s=document.createElement("span");s.className=wt,s.setAttribute("aria-hidden","true"),s.textContent="\u25BE",n.appendChild(s),t.appendChild(n),this._trigger=n,this._menuId=`dt-sel-${Math.random().toString(36).slice(2,9)}`}connectedCallback(){Et(),this._trigger.addEventListener("click",this._onTriggerClick),this._updateLabel()}disconnectedCallback(){this._trigger.removeEventListener("click",this._onTriggerClick),this._close()}attributeChangedCallback(t){t==="value"&&(this._updateLabel(),this._open&&this._renderMenuItems()),t==="placeholder"&&!this.value&&this._updateLabel(),t==="disabled"&&this.disabled&&this._close()}_updateLabel(){let t=this._trigger.querySelector(`.${K}`),e=this._options.find(n=>n.value===this.value);t.textContent=e?.label??this.placeholder}_onTriggerClick=()=>{this.disabled||(this._open?this._close():this._openMenu())};_openMenu(){if(this._open)return;let t=document.createElement("div");t.className=yt,t.id=this._menuId,t.setAttribute("role","listbox"),document.body.appendChild(t),this._menu=t,this._renderMenuItems(),this._position(),requestAnimationFrame(()=>{t.setAttribute("data-open","")}),this._open=!0,this._trigger.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{document.addEventListener("mousedown",this._onOutsideClick),document.addEventListener("keydown",this._onKeyDown)})}_close(){if(this._open){if(document.removeEventListener("mousedown",this._onOutsideClick),document.removeEventListener("keydown",this._onKeyDown),this._menu){this._menu.removeAttribute("data-open");let t=this._menu;setTimeout(()=>t.remove(),140),this._menu=null}this._open=!1,this._trigger.setAttribute("aria-expanded","false")}}_onOutsideClick=t=>{let e=t.target;this._menu?.contains(e)||this.contains(e)||this._close()};_onKeyDown=t=>{t.key==="Escape"&&(this._close(),this._trigger.focus())};_renderMenuItems(){let t=this._menu;if(t){t.innerHTML="";for(let e of this._options){let n=document.createElement("button");n.type="button",n.className=kt,n.setAttribute("role","option"),n.setAttribute("aria-selected",String(e.value===this.value)),e.value===this.value&&n.classList.add(Ct);let i=document.createElement("span");i.textContent=e.label,n.appendChild(i),n.addEventListener("click",()=>{this._selectValue(e.value)}),t.appendChild(n)}}}_selectValue(t){let e=this.value;this.value=t,this._updateLabel(),this._close(),t!==e&&this.dispatchEvent(new CustomEvent("dt-change",{detail:{value:t},bubbles:!0,composed:!0}))}_position(){let t=this._menu;if(!t)return;let e=this.getBoundingClientRect(),n=10,i=Math.max(e.width,240),s=e.bottom+n,o=t.scrollHeight||260,a=window.innerHeight;if(s+o>a&&e.top-o-n>0&&(s=e.top-o-n),t.style.minWidth=`${i}px`,this.align==="right"){let d=window.innerWidth;t.style.right=`${d-e.right}px`,t.style.left="auto"}else t.style.left=`${e.left}px`,t.style.right="auto";t.style.top=`${s}px`}};var Y=`:host {
360
+ display: block;
361
+ margin-bottom: 12px;
362
+ }
363
+
364
+ .dt-grid-inner {
365
+ display: grid;
366
+ gap: var(--grid-gap, 12px);
367
+ grid-template-columns: repeat(auto-fit, minmax(var(--min-width, 220px), 1fr));
368
+ }
369
+
370
+ :host([cols='1']) .dt-grid-inner {
371
+ grid-template-columns: repeat(1, 1fr);
372
+ }
373
+
374
+ :host([cols='2']) .dt-grid-inner {
375
+ grid-template-columns: repeat(2, 1fr);
376
+ }
377
+
378
+ :host([cols='3']) .dt-grid-inner {
379
+ grid-template-columns: repeat(3, 1fr);
380
+ }
381
+
382
+ :host([cols='4']) .dt-grid-inner {
383
+ grid-template-columns: repeat(4, 1fr);
384
+ }
385
+
386
+ :host([cols='5']) .dt-grid-inner {
387
+ grid-template-columns: repeat(5, 1fr);
388
+ }
389
+
390
+ :host([cols='6']) .dt-grid-inner {
391
+ grid-template-columns: repeat(6, 1fr);
392
+ }
393
+
394
+ @media (max-width: 480px) {
395
+ :host([cols='2']) .dt-grid-inner,
396
+ :host([cols='3']) .dt-grid-inner,
397
+ :host([cols='4']) .dt-grid-inner,
398
+ :host([cols='5']) .dt-grid-inner,
399
+ :host([cols='6']) .dt-grid-inner {
400
+ grid-template-columns: 1fr;
401
+ }
402
+ }
403
+
404
+ :host([gap='0']) .dt-grid-inner {
405
+ --grid-gap: 0;
406
+ }
407
+ :host([gap='4']) .dt-grid-inner {
408
+ --grid-gap: 4px;
409
+ }
410
+ :host([gap='8']) .dt-grid-inner {
411
+ --grid-gap: 8px;
412
+ }
413
+ :host([gap='12']) .dt-grid-inner {
414
+ --grid-gap: 12px;
415
+ }
416
+ :host([gap='16']) .dt-grid-inner {
417
+ --grid-gap: 16px;
418
+ }
419
+ :host([gap='20']) .dt-grid-inner {
420
+ --grid-gap: 20px;
421
+ }
422
+ :host([gap='24']) .dt-grid-inner {
423
+ --grid-gap: 24px;
424
+ }
425
+ :host([gap='32']) .dt-grid-inner {
426
+ --grid-gap: 32px;
427
+ }
428
+
429
+ :host([min-width='150']) .dt-grid-inner {
430
+ --min-width: 150px;
431
+ }
432
+ :host([min-width='180']) .dt-grid-inner {
433
+ --min-width: 180px;
434
+ }
435
+ :host([min-width='200']) .dt-grid-inner {
436
+ --min-width: 200px;
437
+ }
438
+ :host([min-width='220']) .dt-grid-inner {
439
+ --min-width: 220px;
440
+ }
441
+ :host([min-width='260']) .dt-grid-inner {
442
+ --min-width: 260px;
443
+ }
444
+ :host([min-width='300']) .dt-grid-inner {
445
+ --min-width: 300px;
446
+ }
447
+
448
+ ::slotted(*) {
449
+ min-width: 0;
450
+ }
451
+ `;var St="dt-grid-inner",k=class extends HTMLElement{static get observedAttributes(){return["cols","gap","min-width"]}get cols(){let t=this.getAttribute("cols");return t==="1"||t==="2"||t==="3"||t==="4"||t==="5"||t==="6"?t:null}set cols(t){t===null?this.removeAttribute("cols"):this.setAttribute("cols",t)}get gap(){let t=this.getAttribute("gap");return t==="0"||t==="4"||t==="8"||t==="12"||t==="20"||t==="24"||t==="32"?t:"16"}set gap(t){this.setAttribute("gap",t)}get minWidth(){let t=this.getAttribute("min-width");return t==="150"||t==="180"||t==="200"||t==="260"||t==="300"?t:"220"}set minWidth(t){this.setAttribute("min-width",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=Y,t.appendChild(e);let n=document.createElement("div");n.className=St,n.innerHTML="<slot></slot>",t.appendChild(n)}};var Z=`:host {
452
+ display: block;
453
+ margin-bottom: 12px;
454
+ }
455
+
456
+ .dt-stack-inner {
457
+ display: flex;
458
+ flex-direction: var(--flex-direction, column);
459
+ gap: var(--stack-gap, 12px);
460
+ align-items: var(--align-items, stretch);
461
+ }
462
+
463
+ :host([direction='column']) .dt-stack-inner {
464
+ --flex-direction: column;
465
+ }
466
+ :host([direction='row']) .dt-stack-inner {
467
+ --flex-direction: row;
468
+ }
469
+
470
+ :host([gap='0']) .dt-stack-inner {
471
+ --stack-gap: 0;
472
+ }
473
+ :host([gap='4']) .dt-stack-inner {
474
+ --stack-gap: 4px;
475
+ }
476
+ :host([gap='8']) .dt-stack-inner {
477
+ --stack-gap: 8px;
478
+ }
479
+ :host([gap='12']) .dt-stack-inner {
480
+ --stack-gap: 12px;
481
+ }
482
+ :host([gap='16']) .dt-stack-inner {
483
+ --stack-gap: 16px;
484
+ }
485
+ :host([gap='20']) .dt-stack-inner {
486
+ --stack-gap: 20px;
487
+ }
488
+ :host([gap='24']) .dt-stack-inner {
489
+ --stack-gap: 24px;
490
+ }
491
+ :host([gap='32']) .dt-stack-inner {
492
+ --stack-gap: 32px;
493
+ }
494
+
495
+ :host([align='start']) .dt-stack-inner {
496
+ --align-items: flex-start;
497
+ }
498
+ :host([align='center']) .dt-stack-inner {
499
+ --align-items: center;
500
+ }
501
+ :host([align='end']) .dt-stack-inner {
502
+ --align-items: flex-end;
503
+ }
504
+ :host([align='stretch']) .dt-stack-inner {
505
+ --align-items: stretch;
506
+ }
507
+
508
+ @media (max-width: 480px) {
509
+ :host([direction='row']) .dt-stack-inner {
510
+ --flex-direction: column;
511
+ }
512
+ }
513
+
514
+ ::slotted(*) {
515
+ min-width: 0;
516
+ }
517
+ `;var Dt="dt-stack-inner";function $(r){return r==="row"||r==="horizontal"?"row":"column"}var C=class extends HTMLElement{static get observedAttributes(){return["direction","gap","align"]}get direction(){return $(this.getAttribute("direction"))}set direction(t){this.setAttribute("direction",$(t))}get gap(){let t=this.getAttribute("gap");return t==="0"||t==="4"||t==="8"||t==="12"||t==="20"||t==="24"||t==="32"?t:"16"}set gap(t){this.setAttribute("gap",t)}get align(){let t=this.getAttribute("align");return t==="start"||t==="center"||t==="end"?t:"stretch"}set align(t){this.setAttribute("align",t)}connectedCallback(){this.#t()}attributeChangedCallback(t){t==="direction"&&this.#t()}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=Z,t.appendChild(e);let n=document.createElement("div");n.className=Dt,n.innerHTML="<slot></slot>",t.appendChild(n)}#t(){let t=this.getAttribute("direction"),e=$(t);t!==null&&t!==e&&this.setAttribute("direction",e)}};var Q=`:host {
518
+ display: block;
519
+ }
520
+
521
+ .dt-stat-inner {
522
+ background: var(--dt-surface);
523
+ border: 1px solid var(--dt-accent);
524
+ border-radius: 2px;
525
+ padding: 12px;
526
+ font-family: var(--font-ui, 'Work Sans', system-ui, sans-serif);
527
+ display: flex;
528
+ flex-direction: column;
529
+ gap: 4px;
530
+ position: relative;
531
+ }
532
+
533
+ /* Corner accents */
534
+ .dt-stat-inner::before {
535
+ content: '';
536
+ position: absolute;
537
+ top: 0;
538
+ left: 0;
539
+ width: 6px;
540
+ height: 6px;
541
+ border-top: 1px solid var(--dt-accent);
542
+ border-left: 1px solid var(--dt-accent);
543
+ }
544
+
545
+ .dt-stat-inner .label {
546
+ font-size: 0.625rem;
547
+ font-weight: 600;
548
+ color: var(--dt-text-muted);
549
+ text-transform: uppercase;
550
+ letter-spacing: 0.12em;
551
+ }
552
+
553
+ .dt-stat-inner .value {
554
+ font-size: 1.5rem;
555
+ font-weight: 600;
556
+ color: var(--dt-accent);
557
+ line-height: 1.1;
558
+ white-space: nowrap;
559
+ overflow: hidden;
560
+ text-overflow: ellipsis;
561
+ font-family: var(--font-display, 'Sora', system-ui, sans-serif);
562
+ }
563
+
564
+ .dt-stat-inner .description {
565
+ font-size: 0.75rem;
566
+ color: var(--dt-text-secondary);
567
+ line-height: 1.3;
568
+ }
569
+
570
+ /* Size variants */
571
+ :host([size='sm']) .dt-stat-inner .value {
572
+ font-size: 1.125rem;
573
+ }
574
+
575
+ :host([size='sm']) .dt-stat-inner {
576
+ padding: 8px;
577
+ }
578
+
579
+ :host([size='lg']) .dt-stat-inner .value {
580
+ font-size: 2rem;
581
+ }
582
+
583
+ :host([size='lg']) .dt-stat-inner {
584
+ padding: 16px;
585
+ }
586
+
587
+ /* Variant: outlined */
588
+ :host([variant='outlined']) .dt-stat-inner {
589
+ background: transparent;
590
+ border-style: dashed;
591
+ }
592
+
593
+ /* Variant: filled */
594
+ :host([variant='filled']) .dt-stat-inner {
595
+ background: var(--dt-accent-subtle);
596
+ border-style: solid;
597
+ }
598
+
599
+ /* Trend indicators */
600
+ .dt-stat-inner .trend {
601
+ display: inline-flex;
602
+ align-items: center;
603
+ gap: 3px;
604
+ font-size: 0.6875rem;
605
+ font-weight: 600;
606
+ margin-top: 2px;
607
+ text-transform: uppercase;
608
+ letter-spacing: 0.05em;
609
+ }
610
+
611
+ .dt-stat-inner .trend.positive {
612
+ color: var(--dt-success);
613
+ }
614
+
615
+ .dt-stat-inner .trend.negative {
616
+ color: var(--dt-danger);
617
+ }
618
+
619
+ .dt-stat-inner .trend.neutral {
620
+ color: var(--dt-text-muted);
621
+ }
622
+ `;var At="dt-stat-inner",E=class extends HTMLElement{static get observedAttributes(){return["label","value","description","size","variant","trend","trend-value"]}_container;_labelEl;_valueEl;_descEl;_trendEl;get label(){return this.getAttribute("label")}set label(t){t===null?this.removeAttribute("label"):this.setAttribute("label",t)}get value(){return this.getAttribute("value")}set value(t){t===null?this.removeAttribute("value"):this.setAttribute("value",t)}get description(){return this.getAttribute("description")}set description(t){t===null?this.removeAttribute("description"):this.setAttribute("description",t)}get size(){let t=this.getAttribute("size");return t==="sm"||t==="lg"?t:"md"}set size(t){this.setAttribute("size",t)}get variant(){let t=this.getAttribute("variant");return t==="outlined"||t==="filled"?t:"default"}set variant(t){this.setAttribute("variant",t)}get trend(){let t=this.getAttribute("trend");return t==="up"||t==="down"||t==="neutral"?t:null}set trend(t){t===null?this.removeAttribute("trend"):this.setAttribute("trend",t)}get trendValue(){return this.getAttribute("trend-value")}set trendValue(t){t===null?this.removeAttribute("trend-value"):this.setAttribute("trend-value",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=Q,t.appendChild(e),this._container=document.createElement("div"),this._container.className=At,this._labelEl=document.createElement("div"),this._labelEl.className="label",this._container.appendChild(this._labelEl),this._valueEl=document.createElement("div"),this._valueEl.className="value",this._container.appendChild(this._valueEl),this._descEl=document.createElement("div"),this._descEl.className="description",this._container.appendChild(this._descEl),this._trendEl=document.createElement("div"),this._trendEl.className="trend",this._container.appendChild(this._trendEl),t.appendChild(this._container),this._render()}attributeChangedCallback(t,e,n){(t==="label"||t==="value"||t==="description"||t==="size"||t==="variant"||t==="trend"||t==="trend-value")&&this._render()}_render(){this._labelEl.textContent=this.label??"",this._labelEl.style.display=this.label?"block":"none",this._valueEl.textContent=this.value??"",this._valueEl.style.display=this.value?"block":"none",this._descEl.textContent=this.description??"",this._descEl.style.display=this.description?"block":"none";let t=this.trend,e=this.trendValue;if(t&&e){this._trendEl.style.display="inline-flex",this._trendEl.className=`trend ${t==="up"?"positive":t==="down"?"negative":"neutral"}`;let n="";t==="up"?n="\u2191":t==="down"?n="\u2193":n="\u2192",this._trendEl.textContent=`${n} ${e}`}else this._trendEl.style.display="none"}};var tt=`:host {
623
+ display: inline-flex;
624
+ vertical-align: middle;
625
+ }
626
+
627
+ .dt-badge-inner {
628
+ display: inline-flex;
629
+ align-items: center;
630
+ padding: 2px 6px;
631
+ border: 1px solid;
632
+ border-radius: 2px;
633
+ font-size: 0.6875rem;
634
+ font-weight: 600;
635
+ font-family: var(
636
+ --font-mono,
637
+ 'SF Mono',
638
+ Monaco,
639
+ 'Cascadia Code',
640
+ 'Roboto Mono',
641
+ Consolas,
642
+ monospace
643
+ );
644
+ line-height: 1.2;
645
+ white-space: nowrap;
646
+ text-transform: uppercase;
647
+ letter-spacing: 0.1em;
648
+ }
649
+
650
+ /* Variant: accent (default) */
651
+ :host([variant='accent']) .dt-badge-inner,
652
+ .dt-badge-inner {
653
+ background: var(--dt-accent-subtle);
654
+ border-color: var(--dt-accent);
655
+ color: var(--dt-accent);
656
+ }
657
+
658
+ /* Variant: success */
659
+ :host([variant='success']) .dt-badge-inner {
660
+ background: var(--dt-success-subtle);
661
+ border-color: var(--dt-success);
662
+ color: var(--dt-success);
663
+ }
664
+
665
+ /* Variant: danger */
666
+ :host([variant='danger']) .dt-badge-inner {
667
+ background: var(--dt-danger-subtle);
668
+ border-color: var(--dt-danger);
669
+ color: var(--dt-danger);
670
+ }
671
+
672
+ /* Variant: warning */
673
+ :host([variant='warning']) .dt-badge-inner {
674
+ background: var(--dt-warning-subtle);
675
+ border-color: var(--dt-warning);
676
+ color: var(--dt-warning);
677
+ }
678
+
679
+ /* Variant: info */
680
+ :host([variant='info']) .dt-badge-inner {
681
+ background: var(--dt-info-subtle);
682
+ border-color: var(--dt-info);
683
+ color: var(--dt-info);
684
+ }
685
+
686
+ /* Variant: default/neutral */
687
+ :host([variant='default']) .dt-badge-inner,
688
+ :host([variant='neutral']) .dt-badge-inner {
689
+ background: transparent;
690
+ border-color: var(--dt-border);
691
+ color: var(--dt-text-secondary);
692
+ }
693
+
694
+ /* Size variants */
695
+ :host([size='sm']) .dt-badge-inner {
696
+ padding: 1px 4px;
697
+ font-size: 0.625rem;
698
+ }
699
+
700
+ :host([size='lg']) .dt-badge-inner {
701
+ padding: 3px 8px;
702
+ font-size: 0.75rem;
703
+ }
704
+ `;var Mt="dt-badge-inner",S=class extends HTMLElement{static get observedAttributes(){return["variant","size","text"]}_container;_slot;get variant(){let t=this.getAttribute("variant");return t==="success"||t==="danger"||t==="warning"||t==="info"||t==="default"||t==="neutral"?t:"accent"}set variant(t){this.setAttribute("variant",t)}get size(){let t=this.getAttribute("size");return t==="sm"||t==="lg"?t:"md"}set size(t){this.setAttribute("size",t)}get text(){return this.getAttribute("text")}set text(t){t===null?this.removeAttribute("text"):this.setAttribute("text",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=tt,t.appendChild(e),this._container=document.createElement("span"),this._container.className=Mt;let n=this.text;n!==null?this._container.textContent=n:(this._slot=document.createElement("slot"),this._container.appendChild(this._slot)),t.appendChild(this._container)}attributeChangedCallback(t,e,n){t==="text"&&this._render()}_render(){let t=this.text;t!==null&&(this._container.textContent=t)}};var et=`:host {
705
+ display: inline-flex;
706
+ vertical-align: middle;
707
+ }
708
+
709
+ .dt-button-inner {
710
+ display: inline-flex;
711
+ align-items: center;
712
+ justify-content: center;
713
+ gap: 4px;
714
+ padding: 6px 12px;
715
+ border: 1px solid var(--dt-accent);
716
+ border-radius: 2px;
717
+ font-size: 0.8125rem;
718
+ font-weight: 600;
719
+ font-family: var(--font-ui, 'Work Sans', system-ui, sans-serif);
720
+ line-height: 1.2;
721
+ cursor: pointer;
722
+ transition: all 0.1s ease;
723
+ background: var(--dt-surface);
724
+ color: var(--dt-accent);
725
+ text-transform: uppercase;
726
+ letter-spacing: 0.08em;
727
+ position: relative;
728
+ }
729
+
730
+ /* Corner accents */
731
+ .dt-button-inner::before {
732
+ content: '';
733
+ position: absolute;
734
+ top: 0;
735
+ left: 0;
736
+ width: 4px;
737
+ height: 4px;
738
+ border-top: 1px solid var(--dt-accent);
739
+ border-left: 1px solid var(--dt-accent);
740
+ }
741
+
742
+ .dt-button-inner::after {
743
+ content: '';
744
+ position: absolute;
745
+ bottom: 0;
746
+ right: 0;
747
+ width: 4px;
748
+ height: 4px;
749
+ border-bottom: 1px solid var(--dt-accent);
750
+ border-right: 1px solid var(--dt-accent);
751
+ }
752
+
753
+ .dt-button-inner:hover:not(:disabled) {
754
+ background: var(--dt-accent);
755
+ color: var(--dt-text-on-accent);
756
+ }
757
+
758
+ .dt-button-inner:hover:not(:disabled)::before,
759
+ .dt-button-inner:hover:not(:disabled)::after {
760
+ border-color: var(--dt-text-on-accent);
761
+ }
762
+
763
+ .dt-button-inner:active:not(:disabled) {
764
+ background: var(--dt-accent-active);
765
+ }
766
+
767
+ .dt-button-inner:disabled {
768
+ opacity: 0.4;
769
+ cursor: not-allowed;
770
+ border-color: var(--dt-border);
771
+ color: var(--dt-text-muted);
772
+ }
773
+
774
+ .dt-button-inner:disabled::before,
775
+ .dt-button-inner:disabled::after {
776
+ border-color: var(--dt-border);
777
+ }
778
+
779
+ /* Variant: primary - filled accent */
780
+ :host([variant='primary']) .dt-button-inner {
781
+ background: var(--dt-accent);
782
+ color: var(--dt-text-on-accent);
783
+ }
784
+
785
+ :host([variant='primary']) .dt-button-inner:hover:not(:disabled) {
786
+ background: var(--dt-accent-hover);
787
+ }
788
+
789
+ /* Variant: secondary - outlined */
790
+ :host([variant='secondary']) .dt-button-inner {
791
+ background: transparent;
792
+ border-color: var(--dt-border);
793
+ color: var(--dt-text);
794
+ }
795
+
796
+ :host([variant='secondary']) .dt-button-inner:hover:not(:disabled) {
797
+ background: var(--dt-surface-hover);
798
+ border-color: var(--dt-accent);
799
+ color: var(--dt-accent);
800
+ }
801
+
802
+ /* Variant: ghost - minimal */
803
+ :host([variant='ghost']) .dt-button-inner {
804
+ background: transparent;
805
+ border-color: transparent;
806
+ color: var(--dt-text-secondary);
807
+ }
808
+
809
+ :host([variant='ghost']) .dt-button-inner:hover:not(:disabled) {
810
+ background: var(--dt-surface);
811
+ border-color: var(--dt-border);
812
+ color: var(--dt-text);
813
+ }
814
+
815
+ :host([variant='ghost']) .dt-button-inner::before,
816
+ :host([variant='ghost']) .dt-button-inner::after {
817
+ display: none;
818
+ }
819
+
820
+ /* Variant: danger */
821
+ :host([variant='danger']) .dt-button-inner {
822
+ background: transparent;
823
+ border-color: var(--dt-danger);
824
+ color: var(--dt-danger);
825
+ }
826
+
827
+ :host([variant='danger']) .dt-button-inner:hover:not(:disabled) {
828
+ background: var(--dt-danger);
829
+ color: var(--dt-text-on-accent);
830
+ }
831
+
832
+ :host([variant='danger']) .dt-button-inner::before,
833
+ :host([variant='danger']) .dt-button-inner::after {
834
+ border-color: var(--dt-danger);
835
+ }
836
+
837
+ :host([variant='danger']) .dt-button-inner:hover:not(:disabled)::before,
838
+ :host([variant='danger']) .dt-button-inner:hover:not(:disabled)::after {
839
+ border-color: var(--dt-text-on-accent);
840
+ }
841
+
842
+ /* Size: sm */
843
+ :host([size='sm']) .dt-button-inner {
844
+ padding: 4px 8px;
845
+ font-size: 0.75rem;
846
+ }
847
+
848
+ /* Size: lg */
849
+ :host([size='lg']) .dt-button-inner {
850
+ padding: 8px 16px;
851
+ font-size: 0.875rem;
852
+ }
853
+
854
+ :host([fullwidth]) .dt-button-inner {
855
+ width: 100%;
856
+ }
857
+
858
+ ::slotted([slot='icon']) {
859
+ display: inline-flex;
860
+ width: 1em;
861
+ height: 1em;
862
+ }
863
+ `;var Tt="dt-button-inner",D=class extends HTMLElement{static get observedAttributes(){return["variant","size","disabled","fullwidth","type"]}_button;_slot;get variant(){let t=this.getAttribute("variant");return t==="secondary"||t==="ghost"||t==="danger"?t:"primary"}set variant(t){this.setAttribute("variant",t)}get size(){let t=this.getAttribute("size");return t==="sm"||t==="lg"?t:"md"}set size(t){this.setAttribute("size",t)}get disabled(){return this.hasAttribute("disabled")}set disabled(t){t?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get fullwidth(){return this.hasAttribute("fullwidth")}set fullwidth(t){t?this.setAttribute("fullwidth",""):this.removeAttribute("fullwidth")}get type(){let t=this.getAttribute("type");return t==="submit"||t==="reset"?t:"button"}set type(t){this.setAttribute("type",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=et,t.appendChild(e),this._button=document.createElement("button"),this._button.className=Tt,this._button.type=this.type,this._button.disabled=this.disabled,this._slot=document.createElement("slot"),this._button.appendChild(this._slot),t.appendChild(this._button)}attributeChangedCallback(t,e,n){switch(t){case"disabled":this._button.disabled=this.disabled;break;case"type":this._button.type=this.type;break}}};var nt=`:host {
864
+ display: block;
865
+ }
866
+
867
+ .dt-divider-inner {
868
+ border: none;
869
+ margin: 0;
870
+ flex-shrink: 0;
871
+ }
872
+
873
+ /* Horizontal (default) */
874
+ :host([direction='horizontal']) .dt-divider-inner,
875
+ .dt-divider-inner {
876
+ width: 100%;
877
+ height: 1px;
878
+ background: var(--dt-accent);
879
+ opacity: 0.5;
880
+ }
881
+
882
+ /* Vertical */
883
+ :host([direction='vertical']) .dt-divider-inner {
884
+ width: 1px;
885
+ height: 100%;
886
+ min-height: 1em;
887
+ background: var(--dt-accent);
888
+ opacity: 0.5;
889
+ }
890
+
891
+ /* Style variants */
892
+ :host([style-variant='subtle']) .dt-divider-inner {
893
+ background: var(--dt-border);
894
+ opacity: 1;
895
+ }
896
+
897
+ :host([style-variant='strong']) .dt-divider-inner {
898
+ background: var(--dt-accent);
899
+ opacity: 1;
900
+ height: 2px;
901
+ }
902
+
903
+ :host([direction='vertical'][style-variant='strong']) .dt-divider-inner {
904
+ width: 2px;
905
+ height: 100%;
906
+ }
907
+
908
+ /* Spacing */
909
+ :host([spacing='sm']) .dt-divider-inner {
910
+ margin: 6px 0;
911
+ }
912
+ :host([spacing='md']) .dt-divider-inner {
913
+ margin: 12px 0;
914
+ }
915
+ :host([spacing='lg']) .dt-divider-inner {
916
+ margin: 18px 0;
917
+ }
918
+
919
+ :host([direction='vertical'][spacing='sm']) .dt-divider-inner {
920
+ margin: 0 6px;
921
+ }
922
+ :host([direction='vertical'][spacing='md']) .dt-divider-inner {
923
+ margin: 0 12px;
924
+ }
925
+ :host([direction='vertical'][spacing='lg']) .dt-divider-inner {
926
+ margin: 0 18px;
927
+ }
928
+ `;var zt="dt-divider-inner",A=class extends HTMLElement{static get observedAttributes(){return["direction","style-variant","spacing"]}get direction(){return this.getAttribute("direction")==="vertical"?"vertical":"horizontal"}set direction(t){this.setAttribute("direction",t)}get styleVariant(){let t=this.getAttribute("style-variant");return t==="subtle"||t==="strong"?t:"default"}set styleVariant(t){this.setAttribute("style-variant",t)}get spacing(){let t=this.getAttribute("spacing");return t==="sm"||t==="md"||t==="lg"?t:null}set spacing(t){t===null?this.removeAttribute("spacing"):this.setAttribute("spacing",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=nt,t.appendChild(e);let n=document.createElement("hr");n.className=zt,t.appendChild(n)}};var rt=`:host {
929
+ display: block;
930
+ min-height: 180px;
931
+ color: var(--dt-text);
932
+ font-family: var(
933
+ --font-mono,
934
+ 'SF Mono',
935
+ Monaco,
936
+ 'Cascadia Code',
937
+ 'Roboto Mono',
938
+ Consolas,
939
+ monospace
940
+ );
941
+ }
942
+
943
+ .dt-table-view {
944
+ display: flex;
945
+ flex-direction: column;
946
+ min-height: inherit;
947
+ height: 100%;
948
+ overflow: hidden;
949
+ background: var(--dt-surface);
950
+ border: 1px solid var(--dt-border);
951
+ border-radius: 2px;
952
+ position: relative;
953
+ }
954
+
955
+ .dt-table-view::before,
956
+ .dt-table-view::after {
957
+ content: '';
958
+ position: absolute;
959
+ width: 8px;
960
+ height: 8px;
961
+ pointer-events: none;
962
+ z-index: 3;
963
+ }
964
+
965
+ .dt-table-view::before {
966
+ top: -1px;
967
+ left: -1px;
968
+ border-top: 2px solid var(--dt-accent);
969
+ border-left: 2px solid var(--dt-accent);
970
+ }
971
+
972
+ .dt-table-view::after {
973
+ right: -1px;
974
+ bottom: -1px;
975
+ border-right: 2px solid var(--dt-accent);
976
+ border-bottom: 2px solid var(--dt-accent);
977
+ }
978
+
979
+ .dt-table-scroll {
980
+ min-height: inherit;
981
+ height: 100%;
982
+ overflow: auto;
983
+ }
984
+
985
+ .dt-table-header,
986
+ .dt-table-row {
987
+ display: grid;
988
+ grid-template-columns: var(--dt-table-columns, minmax(0, 1fr));
989
+ min-width: fit-content;
990
+ }
991
+
992
+ .dt-table-header {
993
+ position: sticky;
994
+ top: 0;
995
+ z-index: 2;
996
+ background: color-mix(in srgb, var(--dt-surface) 88%, var(--dt-accent) 12%);
997
+ border-bottom: 1px solid var(--dt-border);
998
+ }
999
+
1000
+ .dt-table-header-cell,
1001
+ .dt-table-cell {
1002
+ min-width: 0;
1003
+ padding: 10px 12px;
1004
+ overflow: hidden;
1005
+ text-overflow: ellipsis;
1006
+ white-space: nowrap;
1007
+ font-size: 0.8125rem;
1008
+ }
1009
+
1010
+ .dt-table-header-cell {
1011
+ color: var(--dt-accent);
1012
+ font-size: 0.75rem;
1013
+ font-weight: 600;
1014
+ letter-spacing: 0.1em;
1015
+ text-transform: uppercase;
1016
+ }
1017
+
1018
+ .dt-table-header-cell--sortable {
1019
+ cursor: pointer;
1020
+ user-select: none;
1021
+ }
1022
+
1023
+ .dt-table-header-cell--sortable:hover {
1024
+ background: var(--dt-surface-hover);
1025
+ }
1026
+
1027
+ .dt-table-header-label {
1028
+ display: inline-flex;
1029
+ align-items: center;
1030
+ gap: 6px;
1031
+ }
1032
+
1033
+ .dt-table-sort-indicator {
1034
+ color: var(--dt-text-secondary);
1035
+ font-size: 0.7rem;
1036
+ }
1037
+
1038
+ .dt-table-body {
1039
+ position: relative;
1040
+ }
1041
+
1042
+ .dt-table-canvas {
1043
+ position: relative;
1044
+ }
1045
+
1046
+ .dt-table-row {
1047
+ position: absolute;
1048
+ left: 0;
1049
+ right: 0;
1050
+ border-bottom: 1px solid var(--dt-border-subtle);
1051
+ }
1052
+
1053
+ .dt-table-row--clickable {
1054
+ cursor: pointer;
1055
+ }
1056
+
1057
+ .dt-table-row--clickable:hover {
1058
+ background: var(--dt-surface-hover);
1059
+ }
1060
+
1061
+ :host([striped]) .dt-table-row:nth-child(even) {
1062
+ background: color-mix(in srgb, var(--dt-surface) 92%, var(--dt-accent) 8%);
1063
+ }
1064
+
1065
+ :host([bordered]) .dt-table-header-cell,
1066
+ :host([bordered]) .dt-table-cell {
1067
+ border-right: 1px solid var(--dt-border-subtle);
1068
+ }
1069
+
1070
+ :host([bordered]) .dt-table-header-cell:last-child,
1071
+ :host([bordered]) .dt-table-cell:last-child {
1072
+ border-right: 0;
1073
+ }
1074
+
1075
+ .dt-table-cell[data-align='center'],
1076
+ .dt-table-header-cell[data-align='center'] {
1077
+ text-align: center;
1078
+ }
1079
+
1080
+ .dt-table-cell[data-align='right'],
1081
+ .dt-table-header-cell[data-align='right'] {
1082
+ text-align: right;
1083
+ }
1084
+
1085
+ .dt-table-empty {
1086
+ display: flex;
1087
+ align-items: center;
1088
+ justify-content: center;
1089
+ min-height: 140px;
1090
+ padding: 20px;
1091
+ color: var(--dt-text-muted);
1092
+ text-transform: uppercase;
1093
+ letter-spacing: 0.08em;
1094
+ font-size: 0.75rem;
1095
+ }
1096
+ `;function Lt(r){return r==null||r===!1?null:r===!0?"":String(r)}function Ht(r,t){let e=r.querySelectorAll("*");for(let n of e){let i=n.getAttribute("data-field");if(i){let s=t[i];n.textContent=s==null?"":String(s)}for(let s of n.getAttributeNames()){if(s==="data-field"||!s.startsWith("data-field-"))continue;let o=s.slice(11);if(!o)continue;let a=n.getAttribute(s);if(!a)continue;let d=Lt(t[a]);d===null?n.removeAttribute(o):n.setAttribute(o,d)}}}function M(r,t){let e=r.content.cloneNode(!0);return Ht(e,t),e}var m=class{_count=0;_estimateSize=56;_overscan=5;_fixedSize=null;_viewportHeight=0;_scrollTop=0;_sizes=new Map;constructor(t={}){this._count=t.count??0,this._estimateSize=t.estimateSize??56,this._overscan=t.overscan??5,this._fixedSize=t.fixedSize??null}setCount(t){this._count=Math.max(0,t);for(let e of this._sizes.keys())e>=this._count&&this._sizes.delete(e)}setViewportHeight(t){this._viewportHeight=Math.max(0,t)}setScrollTop(t){this._scrollTop=Math.max(0,t)}setEstimateSize(t){this._estimateSize=Math.max(1,t)}setFixedSize(t){this._fixedSize=t&&t>0?t:null}resetMeasurements(){this._sizes.clear()}measure(t,e){if(this._fixedSize!==null||t<0||t>=this._count)return 0;let n=Math.max(1,Math.round(e)),i=this._sizes.get(t);return i===n?0:(this._sizes.set(t,n),this.getOffset(t+1)<=this._scrollTop?n-(i??this._estimateSize):0)}getOffset(t){if(t<=0)return 0;let e=Math.min(t,this._count);if(this._fixedSize!==null)return e*this._fixedSize;let n=0;for(let i=0;i<e;i+=1)n+=this._sizes.get(i)??this._estimateSize;return n}getTotalHeight(){return this.getOffset(this._count)}getRange(){if(this._count===0)return{start:0,end:0,paddingTop:0,paddingBottom:0,totalHeight:0};if(this._fixedSize!==null){let d=Math.max(1,Math.ceil(this._viewportHeight/this._fixedSize)),c=Math.max(0,Math.floor(this._scrollTop/this._fixedSize)-this._overscan),l=Math.min(this._count,c+d+this._overscan*2),f=c*this._fixedSize,_=this._count*this._fixedSize,h=Math.max(0,_-f-(l-c)*this._fixedSize);return{start:c,end:l,paddingTop:f,paddingBottom:h,totalHeight:_}}let t=0,e=0;for(;t<this._count;){let d=this._sizes.get(t)??this._estimateSize;if(e+d>this._scrollTop)break;e+=d,t+=1}t=Math.max(0,t-this._overscan);let n=this.getOffset(t),i=t,s=0;for(;i<this._count&&s<this._viewportHeight;)s+=this._sizes.get(i)??this._estimateSize,i+=1;i=Math.min(this._count,i+this._overscan);let o=this.getTotalHeight(),a=Math.max(0,o-this.getOffset(i));return{start:t,end:i,paddingTop:n,paddingBottom:a,totalHeight:o}}};function Rt(r){return r&&typeof r=="object"?r:{value:r}}function Vt(r){return r==="center"||r==="right"?r:"left"}var b=class extends HTMLElement{static get observedAttributes(){return["field","header","width","min-width","align"]}get field(){return this.getAttribute("field")??""}get header(){return this.getAttribute("header")??this.field}get width(){return this.getAttribute("width")??"auto"}get minWidth(){return this.getAttribute("min-width")??"0"}get align(){return Vt(this.getAttribute("align"))}connectedCallback(){this.hidden=!0}attributeChangedCallback(){this.dispatchEvent(new CustomEvent("dt-column-change",{bubbles:!0,composed:!0}))}},T=class extends HTMLElement{_rows=[];_columns=[];_virtualizer=new m({estimateSize:40,overscan:5,fixedSize:40});_root;_scroll;_header;_body;_canvas;_emptyState;_resizeObserver=null;_mutationObserver=null;_sortField=null;_sortDirection="asc";static get observedAttributes(){return["row-height","sortable","striped","bordered","empty-text"]}get rows(){return this._rows}set rows(t){this._rows=Array.isArray(t)?t:[],this._virtualizer.setCount(this._rows.length),this._render()}get rowHeight(){let t=Number(this.getAttribute("row-height")??"40");return Number.isFinite(t)&&t>0?t:40}set rowHeight(t){this.setAttribute("row-height",String(t))}get sortable(){return this.hasAttribute("sortable")}get emptyText(){return this.getAttribute("empty-text")??"No data"}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=rt,t.appendChild(e),this._root=document.createElement("div"),this._root.className="dt-table-view",this._scroll=document.createElement("div"),this._scroll.className="dt-table-scroll",this._scroll.addEventListener("scroll",this._onScroll,{passive:!0}),this._header=document.createElement("div"),this._header.className="dt-table-header",this._body=document.createElement("div"),this._body.className="dt-table-body",this._canvas=document.createElement("div"),this._canvas.className="dt-table-canvas",this._emptyState=document.createElement("div"),this._emptyState.className="dt-table-empty",this._body.append(this._canvas,this._emptyState),this._scroll.append(this._header,this._body),this._root.appendChild(this._scroll),t.appendChild(this._root)}connectedCallback(){this._virtualizer.setFixedSize(this.rowHeight),this._virtualizer.setEstimateSize(this.rowHeight),this._syncColumns(),this._resizeObserver=new ResizeObserver(t=>{for(let e of t)if(e.target===this._scroll){let n=this._header.offsetHeight;this._virtualizer.setViewportHeight(Math.max(0,e.contentRect.height-n)),this._render()}}),this._resizeObserver.observe(this._scroll),this._mutationObserver=new MutationObserver(()=>{this._syncColumns(),this._render()}),this._mutationObserver.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["field","header","width","min-width","align"]}),this._virtualizer.setCount(this._rows.length),this._virtualizer.setViewportHeight(Math.max(0,this._scroll.clientHeight-this._header.offsetHeight)),this._render()}disconnectedCallback(){this._scroll.removeEventListener("scroll",this._onScroll),this._resizeObserver?.disconnect(),this._mutationObserver?.disconnect(),this._resizeObserver=null,this._mutationObserver=null}attributeChangedCallback(t){t==="row-height"&&(this._virtualizer.setFixedSize(this.rowHeight),this._virtualizer.setEstimateSize(this.rowHeight)),this._render()}_onScroll=()=>{this._virtualizer.setScrollTop(Math.max(0,this._scroll.scrollTop-this._header.offsetHeight)),this._renderBody()};_syncColumns(){this._columns=Array.from(this.children).filter(t=>t instanceof b).map(t=>({field:t.field,header:t.header,width:t.width,minWidth:t.minWidth,align:t.align,template:Array.from(t.children).find(e=>e instanceof HTMLTemplateElement)??null})).filter(t=>t.field)}_render(){if(!this.isConnected)return;this._emptyState.textContent=this.emptyText;let t=this._columns.length>0?this._columns.map(e=>this._toGridColumn(e)).join(" "):"minmax(0, 1fr)";this._header.style.setProperty("--dt-table-columns",t),this._canvas.style.setProperty("--dt-table-columns",t),this._renderHeader(),this._renderBody()}_renderHeader(){let t=document.createDocumentFragment();for(let e of this._columns){let n=document.createElement("div");n.className="dt-table-header-cell",n.dataset.align=e.align,this.sortable&&(n.classList.add("dt-table-header-cell--sortable"),n.tabIndex=0,n.setAttribute("role","button"),n.setAttribute("aria-label",`Sort by ${e.header}`),n.addEventListener("click",()=>this._requestSort(e.field)),n.addEventListener("keydown",s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),this._requestSort(e.field))}));let i=document.createElement("span");if(i.className="dt-table-header-label",i.textContent=e.header,this.sortable){let s=document.createElement("span");s.className="dt-table-sort-indicator",this._sortField===e.field?s.textContent=this._sortDirection==="asc"?"\u25B2":"\u25BC":s.textContent="\u2195",i.appendChild(s)}n.appendChild(i),t.appendChild(n)}this._header.replaceChildren(t)}_renderBody(){if(this._rows.length===0||this._columns.length===0){this._emptyState.hidden=!1,this._canvas.replaceChildren(),this._body.style.height="140px",this._canvas.style.height="0px";return}this._emptyState.hidden=!0,this._virtualizer.setCount(this._rows.length),this._virtualizer.setScrollTop(Math.max(0,this._scroll.scrollTop-this._header.offsetHeight)),this._virtualizer.setViewportHeight(Math.max(0,this._scroll.clientHeight-this._header.offsetHeight));let t=this._virtualizer.getRange();this._body.style.height=`${Math.max(t.totalHeight,this._scroll.clientHeight-this._header.offsetHeight)}px`,this._canvas.style.height=`${t.totalHeight}px`;let e=document.createDocumentFragment();for(let n=t.start;n<t.end;n+=1)e.appendChild(this._renderRow(n));this._canvas.replaceChildren(e)}_renderRow(t){let e=this._rows[t],n=document.createElement("div");n.className="dt-table-row dt-table-row--clickable",n.style.top=`${this._virtualizer.getOffset(t)}px`,n.style.height=`${this.rowHeight}px`,n.style.setProperty("--dt-table-columns",this._header.style.getPropertyValue("--dt-table-columns")),n.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("dt-row-click",{detail:{row:e,index:t},bubbles:!0,composed:!0}))});let i=Rt(e);for(let s of this._columns){let o=document.createElement("div");if(o.className="dt-table-cell",o.dataset.align=s.align,s.template)o.appendChild(M(s.template,i));else{let a=i[s.field];o.textContent=a==null?"":String(a)}n.appendChild(o)}return n}_requestSort(t){this._sortField===t?this._sortDirection=this._sortDirection==="asc"?"desc":"asc":(this._sortField=t,this._sortDirection="asc"),this._renderHeader(),this.dispatchEvent(new CustomEvent("dt-sort",{detail:{field:t,direction:this._sortDirection},bubbles:!0,composed:!0}))}_toGridColumn(t){let e=/^\d+$/.test(t.minWidth)?`${t.minWidth}px`:t.minWidth;if(t.width==="auto")return`minmax(${e}, 1fr)`;let n=/^\d+$/.test(t.width)?`${t.width}px`:t.width;return`minmax(${e}, ${n})`}};var it=`:host {
1097
+ display: block;
1098
+ min-height: 120px;
1099
+ color: var(--dt-text);
1100
+ font-family: var(
1101
+ --font-mono,
1102
+ 'SF Mono',
1103
+ Monaco,
1104
+ 'Cascadia Code',
1105
+ 'Roboto Mono',
1106
+ Consolas,
1107
+ monospace
1108
+ );
1109
+ }
1110
+
1111
+ .dt-list-view {
1112
+ position: relative;
1113
+ display: block;
1114
+ min-height: inherit;
1115
+ height: 100%;
1116
+ overflow: auto;
1117
+ background: var(--dt-surface);
1118
+ border: 1px solid var(--dt-border);
1119
+ border-radius: 2px;
1120
+ }
1121
+
1122
+ .dt-list-view::before,
1123
+ .dt-list-view::after {
1124
+ content: '';
1125
+ position: sticky;
1126
+ z-index: 2;
1127
+ width: 8px;
1128
+ height: 8px;
1129
+ pointer-events: none;
1130
+ }
1131
+
1132
+ .dt-list-view::before {
1133
+ top: 0;
1134
+ left: 0;
1135
+ display: block;
1136
+ border-top: 2px solid var(--dt-accent);
1137
+ border-left: 2px solid var(--dt-accent);
1138
+ }
1139
+
1140
+ .dt-list-view::after {
1141
+ right: 0;
1142
+ bottom: 0;
1143
+ float: right;
1144
+ border-right: 2px solid var(--dt-accent);
1145
+ border-bottom: 2px solid var(--dt-accent);
1146
+ }
1147
+
1148
+ .dt-list-spacer {
1149
+ position: relative;
1150
+ min-height: 100%;
1151
+ }
1152
+
1153
+ .dt-list-items {
1154
+ position: relative;
1155
+ }
1156
+
1157
+ .dt-list-item {
1158
+ box-sizing: border-box;
1159
+ width: 100%;
1160
+ padding: 12px;
1161
+ color: inherit;
1162
+ }
1163
+
1164
+ .dt-list-item--interactive {
1165
+ cursor: pointer;
1166
+ }
1167
+
1168
+ .dt-list-item--interactive:hover {
1169
+ background: var(--dt-surface-hover);
1170
+ }
1171
+
1172
+ .dt-list-item--selected {
1173
+ background: var(--dt-accent-subtle);
1174
+ }
1175
+
1176
+ :host([dividers]) .dt-list-item {
1177
+ border-bottom: 1px solid var(--dt-border-subtle);
1178
+ }
1179
+
1180
+ :host([dividers]) .dt-list-item:last-child {
1181
+ border-bottom: 0;
1182
+ }
1183
+
1184
+ .dt-list-empty {
1185
+ display: flex;
1186
+ align-items: center;
1187
+ justify-content: center;
1188
+ min-height: 120px;
1189
+ padding: 20px;
1190
+ color: var(--dt-text-muted);
1191
+ text-transform: uppercase;
1192
+ letter-spacing: 0.08em;
1193
+ font-size: 0.75rem;
1194
+ }
1195
+ `;var st=56;function Pt(r){return r&&typeof r=="object"?r:{value:r}}var z=class extends HTMLElement{_items=[];_selectedIndices=new Set;_renderItem=null;_virtualizer=new m({estimateSize:st,overscan:5});_viewport;_spacer;_itemsLayer;_emptyState;_resizeObserver=null;_itemResizeObserver=null;static get observedAttributes(){return["item-height","dividers","selectable","empty-text"]}get items(){return this._items}set items(t){this._items=Array.isArray(t)?t:[],this._selectedIndices=new Set([...this._selectedIndices].filter(e=>e<this._items.length)),this._virtualizer.setCount(this._items.length),this._syncSizingMode(!0),this._render()}get selectedItems(){return[...this._selectedIndices].sort((t,e)=>t-e).map(t=>this._items[t])}get renderItem(){return this._renderItem}set renderItem(t){this._renderItem=typeof t=="function"?t:null,this._render()}get itemHeight(){let t=this.getAttribute("item-height");if(!t)return null;let e=Number(t);return Number.isFinite(e)&&e>0?e:null}set itemHeight(t){if(t===null||t<=0){this.removeAttribute("item-height");return}this.setAttribute("item-height",String(t))}get selectable(){let t=this.getAttribute("selectable");return t==="single"||t==="multi"?t:"none"}set selectable(t){this.setAttribute("selectable",t)}get emptyText(){return this.getAttribute("empty-text")??"No items"}set emptyText(t){this.setAttribute("empty-text",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=it,t.appendChild(e),this._viewport=document.createElement("div"),this._viewport.className="dt-list-view",this._viewport.addEventListener("scroll",this._onScroll,{passive:!0}),this._spacer=document.createElement("div"),this._spacer.className="dt-list-spacer",this._itemsLayer=document.createElement("div"),this._itemsLayer.className="dt-list-items",this._emptyState=document.createElement("div"),this._emptyState.className="dt-list-empty",this._spacer.append(this._itemsLayer,this._emptyState),this._viewport.appendChild(this._spacer),t.appendChild(this._viewport)}connectedCallback(){this._resizeObserver=new ResizeObserver(t=>{for(let e of t)e.target===this._viewport&&(this._virtualizer.setViewportHeight(e.contentRect.height),this._render())}),this._resizeObserver.observe(this._viewport),this._itemResizeObserver=new ResizeObserver(t=>{let e=0;for(let n of t){let i=n.target,s=Number(i.dataset.index);Number.isFinite(s)&&(e+=this._virtualizer.measure(s,n.contentRect.height))}e!==0&&(this._viewport.scrollTop+=e),t.length>0&&this._render()}),this._virtualizer.setCount(this._items.length),this._virtualizer.setViewportHeight(this._viewport.clientHeight),this._syncSizingMode(!1),this._render()}disconnectedCallback(){this._viewport.removeEventListener("scroll",this._onScroll),this._resizeObserver?.disconnect(),this._itemResizeObserver?.disconnect(),this._resizeObserver=null,this._itemResizeObserver=null}attributeChangedCallback(t){t==="item-height"&&this._syncSizingMode(!0),t==="selectable"&&this.selectable==="none"&&this._selectedIndices.size>0&&(this._selectedIndices.clear(),this._emitSelectionChange()),this._render()}_onScroll=()=>{this._virtualizer.setScrollTop(this._viewport.scrollTop),this._render()};_syncSizingMode(t){let e=this.itemHeight;this._virtualizer.setFixedSize(e),this._virtualizer.setEstimateSize(e??st),t&&this._virtualizer.resetMeasurements()}_render(){if(!this.isConnected)return;if(this._emptyState.textContent=this.emptyText,this._emptyState.hidden=this._items.length>0,this._items.length===0){this._itemsLayer.replaceChildren(),this._spacer.style.height="100%";return}this._virtualizer.setScrollTop(this._viewport.scrollTop),this._virtualizer.setViewportHeight(this._viewport.clientHeight),this._virtualizer.setCount(this._items.length);let t=this._virtualizer.getRange();this._spacer.style.height=`${Math.max(t.totalHeight,this._viewport.clientHeight)}px`,this._itemsLayer.style.transform=`translateY(${t.paddingTop}px)`;let e=document.createDocumentFragment();for(let n=t.start;n<t.end;n+=1)e.appendChild(this._renderVisibleItem(n));this._itemsLayer.replaceChildren(e)}_renderVisibleItem(t){let e=this._items[t],n=document.createElement("div");if(n.className="dt-list-item",n.dataset.index=String(t),this.selectable!=="none"&&(n.classList.add("dt-list-item--interactive"),n.setAttribute("role","option"),n.setAttribute("aria-selected",String(this._selectedIndices.has(t))),n.tabIndex=0),this._selectedIndices.has(t)&&n.classList.add("dt-list-item--selected"),this.itemHeight!==null&&(n.style.minHeight=`${this.itemHeight}px`),this._renderItem)this._renderItem(e,n,t);else{let i=this._getTemplate();i?n.appendChild(M(i,Pt(e))):n.textContent=String(e??"")}return n.addEventListener("click",()=>this._handleItemClick(t)),n.addEventListener("keydown",i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this._handleItemClick(t))}),this.itemHeight===null&&this._itemResizeObserver?.observe(n),n}_handleItemClick(t){let e=this._items[t],n=this.selectable;n==="single"?(this._selectedIndices=new Set([t]),this._emitSelectionChange(),this._render()):n==="multi"&&(this._selectedIndices.has(t)?this._selectedIndices.delete(t):this._selectedIndices.add(t),this._emitSelectionChange(),this._render()),this.dispatchEvent(new CustomEvent("dt-item-click",{detail:{item:e,index:t},bubbles:!0,composed:!0}))}_emitSelectionChange(){this.dispatchEvent(new CustomEvent("dt-selection-change",{detail:{selected:this.selectedItems},bubbles:!0,composed:!0}))}_getTemplate(){for(let t of Array.from(this.children))if(t instanceof HTMLTemplateElement)return t;return null}};var ot=`:host {
1196
+ display: block;
1197
+ min-height: 220px;
1198
+ color: var(--dt-text);
1199
+ font-family: var(
1200
+ --font-mono,
1201
+ 'SF Mono',
1202
+ Monaco,
1203
+ 'Cascadia Code',
1204
+ 'Roboto Mono',
1205
+ Consolas,
1206
+ monospace
1207
+ );
1208
+ }
1209
+
1210
+ .dt-chart {
1211
+ position: relative;
1212
+ display: block;
1213
+ min-height: inherit;
1214
+ height: 100%;
1215
+ overflow: hidden;
1216
+ border: 1px solid var(--dt-border);
1217
+ border-radius: 2px;
1218
+ background:
1219
+ radial-gradient(
1220
+ circle at top left,
1221
+ color-mix(in srgb, var(--dt-accent) 16%, transparent),
1222
+ transparent 42%
1223
+ ),
1224
+ linear-gradient(
1225
+ 180deg,
1226
+ color-mix(in srgb, var(--dt-surface) 90%, var(--dt-accent) 10%),
1227
+ var(--dt-surface)
1228
+ );
1229
+ }
1230
+
1231
+ .dt-chart::before,
1232
+ .dt-chart::after {
1233
+ content: '';
1234
+ position: absolute;
1235
+ z-index: 3;
1236
+ width: 8px;
1237
+ height: 8px;
1238
+ pointer-events: none;
1239
+ }
1240
+
1241
+ .dt-chart::before {
1242
+ top: -1px;
1243
+ left: -1px;
1244
+ border-top: 2px solid var(--dt-accent);
1245
+ border-left: 2px solid var(--dt-accent);
1246
+ }
1247
+
1248
+ .dt-chart::after {
1249
+ right: -1px;
1250
+ bottom: -1px;
1251
+ border-right: 2px solid var(--dt-accent);
1252
+ border-bottom: 2px solid var(--dt-accent);
1253
+ }
1254
+
1255
+ .dt-chart__canvas {
1256
+ position: relative;
1257
+ z-index: 1;
1258
+ display: block;
1259
+ width: 100%;
1260
+ height: 100%;
1261
+ }
1262
+
1263
+ .dt-chart__status {
1264
+ position: absolute;
1265
+ inset: 0;
1266
+ z-index: 2;
1267
+ display: flex;
1268
+ align-items: center;
1269
+ justify-content: center;
1270
+ padding: 20px;
1271
+ color: var(--dt-text-muted);
1272
+ font-size: 0.75rem;
1273
+ letter-spacing: 0.08em;
1274
+ text-align: center;
1275
+ text-transform: uppercase;
1276
+ background: color-mix(in srgb, var(--dt-surface) 72%, transparent);
1277
+ }
1278
+
1279
+ .dt-chart__status[hidden] {
1280
+ display: none;
1281
+ }
1282
+ `;var L=null;function at(){return window.__DtChart?Promise.resolve(window.__DtChart):L||(L=new Promise((r,t)=>{let e=document.createElement("script");e.src="/api/ui/chart.umd.js",e.async=!0,e.dataset.dtChart="true",e.onload=()=>{if(window.__DtChart){r(window.__DtChart);return}t(new Error("Chart runtime loaded without a __DtChart export."))},e.onerror=()=>t(new Error("Failed to load the Chart.js runtime bundle.")),document.head.appendChild(e)}),L)}function v(r,t,e){return Math.min(e,Math.max(t,r))}function It(r){return r?r.split(",").map(t=>t.trim()).filter(Boolean):[]}function X(r){let t=r.trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(t){let i=t[1],s=i.length===3?i.split("").map(c=>`${c}${c}`).join(""):i,o=parseInt(s.slice(0,2),16)/255,a=parseInt(s.slice(2,4),16)/255,d=parseInt(s.slice(4,6),16)/255;return dt(o,a,d)}let e=r.trim().match(/^rgba?\((\d+(?:\.\d+)?)[,\s]+(\d+(?:\.\d+)?)[,\s]+(\d+(?:\.\d+)?)(?:[,/\s]+[\d.]+)?\)$/i);if(e)return dt(Number(e[1])/255,Number(e[2])/255,Number(e[3])/255);let n=r.trim().match(/^hsla?\(([-\d.]+)(?:deg)?[,\s]+([\d.]+)%[,\s]+([\d.]+)%(?:[,/\s]+[\d.]+)?\)$/i);return n?{h:(Number(n[1])%360+360)%360,s:v(Number(n[2]),0,100),l:v(Number(n[3]),0,100)}:null}function dt(r,t,e){let n=Math.max(r,t,e),i=Math.min(r,t,e),s=n-i,o=0,a=(n+i)/2,d=s===0?0:s/(1-Math.abs(2*a-1));if(s!==0)switch(n){case r:o=60*((t-e)/s%6);break;case t:o=60*((e-r)/s+2);break;default:o=60*((r-t)/s+4);break}return{h:(o+360)%360,s:Math.round(d*100),l:Math.round(a*100)}}function g(r,t=1){return`hsla(${Math.round(r.h)} ${Math.round(r.s)}% ${Math.round(r.l)}% / ${t})`}function Nt(r){let t=X(r)??{h:185,s:88,l:56};return[0,32,68,118,164,212,258,304].map((n,i)=>({h:(t.h+n)%360,s:v(t.s-i*2,55,90),l:v(t.l+(i%2===0?0:6)-i,38,66)}))}function H(r){return!!r&&typeof r=="object"&&!Array.isArray(r)}function lt(r,t){if(!H(r)||!H(t))return t??r;let e={...r};for(let[n,i]of Object.entries(t)){let s=e[n];e[n]=H(s)&&H(i)?lt(s,i):i}return e}function Ft(r){return r==="top"||r==="bottom"||r==="left"||r==="right"?r:"none"}function Ot(r){return r==="bar"||r==="line"||r==="area"||r==="pie"||r==="doughnut"||r==="radar"||r==="scatter"||r==="bubble"?r:"bar"}function Bt(r){return r==="bar"||r==="line"||r==="area"||r==="scatter"||r==="bubble"}function $t(r){return r.map(t=>t.trim()).filter(Boolean)}var R=class extends HTMLElement{_canvas;_status;_runtime=null;_loadPromise=null;_chart=null;_renderedType=null;_dataInput=null;_optionsOverride=null;_syncFrame=0;static get observedAttributes(){return["type","legend","stacked","labels"]}get type(){return Ot(this.getAttribute("type"))}set type(t){this.setAttribute("type",t)}get legend(){return Ft(this.getAttribute("legend"))}set legend(t){this.setAttribute("legend",t)}get stacked(){return this.hasAttribute("stacked")}set stacked(t){this.toggleAttribute("stacked",t)}get labels(){return $t(It(this.getAttribute("labels")))}set labels(t){this.setAttribute("labels",t.join(","))}get data(){return this._dataInput}set data(t){this._dataInput=t?structuredClone(t):null,this._scheduleSync()}get options(){return this._optionsOverride}set options(t){this._optionsOverride=t?structuredClone(t):null,this._renderChart()}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=ot,t.appendChild(e);let n=document.createElement("div");n.className="dt-chart",this._canvas=document.createElement("canvas"),this._canvas.className="dt-chart__canvas",this._status=document.createElement("div"),this._status.className="dt-chart__status",this._status.textContent="Loading chart",n.append(this._canvas,this._status),t.appendChild(n)}connectedCallback(){this._canvas.addEventListener("click",this._handleCanvasClick),this._ensureRuntime().then(()=>this._renderChart()),this._scheduleSync()}disconnectedCallback(){this._canvas.removeEventListener("click",this._handleCanvasClick),this._syncFrame!==0&&(cancelAnimationFrame(this._syncFrame),this._syncFrame=0),this._chart?.destroy(),this._chart=null,this._renderedType=null}attributeChangedCallback(){this._scheduleSync()}_handleCanvasClick=t=>{if(!this._chart)return;let n=this._chart.getElementsAtEventForMode(t,"nearest",{intersect:!0},!0)[0];if(!n)return;let i=Array.isArray(this._chart.data.labels)?this._chart.data.labels[n.index]??null:null,s=this._chart.data.datasets[n.datasetIndex],o=Array.isArray(s?.data)?s.data[n.index]:void 0;this.dispatchEvent(new CustomEvent("dt-chart-click",{bubbles:!0,composed:!0,detail:{label:i,datasetIndex:n.datasetIndex,index:n.index,value:o}}))};_scheduleSync(){this._syncFrame===0&&(this._syncFrame=requestAnimationFrame(()=>{this._syncFrame=0,this._syncFromCurrentSource()}))}_syncFromCurrentSource(){this._renderChart()}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=at().then(t=>(this._runtime=t,t))),this._loadPromise)}async _renderChart(){let t=this._dataInput;if(!t){this._setStatus("Waiting for data");return}let e=await this._ensureRuntime(),n=this._buildConfig(e,t),i=n.type;!this._chart||this._renderedType!==i?(this._chart?.destroy(),this._chart=new e.Chart(this._canvas,n),this._renderedType=i):(this._chart.data=n.data,this._chart.options=n.options,this._chart.update()),this._setStatus(t.datasets.length>0?null:"Waiting for data")}_buildConfig(t,e){let n=getComputedStyle(this),i=n.getPropertyValue("--dt-accent").trim()||"#42d4ff",s=n.getPropertyValue("--dt-text").trim()||"#d6ebff",o=n.getPropertyValue("--dt-text-muted").trim()||"#7b93a6",a=n.getPropertyValue("--dt-border").trim()||"rgba(123, 147, 166, 0.3)",d=n.getPropertyValue("--font-mono").trim()||"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace",c=Nt(i),l=this.type==="area"?"line":this.type,f={labels:e.labels??this.labels,datasets:e.datasets.map((h,gt)=>{let F=c[gt%c.length],p=h.color??g(F,1),O={label:h.label??"",data:h.data,backgroundColor:l==="line"||l==="radar"||l==="scatter"?g(F,l==="scatter"?.95:.24):p,borderColor:p,pointBackgroundColor:p,pointBorderColor:p,pointHoverBackgroundColor:p,pointRadius:this.type==="line"||this.type==="area"?3:4,pointHoverRadius:this.type==="line"||this.type==="area"?5:6,borderWidth:2,tension:l==="line"||this.type==="area"?.32:void 0,fill:this.type==="area"};return l==="pie"||l==="doughnut"?{...O,backgroundColor:Array.isArray(h.data)?h.data.map((bt,B)=>g(c[B%c.length],.86)):p,borderColor:Array.isArray(h.data)?h.data.map((bt,B)=>g(c[B%c.length],1)):p,borderWidth:1}:l==="scatter"||l==="bubble"?{...O,showLine:!1,backgroundColor:g(F,.78)}:O})},_={responsive:!0,maintainAspectRatio:!1,animation:{duration:320},interaction:{mode:"nearest",intersect:!0},plugins:{legend:{display:this.legend!=="none",position:this.legend==="none"?"top":this.legend,labels:{color:s,boxWidth:12,boxHeight:12,padding:14,font:{family:d,size:11}}},tooltip:{backgroundColor:"rgba(10, 18, 24, 0.92)",borderColor:Xt(a,i,.35),borderWidth:1,titleColor:s,bodyColor:s,footerColor:o,titleFont:{family:d,size:11},bodyFont:{family:d,size:11},padding:10}},scales:Bt(this.type)?{x:{stacked:this.stacked,grid:{display:!1,color:a},border:{color:a},ticks:{color:o,font:{family:d,size:11}}},y:{stacked:this.stacked,beginAtZero:!0,grid:{display:!1,color:a},border:{color:a},ticks:{color:o,font:{family:d,size:11}}}}:l==="radar"?{r:{angleLines:{color:a},grid:{color:a},pointLabels:{color:o,font:{family:d,size:11}},ticks:{color:o,backdropColor:"transparent",font:{family:d,size:10}}}}:void 0};return{type:l,data:f,options:lt(_,this._optionsOverride??{})}}_setStatus(t){if(!t){this._status.hidden=!0;return}this._status.hidden=!1,this._status.textContent=t}};function Xt(r,t,e){let n=X(r),i=X(t);if(!n||!i)return r;let s=v(e,0,1),o=((i.h-n.h)%360+540)%360-180;return g({h:(n.h+o*s+360)%360,s:n.s+(i.s-n.s)*s,l:n.l+(i.l-n.l)*s})}var ct=`:host {
1283
+ display: block;
1284
+ color: var(--dt-text);
1285
+ font-family: var(--font-sans, 'Inter', sans-serif);
1286
+ }
1287
+
1288
+ .dt-markdown {
1289
+ color: inherit;
1290
+ line-height: 1.7;
1291
+ word-break: break-word;
1292
+ }
1293
+
1294
+ .dt-markdown > :first-child {
1295
+ margin-top: 0;
1296
+ }
1297
+
1298
+ .dt-markdown > :last-child {
1299
+ margin-bottom: 0;
1300
+ }
1301
+
1302
+ .dt-markdown :is(h1, h2, h3, h4, h5, h6) {
1303
+ margin: 1.2em 0 0.55em;
1304
+ color: var(--dt-text);
1305
+ font-family: var(--font-sans, 'Inter', sans-serif);
1306
+ line-height: 1.2;
1307
+ }
1308
+
1309
+ .dt-markdown h1 {
1310
+ color: var(--dt-accent);
1311
+ font-size: 1.6rem;
1312
+ letter-spacing: 0.08em;
1313
+ text-transform: uppercase;
1314
+ }
1315
+
1316
+ .dt-markdown h2 {
1317
+ font-size: 1.3rem;
1318
+ }
1319
+
1320
+ .dt-markdown h3 {
1321
+ font-size: 1.1rem;
1322
+ }
1323
+
1324
+ .dt-markdown p,
1325
+ .dt-markdown ul,
1326
+ .dt-markdown ol,
1327
+ .dt-markdown blockquote,
1328
+ .dt-markdown pre,
1329
+ .dt-markdown table {
1330
+ margin: 0.8em 0;
1331
+ }
1332
+
1333
+ .dt-markdown ul,
1334
+ .dt-markdown ol {
1335
+ padding-left: 1.4rem;
1336
+ }
1337
+
1338
+ .dt-markdown li + li {
1339
+ margin-top: 0.28em;
1340
+ }
1341
+
1342
+ .dt-markdown strong {
1343
+ color: var(--dt-text);
1344
+ }
1345
+
1346
+ .dt-markdown a,
1347
+ .dt-markdown .dt-md-link {
1348
+ color: var(--dt-accent);
1349
+ text-decoration: none;
1350
+ }
1351
+
1352
+ .dt-markdown a:hover,
1353
+ .dt-markdown .dt-md-link:hover {
1354
+ text-decoration: underline;
1355
+ }
1356
+
1357
+ .dt-markdown code {
1358
+ padding: 0.12rem 0.35rem;
1359
+ border-radius: 2px;
1360
+ background: color-mix(in srgb, var(--dt-surface) 88%, var(--dt-accent) 12%);
1361
+ color: var(--dt-accent);
1362
+ font-family: var(
1363
+ --font-mono,
1364
+ 'SF Mono',
1365
+ Monaco,
1366
+ 'Cascadia Code',
1367
+ 'Roboto Mono',
1368
+ Consolas,
1369
+ monospace
1370
+ );
1371
+ font-size: 0.92em;
1372
+ }
1373
+
1374
+ .dt-md-pre {
1375
+ overflow-x: auto;
1376
+ padding: 14px 16px;
1377
+ border: 1px solid var(--dt-border);
1378
+ border-radius: 2px;
1379
+ background: var(--dt-surface);
1380
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dt-surface) 85%, var(--dt-accent) 15%);
1381
+ }
1382
+
1383
+ .dt-md-pre code {
1384
+ display: block;
1385
+ padding: 0;
1386
+ background: transparent;
1387
+ color: var(--dt-text);
1388
+ }
1389
+
1390
+ .dt-md-blockquote {
1391
+ margin: 0.9em 0;
1392
+ padding: 0.15rem 0 0.15rem 1rem;
1393
+ border-left: 3px solid var(--dt-accent);
1394
+ color: var(--dt-text-muted);
1395
+ }
1396
+
1397
+ .dt-md-table {
1398
+ width: 100%;
1399
+ border-collapse: collapse;
1400
+ border: 1px solid var(--dt-border);
1401
+ background: var(--dt-surface);
1402
+ }
1403
+
1404
+ .dt-md-table th,
1405
+ .dt-md-table td {
1406
+ padding: 0.6rem 0.8rem;
1407
+ border: 1px solid var(--dt-border-subtle, var(--dt-border));
1408
+ text-align: left;
1409
+ vertical-align: top;
1410
+ }
1411
+
1412
+ .dt-md-table th {
1413
+ color: var(--dt-accent);
1414
+ background: color-mix(in srgb, var(--dt-surface) 88%, var(--dt-accent) 12%);
1415
+ font-size: 0.75rem;
1416
+ letter-spacing: 0.08em;
1417
+ text-transform: uppercase;
1418
+ }
1419
+
1420
+ .dt-markdown hr {
1421
+ border: 0;
1422
+ border-top: 1px solid var(--dt-border);
1423
+ }
1424
+
1425
+ .dt-md-image {
1426
+ display: block;
1427
+ max-width: 100%;
1428
+ border: 1px solid var(--dt-border);
1429
+ border-radius: 2px;
1430
+ }
1431
+
1432
+ .dt-markdown__caret {
1433
+ display: inline-block;
1434
+ margin-left: 0.15rem;
1435
+ color: var(--dt-accent);
1436
+ animation: dt-markdown-caret 0.9s steps(1) infinite;
1437
+ }
1438
+
1439
+ .dt-markdown__caret[hidden] {
1440
+ display: none;
1441
+ }
1442
+
1443
+ @keyframes dt-markdown-caret {
1444
+ 0%,
1445
+ 49% {
1446
+ opacity: 1;
1447
+ }
1448
+
1449
+ 50%,
1450
+ 100% {
1451
+ opacity: 0;
1452
+ }
1453
+ }
1454
+ `;var V=null;function ht(){return window.__DtMarked?Promise.resolve(window.__DtMarked):V||(V=new Promise((r,t)=>{let e=document.createElement("script");e.src="/api/ui/marked.js",e.async=!0,e.dataset.dtMarked="true",e.onload=()=>{if(window.__DtMarked){r(window.__DtMarked);return}t(new Error("Marked runtime loaded without a __DtMarked export."))},e.onerror=()=>t(new Error("Failed to load the marked runtime bundle.")),document.head.appendChild(e)}),V)}function ut(r){return r.replaceAll(`\r
1455
+ `,`
1456
+ `)}function Jt(r){let t=ut(r).split(`
1457
+ `);for(;t.length>0&&t[0].trim()==="";)t.shift();for(;t.length>0&&t[t.length-1].trim()==="";)t.pop();let e=t.filter(i=>i.trim()!=="").map(i=>i.match(/^\s*/)?.[0].length??0),n=e.length>0?Math.min(...e):0;return n===0?t.join(`
1458
+ `):t.map(i=>i.slice(n)).join(`
1459
+ `)}function Wt(r){let t=ut(r);if((t.match(/(^|\n)(```|~~~)/g)??[]).length%2===0)return t;let n=t.includes("~~~")&&!t.includes("```")?"~~~":"```";return`${t}
1460
+ ${n}`}var P=class extends HTMLElement{_body;_caret;_contentOverride=null;_runtime=null;_loadPromise=null;_observer=null;_renderFrame=0;static get observedAttributes(){return["streaming","unsafe-html"]}get content(){return this._contentOverride??this._readInlineMarkdown()}set content(t){this._contentOverride=String(t??""),this._scheduleRender()}get streaming(){return this.hasAttribute("streaming")}set streaming(t){this.toggleAttribute("streaming",t)}get unsafeHtml(){return this.hasAttribute("unsafe-html")}set unsafeHtml(t){this.toggleAttribute("unsafe-html",t)}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=ct,t.appendChild(e),this._body=document.createElement("div"),this._body.className="dt-markdown",this._body.addEventListener("click",this._onLinkClick),this._caret=document.createElement("span"),this._caret.className="dt-markdown__caret",this._caret.textContent="\u258C",this._caret.hidden=!0,t.append(this._body,this._caret)}connectedCallback(){this._observer||(this._observer=new MutationObserver(()=>{this._contentOverride===null&&this._scheduleRender()}),this._observer.observe(this,{childList:!0,characterData:!0,subtree:!0})),this._ensureRuntime(),this._scheduleRender()}disconnectedCallback(){this._observer?.disconnect(),this._observer=null,this._renderFrame!==0&&(cancelAnimationFrame(this._renderFrame),this._renderFrame=0)}attributeChangedCallback(){this._scheduleRender()}_onLinkClick=t=>{let n=t.composedPath().find(i=>i instanceof HTMLAnchorElement);n&&(t.preventDefault(),this.dispatchEvent(new CustomEvent("dt-link-click",{bubbles:!0,composed:!0,detail:{href:n.getAttribute("href")??"#"}})))};_readInlineMarkdown(){return Jt(this.textContent??"")}_scheduleRender(){this._renderFrame===0&&(this._renderFrame=requestAnimationFrame(()=>{this._renderFrame=0,this._render()}))}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=ht().then(t=>(this._runtime=t,t))),this._loadPromise)}async _render(){let t=await this._ensureRuntime(),e=this.content;this.streaming&&(e=Wt(e)),this._body.innerHTML=t.render(e,{unsafeHtml:this.unsafeHtml}),this._caret.hidden=!this.streaming}};var pt=`:host {
1461
+ display: block;
1462
+ min-height: 240px;
1463
+ color: var(--dt-text);
1464
+ font-family: var(--font-sans, 'Inter', sans-serif);
1465
+ }
1466
+
1467
+ .dt-markdown-editor {
1468
+ position: relative;
1469
+ height: 100%;
1470
+ min-height: inherit;
1471
+ overflow: hidden;
1472
+ border: 1px solid var(--dt-border);
1473
+ border-radius: 2px;
1474
+ }
1475
+
1476
+ .dt-markdown-editor::before,
1477
+ .dt-markdown-editor::after {
1478
+ content: '';
1479
+ position: absolute;
1480
+ z-index: 3;
1481
+ width: 8px;
1482
+ height: 8px;
1483
+ pointer-events: none;
1484
+ }
1485
+
1486
+ .dt-markdown-editor::before {
1487
+ top: -1px;
1488
+ left: -1px;
1489
+ border-top: 2px solid var(--dt-accent);
1490
+ border-left: 2px solid var(--dt-accent);
1491
+ }
1492
+
1493
+ .dt-markdown-editor::after {
1494
+ right: -1px;
1495
+ bottom: -1px;
1496
+ border-right: 2px solid var(--dt-accent);
1497
+ border-bottom: 2px solid var(--dt-accent);
1498
+ }
1499
+
1500
+ .dt-markdown-editor__surface {
1501
+ height: 100%;
1502
+ min-height: inherit;
1503
+ }
1504
+
1505
+ .dt-markdown-editor__content {
1506
+ height: 100%;
1507
+ min-height: inherit;
1508
+ }
1509
+
1510
+ .dt-markdown-editor__status {
1511
+ position: absolute;
1512
+ inset: 0;
1513
+ display: flex;
1514
+ align-items: center;
1515
+ justify-content: center;
1516
+ padding: 20px;
1517
+ background: color-mix(in srgb, var(--dt-surface) 84%, transparent);
1518
+ color: var(--dt-text-muted);
1519
+ font-size: 0.75rem;
1520
+ letter-spacing: 0.08em;
1521
+ text-transform: uppercase;
1522
+ }
1523
+
1524
+ .dt-markdown-editor__status[hidden] {
1525
+ display: none;
1526
+ }
1527
+
1528
+ .milkdown {
1529
+ --crepe-color-background: transparent;
1530
+ --crepe-color-on-background: var(--dt-text);
1531
+ --crepe-color-surface: var(--dt-surface);
1532
+ --crepe-color-surface-low: color-mix(in srgb, var(--dt-surface) 94%, var(--dt-accent) 6%);
1533
+ --crepe-color-on-surface: var(--dt-text);
1534
+ --crepe-color-on-surface-variant: var(--dt-text-muted);
1535
+ --crepe-color-outline: var(--dt-border);
1536
+ --crepe-color-primary: var(--dt-accent);
1537
+ --crepe-color-secondary: color-mix(in srgb, var(--dt-surface) 84%, var(--dt-accent) 16%);
1538
+ --crepe-color-on-secondary: var(--dt-text);
1539
+ --crepe-color-inverse: var(--dt-text);
1540
+ --crepe-color-on-inverse: var(--dt-surface);
1541
+ --crepe-color-inline-code: var(--dt-accent);
1542
+ --crepe-color-error: var(--dt-danger, #ff6a6a);
1543
+ --crepe-color-hover: var(--dt-surface-hover);
1544
+ --crepe-color-selected: color-mix(in srgb, var(--dt-surface) 82%, var(--dt-accent) 18%);
1545
+ --crepe-color-inline-area: color-mix(in srgb, var(--dt-surface) 90%, var(--dt-accent) 10%);
1546
+ --crepe-font-title: var(--font-sans, 'Inter', sans-serif);
1547
+ --crepe-font-default: var(--font-sans, 'Inter', sans-serif);
1548
+ --crepe-font-code: var(
1549
+ --font-mono,
1550
+ 'SF Mono',
1551
+ Monaco,
1552
+ 'Cascadia Code',
1553
+ 'Roboto Mono',
1554
+ Consolas,
1555
+ monospace
1556
+ );
1557
+ --crepe-shadow-1: 0 0 0 1px color-mix(in srgb, var(--dt-surface) 82%, var(--dt-accent) 18%);
1558
+ --crepe-shadow-2:
1559
+ 0 0 0 1px color-mix(in srgb, var(--dt-surface) 78%, var(--dt-accent) 22%),
1560
+ 0 8px 24px color-mix(in srgb, var(--dt-accent) 12%, transparent);
1561
+
1562
+ height: 100%;
1563
+ background: transparent;
1564
+ color: var(--dt-text);
1565
+ }
1566
+
1567
+ .milkdown .editor {
1568
+ min-height: 100%;
1569
+ padding: 16px 18px 20px;
1570
+ outline: none;
1571
+ color: var(--dt-text);
1572
+ font-family: var(--font-sans, 'Inter', sans-serif);
1573
+ font-size: 14px;
1574
+ line-height: 1.7;
1575
+ }
1576
+
1577
+ .milkdown .editor > :first-child {
1578
+ margin-top: 0;
1579
+ }
1580
+
1581
+ .milkdown .editor h1,
1582
+ .milkdown .editor h2,
1583
+ .milkdown .editor h3,
1584
+ .milkdown .editor h4,
1585
+ .milkdown .editor h5,
1586
+ .milkdown .editor h6 {
1587
+ margin: 0.95em 0 0.45em;
1588
+ line-height: 1.2;
1589
+ }
1590
+
1591
+ .milkdown .editor h1 {
1592
+ color: var(--dt-accent);
1593
+ font-size: 1.6rem;
1594
+ letter-spacing: 0.08em;
1595
+ text-transform: uppercase;
1596
+ }
1597
+
1598
+ .milkdown .editor h2 {
1599
+ font-size: 1.28rem;
1600
+ }
1601
+
1602
+ .milkdown .editor h3 {
1603
+ font-size: 1.08rem;
1604
+ }
1605
+
1606
+ .milkdown .editor p {
1607
+ margin: 0.65em 0;
1608
+ }
1609
+
1610
+ .milkdown .editor code {
1611
+ padding: 2px 5px;
1612
+ border-radius: 2px;
1613
+ background: color-mix(in srgb, var(--dt-surface) 88%, var(--dt-accent) 12%);
1614
+ font-family: var(
1615
+ --font-mono,
1616
+ 'SF Mono',
1617
+ Monaco,
1618
+ 'Cascadia Code',
1619
+ 'Roboto Mono',
1620
+ Consolas,
1621
+ monospace
1622
+ );
1623
+ font-size: 0.9em;
1624
+ }
1625
+
1626
+ .milkdown .editor pre {
1627
+ overflow-x: auto;
1628
+ margin: 0.9em 0;
1629
+ padding: 12px 14px;
1630
+ border: 1px solid var(--dt-border);
1631
+ border-radius: 2px;
1632
+ background: var(--dt-surface);
1633
+ }
1634
+
1635
+ .milkdown .editor pre code {
1636
+ padding: 0;
1637
+ background: transparent;
1638
+ }
1639
+
1640
+ .milkdown .editor blockquote {
1641
+ margin: 0.9em 0;
1642
+ padding-left: 12px;
1643
+ border-left: 3px solid var(--dt-accent);
1644
+ color: var(--dt-text-muted);
1645
+ }
1646
+
1647
+ .milkdown .editor a {
1648
+ color: var(--dt-accent);
1649
+ text-decoration: none;
1650
+ }
1651
+
1652
+ .milkdown .editor a:hover {
1653
+ text-decoration: underline;
1654
+ }
1655
+
1656
+ .milkdown .editor hr {
1657
+ border: 0;
1658
+ border-top: 1px solid var(--dt-border);
1659
+ }
1660
+
1661
+ .milkdown .editor ul,
1662
+ .milkdown .editor ol {
1663
+ padding-left: 1.5rem;
1664
+ }
1665
+
1666
+ .milkdown .editor img {
1667
+ max-width: 100%;
1668
+ border-radius: 2px;
1669
+ }
1670
+
1671
+ .milkdown .editor table {
1672
+ width: 100%;
1673
+ border-collapse: collapse;
1674
+ }
1675
+
1676
+ .milkdown .editor th,
1677
+ .milkdown .editor td {
1678
+ border: 1px solid var(--dt-border);
1679
+ }
1680
+ `;var I=null;function mt(){return window.__DtMilkdown?Promise.resolve(window.__DtMilkdown):I||(I=new Promise((r,t)=>{let e=document.createElement("script");e.src="/api/ui/milkdown.umd.js",e.async=!0,e.dataset.dtMilkdown="true",e.onload=()=>{if(window.__DtMilkdown){r(window.__DtMilkdown);return}t(new Error("Milkdown runtime loaded without a __DtMilkdown export."))},e.onerror=()=>t(new Error("Failed to load the Milkdown runtime bundle.")),document.head.appendChild(e)}),I)}var N=class extends HTMLElement{_runtimeStyle;_surface;_content;_status;_runtime=null;_loadPromise=null;_editor=null;_pendingValue="";_changeTimer=null;_setupToken=0;_suppressNextChange=!1;static get observedAttributes(){return["placeholder","readonly"]}get placeholder(){return this.getAttribute("placeholder")??""}set placeholder(t){this.setAttribute("placeholder",t)}get readonly(){return this.hasAttribute("readonly")}set readonly(t){this.toggleAttribute("readonly",t)}get value(){return this._editor&&(this._pendingValue=this._editor.getMarkdown()),this._pendingValue}set value(t){let e=String(t??"");this._pendingValue=e,this._editor&&this._runtime&&this._editor.getMarkdown()!==e&&(this._suppressNextChange=!0,this._editor.editor.action(this._runtime.replaceAll(e)))}constructor(){super();let t=this.attachShadow({mode:"open"}),e=document.createElement("style");e.textContent=pt,t.appendChild(e),this._runtimeStyle=document.createElement("style"),t.appendChild(this._runtimeStyle),this._surface=document.createElement("div"),this._surface.className="dt-markdown-editor",this._content=document.createElement("div"),this._content.className="dt-markdown-editor__surface";let n=document.createElement("div");n.className="dt-markdown-editor__content",this._content.appendChild(n),this._status=document.createElement("div"),this._status.className="dt-markdown-editor__status",this._status.textContent="Loading editor",this._surface.append(this._content,this._status),t.appendChild(this._surface)}connectedCallback(){this._initializeEditor()}disconnectedCallback(){this._setupToken+=1,this._clearChangeTimer(),this._destroyEditor()}attributeChangedCallback(t){if(t==="readonly"){this._editor?.setReadonly(this.readonly);return}t==="placeholder"&&this.isConnected&&this._initializeEditor(!0)}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=mt().then(t=>(this._runtime=t,this._runtimeStyle.textContent=t.cssText,t))),this._loadPromise)}async _initializeEditor(t=!1){let e=++this._setupToken;if(this._setStatus("Loading editor"),t)await this._destroyEditor();else if(this._editor){this._setStatus(null);return}try{let n=await this._ensureRuntime();if(!this.isConnected||e!==this._setupToken)return;this._content.replaceChildren();let i=document.createElement("div");i.className="dt-markdown-editor__content",this._content.appendChild(i);let s=new n.Crepe({root:i,defaultValue:this._pendingValue,features:{[n.Crepe.Feature.CodeMirror]:!1,[n.Crepe.Feature.ImageBlock]:!1,[n.Crepe.Feature.Latex]:!1},featureConfigs:{[n.Crepe.Feature.Placeholder]:{text:this.placeholder,mode:"doc"}}});if(s.on(o=>{o.markdownUpdated((a,d)=>{if(this._pendingValue=d,this._suppressNextChange){this._suppressNextChange=!1;return}this._queueChange(d)}),o.focus(()=>{this.dispatchEvent(new CustomEvent("dt-focus",{bubbles:!0,composed:!0}))}),o.blur(()=>{this.dispatchEvent(new CustomEvent("dt-blur",{bubbles:!0,composed:!0}))})}),await s.create(),!this.isConnected||e!==this._setupToken){await s.destroy();return}this._editor=s,this._editor.setReadonly(this.readonly),this._pendingValue=this._editor.getMarkdown(),this._setStatus(null)}catch{e===this._setupToken&&this._setStatus("Failed to load editor")}}async _destroyEditor(){let t=this._editor;if(this._editor=null,!!t)try{await t.destroy()}catch{}}_queueChange(t){this._clearChangeTimer(),this._changeTimer=setTimeout(()=>{this._changeTimer=null,this.dispatchEvent(new CustomEvent("dt-change",{bubbles:!0,composed:!0,detail:{value:t}}))},300)}_clearChangeTimer(){this._changeTimer&&(clearTimeout(this._changeTimer),this._changeTimer=null)}_setStatus(t){if(t){this._status.hidden=!1,this._status.textContent=t;return}this._status.hidden=!0}};customElements.get("dt-tooltip")||customElements.define("dt-tooltip",x);customElements.get("dt-card")||customElements.define("dt-card",w);customElements.get("dt-select")||customElements.define("dt-select",y);customElements.get("dt-grid")||customElements.define("dt-grid",k);customElements.get("dt-stack")||customElements.define("dt-stack",C);customElements.get("dt-stat")||customElements.define("dt-stat",E);customElements.get("dt-badge")||customElements.define("dt-badge",S);customElements.get("dt-button")||customElements.define("dt-button",D);customElements.get("dt-divider")||customElements.define("dt-divider",A);customElements.get("dt-list-view")||customElements.define("dt-list-view",z);customElements.get("dt-table-view")||customElements.define("dt-table-view",T);customElements.get("dt-column")||customElements.define("dt-column",b);customElements.get("dt-chart")||customElements.define("dt-chart",R);customElements.get("dt-markdown")||customElements.define("dt-markdown",P);customElements.get("dt-markdown-editor")||customElements.define("dt-markdown-editor",N);export{S as DtBadge,D as DtButton,w as DtCard,R as DtChart,b as DtColumn,A as DtDivider,k as DtGrid,z as DtListView,P as DtMarkdown,N as DtMarkdownEditor,y as DtSelect,C as DtStack,E as DtStat,T as DtTableView,x as DtTooltip};
1681
+ //# sourceMappingURL=index.js.map