@popovandrii/ui-elements 0.2.0 → 0.2.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.
package/README.md CHANGED
@@ -47,7 +47,8 @@ new Button();
47
47
  Add the matching markup (see each component's docs for full examples):
48
48
 
49
49
  ```html
50
- <div class="UIsp" data-step="0" data-min="0" data-max="10" role="spinbutton" tabindex="0" aria-label="Numeric input">
50
+ <!-- data-decimals = number of decimal places to display (0 = integers) -->
51
+ <div class="UIsp" data-decimals="0" data-min="0" data-max="10" role="spinbutton" tabindex="0" aria-label="Numeric input">
51
52
  <button class="UIsp__btn" type="button" aria-label="Decrease value">−</button>
52
53
  <input class="UIsp__input" id="qty" type="text" value="0" inputmode="decimal">
53
54
  <button class="UIsp__btn" type="button" aria-label="Increase value">+</button>
@@ -383,9 +384,7 @@ git fetch origin
383
384
  git tag -a v0.2.0 origin/main -m "Release 0.2.0"
384
385
  git push origin v0.2.0
385
386
 
386
- # 4. Publish the build to npm (dist is git-ignored — build first)
387
- npm run build
388
- npm publish --access public
387
+ # 4. Build and publish to npm see "Publishing" above
389
388
  ```
390
389
 
391
390
  On GitLab, create the release from **Deploy → Releases → New release**, pick the
package/dist/Button.d.ts CHANGED
@@ -11,11 +11,11 @@ export declare class Button {
11
11
  private selectors;
12
12
  private buttons;
13
13
  private abortController;
14
- private dbug;
14
+ private debug;
15
15
  private root;
16
16
  private observer;
17
17
  private rescanTimer;
18
- constructor(selectors?: Partial<SelectorMap>, dbug?: boolean, options?: InitOptions);
18
+ constructor(selectors?: Partial<SelectorMap>, debug?: boolean, options?: InitOptions);
19
19
  /** Watch the root for added/removed nodes and re-scan (debounced). */
20
20
  private observe;
21
21
  setValue(el: HTMLElement, value: string, label?: string): void;
@@ -10,21 +10,21 @@ interface InitOptions {
10
10
  observe?: boolean;
11
11
  }
12
12
  export declare class ButtonGroup {
13
- #private;
14
13
  private selectors;
15
14
  private main;
16
15
  private abortController;
17
- private dbug;
16
+ private debug;
18
17
  private root;
19
18
  private observer;
20
19
  private rescanTimer;
21
- constructor(selectors?: Partial<SelectorMap>, dbug?: boolean, options?: InitOptions);
20
+ constructor(selectors?: Partial<SelectorMap>, debug?: boolean, options?: InitOptions);
22
21
  /** Watch the root for added/removed nodes and re-scan (debounced). */
23
22
  private observe;
24
23
  destroy(): void;
25
24
  setValue(el: HTMLElement, value: string): void;
26
25
  /** Bind every not-yet-bound `.UIbg`. Safe to call repeatedly (SPA re-render). */
27
26
  scan(): void;
28
- private costomEvent;
27
+ private ripple;
28
+ private customEvent;
29
29
  }
30
30
  export {};
package/dist/Select.d.ts CHANGED
@@ -20,17 +20,20 @@ export declare class Select {
20
20
  private main;
21
21
  private itemArrowInitialized;
22
22
  private abortController;
23
- private dbug;
23
+ private globalAbortController;
24
+ private debug;
24
25
  private root;
25
26
  private observer;
26
27
  private rescanTimer;
27
28
  private selectMap;
28
- constructor(selectors?: Partial<SelectorMap>, dbug?: boolean, options?: InitOptions);
29
+ constructor(selectors?: Partial<SelectorMap>, debug?: boolean, options?: InitOptions);
29
30
  /** Watch the root for added/removed nodes and re-scan (debounced). */
30
31
  private observe;
31
32
  private filterExcluded;
32
33
  private filterSearch;
33
34
  destroy(): void;
35
+ /** Full teardown: destroy() plus the lifetime-scoped global listener. */
36
+ dispose(): void;
34
37
  private disableEl;
35
38
  /**
36
39
  *
package/dist/SpinBox.d.ts CHANGED
@@ -14,11 +14,11 @@ export declare class SpinBox {
14
14
  private selectors;
15
15
  private spinBoxes;
16
16
  private abortController;
17
- private dbug;
17
+ private debug;
18
18
  private root;
19
19
  private observer;
20
20
  private rescanTimer;
21
- constructor(selectors?: Partial<SelectorMap>, dbug?: boolean, options?: InitOptions);
21
+ constructor(selectors?: Partial<SelectorMap>, debug?: boolean, options?: InitOptions);
22
22
  /** Watch the root for added/removed nodes and re-scan (debounced). */
23
23
  private observe;
24
24
  private state;
@@ -29,6 +29,6 @@ export declare class SpinBox {
29
29
  /** Bind every not-yet-bound `.UIsp`. Safe to call repeatedly (SPA re-render). */
30
30
  scan(): void;
31
31
  private ripple;
32
- private costomEvent;
32
+ private customEvent;
33
33
  }
34
34
  export {};
package/dist/Switch.d.ts CHANGED
@@ -12,11 +12,11 @@ export declare class Switch {
12
12
  private selectors;
13
13
  private main;
14
14
  private abortController;
15
- private dbug;
15
+ private debug;
16
16
  private root;
17
17
  private observer;
18
18
  private rescanTimer;
19
- constructor(selectors?: Partial<SelectorMap>, dbug?: boolean, options?: InitOptions);
19
+ constructor(selectors?: Partial<SelectorMap>, debug?: boolean, options?: InitOptions);
20
20
  /** Watch the root for added/removed nodes and re-scan (debounced). */
21
21
  private observe;
22
22
  destroy(): void;
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=class{selectors;spinBoxes=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIsp`,btn:`UIsp__btn`,input:`UIsp__input`,disabledBtn:`disabled`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}state=(e,t,n,r=0,i=0)=>{e==r||e<r?(t.classList.add(this.selectors.disabledBtn),t.disabled=!0):(t.classList.remove(this.selectors.disabledBtn),t.disabled=!1),i!==0&&(e==i||e>i?(n.classList.add(this.selectors.disabledBtn),n.disabled=!0):(n.classList.remove(this.selectors.disabledBtn),n.disabled=!1))};destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.spinBoxes?.forEach(e=>delete e.dataset.uispBound),this.spinBoxes=null,this.abortController=new AbortController}disableEl(e){let t=e.querySelector(`.${this.selectors.input}`),n=e.querySelectorAll(`.${this.selectors.btn}`);t&&(t.disabled=!0),n.forEach(e=>{e.classList.add(this.selectors.disabledBtn),e.disabled=!0}),e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=e.querySelector(`.${this.selectors.input}`);if(!n){this.dbug&&console.warn(`UISpinBox: input not found`);return}n.value=String(t),n.dispatchEvent(new Event(`change`)),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIsp--flash`),e.offsetWidth,e.classList.add(`UIsp--flash`),n.addEventListener(`animationend`,()=>e.classList.remove(`UIsp--flash`),{once:!0}))}getValidDataNumber=(e,t)=>{let n=e.getAttribute(`data-${t}`);return n===null||n.trim()===``||isNaN(Number(n))?0:Number(n)};scan(){this.spinBoxes=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.spinBoxes.forEach(t=>{if(t.dataset.uispBound)return;t.dataset.uispBound=`1`;let n,r=t.querySelectorAll(`.${this.selectors.btn}`),i=t.querySelector(`.${this.selectors.input}`);this.dbug&&(r||console.log(`Buttons (${this.selectors.btn}) not found in container`),i||console.log(`Input (${this.selectors.input}) not found in container`));let a=r[0],o=r[1];i.disabled=!1,[a,o].forEach(e=>{e.classList.remove(this.selectors.disabledBtn),e.disabled=!1}),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`);let s=this.getValidDataNumber(t,`step`),c=this.getValidDataNumber(t,`min`),l=this.getValidDataNumber(t,`max`);if(t.hasAttribute(`data-disabled`)){Number(i.value)<=c&&(i.value=c.toFixed(s)),l===0?i.value=Number(i.value).toFixed(s):Number(i.value)>=l&&(i.value=l.toFixed(s)),this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}let u=e=>{t.setAttribute(`aria-valuenow`,String(e)),t.setAttribute(`aria-valuetext`,`${e} items`)};Number(i.value)<=c&&(i.value=c.toFixed(s)),l===0?i.value=Number(i.value).toFixed(s):(Number(i.value)>=l&&(i.value=l.toFixed(s)),l&&t.setAttribute(`aria-valuemax`,l.toFixed(s))),c&&t.setAttribute(`aria-valuemin`,c.toFixed(s)),this.state(Number(i.value),a,o,c,l),u(i.value);let d=null,f=(e,t=1)=>{i.value=String(Math.abs(Number(i.value)));let n=parseFloat(i.value)||0;return n+=e*t/10**s,e===1&&l!==0&&n>l&&(n=l),e===-1&&n<c&&(n=c),i.value=n.toFixed(s),this.state(Number(i.value),a,o,c,l),u(i.value),i.value},p=(e,t=150)=>{d===null&&(d=window.setInterval(e,t))},m=()=>{d!==null&&(clearInterval(d),d=null)};o.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;p(()=>f(1,t))},{signal:e}),o.addEventListener(`touchstart`,()=>p(()=>f(1)),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{o.addEventListener(t,m,{signal:e})}),o.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;d===null&&(n=f(1,t),this.ripple(o),this.costomEvent(i,n))},{signal:e}),a.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;d===null&&(n=f(-1,t),this.ripple(a),this.costomEvent(i,n))},{signal:e}),a.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;p(()=>f(-1,t),100)},{signal:e}),a.addEventListener(`touchstart`,()=>p(()=>f(-1),100),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{a.addEventListener(t,m,{signal:e})}),i.addEventListener(`keydown`,e=>{let t=e.key,n=e.shiftKey?5:1;if([`Backspace`,`Delete`,`ArrowLeft`,`ArrowRight`,`Tab`,`Enter`,`Home`,`End`].includes(t)||(e.ctrlKey||e.metaKey)&&[`a`,`c`,`v`,`x`].includes(t.toLowerCase()))return;if([`e`,`+`,`-`].includes(t)){e.preventDefault();return}if(t===`ArrowUp`||t===`ArrowDown`){e.preventDefault(),f(t===`ArrowUp`?1:-1,n);return}let r=t===`,`?`.`:t,a=/^[0-9]$/.test(r),o=r===`.`,c=i.value.includes(`.`);(s===0&&!a||s>0&&!(a||o)||o&&c)&&e.preventDefault()},{signal:e}),i.addEventListener(`keyup`,e=>{(e.key===`ArrowUp`||e.key===`ArrowDown`)&&this.costomEvent(i,i.value)},{signal:e}),i.addEventListener(`change`,()=>{Number(i.value)<c&&(i.value=c.toFixed(s)),Number(i.value)>l&&l!==0?i.value=l.toFixed(s):i.value=Number(i.value).toFixed(s),this.state(Number(i.value),a,o,c,l),this.costomEvent(i,i.value)},{signal:e})})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}costomEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.log(`CostomEvent: data.detail `,n.detail),e.dispatchEvent(new CustomEvent(`ui-spinbox-change`,n))}},t=class{selectors;main=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIsw`,label:`UIsw-label`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiswBound),this.main=null,this.abortController=new AbortController}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiswBound)return;t.dataset.uiswBound=`1`;let n=t.querySelector(`.${this.selectors.label}`),r=t.querySelector(`input`);n&&n.id&&t.setAttribute(`aria-labelledby`,n.id),t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(r?.disabled??!1));let i=t.getAttribute(`data-originally-disabled`)===`true`;r&&(r.disabled=!1),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),i&&(r&&(r.disabled=!0),t.setAttribute(`tabindex`,`-1`),t.setAttribute(`aria-disabled`,`true`),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e})),r&&(r.checked?t.setAttribute(`aria-checked`,`true`):t.setAttribute(`aria-checked`,`false`),r.addEventListener(`change`,()=>{t.setAttribute(`aria-checked`,String(r.checked)),this.customEvent(r,String(r.checked))},{signal:e}),t.addEventListener(`click`,e=>{if(e.target.tagName===`INPUT`)return;let n=e.target.closest(`label`);n||(r.checked=!r.checked),n||r.dispatchEvent(new Event(`change`));let i=t.querySelector(`.UIsw-slider`);i&&this.ripple(i)},{signal:e}),t.addEventListener(`keydown`,e=>{let n=t.querySelector(`input`);e.key===`ArrowRight`?(r.checked=!0,t.setAttribute(`aria-checked`,String(r.checked)),e.preventDefault(),this.customEvent(n,`true`)):e.key===`ArrowLeft`&&(r.checked=!1,t.setAttribute(`aria-checked`,String(r.checked)),e.preventDefault(),this.customEvent(n,`false`))},{signal:e}))})}setValue(e,t){this.main?.forEach(n=>{let r=n.querySelector(`input#${e}`);if(r){r.checked=t,this.dbug&&console.log(`SetValue:`,r.checked),n.setAttribute(`aria-checked`,String(t)),this.customEvent(r,String(t));let e=n.querySelector(`.UIsw-slider`);e&&!n.closest(`.ui-no-flash`)&&(n.classList.remove(`UIsw--flash`),n.offsetWidth,n.classList.add(`UIsw--flash`),e.addEventListener(`animationend`,()=>n.classList.remove(`UIsw--flash`),{once:!0}))}})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-switch-change`,n))}},n=class e{selectors;main=null;itemArrowInitialized=new WeakSet;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;selectMap=new Map;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={idPrefix:`UI-option-`,main:`UIselect`,selected:`UIselect-selected`,arrow:`UIselect-arrow`,optionsList:`UIselect-options`,search:`UIselect-options__search`,items:`UIselect-options__items`,flash:`UIselect--flash`,excludedItems:[`divider`,`test`]};this.selectors={...r,...e},this.scan(),this.initGlobalListener(this.selectors),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}filterExcluded(e,t){return Array.from(e).filter(e=>!t.some(t=>typeof t==`string`?e.classList.contains(t)||e.id===t:e===t))}filterSearch(e,t){let n=t.trim().toLowerCase();return e.filter(e=>{let t=e.dataset.value?.toLowerCase()||``,r=e.textContent?.toLowerCase()||``;return t.includes(n)||r.includes(n)})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),e.closeAll(this.selectors),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiselBound),this.selectMap.clear(),this.itemArrowInitialized=new WeakSet,this.main=null,this.abortController=new AbortController}disableEl(e){e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=this.selectMap.get(e);if(!n){this.dbug&&console.warn(`UISelect: element not registered`);return}let{input:r,selected:i}=n,a=e.querySelector(`.${this.selectors.optionsList}`);if(!a)return;let o=Array.from(a.querySelectorAll(`.${this.selectors.items} ul li`)),s=this.filterExcluded(o,this.selectors.excludedItems),c=s.find(e=>String(e.dataset.value)===String(t));if(!c){this.dbug&&console.warn(`UISelect: value "${t}" not found`);return}s.forEach(e=>e.removeAttribute(`aria-selected`)),c.setAttribute(`aria-selected`,`true`),i.textContent=c.textContent??``,r.value=String(t),r.setAttribute(`value`,String(t)),e.setAttribute(`aria-activedescendant`,c.id||`${this.selectors.idPrefix}${s.indexOf(c)}`),this.customEvent(e,String(t)),e.closest(`.ui-no-flash`)||(e.classList.remove(this.selectors.flash),e.offsetWidth,e.classList.add(this.selectors.flash),e.addEventListener(`animationend`,()=>e.classList.remove(this.selectors.flash),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiselBound)return;let n=t.querySelector(`.${this.selectors.main} input[type='hidden']`);try{if(!n)throw Error(`<input type="hidden" name="YouUniqueId">`)}catch(e){return console.warn(`Not found:`,e.message)}t.dataset.uiselBound=`1`;let r=t.querySelector(`.${this.selectors.selected}`),i=t.querySelector(`.${this.selectors.arrow}`),a=t.querySelector(`.${this.selectors.optionsList}`),o=t.querySelector(`.${this.selectors.search} input`);if(t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),t.hasAttribute(`data-disabled`)){this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}this.selectMap.set(t,{input:n,selected:r}),i&&i.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),r.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),t.addEventListener(`click`,()=>{this.itemsPosition(a)},{signal:e});let s=a.querySelectorAll(`.${this.selectors.items} ul li`),c=this.filterExcluded(s,this.selectors.excludedItems),l=t.querySelector(`[aria-selected='true']`);l&&this.defaultSelect(t,l,r,n);var u=[];o&&o.addEventListener(`input`,i=>{let o=i.target.value.trim();r&&(u=this.filterSearch(c,o),o?(s.forEach(e=>e.remove()),u.forEach(e=>{a.querySelector(`.${this.selectors.optionsList} ul`)?.appendChild(e)})):s.forEach(e=>{a.querySelector(`.${this.selectors.optionsList} ul`)?.appendChild(e)}),this.itemArrow(t,a,r,n,e))},{signal:e}),this.itemArrow(t,a,r,n,e),this.items(t,a,c,r,n,e)},{signal:e})}itemArrow(e,t,n,r,i){if(this.itemArrowInitialized.has(e))return;this.itemArrowInitialized.add(e);let a=-1,o=n.textContent?n.textContent:``,s=e.querySelector(`.${this.selectors.search} input`);e.addEventListener(`keydown`,i=>{s&&s.focus();let c=Array.from(t.querySelectorAll(`.${this.selectors.optionsList} ul li`)),l=this.filterExcluded(c,this.selectors.excludedItems),u=l.length;if(u!==0)if(i.key===`ArrowDown`){i.preventDefault(),e.getAttribute(`aria-expanded`)===`false`&&this.toggle(e,t),a=(a+1)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let r=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,r),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`ArrowUp`){i.preventDefault(),a=(a-1+u)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let t=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,t),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`Enter`)if(i.preventDefault(),a>=0){n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let i=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,i),r.value=String(l[a].dataset.value),this.customEvent(e,r.value),this.close(e,t)}else this.toggle(e,t);else i.key===`Escape`&&(e.getAttribute(`aria-activedescendant`)||(n.textContent=o),this.close(e,t))},{signal:i})}itemsPosition(e){let t=e.querySelector(`[aria-selected="true"]`);t&&t.scrollIntoView({block:`nearest`})}items(e,t,n,r,i,a){n.forEach((o,s)=>{o.addEventListener(`click`,()=>{let a=n[s];if(a){r.textContent=a.textContent,n.forEach(e=>e.removeAttribute(`aria-selected`)),a.setAttribute(`aria-selected`,`true`);let o=a.id||`${this.selectors.idPrefix}${s}`;e.setAttribute(`aria-expanded`,`false`),e.setAttribute(`aria-activedescendant`,o),i.value=String(n[s].dataset.value),this.customEvent(e,i.value),this.close(e,t)}},{signal:a})})}defaultSelect(e,t,n,r){t&&(r.setAttribute(`value`,t.dataset.value??``),n.textContent=t.textContent??``,e.setAttribute(`aria-activedescendant`,t.id||``))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-select-change`,n))}toggle(t,n){e.closeAll(this.selectors),n.hidden?(n.hidden=!1,t.setAttribute(`aria-expanded`,`true`)):this.close(t,n)}close(e,t){t.hidden=!0,e.setAttribute(`aria-expanded`,`false`)}static closeAll(e){document.querySelectorAll(`.${e.main}`).forEach(t=>{let n=t.querySelector(`.${e.optionsList}`);n.hidden=!0,t.setAttribute(`aria-expanded`,`false`)})}initGlobalListener(t){document.addEventListener(`click`,n=>{let r=n.target;[...document.querySelectorAll(`.${t.main}`)].some(e=>e.contains(r))||e.closeAll(t)},{signal:this.abortController.signal})}},r=class{selectors;main=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIbg`,btn:`UIbg-btn`,input:`UIbg-input`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uibgBound),this.main=null,this.abortController=new AbortController}setValue(e,t){let n=e.querySelectorAll(`.${this.selectors.input}`),r=e.querySelectorAll(`.${this.selectors.btn}`),i=Array.from(n).findIndex(e=>e.value===t&&!e.disabled);if(i===-1){this.dbug&&console.warn(`UIButtonGroup: value "${t}" not found or disabled`);return}n.forEach((e,t)=>{e.checked=t===i,t===i?e.setAttribute(`checked`,``):e.removeAttribute(`checked`)}),r.forEach((e,t)=>{e.setAttribute(`aria-checked`,String(t===i)),e.setAttribute(`tabindex`,t===i?`0`:`-1`)}),this.costomEvent(n[i]);let a=r[i];a&&!e.closest(`.ui-no-flash`)&&(a.classList.remove(`UIbg--flash`),a.offsetWidth,a.classList.add(`UIbg--flash`),a.addEventListener(`animationend`,()=>a.classList.remove(`UIbg--flash`),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uibgBound)return;t.dataset.uibgBound=`1`,t.querySelectorAll(`.${this.selectors.input}`).forEach(e=>{e.hasAttribute(`data-originally-disabled`)||e.setAttribute(`data-originally-disabled`,String(e.disabled)),e.disabled=e.getAttribute(`data-originally-disabled`)===`true`}),t.removeAttribute(`aria-disabled`);let n=t.querySelector(`.${this.selectors.input}:checked`);n&&this.costomEvent(n);let r=t.querySelectorAll(`.${this.selectors.btn}`);r.forEach(t=>{t.addEventListener(`click`,()=>{r.forEach(e=>{e.setAttribute(`aria-checked`,`false`),e.setAttribute(`tabindex`,`-1`)}),t.setAttribute(`aria-checked`,`true`),t.setAttribute(`tabindex`,`0`),t.focus(),this.#e(t)},{signal:e}),t.addEventListener(`keydown`,e=>{let n=Array.from(r).indexOf(t);if(e.key===`ArrowRight`&&n++,e.key===`ArrowLeft`&&n--,n<0&&(n=r.length-1),n>=r.length&&(n=0),e.key===`Enter`){let t=i[n];t&&!t.disabled&&(i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),t.checked=!0,t.setAttribute(`checked`,``),this.costomEvent(t)),e.preventDefault();return}let a=r[n];a&&(r.forEach(e=>e.setAttribute(`tabindex`,`-1`)),a.setAttribute(`tabindex`,`0`),a.focus())},{signal:e})});let i=t.querySelectorAll(`.${this.selectors.input}`);i.forEach((t,n)=>{this.dbug&&(t.id||console.error(`Input #${n} in group has no ID!`),(!t.value||t.value===`on`)&&console.warn(`Input #${t.id} does not have a value specified (currently "${t.value}")`));let a=r[n];a&&(t.tabIndex=-1,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(t.checked)),a.setAttribute(`tabindex`,t.checked?`0`:`-1`),t.disabled?a.setAttribute(`aria-disabled`,`true`):a.removeAttribute(`aria-disabled`),t.addEventListener(`click`,()=>{i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),i[n].checked=!0,i[n].setAttribute(`checked`,``),this.costomEvent(t)},{signal:e}))});let a=Array.from(i).find(e=>e.checked&&!e.disabled)||Array.from(i).find(e=>!e.disabled);if(a){let e=t.querySelector(`label[for="${a.id}"]`);e&&e.setAttribute(`tabindex`,`0`)}})}#e(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}costomEvent(e){let t={detail:{id:e.id,value:e.value},bubbles:!0};this.dbug&&console.log(`CostomEvent:`,t.detail),e.dispatchEvent(new CustomEvent(`ui-button-group-change`,t))}},i=class{selectors;buttons=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIb`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}setValue(e,t,n){e.dataset.value=t,e.tagName===`A`&&(e.href=t),n!==void 0&&(e.textContent=n),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIb--flash`),e.offsetWidth,e.classList.add(`UIb--flash`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--flash`),{once:!0}))}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.buttons?.forEach(e=>delete e.dataset.uibBound),this.buttons=null,this.abortController=new AbortController}disableEl(e){e.tagName===`BUTTON`?e.disabled=!0:(e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`tabindex`,`-1`))}enableEl(e){e.tagName===`BUTTON`?e.disabled=!1:(e.removeAttribute(`aria-disabled`),e.setAttribute(`tabindex`,`0`))}isDisabled(e){return e.tagName===`BUTTON`?e.disabled:e.getAttribute(`aria-disabled`)===`true`}setDisabled(e,t){e.setAttribute(`data-originally-disabled`,String(t)),t?this.disableEl(e):this.enableEl(e)}scan(){this.buttons=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.buttons.forEach(t=>{t.dataset.uibBound||(t.dataset.uibBound=`1`,t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(this.isDisabled(t))),t.getAttribute(`data-originally-disabled`)===`true`?this.disableEl(t):this.enableEl(t),t.addEventListener(`click`,e=>{if(this.isDisabled(t)){e.preventDefault(),e.stopImmediatePropagation();return}t.tagName===`A`&&e.preventDefault(),this.ripple(t),this.customEvent(t,String(t.dataset.value))},{signal:e}))})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`UIb--ripple`),e.offsetWidth,e.classList.add(`UIb--ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--ripple`),{once:!0}))}customEvent(e,t){if(!t||t===`undefined`||t.trim()===``){console.warn(`Button data-value="" Not set!`);return}let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.info(`Button CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-button-change`,n))}},a=null,o=null,s=null,c=null,l=null;function u(...e){return a??=new i(...e)}function d(...e){return l??=new r(...e)}function f(...e){return o??=new n(...e)}function p(...t){return s??=new e(...t)}function m(...e){return c??=new t(...e)}function h(){a=null,o=null,s=null,c=null,l=null}exports.Button=i,exports.ButtonGroup=r,exports.Select=n,exports.SpinBox=e,exports.Switch=t,exports.getButtonGroupManager=d,exports.getButtonManager=u,exports.getSelectManager=f,exports.getSpinBoxManager=p,exports.getSwitchManager=m,exports.resetManagers=h;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=class{selectors;spinBoxes=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIsp`,btn:`UIsp__btn`,input:`UIsp__input`,disabledBtn:`disabled`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}state=(e,t,n,r=0,i=0)=>{e==r||e<r?(t.classList.add(this.selectors.disabledBtn),t.disabled=!0):(t.classList.remove(this.selectors.disabledBtn),t.disabled=!1),i!==0&&(e==i||e>i?(n.classList.add(this.selectors.disabledBtn),n.disabled=!0):(n.classList.remove(this.selectors.disabledBtn),n.disabled=!1))};destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.spinBoxes?.forEach(e=>delete e.dataset.uispBound),this.spinBoxes=null,this.abortController=new AbortController}disableEl(e){let t=e.querySelector(`.${this.selectors.input}`),n=e.querySelectorAll(`.${this.selectors.btn}`);t&&(t.disabled=!0),n.forEach(e=>{e.classList.add(this.selectors.disabledBtn),e.disabled=!0}),e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=e.querySelector(`.${this.selectors.input}`);if(!n){this.debug&&console.warn(`UISpinBox: input not found`);return}n.value=String(t),n.dispatchEvent(new Event(`change`)),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIsp--flash`),e.offsetWidth,e.classList.add(`UIsp--flash`),n.addEventListener(`animationend`,()=>e.classList.remove(`UIsp--flash`),{once:!0}))}getValidDataNumber=(e,t)=>{let n=e.getAttribute(`data-${t}`);return n===null||n.trim()===``||isNaN(Number(n))?0:Number(n)};scan(){this.spinBoxes=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.spinBoxes.forEach(t=>{if(t.dataset.uispBound)return;t.dataset.uispBound=`1`;let n,r=t.querySelectorAll(`.${this.selectors.btn}`),i=t.querySelector(`.${this.selectors.input}`);this.debug&&(r||console.log(`Buttons (${this.selectors.btn}) not found in container`),i||console.log(`Input (${this.selectors.input}) not found in container`));let a=r[0],o=r[1];i.disabled=!1,[a,o].forEach(e=>{e.classList.remove(this.selectors.disabledBtn),e.disabled=!1}),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`);let s=t.hasAttribute(`data-decimals`)?this.getValidDataNumber(t,`decimals`):this.getValidDataNumber(t,`step`),c=Math.min(Math.max(Math.trunc(s),0),100),l=this.getValidDataNumber(t,`min`),u=this.getValidDataNumber(t,`max`);if(t.hasAttribute(`data-disabled`)){Number(i.value)<=l&&(i.value=l.toFixed(c)),u===0?i.value=Number(i.value).toFixed(c):Number(i.value)>=u&&(i.value=u.toFixed(c)),this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}let d=e=>{t.setAttribute(`aria-valuenow`,String(e)),t.setAttribute(`aria-valuetext`,`${e} items`)};Number(i.value)<=l&&(i.value=l.toFixed(c)),u===0?i.value=Number(i.value).toFixed(c):(Number(i.value)>=u&&(i.value=u.toFixed(c)),u&&t.setAttribute(`aria-valuemax`,u.toFixed(c))),l&&t.setAttribute(`aria-valuemin`,l.toFixed(c)),this.state(Number(i.value),a,o,l,u),d(i.value);let f=null,p=(e,t=1)=>{i.value=String(Math.abs(Number(i.value)));let n=parseFloat(i.value)||0;return n+=e*t/10**c,e===1&&u!==0&&n>u&&(n=u),e===-1&&n<l&&(n=l),i.value=n.toFixed(c),this.state(Number(i.value),a,o,l,u),d(i.value),i.value},m=(e,t=150)=>{f===null&&(f=window.setInterval(e,t))},h=()=>{f!==null&&(clearInterval(f),f=null)};o.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;m(()=>p(1,t))},{signal:e}),o.addEventListener(`touchstart`,()=>m(()=>p(1)),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{o.addEventListener(t,h,{signal:e})}),o.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;f===null&&(n=p(1,t),this.ripple(o),this.customEvent(i,n))},{signal:e}),a.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;f===null&&(n=p(-1,t),this.ripple(a),this.customEvent(i,n))},{signal:e}),a.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;m(()=>p(-1,t),100)},{signal:e}),a.addEventListener(`touchstart`,()=>m(()=>p(-1),100),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{a.addEventListener(t,h,{signal:e})}),i.addEventListener(`keydown`,e=>{let t=e.key,n=e.shiftKey?5:1;if([`Backspace`,`Delete`,`ArrowLeft`,`ArrowRight`,`Tab`,`Enter`,`Home`,`End`].includes(t)||(e.ctrlKey||e.metaKey)&&[`a`,`c`,`v`,`x`].includes(t.toLowerCase()))return;if([`e`,`+`,`-`].includes(t)){e.preventDefault();return}if(t===`ArrowUp`||t===`ArrowDown`){e.preventDefault(),p(t===`ArrowUp`?1:-1,n);return}let r=t===`,`?`.`:t,a=/^[0-9]$/.test(r),o=r===`.`,s=i.value.includes(`.`);(c===0&&!a||c>0&&!(a||o)||o&&s)&&e.preventDefault()},{signal:e}),i.addEventListener(`keyup`,e=>{(e.key===`ArrowUp`||e.key===`ArrowDown`)&&this.customEvent(i,i.value)},{signal:e}),i.addEventListener(`change`,()=>{Number(i.value)<l&&(i.value=l.toFixed(c)),Number(i.value)>u&&u!==0?i.value=u.toFixed(c):i.value=Number(i.value).toFixed(c),this.state(Number(i.value),a,o,l,u),this.customEvent(i,i.value)},{signal:e})})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.log(`CustomEvent: data.detail `,n.detail),e.dispatchEvent(new CustomEvent(`ui-spinbox-change`,n))}},t=class{selectors;main=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIsw`,label:`UIsw-label`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiswBound),this.main=null,this.abortController=new AbortController}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiswBound)return;t.dataset.uiswBound=`1`;let n=t.querySelector(`.${this.selectors.label}`),r=t.querySelector(`input`);n&&n.id&&t.setAttribute(`aria-labelledby`,n.id),t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(r?.disabled??!1));let i=t.getAttribute(`data-originally-disabled`)===`true`;r&&(r.disabled=!1),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),i&&(r&&(r.disabled=!0),t.setAttribute(`tabindex`,`-1`),t.setAttribute(`aria-disabled`,`true`),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e})),r&&(r.checked?t.setAttribute(`aria-checked`,`true`):t.setAttribute(`aria-checked`,`false`),r.addEventListener(`change`,()=>{t.setAttribute(`aria-checked`,String(r.checked)),this.customEvent(r,String(r.checked))},{signal:e}),t.addEventListener(`click`,e=>{if(e.target.tagName===`INPUT`)return;let n=e.target.closest(`label`);n||(r.checked=!r.checked),n||r.dispatchEvent(new Event(`change`));let i=t.querySelector(`.UIsw-slider`);i&&this.ripple(i)},{signal:e}),t.addEventListener(`keydown`,e=>{if(r.disabled)return;let n=null;if(e.key===`ArrowRight`?n=!0:e.key===`ArrowLeft`&&(n=!1),n!==null&&(e.preventDefault(),r.checked!==n)){r.checked=n,r.dispatchEvent(new Event(`change`));let e=t.querySelector(`.UIsw-slider`);e&&this.ripple(e)}},{signal:e}))})}setValue(e,t){this.main?.forEach(n=>{let r=n.querySelector(`input#${e}`);if(r){r.checked=t,this.debug&&console.log(`SetValue:`,r.checked),n.setAttribute(`aria-checked`,String(t)),this.customEvent(r,String(t));let e=n.querySelector(`.UIsw-slider`);e&&!n.closest(`.ui-no-flash`)&&(n.classList.remove(`UIsw--flash`),n.offsetWidth,n.classList.add(`UIsw--flash`),e.addEventListener(`animationend`,()=>n.classList.remove(`UIsw--flash`),{once:!0}))}})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-switch-change`,n))}},n=class e{selectors;main=null;itemArrowInitialized=new WeakSet;abortController=new AbortController;globalAbortController=new AbortController;debug;root;observer=null;rescanTimer=null;selectMap=new Map;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={idPrefix:`UI-option-`,main:`UIselect`,selected:`UIselect-selected`,arrow:`UIselect-arrow`,optionsList:`UIselect-options`,search:`UIselect-options__search`,items:`UIselect-options__items`,flash:`UIselect--flash`,excludedItems:[`divider`,`test`]};this.selectors={...r,...e},this.scan(),this.initGlobalListener(this.selectors),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}filterExcluded(e,t){return Array.from(e).filter(e=>!t.some(t=>typeof t==`string`?e.classList.contains(t)||e.id===t:e===t))}filterSearch(e,t){let n=t.trim().toLowerCase();return e.filter(e=>{let t=e.dataset.value?.toLowerCase()||``,r=e.textContent?.toLowerCase()||``;return t.includes(n)||r.includes(n)})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),e.closeAll(this.selectors),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiselBound),this.selectMap.clear(),this.itemArrowInitialized=new WeakSet,this.main=null,this.abortController=new AbortController}dispose(){this.destroy(),this.globalAbortController.abort()}disableEl(e){e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=this.selectMap.get(e);if(!n){this.debug&&console.warn(`UISelect: element not registered`);return}let{input:r,selected:i}=n,a=e.querySelector(`.${this.selectors.optionsList}`);if(!a)return;let o=Array.from(a.querySelectorAll(`.${this.selectors.items} ul li`)),s=this.filterExcluded(o,this.selectors.excludedItems),c=s.find(e=>String(e.dataset.value)===String(t));if(!c){this.debug&&console.warn(`UISelect: value "${t}" not found`);return}s.forEach(e=>e.removeAttribute(`aria-selected`)),c.setAttribute(`aria-selected`,`true`),i.textContent=c.textContent??``,r.value=String(t),r.setAttribute(`value`,String(t)),e.setAttribute(`aria-activedescendant`,c.id||`${this.selectors.idPrefix}${s.indexOf(c)}`),this.customEvent(e,String(t)),e.closest(`.ui-no-flash`)||(e.classList.remove(this.selectors.flash),e.offsetWidth,e.classList.add(this.selectors.flash),e.addEventListener(`animationend`,()=>e.classList.remove(this.selectors.flash),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiselBound)return;let n=t.querySelector(`input[type='hidden']`);try{if(!n)throw Error(`<input type="hidden" name="YourUniqueId">`)}catch(e){return console.warn(`Not found:`,e.message)}t.dataset.uiselBound=`1`;let r=t.querySelector(`.${this.selectors.selected}`),i=t.querySelector(`.${this.selectors.arrow}`),a=t.querySelector(`.${this.selectors.optionsList}`),o=t.querySelector(`.${this.selectors.search} input`);if(t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),t.hasAttribute(`data-disabled`)){this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}this.selectMap.set(t,{input:n,selected:r}),i&&i.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),r.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),t.addEventListener(`click`,()=>{this.itemsPosition(a)},{signal:e});let s=a.querySelectorAll(`.${this.selectors.items} ul li`),c=this.filterExcluded(s,this.selectors.excludedItems),l=t.querySelector(`[aria-selected='true']`);l&&this.defaultSelect(t,l,r,n),o&&o.addEventListener(`input`,i=>{let o=i.target.value.trim(),l=o?new Set(this.filterSearch(c,o)):null;s.forEach(e=>{e.hidden=l?!l.has(e):!1}),this.itemArrow(t,a,r,n,e)},{signal:e}),this.itemArrow(t,a,r,n,e),this.items(t,a,c,r,n,e)})}itemArrow(e,t,n,r,i){if(this.itemArrowInitialized.has(e))return;this.itemArrowInitialized.add(e);let a=-1,o=n.textContent?n.textContent:``,s=e.querySelector(`.${this.selectors.search} input`);e.addEventListener(`keydown`,i=>{if(i.key===`Tab`){this.close(e,t);return}s&&s.focus();let c=Array.from(t.querySelectorAll(`.${this.selectors.optionsList} ul li`)),l=this.filterExcluded(c,this.selectors.excludedItems),u=l.length;if(u!==0)if(i.key===`ArrowDown`){i.preventDefault(),e.getAttribute(`aria-expanded`)===`false`&&this.toggle(e,t),a=(a+1)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let r=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,r),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`ArrowUp`){i.preventDefault(),a=(a-1+u)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let t=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,t),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`Enter`)if(i.preventDefault(),a>=0){n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let i=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,i),r.value=String(l[a].dataset.value),this.customEvent(e,r.value),this.close(e,t)}else this.toggle(e,t);else i.key===`Escape`&&(e.getAttribute(`aria-activedescendant`)||(n.textContent=o),this.close(e,t))},{signal:i})}itemsPosition(e){let t=e.querySelector(`[aria-selected="true"]`);t&&t.scrollIntoView({block:`nearest`})}items(e,t,n,r,i,a){n.forEach((o,s)=>{o.addEventListener(`click`,()=>{let a=n[s];if(a){r.textContent=a.textContent,n.forEach(e=>e.removeAttribute(`aria-selected`)),a.setAttribute(`aria-selected`,`true`);let o=a.id||`${this.selectors.idPrefix}${s}`;e.setAttribute(`aria-expanded`,`false`),e.setAttribute(`aria-activedescendant`,o),i.value=String(n[s].dataset.value),this.customEvent(e,i.value),this.close(e,t)}},{signal:a})})}defaultSelect(e,t,n,r){t&&(r.setAttribute(`value`,t.dataset.value??``),n.textContent=t.textContent??``,e.setAttribute(`aria-activedescendant`,t.id||``))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-select-change`,n))}toggle(t,n){e.closeAll(this.selectors),n.hidden?(n.hidden=!1,t.setAttribute(`aria-expanded`,`true`)):this.close(t,n)}close(e,t){t.hidden=!0,e.setAttribute(`aria-expanded`,`false`)}static closeAll(e){document.querySelectorAll(`.${e.main}`).forEach(t=>{let n=t.querySelector(`.${e.optionsList}`);n.hidden=!0,t.setAttribute(`aria-expanded`,`false`)})}initGlobalListener(t){document.addEventListener(`click`,n=>{let r=n.target;[...document.querySelectorAll(`.${t.main}`)].some(e=>e.contains(r))||e.closeAll(t)},{signal:this.globalAbortController.signal})}},r=class{selectors;main=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIbg`,btn:`UIbg-btn`,input:`UIbg-input`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uibgBound),this.main=null,this.abortController=new AbortController}setValue(e,t){let n=e.querySelectorAll(`.${this.selectors.input}`),r=e.querySelectorAll(`.${this.selectors.btn}`),i=Array.from(n).findIndex(e=>e.value===t&&!e.disabled);if(i===-1){this.debug&&console.warn(`UIButtonGroup: value "${t}" not found or disabled`);return}n.forEach((e,t)=>{e.checked=t===i,t===i?e.setAttribute(`checked`,``):e.removeAttribute(`checked`)}),r.forEach((e,t)=>{e.setAttribute(`aria-checked`,String(t===i)),e.setAttribute(`tabindex`,t===i?`0`:`-1`)}),this.customEvent(n[i]);let a=r[i];a&&!e.closest(`.ui-no-flash`)&&(a.classList.remove(`UIbg--flash`),a.offsetWidth,a.classList.add(`UIbg--flash`),a.addEventListener(`animationend`,()=>a.classList.remove(`UIbg--flash`),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uibgBound)return;t.dataset.uibgBound=`1`,t.querySelectorAll(`.${this.selectors.input}`).forEach(e=>{e.hasAttribute(`data-originally-disabled`)||e.setAttribute(`data-originally-disabled`,String(e.disabled)),e.disabled=e.getAttribute(`data-originally-disabled`)===`true`}),t.removeAttribute(`aria-disabled`);let n=t.querySelector(`.${this.selectors.input}:checked`);n&&this.customEvent(n);let r=t.querySelectorAll(`.${this.selectors.btn}`);r.forEach(t=>{t.addEventListener(`click`,()=>{r.forEach(e=>{e.setAttribute(`aria-checked`,`false`),e.setAttribute(`tabindex`,`-1`)}),t.setAttribute(`aria-checked`,`true`),t.setAttribute(`tabindex`,`0`),t.focus(),this.ripple(t)},{signal:e}),t.addEventListener(`keydown`,e=>{let n=Array.from(r).indexOf(t);if(e.key===`ArrowRight`&&n++,e.key===`ArrowLeft`&&n--,n<0&&(n=r.length-1),n>=r.length&&(n=0),e.key===`Enter`){let t=i[n];t&&!t.disabled&&(i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),t.checked=!0,t.setAttribute(`checked`,``),this.customEvent(t)),e.preventDefault();return}let a=r[n];a&&(r.forEach(e=>e.setAttribute(`tabindex`,`-1`)),a.setAttribute(`tabindex`,`0`),a.focus())},{signal:e})});let i=t.querySelectorAll(`.${this.selectors.input}`);i.forEach((t,n)=>{this.debug&&(t.id||console.error(`Input #${n} in group has no ID!`),(!t.value||t.value===`on`)&&console.warn(`Input #${t.id} does not have a value specified (currently "${t.value}")`));let a=r[n];a&&(t.tabIndex=-1,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(t.checked)),a.setAttribute(`tabindex`,t.checked?`0`:`-1`),t.disabled?a.setAttribute(`aria-disabled`,`true`):a.removeAttribute(`aria-disabled`),t.addEventListener(`click`,()=>{i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),i[n].checked=!0,i[n].setAttribute(`checked`,``),this.customEvent(t)},{signal:e}))});let a=Array.from(i).find(e=>e.checked&&!e.disabled)||Array.from(i).find(e=>!e.disabled);if(a){let e=t.querySelector(`label[for="${a.id}"]`);e&&e.setAttribute(`tabindex`,`0`)}})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e){let t={detail:{id:e.id,value:e.value},bubbles:!0};this.debug&&console.log(`CustomEvent:`,t.detail),e.dispatchEvent(new CustomEvent(`ui-button-group-change`,t))}},i=class{selectors;buttons=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIb`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}setValue(e,t,n){e.dataset.value=t,e.tagName===`A`&&(e.href=t),n!==void 0&&(e.textContent=n),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIb--flash`),e.offsetWidth,e.classList.add(`UIb--flash`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--flash`),{once:!0}))}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.buttons?.forEach(e=>delete e.dataset.uibBound),this.buttons=null,this.abortController=new AbortController}disableEl(e){e.tagName===`BUTTON`?e.disabled=!0:(e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`tabindex`,`-1`))}enableEl(e){e.tagName===`BUTTON`?e.disabled=!1:(e.removeAttribute(`aria-disabled`),e.setAttribute(`tabindex`,`0`))}isDisabled(e){return e.tagName===`BUTTON`?e.disabled:e.getAttribute(`aria-disabled`)===`true`}setDisabled(e,t){e.setAttribute(`data-originally-disabled`,String(t)),t?this.disableEl(e):this.enableEl(e)}scan(){this.buttons=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.buttons.forEach(t=>{t.dataset.uibBound||(t.dataset.uibBound=`1`,t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(this.isDisabled(t))),t.getAttribute(`data-originally-disabled`)===`true`?this.disableEl(t):this.enableEl(t),t.addEventListener(`click`,e=>{if(this.isDisabled(t)){e.preventDefault(),e.stopImmediatePropagation();return}t.tagName===`A`&&e.preventDefault(),this.ripple(t),this.customEvent(t,String(t.dataset.value))},{signal:e}))})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`UIb--ripple`),e.offsetWidth,e.classList.add(`UIb--ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--ripple`),{once:!0}))}customEvent(e,t){if(!t||t===`undefined`||t.trim()===``){console.warn(`Button data-value="" Not set!`);return}let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.info(`Button CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-button-change`,n))}},a=null,o=null,s=null,c=null,l=null;function u(...e){return a??=new i(...e)}function d(...e){return l??=new r(...e)}function f(...e){return o??=new n(...e)}function p(...t){return s??=new e(...t)}function m(...e){return c??=new t(...e)}function h(){a=null,o=null,s=null,c=null,l=null}exports.Button=i,exports.ButtonGroup=r,exports.Select=n,exports.SpinBox=e,exports.Switch=t,exports.getButtonGroupManager=d,exports.getButtonManager=u,exports.getSelectManager=f,exports.getSpinBoxManager=p,exports.getSwitchManager=m,exports.resetManagers=h;
package/dist/index.es.js CHANGED
@@ -3,12 +3,12 @@ var e = class {
3
3
  selectors;
4
4
  spinBoxes = null;
5
5
  abortController = new AbortController();
6
- dbug;
6
+ debug;
7
7
  root;
8
8
  observer = null;
9
9
  rescanTimer = null;
10
10
  constructor(e = {}, t = !1, n = {}) {
11
- this.dbug = t, this.root = n.root ?? document;
11
+ this.debug = t, this.root = n.root ?? document;
12
12
  let r = {
13
13
  main: "UIsp",
14
14
  btn: "UIsp__btn",
@@ -46,7 +46,7 @@ var e = class {
46
46
  setValue(e, t) {
47
47
  let n = e.querySelector(`.${this.selectors.input}`);
48
48
  if (!n) {
49
- this.dbug && console.warn("UISpinBox: input not found");
49
+ this.debug && console.warn("UISpinBox: input not found");
50
50
  return;
51
51
  }
52
52
  n.value = String(t), n.dispatchEvent(new Event("change")), !e.closest(".ui-no-flash") && (e.classList.remove("UIsp--flash"), e.offsetWidth, e.classList.add("UIsp--flash"), n.addEventListener("animationend", () => e.classList.remove("UIsp--flash"), { once: !0 }));
@@ -62,14 +62,14 @@ var e = class {
62
62
  if (t.dataset.uispBound) return;
63
63
  t.dataset.uispBound = "1";
64
64
  let n, r = t.querySelectorAll(`.${this.selectors.btn}`), i = t.querySelector(`.${this.selectors.input}`);
65
- this.dbug && (r || console.log(`Buttons (${this.selectors.btn}) not found in container`), i || console.log(`Input (${this.selectors.input}) not found in container`));
65
+ this.debug && (r || console.log(`Buttons (${this.selectors.btn}) not found in container`), i || console.log(`Input (${this.selectors.input}) not found in container`));
66
66
  let a = r[0], o = r[1];
67
67
  i.disabled = !1, [a, o].forEach((e) => {
68
68
  e.classList.remove(this.selectors.disabledBtn), e.disabled = !1;
69
69
  }), t.setAttribute("tabindex", "0"), t.removeAttribute("aria-disabled");
70
- let s = this.getValidDataNumber(t, "step"), c = this.getValidDataNumber(t, "min"), l = this.getValidDataNumber(t, "max");
70
+ let s = t.hasAttribute("data-decimals") ? this.getValidDataNumber(t, "decimals") : this.getValidDataNumber(t, "step"), c = Math.min(Math.max(Math.trunc(s), 0), 100), l = this.getValidDataNumber(t, "min"), u = this.getValidDataNumber(t, "max");
71
71
  if (t.hasAttribute("data-disabled")) {
72
- Number(i.value) <= c && (i.value = c.toFixed(s)), l === 0 ? i.value = Number(i.value).toFixed(s) : Number(i.value) >= l && (i.value = l.toFixed(s)), this.disableEl(t), t.addEventListener("click", (e) => {
72
+ Number(i.value) <= l && (i.value = l.toFixed(c)), u === 0 ? i.value = Number(i.value).toFixed(c) : Number(i.value) >= u && (i.value = u.toFixed(c)), this.disableEl(t), t.addEventListener("click", (e) => {
73
73
  e.preventDefault(), e.stopImmediatePropagation();
74
74
  }, {
75
75
  capture: !0,
@@ -77,47 +77,47 @@ var e = class {
77
77
  });
78
78
  return;
79
79
  }
80
- let u = (e) => {
80
+ let d = (e) => {
81
81
  t.setAttribute("aria-valuenow", String(e)), t.setAttribute("aria-valuetext", `${e} items`);
82
82
  };
83
- Number(i.value) <= c && (i.value = c.toFixed(s)), l === 0 ? i.value = Number(i.value).toFixed(s) : (Number(i.value) >= l && (i.value = l.toFixed(s)), l && t.setAttribute("aria-valuemax", l.toFixed(s))), c && t.setAttribute("aria-valuemin", c.toFixed(s)), this.state(Number(i.value), a, o, c, l), u(i.value);
84
- let d = null, f = (e, t = 1) => {
83
+ Number(i.value) <= l && (i.value = l.toFixed(c)), u === 0 ? i.value = Number(i.value).toFixed(c) : (Number(i.value) >= u && (i.value = u.toFixed(c)), u && t.setAttribute("aria-valuemax", u.toFixed(c))), l && t.setAttribute("aria-valuemin", l.toFixed(c)), this.state(Number(i.value), a, o, l, u), d(i.value);
84
+ let f = null, p = (e, t = 1) => {
85
85
  i.value = String(Math.abs(Number(i.value)));
86
86
  let n = parseFloat(i.value) || 0;
87
- return n += e * t / 10 ** s, e === 1 && l !== 0 && n > l && (n = l), e === -1 && n < c && (n = c), i.value = n.toFixed(s), this.state(Number(i.value), a, o, c, l), u(i.value), i.value;
88
- }, p = (e, t = 150) => {
89
- d === null && (d = window.setInterval(e, t));
90
- }, m = () => {
91
- d !== null && (clearInterval(d), d = null);
87
+ return n += e * t / 10 ** c, e === 1 && u !== 0 && n > u && (n = u), e === -1 && n < l && (n = l), i.value = n.toFixed(c), this.state(Number(i.value), a, o, l, u), d(i.value), i.value;
88
+ }, m = (e, t = 150) => {
89
+ f === null && (f = window.setInterval(e, t));
90
+ }, h = () => {
91
+ f !== null && (clearInterval(f), f = null);
92
92
  };
93
93
  o.addEventListener("mousedown", (e) => {
94
94
  let t = e.shiftKey ? 3 : 1;
95
- p(() => f(1, t));
96
- }, { signal: e }), o.addEventListener("touchstart", () => p(() => f(1)), { signal: e }), [
95
+ m(() => p(1, t));
96
+ }, { signal: e }), o.addEventListener("touchstart", () => m(() => p(1)), { signal: e }), [
97
97
  "mouseup",
98
98
  "mouseleave",
99
99
  "mouseout",
100
100
  "touchend",
101
101
  "touchcancel"
102
102
  ].forEach((t) => {
103
- o.addEventListener(t, m, { signal: e });
103
+ o.addEventListener(t, h, { signal: e });
104
104
  }), o.addEventListener("click", (e) => {
105
105
  let t = e.shiftKey ? 3 : 1;
106
- d === null && (n = f(1, t), this.ripple(o), this.costomEvent(i, n));
106
+ f === null && (n = p(1, t), this.ripple(o), this.customEvent(i, n));
107
107
  }, { signal: e }), a.addEventListener("click", (e) => {
108
108
  let t = e.shiftKey ? 3 : 1;
109
- d === null && (n = f(-1, t), this.ripple(a), this.costomEvent(i, n));
109
+ f === null && (n = p(-1, t), this.ripple(a), this.customEvent(i, n));
110
110
  }, { signal: e }), a.addEventListener("mousedown", (e) => {
111
111
  let t = e.shiftKey ? 3 : 1;
112
- p(() => f(-1, t), 100);
113
- }, { signal: e }), a.addEventListener("touchstart", () => p(() => f(-1), 100), { signal: e }), [
112
+ m(() => p(-1, t), 100);
113
+ }, { signal: e }), a.addEventListener("touchstart", () => m(() => p(-1), 100), { signal: e }), [
114
114
  "mouseup",
115
115
  "mouseleave",
116
116
  "mouseout",
117
117
  "touchend",
118
118
  "touchcancel"
119
119
  ].forEach((t) => {
120
- a.addEventListener(t, m, { signal: e });
120
+ a.addEventListener(t, h, { signal: e });
121
121
  }), i.addEventListener("keydown", (e) => {
122
122
  let t = e.key, n = e.shiftKey ? 5 : 1;
123
123
  if ([
@@ -144,22 +144,22 @@ var e = class {
144
144
  return;
145
145
  }
146
146
  if (t === "ArrowUp" || t === "ArrowDown") {
147
- e.preventDefault(), f(t === "ArrowUp" ? 1 : -1, n);
147
+ e.preventDefault(), p(t === "ArrowUp" ? 1 : -1, n);
148
148
  return;
149
149
  }
150
- let r = t === "," ? "." : t, a = /^[0-9]$/.test(r), o = r === ".", c = i.value.includes(".");
151
- (s === 0 && !a || s > 0 && !(a || o) || o && c) && e.preventDefault();
150
+ let r = t === "," ? "." : t, a = /^[0-9]$/.test(r), o = r === ".", s = i.value.includes(".");
151
+ (c === 0 && !a || c > 0 && !(a || o) || o && s) && e.preventDefault();
152
152
  }, { signal: e }), i.addEventListener("keyup", (e) => {
153
- (e.key === "ArrowUp" || e.key === "ArrowDown") && this.costomEvent(i, i.value);
153
+ (e.key === "ArrowUp" || e.key === "ArrowDown") && this.customEvent(i, i.value);
154
154
  }, { signal: e }), i.addEventListener("change", () => {
155
- Number(i.value) < c && (i.value = c.toFixed(s)), Number(i.value) > l && l !== 0 ? i.value = l.toFixed(s) : i.value = Number(i.value).toFixed(s), this.state(Number(i.value), a, o, c, l), this.costomEvent(i, i.value);
155
+ Number(i.value) < l && (i.value = l.toFixed(c)), Number(i.value) > u && u !== 0 ? i.value = u.toFixed(c) : i.value = Number(i.value).toFixed(c), this.state(Number(i.value), a, o, l, u), this.customEvent(i, i.value);
156
156
  }, { signal: e });
157
157
  });
158
158
  }
159
159
  ripple(e) {
160
160
  e.closest(".ui-no-ripple") || (e.classList.remove("ui-ripple"), e.offsetWidth, e.classList.add("ui-ripple"), e.addEventListener("animationend", () => e.classList.remove("ui-ripple"), { once: !0 }));
161
161
  }
162
- costomEvent(e, t) {
162
+ customEvent(e, t) {
163
163
  let n = {
164
164
  detail: {
165
165
  id: e.id,
@@ -167,18 +167,18 @@ var e = class {
167
167
  },
168
168
  bubbles: !0
169
169
  };
170
- this.dbug && console.log("CostomEvent: data.detail ", n.detail), e.dispatchEvent(new CustomEvent("ui-spinbox-change", n));
170
+ this.debug && console.log("CustomEvent: data.detail ", n.detail), e.dispatchEvent(new CustomEvent("ui-spinbox-change", n));
171
171
  }
172
172
  }, t = class {
173
173
  selectors;
174
174
  main = null;
175
175
  abortController = new AbortController();
176
- dbug;
176
+ debug;
177
177
  root;
178
178
  observer = null;
179
179
  rescanTimer = null;
180
180
  constructor(e = {}, t = !1, n = {}) {
181
- this.dbug = t, this.root = n.root ?? document;
181
+ this.debug = t, this.root = n.root ?? document;
182
182
  let r = {
183
183
  main: "UIsw",
184
184
  label: "UIsw-label"
@@ -225,8 +225,13 @@ var e = class {
225
225
  let i = t.querySelector(".UIsw-slider");
226
226
  i && this.ripple(i);
227
227
  }, { signal: e }), t.addEventListener("keydown", (e) => {
228
- let n = t.querySelector("input");
229
- e.key === "ArrowRight" ? (r.checked = !0, t.setAttribute("aria-checked", String(r.checked)), e.preventDefault(), this.customEvent(n, "true")) : e.key === "ArrowLeft" && (r.checked = !1, t.setAttribute("aria-checked", String(r.checked)), e.preventDefault(), this.customEvent(n, "false"));
228
+ if (r.disabled) return;
229
+ let n = null;
230
+ if (e.key === "ArrowRight" ? n = !0 : e.key === "ArrowLeft" && (n = !1), n !== null && (e.preventDefault(), r.checked !== n)) {
231
+ r.checked = n, r.dispatchEvent(new Event("change"));
232
+ let e = t.querySelector(".UIsw-slider");
233
+ e && this.ripple(e);
234
+ }
230
235
  }, { signal: e }));
231
236
  });
232
237
  }
@@ -234,7 +239,7 @@ var e = class {
234
239
  this.main?.forEach((n) => {
235
240
  let r = n.querySelector(`input#${e}`);
236
241
  if (r) {
237
- r.checked = t, this.dbug && console.log("SetValue:", r.checked), n.setAttribute("aria-checked", String(t)), this.customEvent(r, String(t));
242
+ r.checked = t, this.debug && console.log("SetValue:", r.checked), n.setAttribute("aria-checked", String(t)), this.customEvent(r, String(t));
238
243
  let e = n.querySelector(".UIsw-slider");
239
244
  e && !n.closest(".ui-no-flash") && (n.classList.remove("UIsw--flash"), n.offsetWidth, n.classList.add("UIsw--flash"), e.addEventListener("animationend", () => n.classList.remove("UIsw--flash"), { once: !0 }));
240
245
  }
@@ -251,20 +256,21 @@ var e = class {
251
256
  },
252
257
  bubbles: !0
253
258
  };
254
- this.dbug && console.log("CustomEvent:", n.detail), e.dispatchEvent(new CustomEvent("ui-switch-change", n));
259
+ this.debug && console.log("CustomEvent:", n.detail), e.dispatchEvent(new CustomEvent("ui-switch-change", n));
255
260
  }
256
261
  }, n = class e {
257
262
  selectors;
258
263
  main = null;
259
264
  itemArrowInitialized = /* @__PURE__ */ new WeakSet();
260
265
  abortController = new AbortController();
261
- dbug;
266
+ globalAbortController = new AbortController();
267
+ debug;
262
268
  root;
263
269
  observer = null;
264
270
  rescanTimer = null;
265
271
  selectMap = /* @__PURE__ */ new Map();
266
272
  constructor(e = {}, t = !1, n = {}) {
267
- this.dbug = t, this.root = n.root ?? document;
273
+ this.debug = t, this.root = n.root ?? document;
268
274
  let r = {
269
275
  idPrefix: "UI-option-",
270
276
  main: "UIselect",
@@ -305,20 +311,23 @@ var e = class {
305
311
  destroy() {
306
312
  this.observer?.disconnect(), this.observer = null, this.rescanTimer !== null && (clearTimeout(this.rescanTimer), this.rescanTimer = null), e.closeAll(this.selectors), this.abortController.abort(), this.main?.forEach((e) => delete e.dataset.uiselBound), this.selectMap.clear(), this.itemArrowInitialized = /* @__PURE__ */ new WeakSet(), this.main = null, this.abortController = new AbortController();
307
313
  }
314
+ dispose() {
315
+ this.destroy(), this.globalAbortController.abort();
316
+ }
308
317
  disableEl(e) {
309
318
  e.setAttribute("tabindex", "-1"), e.setAttribute("aria-disabled", "true");
310
319
  }
311
320
  setValue(e, t) {
312
321
  let n = this.selectMap.get(e);
313
322
  if (!n) {
314
- this.dbug && console.warn("UISelect: element not registered");
323
+ this.debug && console.warn("UISelect: element not registered");
315
324
  return;
316
325
  }
317
326
  let { input: r, selected: i } = n, a = e.querySelector(`.${this.selectors.optionsList}`);
318
327
  if (!a) return;
319
328
  let o = Array.from(a.querySelectorAll(`.${this.selectors.items} ul li`)), s = this.filterExcluded(o, this.selectors.excludedItems), c = s.find((e) => String(e.dataset.value) === String(t));
320
329
  if (!c) {
321
- this.dbug && console.warn(`UISelect: value "${t}" not found`);
330
+ this.debug && console.warn(`UISelect: value "${t}" not found`);
322
331
  return;
323
332
  }
324
333
  s.forEach((e) => e.removeAttribute("aria-selected")), c.setAttribute("aria-selected", "true"), i.textContent = c.textContent ?? "", r.value = String(t), r.setAttribute("value", String(t)), e.setAttribute("aria-activedescendant", c.id || `${this.selectors.idPrefix}${s.indexOf(c)}`), this.customEvent(e, String(t)), e.closest(".ui-no-flash") || (e.classList.remove(this.selectors.flash), e.offsetWidth, e.classList.add(this.selectors.flash), e.addEventListener("animationend", () => e.classList.remove(this.selectors.flash), { once: !0 }));
@@ -328,9 +337,9 @@ var e = class {
328
337
  let e = this.abortController.signal;
329
338
  this.main.forEach((t) => {
330
339
  if (t.dataset.uiselBound) return;
331
- let n = t.querySelector(`.${this.selectors.main} input[type='hidden']`);
340
+ let n = t.querySelector("input[type='hidden']");
332
341
  try {
333
- if (!n) throw Error("<input type=\"hidden\" name=\"YouUniqueId\">");
342
+ if (!n) throw Error("<input type=\"hidden\" name=\"YourUniqueId\">");
334
343
  } catch (e) {
335
344
  return console.warn("Not found:", e.message);
336
345
  }
@@ -356,23 +365,23 @@ var e = class {
356
365
  this.itemsPosition(a);
357
366
  }, { signal: e });
358
367
  let s = a.querySelectorAll(`.${this.selectors.items} ul li`), c = this.filterExcluded(s, this.selectors.excludedItems), l = t.querySelector("[aria-selected='true']");
359
- l && this.defaultSelect(t, l, r, n);
360
- var u = [];
361
- o && o.addEventListener("input", (i) => {
362
- let o = i.target.value.trim();
363
- r && (u = this.filterSearch(c, o), o ? (s.forEach((e) => e.remove()), u.forEach((e) => {
364
- a.querySelector(`.${this.selectors.optionsList} ul`)?.appendChild(e);
365
- })) : s.forEach((e) => {
366
- a.querySelector(`.${this.selectors.optionsList} ul`)?.appendChild(e);
367
- }), this.itemArrow(t, a, r, n, e));
368
+ l && this.defaultSelect(t, l, r, n), o && o.addEventListener("input", (i) => {
369
+ let o = i.target.value.trim(), l = o ? new Set(this.filterSearch(c, o)) : null;
370
+ s.forEach((e) => {
371
+ e.hidden = l ? !l.has(e) : !1;
372
+ }), this.itemArrow(t, a, r, n, e);
368
373
  }, { signal: e }), this.itemArrow(t, a, r, n, e), this.items(t, a, c, r, n, e);
369
- }, { signal: e });
374
+ });
370
375
  }
371
376
  itemArrow(e, t, n, r, i) {
372
377
  if (this.itemArrowInitialized.has(e)) return;
373
378
  this.itemArrowInitialized.add(e);
374
379
  let a = -1, o = n.textContent ? n.textContent : "", s = e.querySelector(`.${this.selectors.search} input`);
375
380
  e.addEventListener("keydown", (i) => {
381
+ if (i.key === "Tab") {
382
+ this.close(e, t);
383
+ return;
384
+ }
376
385
  s && s.focus();
377
386
  let c = Array.from(t.querySelectorAll(`.${this.selectors.optionsList} ul li`)), l = this.filterExcluded(c, this.selectors.excludedItems), u = l.length;
378
387
  if (u !== 0) if (i.key === "ArrowDown") {
@@ -418,7 +427,7 @@ var e = class {
418
427
  },
419
428
  bubbles: !0
420
429
  };
421
- this.dbug && console.log("CustomEvent:", n.detail), e.dispatchEvent(new CustomEvent("ui-select-change", n));
430
+ this.debug && console.log("CustomEvent:", n.detail), e.dispatchEvent(new CustomEvent("ui-select-change", n));
422
431
  }
423
432
  toggle(t, n) {
424
433
  e.closeAll(this.selectors), n.hidden ? (n.hidden = !1, t.setAttribute("aria-expanded", "true")) : this.close(t, n);
@@ -436,18 +445,18 @@ var e = class {
436
445
  document.addEventListener("click", (n) => {
437
446
  let r = n.target;
438
447
  [...document.querySelectorAll(`.${t.main}`)].some((e) => e.contains(r)) || e.closeAll(t);
439
- }, { signal: this.abortController.signal });
448
+ }, { signal: this.globalAbortController.signal });
440
449
  }
441
450
  }, r = class {
442
451
  selectors;
443
452
  main = null;
444
453
  abortController = new AbortController();
445
- dbug;
454
+ debug;
446
455
  root;
447
456
  observer = null;
448
457
  rescanTimer = null;
449
458
  constructor(e = {}, t = !1, n = {}) {
450
- this.dbug = t, this.root = n.root ?? document;
459
+ this.debug = t, this.root = n.root ?? document;
451
460
  let r = {
452
461
  main: "UIbg",
453
462
  btn: "UIbg-btn",
@@ -475,14 +484,14 @@ var e = class {
475
484
  setValue(e, t) {
476
485
  let n = e.querySelectorAll(`.${this.selectors.input}`), r = e.querySelectorAll(`.${this.selectors.btn}`), i = Array.from(n).findIndex((e) => e.value === t && !e.disabled);
477
486
  if (i === -1) {
478
- this.dbug && console.warn(`UIButtonGroup: value "${t}" not found or disabled`);
487
+ this.debug && console.warn(`UIButtonGroup: value "${t}" not found or disabled`);
479
488
  return;
480
489
  }
481
490
  n.forEach((e, t) => {
482
491
  e.checked = t === i, t === i ? e.setAttribute("checked", "") : e.removeAttribute("checked");
483
492
  }), r.forEach((e, t) => {
484
493
  e.setAttribute("aria-checked", String(t === i)), e.setAttribute("tabindex", t === i ? "0" : "-1");
485
- }), this.costomEvent(n[i]);
494
+ }), this.customEvent(n[i]);
486
495
  let a = r[i];
487
496
  a && !e.closest(".ui-no-flash") && (a.classList.remove("UIbg--flash"), a.offsetWidth, a.classList.add("UIbg--flash"), a.addEventListener("animationend", () => a.classList.remove("UIbg--flash"), { once: !0 }));
488
497
  }
@@ -495,20 +504,20 @@ var e = class {
495
504
  e.hasAttribute("data-originally-disabled") || e.setAttribute("data-originally-disabled", String(e.disabled)), e.disabled = e.getAttribute("data-originally-disabled") === "true";
496
505
  }), t.removeAttribute("aria-disabled");
497
506
  let n = t.querySelector(`.${this.selectors.input}:checked`);
498
- n && this.costomEvent(n);
507
+ n && this.customEvent(n);
499
508
  let r = t.querySelectorAll(`.${this.selectors.btn}`);
500
509
  r.forEach((t) => {
501
510
  t.addEventListener("click", () => {
502
511
  r.forEach((e) => {
503
512
  e.setAttribute("aria-checked", "false"), e.setAttribute("tabindex", "-1");
504
- }), t.setAttribute("aria-checked", "true"), t.setAttribute("tabindex", "0"), t.focus(), this.#e(t);
513
+ }), t.setAttribute("aria-checked", "true"), t.setAttribute("tabindex", "0"), t.focus(), this.ripple(t);
505
514
  }, { signal: e }), t.addEventListener("keydown", (e) => {
506
515
  let n = Array.from(r).indexOf(t);
507
516
  if (e.key === "ArrowRight" && n++, e.key === "ArrowLeft" && n--, n < 0 && (n = r.length - 1), n >= r.length && (n = 0), e.key === "Enter") {
508
517
  let t = i[n];
509
518
  t && !t.disabled && (i.forEach((e) => {
510
519
  e.checked = !1, e.removeAttribute("checked");
511
- }), t.checked = !0, t.setAttribute("checked", ""), this.costomEvent(t)), e.preventDefault();
520
+ }), t.checked = !0, t.setAttribute("checked", ""), this.customEvent(t)), e.preventDefault();
512
521
  return;
513
522
  }
514
523
  let a = r[n];
@@ -517,12 +526,12 @@ var e = class {
517
526
  });
518
527
  let i = t.querySelectorAll(`.${this.selectors.input}`);
519
528
  i.forEach((t, n) => {
520
- this.dbug && (t.id || console.error(`Input #${n} in group has no ID!`), (!t.value || t.value === "on") && console.warn(`Input #${t.id} does not have a value specified (currently "${t.value}")`));
529
+ this.debug && (t.id || console.error(`Input #${n} in group has no ID!`), (!t.value || t.value === "on") && console.warn(`Input #${t.id} does not have a value specified (currently "${t.value}")`));
521
530
  let a = r[n];
522
531
  a && (t.tabIndex = -1, a.setAttribute("role", "radio"), a.setAttribute("aria-checked", String(t.checked)), a.setAttribute("tabindex", t.checked ? "0" : "-1"), t.disabled ? a.setAttribute("aria-disabled", "true") : a.removeAttribute("aria-disabled"), t.addEventListener("click", () => {
523
532
  i.forEach((e) => {
524
533
  e.checked = !1, e.removeAttribute("checked");
525
- }), i[n].checked = !0, i[n].setAttribute("checked", ""), this.costomEvent(t);
534
+ }), i[n].checked = !0, i[n].setAttribute("checked", ""), this.customEvent(t);
526
535
  }, { signal: e }));
527
536
  });
528
537
  let a = Array.from(i).find((e) => e.checked && !e.disabled) || Array.from(i).find((e) => !e.disabled);
@@ -532,10 +541,10 @@ var e = class {
532
541
  }
533
542
  });
534
543
  }
535
- #e(e) {
544
+ ripple(e) {
536
545
  e.closest(".ui-no-ripple") || (e.classList.remove("ui-ripple"), e.offsetWidth, e.classList.add("ui-ripple"), e.addEventListener("animationend", () => e.classList.remove("ui-ripple"), { once: !0 }));
537
546
  }
538
- costomEvent(e) {
547
+ customEvent(e) {
539
548
  let t = {
540
549
  detail: {
541
550
  id: e.id,
@@ -543,18 +552,18 @@ var e = class {
543
552
  },
544
553
  bubbles: !0
545
554
  };
546
- this.dbug && console.log("CostomEvent:", t.detail), e.dispatchEvent(new CustomEvent("ui-button-group-change", t));
555
+ this.debug && console.log("CustomEvent:", t.detail), e.dispatchEvent(new CustomEvent("ui-button-group-change", t));
547
556
  }
548
557
  }, i = class {
549
558
  selectors;
550
559
  buttons = null;
551
560
  abortController = new AbortController();
552
- dbug;
561
+ debug;
553
562
  root;
554
563
  observer = null;
555
564
  rescanTimer = null;
556
565
  constructor(e = {}, t = !1, n = {}) {
557
- this.dbug = t, this.root = n.root ?? document;
566
+ this.debug = t, this.root = n.root ?? document;
558
567
  let r = { main: "UIb" };
559
568
  this.selectors = {
560
569
  ...r,
@@ -618,7 +627,7 @@ var e = class {
618
627
  },
619
628
  bubbles: !0
620
629
  };
621
- this.dbug && console.info("Button CustomEvent:", n.detail), e.dispatchEvent(new CustomEvent("ui-button-change", n));
630
+ this.debug && console.info("Button CustomEvent:", n.detail), e.dispatchEvent(new CustomEvent("ui-button-change", n));
622
631
  }
623
632
  }, a = null, o = null, s = null, c = null, l = null;
624
633
  function u(...e) {
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UiElements={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=class{selectors;spinBoxes=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIsp`,btn:`UIsp__btn`,input:`UIsp__input`,disabledBtn:`disabled`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}state=(e,t,n,r=0,i=0)=>{e==r||e<r?(t.classList.add(this.selectors.disabledBtn),t.disabled=!0):(t.classList.remove(this.selectors.disabledBtn),t.disabled=!1),i!==0&&(e==i||e>i?(n.classList.add(this.selectors.disabledBtn),n.disabled=!0):(n.classList.remove(this.selectors.disabledBtn),n.disabled=!1))};destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.spinBoxes?.forEach(e=>delete e.dataset.uispBound),this.spinBoxes=null,this.abortController=new AbortController}disableEl(e){let t=e.querySelector(`.${this.selectors.input}`),n=e.querySelectorAll(`.${this.selectors.btn}`);t&&(t.disabled=!0),n.forEach(e=>{e.classList.add(this.selectors.disabledBtn),e.disabled=!0}),e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=e.querySelector(`.${this.selectors.input}`);if(!n){this.dbug&&console.warn(`UISpinBox: input not found`);return}n.value=String(t),n.dispatchEvent(new Event(`change`)),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIsp--flash`),e.offsetWidth,e.classList.add(`UIsp--flash`),n.addEventListener(`animationend`,()=>e.classList.remove(`UIsp--flash`),{once:!0}))}getValidDataNumber=(e,t)=>{let n=e.getAttribute(`data-${t}`);return n===null||n.trim()===``||isNaN(Number(n))?0:Number(n)};scan(){this.spinBoxes=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.spinBoxes.forEach(t=>{if(t.dataset.uispBound)return;t.dataset.uispBound=`1`;let n,r=t.querySelectorAll(`.${this.selectors.btn}`),i=t.querySelector(`.${this.selectors.input}`);this.dbug&&(r||console.log(`Buttons (${this.selectors.btn}) not found in container`),i||console.log(`Input (${this.selectors.input}) not found in container`));let a=r[0],o=r[1];i.disabled=!1,[a,o].forEach(e=>{e.classList.remove(this.selectors.disabledBtn),e.disabled=!1}),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`);let s=this.getValidDataNumber(t,`step`),c=this.getValidDataNumber(t,`min`),l=this.getValidDataNumber(t,`max`);if(t.hasAttribute(`data-disabled`)){Number(i.value)<=c&&(i.value=c.toFixed(s)),l===0?i.value=Number(i.value).toFixed(s):Number(i.value)>=l&&(i.value=l.toFixed(s)),this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}let u=e=>{t.setAttribute(`aria-valuenow`,String(e)),t.setAttribute(`aria-valuetext`,`${e} items`)};Number(i.value)<=c&&(i.value=c.toFixed(s)),l===0?i.value=Number(i.value).toFixed(s):(Number(i.value)>=l&&(i.value=l.toFixed(s)),l&&t.setAttribute(`aria-valuemax`,l.toFixed(s))),c&&t.setAttribute(`aria-valuemin`,c.toFixed(s)),this.state(Number(i.value),a,o,c,l),u(i.value);let d=null,f=(e,t=1)=>{i.value=String(Math.abs(Number(i.value)));let n=parseFloat(i.value)||0;return n+=e*t/10**s,e===1&&l!==0&&n>l&&(n=l),e===-1&&n<c&&(n=c),i.value=n.toFixed(s),this.state(Number(i.value),a,o,c,l),u(i.value),i.value},p=(e,t=150)=>{d===null&&(d=window.setInterval(e,t))},m=()=>{d!==null&&(clearInterval(d),d=null)};o.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;p(()=>f(1,t))},{signal:e}),o.addEventListener(`touchstart`,()=>p(()=>f(1)),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{o.addEventListener(t,m,{signal:e})}),o.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;d===null&&(n=f(1,t),this.ripple(o),this.costomEvent(i,n))},{signal:e}),a.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;d===null&&(n=f(-1,t),this.ripple(a),this.costomEvent(i,n))},{signal:e}),a.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;p(()=>f(-1,t),100)},{signal:e}),a.addEventListener(`touchstart`,()=>p(()=>f(-1),100),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{a.addEventListener(t,m,{signal:e})}),i.addEventListener(`keydown`,e=>{let t=e.key,n=e.shiftKey?5:1;if([`Backspace`,`Delete`,`ArrowLeft`,`ArrowRight`,`Tab`,`Enter`,`Home`,`End`].includes(t)||(e.ctrlKey||e.metaKey)&&[`a`,`c`,`v`,`x`].includes(t.toLowerCase()))return;if([`e`,`+`,`-`].includes(t)){e.preventDefault();return}if(t===`ArrowUp`||t===`ArrowDown`){e.preventDefault(),f(t===`ArrowUp`?1:-1,n);return}let r=t===`,`?`.`:t,a=/^[0-9]$/.test(r),o=r===`.`,c=i.value.includes(`.`);(s===0&&!a||s>0&&!(a||o)||o&&c)&&e.preventDefault()},{signal:e}),i.addEventListener(`keyup`,e=>{(e.key===`ArrowUp`||e.key===`ArrowDown`)&&this.costomEvent(i,i.value)},{signal:e}),i.addEventListener(`change`,()=>{Number(i.value)<c&&(i.value=c.toFixed(s)),Number(i.value)>l&&l!==0?i.value=l.toFixed(s):i.value=Number(i.value).toFixed(s),this.state(Number(i.value),a,o,c,l),this.costomEvent(i,i.value)},{signal:e})})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}costomEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.log(`CostomEvent: data.detail `,n.detail),e.dispatchEvent(new CustomEvent(`ui-spinbox-change`,n))}},n=class{selectors;main=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIsw`,label:`UIsw-label`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiswBound),this.main=null,this.abortController=new AbortController}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiswBound)return;t.dataset.uiswBound=`1`;let n=t.querySelector(`.${this.selectors.label}`),r=t.querySelector(`input`);n&&n.id&&t.setAttribute(`aria-labelledby`,n.id),t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(r?.disabled??!1));let i=t.getAttribute(`data-originally-disabled`)===`true`;r&&(r.disabled=!1),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),i&&(r&&(r.disabled=!0),t.setAttribute(`tabindex`,`-1`),t.setAttribute(`aria-disabled`,`true`),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e})),r&&(r.checked?t.setAttribute(`aria-checked`,`true`):t.setAttribute(`aria-checked`,`false`),r.addEventListener(`change`,()=>{t.setAttribute(`aria-checked`,String(r.checked)),this.customEvent(r,String(r.checked))},{signal:e}),t.addEventListener(`click`,e=>{if(e.target.tagName===`INPUT`)return;let n=e.target.closest(`label`);n||(r.checked=!r.checked),n||r.dispatchEvent(new Event(`change`));let i=t.querySelector(`.UIsw-slider`);i&&this.ripple(i)},{signal:e}),t.addEventListener(`keydown`,e=>{let n=t.querySelector(`input`);e.key===`ArrowRight`?(r.checked=!0,t.setAttribute(`aria-checked`,String(r.checked)),e.preventDefault(),this.customEvent(n,`true`)):e.key===`ArrowLeft`&&(r.checked=!1,t.setAttribute(`aria-checked`,String(r.checked)),e.preventDefault(),this.customEvent(n,`false`))},{signal:e}))})}setValue(e,t){this.main?.forEach(n=>{let r=n.querySelector(`input#${e}`);if(r){r.checked=t,this.dbug&&console.log(`SetValue:`,r.checked),n.setAttribute(`aria-checked`,String(t)),this.customEvent(r,String(t));let e=n.querySelector(`.UIsw-slider`);e&&!n.closest(`.ui-no-flash`)&&(n.classList.remove(`UIsw--flash`),n.offsetWidth,n.classList.add(`UIsw--flash`),e.addEventListener(`animationend`,()=>n.classList.remove(`UIsw--flash`),{once:!0}))}})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-switch-change`,n))}},r=class e{selectors;main=null;itemArrowInitialized=new WeakSet;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;selectMap=new Map;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={idPrefix:`UI-option-`,main:`UIselect`,selected:`UIselect-selected`,arrow:`UIselect-arrow`,optionsList:`UIselect-options`,search:`UIselect-options__search`,items:`UIselect-options__items`,flash:`UIselect--flash`,excludedItems:[`divider`,`test`]};this.selectors={...r,...e},this.scan(),this.initGlobalListener(this.selectors),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}filterExcluded(e,t){return Array.from(e).filter(e=>!t.some(t=>typeof t==`string`?e.classList.contains(t)||e.id===t:e===t))}filterSearch(e,t){let n=t.trim().toLowerCase();return e.filter(e=>{let t=e.dataset.value?.toLowerCase()||``,r=e.textContent?.toLowerCase()||``;return t.includes(n)||r.includes(n)})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),e.closeAll(this.selectors),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiselBound),this.selectMap.clear(),this.itemArrowInitialized=new WeakSet,this.main=null,this.abortController=new AbortController}disableEl(e){e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=this.selectMap.get(e);if(!n){this.dbug&&console.warn(`UISelect: element not registered`);return}let{input:r,selected:i}=n,a=e.querySelector(`.${this.selectors.optionsList}`);if(!a)return;let o=Array.from(a.querySelectorAll(`.${this.selectors.items} ul li`)),s=this.filterExcluded(o,this.selectors.excludedItems),c=s.find(e=>String(e.dataset.value)===String(t));if(!c){this.dbug&&console.warn(`UISelect: value "${t}" not found`);return}s.forEach(e=>e.removeAttribute(`aria-selected`)),c.setAttribute(`aria-selected`,`true`),i.textContent=c.textContent??``,r.value=String(t),r.setAttribute(`value`,String(t)),e.setAttribute(`aria-activedescendant`,c.id||`${this.selectors.idPrefix}${s.indexOf(c)}`),this.customEvent(e,String(t)),e.closest(`.ui-no-flash`)||(e.classList.remove(this.selectors.flash),e.offsetWidth,e.classList.add(this.selectors.flash),e.addEventListener(`animationend`,()=>e.classList.remove(this.selectors.flash),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiselBound)return;let n=t.querySelector(`.${this.selectors.main} input[type='hidden']`);try{if(!n)throw Error(`<input type="hidden" name="YouUniqueId">`)}catch(e){return console.warn(`Not found:`,e.message)}t.dataset.uiselBound=`1`;let r=t.querySelector(`.${this.selectors.selected}`),i=t.querySelector(`.${this.selectors.arrow}`),a=t.querySelector(`.${this.selectors.optionsList}`),o=t.querySelector(`.${this.selectors.search} input`);if(t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),t.hasAttribute(`data-disabled`)){this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}this.selectMap.set(t,{input:n,selected:r}),i&&i.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),r.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),t.addEventListener(`click`,()=>{this.itemsPosition(a)},{signal:e});let s=a.querySelectorAll(`.${this.selectors.items} ul li`),c=this.filterExcluded(s,this.selectors.excludedItems),l=t.querySelector(`[aria-selected='true']`);l&&this.defaultSelect(t,l,r,n);var u=[];o&&o.addEventListener(`input`,i=>{let o=i.target.value.trim();r&&(u=this.filterSearch(c,o),o?(s.forEach(e=>e.remove()),u.forEach(e=>{a.querySelector(`.${this.selectors.optionsList} ul`)?.appendChild(e)})):s.forEach(e=>{a.querySelector(`.${this.selectors.optionsList} ul`)?.appendChild(e)}),this.itemArrow(t,a,r,n,e))},{signal:e}),this.itemArrow(t,a,r,n,e),this.items(t,a,c,r,n,e)},{signal:e})}itemArrow(e,t,n,r,i){if(this.itemArrowInitialized.has(e))return;this.itemArrowInitialized.add(e);let a=-1,o=n.textContent?n.textContent:``,s=e.querySelector(`.${this.selectors.search} input`);e.addEventListener(`keydown`,i=>{s&&s.focus();let c=Array.from(t.querySelectorAll(`.${this.selectors.optionsList} ul li`)),l=this.filterExcluded(c,this.selectors.excludedItems),u=l.length;if(u!==0)if(i.key===`ArrowDown`){i.preventDefault(),e.getAttribute(`aria-expanded`)===`false`&&this.toggle(e,t),a=(a+1)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let r=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,r),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`ArrowUp`){i.preventDefault(),a=(a-1+u)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let t=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,t),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`Enter`)if(i.preventDefault(),a>=0){n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let i=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,i),r.value=String(l[a].dataset.value),this.customEvent(e,r.value),this.close(e,t)}else this.toggle(e,t);else i.key===`Escape`&&(e.getAttribute(`aria-activedescendant`)||(n.textContent=o),this.close(e,t))},{signal:i})}itemsPosition(e){let t=e.querySelector(`[aria-selected="true"]`);t&&t.scrollIntoView({block:`nearest`})}items(e,t,n,r,i,a){n.forEach((o,s)=>{o.addEventListener(`click`,()=>{let a=n[s];if(a){r.textContent=a.textContent,n.forEach(e=>e.removeAttribute(`aria-selected`)),a.setAttribute(`aria-selected`,`true`);let o=a.id||`${this.selectors.idPrefix}${s}`;e.setAttribute(`aria-expanded`,`false`),e.setAttribute(`aria-activedescendant`,o),i.value=String(n[s].dataset.value),this.customEvent(e,i.value),this.close(e,t)}},{signal:a})})}defaultSelect(e,t,n,r){t&&(r.setAttribute(`value`,t.dataset.value??``),n.textContent=t.textContent??``,e.setAttribute(`aria-activedescendant`,t.id||``))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-select-change`,n))}toggle(t,n){e.closeAll(this.selectors),n.hidden?(n.hidden=!1,t.setAttribute(`aria-expanded`,`true`)):this.close(t,n)}close(e,t){t.hidden=!0,e.setAttribute(`aria-expanded`,`false`)}static closeAll(e){document.querySelectorAll(`.${e.main}`).forEach(t=>{let n=t.querySelector(`.${e.optionsList}`);n.hidden=!0,t.setAttribute(`aria-expanded`,`false`)})}initGlobalListener(t){document.addEventListener(`click`,n=>{let r=n.target;[...document.querySelectorAll(`.${t.main}`)].some(e=>e.contains(r))||e.closeAll(t)},{signal:this.abortController.signal})}},i=class{selectors;main=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIbg`,btn:`UIbg-btn`,input:`UIbg-input`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uibgBound),this.main=null,this.abortController=new AbortController}setValue(e,t){let n=e.querySelectorAll(`.${this.selectors.input}`),r=e.querySelectorAll(`.${this.selectors.btn}`),i=Array.from(n).findIndex(e=>e.value===t&&!e.disabled);if(i===-1){this.dbug&&console.warn(`UIButtonGroup: value "${t}" not found or disabled`);return}n.forEach((e,t)=>{e.checked=t===i,t===i?e.setAttribute(`checked`,``):e.removeAttribute(`checked`)}),r.forEach((e,t)=>{e.setAttribute(`aria-checked`,String(t===i)),e.setAttribute(`tabindex`,t===i?`0`:`-1`)}),this.costomEvent(n[i]);let a=r[i];a&&!e.closest(`.ui-no-flash`)&&(a.classList.remove(`UIbg--flash`),a.offsetWidth,a.classList.add(`UIbg--flash`),a.addEventListener(`animationend`,()=>a.classList.remove(`UIbg--flash`),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uibgBound)return;t.dataset.uibgBound=`1`,t.querySelectorAll(`.${this.selectors.input}`).forEach(e=>{e.hasAttribute(`data-originally-disabled`)||e.setAttribute(`data-originally-disabled`,String(e.disabled)),e.disabled=e.getAttribute(`data-originally-disabled`)===`true`}),t.removeAttribute(`aria-disabled`);let n=t.querySelector(`.${this.selectors.input}:checked`);n&&this.costomEvent(n);let r=t.querySelectorAll(`.${this.selectors.btn}`);r.forEach(t=>{t.addEventListener(`click`,()=>{r.forEach(e=>{e.setAttribute(`aria-checked`,`false`),e.setAttribute(`tabindex`,`-1`)}),t.setAttribute(`aria-checked`,`true`),t.setAttribute(`tabindex`,`0`),t.focus(),this.#e(t)},{signal:e}),t.addEventListener(`keydown`,e=>{let n=Array.from(r).indexOf(t);if(e.key===`ArrowRight`&&n++,e.key===`ArrowLeft`&&n--,n<0&&(n=r.length-1),n>=r.length&&(n=0),e.key===`Enter`){let t=i[n];t&&!t.disabled&&(i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),t.checked=!0,t.setAttribute(`checked`,``),this.costomEvent(t)),e.preventDefault();return}let a=r[n];a&&(r.forEach(e=>e.setAttribute(`tabindex`,`-1`)),a.setAttribute(`tabindex`,`0`),a.focus())},{signal:e})});let i=t.querySelectorAll(`.${this.selectors.input}`);i.forEach((t,n)=>{this.dbug&&(t.id||console.error(`Input #${n} in group has no ID!`),(!t.value||t.value===`on`)&&console.warn(`Input #${t.id} does not have a value specified (currently "${t.value}")`));let a=r[n];a&&(t.tabIndex=-1,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(t.checked)),a.setAttribute(`tabindex`,t.checked?`0`:`-1`),t.disabled?a.setAttribute(`aria-disabled`,`true`):a.removeAttribute(`aria-disabled`),t.addEventListener(`click`,()=>{i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),i[n].checked=!0,i[n].setAttribute(`checked`,``),this.costomEvent(t)},{signal:e}))});let a=Array.from(i).find(e=>e.checked&&!e.disabled)||Array.from(i).find(e=>!e.disabled);if(a){let e=t.querySelector(`label[for="${a.id}"]`);e&&e.setAttribute(`tabindex`,`0`)}})}#e(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}costomEvent(e){let t={detail:{id:e.id,value:e.value},bubbles:!0};this.dbug&&console.log(`CostomEvent:`,t.detail),e.dispatchEvent(new CustomEvent(`ui-button-group-change`,t))}},a=class{selectors;buttons=null;abortController=new AbortController;dbug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.dbug=t,this.root=n.root??document;let r={main:`UIb`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}setValue(e,t,n){e.dataset.value=t,e.tagName===`A`&&(e.href=t),n!==void 0&&(e.textContent=n),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIb--flash`),e.offsetWidth,e.classList.add(`UIb--flash`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--flash`),{once:!0}))}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.buttons?.forEach(e=>delete e.dataset.uibBound),this.buttons=null,this.abortController=new AbortController}disableEl(e){e.tagName===`BUTTON`?e.disabled=!0:(e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`tabindex`,`-1`))}enableEl(e){e.tagName===`BUTTON`?e.disabled=!1:(e.removeAttribute(`aria-disabled`),e.setAttribute(`tabindex`,`0`))}isDisabled(e){return e.tagName===`BUTTON`?e.disabled:e.getAttribute(`aria-disabled`)===`true`}setDisabled(e,t){e.setAttribute(`data-originally-disabled`,String(t)),t?this.disableEl(e):this.enableEl(e)}scan(){this.buttons=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.buttons.forEach(t=>{t.dataset.uibBound||(t.dataset.uibBound=`1`,t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(this.isDisabled(t))),t.getAttribute(`data-originally-disabled`)===`true`?this.disableEl(t):this.enableEl(t),t.addEventListener(`click`,e=>{if(this.isDisabled(t)){e.preventDefault(),e.stopImmediatePropagation();return}t.tagName===`A`&&e.preventDefault(),this.ripple(t),this.customEvent(t,String(t.dataset.value))},{signal:e}))})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`UIb--ripple`),e.offsetWidth,e.classList.add(`UIb--ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--ripple`),{once:!0}))}customEvent(e,t){if(!t||t===`undefined`||t.trim()===``){console.warn(`Button data-value="" Not set!`);return}let n={detail:{id:e.id,value:t},bubbles:!0};this.dbug&&console.info(`Button CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-button-change`,n))}},o=null,s=null,c=null,l=null,u=null;function d(...e){return o??=new a(...e)}function f(...e){return u??=new i(...e)}function p(...e){return s??=new r(...e)}function m(...e){return c??=new t(...e)}function h(...e){return l??=new n(...e)}function g(){o=null,s=null,c=null,l=null,u=null}e.Button=a,e.ButtonGroup=i,e.Select=r,e.SpinBox=t,e.Switch=n,e.getButtonGroupManager=f,e.getButtonManager=d,e.getSelectManager=p,e.getSpinBoxManager=m,e.getSwitchManager=h,e.resetManagers=g});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UiElements={}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=class{selectors;spinBoxes=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIsp`,btn:`UIsp__btn`,input:`UIsp__input`,disabledBtn:`disabled`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}state=(e,t,n,r=0,i=0)=>{e==r||e<r?(t.classList.add(this.selectors.disabledBtn),t.disabled=!0):(t.classList.remove(this.selectors.disabledBtn),t.disabled=!1),i!==0&&(e==i||e>i?(n.classList.add(this.selectors.disabledBtn),n.disabled=!0):(n.classList.remove(this.selectors.disabledBtn),n.disabled=!1))};destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.spinBoxes?.forEach(e=>delete e.dataset.uispBound),this.spinBoxes=null,this.abortController=new AbortController}disableEl(e){let t=e.querySelector(`.${this.selectors.input}`),n=e.querySelectorAll(`.${this.selectors.btn}`);t&&(t.disabled=!0),n.forEach(e=>{e.classList.add(this.selectors.disabledBtn),e.disabled=!0}),e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=e.querySelector(`.${this.selectors.input}`);if(!n){this.debug&&console.warn(`UISpinBox: input not found`);return}n.value=String(t),n.dispatchEvent(new Event(`change`)),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIsp--flash`),e.offsetWidth,e.classList.add(`UIsp--flash`),n.addEventListener(`animationend`,()=>e.classList.remove(`UIsp--flash`),{once:!0}))}getValidDataNumber=(e,t)=>{let n=e.getAttribute(`data-${t}`);return n===null||n.trim()===``||isNaN(Number(n))?0:Number(n)};scan(){this.spinBoxes=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.spinBoxes.forEach(t=>{if(t.dataset.uispBound)return;t.dataset.uispBound=`1`;let n,r=t.querySelectorAll(`.${this.selectors.btn}`),i=t.querySelector(`.${this.selectors.input}`);this.debug&&(r||console.log(`Buttons (${this.selectors.btn}) not found in container`),i||console.log(`Input (${this.selectors.input}) not found in container`));let a=r[0],o=r[1];i.disabled=!1,[a,o].forEach(e=>{e.classList.remove(this.selectors.disabledBtn),e.disabled=!1}),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`);let s=t.hasAttribute(`data-decimals`)?this.getValidDataNumber(t,`decimals`):this.getValidDataNumber(t,`step`),c=Math.min(Math.max(Math.trunc(s),0),100),l=this.getValidDataNumber(t,`min`),u=this.getValidDataNumber(t,`max`);if(t.hasAttribute(`data-disabled`)){Number(i.value)<=l&&(i.value=l.toFixed(c)),u===0?i.value=Number(i.value).toFixed(c):Number(i.value)>=u&&(i.value=u.toFixed(c)),this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}let d=e=>{t.setAttribute(`aria-valuenow`,String(e)),t.setAttribute(`aria-valuetext`,`${e} items`)};Number(i.value)<=l&&(i.value=l.toFixed(c)),u===0?i.value=Number(i.value).toFixed(c):(Number(i.value)>=u&&(i.value=u.toFixed(c)),u&&t.setAttribute(`aria-valuemax`,u.toFixed(c))),l&&t.setAttribute(`aria-valuemin`,l.toFixed(c)),this.state(Number(i.value),a,o,l,u),d(i.value);let f=null,p=(e,t=1)=>{i.value=String(Math.abs(Number(i.value)));let n=parseFloat(i.value)||0;return n+=e*t/10**c,e===1&&u!==0&&n>u&&(n=u),e===-1&&n<l&&(n=l),i.value=n.toFixed(c),this.state(Number(i.value),a,o,l,u),d(i.value),i.value},m=(e,t=150)=>{f===null&&(f=window.setInterval(e,t))},h=()=>{f!==null&&(clearInterval(f),f=null)};o.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;m(()=>p(1,t))},{signal:e}),o.addEventListener(`touchstart`,()=>m(()=>p(1)),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{o.addEventListener(t,h,{signal:e})}),o.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;f===null&&(n=p(1,t),this.ripple(o),this.customEvent(i,n))},{signal:e}),a.addEventListener(`click`,e=>{let t=e.shiftKey?3:1;f===null&&(n=p(-1,t),this.ripple(a),this.customEvent(i,n))},{signal:e}),a.addEventListener(`mousedown`,e=>{let t=e.shiftKey?3:1;m(()=>p(-1,t),100)},{signal:e}),a.addEventListener(`touchstart`,()=>m(()=>p(-1),100),{signal:e}),[`mouseup`,`mouseleave`,`mouseout`,`touchend`,`touchcancel`].forEach(t=>{a.addEventListener(t,h,{signal:e})}),i.addEventListener(`keydown`,e=>{let t=e.key,n=e.shiftKey?5:1;if([`Backspace`,`Delete`,`ArrowLeft`,`ArrowRight`,`Tab`,`Enter`,`Home`,`End`].includes(t)||(e.ctrlKey||e.metaKey)&&[`a`,`c`,`v`,`x`].includes(t.toLowerCase()))return;if([`e`,`+`,`-`].includes(t)){e.preventDefault();return}if(t===`ArrowUp`||t===`ArrowDown`){e.preventDefault(),p(t===`ArrowUp`?1:-1,n);return}let r=t===`,`?`.`:t,a=/^[0-9]$/.test(r),o=r===`.`,s=i.value.includes(`.`);(c===0&&!a||c>0&&!(a||o)||o&&s)&&e.preventDefault()},{signal:e}),i.addEventListener(`keyup`,e=>{(e.key===`ArrowUp`||e.key===`ArrowDown`)&&this.customEvent(i,i.value)},{signal:e}),i.addEventListener(`change`,()=>{Number(i.value)<l&&(i.value=l.toFixed(c)),Number(i.value)>u&&u!==0?i.value=u.toFixed(c):i.value=Number(i.value).toFixed(c),this.state(Number(i.value),a,o,l,u),this.customEvent(i,i.value)},{signal:e})})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.log(`CustomEvent: data.detail `,n.detail),e.dispatchEvent(new CustomEvent(`ui-spinbox-change`,n))}},n=class{selectors;main=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIsw`,label:`UIsw-label`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiswBound),this.main=null,this.abortController=new AbortController}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiswBound)return;t.dataset.uiswBound=`1`;let n=t.querySelector(`.${this.selectors.label}`),r=t.querySelector(`input`);n&&n.id&&t.setAttribute(`aria-labelledby`,n.id),t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(r?.disabled??!1));let i=t.getAttribute(`data-originally-disabled`)===`true`;r&&(r.disabled=!1),t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),i&&(r&&(r.disabled=!0),t.setAttribute(`tabindex`,`-1`),t.setAttribute(`aria-disabled`,`true`),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e})),r&&(r.checked?t.setAttribute(`aria-checked`,`true`):t.setAttribute(`aria-checked`,`false`),r.addEventListener(`change`,()=>{t.setAttribute(`aria-checked`,String(r.checked)),this.customEvent(r,String(r.checked))},{signal:e}),t.addEventListener(`click`,e=>{if(e.target.tagName===`INPUT`)return;let n=e.target.closest(`label`);n||(r.checked=!r.checked),n||r.dispatchEvent(new Event(`change`));let i=t.querySelector(`.UIsw-slider`);i&&this.ripple(i)},{signal:e}),t.addEventListener(`keydown`,e=>{if(r.disabled)return;let n=null;if(e.key===`ArrowRight`?n=!0:e.key===`ArrowLeft`&&(n=!1),n!==null&&(e.preventDefault(),r.checked!==n)){r.checked=n,r.dispatchEvent(new Event(`change`));let e=t.querySelector(`.UIsw-slider`);e&&this.ripple(e)}},{signal:e}))})}setValue(e,t){this.main?.forEach(n=>{let r=n.querySelector(`input#${e}`);if(r){r.checked=t,this.debug&&console.log(`SetValue:`,r.checked),n.setAttribute(`aria-checked`,String(t)),this.customEvent(r,String(t));let e=n.querySelector(`.UIsw-slider`);e&&!n.closest(`.ui-no-flash`)&&(n.classList.remove(`UIsw--flash`),n.offsetWidth,n.classList.add(`UIsw--flash`),e.addEventListener(`animationend`,()=>n.classList.remove(`UIsw--flash`),{once:!0}))}})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-switch-change`,n))}},r=class e{selectors;main=null;itemArrowInitialized=new WeakSet;abortController=new AbortController;globalAbortController=new AbortController;debug;root;observer=null;rescanTimer=null;selectMap=new Map;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={idPrefix:`UI-option-`,main:`UIselect`,selected:`UIselect-selected`,arrow:`UIselect-arrow`,optionsList:`UIselect-options`,search:`UIselect-options__search`,items:`UIselect-options__items`,flash:`UIselect--flash`,excludedItems:[`divider`,`test`]};this.selectors={...r,...e},this.scan(),this.initGlobalListener(this.selectors),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}filterExcluded(e,t){return Array.from(e).filter(e=>!t.some(t=>typeof t==`string`?e.classList.contains(t)||e.id===t:e===t))}filterSearch(e,t){let n=t.trim().toLowerCase();return e.filter(e=>{let t=e.dataset.value?.toLowerCase()||``,r=e.textContent?.toLowerCase()||``;return t.includes(n)||r.includes(n)})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),e.closeAll(this.selectors),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uiselBound),this.selectMap.clear(),this.itemArrowInitialized=new WeakSet,this.main=null,this.abortController=new AbortController}dispose(){this.destroy(),this.globalAbortController.abort()}disableEl(e){e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-disabled`,`true`)}setValue(e,t){let n=this.selectMap.get(e);if(!n){this.debug&&console.warn(`UISelect: element not registered`);return}let{input:r,selected:i}=n,a=e.querySelector(`.${this.selectors.optionsList}`);if(!a)return;let o=Array.from(a.querySelectorAll(`.${this.selectors.items} ul li`)),s=this.filterExcluded(o,this.selectors.excludedItems),c=s.find(e=>String(e.dataset.value)===String(t));if(!c){this.debug&&console.warn(`UISelect: value "${t}" not found`);return}s.forEach(e=>e.removeAttribute(`aria-selected`)),c.setAttribute(`aria-selected`,`true`),i.textContent=c.textContent??``,r.value=String(t),r.setAttribute(`value`,String(t)),e.setAttribute(`aria-activedescendant`,c.id||`${this.selectors.idPrefix}${s.indexOf(c)}`),this.customEvent(e,String(t)),e.closest(`.ui-no-flash`)||(e.classList.remove(this.selectors.flash),e.offsetWidth,e.classList.add(this.selectors.flash),e.addEventListener(`animationend`,()=>e.classList.remove(this.selectors.flash),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uiselBound)return;let n=t.querySelector(`input[type='hidden']`);try{if(!n)throw Error(`<input type="hidden" name="YourUniqueId">`)}catch(e){return console.warn(`Not found:`,e.message)}t.dataset.uiselBound=`1`;let r=t.querySelector(`.${this.selectors.selected}`),i=t.querySelector(`.${this.selectors.arrow}`),a=t.querySelector(`.${this.selectors.optionsList}`),o=t.querySelector(`.${this.selectors.search} input`);if(t.setAttribute(`tabindex`,`0`),t.removeAttribute(`aria-disabled`),t.hasAttribute(`data-disabled`)){this.disableEl(t),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopImmediatePropagation()},{capture:!0,signal:e});return}this.selectMap.set(t,{input:n,selected:r}),i&&i.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),r.addEventListener(`click`,()=>{this.toggle(t,a)},{signal:e}),t.addEventListener(`click`,()=>{this.itemsPosition(a)},{signal:e});let s=a.querySelectorAll(`.${this.selectors.items} ul li`),c=this.filterExcluded(s,this.selectors.excludedItems),l=t.querySelector(`[aria-selected='true']`);l&&this.defaultSelect(t,l,r,n),o&&o.addEventListener(`input`,i=>{let o=i.target.value.trim(),l=o?new Set(this.filterSearch(c,o)):null;s.forEach(e=>{e.hidden=l?!l.has(e):!1}),this.itemArrow(t,a,r,n,e)},{signal:e}),this.itemArrow(t,a,r,n,e),this.items(t,a,c,r,n,e)})}itemArrow(e,t,n,r,i){if(this.itemArrowInitialized.has(e))return;this.itemArrowInitialized.add(e);let a=-1,o=n.textContent?n.textContent:``,s=e.querySelector(`.${this.selectors.search} input`);e.addEventListener(`keydown`,i=>{if(i.key===`Tab`){this.close(e,t);return}s&&s.focus();let c=Array.from(t.querySelectorAll(`.${this.selectors.optionsList} ul li`)),l=this.filterExcluded(c,this.selectors.excludedItems),u=l.length;if(u!==0)if(i.key===`ArrowDown`){i.preventDefault(),e.getAttribute(`aria-expanded`)===`false`&&this.toggle(e,t),a=(a+1)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let r=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,r),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`ArrowUp`){i.preventDefault(),a=(a-1+u)%u,n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let t=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,t),l[a].scrollIntoView({block:`nearest`})}else if(i.key===`Enter`)if(i.preventDefault(),a>=0){n.textContent=l[a].textContent,l.forEach(e=>e.removeAttribute(`aria-selected`)),l[a].setAttribute(`aria-selected`,`true`);let i=l[a].id||`${this.selectors.idPrefix}${a}`;e.setAttribute(`aria-activedescendant`,i),r.value=String(l[a].dataset.value),this.customEvent(e,r.value),this.close(e,t)}else this.toggle(e,t);else i.key===`Escape`&&(e.getAttribute(`aria-activedescendant`)||(n.textContent=o),this.close(e,t))},{signal:i})}itemsPosition(e){let t=e.querySelector(`[aria-selected="true"]`);t&&t.scrollIntoView({block:`nearest`})}items(e,t,n,r,i,a){n.forEach((o,s)=>{o.addEventListener(`click`,()=>{let a=n[s];if(a){r.textContent=a.textContent,n.forEach(e=>e.removeAttribute(`aria-selected`)),a.setAttribute(`aria-selected`,`true`);let o=a.id||`${this.selectors.idPrefix}${s}`;e.setAttribute(`aria-expanded`,`false`),e.setAttribute(`aria-activedescendant`,o),i.value=String(n[s].dataset.value),this.customEvent(e,i.value),this.close(e,t)}},{signal:a})})}defaultSelect(e,t,n,r){t&&(r.setAttribute(`value`,t.dataset.value??``),n.textContent=t.textContent??``,e.setAttribute(`aria-activedescendant`,t.id||``))}customEvent(e,t){let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.log(`CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-select-change`,n))}toggle(t,n){e.closeAll(this.selectors),n.hidden?(n.hidden=!1,t.setAttribute(`aria-expanded`,`true`)):this.close(t,n)}close(e,t){t.hidden=!0,e.setAttribute(`aria-expanded`,`false`)}static closeAll(e){document.querySelectorAll(`.${e.main}`).forEach(t=>{let n=t.querySelector(`.${e.optionsList}`);n.hidden=!0,t.setAttribute(`aria-expanded`,`false`)})}initGlobalListener(t){document.addEventListener(`click`,n=>{let r=n.target;[...document.querySelectorAll(`.${t.main}`)].some(e=>e.contains(r))||e.closeAll(t)},{signal:this.globalAbortController.signal})}},i=class{selectors;main=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIbg`,btn:`UIbg-btn`,input:`UIbg-input`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.main?.forEach(e=>delete e.dataset.uibgBound),this.main=null,this.abortController=new AbortController}setValue(e,t){let n=e.querySelectorAll(`.${this.selectors.input}`),r=e.querySelectorAll(`.${this.selectors.btn}`),i=Array.from(n).findIndex(e=>e.value===t&&!e.disabled);if(i===-1){this.debug&&console.warn(`UIButtonGroup: value "${t}" not found or disabled`);return}n.forEach((e,t)=>{e.checked=t===i,t===i?e.setAttribute(`checked`,``):e.removeAttribute(`checked`)}),r.forEach((e,t)=>{e.setAttribute(`aria-checked`,String(t===i)),e.setAttribute(`tabindex`,t===i?`0`:`-1`)}),this.customEvent(n[i]);let a=r[i];a&&!e.closest(`.ui-no-flash`)&&(a.classList.remove(`UIbg--flash`),a.offsetWidth,a.classList.add(`UIbg--flash`),a.addEventListener(`animationend`,()=>a.classList.remove(`UIbg--flash`),{once:!0}))}scan(){this.main=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.main.forEach(t=>{if(t.dataset.uibgBound)return;t.dataset.uibgBound=`1`,t.querySelectorAll(`.${this.selectors.input}`).forEach(e=>{e.hasAttribute(`data-originally-disabled`)||e.setAttribute(`data-originally-disabled`,String(e.disabled)),e.disabled=e.getAttribute(`data-originally-disabled`)===`true`}),t.removeAttribute(`aria-disabled`);let n=t.querySelector(`.${this.selectors.input}:checked`);n&&this.customEvent(n);let r=t.querySelectorAll(`.${this.selectors.btn}`);r.forEach(t=>{t.addEventListener(`click`,()=>{r.forEach(e=>{e.setAttribute(`aria-checked`,`false`),e.setAttribute(`tabindex`,`-1`)}),t.setAttribute(`aria-checked`,`true`),t.setAttribute(`tabindex`,`0`),t.focus(),this.ripple(t)},{signal:e}),t.addEventListener(`keydown`,e=>{let n=Array.from(r).indexOf(t);if(e.key===`ArrowRight`&&n++,e.key===`ArrowLeft`&&n--,n<0&&(n=r.length-1),n>=r.length&&(n=0),e.key===`Enter`){let t=i[n];t&&!t.disabled&&(i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),t.checked=!0,t.setAttribute(`checked`,``),this.customEvent(t)),e.preventDefault();return}let a=r[n];a&&(r.forEach(e=>e.setAttribute(`tabindex`,`-1`)),a.setAttribute(`tabindex`,`0`),a.focus())},{signal:e})});let i=t.querySelectorAll(`.${this.selectors.input}`);i.forEach((t,n)=>{this.debug&&(t.id||console.error(`Input #${n} in group has no ID!`),(!t.value||t.value===`on`)&&console.warn(`Input #${t.id} does not have a value specified (currently "${t.value}")`));let a=r[n];a&&(t.tabIndex=-1,a.setAttribute(`role`,`radio`),a.setAttribute(`aria-checked`,String(t.checked)),a.setAttribute(`tabindex`,t.checked?`0`:`-1`),t.disabled?a.setAttribute(`aria-disabled`,`true`):a.removeAttribute(`aria-disabled`),t.addEventListener(`click`,()=>{i.forEach(e=>{e.checked=!1,e.removeAttribute(`checked`)}),i[n].checked=!0,i[n].setAttribute(`checked`,``),this.customEvent(t)},{signal:e}))});let a=Array.from(i).find(e=>e.checked&&!e.disabled)||Array.from(i).find(e=>!e.disabled);if(a){let e=t.querySelector(`label[for="${a.id}"]`);e&&e.setAttribute(`tabindex`,`0`)}})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`ui-ripple`),e.offsetWidth,e.classList.add(`ui-ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`ui-ripple`),{once:!0}))}customEvent(e){let t={detail:{id:e.id,value:e.value},bubbles:!0};this.debug&&console.log(`CustomEvent:`,t.detail),e.dispatchEvent(new CustomEvent(`ui-button-group-change`,t))}},a=class{selectors;buttons=null;abortController=new AbortController;debug;root;observer=null;rescanTimer=null;constructor(e={},t=!1,n={}){this.debug=t,this.root=n.root??document;let r={main:`UIb`};this.selectors={...r,...e},this.scan(),n.observe&&this.observe()}observe(){let e=this.root===document?document.body:this.root;this.observer=new MutationObserver(()=>{this.rescanTimer===null&&(this.rescanTimer=window.setTimeout(()=>{this.rescanTimer=null,this.scan()},50))}),this.observer.observe(e,{childList:!0,subtree:!0})}setValue(e,t,n){e.dataset.value=t,e.tagName===`A`&&(e.href=t),n!==void 0&&(e.textContent=n),!e.closest(`.ui-no-flash`)&&(e.classList.remove(`UIb--flash`),e.offsetWidth,e.classList.add(`UIb--flash`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--flash`),{once:!0}))}destroy(){this.observer?.disconnect(),this.observer=null,this.rescanTimer!==null&&(clearTimeout(this.rescanTimer),this.rescanTimer=null),this.abortController.abort(),this.buttons?.forEach(e=>delete e.dataset.uibBound),this.buttons=null,this.abortController=new AbortController}disableEl(e){e.tagName===`BUTTON`?e.disabled=!0:(e.setAttribute(`aria-disabled`,`true`),e.setAttribute(`tabindex`,`-1`))}enableEl(e){e.tagName===`BUTTON`?e.disabled=!1:(e.removeAttribute(`aria-disabled`),e.setAttribute(`tabindex`,`0`))}isDisabled(e){return e.tagName===`BUTTON`?e.disabled:e.getAttribute(`aria-disabled`)===`true`}setDisabled(e,t){e.setAttribute(`data-originally-disabled`,String(t)),t?this.disableEl(e):this.enableEl(e)}scan(){this.buttons=this.root.querySelectorAll(`.${this.selectors.main}`);let e=this.abortController.signal;this.buttons.forEach(t=>{t.dataset.uibBound||(t.dataset.uibBound=`1`,t.hasAttribute(`data-originally-disabled`)||t.setAttribute(`data-originally-disabled`,String(this.isDisabled(t))),t.getAttribute(`data-originally-disabled`)===`true`?this.disableEl(t):this.enableEl(t),t.addEventListener(`click`,e=>{if(this.isDisabled(t)){e.preventDefault(),e.stopImmediatePropagation();return}t.tagName===`A`&&e.preventDefault(),this.ripple(t),this.customEvent(t,String(t.dataset.value))},{signal:e}))})}ripple(e){e.closest(`.ui-no-ripple`)||(e.classList.remove(`UIb--ripple`),e.offsetWidth,e.classList.add(`UIb--ripple`),e.addEventListener(`animationend`,()=>e.classList.remove(`UIb--ripple`),{once:!0}))}customEvent(e,t){if(!t||t===`undefined`||t.trim()===``){console.warn(`Button data-value="" Not set!`);return}let n={detail:{id:e.id,value:t},bubbles:!0};this.debug&&console.info(`Button CustomEvent:`,n.detail),e.dispatchEvent(new CustomEvent(`ui-button-change`,n))}},o=null,s=null,c=null,l=null,u=null;function d(...e){return o??=new a(...e)}function f(...e){return u??=new i(...e)}function p(...e){return s??=new r(...e)}function m(...e){return c??=new t(...e)}function h(...e){return l??=new n(...e)}function g(){o=null,s=null,c=null,l=null,u=null}e.Button=a,e.ButtonGroup=i,e.Select=r,e.SpinBox=t,e.Switch=n,e.getButtonGroupManager=f,e.getButtonManager=d,e.getSelectManager=p,e.getSpinBoxManager=m,e.getSwitchManager=h,e.resetManagers=g});
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .UIbg{--bg-50:var(--c-g-50);--bg-100:var(--c-g-100);--bg-300:var(--c-g-300);--bg-500:var(--c-g-500);--bg-700:var(--c-g-700);--bg-950:var(--c-g-950);grid-auto-columns:minmax(min-content,1fr);grid-auto-flow:column;align-content:center;gap:.5rem;display:grid}.UIbg.vertical{grid-auto-rows:min-content;grid-auto-flow:row}.UIbg-input{opacity:0;pointer-events:none;position:absolute}.UIbg-input:checked+.UIbg-btn{background-color:var(--bg-700);border-color:var(--bg-950);color:var(--bg-50)}.UIbg-input:disabled+.UIbg-btn{background-color:var(--bg-100);border-color:var(--bg-100);color:var(--bg-300);cursor:not-allowed}.UIbg-input:not(:disabled)+.UIbg-btn:hover{background-color:var(--bg-700);border-color:var(--bg-700);color:var(--bg-50)}.UIbg>.UIbg-btn{cursor:pointer;background-color:var(--bg-100);border:1px solid var(--bg-500);height:2.5rem;color:var(--bg-950);border-radius:.5rem;justify-content:center;align-items:center;padding:.125rem;font-size:1rem;transition:all .4s,color .4s;display:flex;position:relative;overflow:hidden}.UIbg>.UIbg-btn:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--bg-500) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIbg>.UIbg-btn.ui-ripple:after{animation:1s ease-out forwards ui-ripple}.UIbg>.UIbg-btn:hover:not([aria-disabled=true]){background-color:var(--bg-700);border-color:var(--bg-700);color:var(--bg-950)}.UIbg>.UIbg-btn.UIbg--flash{--flash-start:var(--bg-50);--flash-mid:var(--bg-700);--flash-end:var(--bg-950);animation:.4s ease-out ui-flash}.UIbg.r-0>.UIbg-btn{border-radius:0}.UIbg.r-round>.UIbg-btn{border-radius:2.5rem}.UIbg.r-round.g-0>.UIbg-btn:first-of-type{border-radius:2.5rem 0 0 2.5rem}.UIbg.r-round.g-0>.UIbg-btn:last-of-type{border-radius:0 2.5rem 2.5rem 0}.UIbg.g-0{gap:0}.UIbg.g-0>.UIbg-btn{border:0;border-radius:0}.UIbg.g-1{gap:1rem}.UIbg.sm>.UIbg-btn{height:2rem;font-size:.9rem}.UIbg.lg>.UIbg-btn{height:3rem;font-size:1.1rem}.UIbg[aria-disabled=true]{opacity:.5;pointer-events:none;cursor:not-allowed}.UIbg.border{border:1px solid var(--bg-100);border-radius:.5rem;padding:5px}.UIbg.border:hover:not([aria-disabled=true]){border-color:var(--bg-700)}.UIbg.border.r-0{border-radius:0}.UIbg.border.r-round{border-radius:2.5rem}.UIbg.danger{--bg-50:var(--c-d-50);--bg-100:var(--c-d-100);--bg-300:var(--c-d-300);--bg-500:var(--c-d-500);--bg-700:var(--c-d-700);--bg-950:var(--c-d-950)}.UIbg.info{--bg-50:var(--c-i-50);--bg-100:var(--c-i-100);--bg-300:var(--c-i-300);--bg-500:var(--c-i-500);--bg-700:var(--c-i-700);--bg-950:var(--c-i-950)}.UIbg.primary{--bg-50:var(--c-p-50);--bg-100:var(--c-p-100);--bg-300:var(--c-p-300);--bg-500:var(--c-p-500);--bg-700:var(--c-p-700);--bg-950:var(--c-p-950)}.UIbg.success{--bg-50:var(--c-s-50);--bg-100:var(--c-s-100);--bg-300:var(--c-s-300);--bg-500:var(--c-s-500);--bg-700:var(--c-s-700);--bg-950:var(--c-s-950)}.UIbg.warning{--bg-50:var(--c-w-50);--bg-100:var(--c-w-100);--bg-300:var(--c-w-300);--bg-500:var(--c-w-500);--bg-700:var(--c-w-700);--bg-950:var(--c-w-950)}.UIb{--b-50:var(--c-g-50);--b-100:var(--c-g-100);--b-300:var(--c-g-300);--b-500:var(--c-g-500);--b-700:var(--c-g-700);--b-950:var(--c-g-950);grid-auto-flow:column;grid-auto-columns:minmax(min-content);cursor:pointer;background-color:var(--b-100);border:1px solid var(--b-500);height:2.5rem;color:var(--b-950);border-radius:.5rem;justify-content:center;align-items:center;gap:.5rem;padding:.125rem .75rem;font-size:1rem;transition:background-color .4s,color .1s;display:flex;position:relative;overflow:hidden}.UIb:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--b-500) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIb.UIb--ripple:after{animation:1s ease-out forwards ui-ripple}.UIb.UIb--flash{--flash-start:var(--b-50);--flash-mid:var(--b-700);--flash-end:var(--b-950);animation:.4s ease-out ui-flash}.UIb:hover:not(:disabled){background-color:var(--b-700);border-color:var(--b-700);color:var(--b-50)}.UIb:disabled,.UIb[aria-disabled=true]{background-color:var(--b-100);border-color:var(--b-100);color:var(--b-300);cursor:not-allowed;pointer-events:none}.UIb.expand{width:100%}.UIb.between{justify-content:space-between}.UIb.around{justify-content:space-around}.UIb.r-0{border-radius:0}.UIb.r-round{border-radius:2.5rem}.UIb.g-0{gap:0}.UIb.g-1{gap:1rem}.UIb.sm{height:2rem;font-size:.9rem}.UIb.lg{height:3rem;font-size:1.1rem}.UIb.danger{--b-50:var(--c-d-50);--b-100:var(--c-d-100);--b-300:var(--c-d-300);--b-500:var(--c-d-500);--b-700:var(--c-d-700);--b-950:var(--c-d-950)}.UIb.info{--b-50:var(--c-i-50);--b-100:var(--c-i-100);--b-300:var(--c-i-300);--b-500:var(--c-i-500);--b-700:var(--c-i-700);--b-950:var(--c-i-950)}.UIb.primary{--b-50:var(--c-p-50);--b-100:var(--c-p-100);--b-300:var(--c-p-300);--b-500:var(--c-p-500);--b-700:var(--c-p-700);--b-950:var(--c-p-950)}.UIb.success{--b-50:var(--c-s-50);--b-100:var(--c-s-100);--b-300:var(--c-s-300);--b-500:var(--c-s-500);--b-700:var(--c-s-700);--b-950:var(--c-s-950)}.UIb.warning{--b-50:var(--c-w-50);--b-100:var(--c-w-100);--b-300:var(--c-w-300);--b-500:var(--c-w-500);--b-700:var(--c-w-700);--b-950:var(--c-w-950)}.UIsp{--sp-50:var(--c-g-50);--sp-100:var(--c-g-100);--sp-300:var(--c-g-300);--sp-500:var(--c-g-500);--sp-700:var(--c-g-700);--sp-950:var(--c-g-950);grid-template-columns:min-content 1fr min-content;align-self:end;align-items:end;width:13rem;display:grid}.UIsp.UIsp--flash>.UIsp__btn,.UIsp.UIsp--flash>.UIsp__input{--flash-start:var(--sp-50);--flash-mid:var(--sp-700);--flash-end:var(--sp-950);animation:.4s ease-out ui-flash}.UIsp>.UIsp-label{grid-column:1/-1;padding:0 0 .075rem .25rem;font-size:1rem}.UIsp>.UIsp__input{text-align:center;background-color:var(--sp-50);height:2.5rem;color:var(--sp-700);border:none;border-top:1px solid var(--sp-500);border-bottom:1px solid var(--sp-500);box-sizing:border-box;outline:none;width:100%;min-width:3rem;padding:0;font-size:1.5rem;font-weight:700}.UIsp>.UIsp__input:focus{background-color:var(--sp-50);color:var(--sp-950)}.UIsp>.UIsp__input:disabled{opacity:.5;cursor:not-allowed}.UIsp__txt{font-weight:400}.UIsp>.UIsp__btn{cursor:pointer;background-color:var(--sp-100);border:none;border:1px solid var(--sp-500);width:3rem;height:2.5rem;color:var(--sp-950);border-radius:.5rem 0 0 .5rem;justify-content:center;align-items:center;padding:0;font-size:2rem;transition:background-color .4s,color .1s;display:flex;position:relative;overflow:hidden}.UIsp>.UIsp__btn:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--sp-500) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIsp>.UIsp__btn.ui-ripple:after{animation:1s ease-out forwards ui-ripple}.UIsp>.UIsp__btn:hover{background-color:var(--sp-700);color:var(--sp-50)}.UIsp>.disabled{background-color:var(--sp-100);border-color:var(--sp-500);color:var(--sp-300);pointer-events:none}.UIsp[aria-disabled=true]{opacity:.5;pointer-events:none;cursor:not-allowed}.UIsp>.UIsp__btn:first-of-type{border-radius:.5rem 0 0 .5rem}.UIsp>.UIsp__btn:last-of-type{border-radius:0 .5rem .5rem 0}.UIsp.r-0>.UIsp__btn{border-radius:0}.UIsp.r-round>.UIsp__btn:first-of-type{border-radius:1.5rem 0 0 1.5rem}.UIsp.r-round>.UIsp__btn:last-of-type{border-radius:0 1.5rem 1.5rem 0}.UIsp.sm{width:10rem}.UIsp.sm>.UIsp-label{padding:0 0 0 .125rem;font-size:.8rem}.UIsp.sm>.UIsp__input,.UIsp.sm>.UIsp__btn{height:2rem;font-size:1rem}.UIsp.sm>.UIsp__btn{width:2rem}.UIsp.lg{width:16rem}.UIsp.lg>.UIsp__input,.UIsp.lg>.UIsp__btn{height:3rem;font-size:2rem}.UIsp.lg>.UIsp__btn{width:3rem}.UIsp.danger{--sp-50:var(--c-d-50);--sp-100:var(--c-d-100);--sp-300:var(--c-d-300);--sp-500:var(--c-d-500);--sp-700:var(--c-d-700);--sp-950:var(--c-d-950)}.UIsp.info{--sp-50:var(--c-i-50);--sp-100:var(--c-i-100);--sp-300:var(--c-i-300);--sp-500:var(--c-i-500);--sp-700:var(--c-i-700);--sp-950:var(--c-i-950)}.UIsp.primary{--sp-50:var(--c-p-50);--sp-100:var(--c-p-100);--sp-300:var(--c-p-300);--sp-500:var(--c-p-500);--sp-700:var(--c-p-700);--sp-950:var(--c-p-950)}.UIsp.success{--sp-50:var(--c-s-50);--sp-100:var(--c-s-100);--sp-300:var(--c-s-300);--sp-500:var(--c-s-500);--sp-700:var(--c-s-700);--sp-950:var(--c-s-950)}.UIsp.warning{--sp-50:var(--c-w-50);--sp-100:var(--c-w-100);--sp-300:var(--c-w-300);--sp-500:var(--c-w-500);--sp-700:var(--c-w-700);--sp-950:var(--c-w-950)}.UIselect{--sl-50:var(--c-g-50);--sl-100:var(--c-g-100);--sl-300:var(--c-g-300);--sl-500:var(--c-g-500);--sl-700:var(--c-g-700);--sl-900:var(--c-g-900);--sl-950:var(--c-g-950);--sl-item-hover-bg:var(--sl-500);--sl-item-hover-color:var(--sl-50);--sl-item-sel-bg:var(--sl-300);--sl-item-sel-color:var(--sl-950);background-color:var(--sl-500);cursor:pointer;box-sizing:border-box;white-space:nowrap;border-radius:.5rem;align-self:end;width:12rem;min-width:10rem;height:2.5rem;display:flex;position:relative}.UIselect:hover{background-color:var(--sl-700)}.UIselect:hover .UIselect-selected,.UIselect:hover .UIselect-arrow{background-color:var(--sl-700);color:var(--sl-50)}.UIselect-selected{background-color:var(--sl-100);color:var(--sl-900);border-radius:.5rem;align-items:center;width:100%;height:calc(100% - 2px);margin:1px;padding:0 .5rem;display:flex;overflow:hidden}.UIselect-selected>span{white-space:nowrap;text-align:center;max-width:100%;display:inline-block;overflow:hidden}.UIselect-selected.center>span{text-align:left;max-width:100%;margin:0 auto}.UIselect-arrow{background-color:var(--sl-100);width:2rem;height:calc(100% - 4px);color:var(--sl-700);border-radius:.5rem;place-content:center;align-items:center;margin:2px 5px;font-size:.8rem;position:absolute;top:0;right:0}.UIselect-arrow>svg{margin:0 auto;display:flex}.UIselect-options{width:inherit;background-color:var(--sl-100);color:var(--sl-950);z-index:2;box-sizing:border-box;border:1px solid var(--sl-500);border-radius:.5rem;margin:0;padding:0;list-style:none;position:absolute;left:0;overflow:hidden}.UIselect-options__search{padding:1px 2px;position:sticky;top:1px}.UIselect-options__search>input{width:100%;height:inherit;border:1px solid var(--sl-300);box-shadow:none;background-color:var(--sl-50);color:var(--sl-950);border-radius:.5rem;padding:0 7px;font-size:1.5rem}.UIselect-options__search>input:focus-visible{outline:none}.UIselect-options__items{max-height:20rem;overflow-y:auto}.UIselect-options__items>ul{margin:0;padding:0;list-style:none}.UIselect-options__items>ul>li{border-radius:.5rem;align-items:center;height:2.5rem;margin:1px;padding:0 .5rem;display:flex}.UIselect-options__items>ul>li:hover{background-color:var(--sl-item-hover-bg);color:var(--sl-item-hover-color)}.UIselect-options__items>ul>li[aria-selected=true]{background-color:var(--sl-item-sel-bg);color:var(--sl-item-sel-color)}.UIselect-options__items>ul>li.divider{background-color:var(--sl-300);height:1px;margin:0 .25rem}.UIselect.r-0,.UIselect.r-0>.UIselect-selected,.UIselect.r-0>.UIselect-options,.UIselect.r-0>.UIselect-options>li.UIselect-options__search,.UIselect.r-0>.UIselect-options>li.UIselect-options__search>input,.UIselect.r-0>.UIselect-options>li>ul>li{border-radius:0}.UIselect.r-1,.UIselect.r-1>.UIselect-selected,.UIselect.r-1>.UIselect-arrow{border-radius:1.5rem}.UIselect.lg{width:16rem;min-width:12rem;height:3rem;font-size:1.1rem}.UIselect.lg>.UIselect-selected{overflow:hidden}.UIselect.lg .UIselect-options__search>input{height:3rem;font-size:1.7rem}.UIselect.lg .UIselect-options__items{max-height:25rem}.UIselect.lg .UIselect-options__items>ul>li{height:3rem}.UIselect.lg .UIselect-options__items>ul>li.divider{height:1px;margin:0 .5rem}.UIselect.sm{width:10rem;min-width:8rem;height:2rem;font-size:.9rem}.UIselect.sm .UIselect-options__search>input{height:2rem;font-size:1rem}.UIselect.sm .UIselect-options__items{max-height:15rem}.UIselect.sm .UIselect-options__items>ul>li{height:2rem}.UIselect.sm .UIselect-options__items>ul>li.divider{height:1px;margin:0 .25rem}.UIselect.expand{width:100%}.UIselect.UIselect--flash{--flash-start:var(--sl-50);--flash-mid:var(--sl-700);--flash-end:var(--sl-950);animation:.4s ease-out ui-flash}.UIselect[aria-disabled=true]{pointer-events:none;opacity:.5;cursor:not-allowed}.UIselect.danger{--sl-50:var(--c-d-50);--sl-100:var(--c-d-100);--sl-300:var(--c-d-300);--sl-500:var(--c-d-500);--sl-700:var(--c-d-700);--sl-900:var(--c-d-900);--sl-950:var(--c-d-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.info{--sl-50:var(--c-i-50);--sl-100:var(--c-i-100);--sl-300:var(--c-i-300);--sl-500:var(--c-i-500);--sl-700:var(--c-i-700);--sl-900:var(--c-i-900);--sl-950:var(--c-i-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.primary{--sl-50:var(--c-p-50);--sl-100:var(--c-p-100);--sl-300:var(--c-p-300);--sl-500:var(--c-p-500);--sl-700:var(--c-p-700);--sl-900:var(--c-p-900);--sl-950:var(--c-p-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.success{--sl-50:var(--c-s-50);--sl-100:var(--c-s-100);--sl-300:var(--c-s-300);--sl-500:var(--c-s-500);--sl-700:var(--c-s-700);--sl-900:var(--c-s-900);--sl-950:var(--c-s-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.warning{--sl-50:var(--c-w-50);--sl-100:var(--c-w-100);--sl-300:var(--c-w-300);--sl-500:var(--c-w-500);--sl-700:var(--c-w-700);--sl-900:var(--c-w-900);--sl-950:var(--c-w-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIsw{--sw-50:var(--c-g-50);--sw-100:var(--c-g-100);--sw-300:var(--c-g-300);--sw-700:var(--c-g-700);--sw-950:var(--c-g-950);align-items:center;gap:1.5rem;display:inline-flex;position:relative}.UIsw-label{cursor:pointer;-webkit-user-select:none;user-select:none}.UIsw-label:hover{color:var(--sw-700)}.UIsw>input[type=checkbox]{display:none}.UIsw-slider{background-color:var(--sw-100);cursor:pointer;border:1px solid var(--sw-300);border-radius:1.5rem;width:5rem;height:2.5rem;transition:background-color .4s,border-color .4s;position:relative;overflow:hidden}.UIsw-slider:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--sw-700) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIsw-slider.ui-ripple:after{animation:1s ease-out forwards ui-ripple}.UIsw-slider:before{z-index:1;content:"";background-color:var(--sw-300);border-radius:1.5rem;width:2.5rem;height:2.5rem;transition:transform .1s;position:absolute;left:0}.UIsw-slider:hover{border-color:var(--sw-50);color:var(--sw-300)}.UIsw-slider:hover~.UIsw-slider__on,.UIsw-slider:hover~.UIsw-slider__off{color:var(--sw-300);transition:color .4s}.UIsw-slider__on,.UIsw-slider__off{color:var(--sw-950);cursor:pointer;transition:color .4s;position:absolute;right:3rem}.UIsw-slider__on:hover,.UIsw-slider__off:hover{color:var(--sw-300)}.UIsw-slider__off{color:var(--sw-700);right:.7rem}.UIsw.UIsw--flash>.UIsw-slider{--flash-start:var(--sw-50);--flash-mid:var(--sw-700);--flash-end:var(--sw-950);animation:.4s ease-out ui-flash}.UIsw[aria-disabled=true]{opacity:.5;pointer-events:none;cursor:not-allowed}.UIsw:has(>input:disabled){opacity:.5;pointer-events:none;cursor:not-allowed}.UIsw>input[type=checkbox]:checked~.UIsw-slider{background-color:var(--sw-100);border-color:var(--sw-700)}.UIsw>input[type=checkbox]:checked~.UIsw-slider:before{background-color:var(--sw-700);transform:translate(2.5rem)}.UIsw>input[type=checkbox]:checked~.UIsw-slider:hover{border-color:var(--sw-50)}.UIsw:has(.UIsw-slider__on:hover,.UIsw-slider__off:hover) .UIsw-slider{border-color:var(--sw-50)}.UIsw>input[type=checkbox]:checked:has(~.UIsw-slider__on:hover,~.UIsw-slider__off:hover)~.UIsw-slider{border-color:var(--sw-50)}.UIsw.lg>.UIsw-slider{width:6rem;height:3rem}.UIsw.lg>.UIsw-slider:before{border-radius:1.5rem;width:3rem;height:3rem}.UIsw.lg>.UIsw-slider__on{font-size:1.2rem;right:3.8rem}.UIsw.lg>.UIsw-slider__off{font-size:1.2rem;right:1rem}.UIsw.lg>input[type=checkbox]:checked~.UIsw-slider:before{transform:translate(3rem)}.UIsw.sm{gap:1rem}.UIsw.sm>.UIsw-slider{width:4rem;height:2rem}.UIsw.sm>.UIsw-slider:before{border-radius:1.5rem;width:2rem;height:2rem}.UIsw.sm>.UIsw-slider__on,.UIsw.sm>.UIsw-slider__off{font-size:.9rem;right:2.5rem}.UIsw.sm>.UIsw-slider__off{right:.6rem}.UIsw.sm>input[type=checkbox]:checked~.UIsw-slider:before{transform:translate(2rem)}.UIsw.xsm{gap:.5rem}.UIsw.xsm>.UIsw-slider{width:2rem;height:1rem}.UIsw.xsm>.UIsw-slider:before{border-radius:1.5rem;width:1rem;height:1rem}.UIsw.xsm>.UIsw-slider__on,.UIsw.xsm>.UIsw-slider__off{font-size:.6rem;right:1.2rem}.UIsw.xsm>.UIsw-slider__off{right:.3rem}.UIsw.xsm>input[type=checkbox]:checked~.UIsw-slider:before{transform:translate(1rem)}.UIsw.r-0>.UIsw-slider,.UIsw.r-0>.UIsw-slider:before{border-radius:0}.UIsw.r-1>.UIsw-slider,.UIsw.r-1>.UIsw-slider:before{border-radius:.5rem}.UIsw.danger{--sw-50:var(--c-d-50);--sw-100:var(--c-d-100);--sw-300:var(--c-d-300);--sw-700:var(--c-d-700);--sw-950:var(--c-d-950)}.UIsw.info{--sw-50:var(--c-i-50);--sw-100:var(--c-i-100);--sw-300:var(--c-i-300);--sw-700:var(--c-i-700);--sw-950:var(--c-i-950)}.UIsw.success{--sw-50:var(--c-s-50);--sw-100:var(--c-s-100);--sw-300:var(--c-s-300);--sw-700:var(--c-s-700);--sw-950:var(--c-s-950)}.UIsw.primary{--sw-50:var(--c-p-50);--sw-100:var(--c-p-100);--sw-300:var(--c-p-300);--sw-700:var(--c-p-700);--sw-950:var(--c-p-950)}.UIsw.warning{--sw-50:var(--c-w-50);--sw-100:var(--c-w-100);--sw-300:var(--c-w-300);--sw-700:var(--c-w-700);--sw-950:var(--c-w-950)}.UIsw.warning>.UIsw-slider__off{color:var(--sw-300)}:root{--g-50:#f2f2f2;--g-100:#e6e6e6;--g-300:#b3b3b3;--g-500:gray;--g-700:#4d4d4d;--g-900:#1a1a1a;--g-950:#0d0d0d;--d-50:#ffe6ea;--d-100:#ffccd5;--d-300:#ff6680;--d-500:#ff002b;--d-700:#99001a;--d-900:#330009;--d-950:#1a0004;--i-50:#e7f8fe;--i-100:#cff1fc;--i-300:#6ed5f7;--i-500:#0db9f2;--i-700:#086f91;--i-900:#032530;--i-950:#011218;--p-50:#ececf9;--p-100:#d9d9f2;--p-300:#8c8cd9;--p-500:#4040bf;--p-700:#262673;--p-900:#0d0d26;--p-950:#060613;--s-50:#e9fbf2;--s-100:#d4f7e6;--s-300:#7de8b3;--s-500:#26d980;--s-700:#17824d;--s-900:#082b1a;--s-950:#04160d;--w-50:#fcf7e9;--w-100:#f9efd2;--w-300:#eccf79;--w-500:#dfaf20;--w-700:#866913;--w-900:#2d2306;--w-950:#161203;--c-d-50:var(--d-50);--c-d-100:var(--d-100);--c-d-300:var(--d-300);--c-d-500:var(--d-500);--c-d-700:var(--d-700);--c-d-900:var(--d-900);--c-d-950:var(--d-950);--c-i-50:var(--i-50);--c-i-100:var(--i-100);--c-i-300:var(--i-300);--c-i-500:var(--i-500);--c-i-700:var(--i-700);--c-i-900:var(--i-900);--c-i-950:var(--i-950);--c-p-50:var(--p-50);--c-p-100:var(--p-100);--c-p-300:var(--p-300);--c-p-500:var(--p-500);--c-p-700:var(--p-700);--c-p-900:var(--p-900);--c-p-950:var(--p-950);--c-s-50:var(--s-50);--c-s-100:var(--s-100);--c-s-300:var(--s-300);--c-s-500:var(--s-500);--c-s-700:var(--s-700);--c-s-900:var(--s-900);--c-s-950:var(--s-950);--c-g-50:var(--g-50);--c-g-100:var(--g-100);--c-g-300:var(--g-300);--c-g-500:var(--g-500);--c-g-700:var(--g-700);--c-g-900:var(--g-900);--c-g-950:var(--g-950);--c-w-50:var(--w-50);--c-w-100:var(--w-100);--c-w-300:var(--w-300);--c-w-500:var(--w-500);--c-w-700:var(--w-700);--c-w-900:var(--w-900);--c-w-950:var(--w-950)}body{background-color:var(--c-g-50);color:var(--c-g-950);padding:0;transition:background .4s}html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{margin:.67em 0;font-size:2em}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace;font-size:1em}a{color:inherit;background-color:#0000;text-decoration:none}img{border-style:none}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}fieldset{border:1px solid silver;margin:0;padding:.35em .75em .625em}legend{padding:0}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}table{border-collapse:collapse;border-spacing:0}@keyframes ui-ripple{0%{opacity:1;transform:scale(0)}to{opacity:0;transform:scale(5)}}@keyframes ui-flash{0%{box-shadow:0 0 0 0 var(--flash-start)}50%{box-shadow:0 0 5px 1px var(--flash-mid)}to{box-shadow:0 0 0 0 var(--flash-end)}}.UIFlash{--flash-start:var(--c-g-50);--flash-mid:var(--c-g-700);--flash-end:var(--c-g-950);animation:.4s ease-out ui-flash}
1
+ .UIbg{--bg-50:var(--c-g-50);--bg-100:var(--c-g-100);--bg-300:var(--c-g-300);--bg-500:var(--c-g-500);--bg-700:var(--c-g-700);--bg-950:var(--c-g-950);grid-auto-columns:minmax(min-content,1fr);grid-auto-flow:column;align-content:center;gap:.5rem;display:grid}.UIbg.vertical{grid-auto-rows:min-content;grid-auto-flow:row}.UIbg-input{opacity:0;pointer-events:none;position:absolute}.UIbg-input:checked+.UIbg-btn{background-color:var(--bg-700);border-color:var(--bg-950);color:var(--bg-50)}.UIbg-input:disabled+.UIbg-btn{background-color:var(--bg-100);border-color:var(--bg-100);color:var(--bg-300);cursor:not-allowed}.UIbg-input:not(:disabled)+.UIbg-btn:hover{background-color:var(--bg-700);border-color:var(--bg-700);color:var(--bg-50)}.UIbg>.UIbg-btn{cursor:pointer;background-color:var(--bg-100);border:1px solid var(--bg-500);height:2.5rem;color:var(--bg-950);border-radius:.5rem;justify-content:center;align-items:center;padding:.125rem;font-size:1rem;transition:all .4s,color .4s;display:flex;position:relative;overflow:hidden}.UIbg>.UIbg-btn:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--bg-500) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIbg>.UIbg-btn.ui-ripple:after{animation:1s ease-out forwards ui-ripple}.UIbg>.UIbg-btn:hover:not([aria-disabled=true]){background-color:var(--bg-700);border-color:var(--bg-700);color:var(--bg-950)}.UIbg>.UIbg-btn.UIbg--flash{--flash-start:var(--bg-50);--flash-mid:var(--bg-700);--flash-end:var(--bg-950);animation:.4s ease-out ui-flash}.UIbg.r-0>.UIbg-btn{border-radius:0}.UIbg.r-round>.UIbg-btn{border-radius:2.5rem}.UIbg.r-round.g-0>.UIbg-btn:first-of-type{border-radius:2.5rem 0 0 2.5rem}.UIbg.r-round.g-0>.UIbg-btn:last-of-type{border-radius:0 2.5rem 2.5rem 0}.UIbg.g-0{gap:0}.UIbg.g-0>.UIbg-btn{border:0;border-radius:0}.UIbg.g-1{gap:1rem}.UIbg.sm>.UIbg-btn{height:2rem;font-size:.9rem}.UIbg.lg>.UIbg-btn{height:3rem;font-size:1.1rem}.UIbg[aria-disabled=true]{opacity:.5;pointer-events:none;cursor:not-allowed}.UIbg.border{border:1px solid var(--bg-100);border-radius:.5rem;padding:5px}.UIbg.border:hover:not([aria-disabled=true]){border-color:var(--bg-700)}.UIbg.border.r-0{border-radius:0}.UIbg.border.r-round{border-radius:2.5rem}.UIbg.danger{--bg-50:var(--c-d-50);--bg-100:var(--c-d-100);--bg-300:var(--c-d-300);--bg-500:var(--c-d-500);--bg-700:var(--c-d-700);--bg-950:var(--c-d-950)}.UIbg.info{--bg-50:var(--c-i-50);--bg-100:var(--c-i-100);--bg-300:var(--c-i-300);--bg-500:var(--c-i-500);--bg-700:var(--c-i-700);--bg-950:var(--c-i-950)}.UIbg.primary{--bg-50:var(--c-p-50);--bg-100:var(--c-p-100);--bg-300:var(--c-p-300);--bg-500:var(--c-p-500);--bg-700:var(--c-p-700);--bg-950:var(--c-p-950)}.UIbg.success{--bg-50:var(--c-s-50);--bg-100:var(--c-s-100);--bg-300:var(--c-s-300);--bg-500:var(--c-s-500);--bg-700:var(--c-s-700);--bg-950:var(--c-s-950)}.UIbg.warning{--bg-50:var(--c-w-50);--bg-100:var(--c-w-100);--bg-300:var(--c-w-300);--bg-500:var(--c-w-500);--bg-700:var(--c-w-700);--bg-950:var(--c-w-950)}.UIb{--b-50:var(--c-g-50);--b-100:var(--c-g-100);--b-300:var(--c-g-300);--b-500:var(--c-g-500);--b-700:var(--c-g-700);--b-950:var(--c-g-950);grid-auto-flow:column;grid-auto-columns:minmax(min-content);cursor:pointer;background-color:var(--b-100);border:1px solid var(--b-500);height:2.5rem;color:var(--b-950);border-radius:.5rem;justify-content:center;align-items:center;gap:.5rem;padding:.125rem .75rem;font-size:1rem;transition:background-color .4s,color .1s;display:flex;position:relative;overflow:hidden}.UIb:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--b-500) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIb.UIb--ripple:after{animation:1s ease-out forwards ui-ripple}.UIb.UIb--flash{--flash-start:var(--b-50);--flash-mid:var(--b-700);--flash-end:var(--b-950);animation:.4s ease-out ui-flash}.UIb:hover:not(:disabled){background-color:var(--b-700);border-color:var(--b-700);color:var(--b-50)}.UIb:disabled,.UIb[aria-disabled=true]{background-color:var(--b-100);border-color:var(--b-100);color:var(--b-300);cursor:not-allowed;pointer-events:none}.UIb.expand{width:100%}.UIb.between{justify-content:space-between}.UIb.around{justify-content:space-around}.UIb.r-0{border-radius:0}.UIb.r-round{border-radius:2.5rem}.UIb.g-0{gap:0}.UIb.g-1{gap:1rem}.UIb.sm{height:2rem;font-size:.9rem}.UIb.lg{height:3rem;font-size:1.1rem}.UIb.danger{--b-50:var(--c-d-50);--b-100:var(--c-d-100);--b-300:var(--c-d-300);--b-500:var(--c-d-500);--b-700:var(--c-d-700);--b-950:var(--c-d-950)}.UIb.info{--b-50:var(--c-i-50);--b-100:var(--c-i-100);--b-300:var(--c-i-300);--b-500:var(--c-i-500);--b-700:var(--c-i-700);--b-950:var(--c-i-950)}.UIb.primary{--b-50:var(--c-p-50);--b-100:var(--c-p-100);--b-300:var(--c-p-300);--b-500:var(--c-p-500);--b-700:var(--c-p-700);--b-950:var(--c-p-950)}.UIb.success{--b-50:var(--c-s-50);--b-100:var(--c-s-100);--b-300:var(--c-s-300);--b-500:var(--c-s-500);--b-700:var(--c-s-700);--b-950:var(--c-s-950)}.UIb.warning{--b-50:var(--c-w-50);--b-100:var(--c-w-100);--b-300:var(--c-w-300);--b-500:var(--c-w-500);--b-700:var(--c-w-700);--b-950:var(--c-w-950)}.UIsp{--sp-50:var(--c-g-50);--sp-100:var(--c-g-100);--sp-300:var(--c-g-300);--sp-500:var(--c-g-500);--sp-700:var(--c-g-700);--sp-950:var(--c-g-950);grid-template-columns:min-content 1fr min-content;align-self:end;align-items:end;width:13rem;display:grid}.UIsp.UIsp--flash>.UIsp__btn,.UIsp.UIsp--flash>.UIsp__input{--flash-start:var(--sp-50);--flash-mid:var(--sp-700);--flash-end:var(--sp-950);animation:.4s ease-out ui-flash}.UIsp>.UIsp-label{grid-column:1/-1;padding:0 0 .075rem .25rem;font-size:1rem}.UIsp>.UIsp__input{text-align:center;background-color:var(--sp-50);height:2.5rem;color:var(--sp-700);border:none;border-top:1px solid var(--sp-500);border-bottom:1px solid var(--sp-500);box-sizing:border-box;outline:none;width:100%;min-width:3rem;padding:0;font-size:1.5rem;font-weight:700}.UIsp>.UIsp__input:focus{background-color:var(--sp-50);color:var(--sp-950)}.UIsp>.UIsp__input:disabled{opacity:.5;cursor:not-allowed}.UIsp__txt{font-weight:400}.UIsp>.UIsp__btn{cursor:pointer;background-color:var(--sp-100);border:none;border:1px solid var(--sp-500);width:3rem;height:2.5rem;color:var(--sp-950);border-radius:.5rem 0 0 .5rem;justify-content:center;align-items:center;padding:0;font-size:2rem;transition:background-color .4s,color .1s;display:flex;position:relative;overflow:hidden}.UIsp>.UIsp__btn:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--sp-500) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIsp>.UIsp__btn.ui-ripple:after{animation:1s ease-out forwards ui-ripple}.UIsp>.UIsp__btn:hover{background-color:var(--sp-700);color:var(--sp-50)}.UIsp>.disabled{background-color:var(--sp-100);border-color:var(--sp-500);color:var(--sp-300);pointer-events:none}.UIsp[aria-disabled=true]{opacity:.5;pointer-events:none;cursor:not-allowed}.UIsp>.UIsp__btn:first-of-type{border-radius:.5rem 0 0 .5rem}.UIsp>.UIsp__btn:last-of-type{border-radius:0 .5rem .5rem 0}.UIsp.r-0>.UIsp__btn{border-radius:0}.UIsp.r-round>.UIsp__btn:first-of-type{border-radius:1.5rem 0 0 1.5rem}.UIsp.r-round>.UIsp__btn:last-of-type{border-radius:0 1.5rem 1.5rem 0}.UIsp.sm{width:10rem}.UIsp.sm>.UIsp-label{padding:0 0 0 .125rem;font-size:.8rem}.UIsp.sm>.UIsp__input,.UIsp.sm>.UIsp__btn{height:2rem;font-size:1rem}.UIsp.sm>.UIsp__btn{width:2rem}.UIsp.lg{width:16rem}.UIsp.lg>.UIsp__input,.UIsp.lg>.UIsp__btn{height:3rem;font-size:2rem}.UIsp.lg>.UIsp__btn{width:3rem}.UIsp.danger{--sp-50:var(--c-d-50);--sp-100:var(--c-d-100);--sp-300:var(--c-d-300);--sp-500:var(--c-d-500);--sp-700:var(--c-d-700);--sp-950:var(--c-d-950)}.UIsp.info{--sp-50:var(--c-i-50);--sp-100:var(--c-i-100);--sp-300:var(--c-i-300);--sp-500:var(--c-i-500);--sp-700:var(--c-i-700);--sp-950:var(--c-i-950)}.UIsp.primary{--sp-50:var(--c-p-50);--sp-100:var(--c-p-100);--sp-300:var(--c-p-300);--sp-500:var(--c-p-500);--sp-700:var(--c-p-700);--sp-950:var(--c-p-950)}.UIsp.success{--sp-50:var(--c-s-50);--sp-100:var(--c-s-100);--sp-300:var(--c-s-300);--sp-500:var(--c-s-500);--sp-700:var(--c-s-700);--sp-950:var(--c-s-950)}.UIsp.warning{--sp-50:var(--c-w-50);--sp-100:var(--c-w-100);--sp-300:var(--c-w-300);--sp-500:var(--c-w-500);--sp-700:var(--c-w-700);--sp-950:var(--c-w-950)}.UIselect{--sl-50:var(--c-g-50);--sl-100:var(--c-g-100);--sl-300:var(--c-g-300);--sl-500:var(--c-g-500);--sl-700:var(--c-g-700);--sl-900:var(--c-g-900);--sl-950:var(--c-g-950);--sl-item-hover-bg:var(--sl-500);--sl-item-hover-color:var(--sl-50);--sl-item-sel-bg:var(--sl-300);--sl-item-sel-color:var(--sl-950);background-color:var(--sl-500);cursor:pointer;box-sizing:border-box;white-space:nowrap;border-radius:.5rem;align-self:end;width:12rem;min-width:10rem;height:2.5rem;display:flex;position:relative}.UIselect:hover{background-color:var(--sl-700)}.UIselect:hover .UIselect-selected,.UIselect:hover .UIselect-arrow{background-color:var(--sl-700);color:var(--sl-50)}.UIselect-selected{background-color:var(--sl-100);color:var(--sl-900);border-radius:.5rem;align-items:center;width:100%;height:calc(100% - 2px);margin:1px;padding:0 .5rem;display:flex;overflow:hidden}.UIselect-selected>span{white-space:nowrap;text-align:center;max-width:100%;display:inline-block;overflow:hidden}.UIselect-selected.center>span{text-align:left;max-width:100%;margin:0 auto}.UIselect-arrow{background-color:var(--sl-100);width:2rem;height:calc(100% - 4px);color:var(--sl-700);border-radius:.5rem;place-content:center;align-items:center;margin:2px 5px;font-size:.8rem;position:absolute;top:0;right:0}.UIselect-arrow>svg{margin:0 auto;display:flex}.UIselect-options{width:inherit;background-color:var(--sl-100);color:var(--sl-950);z-index:2;box-sizing:border-box;border:1px solid var(--sl-500);border-radius:.5rem;margin:0;padding:0;list-style:none;position:absolute;left:0;overflow:hidden}.UIselect-options__search{padding:1px 2px;position:sticky;top:1px}.UIselect-options__search>input{width:100%;height:inherit;border:1px solid var(--sl-300);box-shadow:none;background-color:var(--sl-50);color:var(--sl-950);border-radius:.5rem;padding:0 7px;font-size:1.5rem}.UIselect-options__search>input:focus-visible{outline:none}.UIselect-options__items{max-height:20rem;overflow-y:auto}.UIselect-options__items>ul{margin:0;padding:0;list-style:none}.UIselect-options__items>ul>li{border-radius:.5rem;align-items:center;height:2.5rem;margin:1px;padding:0 .5rem;display:flex}.UIselect-options__items>ul>li[hidden]{display:none}.UIselect-options__items>ul>li:hover{background-color:var(--sl-item-hover-bg);color:var(--sl-item-hover-color)}.UIselect-options__items>ul>li[aria-selected=true]{background-color:var(--sl-item-sel-bg);color:var(--sl-item-sel-color)}.UIselect-options__items>ul>li.divider{background-color:var(--sl-300);height:1px;margin:0 .25rem}.UIselect.r-0,.UIselect.r-0>.UIselect-selected,.UIselect.r-0>.UIselect-options,.UIselect.r-0>.UIselect-options>li.UIselect-options__search,.UIselect.r-0>.UIselect-options>li.UIselect-options__search>input,.UIselect.r-0>.UIselect-options>li>ul>li{border-radius:0}.UIselect.r-1,.UIselect.r-1>.UIselect-selected,.UIselect.r-1>.UIselect-arrow{border-radius:1.5rem}.UIselect.lg{width:16rem;min-width:12rem;height:3rem;font-size:1.1rem}.UIselect.lg>.UIselect-selected{overflow:hidden}.UIselect.lg .UIselect-options__search>input{height:3rem;font-size:1.7rem}.UIselect.lg .UIselect-options__items{max-height:25rem}.UIselect.lg .UIselect-options__items>ul>li{height:3rem}.UIselect.lg .UIselect-options__items>ul>li.divider{height:1px;margin:0 .5rem}.UIselect.sm{width:10rem;min-width:8rem;height:2rem;font-size:.9rem}.UIselect.sm .UIselect-options__search>input{height:2rem;font-size:1rem}.UIselect.sm .UIselect-options__items{max-height:15rem}.UIselect.sm .UIselect-options__items>ul>li{height:2rem}.UIselect.sm .UIselect-options__items>ul>li.divider{height:1px;margin:0 .25rem}.UIselect.expand{width:100%}.UIselect.UIselect--flash{--flash-start:var(--sl-50);--flash-mid:var(--sl-700);--flash-end:var(--sl-950);animation:.4s ease-out ui-flash}.UIselect[aria-disabled=true]{pointer-events:none;opacity:.5;cursor:not-allowed}.UIselect.danger{--sl-50:var(--c-d-50);--sl-100:var(--c-d-100);--sl-300:var(--c-d-300);--sl-500:var(--c-d-500);--sl-700:var(--c-d-700);--sl-900:var(--c-d-900);--sl-950:var(--c-d-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.info{--sl-50:var(--c-i-50);--sl-100:var(--c-i-100);--sl-300:var(--c-i-300);--sl-500:var(--c-i-500);--sl-700:var(--c-i-700);--sl-900:var(--c-i-900);--sl-950:var(--c-i-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.primary{--sl-50:var(--c-p-50);--sl-100:var(--c-p-100);--sl-300:var(--c-p-300);--sl-500:var(--c-p-500);--sl-700:var(--c-p-700);--sl-900:var(--c-p-900);--sl-950:var(--c-p-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.success{--sl-50:var(--c-s-50);--sl-100:var(--c-s-100);--sl-300:var(--c-s-300);--sl-500:var(--c-s-500);--sl-700:var(--c-s-700);--sl-900:var(--c-s-900);--sl-950:var(--c-s-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIselect.warning{--sl-50:var(--c-w-50);--sl-100:var(--c-w-100);--sl-300:var(--c-w-300);--sl-500:var(--c-w-500);--sl-700:var(--c-w-700);--sl-900:var(--c-w-900);--sl-950:var(--c-w-950);--sl-item-hover-bg:var(--sl-300);--sl-item-hover-color:var(--sl-950);--sl-item-sel-bg:var(--sl-700);--sl-item-sel-color:var(--sl-50)}.UIsw{--sw-50:var(--c-g-50);--sw-100:var(--c-g-100);--sw-300:var(--c-g-300);--sw-700:var(--c-g-700);--sw-950:var(--c-g-950);align-items:center;gap:1.5rem;display:inline-flex;position:relative}.UIsw-label{cursor:pointer;-webkit-user-select:none;user-select:none}.UIsw-label:hover{color:var(--sw-700)}.UIsw>input[type=checkbox]{display:none}.UIsw-slider{background-color:var(--sw-100);cursor:pointer;border:1px solid var(--sw-300);border-radius:1.5rem;width:5rem;height:2.5rem;transition:background-color .4s,border-color .4s;position:relative;overflow:hidden}.UIsw-slider:after{content:"";border-radius:inherit;background:radial-gradient(circle at center, var(--sw-700) 0%, transparent 60%);opacity:0;pointer-events:none;position:absolute;inset:0;transform:scale(0)}.UIsw-slider.ui-ripple:after{animation:1s ease-out forwards ui-ripple}.UIsw-slider:before{z-index:1;content:"";background-color:var(--sw-300);border-radius:1.5rem;width:2.5rem;height:2.5rem;transition:transform .1s;position:absolute;left:0}.UIsw-slider:hover{border-color:var(--sw-50);color:var(--sw-300)}.UIsw-slider:hover~.UIsw-slider__on,.UIsw-slider:hover~.UIsw-slider__off{color:var(--sw-300);transition:color .4s}.UIsw-slider__on,.UIsw-slider__off{color:var(--sw-950);cursor:pointer;transition:color .4s;position:absolute;right:3rem}.UIsw-slider__on:hover,.UIsw-slider__off:hover{color:var(--sw-300)}.UIsw-slider__off{color:var(--sw-700);right:.7rem}.UIsw.UIsw--flash>.UIsw-slider{--flash-start:var(--sw-50);--flash-mid:var(--sw-700);--flash-end:var(--sw-950);animation:.4s ease-out ui-flash}.UIsw[aria-disabled=true]{opacity:.5;pointer-events:none;cursor:not-allowed}.UIsw:has(>input:disabled){opacity:.5;pointer-events:none;cursor:not-allowed}.UIsw>input[type=checkbox]:checked~.UIsw-slider{background-color:var(--sw-100);border-color:var(--sw-700)}.UIsw>input[type=checkbox]:checked~.UIsw-slider:before{background-color:var(--sw-700);transform:translate(2.5rem)}.UIsw>input[type=checkbox]:checked~.UIsw-slider:hover{border-color:var(--sw-50)}.UIsw:has(.UIsw-slider__on:hover,.UIsw-slider__off:hover) .UIsw-slider{border-color:var(--sw-50)}.UIsw>input[type=checkbox]:checked:has(~.UIsw-slider__on:hover,~.UIsw-slider__off:hover)~.UIsw-slider{border-color:var(--sw-50)}.UIsw.lg>.UIsw-slider{width:6rem;height:3rem}.UIsw.lg>.UIsw-slider:before{border-radius:1.5rem;width:3rem;height:3rem}.UIsw.lg>.UIsw-slider__on{font-size:1.2rem;right:3.8rem}.UIsw.lg>.UIsw-slider__off{font-size:1.2rem;right:1rem}.UIsw.lg>input[type=checkbox]:checked~.UIsw-slider:before{transform:translate(3rem)}.UIsw.sm{gap:1rem}.UIsw.sm>.UIsw-slider{width:4rem;height:2rem}.UIsw.sm>.UIsw-slider:before{border-radius:1.5rem;width:2rem;height:2rem}.UIsw.sm>.UIsw-slider__on,.UIsw.sm>.UIsw-slider__off{font-size:.9rem;right:2.5rem}.UIsw.sm>.UIsw-slider__off{right:.6rem}.UIsw.sm>input[type=checkbox]:checked~.UIsw-slider:before{transform:translate(2rem)}.UIsw.xsm{gap:.5rem}.UIsw.xsm>.UIsw-slider{width:2rem;height:1rem}.UIsw.xsm>.UIsw-slider:before{border-radius:1.5rem;width:1rem;height:1rem}.UIsw.xsm>.UIsw-slider__on,.UIsw.xsm>.UIsw-slider__off{font-size:.6rem;right:1.2rem}.UIsw.xsm>.UIsw-slider__off{right:.3rem}.UIsw.xsm>input[type=checkbox]:checked~.UIsw-slider:before{transform:translate(1rem)}.UIsw.r-0>.UIsw-slider,.UIsw.r-0>.UIsw-slider:before{border-radius:0}.UIsw.r-1>.UIsw-slider,.UIsw.r-1>.UIsw-slider:before{border-radius:.5rem}.UIsw.danger{--sw-50:var(--c-d-50);--sw-100:var(--c-d-100);--sw-300:var(--c-d-300);--sw-700:var(--c-d-700);--sw-950:var(--c-d-950)}.UIsw.info{--sw-50:var(--c-i-50);--sw-100:var(--c-i-100);--sw-300:var(--c-i-300);--sw-700:var(--c-i-700);--sw-950:var(--c-i-950)}.UIsw.success{--sw-50:var(--c-s-50);--sw-100:var(--c-s-100);--sw-300:var(--c-s-300);--sw-700:var(--c-s-700);--sw-950:var(--c-s-950)}.UIsw.primary{--sw-50:var(--c-p-50);--sw-100:var(--c-p-100);--sw-300:var(--c-p-300);--sw-700:var(--c-p-700);--sw-950:var(--c-p-950)}.UIsw.warning{--sw-50:var(--c-w-50);--sw-100:var(--c-w-100);--sw-300:var(--c-w-300);--sw-700:var(--c-w-700);--sw-950:var(--c-w-950)}.UIsw.warning>.UIsw-slider__off{color:var(--sw-300)}:root{--g-50:#f2f2f2;--g-100:#e6e6e6;--g-300:#b3b3b3;--g-500:gray;--g-700:#4d4d4d;--g-900:#1a1a1a;--g-950:#0d0d0d;--d-50:#ffe6ea;--d-100:#ffccd5;--d-300:#ff6680;--d-500:#ff002b;--d-700:#99001a;--d-900:#330009;--d-950:#1a0004;--i-50:#e7f8fe;--i-100:#cff1fc;--i-300:#6ed5f7;--i-500:#0db9f2;--i-700:#086f91;--i-900:#032530;--i-950:#011218;--p-50:#ececf9;--p-100:#d9d9f2;--p-300:#8c8cd9;--p-500:#4040bf;--p-700:#262673;--p-900:#0d0d26;--p-950:#060613;--s-50:#e9fbf2;--s-100:#d4f7e6;--s-300:#7de8b3;--s-500:#26d980;--s-700:#17824d;--s-900:#082b1a;--s-950:#04160d;--w-50:#fcf7e9;--w-100:#f9efd2;--w-300:#eccf79;--w-500:#dfaf20;--w-700:#866913;--w-900:#2d2306;--w-950:#161203;--c-d-50:var(--d-50);--c-d-100:var(--d-100);--c-d-300:var(--d-300);--c-d-500:var(--d-500);--c-d-700:var(--d-700);--c-d-900:var(--d-900);--c-d-950:var(--d-950);--c-i-50:var(--i-50);--c-i-100:var(--i-100);--c-i-300:var(--i-300);--c-i-500:var(--i-500);--c-i-700:var(--i-700);--c-i-900:var(--i-900);--c-i-950:var(--i-950);--c-p-50:var(--p-50);--c-p-100:var(--p-100);--c-p-300:var(--p-300);--c-p-500:var(--p-500);--c-p-700:var(--p-700);--c-p-900:var(--p-900);--c-p-950:var(--p-950);--c-s-50:var(--s-50);--c-s-100:var(--s-100);--c-s-300:var(--s-300);--c-s-500:var(--s-500);--c-s-700:var(--s-700);--c-s-900:var(--s-900);--c-s-950:var(--s-950);--c-g-50:var(--g-50);--c-g-100:var(--g-100);--c-g-300:var(--g-300);--c-g-500:var(--g-500);--c-g-700:var(--g-700);--c-g-900:var(--g-900);--c-g-950:var(--g-950);--c-w-50:var(--w-50);--c-w-100:var(--w-100);--c-w-300:var(--w-300);--c-w-500:var(--w-500);--c-w-700:var(--w-700);--c-w-900:var(--w-900);--c-w-950:var(--w-950)}body{background-color:var(--c-g-50);color:var(--c-g-950);padding:0;transition:background .4s}html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{margin:.67em 0;font-size:2em}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace;font-size:1em}a{color:inherit;background-color:#0000;text-decoration:none}img{border-style:none}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}fieldset{border:1px solid silver;margin:0;padding:.35em .75em .625em}legend{padding:0}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}table{border-collapse:collapse;border-spacing:0}@keyframes ui-ripple{0%{opacity:1;transform:scale(0)}to{opacity:0;transform:scale(5)}}@keyframes ui-flash{0%{box-shadow:0 0 0 0 var(--flash-start)}50%{box-shadow:0 0 5px 1px var(--flash-mid)}to{box-shadow:0 0 0 0 var(--flash-end)}}.UIFlash{--flash-start:var(--c-g-50);--flash-mid:var(--c-g-700);--flash-end:var(--c-g-950);animation:.4s ease-out ui-flash}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "Andrii Popov",
3
3
  "name": "@popovandrii/ui-elements",
4
4
  "description": "Lightweight TypeScript UI component library — SpinBox, Select with search, Switch, ButtonGroup (radio), Button. Zero dependencies, accessible (ARIA), themeable via CSS custom properties, supports destroy/reinitialize lifecycle.",
5
- "version": "0.2.0",
5
+ "version": "0.2.1",
6
6
  "license": "MIT",
7
7
  "keywords": [
8
8
  "ui",