@logosphere-ui/core 0.0.0-alpha.4 → 0.0.0-alpha.42

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 (176) hide show
  1. package/AGENTS.md +1123 -0
  2. package/dist/AGENTS.md +1123 -0
  3. package/dist/atoms/Badge/badge.d.ts +1 -1
  4. package/dist/atoms/Button/button.d.ts +5 -3
  5. package/dist/atoms/Checkbox/checkbox.d.ts +2 -1
  6. package/dist/atoms/FormField/formfield.d.ts +10 -0
  7. package/dist/atoms/Slider/index.d.ts +1 -0
  8. package/dist/atoms/Slider/slider.d.ts +54 -0
  9. package/dist/badge-DsDxWEHx.js +72 -0
  10. package/dist/badge-DvaKpUHe.cjs +13 -0
  11. package/dist/badge.cjs +1 -1
  12. package/dist/badge.js +1 -1
  13. package/dist/{breadcrumb-B-4yqoJZ.js → breadcrumb-BB61Xt0s.js} +3 -3
  14. package/dist/breadcrumb.js +1 -1
  15. package/dist/button-DRZ4sG4T.cjs +10 -0
  16. package/dist/button-Uu9oaieg.js +58 -0
  17. package/dist/button.cjs +1 -1
  18. package/dist/button.js +1 -1
  19. package/dist/calendar-CIgyrv3U.cjs +88 -0
  20. package/dist/calendar-CZ_IN2TF.js +652 -0
  21. package/dist/calendar.cjs +1 -0
  22. package/dist/calendar.js +4 -0
  23. package/dist/card-BOCW7gad.cjs +43 -0
  24. package/dist/{card-CUhlTJyJ.js → card-MDwFGplY.js} +27 -26
  25. package/dist/card.cjs +1 -1
  26. package/dist/card.js +1 -1
  27. package/dist/chatbot-B-NiZIYK.cjs +183 -0
  28. package/dist/chatbot-CHgiUY4h.js +564 -0
  29. package/dist/chatbot.cjs +1 -1
  30. package/dist/chatbot.js +2 -2
  31. package/dist/checkbox-CX0LgsWP.js +148 -0
  32. package/dist/checkbox-DpbKHANK.cjs +53 -0
  33. package/dist/checkbox.cjs +1 -1
  34. package/dist/checkbox.js +1 -1
  35. package/dist/chip-group-BUL2H8rr.js +89 -0
  36. package/dist/chip-group-CpcjGoRm.cjs +26 -0
  37. package/dist/chip-group.cjs +1 -0
  38. package/dist/chip-group.js +4 -0
  39. package/dist/combobox-BmIFPk8X.cjs +113 -0
  40. package/dist/combobox-jak7Ac1m.js +437 -0
  41. package/dist/combobox.cjs +1 -1
  42. package/dist/combobox.js +1 -1
  43. package/dist/datepicker-BgysIOZI.js +375 -0
  44. package/dist/datepicker-DOBmbxlo.cjs +85 -0
  45. package/dist/datepicker.cjs +1 -1
  46. package/dist/datepicker.js +2 -2
  47. package/dist/{download-manager-A4fOxGWJ.js → download-manager-BPg-6Qfg.js} +4 -4
  48. package/dist/download-manager-DDeTYRPs.cjs +97 -0
  49. package/dist/download-manager.cjs +1 -1
  50. package/dist/download-manager.js +1 -1
  51. package/dist/drawer-3nyjAkcS.cjs +32 -0
  52. package/dist/drawer-CE9zzllI.js +114 -0
  53. package/dist/drawer.cjs +1 -0
  54. package/dist/drawer.js +4 -0
  55. package/dist/formfield-CRcyUMvQ.cjs +33 -0
  56. package/dist/formfield-O327HYt0.js +154 -0
  57. package/dist/formfield.cjs +1 -1
  58. package/dist/formfield.js +1 -1
  59. package/dist/index.cjs +291 -1
  60. package/dist/index.d.ts +14 -0
  61. package/dist/index.js +908 -32
  62. package/dist/index.umd.js +1544 -521
  63. package/dist/input-CQS0LzF-.cjs +59 -0
  64. package/dist/input-CeF3YJk-.js +257 -0
  65. package/dist/input.cjs +1 -1
  66. package/dist/input.js +1 -1
  67. package/dist/left-menu.cjs +1 -0
  68. package/dist/left-menu.js +5 -0
  69. package/dist/leftmenu-CmWvnA6L.js +301 -0
  70. package/dist/leftmenu-p9aR2QTy.cjs +83 -0
  71. package/dist/modal-DUIv_yoo.js +250 -0
  72. package/dist/modal-dUnnHe8u.cjs +84 -0
  73. package/dist/modal.cjs +1 -1
  74. package/dist/modal.js +1 -1
  75. package/dist/molecules/Accordion/accordion.d.ts +42 -0
  76. package/dist/molecules/Accordion/index.d.ts +2 -0
  77. package/dist/molecules/Chip/chip-group.d.ts +29 -0
  78. package/dist/molecules/Chip/index.d.ts +2 -0
  79. package/dist/molecules/Collapse/collapse.d.ts +42 -0
  80. package/dist/molecules/Collapse/index.d.ts +2 -0
  81. package/dist/molecules/Input/input.d.ts +7 -1
  82. package/dist/molecules/InputGroup/index.d.ts +1 -0
  83. package/dist/molecules/InputGroup/input-group.d.ts +40 -0
  84. package/dist/molecules/Pagination/index.d.ts +1 -0
  85. package/dist/molecules/Pagination/pagination.d.ts +60 -0
  86. package/dist/molecules/Popover/popover.d.ts +1 -0
  87. package/dist/molecules/SplitButton/index.d.ts +2 -0
  88. package/dist/molecules/SplitButton/split-button.d.ts +53 -0
  89. package/dist/molecules/Stepper/index.d.ts +2 -0
  90. package/dist/molecules/Stepper/stepper.d.ts +34 -0
  91. package/dist/molecules/Textarea/text-area.d.ts +5 -2
  92. package/dist/molecules/TimePicker/index.d.ts +2 -0
  93. package/dist/molecules/TimePicker/timepicker.d.ts +62 -0
  94. package/dist/organisms/Calendar/calendar.d.ts +54 -0
  95. package/dist/organisms/Calendar/index.d.ts +1 -0
  96. package/dist/organisms/Calendar/shared.d.ts +9 -0
  97. package/dist/organisms/Chatbot/chatbot.d.ts +10 -1
  98. package/dist/organisms/Chatbot/index.d.ts +1 -1
  99. package/dist/organisms/Combobox/combobox.d.ts +30 -0
  100. package/dist/organisms/DatePicker/datepicker.d.ts +33 -33
  101. package/dist/organisms/Drawer/drawer.d.ts +30 -0
  102. package/dist/organisms/Drawer/index.d.ts +1 -0
  103. package/dist/organisms/LeftMenu/index.d.ts +2 -0
  104. package/dist/organisms/LeftMenu/leftmenu-item.d.ts +14 -0
  105. package/dist/organisms/LeftMenu/leftmenu.d.ts +45 -0
  106. package/dist/organisms/Modal/modal.d.ts +29 -4
  107. package/dist/organisms/Tab/tab.d.ts +13 -1
  108. package/dist/organisms/Toast/index.d.ts +2 -0
  109. package/dist/organisms/Toast/toast-container.d.ts +42 -0
  110. package/dist/organisms/Toast/toast.d.ts +48 -0
  111. package/dist/organisms/TreeMenu/index.d.ts +1 -0
  112. package/dist/organisms/TreeMenu/tree-menu.d.ts +41 -0
  113. package/dist/pagination-B7jknoOz.js +360 -0
  114. package/dist/pagination-BkqbWBOn.cjs +169 -0
  115. package/dist/pagination.cjs +1 -0
  116. package/dist/pagination.js +4 -0
  117. package/dist/popover-CYDoeLKp.cjs +30 -0
  118. package/dist/{popover-B7tCqk3R.js → popover-DDaG8MSj.js} +21 -18
  119. package/dist/popover.cjs +1 -1
  120. package/dist/popover.js +1 -1
  121. package/dist/shared/types/button.types.d.ts +7 -0
  122. package/dist/styles/main.css +186 -182
  123. package/dist/switch-8RGGesy5.cjs +17 -0
  124. package/dist/switch-DNqPqH-R.js +64 -0
  125. package/dist/switch.cjs +1 -1
  126. package/dist/switch.js +1 -1
  127. package/dist/tab-CDMcFHvP.cjs +41 -0
  128. package/dist/tab-CuBCFGoO.js +204 -0
  129. package/dist/tab.cjs +1 -1
  130. package/dist/tab.js +1 -1
  131. package/dist/text-area-C73JxnqH.js +235 -0
  132. package/dist/text-area-Cprb-azV.cjs +51 -0
  133. package/dist/textarea.cjs +1 -1
  134. package/dist/textarea.js +1 -1
  135. package/dist/timepicker-CLJKWWGm.cjs +119 -0
  136. package/dist/timepicker-DMzGYd0p.js +316 -0
  137. package/dist/timepicker.cjs +1 -0
  138. package/dist/timepicker.js +4 -0
  139. package/dist/toast-container-6t6yEP9Y.cjs +64 -0
  140. package/dist/toast-container-B5v74b_5.js +274 -0
  141. package/dist/toast.cjs +1 -0
  142. package/dist/toast.js +6 -0
  143. package/dist/tree-menu-CkOPxr-W.js +154 -0
  144. package/dist/tree-menu-WNwZMreD.cjs +47 -0
  145. package/dist/tree-menu.cjs +1 -0
  146. package/dist/tree-menu.js +4 -0
  147. package/dist/ui-icon-BMJNdIOq.js +71 -0
  148. package/dist/ui-icon-DIucAQC_.cjs +22 -0
  149. package/package.json +99 -12
  150. package/dist/badge-BbhaO73N.cjs +0 -13
  151. package/dist/badge-DE7Tgd8Z.js +0 -71
  152. package/dist/button-C1EwOosO.js +0 -58
  153. package/dist/button-CDRccsk9.cjs +0 -10
  154. package/dist/card-n8ka8Zk-.cjs +0 -43
  155. package/dist/chatbot-Da_itUdJ.cjs +0 -160
  156. package/dist/chatbot-zkxngMRH.js +0 -481
  157. package/dist/checkbox-7Rb3WKGx.js +0 -119
  158. package/dist/checkbox-CdDTRdKV.cjs +0 -37
  159. package/dist/combobox-BJbI-Tgi.js +0 -268
  160. package/dist/combobox-pmE7bgEL.cjs +0 -99
  161. package/dist/datepicker-DFJx45C-.js +0 -750
  162. package/dist/datepicker-b9JGTTMx.cjs +0 -115
  163. package/dist/download-manager-BSIMTGaK.cjs +0 -97
  164. package/dist/formfield-D_7NFFoe.cjs +0 -27
  165. package/dist/formfield-d8fp9FTV.js +0 -118
  166. package/dist/input-BcnI1w3_.cjs +0 -46
  167. package/dist/input-Bj_7u8Iv.js +0 -192
  168. package/dist/modal-Bfc6WQSL.js +0 -110
  169. package/dist/modal-DQ8VFL-P.cjs +0 -39
  170. package/dist/popover-C2p5Pmts.cjs +0 -30
  171. package/dist/switch-Cpl53nRW.js +0 -64
  172. package/dist/switch-Rnnn10bn.cjs +0 -17
  173. package/dist/tab-BKdN4xAz.js +0 -176
  174. package/dist/tab-DcjAlXzU.cjs +0 -40
  175. package/dist/text-area-BkHdLnZj.cjs +0 -44
  176. package/dist/text-area-CC24lj8v.js +0 -204
@@ -0,0 +1,437 @@
1
+ import { unsafeCSS as _, css as f, LitElement as g, html as a, nothing as d } from "lit";
2
+ import { property as n, state as b, query as u, customElement as x } from "lit/decorators.js";
3
+ import { createPopper as v } from "@popperjs/core";
4
+ import "./badge-DsDxWEHx.js";
5
+ import "./checkbox-CX0LgsWP.js";
6
+ import "./formfield-O327HYt0.js";
7
+ import "./ui-icon-BMJNdIOq.js";
8
+ const y = '.combobox{display:flex;flex-direction:column;gap:var(--spacing-1);font-family:var(--font-family-base);width:100%}.combobox__label{display:block;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-body-text)}.combobox__label--required:after{content:" *";color:var(--color-primary)}.combobox__readonly{border:none;background:transparent;font-size:var(--font-size-sm);color:var(--color-body-text);padding:0;outline:none;font-family:var(--font-family-base)}.combobox__wrapper{position:relative;width:100%;cursor:pointer}.combobox__trigger{display:flex;align-items:center;justify-content:space-between;width:100%;gap:var(--spacing-2);padding:0;border:none;border-radius:0;background-color:transparent;cursor:pointer;overflow:hidden;font-size:var(--font-size-sm);color:var(--color-body-text);transition:color var(--transition-speed-fast) var(--transition-timing);box-sizing:border-box}.combobox__trigger--default{min-height:20px}.combobox__trigger--large{min-height:24px;font-size:var(--font-size-base)}.combobox__trigger--open{color:var(--color-body-text)}.combobox__trigger--readonly{cursor:default;color:var(--color-tertiary)}.combobox__trigger--disabled{cursor:not-allowed;color:var(--color-tertiary)}.combobox__trigger--readonly .combobox__chevron,.combobox__trigger--disabled .combobox__chevron{opacity:.3}.combobox__placeholder{color:var(--color-tertiary);font-size:var(--font-size-sm);flex:1}.combobox__single-value{flex:1;font-size:var(--font-size-sm);color:var(--color-body-text)}.combobox__trigger--not-clearable .combobox__single-value,.combobox__trigger--not-clearable .combobox__placeholder{padding-right:24px}.combobox__chevron{display:inline-flex;align-items:center;justify-content:center;color:var(--color-tertiary);flex-shrink:0;transition:transform var(--transition-speed-fast) var(--transition-timing);position:absolute;right:var(--spacing-3)}.combobox__chevron--open{transform:rotate(180deg)}.combobox__tags{display:flex;flex-wrap:wrap;align-items:center;gap:var(--spacing-1);flex:1;overflow:hidden}.combobox__tag{display:inline-flex;align-items:center;gap:var(--spacing-1);padding:var(--spacing-1) var(--spacing-2);background-color:var(--color-light);border-radius:var(--radius-sm);font-size:var(--font-size-xs);color:var(--color-body-text);white-space:nowrap}.combobox__tag-remove{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;cursor:pointer;color:var(--color-tertiary);line-height:1;transition:color var(--transition-speed-fast) var(--transition-timing)}.combobox__tag-remove:hover{color:var(--color-body-text)}.combobox__clear{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0 12px 0 0;cursor:pointer;color:var(--color-secondary);line-height:1;flex-shrink:0;transition:color var(--transition-speed-fast) var(--transition-timing)}.combobox__clear:hover{color:var(--color-body-text)}.combobox__filter-input{flex:1;border:none;outline:none;background:transparent;font-size:var(--font-size-sm);font-family:var(--font-family-base);color:var(--color-body-text);min-width:0;padding:0;cursor:text}.combobox__filter-input:disabled{cursor:not-allowed}.combobox__filter-input::placeholder{color:var(--color-tertiary)}.combobox__filter-input--inline{flex:1;min-width:60px}.combobox__trigger--multi-filter{flex-wrap:wrap;height:auto;min-height:32px;gap:var(--spacing-1);padding:var(--spacing-1) var(--spacing-3)}.combobox__trigger--large.combobox__trigger--multi-filter{min-height:40px}.combobox__dropdown[popover]{position:fixed;inset:unset;margin:0;padding:0;border:none}.combobox__dropdown{width:auto;background-color:var(--color-body-bg);border:1px solid var(--color-border);border-radius:var(--radius-base);box-shadow:var(--shadow-sm);z-index:var(--z-index-dropdown);overflow:hidden}.combobox__search{width:100%;padding:var(--spacing-2) var(--spacing-3);border:none;border-bottom:1px solid var(--color-border);font-size:var(--font-size-sm);color:var(--color-body-text);font-family:var(--font-family-base);outline:none;box-sizing:border-box;background-color:var(--color-body-bg)}.combobox__search::placeholder{color:var(--color-tertiary)}.combobox__list{max-height:208px;overflow-y:auto}.combobox__group--titled+.combobox__group--titled:before{content:"";display:block;margin:var(--spacing-2) 0;border-top:1px solid var(--color-border)}.combobox__group-title{margin-top:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3) var(--spacing-2);font-size:var(--font-size-sm);font-weight:var(--font-weight-normal);color:var(--color-tertiary)}.combobox__item{display:flex;align-items:center;gap:var(--spacing-2);padding:var(--spacing-2) var(--spacing-3);font-size:var(--font-size-sm);color:var(--color-body-text);cursor:pointer;transition:background-color var(--transition-speed-fast) var(--transition-timing)}.combobox__item:hover,.combobox__item--selected,.combobox__item--focused{background-color:var(--color-light)}.combobox__empty{padding:var(--spacing-2) var(--spacing-3);font-size:var(--font-size-sm);color:var(--color-tertiary);text-align:center}';
9
+ var w = Object.defineProperty, $ = Object.getOwnPropertyDescriptor, i = (e, t, r, l) => {
10
+ for (var s = l > 1 ? void 0 : l ? $(t, r) : t, p = e.length - 1, c; p >= 0; p--)
11
+ (c = e[p]) && (s = (l ? c(t, r, s) : c(s)) || s);
12
+ return l && s && w(t, r, s), s;
13
+ };
14
+ let o = class extends g {
15
+ constructor() {
16
+ super(...arguments), this.inputId = "combo-" + Math.random().toString(36).substring(2), this.label = "", this.helper = "", this.error = "", this.placeholder = "Seçim yapınız", this.required = !1, this.disabled = !1, this.readOnly = !1, this.variant = "default", this.multiple = !1, this.filterable = !1, this.optionLabel = "label", this.optionValue = "value", this.emptyMessage = "Sonuç yok", this.items = [], this.size = "default", this.clearable = !0, this.selected = [], this.inputValue = "", this.isOpen = !1, this.focusedIndex = -1, this._filteredItems = [], this._filteredGroups = [], this._handleOutsideClick = (e) => {
17
+ e.composedPath().includes(this) || this._closeDropdown();
18
+ }, this._handleKeydown = (e) => {
19
+ if (!(this.readOnly || this.disabled))
20
+ switch (e.key) {
21
+ case "ArrowDown":
22
+ e.preventDefault(), this.isOpen ? this.focusedIndex = Math.min(this.focusedIndex + 1, this._filteredItems.length - 1) : (this.isOpen = !0, this.focusedIndex = 0), this._scrollFocusedIntoView();
23
+ break;
24
+ case "ArrowUp":
25
+ e.preventDefault(), this.isOpen && (this.focusedIndex = Math.max(this.focusedIndex - 1, 0), this._scrollFocusedIntoView());
26
+ break;
27
+ case "Enter":
28
+ e.preventDefault(), this.isOpen ? this.focusedIndex >= 0 && this.focusedIndex < this._filteredItems.length && this._selectItem(this._filteredItems[this.focusedIndex], e) : (this.isOpen = !0, this.focusedIndex = 0);
29
+ break;
30
+ case "Escape":
31
+ e.preventDefault(), this._closeDropdown();
32
+ break;
33
+ }
34
+ }, this._removeTag = (e, t) => {
35
+ t.stopPropagation(), this.setSelected(
36
+ this.selected.filter((r) => r[this.optionValue] !== e[this.optionValue])
37
+ );
38
+ }, this._clearSelection = (e) => {
39
+ e.stopPropagation(), this.setSelected([]), this.inputValue = "";
40
+ }, this._onFilterFocus = () => {
41
+ this.readOnly || this.disabled || (this.inputValue = "", this.isOpen = !0, this.focusedIndex = 0);
42
+ }, this._onFilterInput = (e) => {
43
+ this.readOnly || this.disabled || (this.inputValue = e.target.value, this.focusedIndex = 0, this.isOpen || (this.isOpen = !0));
44
+ }, this._stopPropagation = (e) => e.stopPropagation(), this._onTriggerClick = () => {
45
+ this.readOnly || this.disabled || (this.filterable && !this.multiple ? this._focusFilterInput() : this.isOpen = !this.isOpen);
46
+ }, this._onFieldClick = (e) => {
47
+ if (this.readOnly || this.disabled) return;
48
+ const t = e.composedPath();
49
+ if (!(t.some((s) => {
50
+ const p = s?.classList;
51
+ return p?.contains("combobox__trigger") || p?.contains("combobox__chevron");
52
+ }) || t.some(
53
+ (s) => s?.classList?.contains("combobox__dropdown")
54
+ ))) {
55
+ if (this.filterable && !this.multiple) {
56
+ this.isOpen = !0, this._focusFilterInput();
57
+ return;
58
+ }
59
+ this.isOpen = !this.isOpen;
60
+ }
61
+ }, this._onChevronClick = () => {
62
+ if (!(this.readOnly || this.disabled)) {
63
+ if (this.isOpen) {
64
+ this._closeDropdown();
65
+ return;
66
+ }
67
+ this.isOpen = !0, this.filterable && !this.multiple && this._focusFilterInput();
68
+ }
69
+ };
70
+ }
71
+ // ==================== LIFECYCLE ====================
72
+ willUpdate(e) {
73
+ if (e.has("items") || e.has("inputValue") || e.has("optionLabel")) {
74
+ const t = this.inputValue.toLocaleLowerCase(), r = (c) => c.filter(
75
+ (h) => String(h[this.optionLabel] ?? "").toLocaleLowerCase().includes(t)
76
+ ), l = [];
77
+ let s = [];
78
+ const p = () => {
79
+ const c = r(s);
80
+ c.length && l.push({ label: "", items: c }), s = [];
81
+ };
82
+ this.items.forEach((c) => {
83
+ const h = this._getGroupItems(c);
84
+ if (!h) {
85
+ s = [...s, c];
86
+ return;
87
+ }
88
+ p();
89
+ const m = r(h);
90
+ m.length && l.push({
91
+ label: this._getGroupLabel(c),
92
+ items: m
93
+ });
94
+ }), p(), this._filteredGroups = l, this._filteredItems = this._filteredGroups.flatMap((c) => c.items);
95
+ }
96
+ }
97
+ updated(e) {
98
+ if (e.has("isOpen") && this.isOpen && this.filterable && this.multiple && this.shadowRoot?.querySelector(".combobox__search")?.focus(), e.has("isOpen")) {
99
+ this.isOpen ? this.updateComplete.then(() => {
100
+ this._showPopover(), this._updatePopper();
101
+ }) : (this._hidePopover(), this._destroyPopper());
102
+ return;
103
+ }
104
+ this.isOpen && this._updatePopper();
105
+ }
106
+ connectedCallback() {
107
+ super.connectedCallback(), document.addEventListener("click", this._handleOutsideClick);
108
+ }
109
+ disconnectedCallback() {
110
+ super.disconnectedCallback(), document.removeEventListener("click", this._handleOutsideClick), this._destroyPopper();
111
+ }
112
+ // ==================== HELPERS ====================
113
+ _closeDropdown() {
114
+ this.isOpen = !1, this.focusedIndex = -1, this.filterable && (this.inputValue = "");
115
+ }
116
+ get _filterDisplayValue() {
117
+ return this.isOpen ? this.inputValue : !this.multiple && this.selected.length ? String(this.selected[0][this.optionLabel]) : "";
118
+ }
119
+ _focusFilterInput() {
120
+ this.updateComplete.then(() => {
121
+ this.shadowRoot?.querySelector(".combobox__filter-input")?.focus();
122
+ });
123
+ }
124
+ _scrollFocusedIntoView() {
125
+ this.updateComplete.then(() => {
126
+ this.shadowRoot?.querySelectorAll(".combobox__item")?.[this.focusedIndex]?.scrollIntoView({ block: "nearest" });
127
+ });
128
+ }
129
+ _getGroupItems(e) {
130
+ if (Array.isArray(e.options)) return e.options;
131
+ if (Array.isArray(e.items)) return e.items;
132
+ }
133
+ _getGroupLabel(e) {
134
+ return String(e.label ?? e.title ?? e.name ?? e[this.optionLabel] ?? "");
135
+ }
136
+ // ==================== SELECTION ====================
137
+ selectedItems() {
138
+ return this.selected;
139
+ }
140
+ isSelected(e) {
141
+ return this.selected.some((t) => t[this.optionValue] === e[this.optionValue]);
142
+ }
143
+ _selectItem(e, t) {
144
+ t.stopPropagation();
145
+ let r;
146
+ this.multiple ? r = this.isSelected(e) ? this.selected.filter((l) => l[this.optionValue] !== e[this.optionValue]) : [...this.selected, e] : (r = [e], this.isOpen = !1, this.filterable && (this.inputValue = "")), this.setSelected(r);
147
+ }
148
+ setSelected(e) {
149
+ this.selected = e, this.dispatchEvent(
150
+ new CustomEvent("selected", { detail: { selected: e }, bubbles: !0, composed: !0 })
151
+ ), this.dispatchEvent(
152
+ new CustomEvent("change", { detail: { value: e }, bubbles: !0, composed: !0 })
153
+ );
154
+ }
155
+ // ==================== RENDER PARTS ====================
156
+ _renderTagList() {
157
+ return a`
158
+ <div class="combobox__tags">
159
+ ${this.selected.map(
160
+ (e) => a`
161
+ <logosphere-badge
162
+ variant="default"
163
+ text=${String(e[this.optionLabel])}
164
+ ?closeable=${!this.readOnly}
165
+ @close=${(t) => this._removeTag(e, t)}
166
+ ></logosphere-badge>
167
+ `
168
+ )}
169
+ </div>
170
+ `;
171
+ }
172
+ _renderItemContent(e, t) {
173
+ return this.itemRenderer ? this.itemRenderer(e, {
174
+ index: t,
175
+ selected: this.isSelected(e),
176
+ focused: t === this.focusedIndex,
177
+ multiple: this.multiple
178
+ }) : e[this.optionLabel];
179
+ }
180
+ _renderTriggerContent() {
181
+ return this.filterable && !this.multiple ? a`
182
+ <input
183
+ class="combobox__filter-input"
184
+ type="text"
185
+ .value=${this._filterDisplayValue}
186
+ placeholder=${this.placeholder}
187
+ ?disabled=${this.readOnly || this.disabled}
188
+ @focus=${this._onFilterFocus}
189
+ @input=${this._onFilterInput}
190
+ @keydown=${this._handleKeydown}
191
+ @click=${this._stopPropagation}
192
+ />
193
+ ${this.clearable && !this.readOnly && this.selected.length ? a`
194
+ <button class="combobox__clear" @click=${this._clearSelection} aria-label="Clear">
195
+ <ui-icon name="uil-times" size="14"></ui-icon>
196
+ </button>
197
+ ` : d}
198
+ ` : this.multiple && this.selected.length ? this._renderTagList() : !this.multiple && this.selected.length ? a`
199
+ <span class="combobox__single-value">${this.selected[0][this.optionLabel]}</span>
200
+ ${this.clearable && !this.readOnly ? a`
201
+ <button class="combobox__clear" @click=${this._clearSelection} aria-label="Clear">
202
+ <ui-icon name="uil-times" size="14"></ui-icon>
203
+ </button>
204
+ ` : d}
205
+ ` : a`<span class="combobox__placeholder">${this.placeholder}</span>`;
206
+ }
207
+ _renderDropdown() {
208
+ let e = 0;
209
+ return a`
210
+ <div data-combobox-popper popover="manual" class="combobox__dropdown">
211
+ ${this.filterable && this.multiple ? a`
212
+ <input
213
+ class="combobox__search"
214
+ type="text"
215
+ placeholder=${this.placeholder}
216
+ .value=${this.inputValue}
217
+ @input=${this._onFilterInput}
218
+ @keydown=${this._handleKeydown}
219
+ @click=${this._stopPropagation}
220
+ />
221
+ ` : d}
222
+
223
+ <div class="combobox__list">
224
+ ${this._filteredItems.length === 0 ? a`<div class="combobox__empty">${this.emptyMessage}</div>` : this._filteredGroups.map(
225
+ (t) => a`
226
+ <div class="combobox__group ${t.label ? "combobox__group--titled" : ""}">
227
+ ${t.label ? a`<div class="combobox__group-title">${t.label}</div>` : d}
228
+ ${t.items.map((r) => {
229
+ const l = e++;
230
+ return a`
231
+ <div
232
+ class="combobox__item
233
+ ${!this.multiple && this.isSelected(r) ? "combobox__item--selected" : ""}
234
+ ${l === this.focusedIndex ? "combobox__item--focused" : ""}"
235
+ @click=${(s) => this._selectItem(r, s)}
236
+ @mouseenter=${() => {
237
+ this.focusedIndex = l;
238
+ }}
239
+ >
240
+ ${this.multiple ? a`
241
+ <logosphere-checkbox
242
+ .checked=${this.isSelected(r)}
243
+ .value=${r[this.optionValue]}
244
+ @click=${this._stopPropagation}
245
+ ></logosphere-checkbox>
246
+ ` : d}
247
+ ${this._renderItemContent(r, l)}
248
+ </div>
249
+ `;
250
+ })}
251
+ </div>
252
+ `
253
+ )}
254
+ </div>
255
+ </div>
256
+ `;
257
+ }
258
+ _getPopperModifiers() {
259
+ return [
260
+ { name: "offset", options: { offset: [0, 8] } },
261
+ { name: "preventOverflow", options: { padding: 8 } },
262
+ {
263
+ name: "flip",
264
+ options: {
265
+ padding: 8,
266
+ fallbackPlacements: ["top-start", "right-start", "left-start", "bottom-end", "top-end"]
267
+ }
268
+ }
269
+ ];
270
+ }
271
+ _getPopperReferenceElement() {
272
+ return this._formFieldElement?.shadowRoot?.querySelector(
273
+ ".formfield__container"
274
+ ) ?? this._referenceElement;
275
+ }
276
+ _updatePopper() {
277
+ const e = this._getPopperReferenceElement(), t = this._dropdownElement;
278
+ if (!this.isOpen || !e || !t || !this.isConnected) return;
279
+ const r = Math.round(e.getBoundingClientRect().width);
280
+ if (t.style.width = `${r}px`, this._popperInstance) {
281
+ this._popperInstance.setOptions({
282
+ placement: "bottom-start",
283
+ strategy: "fixed",
284
+ modifiers: this._getPopperModifiers()
285
+ }), this._popperInstance.update();
286
+ return;
287
+ }
288
+ this._popperInstance = v(e, t, {
289
+ placement: "bottom-start",
290
+ strategy: "fixed",
291
+ modifiers: this._getPopperModifiers()
292
+ });
293
+ }
294
+ _destroyPopper() {
295
+ this._popperInstance && (this._popperInstance.destroy(), this._popperInstance = void 0);
296
+ }
297
+ _showPopover() {
298
+ this._dropdownElement?.showPopover?.();
299
+ }
300
+ _hidePopover() {
301
+ const e = this._dropdownElement;
302
+ try {
303
+ e?.hidePopover?.();
304
+ } catch {
305
+ }
306
+ }
307
+ // ==================== MAIN RENDER ====================
308
+ render() {
309
+ const e = [
310
+ "combobox__trigger",
311
+ `combobox__trigger--${this.size}`,
312
+ this.disabled ? "combobox__trigger--disabled" : "",
313
+ this.readOnly ? "combobox__trigger--readonly" : "",
314
+ !this.readOnly && !this.disabled && this.isOpen ? "combobox__trigger--open" : "",
315
+ this.clearable ? "" : "combobox__trigger--not-clearable"
316
+ ].filter(Boolean).join(" ");
317
+ return a`
318
+ <div class="combobox">
319
+ <logosphere-formfield
320
+ .label=${this.label}
321
+ .helper=${this.helper}
322
+ .error=${this.error}
323
+ cursor="pointer"
324
+ .required=${this.required}
325
+ .disabled=${this.disabled}
326
+ .readonly=${this.readOnly}
327
+ .size=${this.size}
328
+ .variant=${this.variant}
329
+ .forceFocused=${this.isOpen}
330
+ @click=${this._onFieldClick}
331
+ >
332
+ <div class="combobox__wrapper">
333
+ <div
334
+ class="${e}"
335
+ tabindex="${this.readOnly || this.filterable || this.disabled ? -1 : 0}"
336
+ @click=${this._onTriggerClick}
337
+ @keydown=${this.filterable ? d : this._handleKeydown}
338
+ >
339
+ ${this._renderTriggerContent()}
340
+ </div>
341
+
342
+ ${this._renderDropdown()}
343
+ </div>
344
+ <span
345
+ class="combobox__chevron ${this.isOpen ? "combobox__chevron--open" : ""}"
346
+ @click=${this._onChevronClick}
347
+ >
348
+ <ui-icon name="uil-angle-down" size="16"></ui-icon>
349
+ </span>
350
+ </logosphere-formfield>
351
+ </div>
352
+ `;
353
+ }
354
+ };
355
+ o.styles = [
356
+ f`
357
+ ${_(y)}
358
+ `
359
+ ];
360
+ i([
361
+ n({ type: String })
362
+ ], o.prototype, "label", 2);
363
+ i([
364
+ n({ type: String })
365
+ ], o.prototype, "helper", 2);
366
+ i([
367
+ n({ type: String })
368
+ ], o.prototype, "error", 2);
369
+ i([
370
+ n({ type: String })
371
+ ], o.prototype, "placeholder", 2);
372
+ i([
373
+ n({ type: Boolean })
374
+ ], o.prototype, "required", 2);
375
+ i([
376
+ n({ type: Boolean })
377
+ ], o.prototype, "disabled", 2);
378
+ i([
379
+ n({ type: Boolean })
380
+ ], o.prototype, "readOnly", 2);
381
+ i([
382
+ n({ type: String })
383
+ ], o.prototype, "variant", 2);
384
+ i([
385
+ n({ type: Boolean })
386
+ ], o.prototype, "multiple", 2);
387
+ i([
388
+ n({ type: Boolean })
389
+ ], o.prototype, "filterable", 2);
390
+ i([
391
+ n({ type: String })
392
+ ], o.prototype, "optionLabel", 2);
393
+ i([
394
+ n({ type: String })
395
+ ], o.prototype, "optionValue", 2);
396
+ i([
397
+ n({ type: String })
398
+ ], o.prototype, "emptyMessage", 2);
399
+ i([
400
+ n({ type: Array })
401
+ ], o.prototype, "items", 2);
402
+ i([
403
+ n({ attribute: !1 })
404
+ ], o.prototype, "itemRenderer", 2);
405
+ i([
406
+ n({ type: String })
407
+ ], o.prototype, "size", 2);
408
+ i([
409
+ n({ type: Boolean })
410
+ ], o.prototype, "clearable", 2);
411
+ i([
412
+ b()
413
+ ], o.prototype, "selected", 2);
414
+ i([
415
+ b()
416
+ ], o.prototype, "inputValue", 2);
417
+ i([
418
+ b()
419
+ ], o.prototype, "isOpen", 2);
420
+ i([
421
+ b()
422
+ ], o.prototype, "focusedIndex", 2);
423
+ i([
424
+ u(".combobox__wrapper")
425
+ ], o.prototype, "_referenceElement", 2);
426
+ i([
427
+ u("logosphere-formfield")
428
+ ], o.prototype, "_formFieldElement", 2);
429
+ i([
430
+ u("[data-combobox-popper]")
431
+ ], o.prototype, "_dropdownElement", 2);
432
+ o = i([
433
+ x("logosphere-combobox")
434
+ ], o);
435
+ export {
436
+ o as C
437
+ };
package/dist/combobox.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./combobox-pmE7bgEL.cjs");Object.defineProperty(exports,"Combobox",{enumerable:!0,get:()=>e.Combobox});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./combobox-BmIFPk8X.cjs");Object.defineProperty(exports,"Combobox",{enumerable:!0,get:()=>e.Combobox});
package/dist/combobox.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as m } from "./combobox-BJbI-Tgi.js";
1
+ import { C as m } from "./combobox-jak7Ac1m.js";
2
2
  export {
3
3
  m as Combobox
4
4
  };