@logosphere-ui/core 0.0.0-alpha.3 → 0.0.0-alpha.30

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 (150) hide show
  1. package/AGENTS.md +1118 -0
  2. package/dist/AGENTS.md +1118 -0
  3. package/dist/atoms/Badge/badge.d.ts +1 -1
  4. package/dist/atoms/FormField/formfield.d.ts +10 -0
  5. package/dist/badge-BD_MRIBd.js +72 -0
  6. package/dist/badge-BV2hTvrI.cjs +13 -0
  7. package/dist/badge.cjs +1 -1
  8. package/dist/badge.js +1 -1
  9. package/dist/{breadcrumb-B-4yqoJZ.js → breadcrumb-BB61Xt0s.js} +3 -3
  10. package/dist/breadcrumb.js +1 -1
  11. package/dist/button-DRZ4sG4T.cjs +10 -0
  12. package/dist/button-Uu9oaieg.js +58 -0
  13. package/dist/button.cjs +1 -1
  14. package/dist/button.js +1 -1
  15. package/dist/calendar-CBJ4mtlE.js +652 -0
  16. package/dist/calendar-Coc9E6lD.cjs +88 -0
  17. package/dist/calendar.cjs +1 -0
  18. package/dist/calendar.js +4 -0
  19. package/dist/card-BD8FkSTi.cjs +43 -0
  20. package/dist/{card-CUhlTJyJ.js → card-CAAhjIjf.js} +26 -25
  21. package/dist/card.cjs +1 -1
  22. package/dist/card.js +1 -1
  23. package/dist/chatbot-BUYrJbTR.cjs +183 -0
  24. package/dist/chatbot-Cb2ByNkE.js +564 -0
  25. package/dist/chatbot.cjs +1 -1
  26. package/dist/chatbot.js +2 -2
  27. package/dist/{checkbox-7Rb3WKGx.js → checkbox-g6kl2jGR.js} +4 -4
  28. package/dist/checkbox.js +1 -1
  29. package/dist/combobox-G4TVTGS7.js +387 -0
  30. package/dist/combobox-kdjsT5eX.cjs +107 -0
  31. package/dist/combobox.cjs +1 -1
  32. package/dist/combobox.js +1 -1
  33. package/dist/datepicker-Cf3gLMsu.cjs +85 -0
  34. package/dist/datepicker-n5dZbuCD.js +375 -0
  35. package/dist/datepicker.cjs +1 -1
  36. package/dist/datepicker.js +2 -2
  37. package/dist/{download-manager-A4fOxGWJ.js → download-manager-BPg-6Qfg.js} +4 -4
  38. package/dist/download-manager-DDeTYRPs.cjs +97 -0
  39. package/dist/download-manager.cjs +1 -1
  40. package/dist/download-manager.js +1 -1
  41. package/dist/drawer-CViKfr6O.js +114 -0
  42. package/dist/drawer-CjM-vX41.cjs +32 -0
  43. package/dist/drawer.cjs +1 -0
  44. package/dist/drawer.js +4 -0
  45. package/dist/formfield-CRcyUMvQ.cjs +33 -0
  46. package/dist/formfield-O327HYt0.js +154 -0
  47. package/dist/formfield.cjs +1 -1
  48. package/dist/formfield.js +1 -1
  49. package/dist/index.cjs +1 -1
  50. package/dist/index.d.ts +6 -0
  51. package/dist/index.js +43 -28
  52. package/dist/index.umd.js +1029 -512
  53. package/dist/input-BJtn_iTC.js +257 -0
  54. package/dist/input-DPTTu8ZR.cjs +59 -0
  55. package/dist/input.cjs +1 -1
  56. package/dist/input.js +1 -1
  57. package/dist/left-menu.cjs +1 -0
  58. package/dist/left-menu.js +5 -0
  59. package/dist/leftmenu-DpES_nr1.js +301 -0
  60. package/dist/leftmenu-RcrjiF7g.cjs +83 -0
  61. package/dist/modal-CsEaHz0h.cjs +84 -0
  62. package/dist/modal-DHzMgFVY.js +250 -0
  63. package/dist/modal.cjs +1 -1
  64. package/dist/modal.js +1 -1
  65. package/dist/molecules/Input/input.d.ts +7 -1
  66. package/dist/molecules/Pagination/index.d.ts +1 -0
  67. package/dist/molecules/Pagination/pagination.d.ts +60 -0
  68. package/dist/molecules/Popover/popover.d.ts +1 -0
  69. package/dist/molecules/Textarea/text-area.d.ts +5 -2
  70. package/dist/molecules/TimePicker/index.d.ts +2 -0
  71. package/dist/molecules/TimePicker/timepicker.d.ts +62 -0
  72. package/dist/organisms/Calendar/calendar.d.ts +54 -0
  73. package/dist/organisms/Calendar/index.d.ts +1 -0
  74. package/dist/organisms/Calendar/shared.d.ts +9 -0
  75. package/dist/organisms/Chatbot/chatbot.d.ts +10 -1
  76. package/dist/organisms/Chatbot/index.d.ts +1 -1
  77. package/dist/organisms/Combobox/combobox.d.ts +19 -0
  78. package/dist/organisms/DatePicker/datepicker.d.ts +33 -33
  79. package/dist/organisms/Drawer/drawer.d.ts +30 -0
  80. package/dist/organisms/Drawer/index.d.ts +1 -0
  81. package/dist/organisms/LeftMenu/index.d.ts +2 -0
  82. package/dist/organisms/LeftMenu/leftmenu-item.d.ts +14 -0
  83. package/dist/organisms/LeftMenu/leftmenu.d.ts +45 -0
  84. package/dist/organisms/Modal/modal.d.ts +29 -4
  85. package/dist/organisms/Toast/index.d.ts +2 -0
  86. package/dist/organisms/Toast/toast-container.d.ts +42 -0
  87. package/dist/organisms/Toast/toast.d.ts +48 -0
  88. package/dist/organisms/TreeMenu/index.d.ts +1 -0
  89. package/dist/organisms/TreeMenu/tree-menu.d.ts +41 -0
  90. package/dist/popover-BSfKsQni.js +143 -0
  91. package/dist/popover-DhEvLuOo.cjs +30 -0
  92. package/dist/popover.cjs +1 -1
  93. package/dist/popover.js +1 -1
  94. package/dist/styles/main.css +186 -182
  95. package/dist/switch-8RGGesy5.cjs +17 -0
  96. package/dist/switch-DNqPqH-R.js +64 -0
  97. package/dist/switch.cjs +1 -1
  98. package/dist/switch.js +1 -1
  99. package/dist/tab-BmrITzOL.cjs +40 -0
  100. package/dist/{tab-BKdN4xAz.js → tab-Ca_OyNqQ.js} +5 -5
  101. package/dist/tab.cjs +1 -1
  102. package/dist/tab.js +1 -1
  103. package/dist/text-area-BztUgBL1.cjs +51 -0
  104. package/dist/text-area-DUg5BGQh.js +235 -0
  105. package/dist/textarea.cjs +1 -1
  106. package/dist/textarea.js +1 -1
  107. package/dist/timepicker-BKUTi_AU.js +316 -0
  108. package/dist/timepicker-CRtoPBMn.cjs +119 -0
  109. package/dist/timepicker.cjs +1 -0
  110. package/dist/timepicker.js +4 -0
  111. package/dist/toast-container-CHrtU7X5.js +274 -0
  112. package/dist/toast-container-T77X56AG.cjs +64 -0
  113. package/dist/toast.cjs +1 -0
  114. package/dist/toast.js +6 -0
  115. package/dist/tree-menu-5dkAPsgJ.js +154 -0
  116. package/dist/tree-menu-CdNwvOjp.cjs +47 -0
  117. package/dist/tree-menu.cjs +1 -0
  118. package/dist/tree-menu.js +4 -0
  119. package/dist/ui-icon-DKZMrOTi.cjs +22 -0
  120. package/dist/ui-icon-DrrH0WhF.js +70 -0
  121. package/package.json +56 -12
  122. package/dist/badge-BbhaO73N.cjs +0 -13
  123. package/dist/badge-DE7Tgd8Z.js +0 -71
  124. package/dist/button-C1EwOosO.js +0 -58
  125. package/dist/button-CDRccsk9.cjs +0 -10
  126. package/dist/card-n8ka8Zk-.cjs +0 -43
  127. package/dist/chatbot-Ces7Xveb.js +0 -496
  128. package/dist/chatbot-oRwt64d8.cjs +0 -160
  129. package/dist/combobox-BJbI-Tgi.js +0 -268
  130. package/dist/combobox-pmE7bgEL.cjs +0 -99
  131. package/dist/datepicker-DFJx45C-.js +0 -750
  132. package/dist/datepicker-b9JGTTMx.cjs +0 -115
  133. package/dist/directive-Z_rhNYWK.js +0 -240
  134. package/dist/directive-ekjitgzi.cjs +0 -3
  135. package/dist/download-manager-BSIMTGaK.cjs +0 -97
  136. package/dist/formfield-D_7NFFoe.cjs +0 -27
  137. package/dist/formfield-d8fp9FTV.js +0 -118
  138. package/dist/input-ByllRq9M.js +0 -192
  139. package/dist/input-DsIOQPGV.cjs +0 -46
  140. package/dist/live-BX-yBGvT.cjs +0 -1
  141. package/dist/live-WTVSYE2F.js +0 -24
  142. package/dist/modal-Bfc6WQSL.js +0 -110
  143. package/dist/modal-DQ8VFL-P.cjs +0 -39
  144. package/dist/popover-C_Ob86CJ.cjs +0 -30
  145. package/dist/popover-D-FXdEdS.js +0 -1040
  146. package/dist/switch-Cpl53nRW.js +0 -64
  147. package/dist/switch-Rnnn10bn.cjs +0 -17
  148. package/dist/tab-DcjAlXzU.cjs +0 -40
  149. package/dist/text-area-CtZY3yLA.js +0 -204
  150. package/dist/text-area-DFDF5oos.cjs +0 -44
@@ -0,0 +1,316 @@
1
+ import { unsafeCSS as d, css as _, LitElement as m, html as h } from "lit";
2
+ import { property as s, state as c, query as u, customElement as v } from "lit/decorators.js";
3
+ import { createPopper as b } from "@popperjs/core";
4
+ import "./input-BJtn_iTC.js";
5
+ import "./ui-icon-DrrH0WhF.js";
6
+ const g = ":host{display:block;width:100%}.timepicker__reference{display:block;width:100%}.timepicker__trigger{border:none;background:transparent;color:var(--color-tertiary);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;flex-shrink:0;height:100%;min-height:32px;outline:none;border-radius:0 var(--radius-base) var(--radius-base) 0;transition:color var(--transition-speed-fast) var(--transition-timing),background-color var(--transition-speed-fast) var(--transition-timing)}.timepicker__trigger:hover{color:var(--color-body-text);background-color:var(--color-body-bg-hover)}.timepicker__trigger--active{color:var(--color-body-text)}.timepicker__trigger:disabled{pointer-events:none;opacity:.4}.timepicker__popup[popover]{position:fixed;inset:unset;margin:0;padding:0;border:none;width:240px;background-color:var(--color-body-bg);border-radius:12px;box-shadow:0 4px 16px #7878783d;overflow:hidden;z-index:var(--z-index-dropdown, 1000)}.timepicker__spinner{display:flex;flex-direction:row;align-items:stretch;padding:var(--spacing-1) var(--spacing-2)}.timepicker__col{flex:1;display:flex;flex-direction:column;padding:0px var(--spacing-5)}.timepicker__col--left{align-items:flex-start}.timepicker__col--right{align-items:flex-end}.timepicker__col--sep{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 var(--spacing-1)}.timepicker__spin-btn{height:32px;display:flex;align-items:center;justify-content:center;border:none;padding:var(--spacing-2);background:transparent;color:var(--color-secondary);border-radius:var(--radius-base);cursor:pointer;outline:none;box-sizing:border-box;transition:background-color var(--transition-speed-fast) var(--transition-timing),color var(--transition-speed-fast) var(--transition-timing)}.timepicker__spin-btn:hover{background-color:var(--color-body-bg-hover);color:var(--color-body-text)}.timepicker__spin-btn:active{background-color:var(--color-body-bg-active)}.timepicker__time-unit{height:32px;display:flex;align-items:center;justify-content:center;font-size:14px;font-family:var(--font-family-base);font-weight:var(--font-weight-regular);line-height:1.25rem;letter-spacing:-.14px;color:var(--color-body-text);text-align:center;box-sizing:border-box;padding:var(--spacing-2)}.timepicker__colon{height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;font-family:var(--font-family-base);font-weight:var(--font-weight-medium);color:var(--color-secondary)}.timepicker__actions{display:flex;align-items:center;padding:var(--spacing-2);border-top:1px solid var(--color-border);gap:var(--spacing-1)}.timepicker__action-btn{flex:1 0 0;min-width:0;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--color-secondary);border-radius:var(--radius-full);cursor:pointer;padding:var(--spacing-2);outline:none;transition:background-color var(--transition-speed-fast) var(--transition-timing),color var(--transition-speed-fast) var(--transition-timing)}.timepicker__action-btn:hover{background-color:var(--color-body-bg-hover);color:var(--color-body-text)}.timepicker__action-btn:active{background-color:var(--color-body-bg-active)}";
7
+ var f = Object.defineProperty, y = Object.getOwnPropertyDescriptor, i = (t, r, n, a) => {
8
+ for (var o = a > 1 ? void 0 : a ? y(r, n) : r, p = t.length - 1, l; p >= 0; p--)
9
+ (l = t[p]) && (o = (a ? l(r, n, o) : l(o)) || o);
10
+ return a && o && f(r, n, o), o;
11
+ };
12
+ let e = class extends m {
13
+ constructor() {
14
+ super(...arguments), this.value = "", this.label = "", this.helper = "", this.error = "", this.placeholder = "__:__", this.required = !1, this.disabled = !1, this.readonly = !1, this.size = "default", this.variant = "default", this._isOpen = !1, this._hour = 0, this._minute = 0, this._handleOutsideClick = (t) => {
15
+ this._isOpen && !t.composedPath().includes(this) && (this._isOpen = !1);
16
+ }, this._handleInputChange = (t) => {
17
+ t.stopPropagation();
18
+ const r = t.detail?.value ?? "";
19
+ if (/^\d{2}:\d{2}$/.test(r)) {
20
+ const [n, a] = this._parseValue(r);
21
+ this._hour = n, this._minute = a;
22
+ const o = `${this._pad(n)}:${this._pad(a)}`;
23
+ this.value = o, this._emit(o);
24
+ }
25
+ }, this._handleInputClear = (t) => {
26
+ t.stopPropagation(), this.value = "", this._hour = 0, this._minute = 0, this._emit(""), this.dispatchEvent(new CustomEvent("clear", { bubbles: !0, composed: !0 })), this._isOpen = !1;
27
+ }, this._incrementHour = () => {
28
+ this._hour = (this._hour + 1) % 24, this._syncValue();
29
+ }, this._decrementHour = () => {
30
+ this._hour = (this._hour - 1 + 24) % 24, this._syncValue();
31
+ }, this._incrementMinute = () => {
32
+ this._minute = (this._minute + 1) % 60, this._syncValue();
33
+ }, this._decrementMinute = () => {
34
+ this._minute = (this._minute - 1 + 60) % 60, this._syncValue();
35
+ };
36
+ }
37
+ // ── Lifecycle ───────────────────────────────────────────────────────────────
38
+ connectedCallback() {
39
+ super.connectedCallback(), document.addEventListener("click", this._handleOutsideClick);
40
+ }
41
+ disconnectedCallback() {
42
+ super.disconnectedCallback(), document.removeEventListener("click", this._handleOutsideClick), this._destroyPopper();
43
+ }
44
+ willUpdate(t) {
45
+ if (t.has("value") && /^\d{1,2}:\d{2}$/.test(this.value)) {
46
+ const [r, n] = this._parseValue(this.value);
47
+ this._hour = r, this._minute = n;
48
+ }
49
+ }
50
+ updated(t) {
51
+ t.has("_isOpen") && (this._isOpen ? this.updateComplete.then(() => {
52
+ this._showPopover(), this._updatePopper();
53
+ }) : (this._hidePopover(), this._destroyPopper()));
54
+ }
55
+ // ── Value helpers ───────────────────────────────────────────────────────────
56
+ _parseValue(t) {
57
+ const r = t.match(/^(\d{1,2}):(\d{2})$/);
58
+ return r ? [
59
+ Math.min(23, Math.max(0, parseInt(r[1], 10))),
60
+ Math.min(59, Math.max(0, parseInt(r[2], 10)))
61
+ ] : [0, 0];
62
+ }
63
+ _pad(t) {
64
+ return String(t).padStart(2, "0");
65
+ }
66
+ // ── Popper / Popover ────────────────────────────────────────────────────────
67
+ _updatePopper() {
68
+ !this._referenceEl || !this._popupEl || (this._popperInstance = b(this._referenceEl, this._popupEl, {
69
+ placement: "bottom-start",
70
+ modifiers: [
71
+ { name: "offset", options: { offset: [0, 4] } },
72
+ { name: "flip", options: { fallbackPlacements: ["top-start"] } },
73
+ {
74
+ name: "preventOverflow",
75
+ options: { boundary: document.documentElement, padding: 8 }
76
+ }
77
+ ]
78
+ }));
79
+ }
80
+ _destroyPopper() {
81
+ this._popperInstance?.destroy(), this._popperInstance = void 0;
82
+ }
83
+ _showPopover() {
84
+ this._popupEl?.showPopover?.();
85
+ }
86
+ _hidePopover() {
87
+ const t = this._popupEl;
88
+ try {
89
+ t?.hidePopover?.();
90
+ } catch {
91
+ }
92
+ }
93
+ _togglePopup() {
94
+ if (!(this.disabled || this.readonly))
95
+ if (this._isOpen)
96
+ this._isOpen = !1;
97
+ else {
98
+ const [t, r] = this._parseValue(this.value);
99
+ this._hour = t, this._minute = r, this._isOpen = !0;
100
+ }
101
+ }
102
+ _clearValue(t) {
103
+ t?.stopPropagation(), this.value = "", this._hour = 0, this._minute = 0, this._emit(""), this.dispatchEvent(new CustomEvent("clear", { bubbles: !0, composed: !0 })), this._isOpen = !1;
104
+ }
105
+ _setNow() {
106
+ const t = /* @__PURE__ */ new Date();
107
+ this._hour = t.getHours(), this._minute = t.getMinutes(), this._syncValue();
108
+ }
109
+ _emit(t) {
110
+ this.onChange?.(t), this.dispatchEvent(new CustomEvent("change", {
111
+ bubbles: !0,
112
+ composed: !0,
113
+ detail: { value: t }
114
+ }));
115
+ }
116
+ _syncValue() {
117
+ const t = `${this._pad(this._hour)}:${this._pad(this._minute)}`;
118
+ this.value = t, this._emit(t);
119
+ }
120
+ _startSpin(t) {
121
+ t(), this._spinInterval = setInterval(t, 120);
122
+ }
123
+ _stopSpin() {
124
+ clearInterval(this._spinInterval), this._spinInterval = void 0;
125
+ }
126
+ // ── Render ──────────────────────────────────────────────────────────────────
127
+ _renderPopup() {
128
+ return h`
129
+ <div data-timepicker-popup popover="manual" class="timepicker__popup">
130
+ <div class="timepicker__spinner">
131
+ <!-- Sol sütun: saat -->
132
+ <div class="timepicker__col timepicker__col--left">
133
+ <button
134
+ class="timepicker__spin-btn"
135
+ @mousedown=${() => this._startSpin(this._incrementHour)}
136
+ @mouseup=${this._stopSpin}
137
+ @mouseleave=${this._stopSpin}
138
+ @touchstart=${(t) => {
139
+ t.preventDefault(), this._startSpin(this._incrementHour);
140
+ }}
141
+ @touchend=${this._stopSpin}
142
+ tabindex="-1"
143
+ aria-label="Saat artır"
144
+ ><ui-icon name="uil-arrow-up" size="16"></ui-icon></button>
145
+ <div class="timepicker__time-unit">${this._pad(this._hour)}</div>
146
+ <button
147
+ class="timepicker__spin-btn"
148
+ @mousedown=${() => this._startSpin(this._decrementHour)}
149
+ @mouseup=${this._stopSpin}
150
+ @mouseleave=${this._stopSpin}
151
+ @touchstart=${(t) => {
152
+ t.preventDefault(), this._startSpin(this._decrementHour);
153
+ }}
154
+ @touchend=${this._stopSpin}
155
+ tabindex="-1"
156
+ aria-label="Saat azalt"
157
+ ><ui-icon name="uil-arrow-down" size="16"></ui-icon></button>
158
+ </div>
159
+
160
+ <!-- Orta sütun: iki nokta -->
161
+ <div class="timepicker__col timepicker__col--sep">
162
+ <div class="timepicker__colon">:</div>
163
+ </div>
164
+
165
+ <!-- Sağ sütun: dakika -->
166
+ <div class="timepicker__col timepicker__col--right">
167
+ <button
168
+ class="timepicker__spin-btn"
169
+ @mousedown=${() => this._startSpin(this._incrementMinute)}
170
+ @mouseup=${this._stopSpin}
171
+ @mouseleave=${this._stopSpin}
172
+ @touchstart=${(t) => {
173
+ t.preventDefault(), this._startSpin(this._incrementMinute);
174
+ }}
175
+ @touchend=${this._stopSpin}
176
+ tabindex="-1"
177
+ aria-label="Dakika artır"
178
+ ><ui-icon name="uil-arrow-up" size="16"></ui-icon></button>
179
+ <div class="timepicker__time-unit">${this._pad(this._minute)}</div>
180
+ <button
181
+ class="timepicker__spin-btn"
182
+ @mousedown=${() => this._startSpin(this._decrementMinute)}
183
+ @mouseup=${this._stopSpin}
184
+ @mouseleave=${this._stopSpin}
185
+ @touchstart=${(t) => {
186
+ t.preventDefault(), this._startSpin(this._decrementMinute);
187
+ }}
188
+ @touchend=${this._stopSpin}
189
+ tabindex="-1"
190
+ aria-label="Dakika azalt"
191
+ ><ui-icon name="uil-arrow-down" size="16"></ui-icon></button>
192
+ </div>
193
+ </div>
194
+
195
+ <!-- Action buttons -->
196
+ <div class="timepicker__actions">
197
+ <button
198
+ class="timepicker__action-btn"
199
+ @click=${this._setNow}
200
+ title="Şu anki saati seç"
201
+ >
202
+ <ui-icon name="uil-calendar-alt" size="16"></ui-icon>
203
+ </button>
204
+ <button
205
+ class="timepicker__action-btn"
206
+ @click=${() => this._clearValue()}
207
+ title="Temizle"
208
+ >
209
+ <ui-icon name="uil-trash" size="16"></ui-icon>
210
+ </button>
211
+ <button
212
+ class="timepicker__action-btn"
213
+ @click=${() => {
214
+ this._isOpen = !1;
215
+ }}
216
+ title="Kapat"
217
+ >
218
+ <ui-icon name="uil-times" size="16"></ui-icon>
219
+ </button>
220
+ </div>
221
+ </div>
222
+ `;
223
+ }
224
+ render() {
225
+ return h`
226
+ <div class="timepicker__reference">
227
+ <logosphere-input
228
+ .label=${this.label}
229
+ .helper=${this.helper}
230
+ .error=${this.error}
231
+ .required=${this.required}
232
+ .disabled=${this.disabled}
233
+ .readonly=${this.readonly}
234
+ .size=${this.size}
235
+ .variant=${this.variant}
236
+ .placeholder=${this.placeholder}
237
+ .value=${this.value}
238
+ mask="00:00"
239
+ @input=${this._handleInputChange}
240
+ @clear=${this._handleInputClear}
241
+ @change=${(t) => t.stopPropagation()}
242
+ >
243
+ <button
244
+ slot="suffix"
245
+ type="button"
246
+ class="timepicker__trigger ${this._isOpen ? "timepicker__trigger--active" : ""}"
247
+ @click=${this._togglePopup}
248
+ ?disabled=${this.disabled}
249
+ tabindex=${this.disabled ? "-1" : "0"}
250
+ aria-label="Saat seç"
251
+ aria-expanded=${this._isOpen ? "true" : "false"}
252
+ >
253
+ <ui-icon name="uil-clock" size="16"></ui-icon>
254
+ </button>
255
+ </logosphere-input>
256
+ </div>
257
+
258
+ ${this._renderPopup()}
259
+ `;
260
+ }
261
+ };
262
+ e.styles = [_`${d(g)}`];
263
+ i([
264
+ s({ type: String })
265
+ ], e.prototype, "value", 2);
266
+ i([
267
+ s({ type: String })
268
+ ], e.prototype, "label", 2);
269
+ i([
270
+ s({ type: String })
271
+ ], e.prototype, "helper", 2);
272
+ i([
273
+ s({ type: String })
274
+ ], e.prototype, "error", 2);
275
+ i([
276
+ s({ type: String })
277
+ ], e.prototype, "placeholder", 2);
278
+ i([
279
+ s({ type: Boolean })
280
+ ], e.prototype, "required", 2);
281
+ i([
282
+ s({ type: Boolean })
283
+ ], e.prototype, "disabled", 2);
284
+ i([
285
+ s({ type: Boolean })
286
+ ], e.prototype, "readonly", 2);
287
+ i([
288
+ s({ type: String })
289
+ ], e.prototype, "size", 2);
290
+ i([
291
+ s({ type: String })
292
+ ], e.prototype, "variant", 2);
293
+ i([
294
+ s({ attribute: !1 })
295
+ ], e.prototype, "onChange", 2);
296
+ i([
297
+ c()
298
+ ], e.prototype, "_isOpen", 2);
299
+ i([
300
+ c()
301
+ ], e.prototype, "_hour", 2);
302
+ i([
303
+ c()
304
+ ], e.prototype, "_minute", 2);
305
+ i([
306
+ u(".timepicker__reference")
307
+ ], e.prototype, "_referenceEl", 2);
308
+ i([
309
+ u("[data-timepicker-popup]")
310
+ ], e.prototype, "_popupEl", 2);
311
+ e = i([
312
+ v("logosphere-timepicker")
313
+ ], e);
314
+ export {
315
+ e as T
316
+ };
@@ -0,0 +1,119 @@
1
+ "use strict";const a=require("lit"),t=require("lit/decorators.js"),l=require("@popperjs/core");require("./input-DPTTu8ZR.cjs");require("./ui-icon-DKZMrOTi.cjs");const u=":host{display:block;width:100%}.timepicker__reference{display:block;width:100%}.timepicker__trigger{border:none;background:transparent;color:var(--color-tertiary);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;flex-shrink:0;height:100%;min-height:32px;outline:none;border-radius:0 var(--radius-base) var(--radius-base) 0;transition:color var(--transition-speed-fast) var(--transition-timing),background-color var(--transition-speed-fast) var(--transition-timing)}.timepicker__trigger:hover{color:var(--color-body-text);background-color:var(--color-body-bg-hover)}.timepicker__trigger--active{color:var(--color-body-text)}.timepicker__trigger:disabled{pointer-events:none;opacity:.4}.timepicker__popup[popover]{position:fixed;inset:unset;margin:0;padding:0;border:none;width:240px;background-color:var(--color-body-bg);border-radius:12px;box-shadow:0 4px 16px #7878783d;overflow:hidden;z-index:var(--z-index-dropdown, 1000)}.timepicker__spinner{display:flex;flex-direction:row;align-items:stretch;padding:var(--spacing-1) var(--spacing-2)}.timepicker__col{flex:1;display:flex;flex-direction:column;padding:0px var(--spacing-5)}.timepicker__col--left{align-items:flex-start}.timepicker__col--right{align-items:flex-end}.timepicker__col--sep{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0 var(--spacing-1)}.timepicker__spin-btn{height:32px;display:flex;align-items:center;justify-content:center;border:none;padding:var(--spacing-2);background:transparent;color:var(--color-secondary);border-radius:var(--radius-base);cursor:pointer;outline:none;box-sizing:border-box;transition:background-color var(--transition-speed-fast) var(--transition-timing),color var(--transition-speed-fast) var(--transition-timing)}.timepicker__spin-btn:hover{background-color:var(--color-body-bg-hover);color:var(--color-body-text)}.timepicker__spin-btn:active{background-color:var(--color-body-bg-active)}.timepicker__time-unit{height:32px;display:flex;align-items:center;justify-content:center;font-size:14px;font-family:var(--font-family-base);font-weight:var(--font-weight-regular);line-height:1.25rem;letter-spacing:-.14px;color:var(--color-body-text);text-align:center;box-sizing:border-box;padding:var(--spacing-2)}.timepicker__colon{height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;font-family:var(--font-family-base);font-weight:var(--font-weight-medium);color:var(--color-secondary)}.timepicker__actions{display:flex;align-items:center;padding:var(--spacing-2);border-top:1px solid var(--color-border);gap:var(--spacing-1)}.timepicker__action-btn{flex:1 0 0;min-width:0;height:32px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--color-secondary);border-radius:var(--radius-full);cursor:pointer;padding:var(--spacing-2);outline:none;transition:background-color var(--transition-speed-fast) var(--transition-timing),color var(--transition-speed-fast) var(--transition-timing)}.timepicker__action-btn:hover{background-color:var(--color-body-bg-hover);color:var(--color-body-text)}.timepicker__action-btn:active{background-color:var(--color-body-bg-active)}";var h=Object.defineProperty,d=Object.getOwnPropertyDescriptor,i=(p,e,r,o)=>{for(var s=o>1?void 0:o?d(e,r):e,n=p.length-1,c;n>=0;n--)(c=p[n])&&(s=(o?c(e,r,s):c(s))||s);return o&&s&&h(e,r,s),s};exports.TimePicker=class extends a.LitElement{constructor(){super(...arguments),this.value="",this.label="",this.helper="",this.error="",this.placeholder="__:__",this.required=!1,this.disabled=!1,this.readonly=!1,this.size="default",this.variant="default",this._isOpen=!1,this._hour=0,this._minute=0,this._handleOutsideClick=e=>{this._isOpen&&!e.composedPath().includes(this)&&(this._isOpen=!1)},this._handleInputChange=e=>{e.stopPropagation();const r=e.detail?.value??"";if(/^\d{2}:\d{2}$/.test(r)){const[o,s]=this._parseValue(r);this._hour=o,this._minute=s;const n=`${this._pad(o)}:${this._pad(s)}`;this.value=n,this._emit(n)}},this._handleInputClear=e=>{e.stopPropagation(),this.value="",this._hour=0,this._minute=0,this._emit(""),this.dispatchEvent(new CustomEvent("clear",{bubbles:!0,composed:!0})),this._isOpen=!1},this._incrementHour=()=>{this._hour=(this._hour+1)%24,this._syncValue()},this._decrementHour=()=>{this._hour=(this._hour-1+24)%24,this._syncValue()},this._incrementMinute=()=>{this._minute=(this._minute+1)%60,this._syncValue()},this._decrementMinute=()=>{this._minute=(this._minute-1+60)%60,this._syncValue()}}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this._handleOutsideClick)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this._handleOutsideClick),this._destroyPopper()}willUpdate(e){if(e.has("value")&&/^\d{1,2}:\d{2}$/.test(this.value)){const[r,o]=this._parseValue(this.value);this._hour=r,this._minute=o}}updated(e){e.has("_isOpen")&&(this._isOpen?this.updateComplete.then(()=>{this._showPopover(),this._updatePopper()}):(this._hidePopover(),this._destroyPopper()))}_parseValue(e){const r=e.match(/^(\d{1,2}):(\d{2})$/);return r?[Math.min(23,Math.max(0,parseInt(r[1],10))),Math.min(59,Math.max(0,parseInt(r[2],10)))]:[0,0]}_pad(e){return String(e).padStart(2,"0")}_updatePopper(){!this._referenceEl||!this._popupEl||(this._popperInstance=l.createPopper(this._referenceEl,this._popupEl,{placement:"bottom-start",modifiers:[{name:"offset",options:{offset:[0,4]}},{name:"flip",options:{fallbackPlacements:["top-start"]}},{name:"preventOverflow",options:{boundary:document.documentElement,padding:8}}]}))}_destroyPopper(){this._popperInstance?.destroy(),this._popperInstance=void 0}_showPopover(){this._popupEl?.showPopover?.()}_hidePopover(){const e=this._popupEl;try{e?.hidePopover?.()}catch{}}_togglePopup(){if(!(this.disabled||this.readonly))if(this._isOpen)this._isOpen=!1;else{const[e,r]=this._parseValue(this.value);this._hour=e,this._minute=r,this._isOpen=!0}}_clearValue(e){e?.stopPropagation(),this.value="",this._hour=0,this._minute=0,this._emit(""),this.dispatchEvent(new CustomEvent("clear",{bubbles:!0,composed:!0})),this._isOpen=!1}_setNow(){const e=new Date;this._hour=e.getHours(),this._minute=e.getMinutes(),this._syncValue()}_emit(e){this.onChange?.(e),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,composed:!0,detail:{value:e}}))}_syncValue(){const e=`${this._pad(this._hour)}:${this._pad(this._minute)}`;this.value=e,this._emit(e)}_startSpin(e){e(),this._spinInterval=setInterval(e,120)}_stopSpin(){clearInterval(this._spinInterval),this._spinInterval=void 0}_renderPopup(){return a.html`
2
+ <div data-timepicker-popup popover="manual" class="timepicker__popup">
3
+ <div class="timepicker__spinner">
4
+ <!-- Sol sütun: saat -->
5
+ <div class="timepicker__col timepicker__col--left">
6
+ <button
7
+ class="timepicker__spin-btn"
8
+ @mousedown=${()=>this._startSpin(this._incrementHour)}
9
+ @mouseup=${this._stopSpin}
10
+ @mouseleave=${this._stopSpin}
11
+ @touchstart=${e=>{e.preventDefault(),this._startSpin(this._incrementHour)}}
12
+ @touchend=${this._stopSpin}
13
+ tabindex="-1"
14
+ aria-label="Saat artır"
15
+ ><ui-icon name="uil-arrow-up" size="16"></ui-icon></button>
16
+ <div class="timepicker__time-unit">${this._pad(this._hour)}</div>
17
+ <button
18
+ class="timepicker__spin-btn"
19
+ @mousedown=${()=>this._startSpin(this._decrementHour)}
20
+ @mouseup=${this._stopSpin}
21
+ @mouseleave=${this._stopSpin}
22
+ @touchstart=${e=>{e.preventDefault(),this._startSpin(this._decrementHour)}}
23
+ @touchend=${this._stopSpin}
24
+ tabindex="-1"
25
+ aria-label="Saat azalt"
26
+ ><ui-icon name="uil-arrow-down" size="16"></ui-icon></button>
27
+ </div>
28
+
29
+ <!-- Orta sütun: iki nokta -->
30
+ <div class="timepicker__col timepicker__col--sep">
31
+ <div class="timepicker__colon">:</div>
32
+ </div>
33
+
34
+ <!-- Sağ sütun: dakika -->
35
+ <div class="timepicker__col timepicker__col--right">
36
+ <button
37
+ class="timepicker__spin-btn"
38
+ @mousedown=${()=>this._startSpin(this._incrementMinute)}
39
+ @mouseup=${this._stopSpin}
40
+ @mouseleave=${this._stopSpin}
41
+ @touchstart=${e=>{e.preventDefault(),this._startSpin(this._incrementMinute)}}
42
+ @touchend=${this._stopSpin}
43
+ tabindex="-1"
44
+ aria-label="Dakika artır"
45
+ ><ui-icon name="uil-arrow-up" size="16"></ui-icon></button>
46
+ <div class="timepicker__time-unit">${this._pad(this._minute)}</div>
47
+ <button
48
+ class="timepicker__spin-btn"
49
+ @mousedown=${()=>this._startSpin(this._decrementMinute)}
50
+ @mouseup=${this._stopSpin}
51
+ @mouseleave=${this._stopSpin}
52
+ @touchstart=${e=>{e.preventDefault(),this._startSpin(this._decrementMinute)}}
53
+ @touchend=${this._stopSpin}
54
+ tabindex="-1"
55
+ aria-label="Dakika azalt"
56
+ ><ui-icon name="uil-arrow-down" size="16"></ui-icon></button>
57
+ </div>
58
+ </div>
59
+
60
+ <!-- Action buttons -->
61
+ <div class="timepicker__actions">
62
+ <button
63
+ class="timepicker__action-btn"
64
+ @click=${this._setNow}
65
+ title="Şu anki saati seç"
66
+ >
67
+ <ui-icon name="uil-calendar-alt" size="16"></ui-icon>
68
+ </button>
69
+ <button
70
+ class="timepicker__action-btn"
71
+ @click=${()=>this._clearValue()}
72
+ title="Temizle"
73
+ >
74
+ <ui-icon name="uil-trash" size="16"></ui-icon>
75
+ </button>
76
+ <button
77
+ class="timepicker__action-btn"
78
+ @click=${()=>{this._isOpen=!1}}
79
+ title="Kapat"
80
+ >
81
+ <ui-icon name="uil-times" size="16"></ui-icon>
82
+ </button>
83
+ </div>
84
+ </div>
85
+ `}render(){return a.html`
86
+ <div class="timepicker__reference">
87
+ <logosphere-input
88
+ .label=${this.label}
89
+ .helper=${this.helper}
90
+ .error=${this.error}
91
+ .required=${this.required}
92
+ .disabled=${this.disabled}
93
+ .readonly=${this.readonly}
94
+ .size=${this.size}
95
+ .variant=${this.variant}
96
+ .placeholder=${this.placeholder}
97
+ .value=${this.value}
98
+ mask="00:00"
99
+ @input=${this._handleInputChange}
100
+ @clear=${this._handleInputClear}
101
+ @change=${e=>e.stopPropagation()}
102
+ >
103
+ <button
104
+ slot="suffix"
105
+ type="button"
106
+ class="timepicker__trigger ${this._isOpen?"timepicker__trigger--active":""}"
107
+ @click=${this._togglePopup}
108
+ ?disabled=${this.disabled}
109
+ tabindex=${this.disabled?"-1":"0"}
110
+ aria-label="Saat seç"
111
+ aria-expanded=${this._isOpen?"true":"false"}
112
+ >
113
+ <ui-icon name="uil-clock" size="16"></ui-icon>
114
+ </button>
115
+ </logosphere-input>
116
+ </div>
117
+
118
+ ${this._renderPopup()}
119
+ `}};exports.TimePicker.styles=[a.css`${a.unsafeCSS(u)}`];i([t.property({type:String})],exports.TimePicker.prototype,"value",2);i([t.property({type:String})],exports.TimePicker.prototype,"label",2);i([t.property({type:String})],exports.TimePicker.prototype,"helper",2);i([t.property({type:String})],exports.TimePicker.prototype,"error",2);i([t.property({type:String})],exports.TimePicker.prototype,"placeholder",2);i([t.property({type:Boolean})],exports.TimePicker.prototype,"required",2);i([t.property({type:Boolean})],exports.TimePicker.prototype,"disabled",2);i([t.property({type:Boolean})],exports.TimePicker.prototype,"readonly",2);i([t.property({type:String})],exports.TimePicker.prototype,"size",2);i([t.property({type:String})],exports.TimePicker.prototype,"variant",2);i([t.property({attribute:!1})],exports.TimePicker.prototype,"onChange",2);i([t.state()],exports.TimePicker.prototype,"_isOpen",2);i([t.state()],exports.TimePicker.prototype,"_hour",2);i([t.state()],exports.TimePicker.prototype,"_minute",2);i([t.query(".timepicker__reference")],exports.TimePicker.prototype,"_referenceEl",2);i([t.query("[data-timepicker-popup]")],exports.TimePicker.prototype,"_popupEl",2);exports.TimePicker=i([t.customElement("logosphere-timepicker")],exports.TimePicker);
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./timepicker-CRtoPBMn.cjs");Object.defineProperty(exports,"TimePicker",{enumerable:!0,get:()=>e.TimePicker});
@@ -0,0 +1,4 @@
1
+ import { T as i } from "./timepicker-BKUTi_AU.js";
2
+ export {
3
+ i as TimePicker
4
+ };