@logosphere-ui/core 0.0.0-alpha.5 → 0.0.0-alpha.51

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 (208) hide show
  1. package/AGENTS.md +1204 -0
  2. package/dist/AGENTS.md +1204 -0
  3. package/dist/accordion-CYuCj7nB.cjs +21 -0
  4. package/dist/accordion-cDabqwu6.js +96 -0
  5. package/dist/accordion.cjs +1 -0
  6. package/dist/accordion.js +4 -0
  7. package/dist/atoms/Badge/badge.d.ts +1 -1
  8. package/dist/atoms/Button/button.d.ts +5 -3
  9. package/dist/atoms/Checkbox/checkbox.d.ts +13 -3
  10. package/dist/atoms/FormField/formfield.d.ts +12 -0
  11. package/dist/atoms/Slider/index.d.ts +1 -0
  12. package/dist/atoms/Slider/slider.d.ts +54 -0
  13. package/dist/badge-BhINg1p5.js +72 -0
  14. package/dist/badge-CKSG_MyA.cjs +13 -0
  15. package/dist/badge.cjs +1 -1
  16. package/dist/badge.js +1 -1
  17. package/dist/breadcrumb-BOuCLUJh.cjs +12 -0
  18. package/dist/breadcrumb-BeJqq-5C.js +41 -0
  19. package/dist/breadcrumb.cjs +1 -1
  20. package/dist/breadcrumb.js +1 -1
  21. package/dist/button-CVkIa7M0.js +58 -0
  22. package/dist/button-vdNReBMi.cjs +10 -0
  23. package/dist/button.cjs +1 -1
  24. package/dist/button.js +1 -1
  25. package/dist/calendar-C71sj3Ki.js +652 -0
  26. package/dist/calendar-DZJM5Tyu.cjs +88 -0
  27. package/dist/calendar.cjs +1 -0
  28. package/dist/calendar.js +4 -0
  29. package/dist/{card-CUhlTJyJ.js → card-C7xXMV3h.js} +26 -25
  30. package/dist/card-DmQRNKtk.cjs +43 -0
  31. package/dist/card.cjs +1 -1
  32. package/dist/card.js +1 -1
  33. package/dist/chatbot-BAou4THb.cjs +183 -0
  34. package/dist/chatbot-BRfqXYYt.js +564 -0
  35. package/dist/chatbot.cjs +1 -1
  36. package/dist/chatbot.js +2 -2
  37. package/dist/checkbox-BAbPDN6x.cjs +53 -0
  38. package/dist/checkbox-CTfbav6M.js +152 -0
  39. package/dist/checkbox.cjs +1 -1
  40. package/dist/checkbox.js +1 -1
  41. package/dist/chip-group-D4DwnC37.cjs +26 -0
  42. package/dist/chip-group-DzfOd6Vw.js +89 -0
  43. package/dist/chip-group.cjs +1 -0
  44. package/dist/chip-group.js +4 -0
  45. package/dist/collapse-CbRE8ABx.cjs +47 -0
  46. package/dist/collapse-DY6SJ9jS.js +141 -0
  47. package/dist/collapse.cjs +1 -0
  48. package/dist/collapse.js +4 -0
  49. package/dist/combobox-BAa3UAQs.cjs +113 -0
  50. package/dist/combobox-BR05Tgfd.js +460 -0
  51. package/dist/combobox.cjs +1 -1
  52. package/dist/combobox.js +1 -1
  53. package/dist/datepicker-BFYWQRrJ.js +382 -0
  54. package/dist/datepicker-BWE4qDJM.cjs +85 -0
  55. package/dist/datepicker.cjs +1 -1
  56. package/dist/datepicker.js +2 -2
  57. package/dist/{download-manager-A4fOxGWJ.js → download-manager-BPg-6Qfg.js} +4 -4
  58. package/dist/download-manager-DDeTYRPs.cjs +97 -0
  59. package/dist/download-manager.cjs +1 -1
  60. package/dist/download-manager.js +1 -1
  61. package/dist/drawer-CRu4G2zu.cjs +32 -0
  62. package/dist/drawer-DhuBPWHP.js +114 -0
  63. package/dist/drawer.cjs +1 -0
  64. package/dist/drawer.js +4 -0
  65. package/dist/formfield-JXiv9mvJ.cjs +33 -0
  66. package/dist/formfield-ss2mFweu.js +161 -0
  67. package/dist/formfield.cjs +1 -1
  68. package/dist/formfield.js +1 -1
  69. package/dist/icon.cjs +1 -0
  70. package/dist/icon.js +4 -0
  71. package/dist/index.cjs +1 -1
  72. package/dist/index.d.ts +15 -0
  73. package/dist/index.js +65 -32
  74. package/dist/index.umd.js +1613 -521
  75. package/dist/input-DyLKo7h6.cjs +60 -0
  76. package/dist/input-N3Z8D7q1.js +278 -0
  77. package/dist/input-group-C6sA1lzj.cjs +5 -0
  78. package/dist/input-group-DUPlrpug.js +66 -0
  79. package/dist/input-group.cjs +1 -0
  80. package/dist/input-group.js +4 -0
  81. package/dist/input.cjs +1 -1
  82. package/dist/input.js +1 -1
  83. package/dist/left-menu.cjs +1 -0
  84. package/dist/left-menu.js +5 -0
  85. package/dist/leftmenu-DiKo8iud.cjs +120 -0
  86. package/dist/leftmenu-DlU_G4Sj.js +373 -0
  87. package/dist/modal-g3KbWncV.cjs +84 -0
  88. package/dist/modal-vSjEpYrG.js +250 -0
  89. package/dist/modal.cjs +1 -1
  90. package/dist/modal.js +1 -1
  91. package/dist/molecules/Accordion/accordion.d.ts +42 -0
  92. package/dist/molecules/Accordion/index.d.ts +2 -0
  93. package/dist/molecules/Chip/chip-group.d.ts +29 -0
  94. package/dist/molecules/Chip/index.d.ts +2 -0
  95. package/dist/molecules/Collapse/collapse.d.ts +42 -0
  96. package/dist/molecules/Collapse/index.d.ts +2 -0
  97. package/dist/molecules/Input/input.d.ts +24 -1
  98. package/dist/molecules/InputGroup/index.d.ts +1 -0
  99. package/dist/molecules/InputGroup/input-group.d.ts +40 -0
  100. package/dist/molecules/Pagination/index.d.ts +1 -0
  101. package/dist/molecules/Pagination/pagination.d.ts +60 -0
  102. package/dist/molecules/Popover/popover.d.ts +5 -0
  103. package/dist/molecules/SplitButton/index.d.ts +2 -0
  104. package/dist/molecules/SplitButton/split-button.d.ts +53 -0
  105. package/dist/molecules/Stepper/index.d.ts +2 -0
  106. package/dist/molecules/Stepper/stepper.d.ts +34 -0
  107. package/dist/molecules/Textarea/text-area.d.ts +5 -2
  108. package/dist/molecules/TimePicker/index.d.ts +2 -0
  109. package/dist/molecules/TimePicker/timepicker.d.ts +62 -0
  110. package/dist/organisms/Calendar/calendar.d.ts +54 -0
  111. package/dist/organisms/Calendar/index.d.ts +1 -0
  112. package/dist/organisms/Calendar/shared.d.ts +9 -0
  113. package/dist/organisms/Chatbot/chatbot.d.ts +10 -1
  114. package/dist/organisms/Chatbot/index.d.ts +1 -1
  115. package/dist/organisms/Combobox/combobox.d.ts +39 -0
  116. package/dist/organisms/DatePicker/datepicker.d.ts +35 -33
  117. package/dist/organisms/Drawer/drawer.d.ts +30 -0
  118. package/dist/organisms/Drawer/index.d.ts +1 -0
  119. package/dist/organisms/LeftMenu/index.d.ts +2 -0
  120. package/dist/organisms/LeftMenu/leftmenu-types.d.ts +24 -0
  121. package/dist/organisms/LeftMenu/leftmenu.d.ts +60 -0
  122. package/dist/organisms/Modal/modal.d.ts +29 -4
  123. package/dist/organisms/Tab/tab.d.ts +13 -1
  124. package/dist/organisms/Toast/index.d.ts +2 -0
  125. package/dist/organisms/Toast/toast-container.d.ts +42 -0
  126. package/dist/organisms/Toast/toast.d.ts +48 -0
  127. package/dist/organisms/TreeMenu/index.d.ts +1 -0
  128. package/dist/organisms/TreeMenu/tree-menu.d.ts +59 -0
  129. package/dist/pagination-CjXvpE2j.js +360 -0
  130. package/dist/pagination-Nnzacqdo.cjs +169 -0
  131. package/dist/pagination.cjs +1 -0
  132. package/dist/pagination.js +4 -0
  133. package/dist/popover-CrXUbUR-.cjs +30 -0
  134. package/dist/popover-M5ZcS5rj.js +161 -0
  135. package/dist/popover.cjs +1 -1
  136. package/dist/popover.js +1 -1
  137. package/dist/shared/icons/index.d.ts +1 -0
  138. package/dist/shared/types/button.types.d.ts +7 -0
  139. package/dist/slider-DSRs5uhl.cjs +108 -0
  140. package/dist/slider-ntLRajQa.js +280 -0
  141. package/dist/slider.cjs +1 -0
  142. package/dist/slider.js +4 -0
  143. package/dist/split-button-BdBweoip.js +177 -0
  144. package/dist/split-button-BpffPlVg.cjs +63 -0
  145. package/dist/split-button.cjs +1 -0
  146. package/dist/split-button.js +4 -0
  147. package/dist/stepper-CZhwgLNp.js +122 -0
  148. package/dist/stepper-ZOMaU6aZ.cjs +52 -0
  149. package/dist/stepper.cjs +1 -0
  150. package/dist/stepper.js +4 -0
  151. package/dist/styles/main.css +186 -182
  152. package/dist/switch-Do6SCkPJ.cjs +17 -0
  153. package/dist/switch-uYVuohJ-.js +68 -0
  154. package/dist/switch.cjs +1 -1
  155. package/dist/switch.js +1 -1
  156. package/dist/tab-BvRVHpWs.cjs +41 -0
  157. package/dist/tab-Byh4UgFB.js +204 -0
  158. package/dist/tab.cjs +1 -1
  159. package/dist/tab.js +1 -1
  160. package/dist/text-area-1rALZ0iy.js +239 -0
  161. package/dist/text-area-D_TYL4_q.cjs +51 -0
  162. package/dist/textarea.cjs +1 -1
  163. package/dist/textarea.js +1 -1
  164. package/dist/timepicker-B9l6HN-d.js +320 -0
  165. package/dist/timepicker-Bpf2d4Nn.cjs +119 -0
  166. package/dist/timepicker.cjs +1 -0
  167. package/dist/timepicker.js +4 -0
  168. package/dist/toast-container-C5qYjInG.js +274 -0
  169. package/dist/toast-container-D2dyP20J.cjs +64 -0
  170. package/dist/toast.cjs +1 -0
  171. package/dist/toast.js +6 -0
  172. package/dist/tree-menu-BZ7aBC7R.js +237 -0
  173. package/dist/tree-menu-DDQ_DYl7.cjs +78 -0
  174. package/dist/tree-menu.cjs +1 -0
  175. package/dist/tree-menu.js +4 -0
  176. package/dist/ui-icon-BeR-PaPg.js +75 -0
  177. package/dist/ui-icon-DWl7I5BQ.cjs +22 -0
  178. package/package.json +104 -15
  179. package/dist/badge-BbhaO73N.cjs +0 -13
  180. package/dist/badge-DE7Tgd8Z.js +0 -71
  181. package/dist/breadcrumb-B-4yqoJZ.js +0 -41
  182. package/dist/breadcrumb-Cop-B1J7.cjs +0 -12
  183. package/dist/button-C1EwOosO.js +0 -58
  184. package/dist/button-CDRccsk9.cjs +0 -10
  185. package/dist/card-n8ka8Zk-.cjs +0 -43
  186. package/dist/chatbot-Da_itUdJ.cjs +0 -160
  187. package/dist/chatbot-zkxngMRH.js +0 -481
  188. package/dist/checkbox-7Rb3WKGx.js +0 -119
  189. package/dist/checkbox-CdDTRdKV.cjs +0 -37
  190. package/dist/combobox-BJbI-Tgi.js +0 -268
  191. package/dist/combobox-pmE7bgEL.cjs +0 -99
  192. package/dist/datepicker-DFJx45C-.js +0 -750
  193. package/dist/datepicker-b9JGTTMx.cjs +0 -115
  194. package/dist/download-manager-BSIMTGaK.cjs +0 -97
  195. package/dist/formfield-D_7NFFoe.cjs +0 -27
  196. package/dist/formfield-d8fp9FTV.js +0 -118
  197. package/dist/input-BcnI1w3_.cjs +0 -46
  198. package/dist/input-Bj_7u8Iv.js +0 -192
  199. package/dist/modal-Bfc6WQSL.js +0 -110
  200. package/dist/modal-DQ8VFL-P.cjs +0 -39
  201. package/dist/popover-B7tCqk3R.js +0 -140
  202. package/dist/popover-C2p5Pmts.cjs +0 -30
  203. package/dist/switch-Cpl53nRW.js +0 -64
  204. package/dist/switch-Rnnn10bn.cjs +0 -17
  205. package/dist/tab-BKdN4xAz.js +0 -176
  206. package/dist/tab-DcjAlXzU.cjs +0 -40
  207. package/dist/text-area-BkHdLnZj.cjs +0 -44
  208. package/dist/text-area-CC24lj8v.js +0 -204
@@ -0,0 +1,68 @@
1
+ import { unsafeCSS as d, css as l, LitElement as p, html as b } from "lit";
2
+ import { property as n, query as w, customElement as u } from "lit/decorators.js";
3
+ const _ = ":host{display:inline-block}.switch{display:inline-flex;align-items:center;position:relative;cursor:pointer}.switch--md{width:36px;height:20px}.switch--sm{width:28px;height:16px}.switch__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.switch__track{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:16px;cursor:pointer;transition:background-color var(--transition-speed-base) var(--transition-timing);background-color:var(--color-tertiary)}.switch__track--on{background-color:var(--color-primary)}.switch__track--disabled{cursor:not-allowed}.switch__track--disabled-off{background-color:var(--color-secondary-disabled)}.switch__track--disabled-on{background-color:var(--color-primary-disabled)}.switch__thumb{position:absolute;background-color:#fff;border-radius:50%;top:2px;left:2px;transform:translate(0);transition:transform var(--transition-speed-base) var(--transition-timing)}.switch--md .switch__thumb{width:16px;height:16px}.switch--sm .switch__thumb{width:12px;height:12px}";
4
+ var m = Object.defineProperty, g = Object.getOwnPropertyDescriptor, a = (i, t, c, r) => {
5
+ for (var e = r > 1 ? void 0 : r ? g(t, c) : t, o = i.length - 1, h; o >= 0; o--)
6
+ (h = i[o]) && (e = (r ? h(t, c, e) : h(e)) || e);
7
+ return r && e && m(t, c, e), e;
8
+ };
9
+ let s = class extends p {
10
+ constructor() {
11
+ super(...arguments), this.checked = !1, this.disabled = !1, this.size = "md";
12
+ }
13
+ onChange(i) {
14
+ const t = i.target;
15
+ this.checked = t.checked, this.dispatchEvent(new CustomEvent("change", {
16
+ detail: { checked: this.checked }
17
+ })), this.dispatchEvent(new CustomEvent("lgsChange", {
18
+ bubbles: !0,
19
+ composed: !0,
20
+ detail: { checked: this.checked }
21
+ }));
22
+ }
23
+ render() {
24
+ const i = `switch switch--${this.size}`, t = [
25
+ "switch__track",
26
+ this.checked && !this.disabled ? "switch__track--on" : "",
27
+ this.disabled ? "switch__track--disabled" : "",
28
+ this.disabled && this.checked ? "switch__track--disabled-on" : "",
29
+ this.disabled && !this.checked ? "switch__track--disabled-off" : ""
30
+ ].filter(Boolean).join(" "), c = this.size === "sm" ? 12 : 16, r = this.checked ? `translateX(${c}px)` : "translateX(0)";
31
+ return b`
32
+ <label class="${i}">
33
+ <input
34
+ class="switch__input"
35
+ type="checkbox"
36
+ ?checked=${this.checked}
37
+ ?disabled=${this.disabled}
38
+ @change=${this.onChange}
39
+ />
40
+ <div class="${t}">
41
+ <span
42
+ class="switch__thumb"
43
+ style="transform: ${r}"
44
+ ></span>
45
+ </div>
46
+ </label>
47
+ `;
48
+ }
49
+ };
50
+ s.styles = [l`${d(_)}`];
51
+ a([
52
+ n({ type: Boolean })
53
+ ], s.prototype, "checked", 2);
54
+ a([
55
+ n({ type: Boolean })
56
+ ], s.prototype, "disabled", 2);
57
+ a([
58
+ n({ type: String })
59
+ ], s.prototype, "size", 2);
60
+ a([
61
+ w("input")
62
+ ], s.prototype, "inputElement", 2);
63
+ s = a([
64
+ u("logosphere-switch")
65
+ ], s);
66
+ export {
67
+ s as S
68
+ };
package/dist/switch.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./switch-Rnnn10bn.cjs");Object.defineProperty(exports,"Switch",{enumerable:!0,get:()=>e.Switch});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./switch-Do6SCkPJ.cjs");Object.defineProperty(exports,"Switch",{enumerable:!0,get:()=>e.Switch});
package/dist/switch.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as t } from "./switch-Cpl53nRW.js";
1
+ import { S as t } from "./switch-uYVuohJ-.js";
2
2
  export {
3
3
  t as Switch
4
4
  };
@@ -0,0 +1,41 @@
1
+ "use strict";const s=require("lit"),r=require("lit/decorators.js"),h=":host{display:block}.tab{width:100%;font-family:var(--font-family-base)}.tab__list{display:flex;overflow-x:auto;overflow-y:hidden;border-bottom:1px solid var(--color-border);scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.tab__list::-webkit-scrollbar{display:none}.tab__button{display:inline-flex;flex-direction:row;align-items:center;gap:var(--spacing-2);padding:var(--spacing-3) var(--spacing-4);min-width:120px;position:relative;cursor:pointer;border:none;border-bottom:2px solid transparent;background:transparent;font-family:var(--font-family-base);white-space:nowrap;transition:background-color var(--transition-speed-base) var(--transition-timing),border-color var(--transition-speed-base) var(--transition-timing)}.tab__button:hover:not(.tab__button--disabled):not(.tab__button--active){background-color:var(--color-light)}.tab__button--active{border-bottom-color:var(--color-primary)}.tab__button--disabled{cursor:not-allowed;opacity:.4;pointer-events:none}.tab__icon{font-size:var(--font-size-xl);flex-shrink:0;color:inherit;line-height:1}.tab__content{display:flex;flex-direction:column;align-items:flex-start}.tab__label{font-weight:var(--font-weight-medium);font-size:var(--font-size-sm);color:var(--color-body-text)}.tab__label--inactive{color:var(--color-tertiary)}.tab__description{font-size:var(--font-size-xs);text-align:left;color:var(--color-tertiary)}.tab__description--active{color:var(--color-secondary)}.tab__panel{padding:var(--spacing-4);outline:none}.tab__panel--hidden{display:none}.tab--segmented .tab__list{display:inline-flex;position:relative;border-bottom:none;background-color:var(--color-light);border-radius:var(--radius-base);padding:0;gap:0;overflow:visible}.tab__segment-pill{position:absolute;top:0;bottom:0;left:0;width:0;background-color:var(--color-white, #ffffff);border:1px solid var(--color-border);border-radius:var(--radius-base);pointer-events:none;z-index:0;transition:transform .22s cubic-bezier(.35,0,.25,1),width .22s cubic-bezier(.35,0,.25,1)}.tab--segmented .tab__button{position:relative;z-index:1;min-width:unset;height:32px;padding:var(--spacing-1) var(--spacing-3);border:1px solid transparent;border-bottom:1px solid transparent;border-radius:var(--radius-base);background:transparent;transition:color var(--transition-speed-base) var(--transition-timing)}.tab--segmented .tab__button:hover:not(.tab__button--disabled):not(.tab__button--active){background-color:transparent}.tab--segmented .tab__button--active{background-color:transparent;border-color:transparent}.tab--segmented .tab__label{color:var(--color-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:20px;letter-spacing:-.14px}.tab--segmented .tab__label--inactive{color:var(--color-secondary)}.tab--segmented .tab__button--active .tab__label,.tab--segmented .tab__button--active .tab__label--inactive{color:var(--color-primary)}.tab--segmented .tab__icon{color:inherit;font-size:var(--font-size-base)}.tab--segmented .tab__panels{margin-top:var(--spacing-3)}.tab--segmented .tab__panel{padding:0}";var p=Object.defineProperty,_=Object.getOwnPropertyDescriptor,l=(b,t,i,e)=>{for(var a=e>1?void 0:e?_(t,i):t,o=b.length-1,n;o>=0;o--)(n=b[o])&&(a=(e?n(t,i,a):n(a))||a);return e&&a&&p(t,i,a),a};exports.LogosphereTab=class extends s.LitElement{constructor(){super(...arguments),this.tabs=[],this.activeTab="",this.lazy=!0,this.variant="default",this._focusedIndex=0,this._renderedTabs=new Set,this._pillInitialized=!1}connectedCallback(){super.connectedCallback(),!this.activeTab&&this.tabs.length>0&&(this.activeTab=this.tabs[0].id)}disconnectedCallback(){super.disconnectedCallback(),this._pillResizeObserver?.disconnect(),this._pillResizeObserver=void 0}willUpdate(t){if(super.willUpdate(t),t.has("activeTab")&&this.activeTab){this._renderedTabs.add(this.activeTab);const i=this.tabs.findIndex(e=>e.id===this.activeTab);i!==-1&&(this._focusedIndex=i)}t.has("tabs")&&this.tabs.length>0&&(this.tabs.some(e=>e.id===this.activeTab)||(this.activeTab=this.tabs[0].id),this._focusedIndex=this.tabs.findIndex(e=>e.id===this.activeTab))}handleTabClick(t,i){if(i)return;const e=this.activeTab;this.activeTab=t,this._focusedIndex=this.tabs.findIndex(a=>a.id===t),this.dispatchEvent(new CustomEvent("tab-change",{detail:{oldTab:e,newTab:t},bubbles:!0,composed:!0}))}handleKeyDown(t){const{tabs:i}=this;if(i.filter(o=>!o.disabled).length===0)return;let e=this._focusedIndex;const a=this._focusedIndex;switch(t.key){case"ArrowLeft":t.preventDefault();do e=e>0?e-1:i.length-1;while(i[e]?.disabled&&e!==a);break;case"ArrowRight":t.preventDefault();do e=e<i.length-1?e+1:0;while(i[e]?.disabled&&e!==a);break;case"Home":for(t.preventDefault(),e=0;i[e]?.disabled&&e<i.length-1;)e++;break;case"End":for(t.preventDefault(),e=i.length-1;i[e]?.disabled&&e>0;)e--;break;default:return}if(e!==this._focusedIndex&&!i[e]?.disabled){const o=this.activeTab;this._focusedIndex=e,this.activeTab=i[e].id,this.updateComplete.then(()=>{this.shadowRoot?.querySelector(`[role="tab"][data-tab-id="${i[e].id}"]`)?.focus()}),this.dispatchEvent(new CustomEvent("tab-change",{detail:{oldTab:o,newTab:i[e].id},bubbles:!0,composed:!0}))}}updated(t){super.updated(t),this.variant==="segmented"&&(this._ensurePillObserver(),this._updateSegmentPill())}_ensurePillObserver(){if(this._pillResizeObserver)return;const t=this.shadowRoot?.querySelector(".tab__list");!t||typeof ResizeObserver>"u"||(this._pillResizeObserver=new ResizeObserver(()=>this._updateSegmentPill()),this._pillResizeObserver.observe(t))}_updateSegmentPill(){const t=this.shadowRoot?.querySelector(".tab__segment-pill"),i=this.shadowRoot?.querySelector(".tab__button--active"),e=this.shadowRoot?.querySelector(".tab__list");if(!t||!i||!e)return;const a=e.getBoundingClientRect(),o=i.getBoundingClientRect();if(o.width===0)return;const n=parseFloat(getComputedStyle(e).paddingLeft)||0,d=o.left-a.left-e.clientLeft-n+e.scrollLeft,c=o.width;this._pillInitialized?(t.style.transform=`translateX(${d}px)`,t.style.width=`${c}px`):(t.style.transition="none",t.style.transform=`translateX(${d}px)`,t.style.width=`${c}px`,requestAnimationFrame(()=>{t.style.transition=""}),this._pillInitialized=!0)}scrollTabIntoView(t){this.updateComplete.then(()=>{const i=this.shadowRoot?.querySelector(`[role="tab"][data-tab-id="${t}"]`);if(i&&this.tablist){const e=this.tablist.getBoundingClientRect(),a=i.getBoundingClientRect();a.left<e.left?this.tablist.scrollLeft-=e.left-a.left+16:a.right>e.right&&(this.tablist.scrollLeft+=a.right-e.right+16)}})}renderTabButton(t,i){const e=this.activeTab===t.id,a=this._focusedIndex===i,o=["tab__button",e?"tab__button--active":"",t.disabled?"tab__button--disabled":""].filter(Boolean).join(" "),n=["tab__label",e?"":"tab__label--inactive"].filter(Boolean).join(" "),d=["tab__description",e?"tab__description--active":""].filter(Boolean).join(" ");return s.html`
2
+ <button
3
+ role="tab"
4
+ class=${o}
5
+ data-tab-id=${t.id}
6
+ aria-selected=${e?"true":"false"}
7
+ aria-controls="panel-${t.id}"
8
+ tabindex=${e||a?"0":"-1"}
9
+ ?disabled=${t.disabled}
10
+ @click=${()=>this.handleTabClick(t.id,t.disabled)}
11
+ @focus=${()=>this.scrollTabIntoView(t.id)}
12
+ >
13
+ ${t.icon?s.html`<i class="${t.icon} tab__icon"></i>`:s.nothing}
14
+ <div class="tab__content">
15
+ <span class=${n}>${t.label}</span>
16
+ ${t.description?s.html`<span class=${d}>${t.description}</span>`:s.nothing}
17
+ </div>
18
+ </button>
19
+ `}renderTabPanel(t){const i=this.activeTab===t.id;if(!(!this.lazy||this._renderedTabs.has(t.id)))return s.nothing;const a=["tab__panel",i?"":"tab__panel--hidden"].filter(Boolean).join(" ");return s.html`
20
+ <div
21
+ role="tabpanel"
22
+ id="panel-${t.id}"
23
+ aria-labelledby="tab-${t.id}"
24
+ class=${a}
25
+ tabindex="0"
26
+ >
27
+ <slot name=${`panel-${t.id}`}>
28
+ ${typeof t.content=="string"?s.html`${t.content}`:s.nothing}
29
+ </slot>
30
+ </div>
31
+ `}render(){return s.html`
32
+ <div class="tab tab--${this.variant}">
33
+ <div role="tablist" aria-label="Tabs" class="tab__list" @keydown=${this.handleKeyDown}>
34
+ ${this.variant==="segmented"?s.html`<span class="tab__segment-pill" aria-hidden="true"></span>`:s.nothing}
35
+ ${this.tabs.map((t,i)=>this.renderTabButton(t,i))}
36
+ </div>
37
+ <div class="tab__panels">${this.tabs.map(t=>this.renderTabPanel(t))}</div>
38
+ </div>
39
+ `}};exports.LogosphereTab.styles=[s.css`
40
+ ${s.unsafeCSS(h)}
41
+ `];l([r.property({type:Array})],exports.LogosphereTab.prototype,"tabs",2);l([r.property({type:String})],exports.LogosphereTab.prototype,"activeTab",2);l([r.property({type:Boolean})],exports.LogosphereTab.prototype,"lazy",2);l([r.property({type:String})],exports.LogosphereTab.prototype,"variant",2);l([r.state()],exports.LogosphereTab.prototype,"_focusedIndex",2);l([r.state()],exports.LogosphereTab.prototype,"_renderedTabs",2);l([r.query('[role="tablist"]')],exports.LogosphereTab.prototype,"tablist",2);exports.LogosphereTab=l([r.customElement("logosphere-tab")],exports.LogosphereTab);
@@ -0,0 +1,204 @@
1
+ import { unsafeCSS as _, css as u, LitElement as v, nothing as b, html as d } from "lit";
2
+ import { property as c, state as h, query as f, customElement as g } from "lit/decorators.js";
3
+ const m = ":host{display:block}.tab{width:100%;font-family:var(--font-family-base)}.tab__list{display:flex;overflow-x:auto;overflow-y:hidden;border-bottom:1px solid var(--color-border);scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.tab__list::-webkit-scrollbar{display:none}.tab__button{display:inline-flex;flex-direction:row;align-items:center;gap:var(--spacing-2);padding:var(--spacing-3) var(--spacing-4);min-width:120px;position:relative;cursor:pointer;border:none;border-bottom:2px solid transparent;background:transparent;font-family:var(--font-family-base);white-space:nowrap;transition:background-color var(--transition-speed-base) var(--transition-timing),border-color var(--transition-speed-base) var(--transition-timing)}.tab__button:hover:not(.tab__button--disabled):not(.tab__button--active){background-color:var(--color-light)}.tab__button--active{border-bottom-color:var(--color-primary)}.tab__button--disabled{cursor:not-allowed;opacity:.4;pointer-events:none}.tab__icon{font-size:var(--font-size-xl);flex-shrink:0;color:inherit;line-height:1}.tab__content{display:flex;flex-direction:column;align-items:flex-start}.tab__label{font-weight:var(--font-weight-medium);font-size:var(--font-size-sm);color:var(--color-body-text)}.tab__label--inactive{color:var(--color-tertiary)}.tab__description{font-size:var(--font-size-xs);text-align:left;color:var(--color-tertiary)}.tab__description--active{color:var(--color-secondary)}.tab__panel{padding:var(--spacing-4);outline:none}.tab__panel--hidden{display:none}.tab--segmented .tab__list{display:inline-flex;position:relative;border-bottom:none;background-color:var(--color-light);border-radius:var(--radius-base);padding:0;gap:0;overflow:visible}.tab__segment-pill{position:absolute;top:0;bottom:0;left:0;width:0;background-color:var(--color-white, #ffffff);border:1px solid var(--color-border);border-radius:var(--radius-base);pointer-events:none;z-index:0;transition:transform .22s cubic-bezier(.35,0,.25,1),width .22s cubic-bezier(.35,0,.25,1)}.tab--segmented .tab__button{position:relative;z-index:1;min-width:unset;height:32px;padding:var(--spacing-1) var(--spacing-3);border:1px solid transparent;border-bottom:1px solid transparent;border-radius:var(--radius-base);background:transparent;transition:color var(--transition-speed-base) var(--transition-timing)}.tab--segmented .tab__button:hover:not(.tab__button--disabled):not(.tab__button--active){background-color:transparent}.tab--segmented .tab__button--active{background-color:transparent;border-color:transparent}.tab--segmented .tab__label{color:var(--color-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);line-height:20px;letter-spacing:-.14px}.tab--segmented .tab__label--inactive{color:var(--color-secondary)}.tab--segmented .tab__button--active .tab__label,.tab--segmented .tab__button--active .tab__label--inactive{color:var(--color-primary)}.tab--segmented .tab__icon{color:inherit;font-size:var(--font-size-base)}.tab--segmented .tab__panels{margin-top:var(--spacing-3)}.tab--segmented .tab__panel{padding:0}";
4
+ var y = Object.defineProperty, w = Object.getOwnPropertyDescriptor, l = (t, i, e, a) => {
5
+ for (var s = a > 1 ? void 0 : a ? w(i, e) : i, o = t.length - 1, r; o >= 0; o--)
6
+ (r = t[o]) && (s = (a ? r(i, e, s) : r(s)) || s);
7
+ return a && s && y(i, e, s), s;
8
+ };
9
+ let n = class extends v {
10
+ constructor() {
11
+ super(...arguments), this.tabs = [], this.activeTab = "", this.lazy = !0, this.variant = "default", this._focusedIndex = 0, this._renderedTabs = /* @__PURE__ */ new Set(), this._pillInitialized = !1;
12
+ }
13
+ connectedCallback() {
14
+ super.connectedCallback(), !this.activeTab && this.tabs.length > 0 && (this.activeTab = this.tabs[0].id);
15
+ }
16
+ disconnectedCallback() {
17
+ super.disconnectedCallback(), this._pillResizeObserver?.disconnect(), this._pillResizeObserver = void 0;
18
+ }
19
+ willUpdate(t) {
20
+ if (super.willUpdate(t), t.has("activeTab") && this.activeTab) {
21
+ this._renderedTabs.add(this.activeTab);
22
+ const i = this.tabs.findIndex((e) => e.id === this.activeTab);
23
+ i !== -1 && (this._focusedIndex = i);
24
+ }
25
+ t.has("tabs") && this.tabs.length > 0 && (this.tabs.some((e) => e.id === this.activeTab) || (this.activeTab = this.tabs[0].id), this._focusedIndex = this.tabs.findIndex((e) => e.id === this.activeTab));
26
+ }
27
+ // ==================== EVENTS ====================
28
+ handleTabClick(t, i) {
29
+ if (i) return;
30
+ const e = this.activeTab;
31
+ this.activeTab = t, this._focusedIndex = this.tabs.findIndex((a) => a.id === t), this.dispatchEvent(
32
+ new CustomEvent("tab-change", {
33
+ detail: { oldTab: e, newTab: t },
34
+ bubbles: !0,
35
+ composed: !0
36
+ })
37
+ );
38
+ }
39
+ handleKeyDown(t) {
40
+ const { tabs: i } = this;
41
+ if (i.filter((s) => !s.disabled).length === 0) return;
42
+ let e = this._focusedIndex;
43
+ const a = this._focusedIndex;
44
+ switch (t.key) {
45
+ case "ArrowLeft":
46
+ t.preventDefault();
47
+ do
48
+ e = e > 0 ? e - 1 : i.length - 1;
49
+ while (i[e]?.disabled && e !== a);
50
+ break;
51
+ case "ArrowRight":
52
+ t.preventDefault();
53
+ do
54
+ e = e < i.length - 1 ? e + 1 : 0;
55
+ while (i[e]?.disabled && e !== a);
56
+ break;
57
+ case "Home":
58
+ for (t.preventDefault(), e = 0; i[e]?.disabled && e < i.length - 1; ) e++;
59
+ break;
60
+ case "End":
61
+ for (t.preventDefault(), e = i.length - 1; i[e]?.disabled && e > 0; ) e--;
62
+ break;
63
+ default:
64
+ return;
65
+ }
66
+ if (e !== this._focusedIndex && !i[e]?.disabled) {
67
+ const s = this.activeTab;
68
+ this._focusedIndex = e, this.activeTab = i[e].id, this.updateComplete.then(() => {
69
+ this.shadowRoot?.querySelector(
70
+ `[role="tab"][data-tab-id="${i[e].id}"]`
71
+ )?.focus();
72
+ }), this.dispatchEvent(
73
+ new CustomEvent("tab-change", {
74
+ detail: { oldTab: s, newTab: i[e].id },
75
+ bubbles: !0,
76
+ composed: !0
77
+ })
78
+ );
79
+ }
80
+ }
81
+ updated(t) {
82
+ super.updated(t), this.variant === "segmented" && (this._ensurePillObserver(), this._updateSegmentPill());
83
+ }
84
+ /**
85
+ * Observe the tablist so the pill is repositioned whenever the list gains or
86
+ * changes size — this covers the cases where the first render happens while
87
+ * the tab is hidden (nested/lazy panels) or before web fonts load, when
88
+ * layout measurements would otherwise be 0 / stale.
89
+ */
90
+ _ensurePillObserver() {
91
+ if (this._pillResizeObserver) return;
92
+ const t = this.shadowRoot?.querySelector(".tab__list");
93
+ !t || typeof ResizeObserver > "u" || (this._pillResizeObserver = new ResizeObserver(() => this._updateSegmentPill()), this._pillResizeObserver.observe(t));
94
+ }
95
+ _updateSegmentPill() {
96
+ const t = this.shadowRoot?.querySelector(".tab__segment-pill"), i = this.shadowRoot?.querySelector(".tab__button--active"), e = this.shadowRoot?.querySelector(".tab__list");
97
+ if (!t || !i || !e) return;
98
+ const a = e.getBoundingClientRect(), s = i.getBoundingClientRect();
99
+ if (s.width === 0) return;
100
+ const o = parseFloat(getComputedStyle(e).paddingLeft) || 0, r = s.left - a.left - e.clientLeft - o + e.scrollLeft, p = s.width;
101
+ this._pillInitialized ? (t.style.transform = `translateX(${r}px)`, t.style.width = `${p}px`) : (t.style.transition = "none", t.style.transform = `translateX(${r}px)`, t.style.width = `${p}px`, requestAnimationFrame(() => {
102
+ t.style.transition = "";
103
+ }), this._pillInitialized = !0);
104
+ }
105
+ scrollTabIntoView(t) {
106
+ this.updateComplete.then(() => {
107
+ const i = this.shadowRoot?.querySelector(
108
+ `[role="tab"][data-tab-id="${t}"]`
109
+ );
110
+ if (i && this.tablist) {
111
+ const e = this.tablist.getBoundingClientRect(), a = i.getBoundingClientRect();
112
+ a.left < e.left ? this.tablist.scrollLeft -= e.left - a.left + 16 : a.right > e.right && (this.tablist.scrollLeft += a.right - e.right + 16);
113
+ }
114
+ });
115
+ }
116
+ // ==================== RENDER ====================
117
+ renderTabButton(t, i) {
118
+ const e = this.activeTab === t.id, a = this._focusedIndex === i, s = [
119
+ "tab__button",
120
+ e ? "tab__button--active" : "",
121
+ t.disabled ? "tab__button--disabled" : ""
122
+ ].filter(Boolean).join(" "), o = ["tab__label", e ? "" : "tab__label--inactive"].filter(Boolean).join(" "), r = ["tab__description", e ? "tab__description--active" : ""].filter(Boolean).join(" ");
123
+ return d`
124
+ <button
125
+ role="tab"
126
+ class=${s}
127
+ data-tab-id=${t.id}
128
+ aria-selected=${e ? "true" : "false"}
129
+ aria-controls="panel-${t.id}"
130
+ tabindex=${e || a ? "0" : "-1"}
131
+ ?disabled=${t.disabled}
132
+ @click=${() => this.handleTabClick(t.id, t.disabled)}
133
+ @focus=${() => this.scrollTabIntoView(t.id)}
134
+ >
135
+ ${t.icon ? d`<i class="${t.icon} tab__icon"></i>` : b}
136
+ <div class="tab__content">
137
+ <span class=${o}>${t.label}</span>
138
+ ${t.description ? d`<span class=${r}>${t.description}</span>` : b}
139
+ </div>
140
+ </button>
141
+ `;
142
+ }
143
+ renderTabPanel(t) {
144
+ const i = this.activeTab === t.id;
145
+ if (!(!this.lazy || this._renderedTabs.has(t.id))) return b;
146
+ const a = ["tab__panel", i ? "" : "tab__panel--hidden"].filter(Boolean).join(" ");
147
+ return d`
148
+ <div
149
+ role="tabpanel"
150
+ id="panel-${t.id}"
151
+ aria-labelledby="tab-${t.id}"
152
+ class=${a}
153
+ tabindex="0"
154
+ >
155
+ <slot name=${`panel-${t.id}`}>
156
+ ${typeof t.content == "string" ? d`${t.content}` : b}
157
+ </slot>
158
+ </div>
159
+ `;
160
+ }
161
+ render() {
162
+ return d`
163
+ <div class="tab tab--${this.variant}">
164
+ <div role="tablist" aria-label="Tabs" class="tab__list" @keydown=${this.handleKeyDown}>
165
+ ${this.variant === "segmented" ? d`<span class="tab__segment-pill" aria-hidden="true"></span>` : b}
166
+ ${this.tabs.map((t, i) => this.renderTabButton(t, i))}
167
+ </div>
168
+ <div class="tab__panels">${this.tabs.map((t) => this.renderTabPanel(t))}</div>
169
+ </div>
170
+ `;
171
+ }
172
+ };
173
+ n.styles = [
174
+ u`
175
+ ${_(m)}
176
+ `
177
+ ];
178
+ l([
179
+ c({ type: Array })
180
+ ], n.prototype, "tabs", 2);
181
+ l([
182
+ c({ type: String })
183
+ ], n.prototype, "activeTab", 2);
184
+ l([
185
+ c({ type: Boolean })
186
+ ], n.prototype, "lazy", 2);
187
+ l([
188
+ c({ type: String })
189
+ ], n.prototype, "variant", 2);
190
+ l([
191
+ h()
192
+ ], n.prototype, "_focusedIndex", 2);
193
+ l([
194
+ h()
195
+ ], n.prototype, "_renderedTabs", 2);
196
+ l([
197
+ f('[role="tablist"]')
198
+ ], n.prototype, "tablist", 2);
199
+ n = l([
200
+ g("logosphere-tab")
201
+ ], n);
202
+ export {
203
+ n as L
204
+ };
package/dist/tab.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./tab-DcjAlXzU.cjs");Object.defineProperty(exports,"LogosphereTab",{enumerable:!0,get:()=>e.LogosphereTab});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./tab-BvRVHpWs.cjs");Object.defineProperty(exports,"LogosphereTab",{enumerable:!0,get:()=>e.LogosphereTab});
package/dist/tab.js CHANGED
@@ -1,4 +1,4 @@
1
- import { L as r } from "./tab-BKdN4xAz.js";
1
+ import { L as r } from "./tab-Byh4UgFB.js";
2
2
  export {
3
3
  r as LogosphereTab
4
4
  };
@@ -0,0 +1,239 @@
1
+ import { unsafeCSS as c, css as m, LitElement as y, nothing as n, html as u } from "lit";
2
+ import { query as _, property as i, state as d, customElement as g } from "lit/decorators.js";
3
+ import { live as x } from "lit/directives/live.js";
4
+ import "./formfield-ss2mFweu.js";
5
+ import "./ui-icon-BeR-PaPg.js";
6
+ const v = ":host{display:block}.textarea__wrap{position:relative;flex:1;min-width:0}.textarea__field{display:block;width:100%;background:transparent;border:none;outline:none;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);box-sizing:border-box}.textarea__field::placeholder{color:var(--color-tertiary)}.textarea__field:disabled{cursor:not-allowed}.textarea__field--resize-none{resize:none}.textarea__field--resize-vertical{resize:vertical}.textarea__field--resize-horizontal{resize:horizontal}.textarea__field--resize-both{resize:both}.textarea__field--auto-resize{resize:none;overflow:hidden}.textarea__counter{position:absolute;bottom:5px;right:18px;font-size:11px;font-weight:var(--font-weight-medium);line-height:1rem;letter-spacing:-.11px;color:var(--color-secondary);background-color:var(--color-light-bg-2);border-radius:var(--radius-sm, 4px);padding:0 var(--spacing-1);white-space:nowrap;-webkit-user-select:none;user-select:none;pointer-events:none}.textarea__wrap--no-grip .textarea__counter{right:4px}.textarea__clear-btn{border:none;background:transparent;color:var(--color-tertiary);cursor:pointer;padding:0;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;outline:none;line-height:0;transition:color var(--transition-speed-fast) var(--transition-timing)}.textarea__clear-btn:hover{color:var(--color-body-text)}";
7
+ var f = Object.defineProperty, b = Object.getOwnPropertyDescriptor, r = (e, a, s, o) => {
8
+ for (var l = o > 1 ? void 0 : o ? b(a, s) : a, h = e.length - 1, p; h >= 0; h--)
9
+ (p = e[h]) && (l = (o ? p(a, s, l) : p(l)) || l);
10
+ return o && l && f(a, s, l), l;
11
+ };
12
+ let t = class extends y {
13
+ constructor() {
14
+ super(...arguments), this.value = "", this.placeholder = "", this.name = "", this.autocomplete = "", this.rows = 3, this.maxRows = 8, this.wrap = "soft", this.resize = "vertical", this.autoResize = !0, this.size = "default", this.variant = "default", this.label = "", this.helper = "", this.error = "", this.required = !1, this.disabled = !1, this.readonly = !1, this._internalError = "", this._charCount = 0, this.handleInput = (e) => {
15
+ const a = e.target;
16
+ this.value = a.value, this._charCount = this.value.length, this.autoResize && this.adjustHeight(), this._internalError && (this._internalError = "", this._textareaElement.setCustomValidity("")), this.dispatchEvent(new CustomEvent("input", {
17
+ bubbles: !0,
18
+ composed: !0,
19
+ detail: { value: this.value, originalEvent: e }
20
+ }));
21
+ }, this.handleChange = (e) => {
22
+ const a = e.target;
23
+ this.value = a.value, a.checkValidity() || (this._internalError = a.validationMessage), this.dispatchEvent(new CustomEvent("change", {
24
+ bubbles: !0,
25
+ composed: !0,
26
+ detail: { value: this.value, originalEvent: e }
27
+ })), this.dispatchEvent(new CustomEvent("lgsChange", {
28
+ bubbles: !0,
29
+ composed: !0,
30
+ detail: { value: this.value }
31
+ }));
32
+ }, this.handleKeyDown = (e) => {
33
+ this.dispatchEvent(new CustomEvent("keydown", {
34
+ bubbles: !0,
35
+ composed: !0,
36
+ detail: { key: e.key, originalEvent: e }
37
+ }));
38
+ }, this.handleKeyUp = (e) => {
39
+ this.dispatchEvent(new CustomEvent("keyup", {
40
+ bubbles: !0,
41
+ composed: !0,
42
+ detail: { key: e.key, originalEvent: e }
43
+ }));
44
+ }, this.handleClear = () => {
45
+ this.value = "", this._charCount = 0, this._textareaElement && (this._textareaElement.value = "", this.autoResize && this.adjustHeight()), this.dispatchEvent(new CustomEvent("clear", { bubbles: !0, composed: !0 })), this.dispatchEvent(new CustomEvent("input", {
46
+ bubbles: !0,
47
+ composed: !0,
48
+ detail: { value: "", originalEvent: null }
49
+ }));
50
+ };
51
+ }
52
+ get textareaElement() {
53
+ return this._textareaElement;
54
+ }
55
+ focus() {
56
+ this._textareaElement?.focus();
57
+ }
58
+ blur() {
59
+ this._textareaElement?.blur();
60
+ }
61
+ select() {
62
+ this._textareaElement?.select();
63
+ }
64
+ setSelectionRange(e, a, s) {
65
+ this._textareaElement?.setSelectionRange(e, a, s);
66
+ }
67
+ checkValidity() {
68
+ return this._textareaElement?.checkValidity() ?? !0;
69
+ }
70
+ reportValidity() {
71
+ return this._textareaElement?.reportValidity() ?? !0;
72
+ }
73
+ setCustomValidity(e) {
74
+ this._textareaElement?.setCustomValidity(e), this._internalError = e, this.requestUpdate();
75
+ }
76
+ adjustHeight() {
77
+ if (!this.autoResize || !this._textareaElement) return;
78
+ const e = this._textareaElement;
79
+ e.style.height = "", e.style.overflow = "hidden";
80
+ const a = e.scrollHeight;
81
+ if (a !== 0) {
82
+ if (this.maxRows > 0) {
83
+ const s = parseFloat(getComputedStyle(e).lineHeight) || 20, o = Math.round(s * this.maxRows);
84
+ if (a >= o) {
85
+ e.style.height = `${o}px`, e.style.overflow = "auto";
86
+ return;
87
+ }
88
+ }
89
+ e.style.height = `${a}px`;
90
+ }
91
+ }
92
+ getResizeClass() {
93
+ return this.autoResize ? "textarea__field--auto-resize" : {
94
+ none: "textarea__field--resize-none",
95
+ vertical: "textarea__field--resize-vertical",
96
+ horizontal: "textarea__field--resize-horizontal",
97
+ both: "textarea__field--resize-both"
98
+ }[this.resize];
99
+ }
100
+ firstUpdated() {
101
+ this._charCount = this.value.length, this.autoResize && requestAnimationFrame(() => this.adjustHeight());
102
+ }
103
+ updated(e) {
104
+ super.updated(e), e.has("value") && (this._charCount = this.value.length, this.autoResize && this.adjustHeight());
105
+ }
106
+ getWrapClass() {
107
+ return this.autoResize || this.resize === "none" ? "textarea__wrap textarea__wrap--no-grip" : "textarea__wrap";
108
+ }
109
+ render() {
110
+ const e = this.error || this._internalError, a = !!this.value && !this.disabled && !this.readonly, s = this.maxlength != null, o = `textarea__field ${this.getResizeClass()}`;
111
+ return u`
112
+ <logosphere-formfield
113
+ .label=${this.label}
114
+ .helper=${this.helper}
115
+ .error=${e}
116
+ .required=${this.required}
117
+ .disabled=${this.disabled}
118
+ .readonly=${this.readonly}
119
+ .size=${this.size}
120
+ .variant=${this.variant}
121
+ .multiline=${!0}
122
+ >
123
+ <slot name="prefix" slot="prefix"></slot>
124
+ <div class="${this.getWrapClass()}">
125
+ <textarea
126
+ class="${o}"
127
+ .value=${x(this.value)}
128
+ placeholder=${this.placeholder || n}
129
+ name=${this.name || n}
130
+ autocomplete=${this.autocomplete || n}
131
+ ?required=${this.required}
132
+ ?disabled=${this.disabled}
133
+ ?readonly=${this.readonly}
134
+ minlength=${this.minlength ?? n}
135
+ maxlength=${this.maxlength ?? n}
136
+ rows=${this.rows}
137
+ cols=${this.cols ?? n}
138
+ wrap=${this.wrap}
139
+ @input=${this.handleInput}
140
+ @change=${this.handleChange}
141
+ @keydown=${this.handleKeyDown}
142
+ @keyup=${this.handleKeyUp}
143
+ ></textarea>
144
+ ${s ? u`
145
+ <span class="textarea__counter">${this._charCount}/${this.maxlength}</span>
146
+ ` : n}
147
+ </div>
148
+ ${a ? u`
149
+ <button
150
+ type="button"
151
+ slot="clear"
152
+ class="textarea__clear-btn"
153
+ @click=${this.handleClear}
154
+ tabindex="-1"
155
+ >
156
+ <ui-icon name="uil-times" size="14"></ui-icon>
157
+ </button>
158
+ ` : n}
159
+ <slot name="suffix" slot="suffix"></slot>
160
+ </logosphere-formfield>
161
+ `;
162
+ }
163
+ };
164
+ t.styles = [m`${c(v)}`];
165
+ r([
166
+ _("textarea")
167
+ ], t.prototype, "_textareaElement", 2);
168
+ r([
169
+ i({ type: String })
170
+ ], t.prototype, "value", 2);
171
+ r([
172
+ i({ type: String })
173
+ ], t.prototype, "placeholder", 2);
174
+ r([
175
+ i({ type: String })
176
+ ], t.prototype, "name", 2);
177
+ r([
178
+ i({ type: String })
179
+ ], t.prototype, "autocomplete", 2);
180
+ r([
181
+ i({ type: Number })
182
+ ], t.prototype, "minlength", 2);
183
+ r([
184
+ i({ type: Number })
185
+ ], t.prototype, "maxlength", 2);
186
+ r([
187
+ i({ type: Number })
188
+ ], t.prototype, "rows", 2);
189
+ r([
190
+ i({ type: Number })
191
+ ], t.prototype, "maxRows", 2);
192
+ r([
193
+ i({ type: Number })
194
+ ], t.prototype, "cols", 2);
195
+ r([
196
+ i({ type: String })
197
+ ], t.prototype, "wrap", 2);
198
+ r([
199
+ i({ type: String })
200
+ ], t.prototype, "resize", 2);
201
+ r([
202
+ i({ type: Boolean })
203
+ ], t.prototype, "autoResize", 2);
204
+ r([
205
+ i({ type: String })
206
+ ], t.prototype, "size", 2);
207
+ r([
208
+ i({ type: String })
209
+ ], t.prototype, "variant", 2);
210
+ r([
211
+ i({ type: String })
212
+ ], t.prototype, "label", 2);
213
+ r([
214
+ i({ type: String })
215
+ ], t.prototype, "helper", 2);
216
+ r([
217
+ i({ type: String })
218
+ ], t.prototype, "error", 2);
219
+ r([
220
+ i({ type: Boolean })
221
+ ], t.prototype, "required", 2);
222
+ r([
223
+ i({ type: Boolean })
224
+ ], t.prototype, "disabled", 2);
225
+ r([
226
+ i({ type: Boolean })
227
+ ], t.prototype, "readonly", 2);
228
+ r([
229
+ d()
230
+ ], t.prototype, "_internalError", 2);
231
+ r([
232
+ d()
233
+ ], t.prototype, "_charCount", 2);
234
+ t = r([
235
+ g("logosphere-textarea")
236
+ ], t);
237
+ export {
238
+ t as T
239
+ };
@@ -0,0 +1,51 @@
1
+ "use strict";const i=require("lit"),t=require("lit/decorators.js"),p=require("lit/directives/live.js");require("./formfield-JXiv9mvJ.cjs");require("./ui-icon-DWl7I5BQ.cjs");const u=":host{display:block}.textarea__wrap{position:relative;flex:1;min-width:0}.textarea__field{display:block;width:100%;background:transparent;border:none;outline:none;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);box-sizing:border-box}.textarea__field::placeholder{color:var(--color-tertiary)}.textarea__field:disabled{cursor:not-allowed}.textarea__field--resize-none{resize:none}.textarea__field--resize-vertical{resize:vertical}.textarea__field--resize-horizontal{resize:horizontal}.textarea__field--resize-both{resize:both}.textarea__field--auto-resize{resize:none;overflow:hidden}.textarea__counter{position:absolute;bottom:5px;right:18px;font-size:11px;font-weight:var(--font-weight-medium);line-height:1rem;letter-spacing:-.11px;color:var(--color-secondary);background-color:var(--color-light-bg-2);border-radius:var(--radius-sm, 4px);padding:0 var(--spacing-1);white-space:nowrap;-webkit-user-select:none;user-select:none;pointer-events:none}.textarea__wrap--no-grip .textarea__counter{right:4px}.textarea__clear-btn{border:none;background:transparent;color:var(--color-tertiary);cursor:pointer;padding:0;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;outline:none;line-height:0;transition:color var(--transition-speed-fast) var(--transition-timing)}.textarea__clear-btn:hover{color:var(--color-body-text)}";var d=Object.defineProperty,c=Object.getOwnPropertyDescriptor,r=(n,e,a,s)=>{for(var o=s>1?void 0:s?c(e,a):e,l=n.length-1,h;l>=0;l--)(h=n[l])&&(o=(s?h(e,a,o):h(o))||o);return s&&o&&d(e,a,o),o};exports.TextArea=class extends i.LitElement{constructor(){super(...arguments),this.value="",this.placeholder="",this.name="",this.autocomplete="",this.rows=3,this.maxRows=8,this.wrap="soft",this.resize="vertical",this.autoResize=!0,this.size="default",this.variant="default",this.label="",this.helper="",this.error="",this.required=!1,this.disabled=!1,this.readonly=!1,this._internalError="",this._charCount=0,this.handleInput=e=>{const a=e.target;this.value=a.value,this._charCount=this.value.length,this.autoResize&&this.adjustHeight(),this._internalError&&(this._internalError="",this._textareaElement.setCustomValidity("")),this.dispatchEvent(new CustomEvent("input",{bubbles:!0,composed:!0,detail:{value:this.value,originalEvent:e}}))},this.handleChange=e=>{const a=e.target;this.value=a.value,a.checkValidity()||(this._internalError=a.validationMessage),this.dispatchEvent(new CustomEvent("change",{bubbles:!0,composed:!0,detail:{value:this.value,originalEvent:e}})),this.dispatchEvent(new CustomEvent("lgsChange",{bubbles:!0,composed:!0,detail:{value:this.value}}))},this.handleKeyDown=e=>{this.dispatchEvent(new CustomEvent("keydown",{bubbles:!0,composed:!0,detail:{key:e.key,originalEvent:e}}))},this.handleKeyUp=e=>{this.dispatchEvent(new CustomEvent("keyup",{bubbles:!0,composed:!0,detail:{key:e.key,originalEvent:e}}))},this.handleClear=()=>{this.value="",this._charCount=0,this._textareaElement&&(this._textareaElement.value="",this.autoResize&&this.adjustHeight()),this.dispatchEvent(new CustomEvent("clear",{bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("input",{bubbles:!0,composed:!0,detail:{value:"",originalEvent:null}}))}}get textareaElement(){return this._textareaElement}focus(){this._textareaElement?.focus()}blur(){this._textareaElement?.blur()}select(){this._textareaElement?.select()}setSelectionRange(e,a,s){this._textareaElement?.setSelectionRange(e,a,s)}checkValidity(){return this._textareaElement?.checkValidity()??!0}reportValidity(){return this._textareaElement?.reportValidity()??!0}setCustomValidity(e){this._textareaElement?.setCustomValidity(e),this._internalError=e,this.requestUpdate()}adjustHeight(){if(!this.autoResize||!this._textareaElement)return;const e=this._textareaElement;e.style.height="",e.style.overflow="hidden";const a=e.scrollHeight;if(a!==0){if(this.maxRows>0){const s=parseFloat(getComputedStyle(e).lineHeight)||20,o=Math.round(s*this.maxRows);if(a>=o){e.style.height=`${o}px`,e.style.overflow="auto";return}}e.style.height=`${a}px`}}getResizeClass(){return this.autoResize?"textarea__field--auto-resize":{none:"textarea__field--resize-none",vertical:"textarea__field--resize-vertical",horizontal:"textarea__field--resize-horizontal",both:"textarea__field--resize-both"}[this.resize]}firstUpdated(){this._charCount=this.value.length,this.autoResize&&requestAnimationFrame(()=>this.adjustHeight())}updated(e){super.updated(e),e.has("value")&&(this._charCount=this.value.length,this.autoResize&&this.adjustHeight())}getWrapClass(){return this.autoResize||this.resize==="none"?"textarea__wrap textarea__wrap--no-grip":"textarea__wrap"}render(){const e=this.error||this._internalError,a=!!this.value&&!this.disabled&&!this.readonly,s=this.maxlength!=null,o=`textarea__field ${this.getResizeClass()}`;return i.html`
2
+ <logosphere-formfield
3
+ .label=${this.label}
4
+ .helper=${this.helper}
5
+ .error=${e}
6
+ .required=${this.required}
7
+ .disabled=${this.disabled}
8
+ .readonly=${this.readonly}
9
+ .size=${this.size}
10
+ .variant=${this.variant}
11
+ .multiline=${!0}
12
+ >
13
+ <slot name="prefix" slot="prefix"></slot>
14
+ <div class="${this.getWrapClass()}">
15
+ <textarea
16
+ class="${o}"
17
+ .value=${p.live(this.value)}
18
+ placeholder=${this.placeholder||i.nothing}
19
+ name=${this.name||i.nothing}
20
+ autocomplete=${this.autocomplete||i.nothing}
21
+ ?required=${this.required}
22
+ ?disabled=${this.disabled}
23
+ ?readonly=${this.readonly}
24
+ minlength=${this.minlength??i.nothing}
25
+ maxlength=${this.maxlength??i.nothing}
26
+ rows=${this.rows}
27
+ cols=${this.cols??i.nothing}
28
+ wrap=${this.wrap}
29
+ @input=${this.handleInput}
30
+ @change=${this.handleChange}
31
+ @keydown=${this.handleKeyDown}
32
+ @keyup=${this.handleKeyUp}
33
+ ></textarea>
34
+ ${s?i.html`
35
+ <span class="textarea__counter">${this._charCount}/${this.maxlength}</span>
36
+ `:i.nothing}
37
+ </div>
38
+ ${a?i.html`
39
+ <button
40
+ type="button"
41
+ slot="clear"
42
+ class="textarea__clear-btn"
43
+ @click=${this.handleClear}
44
+ tabindex="-1"
45
+ >
46
+ <ui-icon name="uil-times" size="14"></ui-icon>
47
+ </button>
48
+ `:i.nothing}
49
+ <slot name="suffix" slot="suffix"></slot>
50
+ </logosphere-formfield>
51
+ `}};exports.TextArea.styles=[i.css`${i.unsafeCSS(u)}`];r([t.query("textarea")],exports.TextArea.prototype,"_textareaElement",2);r([t.property({type:String})],exports.TextArea.prototype,"value",2);r([t.property({type:String})],exports.TextArea.prototype,"placeholder",2);r([t.property({type:String})],exports.TextArea.prototype,"name",2);r([t.property({type:String})],exports.TextArea.prototype,"autocomplete",2);r([t.property({type:Number})],exports.TextArea.prototype,"minlength",2);r([t.property({type:Number})],exports.TextArea.prototype,"maxlength",2);r([t.property({type:Number})],exports.TextArea.prototype,"rows",2);r([t.property({type:Number})],exports.TextArea.prototype,"maxRows",2);r([t.property({type:Number})],exports.TextArea.prototype,"cols",2);r([t.property({type:String})],exports.TextArea.prototype,"wrap",2);r([t.property({type:String})],exports.TextArea.prototype,"resize",2);r([t.property({type:Boolean})],exports.TextArea.prototype,"autoResize",2);r([t.property({type:String})],exports.TextArea.prototype,"size",2);r([t.property({type:String})],exports.TextArea.prototype,"variant",2);r([t.property({type:String})],exports.TextArea.prototype,"label",2);r([t.property({type:String})],exports.TextArea.prototype,"helper",2);r([t.property({type:String})],exports.TextArea.prototype,"error",2);r([t.property({type:Boolean})],exports.TextArea.prototype,"required",2);r([t.property({type:Boolean})],exports.TextArea.prototype,"disabled",2);r([t.property({type:Boolean})],exports.TextArea.prototype,"readonly",2);r([t.state()],exports.TextArea.prototype,"_internalError",2);r([t.state()],exports.TextArea.prototype,"_charCount",2);exports.TextArea=r([t.customElement("logosphere-textarea")],exports.TextArea);
package/dist/textarea.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./text-area-BkHdLnZj.cjs");Object.defineProperty(exports,"TextArea",{enumerable:!0,get:()=>e.TextArea});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./text-area-D_TYL4_q.cjs");Object.defineProperty(exports,"TextArea",{enumerable:!0,get:()=>e.TextArea});