scb-wc-test 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +130 -0
  2. package/all.js +54 -0
  3. package/dummy.png +0 -0
  4. package/index.d.ts +54 -0
  5. package/index.js +108 -0
  6. package/mvc/components/all.js +53 -0
  7. package/mvc/components/scb-accordion/scb-accordion-item.js +194 -0
  8. package/mvc/components/scb-accordion/scb-accordion.js +5 -0
  9. package/mvc/components/scb-app-bar/scb-app-bar.js +144 -0
  10. package/mvc/components/scb-avatar/scb-avatar.js +99 -0
  11. package/mvc/components/scb-breadcrumb/scb-breadcrumb-item.js +17 -0
  12. package/mvc/components/scb-breadcrumb/scb-breadcrumb.js +52 -0
  13. package/mvc/components/scb-button/scb-button.js +121 -0
  14. package/mvc/components/scb-calendar-card/scb-calendar-card.js +140 -0
  15. package/mvc/components/scb-card/scb-card.js +256 -0
  16. package/mvc/components/scb-checkbox/scb-checkbox-group.js +33 -0
  17. package/mvc/components/scb-checkbox/scb-checkbox.js +99 -0
  18. package/mvc/components/scb-chips/scb-chip.js +46 -0
  19. package/mvc/components/scb-dialog/scb-dialog.js +158 -0
  20. package/mvc/components/scb-divider/scb-divider.js +53 -0
  21. package/mvc/components/scb-drawer/scb-drawer-item.js +114 -0
  22. package/mvc/components/scb-drawer/scb-drawer-section.js +19 -0
  23. package/mvc/components/scb-drawer/scb-drawer.js +79 -0
  24. package/mvc/components/scb-drawer/scb-sub-drawer.js +10 -0
  25. package/mvc/components/scb-fact-card/scb-fact-card-content.js +44 -0
  26. package/mvc/components/scb-fact-card/scb-fact-card.js +66 -0
  27. package/mvc/components/scb-footer/scb-footer-section.js +3 -0
  28. package/mvc/components/scb-footer/scb-footer.js +205 -0
  29. package/mvc/components/scb-grid/scb-grid-item.js +9 -0
  30. package/mvc/components/scb-grid/scb-grid.js +81 -0
  31. package/mvc/components/scb-grid/scb-stack.js +16 -0
  32. package/mvc/components/scb-header/scb-header-drawer-group.js +1 -0
  33. package/mvc/components/scb-header/scb-header-drawer-item.js +1 -0
  34. package/mvc/components/scb-header/scb-header-tab.js +1 -0
  35. package/mvc/components/scb-header/scb-header-utility.js +1 -0
  36. package/mvc/components/scb-header/scb-header.js +240 -0
  37. package/mvc/components/scb-icon-button/scb-icon-button.js +95 -0
  38. package/mvc/components/scb-keyfigure-card/scb-keyfigure-card.js +69 -0
  39. package/mvc/components/scb-link/scb-link.js +31 -0
  40. package/mvc/components/scb-list/scb-list-item.js +38 -0
  41. package/mvc/components/scb-list/scb-list.js +10 -0
  42. package/mvc/components/scb-menu/scb-menu-item.js +44 -0
  43. package/mvc/components/scb-menu/scb-menu.js +17 -0
  44. package/mvc/components/scb-menu/scb-sub-menu.js +29 -0
  45. package/mvc/components/scb-notification/scb-notification.js +120 -0
  46. package/mvc/components/scb-progress-indicator/scb-progress-indicator.js +84 -0
  47. package/mvc/components/scb-radio-button/scb-radio-button.js +95 -0
  48. package/mvc/components/scb-radio-button/scb-radio-group.js +28 -0
  49. package/mvc/components/scb-search/scb-search.js +211 -0
  50. package/mvc/components/scb-snackbar/scb-snackbar.js +83 -0
  51. package/mvc/components/scb-status-pill/scb-status-pill.js +31 -0
  52. package/mvc/components/scb-switch/scb-switch.js +54 -0
  53. package/mvc/components/scb-tabs/scb-primary-tab.js +7 -0
  54. package/mvc/components/scb-tabs/scb-secondary-tab.js +7 -0
  55. package/mvc/components/scb-tabs/scb-tabs.js +23 -0
  56. package/mvc/components/scb-textfield/scb-textfield.js +135 -0
  57. package/mvc/components/scb-toc/scb-toc-item.js +84 -0
  58. package/mvc/components/scb-toc/scb-toc.js +6 -0
  59. package/mvc/components/scb-tooltip/scb-tooltip.js +216 -0
  60. package/mvc/scb-logo.svg +21 -0
  61. package/mvc/scb-wc-test.css +1 -0
  62. package/mvc/scb.svg +14 -0
  63. package/mvc/vendor/preload-helper.js +1 -0
  64. package/mvc/vendor/vendor-lit.js +1 -0
  65. package/mvc/vendor/vendor-material.js +764 -0
  66. package/mvc/vendor/vendor.js +68 -0
  67. package/package.json +248 -0
  68. package/scb-accordion/scb-accordion-item.d.ts +37 -0
  69. package/scb-accordion/scb-accordion-item.js +343 -0
  70. package/scb-accordion/scb-accordion.d.ts +6 -0
  71. package/scb-accordion/scb-accordion.js +33 -0
  72. package/scb-app-bar/scb-app-bar.d.ts +10 -0
  73. package/scb-app-bar/scb-app-bar.js +192 -0
  74. package/scb-avatar/scb-avatar.d.ts +30 -0
  75. package/scb-avatar/scb-avatar.js +169 -0
  76. package/scb-breadcrumb/scb-breadcrumb-item.d.ts +9 -0
  77. package/scb-breadcrumb/scb-breadcrumb-item.js +54 -0
  78. package/scb-breadcrumb/scb-breadcrumb.d.ts +16 -0
  79. package/scb-breadcrumb/scb-breadcrumb.js +105 -0
  80. package/scb-button/scb-button.d.ts +26 -0
  81. package/scb-button/scb-button.js +247 -0
  82. package/scb-calendar-card/scb-calendar-card.d.ts +20 -0
  83. package/scb-calendar-card/scb-calendar-card.js +191 -0
  84. package/scb-card/scb-card.d.ts +24 -0
  85. package/scb-card/scb-card.js +345 -0
  86. package/scb-checkbox/scb-checkbox-group.d.ts +17 -0
  87. package/scb-checkbox/scb-checkbox-group.js +80 -0
  88. package/scb-checkbox/scb-checkbox.d.ts +20 -0
  89. package/scb-checkbox/scb-checkbox.js +157 -0
  90. package/scb-chips/scb-chip.d.ts +24 -0
  91. package/scb-chips/scb-chip.js +150 -0
  92. package/scb-dialog/scb-dialog.d.ts +58 -0
  93. package/scb-dialog/scb-dialog.js +390 -0
  94. package/scb-divider/scb-divider.d.ts +9 -0
  95. package/scb-divider/scb-divider.js +85 -0
  96. package/scb-drawer/scb-drawer-item.d.ts +61 -0
  97. package/scb-drawer/scb-drawer-item.js +220 -0
  98. package/scb-drawer/scb-drawer-section.d.ts +7 -0
  99. package/scb-drawer/scb-drawer-section.js +44 -0
  100. package/scb-drawer/scb-drawer.d.ts +97 -0
  101. package/scb-drawer/scb-drawer.js +258 -0
  102. package/scb-drawer/scb-sub-drawer.d.ts +10 -0
  103. package/scb-drawer/scb-sub-drawer.js +43 -0
  104. package/scb-fact-card/scb-fact-card-content.d.ts +10 -0
  105. package/scb-fact-card/scb-fact-card-content.js +83 -0
  106. package/scb-fact-card/scb-fact-card.d.ts +15 -0
  107. package/scb-fact-card/scb-fact-card.js +110 -0
  108. package/scb-footer/scb-footer-section.d.ts +21 -0
  109. package/scb-footer/scb-footer-section.js +28 -0
  110. package/scb-footer/scb-footer.d.ts +27 -0
  111. package/scb-footer/scb-footer.js +326 -0
  112. package/scb-grid/scb-grid-item.d.ts +28 -0
  113. package/scb-grid/scb-grid-item.js +66 -0
  114. package/scb-grid/scb-grid.d.ts +33 -0
  115. package/scb-grid/scb-grid.js +152 -0
  116. package/scb-grid/scb-stack.d.ts +29 -0
  117. package/scb-grid/scb-stack.js +82 -0
  118. package/scb-header/scb-header-drawer-group.d.ts +13 -0
  119. package/scb-header/scb-header-drawer-group.js +28 -0
  120. package/scb-header/scb-header-drawer-item.d.ts +14 -0
  121. package/scb-header/scb-header-drawer-item.js +31 -0
  122. package/scb-header/scb-header-tab.d.ts +13 -0
  123. package/scb-header/scb-header-tab.js +28 -0
  124. package/scb-header/scb-header-utility.d.ts +14 -0
  125. package/scb-header/scb-header-utility.js +31 -0
  126. package/scb-header/scb-header.d.ts +105 -0
  127. package/scb-header/scb-header.js +618 -0
  128. package/scb-icon-button/scb-icon-button.d.ts +31 -0
  129. package/scb-icon-button/scb-icon-button.js +208 -0
  130. package/scb-keyfigure-card/scb-keyfigure-card.d.ts +13 -0
  131. package/scb-keyfigure-card/scb-keyfigure-card.js +119 -0
  132. package/scb-link/scb-link.d.ts +17 -0
  133. package/scb-link/scb-link.js +74 -0
  134. package/scb-list/scb-list-item.d.ts +32 -0
  135. package/scb-list/scb-list-item.js +144 -0
  136. package/scb-list/scb-list.d.ts +8 -0
  137. package/scb-list/scb-list.js +39 -0
  138. package/scb-logo.svg +21 -0
  139. package/scb-menu/scb-menu-item.d.ts +22 -0
  140. package/scb-menu/scb-menu-item.js +107 -0
  141. package/scb-menu/scb-menu.d.ts +21 -0
  142. package/scb-menu/scb-menu.js +98 -0
  143. package/scb-menu/scb-sub-menu.d.ts +12 -0
  144. package/scb-menu/scb-sub-menu.js +69 -0
  145. package/scb-notification/scb-notification.d.ts +16 -0
  146. package/scb-notification/scb-notification.js +187 -0
  147. package/scb-progress-indicator/scb-progress-indicator.d.ts +11 -0
  148. package/scb-progress-indicator/scb-progress-indicator.js +122 -0
  149. package/scb-radio-button/scb-radio-button.d.ts +19 -0
  150. package/scb-radio-button/scb-radio-button.js +176 -0
  151. package/scb-radio-button/scb-radio-group.d.ts +20 -0
  152. package/scb-radio-button/scb-radio-group.js +81 -0
  153. package/scb-search/scb-search.d.ts +45 -0
  154. package/scb-search/scb-search.js +410 -0
  155. package/scb-snackbar/scb-snackbar.d.ts +17 -0
  156. package/scb-snackbar/scb-snackbar.js +140 -0
  157. package/scb-status-pill/scb-status-pill.d.ts +9 -0
  158. package/scb-status-pill/scb-status-pill.js +62 -0
  159. package/scb-switch/scb-switch.d.ts +21 -0
  160. package/scb-switch/scb-switch.js +111 -0
  161. package/scb-tabs/scb-primary-tab.d.ts +17 -0
  162. package/scb-tabs/scb-primary-tab.js +93 -0
  163. package/scb-tabs/scb-secondary-tab.d.ts +17 -0
  164. package/scb-tabs/scb-secondary-tab.js +97 -0
  165. package/scb-tabs/scb-tabs.d.ts +10 -0
  166. package/scb-tabs/scb-tabs.js +66 -0
  167. package/scb-textfield/scb-textfield.d.ts +41 -0
  168. package/scb-textfield/scb-textfield.js +258 -0
  169. package/scb-toc/scb-toc-item.d.ts +21 -0
  170. package/scb-toc/scb-toc-item.js +196 -0
  171. package/scb-toc/scb-toc.d.ts +6 -0
  172. package/scb-toc/scb-toc.js +27 -0
  173. package/scb-tooltip/scb-tooltip.d.ts +32 -0
  174. package/scb-tooltip/scb-tooltip.js +329 -0
  175. package/scb-wc-test.bundle.js +5429 -0
  176. package/scb-wc-test.css +1 -0
  177. package/scb-wc-test.d.ts +106 -0
  178. package/scb.svg +14 -0
@@ -0,0 +1,211 @@
1
+ import{b as y,n as h,i as x,E as b,x as d,t as A}from"../../vendor/vendor.js";import"../scb-list/scb-list.js";import"../../vendor/vendor-material.js";import"../../vendor/preload-helper.js";import"../scb-list/scb-list-item.js";var w=Object.defineProperty,I=Object.getOwnPropertyDescriptor,l=(e,t,s,n)=>{for(var i=n>1?void 0:n?I(t,s):t,r=e.length-1,a;r>=0;r--)(a=e[r])&&(i=(n?a(t,s,i):a(i))||i);return n&&i&&w(t,s,i),i};let S=0,o=class extends x{constructor(){super(...arguments),this.supportingText="Hinted search text",this.value="",this.size="default",this.fullScreen=!1,this._inputFocused=!1,this._visibleSuggestions=0,this._activeIndex=-1,this._listboxId=`scb-search-listbox-${++S}`,this._kbMode=!1}connectedCallback(){super.connectedCallback()}disconnectedCallback(){const e=this._inputEl();e&&this._boundNativeKeydown&&e.removeEventListener("keydown",this._boundNativeKeydown,!0),super.disconnectedCallback()}firstUpdated(){this._ensureListboxA11y(),this._updateComboboxA11y();const e=this._inputEl();e&&(this._boundNativeKeydown=t=>this._handleKey(t),e.addEventListener("keydown",this._boundNativeKeydown,!0))}updated(){this._ensureListboxA11y(),this._updateComboboxA11y()}render(){const e=(this.value??"").trim().length>0,t=this._inputFocused&&e&&this._hasSuggestions;return d`
2
+ <div class="ripple-wrapper">
3
+ <md-icon class="leading">${e?"arrow_back":"search"}</md-icon>
4
+
5
+ <input
6
+ id="searchInput"
7
+ type="search"
8
+ name="textfield"
9
+ class=${t?"with-list":""}
10
+ .value=${this.value}
11
+ placeholder=${this.supportingText}
12
+ autocomplete="off"
13
+ @input=${this._onInput}
14
+ @focus=${this._onFocus}
15
+ @blur=${this._onBlur}
16
+ aria-label=${this.supportingText||"Sök"}
17
+ />
18
+
19
+ ${e?d`<button class="clear-btn" @click=${this._clearInput} tabindex="-1" aria-label="Rensa sökfält">
20
+ <md-icon>close</md-icon>
21
+ </button>`:this.trailingIcon?d`<span class="trailing"><md-icon>${this.trailingIcon}</md-icon></span>`:b}
22
+
23
+ <md-ripple></md-ripple>
24
+ </div>
25
+
26
+ <div class="list-divider" aria-hidden=${String(!(this.fullScreen&&t))}></div>
27
+
28
+ ${t?d`<scb-list class="suggestion-list" id=${this._listboxId}>
29
+ <slot @slotchange=${this._onSlotChange}></slot>
30
+ </scb-list>`:b}
31
+ `}submit(){const e=this._getActiveItem(),t={value:this.value};e&&(t.active=this._itemPayload(e)),this.dispatchEvent(new CustomEvent("scb-search-submit",{detail:t,bubbles:!0,composed:!0}))}get _hasSuggestions(){return this._visibleSuggestions>=0?this._visibleSuggestions>0:Array.from(this.getElementsByTagName("scb-list-item")).some(t=>!t.hasAttribute("hidden")&&t.style.display!=="none")}_onSlotChange(){this._filterSuggestions(this.value)}_onInput(e){const t=e.target;this.value=t.value,this._filterSuggestions(this.value),this._activeIndex=-1,this._kbMode=!1,this._updateComboboxA11y(),this.dispatchEvent(new CustomEvent("scb-search-input",{detail:{value:this.value},bubbles:!0,composed:!0}))}_onFocus(){this._inputFocused=!0,this._filterSuggestions(this.value),this._updateComboboxA11y(),this.requestUpdate()}_onBlur(){setTimeout(()=>{this._inputFocused=!1,this._activeIndex=-1,this._kbMode=!1,this._updateComboboxA11y(),this.requestUpdate()},100)}_handleKey(e){if(!this._inputEl())return;const s=this._getVisibleItems(),n=(this.value??"").trim().length>0,i=this._inputFocused&&n&&s.length>0,r=e.key,a=e.keyCode,c=r==="ArrowDown"||r==="Down"||a===40,p=r==="ArrowUp"||r==="Up"||a===38,v=r==="Home"||a===36,g=r==="End"||a===35,m=r==="Enter"||a===13,f=r==="Escape"||r==="Esc"||a===27;if(c){if(!i)return;e.preventDefault(),this._kbMode=!0,this._moveActive(s,1);return}if(p){if(!i)return;e.preventDefault(),this._kbMode=!0,this._moveActive(s,-1);return}if(v){if(!i)return;e.preventDefault(),this._kbMode=!0,this._activeIndex=s.length?0:-1,this._updateComboboxA11y(),this._scrollActiveIntoView();return}if(g){if(!i)return;e.preventDefault(),this._kbMode=!0,this._activeIndex=s.length?s.length-1:-1,this._updateComboboxA11y(),this._scrollActiveIntoView();return}if(m){if(!i){this.submit();return}e.preventDefault();const u=this._getActiveItem();if(u){const _=u.getAttribute("label")||"";this.value=_,this.dispatchEvent(new CustomEvent("scb-search-submit",{detail:{value:this.value,active:this._itemPayload(u)},bubbles:!0,composed:!0})),this._visibleSuggestions=0,this._activeIndex=-1,this._kbMode=!1,this.requestUpdate()}else this.submit();return}if(f){e.preventDefault(),this._clearInput();return}}_clearInput(){this.value="",this._activeIndex=-1,this._kbMode=!1;const e=this._inputEl();e?.focus(),e&&(e.value=""),this._filterSuggestions(""),this._updateComboboxA11y(),this.dispatchEvent(new CustomEvent("scb-search-clear",{bubbles:!0,composed:!0}))}_filterSuggestions(e){const t=(e??"").trim().toLowerCase(),s=Array.from(this.querySelectorAll("scb-list-item"));let n=0;for(const i of s){const r=(i.getAttribute("label")||"").toLowerCase(),a=(i.getAttribute("supporting-text")||"").toLowerCase(),c=`${r} ${a}`.trim();t!==""&&c.includes(t)?(i.removeAttribute("hidden"),n++):i.setAttribute("hidden",""),this._ensureOptionA11y(i)}this._visibleSuggestions=n,this._activeIndex>=n&&(this._activeIndex=-1),this._updateComboboxA11y(),this.requestUpdate()}_inputEl(){return this.renderRoot?.querySelector("#searchInput")??null}_listEl(){return this.renderRoot?.querySelector("scb-list.suggestion-list")??null}_getVisibleItems(){return Array.from(this.querySelectorAll("scb-list-item")).filter(t=>!t.hasAttribute("hidden")&&t.style.display!=="none")}_getActiveItem(){const e=this._getVisibleItems();return this._activeIndex<0||this._activeIndex>=e.length?null:e[this._activeIndex]??null}_moveActive(e,t){if(!e.length){this._activeIndex=-1,this._updateComboboxA11y();return}let s=this._activeIndex+t;this._activeIndex===-1?s=t>0?0:e.length-1:(s<0&&(s=0),s>=e.length&&(s=e.length-1)),this._activeIndex=s,this._updateComboboxA11y(),this._scrollActiveIntoView()}_scrollActiveIntoView(){const e=this._getActiveItem();e&&e.scrollIntoView({block:"nearest"})}_itemPayload(e){return{label:e.getAttribute("label")||"",supportingText:e.getAttribute("supporting-text")||"",href:e.getAttribute("href")||"",type:e.getAttribute("type")||"",id:e.id||""}}_ensureListboxA11y(){const e=this._listEl();e&&(e.id||(e.id=this._listboxId),e.setAttribute("role","listbox"),e.setAttribute("aria-label","Sökförslag")),Array.from(this.querySelectorAll("scb-list-item")).forEach(s=>this._ensureOptionA11y(s))}_ensureOptionA11y(e){e.id||(e.id=`${this._listboxId}-opt-${Math.random().toString(36).slice(2,8)}`),e.setAttribute("role","option"),e.setAttribute("tabindex","-1")}_updateComboboxA11y(){const e=this._inputEl();if(!e)return;const t=this._getVisibleItems(),s=(this.value??"").trim().length>0,n=this._inputFocused&&s&&t.length>0;e.setAttribute("role","combobox"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-controls",this._listboxId),e.setAttribute("aria-expanded",String(n));const i=n?this._getActiveItem():null;i?.id?e.setAttribute("aria-activedescendant",i.id):e.removeAttribute("aria-activedescendant"),t.forEach((r,a)=>{const c=a===this._activeIndex;r.setAttribute("aria-selected",String(c)),r.style.boxShadow="",r.style.borderRadius="",this._kbMode&&c&&(r.style.boxShadow="inset 0 0 0 var(--md-focus-ring-width, 2px) var(--md-focus-ring-color, var(--p-40))",r.style.borderRadius="var(--md-sys-shape-corner-small, 8px)")})}};o.styles=y`
32
+ :host {
33
+ display: flex;
34
+ flex-direction: column;
35
+ position: relative;
36
+ color: var(--md-sys-color-on-surface);
37
+ -webkit-tap-highlight-color: transparent;
38
+
39
+ --scb-search-radius: var(--radius-full, 1000px);
40
+ --scb-search-open-radius: var(--radius-xl, 24px);
41
+
42
+ --scb-search-height: 56px;
43
+ --scb-search-padding-x: var(--spacing-5, 16px);
44
+ --scb-search-padding-y: var(--spacing-5, 16px);
45
+
46
+ --scb-search-leading-size: var(--scale-11, 48px);
47
+ --scb-search-trailing-size: var(--scale-11, 48px);
48
+ --scb-search-gap: var(--spacing-2, 4px);
49
+
50
+ letter-spacing: var(--md-sys-typescale-body-large-tracking, -0.3px);
51
+
52
+ --scb-search-leading-gap: calc(
53
+ var(--scb-search-padding-x) + var(--scb-search-leading-size) + var(--scb-search-gap)
54
+ );
55
+ --scb-search-trailing-gap: calc(
56
+ var(--scb-search-padding-x) + var(--scb-search-trailing-size) + var(--scb-search-gap)
57
+ );
58
+
59
+ --scb-search-font-size: var(--md-sys-typescale-body-large-size, 18px);
60
+ --scb-search-line-height: var(--md-sys-typescale-body-large-line-height, 24px);
61
+ --scb-search-icon-size: var(--icon-size-small, 24px);
62
+ }
63
+
64
+ :host([size="compact"]) {
65
+ --scb-search-height: var(--scale-11, 40px);
66
+ --scb-search-padding-x: var(--spacing-4, 12px);
67
+ --scb-search-padding-y: var(--spacing-3, 8px);
68
+ --scb-search-open-radius: var(--radius-l, 16px);
69
+ --scb-search-font-size: var(--md-sys-typescale-body-medium-size, 0.875rem);
70
+ --scb-search-line-height: var(--md-sys-typescale-body-medium-line-height, 20px);
71
+ }
72
+
73
+ .ripple-wrapper {
74
+ position: relative;
75
+ display: flex;
76
+ align-items: center;
77
+ width: 100%;
78
+ }
79
+
80
+ .leading {
81
+ position: absolute;
82
+ left: var(--scb-search-padding-x);
83
+ top: 50%;
84
+ transform: translateY(-50%);
85
+ width: var(--scb-search-leading-size);
86
+ height: var(--scb-search-leading-size);
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: center;
90
+ pointer-events: none;
91
+ color: var(--md-sys-color-on-surface-variant);
92
+ z-index: 2;
93
+ }
94
+ .leading md-icon {
95
+ font-size: var(--scb-search-icon-size);
96
+ line-height: 1;
97
+ }
98
+
99
+ .trailing,
100
+ .clear-btn {
101
+ position: absolute;
102
+ right: var(--scb-search-padding-x);
103
+ top: 50%;
104
+ transform: translateY(-50%);
105
+ width: var(--scb-search-trailing-size);
106
+ height: var(--scb-search-trailing-size);
107
+ display: inline-flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ color: var(--md-sys-color-on-surface-variant);
111
+ z-index: 3;
112
+ }
113
+ .trailing md-icon { pointer-events: none; font-size: var(--scb-search-icon-size); }
114
+
115
+ .clear-btn {
116
+ background: none;
117
+ border: 0;
118
+ padding: 0;
119
+ cursor: pointer;
120
+ }
121
+ .clear-btn[hidden] { display: none; }
122
+
123
+ input[type="search"] {
124
+ padding:
125
+ var(--scb-search-padding-y)
126
+ var(--scb-search-trailing-gap)
127
+ var(--scb-search-padding-y)
128
+ var(--scb-search-leading-gap);
129
+ min-height: var(--scb-search-height);
130
+ width: 100%;
131
+ box-sizing: border-box;
132
+
133
+ border: var(--stroke-border, 1px) solid var(--md-sys-color-outline);
134
+ border-radius: var(--scb-search-radius);
135
+
136
+ font-family: var(--md-sys-typescale-body-large-font, var(--brand-font, Inter), sans-serif);
137
+ font-size: var(--scb-search-font-size);
138
+ line-height: var(--scb-search-line-height);
139
+
140
+ color: var(--md-sys-color-on-surface);
141
+ background: var(--md-sys-color-surface);
142
+
143
+ position: relative;
144
+ z-index: 1;
145
+ }
146
+ input[type="search"]::placeholder {
147
+ color: var(--md-sys-color-on-surface-variant);
148
+ font-size: var(--scb-search-font-size);
149
+ line-height: var(--scb-search-line-height);
150
+ }
151
+ input[type="search"]:hover { outline: var(--md-sys-color-outline) auto var(--stroke-border, 1px); }
152
+ input[type="search"]:focus { outline: none; }
153
+
154
+ md-ripple {
155
+ border-radius: var(--scb-search-radius);
156
+ position: absolute;
157
+ inset: 0;
158
+ z-index: 2;
159
+ pointer-events: none;
160
+ --md-ripple-hover-color: transparent;
161
+ --md-ripple-hover-opacity: 0;
162
+ }
163
+
164
+ input[type="search"]::-webkit-search-cancel-button {
165
+ -webkit-appearance: none;
166
+ appearance: none;
167
+ display: none;
168
+ }
169
+
170
+ input.with-list { border-radius: var(--scb-search-open-radius) var(--scb-search-open-radius) 0 0; }
171
+ input.with-list ~ md-ripple { border-radius: var(--scb-search-open-radius) var(--scb-search-open-radius) 0 0; }
172
+
173
+ scb-list.suggestion-list {
174
+ position: absolute;
175
+ top: 100%;
176
+ left: 0;
177
+ width: 100%;
178
+ z-index: 10;
179
+ background: var(--md-sys-color-surface);
180
+ border: var(--stroke-border, 1px) solid var(--md-sys-color-outline);
181
+ border-top: 0;
182
+ border-radius: 0 0 var(--scb-search-open-radius) var(--scb-search-open-radius);
183
+ overflow: hidden;
184
+ box-sizing: border-box;
185
+ }
186
+
187
+ :host([full-screen]) input[type="search"],
188
+ :host([full-screen]) input.with-list,
189
+ :host([full-screen]) input.with-list ~ md-ripple,
190
+ :host([full-screen]) md-ripple {
191
+ border-radius: var(--radius-none, 0px) !important;
192
+ }
193
+ :host([full-screen]) scb-list.suggestion-list {
194
+ position: static;
195
+ border: 0;
196
+ border-radius: 0;
197
+ background: transparent;
198
+ }
199
+
200
+ .list-divider {
201
+ display: none;
202
+ height: var(--stroke-border, 1px);
203
+ background: var(--md-sys-color-outline);
204
+ width: 100%;
205
+ }
206
+ :host([full-screen]) .list-divider[aria-hidden="false"] { display: block; }
207
+
208
+ @media (prefers-color-scheme: dark) {
209
+ :host { color: var(--md-sys-color-on-surface); }
210
+ }
211
+ `;l([h({type:String,attribute:"trailing-icon"})],o.prototype,"trailingIcon",2);l([h({type:String,attribute:"supporting-text"})],o.prototype,"supportingText",2);l([h({type:String})],o.prototype,"value",2);l([h({type:String,reflect:!0})],o.prototype,"size",2);l([h({type:Boolean,attribute:"full-screen",reflect:!0})],o.prototype,"fullScreen",2);o=l([A("scb-search")],o);
@@ -0,0 +1,83 @@
1
+ import{b as d,n as r,i as u,x as a,t as b}from"../../vendor/vendor.js";import"../scb-icon-button/scb-icon-button.js";import"../scb-button/scb-button.js";import"../../vendor/preload-helper.js";var h=Object.defineProperty,m=Object.getOwnPropertyDescriptor,s=(t,e,i,c)=>{for(var n=c>1?void 0:c?m(e,i):e,l=t.length-1,p;l>=0;l--)(p=t[l])&&(n=(c?p(e,i,n):p(n))||n);return c&&n&&h(e,i,n),n};let o=class extends u{constructor(){super(...arguments),this.message="",this.open=!1,this.actionText="",this.showClose=!1,this.fixed=!1,this.fadeout=!1,this.withLongerAction=!1}handleAction(){this.dispatchEvent(new CustomEvent("snackbar-action")),this.open=!1}handleClose(){this.dispatchEvent(new CustomEvent("snackbar-close")),this.open=!1}updated(t){super.updated(t),(t.has("open")||t.has("fadeout"))&&(this.open&&this.fadeout?(window.clearTimeout(this._fadeoutTimer),this._fadeoutTimer=window.setTimeout(()=>{this.open=!1},5e3)):window.clearTimeout(this._fadeoutTimer))}render(){const t=!!this.actionText,e=!!this.showClose;let i="snackbar";return!t&&!e&&(i+=" no-actions"),this.withLongerAction&&(i+=" longer-action"),a`
2
+ <div class="${i}" ?hidden=${!this.open}>
3
+ ${this.withLongerAction?a`
4
+ <div class="message">${this.message}</div>
5
+ <div class="actions">
6
+ ${t?a`<scb-button variant="text" label=${this.actionText} @click=${this.handleAction}></scb-button>`:""}
7
+ ${e?a`<scb-icon-button icon="close" @click=${this.handleClose} aria-label="Stäng"></scb-icon-button>`:""}
8
+ </div>
9
+ `:a`
10
+ <span class="message">${this.message}</span>
11
+ ${t?a`<scb-button variant="text" label=${this.actionText} @click=${this.handleAction}></scb-button>`:""}
12
+ ${e?a`<scb-icon-button icon="close" @click=${this.handleClose} aria-label="Stäng"></scb-icon-button>`:""}
13
+ `}
14
+
15
+ </div>
16
+ `}};o.styles=d`
17
+ :host {
18
+ position: relative;
19
+ display: block;
20
+ min-width: 312px;
21
+ max-width: 560px;
22
+ }
23
+ :host([fixed]) {
24
+ position: fixed;
25
+ z-index: 9999;
26
+ left: 50%;
27
+ bottom: 24px;
28
+ transform: translateX(-50%);
29
+ }
30
+ .snackbar {
31
+ background: var(--md-sys-color-inverse-surface);
32
+ color: var(--md-sys-color-inverse-on-surface);
33
+ border-radius: 4px;
34
+ box-shadow: 0 4px 8px 3px rgba(0, 0, 0, 0.15), 0 1px 3px 0 rgba(0, 0, 0, 0.30);
35
+ display: flex;
36
+ align-items: center;
37
+ padding: 14px 16px;
38
+ font-size: 16px;
39
+ opacity: 0;
40
+ transition: opacity 0.3s, bottom 0.3s;
41
+ pointer-events: auto;
42
+ position: relative;
43
+ }
44
+ .snackbar.longer-action {
45
+ flex-direction: column;
46
+ align-items: flex-start;
47
+ }
48
+ .snackbar .actions {
49
+ display: flex;
50
+ margin-top: 10px;
51
+ width: 100%;
52
+ justify-content: flex-end;
53
+
54
+ }
55
+ .message.no-actions {
56
+ margin-right: 0;
57
+ }
58
+ :host([open]) .snackbar {
59
+ opacity: 1;
60
+ pointer-events: auto;
61
+ }
62
+ .message {
63
+ flex: 1 1 auto;
64
+ margin-right: 4px;
65
+ }
66
+ .snackbar scb-icon-button{
67
+ --md-icon-button-icon-color: var(--md-sys-color-inverse-on-surface);
68
+ --md-icon-button-hover-icon-color: var(--md-sys-color-inverse-on-surface);
69
+ --md-icon-button-hover-state-layer-color: var(--md-sys-color-surface-container);
70
+ --md-icon-button-focus-icon-color: var(--md-sys-color-inverse-on-surface);
71
+ --md-icon-button-pressed-icon-color: var(--md-sys-color-inverse-on-surface);
72
+ --md-focus-ring-color: var(--md-sys-color-inverse-on-surface);
73
+ }
74
+ .snackbar scb-button{
75
+ --md-text-button-label-text-color: var(--md-sys-color-inverse-primary);
76
+ --md-text-button-hover-label-text-color: var(--md-sys-color-inverse-primary);
77
+ --md-text-button-hover-state-layer-color: var(--md-sys-color-surface-container);
78
+ --md-text-button-focus-label-text-color: var(--md-sys-color-inverse-primary);
79
+ --md-text-button-pressed-label-text-color: var(--md-sys-color-inverse-primary);
80
+ --md-focus-ring-color: var(--md-sys-color-inverse-on-surface);
81
+ }
82
+
83
+ `;s([r({type:String})],o.prototype,"message",2);s([r({type:Boolean,reflect:!0})],o.prototype,"open",2);s([r({type:String,attribute:"action-text"})],o.prototype,"actionText",2);s([r({type:Boolean,attribute:"show-close"})],o.prototype,"showClose",2);s([r({type:Boolean,reflect:!0})],o.prototype,"fixed",2);s([r({type:Boolean})],o.prototype,"fadeout",2);s([r({type:Boolean,attribute:"with-longer-action"})],o.prototype,"withLongerAction",2);o=s([b("scb-snackbar")],o);
@@ -0,0 +1,31 @@
1
+ import{b as u,n as l,i as d,x as n,t as h}from"../../vendor/vendor.js";import"../../vendor/vendor-material.js";var b=Object.defineProperty,m=Object.getOwnPropertyDescriptor,e=(p,o,c,t)=>{for(var s=t>1?void 0:t?m(o,c):o,i=p.length-1,a;i>=0;i--)(a=p[i])&&(s=(t?a(o,c,s):a(s))||s);return t&&s&&b(o,c,s),s};let r=class extends d{constructor(){super(...arguments),this.status="",this.label="",this.showIcon=!1}render(){return n`
2
+ ${this.showIcon?this.status==="success"?n`<md-icon>check_circle</md-icon>`:this.status==="warning"?n`<md-icon>warning</md-icon>`:this.status==="error"?n`<md-icon>error</md-icon>`:"":""}
3
+ <span>${this.label}</span>
4
+ `}};r.styles=u`
5
+ :host {
6
+ display: inline-block;
7
+ border-radius: 999px;
8
+ padding: 6px 16px;
9
+ font-size: 14px;
10
+ font-weight: 600;
11
+ border: none;
12
+ box-sizing: border-box;
13
+ user-select: none;
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 8px;
17
+ width: fit-content;
18
+ }
19
+ :host([status="success"]) {
20
+ background: var(--md-sys-color-success-container);
21
+ color: var(--md-sys-color-on-success-container);
22
+ }
23
+ :host([status="warning"]) {
24
+ background: var(--md-sys-color-warning-container);
25
+ color: var(--md-sys-color-on-warning-container);
26
+ }
27
+ :host([status="error"]) {
28
+ background: var(--md-sys-color-error-container);
29
+ color: var(--md-sys-color-on-error-container);
30
+ }
31
+ `;e([l({type:String})],r.prototype,"status",2);e([l({type:String})],r.prototype,"label",2);e([l({type:Boolean,attribute:"show-icon"})],r.prototype,"showIcon",2);r=e([h("scb-status-pill")],r);
@@ -0,0 +1,54 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../../vendor/vendor-material.js","../../vendor/vendor.js"])))=>i.map(i=>d[i]);
2
+ import{_ as b}from"../../vendor/preload-helper.js";import{i as v,E as h,x as p,b as w,n as l,t as y}from"../../vendor/vendor.js";var g=Object.defineProperty,m=Object.getOwnPropertyDescriptor,f=t=>{throw TypeError(t)},i=(t,e,s,n)=>{for(var r=n>1?void 0:n?m(e,s):e,c=t.length-1,d;c>=0;c--)(d=t[c])&&(r=(n?d(e,s,r):d(r))||r);return n&&r&&g(e,s,r),r},u=(t,e,s)=>e.has(t)||f("Cannot "+s),_=(t,e,s)=>(u(t,e,"read from private field"),e.get(t)),x=(t,e,s)=>e.has(t)?f("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,s),E=(t,e,s,n)=>(u(t,e,"write to private field"),e.set(t,s),s),o;let a=class extends v{constructor(){super(...arguments),this.label="",this.ariaLabel="",this.icons=!1,this.selected=!1,this.disabled=!1,this.fullWidth=!1,x(this,o,!1)}updated(){this.toggleAttribute("aria-disabled",this.disabled)}async firstUpdated(){_(this,o)||(await b(()=>import("../../vendor/vendor-material.js").then(e=>e._),__vite__mapDeps([0,1]),import.meta.url),E(this,o,!0)),this.shadowRoot?.querySelector("md-switch")?.addEventListener("change",e=>{this.selected=e.target.selected,this.dispatchEvent(new CustomEvent("change",{detail:{selected:this.selected},bubbles:!0,composed:!0}))})}render(){const t=this.label.trim().length>0,e=t?h:this.ariaLabel||h,s=p`
3
+ <md-switch
4
+ ?icons=${this.icons}
5
+ ?selected=${this.selected}
6
+ ?disabled=${this.disabled}
7
+ aria-label=${e}
8
+ ></md-switch>
9
+ `;return t?p`
10
+ <label class="switch-container" ?disabled=${this.disabled}>
11
+ <span class="switch-label">${this.label}</span>
12
+ ${s}
13
+ </label>
14
+ `:s}};o=new WeakMap;a.styles=w`
15
+ :host {
16
+ display: block;
17
+ }
18
+
19
+ .switch-container {
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: flex-start;
23
+ width: auto;
24
+
25
+ /* Gap hämtas från spacing-tokens och följer density-lägen */
26
+ gap: var(--scb-switch-gap, var(--spacing-3, 8px));
27
+
28
+ cursor: pointer;
29
+
30
+ /* Basfärg för innehållet. Labeln ärver om inget annat anges. */
31
+ color: var(--md-sys-color-on-surface);
32
+ }
33
+
34
+ /* När full-width är true, kör space-between + 100% bredd */
35
+ :host([full-width]) .switch-container {
36
+ justify-content: space-between;
37
+ width: 100%;
38
+ }
39
+
40
+ .switch-label {
41
+ /* liten vertikal justering kopplad till spacing-tokens */
42
+ transform: translateY(var(--scb-switch-label-offset-y, var(--spacing-1, 2px)));
43
+
44
+ /* Typografiska tokens*/
45
+ font-family: var(--brand-font, 'Inter', sans-serif);
46
+ font-size: var(--md-sys-typescale-title-medium-size, 18px);
47
+ line-height: var(--md-sys-typescale-title-medium-line-height, 26px);
48
+ font-weight: var(--md-sys-typescale-title-large-weight, 600);
49
+ letter-spacing: var(--md-sys-typescale-title-medium-tracking, -0.3px);
50
+
51
+ /* Ärver färg från container */
52
+ color: var(--scb-switch-label-color, inherit);
53
+ }
54
+ `;i([l({type:String})],a.prototype,"label",2);i([l({type:String,reflect:!0,attribute:"aria-label"})],a.prototype,"ariaLabel",2);i([l({type:Boolean,reflect:!0})],a.prototype,"icons",2);i([l({type:Boolean,reflect:!0})],a.prototype,"selected",2);i([l({type:Boolean,reflect:!0})],a.prototype,"disabled",2);i([l({type:Boolean,reflect:!0,attribute:"full-width"})],a.prototype,"fullWidth",2);a=i([y("scb-switch")],a);export{a as ScbSwitch};
@@ -0,0 +1,7 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../../vendor/vendor-material.js","../../vendor/vendor.js"])))=>i.map(i=>d[i]);
2
+ import{_ as p}from"../../vendor/preload-helper.js";import{b as d}from"../../vendor/vendor-material.js";import{b as u,n as l,t as h}from"../../vendor/vendor.js";var b=Object.defineProperty,_=Object.getOwnPropertyDescriptor,s=(t,e,r,n)=>{for(var i=n>1?void 0:n?_(e,r):e,c=t.length-1,a;c>=0;c--)(a=t[c])&&(i=(n?a(e,r,i):a(i))||i);return n&&i&&b(e,r,i),i};let o=class extends d{constructor(){super(...arguments),this.iconOnly=!1,this.inlineIcon=!1,this._onActivate=()=>{const t=this.textContent?.trim()??"";this.dispatchEvent(new CustomEvent("activate",{detail:{label:t},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this.setAttribute("role","tab")}get icon(){return this._icon}set icon(t){const e=this._icon;e!==t&&(this._icon=t,this.requestUpdate("icon",e),this.updateIconSlot())}firstUpdated(t){super.firstUpdated(t),this.addEventListener("click",this._onActivate),this._icon&&this.updateIconSlot()}updated(){if(super.updated(),this.setAttribute("aria-selected",this.active?"true":"false"),this.iconOnly&&!this.hasAttribute("aria-label")){const t=this.textContent?.trim()??"";t&&this.setAttribute("aria-label",t)}}async ensureMdIconLoaded(){const t=globalThis;t.__mdIconLoaded||(await p(()=>import("../../vendor/vendor-material.js").then(e=>e.i),__vite__mapDeps([0,1]),import.meta.url),t.__mdIconLoaded=!0)}async updateIconSlot(){const t=this.querySelector('md-icon[slot="icon"]');if(!this._icon){t?.remove();return}if(await this.ensureMdIconLoaded(),t)t.textContent=this._icon;else{const e=document.createElement("md-icon");e.setAttribute("slot","icon"),e.textContent=this._icon,this.appendChild(e)}}};o.styles=[...d.styles,u`
3
+ /* Icon-only: dölj textslot */
4
+ :host([icon-only]) slot:not([name='icon']) {
5
+ display: none;
6
+ }
7
+ `];s([l({type:String})],o.prototype,"icon",1);s([l({type:Boolean,reflect:!0,attribute:"icon-only"})],o.prototype,"iconOnly",2);s([l({type:Boolean,reflect:!0,attribute:"inline-icon"})],o.prototype,"inlineIcon",2);o=s([h("scb-primary-tab")],o);
@@ -0,0 +1,7 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../../vendor/vendor-material.js","../../vendor/vendor.js"])))=>i.map(i=>d[i]);
2
+ import{_ as h}from"../../vendor/preload-helper.js";import{a as l}from"../../vendor/vendor-material.js";import{b as u,n as d,t as p}from"../../vendor/vendor.js";var b=Object.defineProperty,_=Object.getOwnPropertyDescriptor,c=(t,e,s,n)=>{for(var i=n>1?void 0:n?_(e,s):e,r=t.length-1,a;r>=0;r--)(a=t[r])&&(i=(n?a(e,s,i):a(i))||i);return n&&i&&b(e,s,i),i};let o=class extends l{constructor(){super(...arguments),this.iconOnly=!1,this._onActivate=()=>{const t=this.textContent?.trim()??"";this.dispatchEvent(new CustomEvent("activate",{detail:{label:t},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this.setAttribute("role","tab")}get icon(){return this._icon}set icon(t){const e=this._icon;e!==t&&(this._icon=t,this.requestUpdate("icon",e),this.updateIconSlot())}firstUpdated(t){if(super.firstUpdated(t),this.iconOnly&&!this.hasAttribute("aria-label")){const e=this.textContent?.trim()??"";e&&this.setAttribute("aria-label",e)}this.addEventListener("click",this._onActivate),this._icon&&this.updateIconSlot()}updated(){if(super.updated(),this.iconOnly&&!this.hasAttribute("aria-label")){const t=this.textContent?.trim()??"";t&&this.setAttribute("aria-label",t)}}async ensureMdIconLoaded(){const t=globalThis;t.__mdIconLoaded||(await h(()=>import("../../vendor/vendor-material.js").then(e=>e.i),__vite__mapDeps([0,1]),import.meta.url),t.__mdIconLoaded=!0)}async updateIconSlot(){const t=this.querySelector('md-icon[slot="icon"]');if(!this._icon){t?.remove();return}if(await this.ensureMdIconLoaded(),t)t.textContent=this._icon;else{const e=document.createElement("md-icon");e.setAttribute("slot","icon"),e.textContent=this._icon,this.appendChild(e)}}};o.styles=[...l.styles,u`
3
+ /* Icon-only: göm all text utom slot="icon" */
4
+ :host([icon-only]) slot:not([name='icon']) {
5
+ display: none;
6
+ }
7
+ `];c([d({type:String})],o.prototype,"icon",1);c([d({type:Boolean,reflect:!0,attribute:"icon-only"})],o.prototype,"iconOnly",2);o=c([p("scb-secondary-tab")],o);
@@ -0,0 +1,23 @@
1
+ import{M as l}from"../../vendor/vendor-material.js";import{b as d,n as m,t as b}from"../../vendor/vendor.js";import"./scb-primary-tab.js";import"./scb-secondary-tab.js";import"../../vendor/preload-helper.js";var p=Object.defineProperty,v=Object.getOwnPropertyDescriptor,n=(r,t,s,e)=>{for(var a=e>1?void 0:e?v(t,s):t,i=r.length-1,c;i>=0;i--)(c=r[i])&&(a=(e?c(t,s,a):c(a))||a);return e&&a&&p(t,s,a),a};let o=class extends l{constructor(){super(...arguments),this.ariaLabel="",this._isDispatching=!1,this._onChange=r=>{if(!r.composed&&!this._isDispatching){r.stopPropagation(),this._isDispatching=!0;const t=r.target.activeTabIndex;this.dispatchEvent(new CustomEvent("change",{detail:{activeTabIndex:t},bubbles:!0,composed:!0})),this._isDispatching=!1}}}connectedCallback(){super.connectedCallback(),this.setAttribute("role","tablist")}firstUpdated(r){super.firstUpdated(r),this.addEventListener("change",this._onChange)}};o.styles=[...l.styles,d`
2
+ :host {
3
+ /*Containerfärg */
4
+ --md-primary-tab-container-color: var(--md-sys-color-surface);
5
+ --md-secondary-tab-container-color: var(--md-sys-color-surface);
6
+
7
+ /* Text- och ikonfärger */
8
+ --md-primary-tab-label-text-color: var(--md-sys-color-on-surface-variant);
9
+ --md-secondary-tab-label-text-color: var(--md-sys-color-on-surface-variant);
10
+ --md-primary-tab-active-label-text-color: var(--md-sys-color-on-surface);
11
+ --md-secondary-tab-active-label-text-color: var(--md-sys-color-on-surface);
12
+
13
+ /* Indikator och divider */
14
+ --md-primary-tab-active-indicator-color: var(--md-sys-color-primary);
15
+ --md-primary-tab-divider-color: var(--md-sys-color-outline-variant);
16
+ --md-secondary-tab-divider-color: var(--md-sys-color-outline-variant);
17
+
18
+ /* State layers (hover/press) */
19
+ --md-primary-tab-hover-state-layer-color: var(--md-sys-color-on-surface);
20
+ --md-secondary-tab-hover-state-layer-color: var(--md-sys-color-on-surface);
21
+ }
22
+
23
+ `];n([m({type:String,reflect:!0,attribute:"aria-label"})],o.prototype,"ariaLabel",2);o=n([b("scb-tabs")],o);
@@ -0,0 +1,135 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../../vendor/vendor-material.js","../../vendor/vendor.js"])))=>i.map(i=>d[i]);
2
+ import{_ as c}from"../../vendor/preload-helper.js";import{i as u,x as l,b as h,n as s,t as b}from"../../vendor/vendor.js";var f=Object.defineProperty,x=Object.getOwnPropertyDescriptor,i=(e,t,o,a)=>{for(var n=a>1?void 0:a?x(t,o):t,d=e.length-1,p;d>=0;d--)(p=e[d])&&(n=(a?p(t,o,n):p(n))||n);return a&&n&&f(t,o,n),n};let r=class extends u{constructor(){super(...arguments),this.type="text",this.label="",this.supportingText="",this.errorText="",this.leadingIcon="",this.name="",this.pattern="",this.value="",this.underLabel="",this.error=!1,this.disabled=!1,this.required=!1,this._form=null,this._formSubmitHandler=null,this._formResetHandler=null,this._initialValue="",this._inputId=""}render(){const e=this.leadingIcon?l`<md-icon class="scb-textfield-icon">${this.leadingIcon}</md-icon>`:null,t=this.error?l`<md-icon class="scb-textfield-error-icon" aria-hidden="true">error</md-icon>`:null;this.underLabel=this.error?this.errorText||"Ogiltig inmatning.":this.supportingText,this.value=this.value||"";const o=this.underLabel?`${this._inputId}-supporting-text`:void 0;return this.type==="textarea"?l`
3
+ <label class="scb-textfield-label" for="${this._inputId}">${this.label}</label>
4
+ <span
5
+ class="scb-textfield-supporting-text"
6
+ id="${this.underLabel?`${this._inputId}-supporting-text`:""}"
7
+ >${this.underLabel}</span>
8
+ <div class="scb-textfield-wrapper">
9
+ <textarea
10
+ class="scb-textfield"
11
+ ?disabled=${this.disabled}
12
+ name="${this.name}"
13
+ id="${this._inputId}"
14
+ ?required=${this.required}
15
+ aria-invalid=${this.error?"true":"false"}
16
+ aria-describedby=${o}
17
+ >${this.value}</textarea>
18
+ </div>
19
+ `:l`
20
+ <label class="scb-textfield-label" for="${this._inputId}">${this.label}</label>
21
+ <span
22
+ class="scb-textfield-supporting-text"
23
+ id="${this.underLabel?`${this._inputId}-supporting-text`:""}"
24
+ >${this.underLabel}</span>
25
+ <div class="scb-textfield-wrapper">
26
+ ${e}
27
+ <input
28
+ class="scb-textfield${this.error?" has-error-icon":""}"
29
+ .value=${this.value}
30
+ type="${this.type}"
31
+ name="${this.name}"
32
+ id="${this._inputId}"
33
+ ?disabled=${this.disabled}
34
+ ?required=${this.required}
35
+ aria-invalid=${this.error?"true":"false"}
36
+ aria-describedby=${o}
37
+ />
38
+ ${t}
39
+ </div>
40
+ `}firstUpdated(e){super.firstUpdated(e),this._initialValue=this.value,(this.leadingIcon||this.error)&&this.__ensureMdIconLoaded();const t=this.shadowRoot?.querySelector(".scb-textfield");t&&(t.addEventListener("input",o=>{const a=t;if(this.value=a.value,this.pattern){const n=new RegExp(this.pattern);this.error=!n.test(this.value)}this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent("onValueChanged",{detail:{value:this.value},bubbles:!0,composed:!0}))}),t.addEventListener("change",o=>{this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0}))}),t.addEventListener("select",o=>{this.dispatchEvent(new Event("select",{bubbles:!0,composed:!0}))}))}updated(e){super.updated(e),(e.has("leadingIcon")||e.has("error"))&&(this.leadingIcon&&this.leadingIcon.trim()||this.error)&&this.__ensureMdIconLoaded(),this.toggleAttribute("aria-disabled",this.disabled)}connectedCallback(){super.connectedCallback(),this._inputId=this.id||`scb-textfield-${Math.random().toString(36).substr(2,9)}`,this._formSubmitHandler=e=>{this.reportValidity()||(e.preventDefault(),e.stopPropagation())},this._form=this.closest("form"),this._form&&(this._form.addEventListener("submit",this._formSubmitHandler,!0),this._formResetHandler=()=>{this.value=this._initialValue;const e=this.shadowRoot?.querySelector(".scb-textfield");e&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&(e.value=this._initialValue),this.error=!1},this._form.addEventListener("reset",this._formResetHandler,!0))}disconnectedCallback(){super.disconnectedCallback(),this._form&&this._formSubmitHandler&&(this._form.removeEventListener("submit",this._formSubmitHandler,!0),this._formResetHandler&&this._form.removeEventListener("reset",this._formResetHandler,!0))}reportValidity(){const e=this.shadowRoot?.querySelector(".scb-textfield");if(e&&(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)){this.required&&!e.value?e.setCustomValidity(this.errorText||"Ogiltig inmatning."):e.setCustomValidity("");const t=e.reportValidity();return this.error=!t,t||(this.errorText=this.errorText||e.validationMessage||"Ogiltig inmatning."),t}return!0}async __ensureMdIconLoaded(){window.__scb_md_icon_loaded||(await c(()=>import("../../vendor/vendor-material.js").then(e=>e.i),__vite__mapDeps([0,1]),import.meta.url),window.__scb_md_icon_loaded=!0)}};r.styles=[h`
41
+ :host {
42
+ display: flex;
43
+ flex-direction: column;
44
+ max-width: 280px;
45
+ /* Följ aktuellt tema (light/dark) via tokens */
46
+ color: var(--md-sys-color-on-surface);
47
+ }
48
+ :host([error]) .scb-textfield-supporting-text {
49
+ color: var(--md-sys-color-error);
50
+ }
51
+ :host([error]) .scb-textfield {
52
+ border-color: var(--md-sys-color-error);
53
+ }
54
+ :host([error]) .scb-textfield:focus-visible {
55
+ border-color: var(--md-sys-color-error);
56
+ box-shadow: inset 0 0 0 2px var(--md-sys-color-error);
57
+ }
58
+ :host([disabled]) {
59
+ opacity: 0.38;
60
+ cursor: default;
61
+ }
62
+ .scb-textfield-label {
63
+ font-size: 16px;
64
+ line-height: 20px;
65
+ font-weight: 600;
66
+ }
67
+ .scb-textfield-supporting-text {
68
+ font-size: 16px;
69
+ line-height: 24px;
70
+ margin-bottom: 8px;
71
+ color: var(--md-sys-color-on-surface-variant);
72
+ }
73
+ .scb-textfield {
74
+ padding: 4px 16px;
75
+ min-height: 56px;
76
+ border: 1px solid var(--md-sys-color-outline);
77
+ border-radius: 8px;
78
+ font-size: var(--md-sys-typescale-body-large-size, 16px);
79
+ font-family: var(--brand-font);
80
+ line-height: 24px;
81
+ width: 100%;
82
+ box-sizing: border-box;
83
+ }
84
+ md-icon + .scb-textfield {
85
+ padding-left: 48px; /* Extra padding for search icon */
86
+ }
87
+ .scb-textfield-icon {
88
+ position: absolute;
89
+ left: 12px;
90
+ top: 50%;
91
+ transform: translateY(-50%);
92
+ pointer-events: none;
93
+ font-size: 24px;
94
+ }
95
+ .scb-textfield:focus-visible {
96
+ /* Remove outline */
97
+ outline: none;
98
+ /* Add a thicker border inside */
99
+ border-color: var(--md-sys-color-primary);
100
+ box-shadow: inset 0 0 0 2px var(--md-sys-color-primary);
101
+ border: 1px solid var(--md-sys-color-primary);
102
+ }
103
+ .scb-textfield-wrapper {
104
+ position: relative;
105
+ width: 100%;
106
+ }
107
+ input::-webkit-search-cancel-button {
108
+ appearance: none;
109
+ height: 24px;
110
+ width: 24px;
111
+ background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="black" stroke-width="2" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10" stroke="black" stroke-width="2"/><line x1="15" y1="9" x2="9" y2="15" stroke="black" stroke-width="2"/><line x1="9" y1="9" x2="15" y2="15" stroke="black" stroke-width="2"/></svg>') no-repeat center center;
112
+ background-size: 22px 22px;
113
+ cursor: pointer;
114
+ }
115
+ input::-webkit-search-cancel-button,
116
+ input::-webkit-search-decoration,
117
+ input::-webkit-search-results-button,
118
+ input::-webkit-search-results-decoration,
119
+ input::-webkit-clear-button {
120
+ filter: brightness(0) saturate(100%) invert(20%) sepia(18%) saturate(2674%) hue-rotate(196deg) brightness(91%) contrast(120%);
121
+ /* This filter closely matches #0f0865. */
122
+ }
123
+ .scb-textfield-error-icon {
124
+ position: absolute;
125
+ right: 12px;
126
+ top: 50%;
127
+ transform: translateY(-50%);
128
+ color: var(--md-sys-color-error);
129
+ font-size: 24px;
130
+ pointer-events: none;
131
+ }
132
+ .scb-textfield.has-error-icon {
133
+ padding-right: 44px; /* Adjust as needed for icon size and spacing */
134
+ }
135
+ `];i([s({type:String,reflect:!0})],r.prototype,"type",2);i([s({type:String})],r.prototype,"label",2);i([s({type:String,attribute:"supporting-text"})],r.prototype,"supportingText",2);i([s({type:String,attribute:"error-text"})],r.prototype,"errorText",2);i([s({type:String,attribute:"leading-icon"})],r.prototype,"leadingIcon",2);i([s({type:String})],r.prototype,"name",2);i([s({type:String})],r.prototype,"pattern",2);i([s({type:String,attribute:"value"})],r.prototype,"value",2);i([s({type:String})],r.prototype,"underLabel",2);i([s({type:Boolean,reflect:!0})],r.prototype,"error",2);i([s({type:Boolean,reflect:!0})],r.prototype,"disabled",2);i([s({type:Boolean,reflect:!0})],r.prototype,"required",2);r=i([b("scb-textfield")],r);export{r as ScbTextField2};