@mhmo91/schmancy 0.2.38 → 0.2.40
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/dist/{animated-text-Daeoe5sn.cjs → animated-text-CaUJr-yL.cjs} +2 -2
- package/dist/{animated-text-Daeoe5sn.cjs.map → animated-text-CaUJr-yL.cjs.map} +1 -1
- package/dist/{animated-text-BVwxMOPR.js → animated-text-D8LhwMLu.js} +3 -3
- package/dist/{animated-text-BVwxMOPR.js.map → animated-text-D8LhwMLu.js.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/{area.component-xmbcsTJK.cjs → area.component-DJYgP8NP.cjs} +2 -2
- package/dist/{area.component-xmbcsTJK.cjs.map → area.component-DJYgP8NP.cjs.map} +1 -1
- package/dist/{area.component-ByLp5c79.js → area.component-FgfXnOUF.js} +3 -3
- package/dist/{area.component-ByLp5c79.js.map → area.component-FgfXnOUF.js.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/autocomplete-C36FPrMT.js +225 -0
- package/dist/autocomplete-C36FPrMT.js.map +1 -0
- package/dist/autocomplete-CFcZcrJm.cjs +48 -0
- package/dist/autocomplete-CFcZcrJm.cjs.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-D9vaaSjw.cjs → checkbox-Drf8MwrJ.cjs} +2 -2
- package/dist/{checkbox-D9vaaSjw.cjs.map → checkbox-Drf8MwrJ.cjs.map} +1 -1
- package/dist/{checkbox-DkJYbF64.js → checkbox-Sf2HtMs9.js} +2 -2
- package/dist/{checkbox-DkJYbF64.js.map → checkbox-Sf2HtMs9.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-UBgldDF5.cjs → chips-8SMj1Siq.cjs} +12 -12
- package/dist/{chips-UBgldDF5.cjs.map → chips-8SMj1Siq.cjs.map} +1 -1
- package/dist/{chips-Cy9spfrp.js → chips-CA-B5JGD.js} +36 -36
- package/dist/{chips-Cy9spfrp.js.map → chips-CA-B5JGD.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/date-range-BFW0xGWz.js +148 -0
- package/dist/date-range-BFW0xGWz.js.map +1 -0
- package/dist/date-range-CAFOX_Sm.cjs +72 -0
- package/dist/date-range-CAFOX_Sm.cjs.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-CpK5RGux.js → delay-DbaKftdS.js} +2 -2
- package/dist/{delay-CpK5RGux.js.map → delay-DbaKftdS.js.map} +1 -1
- package/dist/{delay-C0n9lJNW.cjs → delay-_LA9VzS1.cjs} +2 -2
- package/dist/{delay-C0n9lJNW.cjs.map → delay-_LA9VzS1.cjs.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{divider-D85c35Sw.js → divider-Ba1jSOh5.js} +3 -3
- package/dist/{divider-D85c35Sw.js.map → divider-Ba1jSOh5.js.map} +1 -1
- package/dist/{divider-C4xBD1JH.cjs → divider-DUvuIyeA.cjs} +2 -2
- package/dist/{divider-C4xBD1JH.cjs.map → divider-DUvuIyeA.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{form-B_0fvoO0.cjs → form-Dga1_eim.cjs} +2 -2
- package/dist/{form-B_0fvoO0.cjs.map → form-Dga1_eim.cjs.map} +1 -1
- package/dist/{form-Bau_XA_e.js → form-H0pfjyGl.js} +2 -2
- package/dist/{form-Bau_XA_e.js.map → form-H0pfjyGl.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-Bit7fi8d.cjs → icon-Dr1MeHJo.cjs} +2 -2
- package/dist/{icon-Bit7fi8d.cjs.map → icon-Dr1MeHJo.cjs.map} +1 -1
- package/dist/{icon-button-Dh6iR7gO.cjs → icon-button-B1Hzc1qy.cjs} +2 -2
- package/dist/{icon-button-Dh6iR7gO.cjs.map → icon-button-B1Hzc1qy.cjs.map} +1 -1
- package/dist/{icon-button-CEGE-KQJ.js → icon-button-BFdAiGNP.js} +3 -3
- package/dist/{icon-button-CEGE-KQJ.js.map → icon-button-BFdAiGNP.js.map} +1 -1
- package/dist/{icon-B-QZ23xF.js → icon-pvbFfBbz.js} +3 -3
- package/dist/{icon-B-QZ23xF.js.map → icon-pvbFfBbz.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +98 -97
- package/dist/input-1-LnDYbT.cjs +53 -0
- package/dist/input-1-LnDYbT.cjs.map +1 -0
- package/dist/input-CBjD2PL8.js +137 -0
- package/dist/input-CBjD2PL8.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-ClV9Qdme.js → list-BdN19pT0.js} +2 -2
- package/dist/{list-ClV9Qdme.js.map → list-BdN19pT0.js.map} +1 -1
- package/dist/{list-CRW6i-kf.cjs → list-DSyxyPI_.cjs} +2 -2
- package/dist/{list-CRW6i-kf.cjs.map → list-DSyxyPI_.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-d9rhslEw.cjs → litElement.mixin-B9kSOE4x.cjs} +2 -2
- package/dist/{litElement.mixin-d9rhslEw.cjs.map → litElement.mixin-B9kSOE4x.cjs.map} +1 -1
- package/dist/{litElement.mixin-COSnyAru.js → litElement.mixin-D9kneJpW.js} +2 -2
- package/dist/{litElement.mixin-COSnyAru.js.map → litElement.mixin-D9kneJpW.js.map} +1 -1
- package/dist/{menu-n_bI-TFp.js → menu-DjWA-lYK.js} +29 -27
- package/dist/menu-DjWA-lYK.js.map +1 -0
- package/dist/menu-XffIwQSn.cjs +29 -0
- package/dist/menu-XffIwQSn.cjs.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/option-C4fWPkxl.js +45 -0
- package/dist/option-C4fWPkxl.js.map +1 -0
- package/dist/option-Dcuv7dNV.cjs +18 -0
- package/dist/option-Dcuv7dNV.cjs.map +1 -0
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{outlet-hu2yX7iS.cjs → outlet-881x1gpm.cjs} +2 -2
- package/dist/{outlet-hu2yX7iS.cjs.map → outlet-881x1gpm.cjs.map} +1 -1
- package/dist/{outlet-DuFKgg_g.js → outlet-oc58T2jq.js} +2 -2
- package/dist/{outlet-DuFKgg_g.js.map → outlet-oc58T2jq.js.map} +1 -1
- package/dist/{payment-card-form-Bpa9jVym.cjs → payment-card-form-BlusjI2Q.cjs} +2 -2
- package/dist/{payment-card-form-Bpa9jVym.cjs.map → payment-card-form-BlusjI2Q.cjs.map} +1 -1
- package/dist/{payment-card-form-D6chLUG-.js → payment-card-form-D2NiZkJM.js} +3 -3
- package/dist/{payment-card-form-D6chLUG-.js.map → payment-card-form-D2NiZkJM.js.map} +1 -1
- package/dist/{radio-group-9wWEjibY.js → radio-group-BALwJIFj.js} +2 -2
- package/dist/{radio-group-9wWEjibY.js.map → radio-group-BALwJIFj.js.map} +1 -1
- package/dist/{radio-group-CekbhNf-.cjs → radio-group-DE6ao3xB.cjs} +2 -2
- package/dist/{radio-group-CekbhNf-.cjs.map → radio-group-DE6ao3xB.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{scroll-B-tqDDOP.js → scroll-BbqxMyDc.js} +29 -29
- package/dist/scroll-BbqxMyDc.js.map +1 -0
- package/dist/scroll-BqLesKK7.cjs +33 -0
- package/dist/scroll-BqLesKK7.cjs.map +1 -0
- package/dist/select-CaBI5TrW.js +156 -0
- package/dist/select-CaBI5TrW.js.map +1 -0
- package/dist/select-N1WX3mjc.cjs +52 -0
- package/dist/select-N1WX3mjc.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +4 -1
- package/dist/{sheet-DeE5_yNQ.cjs → sheet-BLzXXxJz.cjs} +2 -2
- package/dist/{sheet-DeE5_yNQ.cjs.map → sheet-BLzXXxJz.cjs.map} +1 -1
- package/dist/{sheet-yFj2S1UP.js → sheet-CrFAERdT.js} +3 -3
- package/dist/{sheet-yFj2S1UP.js.map → sheet-CrFAERdT.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-PwJTXAJc.js → slider-BAQ6ue43.js} +3 -3
- package/dist/{slider-PwJTXAJc.js.map → slider-BAQ6ue43.js.map} +1 -1
- package/dist/{slider-BN-GC2a_.cjs → slider-Ck3rrBuj.cjs} +2 -2
- package/dist/{slider-BN-GC2a_.cjs.map → slider-Ck3rrBuj.cjs.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-Calk9CE7.cjs → spinner-B1iL6lg7.cjs} +2 -2
- package/dist/{spinner-Calk9CE7.cjs.map → spinner-B1iL6lg7.cjs.map} +1 -1
- package/dist/{spinner-CA6KEbfu.js → spinner-Dp-BlzFE.js} +3 -3
- package/dist/{spinner-CA6KEbfu.js.map → spinner-Dp-BlzFE.js.map} +1 -1
- package/dist/{surface-VBotYgOg.js → surface-C-5hXuc0.js} +2 -2
- package/dist/{surface-VBotYgOg.js.map → surface-C-5hXuc0.js.map} +1 -1
- package/dist/{surface-QvhZSMt5.cjs → surface-KIYOpqYN.cjs} +2 -2
- package/dist/{surface-QvhZSMt5.cjs.map → surface-KIYOpqYN.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-n4ftE_xg.cjs → table-COiGzwHG.cjs} +2 -2
- package/dist/{table-n4ftE_xg.cjs.map → table-COiGzwHG.cjs.map} +1 -1
- package/dist/{table-Da6LJPGK.js → table-D5Y7TtBM.js} +2 -2
- package/dist/{table-Da6LJPGK.js.map → table-D5Y7TtBM.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-group-BK5fJqpY.js → tabs-group-DIv7H3ii.js} +2 -2
- package/dist/{tabs-group-BK5fJqpY.js.map → tabs-group-DIv7H3ii.js.map} +1 -1
- package/dist/{tabs-group-DThZAKqa.cjs → tabs-group-Dzw-rYWP.cjs} +2 -2
- package/dist/{tabs-group-DThZAKqa.cjs.map → tabs-group-Dzw-rYWP.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-BBKdEPAU.js +43 -0
- package/dist/{tailwind.mixin-DNlFmovi.js.map → tailwind.mixin-BBKdEPAU.js.map} +1 -1
- package/dist/tailwind.mixin-gE-6eUQA.cjs +2 -0
- package/dist/{tailwind.mixin-DYx3IacW.cjs.map → tailwind.mixin-gE-6eUQA.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/{teleport.component-Dose4RDi.js → teleport.component-DldJv9J6.js} +35 -35
- package/dist/{teleport.component-Dose4RDi.js.map → teleport.component-DldJv9J6.js.map} +1 -1
- package/dist/{teleport.component-D5v1j4mw.cjs → teleport.component-I1DFKmWM.cjs} +2 -2
- package/dist/{teleport.component-D5v1j4mw.cjs.map → teleport.component-I1DFKmWM.cjs.map} +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-DHrkcyt8.cjs → textarea-Cm_0BDw5.cjs} +2 -2
- package/dist/{textarea-DHrkcyt8.cjs.map → textarea-Cm_0BDw5.cjs.map} +1 -1
- package/dist/{textarea-JWBhOVdN.js → textarea-DWBpogxd.js} +2 -2
- package/dist/{textarea-JWBhOVdN.js.map → textarea-DWBpogxd.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-DBPnjBHL.cjs → theme-button-B7JR-68y.cjs} +2 -2
- package/dist/{theme-button-DBPnjBHL.cjs.map → theme-button-B7JR-68y.cjs.map} +1 -1
- package/dist/{theme-button-BL3unPDt.js → theme-button-CdjTjQE-.js} +2 -2
- package/dist/{theme-button-BL3unPDt.js.map → theme-button-CdjTjQE-.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-BNRB5zlE.cjs → theme.component-D0pi4zH5.cjs} +2 -2
- package/dist/{theme.component-BNRB5zlE.cjs.map → theme.component-D0pi4zH5.cjs.map} +1 -1
- package/dist/{theme.component-iZ2Ty0WM.js → theme.component-DWRFe6NX.js} +2 -2
- package/dist/{theme.component-iZ2Ty0WM.js.map → theme.component-DWRFe6NX.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{tree-DK6ii57L.js → tree-COFA9Z7I.js} +2 -2
- package/dist/{tree-DK6ii57L.js.map → tree-COFA9Z7I.js.map} +1 -1
- package/dist/{tree-BU8SHE74.cjs → tree-D8SHnBQ7.cjs} +2 -2
- package/dist/{tree-BU8SHE74.cjs.map → tree-D8SHnBQ7.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-BcUBG7Dc.cjs → typewriter-B254asJ6.cjs} +2 -2
- package/dist/{typewriter-BcUBG7Dc.cjs.map → typewriter-B254asJ6.cjs.map} +1 -1
- package/dist/{typewriter-BUNcKCUM.js → typewriter-CKloAbr2.js} +4 -4
- package/dist/{typewriter-BUNcKCUM.js.map → typewriter-CKloAbr2.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-CLlDUD5O.cjs → typography-BjmgtlSe.cjs} +2 -2
- package/dist/{typography-CLlDUD5O.cjs.map → typography-BjmgtlSe.cjs.map} +1 -1
- package/dist/{typography-CasDFLVv.js → typography-C0__6Aqk.js} +2 -2
- package/dist/{typography-CasDFLVv.js.map → typography-C0__6Aqk.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +6 -6
- package/types/src/autocomplete/autocomplete.d.ts +16 -93
- package/types/src/chips/chip.d.ts +0 -2
- package/types/src/date-range/date-range.d.ts +14 -15
- package/types/src/input/input.d.ts +60 -80
- package/types/src/layout/flex/flex.d.ts +24 -1
- package/types/src/option/option.d.ts +2 -2
- package/types/src/select/select.d.ts +37 -15
- package/dist/autocomplete-8-xYgb2e.js +0 -212
- package/dist/autocomplete-8-xYgb2e.js.map +0 -1
- package/dist/autocomplete-CtUz_AlC.cjs +0 -43
- package/dist/autocomplete-CtUz_AlC.cjs.map +0 -1
- package/dist/date-range-Cvdpxn2J.js +0 -130
- package/dist/date-range-Cvdpxn2J.js.map +0 -1
- package/dist/date-range-DTUXT0Lf.cjs +0 -58
- package/dist/date-range-DTUXT0Lf.cjs.map +0 -1
- package/dist/input-6NTzj_Bn.js +0 -124
- package/dist/input-6NTzj_Bn.js.map +0 -1
- package/dist/input-CnvK8HG2.cjs +0 -43
- package/dist/input-CnvK8HG2.cjs.map +0 -1
- package/dist/menu-C4mb1XXA.cjs +0 -31
- package/dist/menu-C4mb1XXA.cjs.map +0 -1
- package/dist/menu-n_bI-TFp.js.map +0 -1
- package/dist/option-CxhioQ_d.js +0 -40
- package/dist/option-CxhioQ_d.js.map +0 -1
- package/dist/option-lA0IV4VJ.cjs +0 -14
- package/dist/option-lA0IV4VJ.cjs.map +0 -1
- package/dist/scroll-B-tqDDOP.js.map +0 -1
- package/dist/scroll-B7q9TYhV.cjs +0 -33
- package/dist/scroll-B7q9TYhV.cjs.map +0 -1
- package/dist/select-DAQdBUSl.cjs +0 -46
- package/dist/select-DAQdBUSl.cjs.map +0 -1
- package/dist/select-DUctHAIZ.js +0 -99
- package/dist/select-DUctHAIZ.js.map +0 -1
- package/dist/tailwind.mixin-DNlFmovi.js +0 -43
- package/dist/tailwind.mixin-DYx3IacW.cjs +0 -2
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import { computePosition as D, offset as H, flip as T, shift as Y } from "@floating-ui/dom";
|
|
2
|
-
import { Subject as M, fromEvent as L, from as U } from "rxjs";
|
|
3
|
-
import "lit/directives/class-map.js";
|
|
4
|
-
import "lit/directives/style-map.js";
|
|
5
|
-
import { $ as z } from "./litElement.mixin-COSnyAru.js";
|
|
6
|
-
import "./tailwind.mixin-DNlFmovi.js";
|
|
7
|
-
import { c as F } from "./ripple-BumgqsDT.js";
|
|
8
|
-
import { S as N } from "./theme.interface-C5Kj6WjD.js";
|
|
9
|
-
import { html as R } from "lit";
|
|
10
|
-
import { property as $, state as B, query as V, queryAssignedElements as G, eventOptions as J, customElement as K } from "lit/decorators.js";
|
|
11
|
-
import { createRef as Q, ref as W } from "lit/directives/ref.js";
|
|
12
|
-
import { takeUntil as q, distinctUntilChanged as X, tap as Z, filter as _, switchMap as tt } from "rxjs/operators";
|
|
13
|
-
const b = new Uint32Array(65536), et = (t, e) => {
|
|
14
|
-
if (t.length < e.length) {
|
|
15
|
-
const o = e;
|
|
16
|
-
e = t, t = o;
|
|
17
|
-
}
|
|
18
|
-
return e.length === 0 ? t.length : t.length <= 32 ? ((o, s) => {
|
|
19
|
-
const a = o.length, l = s.length, r = 1 << a - 1;
|
|
20
|
-
let p = -1, f = 0, S = a, h = a;
|
|
21
|
-
for (; h--; ) b[o.charCodeAt(h)] |= 1 << h;
|
|
22
|
-
for (h = 0; h < l; h++) {
|
|
23
|
-
let y = b[s.charCodeAt(h)];
|
|
24
|
-
const g = y | f;
|
|
25
|
-
y |= (y & p) + p ^ p, f |= ~(y | p), p &= y, f & r && S++, p & r && S--, f = f << 1 | 1, p = p << 1 | ~(g | f), f &= g;
|
|
26
|
-
}
|
|
27
|
-
for (h = a; h--; ) b[o.charCodeAt(h)] = 0;
|
|
28
|
-
return S;
|
|
29
|
-
})(t, e) : ((o, s) => {
|
|
30
|
-
const a = s.length, l = o.length, r = [], p = [], f = Math.ceil(a / 32), S = Math.ceil(l / 32);
|
|
31
|
-
for (let i = 0; i < f; i++) p[i] = -1, r[i] = 0;
|
|
32
|
-
let h = 0;
|
|
33
|
-
for (; h < S - 1; h++) {
|
|
34
|
-
let i = 0, d = -1;
|
|
35
|
-
const w = 32 * h, C = Math.min(32, l) + w;
|
|
36
|
-
for (let n = w; n < C; n++) b[o.charCodeAt(n)] |= 1 << n;
|
|
37
|
-
for (let n = 0; n < a; n++) {
|
|
38
|
-
const x = b[s.charCodeAt(n)], v = p[n / 32 | 0] >>> n & 1, m = r[n / 32 | 0] >>> n & 1, P = x | i, j = ((x | m) & d) + d ^ d | x | m;
|
|
39
|
-
let O = i | ~(j | d), k = d & j;
|
|
40
|
-
O >>> 31 ^ v && (p[n / 32 | 0] ^= 1 << n), k >>> 31 ^ m && (r[n / 32 | 0] ^= 1 << n), O = O << 1 | v, k = k << 1 | m, d = k | ~(P | O), i = O & P;
|
|
41
|
-
}
|
|
42
|
-
for (let n = w; n < C; n++) b[o.charCodeAt(n)] = 0;
|
|
43
|
-
}
|
|
44
|
-
let y = 0, g = -1;
|
|
45
|
-
const A = 32 * h, E = Math.min(32, l - A) + A;
|
|
46
|
-
for (let i = A; i < E; i++) b[o.charCodeAt(i)] |= 1 << i;
|
|
47
|
-
let I = l;
|
|
48
|
-
for (let i = 0; i < a; i++) {
|
|
49
|
-
const d = b[s.charCodeAt(i)], w = p[i / 32 | 0] >>> i & 1, C = r[i / 32 | 0] >>> i & 1, n = d | y, x = ((d | C) & g) + g ^ g | d | C;
|
|
50
|
-
let v = y | ~(x | g), m = g & x;
|
|
51
|
-
I += v >>> l - 1 & 1, I -= m >>> l - 1 & 1, v >>> 31 ^ w && (p[i / 32 | 0] ^= 1 << i), m >>> 31 ^ C && (r[i / 32 | 0] ^= 1 << i), v = v << 1 | w, m = m << 1 | C, g = m | ~(n | v), y = v & n;
|
|
52
|
-
}
|
|
53
|
-
for (let i = A; i < E; i++) b[o.charCodeAt(i)] = 0;
|
|
54
|
-
return I;
|
|
55
|
-
})(t, e);
|
|
56
|
-
};
|
|
57
|
-
var ot = Object.defineProperty, st = Object.getOwnPropertyDescriptor, u = (t, e, o, s) => {
|
|
58
|
-
for (var a, l = s > 1 ? void 0 : s ? st(e, o) : e, r = t.length - 1; r >= 0; r--) (a = t[r]) && (l = (s ? a(e, o, l) : a(l)) || l);
|
|
59
|
-
return s && l && ot(e, o, l), l;
|
|
60
|
-
};
|
|
61
|
-
let c = class extends z(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}") {
|
|
62
|
-
constructor() {
|
|
63
|
-
super(...arguments), this.required = !1, this.placeholder = "", this.value = "", this.label = "", this.maxHeight = "25vh", this.multi = !1, this.valueLabel = "", this.inputRef = Q(), this.searchTerm$ = new M(), this.startY = 0;
|
|
64
|
-
}
|
|
65
|
-
connectedCallback() {
|
|
66
|
-
super.connectedCallback(), this.searchTerm$.pipe(q(this.disconnecting), X(), Z((t) => {
|
|
67
|
-
const e = t.trim().toLowerCase(), o = this.options.map((s) => {
|
|
68
|
-
const a = s.label.toLowerCase();
|
|
69
|
-
return { option: s, levDistance: et(e, a) };
|
|
70
|
-
}).filter(({ option: s, levDistance: a }) => e.length < 3 || a <= s.label.toLowerCase().length - e.length).sort((s, a) => s.levDistance - a.levDistance);
|
|
71
|
-
this.options.forEach((s) => s.hidden = !0);
|
|
72
|
-
for (const { option: s } of o) s.hidden = !1;
|
|
73
|
-
this.empty.hidden = o.length > 0, this.requestUpdate();
|
|
74
|
-
})).subscribe(() => {
|
|
75
|
-
this.showOptions();
|
|
76
|
-
}), L(this, "focusout").pipe(q(this.disconnecting), _((t) => {
|
|
77
|
-
var e;
|
|
78
|
-
return ((e = t.relatedTarget) == null ? void 0 : e.tagName) !== "SCHMANCY-OPTION";
|
|
79
|
-
}), tt(() => {
|
|
80
|
-
const t = this.optionsContainer.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 250, easing: "cubic-bezier(0.5, 0.01, 0.25, 1)" }), e = new Promise((o) => {
|
|
81
|
-
t.onfinish = () => {
|
|
82
|
-
this.optionsContainer.style.setProperty("display", "none"), this.optionsContainer.style.setProperty("opacity", "1"), o();
|
|
83
|
-
};
|
|
84
|
-
});
|
|
85
|
-
return U(e);
|
|
86
|
-
})).subscribe({ next: () => {
|
|
87
|
-
var t;
|
|
88
|
-
this.multi ? this.input.value = this.options.filter((e) => e.selected).map((e) => e.label).join(", ") : this.input.value = ((t = this.options.find((e) => e.value === this.value)) == null ? void 0 : t.label) ?? "";
|
|
89
|
-
} });
|
|
90
|
-
}
|
|
91
|
-
firstUpdated() {
|
|
92
|
-
this.updateInputValue();
|
|
93
|
-
}
|
|
94
|
-
updated(t) {
|
|
95
|
-
super.updated(t), t.has("value") && (this.syncSelectionFromValue(), this.updateInputValue());
|
|
96
|
-
}
|
|
97
|
-
handleSlotChange() {
|
|
98
|
-
this.empty.hidden = this.options.some((t) => !t.hidden), this.syncSelectionFromValue(), this.updateInputValue();
|
|
99
|
-
}
|
|
100
|
-
syncSelectionFromValue() {
|
|
101
|
-
if (this.multi) {
|
|
102
|
-
const t = this.value.split(",").map((e) => e.trim()).filter(Boolean);
|
|
103
|
-
this.options.forEach((e) => {
|
|
104
|
-
e.selected = t.includes(e.value);
|
|
105
|
-
});
|
|
106
|
-
} else this.options.forEach((t) => {
|
|
107
|
-
t.selected = t.value === this.value;
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
updateInputValue() {
|
|
111
|
-
requestAnimationFrame(() => {
|
|
112
|
-
var t;
|
|
113
|
-
if (this.multi) {
|
|
114
|
-
const e = this.options.filter((o) => o.selected).map((o) => o.label);
|
|
115
|
-
this.input.value = e.join(", ");
|
|
116
|
-
} else {
|
|
117
|
-
const e = (t = this.options.find((o) => o.value === this.value)) == null ? void 0 : t.label;
|
|
118
|
-
this.input.value = e ?? "";
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
async showOptions() {
|
|
123
|
-
this.optionsContainer.removeAttribute("hidden"), this.optionsContainer.style.setProperty("display", "block");
|
|
124
|
-
const { x: t, y: e } = await D(this.input, this.optionsContainer, { placement: "bottom-start", middleware: [H(5), T(), Y({ padding: 5 })] });
|
|
125
|
-
Object.assign(this.optionsContainer.style, { left: `${t}px`, top: `${e}px`, position: "absolute", zIndex: "9999", maxHeight: this.maxHeight, overflowY: "auto" });
|
|
126
|
-
}
|
|
127
|
-
hideOptions() {
|
|
128
|
-
var t, e;
|
|
129
|
-
(t = this.optionsContainer) == null || t.setAttribute("hidden", "true"), (e = this.optionsContainer) == null || e.style.setProperty("display", "none");
|
|
130
|
-
}
|
|
131
|
-
handleInputChange(t) {
|
|
132
|
-
t.preventDefault(), t.stopPropagation();
|
|
133
|
-
const e = t.detail.value;
|
|
134
|
-
this.searchTerm$.next(e);
|
|
135
|
-
}
|
|
136
|
-
handleOptionClick(t) {
|
|
137
|
-
if (this.multi) {
|
|
138
|
-
const e = this.options.find((s) => s.value === t);
|
|
139
|
-
e && (e.selected = !e.selected);
|
|
140
|
-
const o = this.options.filter((s) => s.selected).map((s) => s.value);
|
|
141
|
-
this.value = o.join(","), this.updateInputValue(), this.dispatchEvent(new CustomEvent("change", { detail: { value: o }, bubbles: !0, composed: !0 }));
|
|
142
|
-
} else this.hideOptions(), this.value = t, this.updateInputValue(), this.dispatchEvent(new CustomEvent("change", { detail: { value: t }, bubbles: !0, composed: !0 }));
|
|
143
|
-
}
|
|
144
|
-
checkValidity() {
|
|
145
|
-
return this.multi ? this.options.some((t) => t.selected) : !!this.value;
|
|
146
|
-
}
|
|
147
|
-
reportValidity() {
|
|
148
|
-
var t;
|
|
149
|
-
return (t = this.inputRef.value) == null ? void 0 : t.reportValidity();
|
|
150
|
-
}
|
|
151
|
-
handleTouchStart(t) {
|
|
152
|
-
var e, o;
|
|
153
|
-
this.startY = ((o = (e = t.touches) == null ? void 0 : e[0]) == null ? void 0 : o.clientY) ?? 0;
|
|
154
|
-
}
|
|
155
|
-
preventScroll(t) {
|
|
156
|
-
var l, r;
|
|
157
|
-
const e = t.target;
|
|
158
|
-
if (!this.optionsContainer.contains(e)) return;
|
|
159
|
-
const o = this.optionsContainer.scrollTop, s = this.optionsContainer.scrollHeight - this.optionsContainer.offsetHeight, a = ((r = (l = t.touches) == null ? void 0 : l[0]) == null ? void 0 : r.clientY) ?? 0;
|
|
160
|
-
(o <= 0 && a > this.startY || o >= s && a < this.startY) && t.preventDefault();
|
|
161
|
-
}
|
|
162
|
-
render() {
|
|
163
|
-
return R`
|
|
164
|
-
<div class="relative">
|
|
165
|
-
<!-- If there's no external trigger slot, fall back to a schmancy-input -->
|
|
166
|
-
<slot name="trigger">
|
|
167
|
-
<schmancy-input
|
|
168
|
-
autocomplete="off"
|
|
169
|
-
class="w-full"
|
|
170
|
-
${W(this.inputRef)}
|
|
171
|
-
.required=${this.required}
|
|
172
|
-
id="input"
|
|
173
|
-
.label=${this.label}
|
|
174
|
-
@focus=${this.showOptions}
|
|
175
|
-
clickable
|
|
176
|
-
type="search"
|
|
177
|
-
inputmode="text"
|
|
178
|
-
placeholder=${this.placeholder}
|
|
179
|
-
@change=${this.handleInputChange}
|
|
180
|
-
>
|
|
181
|
-
</schmancy-input>
|
|
182
|
-
</slot>
|
|
183
|
-
|
|
184
|
-
<ul
|
|
185
|
-
tabindex="-1"
|
|
186
|
-
id="options"
|
|
187
|
-
class="absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-sm"
|
|
188
|
-
style="max-height: ${this.maxHeight}"
|
|
189
|
-
role="listbox"
|
|
190
|
-
hidden
|
|
191
|
-
@click=${(t) => {
|
|
192
|
-
var o;
|
|
193
|
-
const e = (o = t.detail) == null ? void 0 : o.value;
|
|
194
|
-
e && this.handleOptionClick(e);
|
|
195
|
-
}}
|
|
196
|
-
@touchstart=${this.handleTouchStart}
|
|
197
|
-
@touchmove=${this.preventScroll}
|
|
198
|
-
${F({ bgColor: N.sys.color.surface.container })}
|
|
199
|
-
>
|
|
200
|
-
<li id="empty" tabindex="-1">
|
|
201
|
-
<schmancy-typography type="label">No results found</schmancy-typography>
|
|
202
|
-
</li>
|
|
203
|
-
|
|
204
|
-
<!-- Default slot with the <schmancy-option> elements -->
|
|
205
|
-
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
206
|
-
</ul>
|
|
207
|
-
</div>
|
|
208
|
-
`;
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
u([$({ type: Boolean })], c.prototype, "required", 2), u([$({ type: String })], c.prototype, "placeholder", 2), u([$({ type: String, reflect: !0 })], c.prototype, "value", 2), u([$({ type: String, reflect: !0 })], c.prototype, "label", 2), u([$({ type: String })], c.prototype, "maxHeight", 2), u([$({ type: Boolean })], c.prototype, "multi", 2), u([B()], c.prototype, "valueLabel", 2), u([V("#options")], c.prototype, "optionsContainer", 2), u([V("#empty")], c.prototype, "empty", 2), u([V("schmancy-input")], c.prototype, "input", 2), u([G({ flatten: !0 })], c.prototype, "options", 2), u([J({ passive: !0 })], c.prototype, "handleOptionClick", 1), c = u([K("schmancy-autocomplete")], c);
|
|
212
|
-
//# sourceMappingURL=autocomplete-8-xYgb2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete-8-xYgb2e.js","sources":["../node_modules/fastest-levenshtein/esm/mod.js","../src/autocomplete/autocomplete.ts"],"sourcesContent":["const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import { computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { distance } from 'fastest-levenshtein'\nimport { html } from 'lit'\nimport { customElement, eventOptions, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { from, fromEvent, Subject } from 'rxjs'\nimport { distinctUntilChanged, filter, switchMap, takeUntil, tap } from 'rxjs/operators'\nimport type { SchmancyInputChangeEvent } from '..'\nimport style from './autocomplete.scss?inline'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n\t/**\n\t * Whether input is required for form validity.\n\t */\n\t@property({ type: Boolean }) required = false\n\n\t/**\n\t * Placeholder text for the input.\n\t */\n\t@property({ type: String }) placeholder = ''\n\n\t/**\n\t * Programmatic value of the autocomplete. Setting this\n\t * after the element is rendered will now update the display.\n\t */\n\t@property({ type: String, reflect: true }) value = ''\n\n\t/**\n\t * Label for the input (floating label or similar).\n\t */\n\t@property({ type: String, reflect: true }) label = ''\n\n\t/**\n\t * Max height of the dropdown options container.\n\t */\n\t@property({ type: String }) maxHeight = '25vh'\n\n\t/**\n\t * Whether multiple selections are allowed.\n\t */\n\t@property({ type: Boolean }) multi = false\n\n\t/**\n\t * A local property to store the *display* value (label text).\n\t * This is separate from the raw `value`.\n\t */\n\t@state() valueLabel = ''\n\n\t// Refs and queries\n\tinputRef = createRef<HTMLInputElement>()\n\n\t/**\n\t * The main <ul> with id=\"options\".\n\t */\n\t@query('#options') optionsContainer!: HTMLUListElement\n\n\t/**\n\t * The \"no results found\" <li> element.\n\t */\n\t@query('#empty') empty!: HTMLLIElement\n\n\t/**\n\t * The SchmancyInput element (your visible text input).\n\t */\n\t@query('schmancy-input') input!: SchmancyInput\n\n\t/**\n\t * All the <schmancy-option> children assigned via the default slot.\n\t */\n\t@queryAssignedElements({ flatten: true })\n\toptions!: SchmancyOption[]\n\n\t// Reactive search term stream\n\tprivate readonly searchTerm$ = new Subject<string>()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t/**\n\t\t * Whenever user types in the schmancy-input, we do\n\t\t * fuzzy or distance-based filtering of the child <schmancy-option> elements.\n\t\t */\n\t\tthis.searchTerm$\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(term => {\n\t\t\t\t\tconst searchTerm = term.trim().toLowerCase()\n\n\t\t\t\t\t// The \"levenshtein-ish\" filtering\n\t\t\t\t\tconst matches = this.options\n\t\t\t\t\t\t.map(option => {\n\t\t\t\t\t\t\tconst optionText = option.label.toLowerCase()\n\t\t\t\t\t\t\tconst levDistance = distance(searchTerm, optionText)\n\t\t\t\t\t\t\treturn { option, levDistance }\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t({ option, levDistance }) =>\n\t\t\t\t\t\t\t\t// if short searchTerm, be lenient\n\t\t\t\t\t\t\t\tsearchTerm.length < 3 ||\n\t\t\t\t\t\t\t\t// otherwise, filter by distance\n\t\t\t\t\t\t\t\tlevDistance <= option.label.toLowerCase().length - searchTerm.length,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t// sort by ascending distance\n\t\t\t\t\t\t.sort((a, b) => a.levDistance - b.levDistance)\n\n\t\t\t\t\t// Show/hide appropriate options\n\t\t\t\t\tthis.options.forEach(o => (o.hidden = true))\n\t\t\t\t\tfor (const { option } of matches) {\n\t\t\t\t\t\toption.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\t// Show/hide the \"no results found\" <li>\n\t\t\t\t\tthis.empty.hidden = matches.length > 0\n\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.showOptions()\n\t\t\t})\n\n\t\t/**\n\t\t * If the user focuses out of the entire component (and\n\t\t * not just stepping from one <schmancy-option> to another),\n\t\t * animate out the dropdown, then hide it.\n\t\t */\n\t\tfromEvent<FocusEvent>(this, 'focusout')\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t// Make sure the newly focused element is *not* one of our <schmancy-option>s\n\t\t\t\tfilter(e => (e.relatedTarget as SchmancyOption)?.tagName !== 'SCHMANCY-OPTION'),\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// Animate the <ul> out\n\t\t\t\t\tconst animation = this.optionsContainer.animate(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{ opacity: 1 }, // from\n\t\t\t\t\t\t\t{ opacity: 0 }, // to\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\t\teasing: 'cubic-bezier(0.5, 0.01, 0.25, 1)',\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\t// Convert onfinish to a Promise\n\t\t\t\t\tconst animationPromise = new Promise<void>(resolve => {\n\t\t\t\t\t\tanimation.onfinish = () => {\n\t\t\t\t\t\t\tthis.optionsContainer.style.setProperty('display', 'none')\n\t\t\t\t\t\t\tthis.optionsContainer.style.setProperty('opacity', '1')\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\treturn from(animationPromise)\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\t// Once animation completes\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\t// Make sure the input displays the selected labels\n\t\t\t\t\t\tthis.input.value = this.options\n\t\t\t\t\t\t\t.filter(o => o.selected)\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Single\n\t\t\t\t\t\tthis.input.value = this.options.find(o => o.value === this.value)?.label ?? ''\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\t/**\n\t * firstUpdated (similar to componentDidMount in React).\n\t * We can do an initial sync of the input's display text\n\t * if a `value` was pre-set.\n\t */\n\tfirstUpdated() {\n\t\tthis.updateInputValue()\n\t}\n\n\t/**\n\t * This will be invoked *any time* a reactive property changes\n\t * after the first render. We specifically check if `value` changed,\n\t * so we can update the display text (and selected states) if needed.\n\t */\n\tprotected updated(changedProps: Map<string | number | symbol, unknown>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// If value changed, update the input display text + selected states\n\t\t\tthis.syncSelectionFromValue()\n\t\t\tthis.updateInputValue()\n\t\t}\n\t}\n\n\t/**\n\t * If user assigned new <schmancy-option> children, or changed them,\n\t * we also want to ensure the \"no results\" is correct and that\n\t * our input text is still in sync.\n\t */\n\tprivate handleSlotChange() {\n\t\t// Hide 'empty' if at least one option is visible\n\t\tthis.empty.hidden = this.options.some(option => !option.hidden)\n\t\t// Also do a fresh fill of the input\n\t\tthis.syncSelectionFromValue()\n\t\tthis.updateInputValue()\n\t}\n\n\t/**\n\t * For multi-select, ensure that any `value` strings\n\t * are reflected in the child <schmancy-option>'s `selected` property.\n\t * For single select, do similarly for the one matching option.\n\t */\n\tprivate syncSelectionFromValue() {\n\t\tif (this.multi) {\n\t\t\tconst values = this.value\n\t\t\t\t.split(',')\n\t\t\t\t.map(v => v.trim())\n\t\t\t\t.filter(Boolean)\n\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = values.includes(o.value)\n\t\t\t})\n\t\t} else {\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = o.value === this.value\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Takes the current `value` (and child <schmancy-option>s) and updates\n\t * the displayed text in the schmancy-input. Called whenever we need\n\t * to re-sync the visible input text to the actual data.\n\t */\n\tupdateInputValue() {\n\t\t// We do this in a rAF to avoid any weird timing issues\n\t\trequestAnimationFrame(() => {\n\t\t\tif (this.multi) {\n\t\t\t\tconst selectedOptions = this.options.filter(o => o.selected).map(o => o.label)\n\t\t\t\tthis.input.value = selectedOptions.join(', ')\n\t\t\t} else {\n\t\t\t\tconst found = this.options.find(o => o.value === this.value)?.label\n\t\t\t\tthis.input.value = found ?? ''\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Show the dropdown list, using Floating UI for positioning.\n\t */\n\tasync showOptions() {\n\t\tthis.optionsContainer.removeAttribute('hidden')\n\t\tthis.optionsContainer.style.setProperty('display', 'block')\n\n\t\tconst { x, y } = await computePosition(this.input, this.optionsContainer, {\n\t\t\tplacement: 'bottom-start',\n\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t})\n\n\t\tObject.assign(this.optionsContainer.style, {\n\t\t\tleft: `${x}px`,\n\t\t\ttop: `${y}px`,\n\t\t\tposition: 'absolute',\n\t\t\tzIndex: '9999',\n\t\t\tmaxHeight: this.maxHeight,\n\t\t\toverflowY: 'auto',\n\t\t})\n\t}\n\n\t/**\n\t * Hide the dropdown immediately (no animation).\n\t */\n\thideOptions() {\n\t\tthis.optionsContainer?.setAttribute('hidden', 'true')\n\t\tthis.optionsContainer?.style.setProperty('display', 'none')\n\t}\n\n\t/**\n\t * Called whenever the user types in the schmancy-input.\n\t */\n\thandleInputChange(event: SchmancyInputChangeEvent) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t\tconst term = event.detail.value\n\t\tthis.searchTerm$.next(term)\n\t}\n\n\t/**\n\t * Called whenever user clicks or taps an <schmancy-option>.\n\t */\n\t@eventOptions({ passive: true })\n\thandleOptionClick(value: string) {\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (option) {\n\t\t\t\toption.selected = !option.selected\n\t\t\t}\n\t\t\t// Rebuild the .value from the selected items\n\t\t\tconst selectedValues = this.options.filter(o => o.selected).map(o => o.value)\n\t\t\tthis.value = selectedValues.join(',')\n\t\t\t// Update display text, dispatch \"change\"\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value: selectedValues },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} else {\n\t\t\tthis.hideOptions()\n\t\t\tthis.value = value\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * Check validity of the selected value(s) to satisfy forms.\n\t */\n\tpublic checkValidity() {\n\t\treturn this.multi ? this.options.some(o => o.selected) : !!this.value\n\t}\n\n\t/**\n\t * Actually cause form validation checks if needed.\n\t */\n\tpublic reportValidity() {\n\t\treturn this.inputRef.value?.reportValidity()\n\t}\n\n\t/**\n\t * Attempt to prevent iOS scrolling the background page\n\t * while swiping within the options list. (NB: This logic\n\t * currently needs a bit more nuance to be robust.)\n\t */\n\tprivate startY = 0\n\n\tprivate handleTouchStart(event: TouchEvent) {\n\t\tthis.startY = event.touches?.[0]?.clientY ?? 0\n\t}\n\n\tprivate preventScroll(event: TouchEvent) {\n\t\tconst target = event.target as HTMLElement\n\t\tif (!this.optionsContainer.contains(target)) return\n\n\t\tconst scrollTop = this.optionsContainer.scrollTop\n\t\tconst scrollHeight = this.optionsContainer.scrollHeight\n\t\tconst offsetHeight = this.optionsContainer.offsetHeight\n\t\tconst contentHeight = scrollHeight - offsetHeight\n\n\t\t// Current touch Y\n\t\tconst currentY = event.touches?.[0]?.clientY ?? 0\n\n\t\t// If user is at top and swiping down, or at bottom and swiping up, block\n\t\tif ((scrollTop <= 0 && currentY > this.startY) || (scrollTop >= contentHeight && currentY < this.startY)) {\n\t\t\tevent.preventDefault()\n\t\t}\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<!-- If there's no external trigger slot, fall back to a schmancy-input -->\n\t\t\t\t<slot name=\"trigger\">\n\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t${ref(this.inputRef)}\n\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\tid=\"input\"\n\t\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t\t@focus=${this.showOptions}\n\t\t\t\t\t\tclickable\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\tinputmode=\"text\"\n\t\t\t\t\t\tplaceholder=${this.placeholder}\n\t\t\t\t\t\t@change=${this.handleInputChange}\n\t\t\t\t\t>\n\t\t\t\t\t</schmancy-input>\n\t\t\t\t</slot>\n\n\t\t\t\t<ul\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\tclass=\"absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-sm\"\n\t\t\t\t\tstyle=\"max-height: ${this.maxHeight}\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\thidden\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t// We rely on each <schmancy-option> dispatching a CustomEvent with detail.value\n\t\t\t\t\t\t// Or you can re-check e.target as <schmancy-option> and retrieve its value\n\t\t\t\t\t\tconst detailVal = (e as CustomEvent).detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionClick(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\t@touchstart=${this.handleTouchStart}\n\t\t\t\t\t@touchmove=${this.preventScroll}\n\t\t\t\t\t${color({\n\t\t\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.container,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<li id=\"empty\" tabindex=\"-1\">\n\t\t\t\t\t\t<schmancy-typography type=\"label\">No results found</schmancy-typography>\n\t\t\t\t\t</li>\n\n\t\t\t\t\t<!-- Default slot with the <schmancy-option> elements -->\n\t\t\t\t\t<slot @slotchange=${this.handleSlotChange}></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-autocomplete': SchmancyAutocomplete\n\t}\n}\n"],"names":["peq","Uint32Array","distance","a","b","length","tmp","n","m","lst","pv","mv","sc","i","charCodeAt","eq","xv","mhc","phc","hsize","Math","ceil","vsize","j","start","vlen","min","k","pb","mb","xh","ph","mh","score","SchmancyAutocomplete","$LitElement","super","arguments","this","required","placeholder","value","label","maxHeight","multi","valueLabel","inputRef","createRef","searchTerm$","Subject","startY","connectedCallback","pipe","takeUntil","disconnecting","distinctUntilChanged","tap","term","searchTerm","trim","toLowerCase","matches","options","map","option","optionText","levDistance","filter","sort","forEach","o","hidden","empty","requestUpdate","subscribe","showOptions","fromEvent","e","relatedTarget","tagName","switchMap","animation","optionsContainer","animate","opacity","duration","easing","animationPromise","Promise","resolve","onfinish","style","setProperty","from","next","input","selected","join","find","updateInputValue","changedProps","updated","has","syncSelectionFromValue","handleSlotChange","some","values","split","v","Boolean","includes","requestAnimationFrame","selectedOptions","found","removeAttribute","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","zIndex","overflowY","hideOptions","setAttribute","event","preventDefault","stopPropagation","detail","selectedValues","dispatchEvent","CustomEvent","bubbles","composed","reportValidity","touches","clientY","target","contains","scrollTop","contentHeight","scrollHeight","offsetHeight","currentY","render","html","ref","handleInputChange","detailVal","handleOptionClick","handleTouchStart","preventScroll","color","bgColor","SchmancyTheme","sys","surface","container","__decorateClass","property","type","prototype","String","reflect","state","query","queryAssignedElements","flatten","eventOptions","passive","customElement"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";const V=require("@floating-ui/dom"),I=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const Y=require("./litElement.mixin-d9rhslEw.cjs");require("./tailwind.mixin-DYx3IacW.cjs");const j=require("./ripple-C2BHbhcS.cjs"),L=require("./theme.interface-Xg5Zi46a.cjs"),M=require("lit"),u=require("lit/decorators.js"),H=require("lit/directives/ref.js"),$=require("rxjs/operators"),C=new Uint32Array(65536),U=(t,e)=>{if(t.length<e.length){const i=e;e=t,t=i}return e.length===0?t.length:t.length<=32?((i,o)=>{const r=i.length,l=o.length,a=1<<r-1;let p=-1,f=0,S=r,h=r;for(;h--;)C[i.charCodeAt(h)]|=1<<h;for(h=0;h<l;h++){let g=C[o.charCodeAt(h)];const v=g|f;g|=(g&p)+p^p,f|=~(g|p),p&=g,f&a&&S++,p&a&&S--,f=f<<1|1,p=p<<1|~(v|f),f&=v}for(h=r;h--;)C[i.charCodeAt(h)]=0;return S})(t,e):((i,o)=>{const r=o.length,l=i.length,a=[],p=[],f=Math.ceil(r/32),S=Math.ceil(l/32);for(let s=0;s<f;s++)p[s]=-1,a[s]=0;let h=0;for(;h<S-1;h++){let s=0,m=-1;const q=32*h,w=Math.min(32,l)+q;for(let n=q;n<w;n++)C[i.charCodeAt(n)]|=1<<n;for(let n=0;n<r;n++){const x=C[o.charCodeAt(n)],b=p[n/32|0]>>>n&1,y=a[n/32|0]>>>n&1,T=x|s,D=((x|y)&m)+m^m|x|y;let A=s|~(D|m),k=m&D;A>>>31^b&&(p[n/32|0]^=1<<n),k>>>31^y&&(a[n/32|0]^=1<<n),A=A<<1|b,k=k<<1|y,m=k|~(T|A),s=A&T}for(let n=q;n<w;n++)C[i.charCodeAt(n)]=0}let g=0,v=-1;const O=32*h,P=Math.min(32,l-O)+O;for(let s=O;s<P;s++)C[i.charCodeAt(s)]|=1<<s;let E=l;for(let s=0;s<r;s++){const m=C[o.charCodeAt(s)],q=p[s/32|0]>>>s&1,w=a[s/32|0]>>>s&1,n=m|g,x=((m|w)&v)+v^v|m|w;let b=g|~(x|v),y=v&x;E+=b>>>l-1&1,E-=y>>>l-1&1,b>>>31^q&&(p[s/32|0]^=1<<s),y>>>31^w&&(a[s/32|0]^=1<<s),b=b<<1|q,y=y<<1|w,v=y|~(n|b),g=b&n}for(let s=O;s<P;s++)C[i.charCodeAt(s)]=0;return E})(t,e)};var z=Object.defineProperty,F=Object.getOwnPropertyDescriptor,d=(t,e,i,o)=>{for(var r,l=o>1?void 0:o?F(e,i):e,a=t.length-1;a>=0;a--)(r=t[a])&&(l=(o?r(e,i,l):r(l))||l);return o&&l&&z(e,i,l),l};let c=class extends Y.$LitElement(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}"){constructor(){super(...arguments),this.required=!1,this.placeholder="",this.value="",this.label="",this.maxHeight="25vh",this.multi=!1,this.valueLabel="",this.inputRef=H.createRef(),this.searchTerm$=new I.Subject,this.startY=0}connectedCallback(){super.connectedCallback(),this.searchTerm$.pipe($.takeUntil(this.disconnecting),$.distinctUntilChanged(),$.tap(t=>{const e=t.trim().toLowerCase(),i=this.options.map(o=>{const r=o.label.toLowerCase();return{option:o,levDistance:U(e,r)}}).filter(({option:o,levDistance:r})=>e.length<3||r<=o.label.toLowerCase().length-e.length).sort((o,r)=>o.levDistance-r.levDistance);this.options.forEach(o=>o.hidden=!0);for(const{option:o}of i)o.hidden=!1;this.empty.hidden=i.length>0,this.requestUpdate()})).subscribe(()=>{this.showOptions()}),I.fromEvent(this,"focusout").pipe($.takeUntil(this.disconnecting),$.filter(t=>{var e;return((e=t.relatedTarget)==null?void 0:e.tagName)!=="SCHMANCY-OPTION"}),$.switchMap(()=>{const t=this.optionsContainer.animate([{opacity:1},{opacity:0}],{duration:250,easing:"cubic-bezier(0.5, 0.01, 0.25, 1)"}),e=new Promise(i=>{t.onfinish=()=>{this.optionsContainer.style.setProperty("display","none"),this.optionsContainer.style.setProperty("opacity","1"),i()}});return I.from(e)})).subscribe({next:()=>{var t;this.multi?this.input.value=this.options.filter(e=>e.selected).map(e=>e.label).join(", "):this.input.value=((t=this.options.find(e=>e.value===this.value))==null?void 0:t.label)??""}})}firstUpdated(){this.updateInputValue()}updated(t){super.updated(t),t.has("value")&&(this.syncSelectionFromValue(),this.updateInputValue())}handleSlotChange(){this.empty.hidden=this.options.some(t=>!t.hidden),this.syncSelectionFromValue(),this.updateInputValue()}syncSelectionFromValue(){if(this.multi){const t=this.value.split(",").map(e=>e.trim()).filter(Boolean);this.options.forEach(e=>{e.selected=t.includes(e.value)})}else this.options.forEach(t=>{t.selected=t.value===this.value})}updateInputValue(){requestAnimationFrame(()=>{var t;if(this.multi){const e=this.options.filter(i=>i.selected).map(i=>i.label);this.input.value=e.join(", ")}else{const e=(t=this.options.find(i=>i.value===this.value))==null?void 0:t.label;this.input.value=e??""}})}async showOptions(){this.optionsContainer.removeAttribute("hidden"),this.optionsContainer.style.setProperty("display","block");const{x:t,y:e}=await V.computePosition(this.input,this.optionsContainer,{placement:"bottom-start",middleware:[V.offset(5),V.flip(),V.shift({padding:5})]});Object.assign(this.optionsContainer.style,{left:`${t}px`,top:`${e}px`,position:"absolute",zIndex:"9999",maxHeight:this.maxHeight,overflowY:"auto"})}hideOptions(){var t,e;(t=this.optionsContainer)==null||t.setAttribute("hidden","true"),(e=this.optionsContainer)==null||e.style.setProperty("display","none")}handleInputChange(t){t.preventDefault(),t.stopPropagation();const e=t.detail.value;this.searchTerm$.next(e)}handleOptionClick(t){if(this.multi){const e=this.options.find(o=>o.value===t);e&&(e.selected=!e.selected);const i=this.options.filter(o=>o.selected).map(o=>o.value);this.value=i.join(","),this.updateInputValue(),this.dispatchEvent(new CustomEvent("change",{detail:{value:i},bubbles:!0,composed:!0}))}else this.hideOptions(),this.value=t,this.updateInputValue(),this.dispatchEvent(new CustomEvent("change",{detail:{value:t},bubbles:!0,composed:!0}))}checkValidity(){return this.multi?this.options.some(t=>t.selected):!!this.value}reportValidity(){var t;return(t=this.inputRef.value)==null?void 0:t.reportValidity()}handleTouchStart(t){var e,i;this.startY=((i=(e=t.touches)==null?void 0:e[0])==null?void 0:i.clientY)??0}preventScroll(t){var l,a;const e=t.target;if(!this.optionsContainer.contains(e))return;const i=this.optionsContainer.scrollTop,o=this.optionsContainer.scrollHeight-this.optionsContainer.offsetHeight,r=((a=(l=t.touches)==null?void 0:l[0])==null?void 0:a.clientY)??0;(i<=0&&r>this.startY||i>=o&&r<this.startY)&&t.preventDefault()}render(){return M.html`
|
|
2
|
-
<div class="relative">
|
|
3
|
-
<!-- If there's no external trigger slot, fall back to a schmancy-input -->
|
|
4
|
-
<slot name="trigger">
|
|
5
|
-
<schmancy-input
|
|
6
|
-
autocomplete="off"
|
|
7
|
-
class="w-full"
|
|
8
|
-
${H.ref(this.inputRef)}
|
|
9
|
-
.required=${this.required}
|
|
10
|
-
id="input"
|
|
11
|
-
.label=${this.label}
|
|
12
|
-
@focus=${this.showOptions}
|
|
13
|
-
clickable
|
|
14
|
-
type="search"
|
|
15
|
-
inputmode="text"
|
|
16
|
-
placeholder=${this.placeholder}
|
|
17
|
-
@change=${this.handleInputChange}
|
|
18
|
-
>
|
|
19
|
-
</schmancy-input>
|
|
20
|
-
</slot>
|
|
21
|
-
|
|
22
|
-
<ul
|
|
23
|
-
tabindex="-1"
|
|
24
|
-
id="options"
|
|
25
|
-
class="absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-sm"
|
|
26
|
-
style="max-height: ${this.maxHeight}"
|
|
27
|
-
role="listbox"
|
|
28
|
-
hidden
|
|
29
|
-
@click=${t=>{var i;const e=(i=t.detail)==null?void 0:i.value;e&&this.handleOptionClick(e)}}
|
|
30
|
-
@touchstart=${this.handleTouchStart}
|
|
31
|
-
@touchmove=${this.preventScroll}
|
|
32
|
-
${j.color({bgColor:L.SchmancyTheme.sys.color.surface.container})}
|
|
33
|
-
>
|
|
34
|
-
<li id="empty" tabindex="-1">
|
|
35
|
-
<schmancy-typography type="label">No results found</schmancy-typography>
|
|
36
|
-
</li>
|
|
37
|
-
|
|
38
|
-
<!-- Default slot with the <schmancy-option> elements -->
|
|
39
|
-
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
40
|
-
</ul>
|
|
41
|
-
</div>
|
|
42
|
-
`}};d([u.property({type:Boolean})],c.prototype,"required",2),d([u.property({type:String})],c.prototype,"placeholder",2),d([u.property({type:String,reflect:!0})],c.prototype,"value",2),d([u.property({type:String,reflect:!0})],c.prototype,"label",2),d([u.property({type:String})],c.prototype,"maxHeight",2),d([u.property({type:Boolean})],c.prototype,"multi",2),d([u.state()],c.prototype,"valueLabel",2),d([u.query("#options")],c.prototype,"optionsContainer",2),d([u.query("#empty")],c.prototype,"empty",2),d([u.query("schmancy-input")],c.prototype,"input",2),d([u.queryAssignedElements({flatten:!0})],c.prototype,"options",2),d([u.eventOptions({passive:!0})],c.prototype,"handleOptionClick",1),c=d([u.customElement("schmancy-autocomplete")],c);
|
|
43
|
-
//# sourceMappingURL=autocomplete-CtUz_AlC.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete-CtUz_AlC.cjs","sources":["../node_modules/fastest-levenshtein/esm/mod.js","../src/autocomplete/autocomplete.ts"],"sourcesContent":["const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import { computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { distance } from 'fastest-levenshtein'\nimport { html } from 'lit'\nimport { customElement, eventOptions, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { from, fromEvent, Subject } from 'rxjs'\nimport { distinctUntilChanged, filter, switchMap, takeUntil, tap } from 'rxjs/operators'\nimport type { SchmancyInputChangeEvent } from '..'\nimport style from './autocomplete.scss?inline'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n\t/**\n\t * Whether input is required for form validity.\n\t */\n\t@property({ type: Boolean }) required = false\n\n\t/**\n\t * Placeholder text for the input.\n\t */\n\t@property({ type: String }) placeholder = ''\n\n\t/**\n\t * Programmatic value of the autocomplete. Setting this\n\t * after the element is rendered will now update the display.\n\t */\n\t@property({ type: String, reflect: true }) value = ''\n\n\t/**\n\t * Label for the input (floating label or similar).\n\t */\n\t@property({ type: String, reflect: true }) label = ''\n\n\t/**\n\t * Max height of the dropdown options container.\n\t */\n\t@property({ type: String }) maxHeight = '25vh'\n\n\t/**\n\t * Whether multiple selections are allowed.\n\t */\n\t@property({ type: Boolean }) multi = false\n\n\t/**\n\t * A local property to store the *display* value (label text).\n\t * This is separate from the raw `value`.\n\t */\n\t@state() valueLabel = ''\n\n\t// Refs and queries\n\tinputRef = createRef<HTMLInputElement>()\n\n\t/**\n\t * The main <ul> with id=\"options\".\n\t */\n\t@query('#options') optionsContainer!: HTMLUListElement\n\n\t/**\n\t * The \"no results found\" <li> element.\n\t */\n\t@query('#empty') empty!: HTMLLIElement\n\n\t/**\n\t * The SchmancyInput element (your visible text input).\n\t */\n\t@query('schmancy-input') input!: SchmancyInput\n\n\t/**\n\t * All the <schmancy-option> children assigned via the default slot.\n\t */\n\t@queryAssignedElements({ flatten: true })\n\toptions!: SchmancyOption[]\n\n\t// Reactive search term stream\n\tprivate readonly searchTerm$ = new Subject<string>()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t/**\n\t\t * Whenever user types in the schmancy-input, we do\n\t\t * fuzzy or distance-based filtering of the child <schmancy-option> elements.\n\t\t */\n\t\tthis.searchTerm$\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(term => {\n\t\t\t\t\tconst searchTerm = term.trim().toLowerCase()\n\n\t\t\t\t\t// The \"levenshtein-ish\" filtering\n\t\t\t\t\tconst matches = this.options\n\t\t\t\t\t\t.map(option => {\n\t\t\t\t\t\t\tconst optionText = option.label.toLowerCase()\n\t\t\t\t\t\t\tconst levDistance = distance(searchTerm, optionText)\n\t\t\t\t\t\t\treturn { option, levDistance }\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t({ option, levDistance }) =>\n\t\t\t\t\t\t\t\t// if short searchTerm, be lenient\n\t\t\t\t\t\t\t\tsearchTerm.length < 3 ||\n\t\t\t\t\t\t\t\t// otherwise, filter by distance\n\t\t\t\t\t\t\t\tlevDistance <= option.label.toLowerCase().length - searchTerm.length,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t// sort by ascending distance\n\t\t\t\t\t\t.sort((a, b) => a.levDistance - b.levDistance)\n\n\t\t\t\t\t// Show/hide appropriate options\n\t\t\t\t\tthis.options.forEach(o => (o.hidden = true))\n\t\t\t\t\tfor (const { option } of matches) {\n\t\t\t\t\t\toption.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\t// Show/hide the \"no results found\" <li>\n\t\t\t\t\tthis.empty.hidden = matches.length > 0\n\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.showOptions()\n\t\t\t})\n\n\t\t/**\n\t\t * If the user focuses out of the entire component (and\n\t\t * not just stepping from one <schmancy-option> to another),\n\t\t * animate out the dropdown, then hide it.\n\t\t */\n\t\tfromEvent<FocusEvent>(this, 'focusout')\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t// Make sure the newly focused element is *not* one of our <schmancy-option>s\n\t\t\t\tfilter(e => (e.relatedTarget as SchmancyOption)?.tagName !== 'SCHMANCY-OPTION'),\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// Animate the <ul> out\n\t\t\t\t\tconst animation = this.optionsContainer.animate(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{ opacity: 1 }, // from\n\t\t\t\t\t\t\t{ opacity: 0 }, // to\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\t\teasing: 'cubic-bezier(0.5, 0.01, 0.25, 1)',\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\t// Convert onfinish to a Promise\n\t\t\t\t\tconst animationPromise = new Promise<void>(resolve => {\n\t\t\t\t\t\tanimation.onfinish = () => {\n\t\t\t\t\t\t\tthis.optionsContainer.style.setProperty('display', 'none')\n\t\t\t\t\t\t\tthis.optionsContainer.style.setProperty('opacity', '1')\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\treturn from(animationPromise)\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\t// Once animation completes\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\t// Make sure the input displays the selected labels\n\t\t\t\t\t\tthis.input.value = this.options\n\t\t\t\t\t\t\t.filter(o => o.selected)\n\t\t\t\t\t\t\t.map(o => o.label)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Single\n\t\t\t\t\t\tthis.input.value = this.options.find(o => o.value === this.value)?.label ?? ''\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\t/**\n\t * firstUpdated (similar to componentDidMount in React).\n\t * We can do an initial sync of the input's display text\n\t * if a `value` was pre-set.\n\t */\n\tfirstUpdated() {\n\t\tthis.updateInputValue()\n\t}\n\n\t/**\n\t * This will be invoked *any time* a reactive property changes\n\t * after the first render. We specifically check if `value` changed,\n\t * so we can update the display text (and selected states) if needed.\n\t */\n\tprotected updated(changedProps: Map<string | number | symbol, unknown>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('value')) {\n\t\t\t// If value changed, update the input display text + selected states\n\t\t\tthis.syncSelectionFromValue()\n\t\t\tthis.updateInputValue()\n\t\t}\n\t}\n\n\t/**\n\t * If user assigned new <schmancy-option> children, or changed them,\n\t * we also want to ensure the \"no results\" is correct and that\n\t * our input text is still in sync.\n\t */\n\tprivate handleSlotChange() {\n\t\t// Hide 'empty' if at least one option is visible\n\t\tthis.empty.hidden = this.options.some(option => !option.hidden)\n\t\t// Also do a fresh fill of the input\n\t\tthis.syncSelectionFromValue()\n\t\tthis.updateInputValue()\n\t}\n\n\t/**\n\t * For multi-select, ensure that any `value` strings\n\t * are reflected in the child <schmancy-option>'s `selected` property.\n\t * For single select, do similarly for the one matching option.\n\t */\n\tprivate syncSelectionFromValue() {\n\t\tif (this.multi) {\n\t\t\tconst values = this.value\n\t\t\t\t.split(',')\n\t\t\t\t.map(v => v.trim())\n\t\t\t\t.filter(Boolean)\n\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = values.includes(o.value)\n\t\t\t})\n\t\t} else {\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = o.value === this.value\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Takes the current `value` (and child <schmancy-option>s) and updates\n\t * the displayed text in the schmancy-input. Called whenever we need\n\t * to re-sync the visible input text to the actual data.\n\t */\n\tupdateInputValue() {\n\t\t// We do this in a rAF to avoid any weird timing issues\n\t\trequestAnimationFrame(() => {\n\t\t\tif (this.multi) {\n\t\t\t\tconst selectedOptions = this.options.filter(o => o.selected).map(o => o.label)\n\t\t\t\tthis.input.value = selectedOptions.join(', ')\n\t\t\t} else {\n\t\t\t\tconst found = this.options.find(o => o.value === this.value)?.label\n\t\t\t\tthis.input.value = found ?? ''\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Show the dropdown list, using Floating UI for positioning.\n\t */\n\tasync showOptions() {\n\t\tthis.optionsContainer.removeAttribute('hidden')\n\t\tthis.optionsContainer.style.setProperty('display', 'block')\n\n\t\tconst { x, y } = await computePosition(this.input, this.optionsContainer, {\n\t\t\tplacement: 'bottom-start',\n\t\t\tmiddleware: [offset(5), flip(), shift({ padding: 5 })],\n\t\t})\n\n\t\tObject.assign(this.optionsContainer.style, {\n\t\t\tleft: `${x}px`,\n\t\t\ttop: `${y}px`,\n\t\t\tposition: 'absolute',\n\t\t\tzIndex: '9999',\n\t\t\tmaxHeight: this.maxHeight,\n\t\t\toverflowY: 'auto',\n\t\t})\n\t}\n\n\t/**\n\t * Hide the dropdown immediately (no animation).\n\t */\n\thideOptions() {\n\t\tthis.optionsContainer?.setAttribute('hidden', 'true')\n\t\tthis.optionsContainer?.style.setProperty('display', 'none')\n\t}\n\n\t/**\n\t * Called whenever the user types in the schmancy-input.\n\t */\n\thandleInputChange(event: SchmancyInputChangeEvent) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t\tconst term = event.detail.value\n\t\tthis.searchTerm$.next(term)\n\t}\n\n\t/**\n\t * Called whenever user clicks or taps an <schmancy-option>.\n\t */\n\t@eventOptions({ passive: true })\n\thandleOptionClick(value: string) {\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (option) {\n\t\t\t\toption.selected = !option.selected\n\t\t\t}\n\t\t\t// Rebuild the .value from the selected items\n\t\t\tconst selectedValues = this.options.filter(o => o.selected).map(o => o.value)\n\t\t\tthis.value = selectedValues.join(',')\n\t\t\t// Update display text, dispatch \"change\"\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value: selectedValues },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} else {\n\t\t\tthis.hideOptions()\n\t\t\tthis.value = value\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * Check validity of the selected value(s) to satisfy forms.\n\t */\n\tpublic checkValidity() {\n\t\treturn this.multi ? this.options.some(o => o.selected) : !!this.value\n\t}\n\n\t/**\n\t * Actually cause form validation checks if needed.\n\t */\n\tpublic reportValidity() {\n\t\treturn this.inputRef.value?.reportValidity()\n\t}\n\n\t/**\n\t * Attempt to prevent iOS scrolling the background page\n\t * while swiping within the options list. (NB: This logic\n\t * currently needs a bit more nuance to be robust.)\n\t */\n\tprivate startY = 0\n\n\tprivate handleTouchStart(event: TouchEvent) {\n\t\tthis.startY = event.touches?.[0]?.clientY ?? 0\n\t}\n\n\tprivate preventScroll(event: TouchEvent) {\n\t\tconst target = event.target as HTMLElement\n\t\tif (!this.optionsContainer.contains(target)) return\n\n\t\tconst scrollTop = this.optionsContainer.scrollTop\n\t\tconst scrollHeight = this.optionsContainer.scrollHeight\n\t\tconst offsetHeight = this.optionsContainer.offsetHeight\n\t\tconst contentHeight = scrollHeight - offsetHeight\n\n\t\t// Current touch Y\n\t\tconst currentY = event.touches?.[0]?.clientY ?? 0\n\n\t\t// If user is at top and swiping down, or at bottom and swiping up, block\n\t\tif ((scrollTop <= 0 && currentY > this.startY) || (scrollTop >= contentHeight && currentY < this.startY)) {\n\t\t\tevent.preventDefault()\n\t\t}\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<!-- If there's no external trigger slot, fall back to a schmancy-input -->\n\t\t\t\t<slot name=\"trigger\">\n\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t${ref(this.inputRef)}\n\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\tid=\"input\"\n\t\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t\t@focus=${this.showOptions}\n\t\t\t\t\t\tclickable\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\tinputmode=\"text\"\n\t\t\t\t\t\tplaceholder=${this.placeholder}\n\t\t\t\t\t\t@change=${this.handleInputChange}\n\t\t\t\t\t>\n\t\t\t\t\t</schmancy-input>\n\t\t\t\t</slot>\n\n\t\t\t\t<ul\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\tclass=\"absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-sm\"\n\t\t\t\t\tstyle=\"max-height: ${this.maxHeight}\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\thidden\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t// We rely on each <schmancy-option> dispatching a CustomEvent with detail.value\n\t\t\t\t\t\t// Or you can re-check e.target as <schmancy-option> and retrieve its value\n\t\t\t\t\t\tconst detailVal = (e as CustomEvent).detail?.value\n\t\t\t\t\t\tif (detailVal) {\n\t\t\t\t\t\t\tthis.handleOptionClick(detailVal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\t@touchstart=${this.handleTouchStart}\n\t\t\t\t\t@touchmove=${this.preventScroll}\n\t\t\t\t\t${color({\n\t\t\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.container,\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t<li id=\"empty\" tabindex=\"-1\">\n\t\t\t\t\t\t<schmancy-typography type=\"label\">No results found</schmancy-typography>\n\t\t\t\t\t</li>\n\n\t\t\t\t\t<!-- Default slot with the <schmancy-option> elements -->\n\t\t\t\t\t<slot @slotchange=${this.handleSlotChange}></slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-autocomplete': SchmancyAutocomplete\n\t}\n}\n"],"names":["peq","Uint32Array","distance","a","b","length","tmp","n","m","lst","pv","mv","sc","i","charCodeAt","eq","xv","mhc","phc","hsize","Math","ceil","vsize","j","start","vlen","min","k","pb","mb","xh","ph","mh","score","SchmancyAutocomplete","$LitElement","super","arguments","this","required","placeholder","value","label","maxHeight","multi","valueLabel","inputRef","createRef","searchTerm$","Subject","startY","connectedCallback","pipe","takeUntil","disconnecting","distinctUntilChanged","tap","term","searchTerm","trim","toLowerCase","matches","options","map","option","optionText","levDistance","filter","sort","forEach","o","hidden","empty","requestUpdate","subscribe","showOptions","fromEvent","e","relatedTarget","tagName","switchMap","animation","optionsContainer","animate","opacity","duration","easing","animationPromise","Promise","resolve","onfinish","style","setProperty","from","next","input","selected","join","find","updateInputValue","changedProps","updated","has","syncSelectionFromValue","handleSlotChange","some","values","split","v","Boolean","includes","requestAnimationFrame","selectedOptions","found","removeAttribute","x","y","computePosition","placement","middleware","offset","flip","shift","padding","Object","assign","left","top","position","zIndex","overflowY","setAttribute","event","preventDefault","stopPropagation","detail","selectedValues","dispatchEvent","CustomEvent","bubbles","composed","hideOptions","reportValidity","touches","clientY","target","contains","scrollTop","contentHeight","scrollHeight","offsetHeight","currentY","html","ref","handleInputChange","detailVal","handleOptionClick","handleTouchStart","preventScroll","color","bgColor","SchmancyTheme","sys","surface","container","__decorateClass","property","type","prototype","String","reflect","state","query","queryAssignedElements","flatten","eventOptions","passive","customElement"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import "rxjs";
|
|
2
|
-
import "lit/directives/class-map.js";
|
|
3
|
-
import "lit/directives/style-map.js";
|
|
4
|
-
import { $ as u } from "./litElement.mixin-COSnyAru.js";
|
|
5
|
-
import "./tailwind.mixin-DNlFmovi.js";
|
|
6
|
-
import { html as p } from "lit";
|
|
7
|
-
import { property as d, query as m, state as y, customElement as g } from "lit/decorators.js";
|
|
8
|
-
import { ifDefined as l } from "lit/directives/if-defined.js";
|
|
9
|
-
import a from "moment";
|
|
10
|
-
var f = Object.defineProperty, D = Object.getOwnPropertyDescriptor, n = (t, e, s, r) => {
|
|
11
|
-
for (var c, i = r > 1 ? void 0 : r ? D(e, s) : e, h = t.length - 1; h >= 0; h--) (c = t[h]) && (i = (r ? c(e, s, i) : c(i)) || i);
|
|
12
|
-
return r && i && f(e, s, i), i;
|
|
13
|
-
};
|
|
14
|
-
let o = class extends u() {
|
|
15
|
-
constructor() {
|
|
16
|
-
super(...arguments), this.type = "date", this.selectedDateRange = "Today";
|
|
17
|
-
}
|
|
18
|
-
connectedCallback() {
|
|
19
|
-
super.connectedCallback(), this.initPresetRanges(), this.updateSelectedDateRange();
|
|
20
|
-
}
|
|
21
|
-
updated(t) {
|
|
22
|
-
t.has("type") && (this.initPresetRanges(), this.updateSelectedDateRange());
|
|
23
|
-
}
|
|
24
|
-
getDateFormat() {
|
|
25
|
-
return this.type === "date" ? "YYYY-MM-DD" : "YYYY-MM-DDTHH:mm";
|
|
26
|
-
}
|
|
27
|
-
getDisplayFormat() {
|
|
28
|
-
return this.type === "date" ? "MMM DD, YYYY" : "MMM DD, YYYY hh:mm A";
|
|
29
|
-
}
|
|
30
|
-
initPresetRanges() {
|
|
31
|
-
const t = this.getDateFormat();
|
|
32
|
-
this.presetRanges = [{ label: "Yesterday", range: { dateFrom: a().subtract(1, "days").startOf("day").format(t), dateTo: a().subtract(1, "days").endOf("day").format(t) }, step: "day" }, { label: "Today", range: { dateFrom: a().startOf("day").format(t), dateTo: a().endOf("day").format(t) }, step: "day" }, { label: "Tomorrow", range: { dateFrom: a().add(1, "days").startOf("day").format(t), dateTo: a().add(1, "days").endOf("day").format(t) }, step: "day" }, { label: "This Week", range: { dateFrom: a().startOf("isoWeek").format(t), dateTo: a().endOf("isoWeek").format(t) }, step: "week" }, { label: "Last Week", range: { dateFrom: a().subtract(1, "weeks").startOf("isoWeek").format(t), dateTo: a().subtract(1, "weeks").endOf("isoWeek").format(t) }, step: "week" }, { label: "This Month", range: { dateFrom: a().startOf("month").format(t), dateTo: a().endOf("month").format(t) }, step: "month" }];
|
|
33
|
-
}
|
|
34
|
-
updateSelectedDateRange() {
|
|
35
|
-
const t = this.presetRanges.find((e) => e.range.dateFrom === this.dateFrom.value && e.range.dateTo === this.dateTo.value);
|
|
36
|
-
this.selectedDateRange = t ? t.label : `${a(this.dateFrom.value).format(this.getDisplayFormat())} - ${a(this.dateTo.value).format(this.getDisplayFormat())}`;
|
|
37
|
-
}
|
|
38
|
-
setDateRange(t, e) {
|
|
39
|
-
this.dateFrom.value = t, this.dateTo.value = e, this.dispatchEvent(new CustomEvent("change", { detail: { dateFrom: t, dateTo: e } })), this.requestUpdate();
|
|
40
|
-
}
|
|
41
|
-
handlePresetChange(t) {
|
|
42
|
-
const e = this.presetRanges.find((s) => s.label === t);
|
|
43
|
-
if (e) {
|
|
44
|
-
const { dateFrom: s, dateTo: r } = e.range;
|
|
45
|
-
this.setDateRange(s, r), this.selectedDateRange = t, this.schmancyMenu.open = !1;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
handleDateRangeChange() {
|
|
49
|
-
this.setDateRange(this.dateFrom.value, this.dateTo.value), this.updateSelectedDateRange(), this.schmancyMenu.open = !1;
|
|
50
|
-
}
|
|
51
|
-
shiftDateRange(t) {
|
|
52
|
-
const e = this.getDateFormat(), s = a(this.dateTo.value).diff(a(this.dateFrom.value), "days") || 1, r = a(this.dateFrom.value).add(t * s, "days").format(e), c = a(this.dateTo.value).add(t * s, "days").format(e);
|
|
53
|
-
this.setDateRange(r, c), this.updateSelectedDateRange();
|
|
54
|
-
}
|
|
55
|
-
render() {
|
|
56
|
-
return p`
|
|
57
|
-
<div class="date-range-selector relative">
|
|
58
|
-
<schmancy-menu class="z-100 w-max">
|
|
59
|
-
<!-- The button slot: left/right arrows and the display text -->
|
|
60
|
-
<schmancy-grid slot="button" align="center" cols="auto 1fr auto">
|
|
61
|
-
<schmancy-icon-button
|
|
62
|
-
@click=${(t) => {
|
|
63
|
-
t.preventDefault(), t.stopPropagation(), this.shiftDateRange(-1);
|
|
64
|
-
}}
|
|
65
|
-
>
|
|
66
|
-
arrow_left
|
|
67
|
-
</schmancy-icon-button>
|
|
68
|
-
<schmancy-button class="w-max" variant="outlined" type="button">
|
|
69
|
-
${this.selectedDateRange || "Date range"}
|
|
70
|
-
</schmancy-button>
|
|
71
|
-
<schmancy-icon-button
|
|
72
|
-
@click=${(t) => {
|
|
73
|
-
t.preventDefault(), t.stopPropagation(), this.shiftDateRange(1);
|
|
74
|
-
}}
|
|
75
|
-
>
|
|
76
|
-
arrow_right
|
|
77
|
-
</schmancy-icon-button>
|
|
78
|
-
</schmancy-grid>
|
|
79
|
-
|
|
80
|
-
<!-- The menu surface -->
|
|
81
|
-
<schmancy-surface elevation="2">
|
|
82
|
-
${this.presetRanges.map((t) => p`
|
|
83
|
-
<schmancy-menu-item class="w-full" @click=${() => this.handlePresetChange(t.label)}>
|
|
84
|
-
<schmancy-grid class="w-full" align="center" cols="auto 1fr auto"> ${t.label} </schmancy-grid>
|
|
85
|
-
</schmancy-menu-item>
|
|
86
|
-
`)}
|
|
87
|
-
<schmancy-grid gap="sm" flow="row" class="p-4">
|
|
88
|
-
<schmancy-input
|
|
89
|
-
id="checkin"
|
|
90
|
-
min=${l(this.minDate)}
|
|
91
|
-
.type=${this.type}
|
|
92
|
-
label="${this.dateFrom.label}"
|
|
93
|
-
.value=${this.dateFrom.value}
|
|
94
|
-
@change=${(t) => {
|
|
95
|
-
t.preventDefault(), t.stopPropagation();
|
|
96
|
-
const e = this.getDateFormat(), s = a(t.detail.value, e).format(e);
|
|
97
|
-
this.dateFrom.value = s, this.checkOutInput.setAttribute("min", s);
|
|
98
|
-
}}
|
|
99
|
-
></schmancy-input>
|
|
100
|
-
<schmancy-input
|
|
101
|
-
id="checkout"
|
|
102
|
-
min=${l(this.dateFrom.value)}
|
|
103
|
-
max=${l(this.maxDate)}
|
|
104
|
-
.type=${this.type}
|
|
105
|
-
label="${this.dateTo.label}"
|
|
106
|
-
.value=${this.dateTo.value}
|
|
107
|
-
@change=${(t) => {
|
|
108
|
-
t.preventDefault(), t.stopPropagation();
|
|
109
|
-
const e = this.getDateFormat(), s = a(t.detail.value, e).format(e);
|
|
110
|
-
this.dateTo.value = s;
|
|
111
|
-
}}
|
|
112
|
-
></schmancy-input>
|
|
113
|
-
|
|
114
|
-
<schmancy-button
|
|
115
|
-
variant="outlined"
|
|
116
|
-
@click=${(t) => {
|
|
117
|
-
t.preventDefault(), t.stopPropagation(), this.handleDateRangeChange();
|
|
118
|
-
}}
|
|
119
|
-
>
|
|
120
|
-
Apply
|
|
121
|
-
</schmancy-button>
|
|
122
|
-
</schmancy-grid>
|
|
123
|
-
</schmancy-surface>
|
|
124
|
-
</schmancy-menu>
|
|
125
|
-
</div>
|
|
126
|
-
`;
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
n([d({ type: String })], o.prototype, "type", 2), n([d({ type: Object })], o.prototype, "dateFrom", 2), n([d({ type: Object })], o.prototype, "dateTo", 2), n([d({ type: String })], o.prototype, "minDate", 2), n([d({ type: String })], o.prototype, "maxDate", 2), n([m("#checkin")], o.prototype, "checkInInput", 2), n([m("#checkout")], o.prototype, "checkOutInput", 2), n([m("schmancy-menu")], o.prototype, "schmancyMenu", 2), n([y()], o.prototype, "selectedDateRange", 2), o = n([g("schmancy-date-range")], o);
|
|
130
|
-
//# sourceMappingURL=date-range-Cvdpxn2J.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-Cvdpxn2J.js","sources":["../src/date-range/date-range.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { SchmancyInputChangeEvent } from '@schmancy/input'\nimport SchmancyMenu from '@schmancy/menu/menu'\nimport { html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport moment from 'moment'\n\n/**\n * A date range selector that supports presets and manual date input.\n */\n@customElement('schmancy-date-range')\nexport default class SchmancyDateRange extends $LitElement() {\n\t// The input type – either \"date\" or \"datetime-local\".\n\t@property({ type: String }) type: 'date' | 'datetime-local' = 'date'\n\n\t// The date range properties.\n\t@property({ type: Object }) dateFrom!: { label: string; value: string }\n\t@property({ type: Object }) dateTo!: { label: string; value: string }\n\n\t// Optional minimum and maximum dates.\n\t@property({ type: String }) minDate?: string\n\t@property({ type: String }) maxDate?: string\n\n\t// Query elements from the rendered template.\n\t@query('#checkin') checkInInput!: HTMLInputElement\n\t@query('#checkout') checkOutInput!: HTMLInputElement\n\t@query('schmancy-menu') schmancyMenu!: SchmancyMenu\n\n\t// The currently selected preset or custom date range display text.\n\t@state() selectedDateRange: string = 'Today'\n\n\t// Array of preset date ranges.\n\tpresetRanges!: Array<{\n\t\tlabel: string\n\t\trange: { dateFrom: string; dateTo: string }\n\t\tstep: moment.unitOfTime.DurationConstructor\n\t\tselected?: boolean\n\t}>\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.initPresetRanges()\n\t\tthis.updateSelectedDateRange()\n\t}\n\n\tupdated(changedProps: Map<string, unknown>) {\n\t\tif (changedProps.has('type')) {\n\t\t\t// Reinitialize presets if the date input type changes.\n\t\t\tthis.initPresetRanges()\n\t\t\tthis.updateSelectedDateRange()\n\t\t}\n\t}\n\n\t/**\n\t * Returns the date format string based on the current type.\n\t */\n\tprivate getDateFormat(): string {\n\t\treturn this.type === 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm'\n\t}\n\n\t/**\n\t * Returns the display format for showing dates.\n\t */\n\tprivate getDisplayFormat(): string {\n\t\treturn this.type === 'date' ? 'MMM DD, YYYY' : 'MMM DD, YYYY hh:mm A'\n\t}\n\n\t/**\n\t * Initializes the preset date ranges.\n\t */\n\tprivate initPresetRanges() {\n\t\tconst format = this.getDateFormat()\n\t\tthis.presetRanges = [\n\t\t\t{\n\t\t\t\tlabel: 'Yesterday',\n\t\t\t\trange: {\n\t\t\t\t\tdateFrom: moment().subtract(1, 'days').startOf('day').format(format),\n\t\t\t\t\tdateTo: moment().subtract(1, 'days').endOf('day').format(format),\n\t\t\t\t},\n\t\t\t\tstep: 'day',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Today',\n\t\t\t\trange: {\n\t\t\t\t\tdateFrom: moment().startOf('day').format(format),\n\t\t\t\t\tdateTo: moment().endOf('day').format(format),\n\t\t\t\t},\n\t\t\t\tstep: 'day',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Tomorrow',\n\t\t\t\trange: {\n\t\t\t\t\tdateFrom: moment().add(1, 'days').startOf('day').format(format),\n\t\t\t\t\tdateTo: moment().add(1, 'days').endOf('day').format(format),\n\t\t\t\t},\n\t\t\t\tstep: 'day',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'This Week',\n\t\t\t\t// Use ISO week boundaries for consistency.\n\t\t\t\trange: {\n\t\t\t\t\tdateFrom: moment().startOf('isoWeek').format(format),\n\t\t\t\t\tdateTo: moment().endOf('isoWeek').format(format),\n\t\t\t\t},\n\t\t\t\tstep: 'week',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Last Week',\n\t\t\t\trange: {\n\t\t\t\t\tdateFrom: moment().subtract(1, 'weeks').startOf('isoWeek').format(format),\n\t\t\t\t\tdateTo: moment().subtract(1, 'weeks').endOf('isoWeek').format(format),\n\t\t\t\t},\n\t\t\t\tstep: 'week',\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'This Month',\n\t\t\t\trange: {\n\t\t\t\t\tdateFrom: moment().startOf('month').format(format),\n\t\t\t\t\tdateTo: moment().endOf('month').format(format),\n\t\t\t\t},\n\t\t\t\tstep: 'month',\n\t\t\t},\n\t\t\t// You can add a \"Custom\" option here if needed.\n\t\t]\n\t}\n\n\t/**\n\t * Updates the selectedDateRange state based on the current dateFrom and dateTo values.\n\t */\n\tprivate updateSelectedDateRange() {\n\t\tconst preset = this.presetRanges.find(\n\t\t\trange => range.range.dateFrom === this.dateFrom.value && range.range.dateTo === this.dateTo.value,\n\t\t)\n\t\tif (preset) {\n\t\t\tthis.selectedDateRange = preset.label\n\t\t} else {\n\t\t\tthis.selectedDateRange = `${moment(this.dateFrom.value).format(\n\t\t\t\tthis.getDisplayFormat(),\n\t\t\t)} - ${moment(this.dateTo.value).format(this.getDisplayFormat())}`\n\t\t}\n\t}\n\n\t/**\n\t * Updates the internal date range state and dispatches a change event.\n\t */\n\tsetDateRange(fromDate: string, toDate: string) {\n\t\tthis.dateFrom.value = fromDate\n\t\tthis.dateTo.value = toDate\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<TSchmancDateRangePayload>('change', {\n\t\t\t\tdetail: { dateFrom: fromDate, dateTo: toDate },\n\t\t\t}),\n\t\t)\n\t\tthis.requestUpdate()\n\t}\n\n\t/**\n\t * Called when a preset is selected. Updates the date range and closes the menu.\n\t */\n\thandlePresetChange(presetLabel: string) {\n\t\tconst preset = this.presetRanges.find(range => range.label === presetLabel)\n\t\tif (preset) {\n\t\t\tconst { dateFrom, dateTo } = preset.range\n\t\t\tthis.setDateRange(dateFrom, dateTo)\n\t\t\tthis.selectedDateRange = presetLabel\n\t\t\t// Close the menu after a preset selection.\n\t\t\tthis.schmancyMenu.open = false\n\t\t}\n\t}\n\n\t/**\n\t * Called when the user applies a manual date change.\n\t */\n\thandleDateRangeChange() {\n\t\tthis.setDateRange(this.dateFrom.value, this.dateTo.value)\n\t\tthis.updateSelectedDateRange()\n\t\t// Close the menu after applying manual changes.\n\t\tthis.schmancyMenu.open = false\n\t}\n\n\t/**\n\t * Shifts the current date range by multiplying the range length with the given factor.\n\t * Use a negative factor to shift backward.\n\t */\n\tprivate shiftDateRange(factor: number) {\n\t\tconst format = this.getDateFormat()\n\t\tconst currentDiff = moment(this.dateTo.value).diff(moment(this.dateFrom.value), 'days') || 1\n\t\tconst newDateFrom = moment(this.dateFrom.value)\n\t\t\t.add(factor * currentDiff, 'days')\n\t\t\t.format(format)\n\t\tconst newDateTo = moment(this.dateTo.value)\n\t\t\t.add(factor * currentDiff, 'days')\n\t\t\t.format(format)\n\t\tthis.setDateRange(newDateFrom, newDateTo)\n\t\tthis.updateSelectedDateRange()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"date-range-selector relative\">\n\t\t\t\t<schmancy-menu class=\"z-100 w-max\">\n\t\t\t\t\t<!-- The button slot: left/right arrows and the display text -->\n\t\t\t\t\t<schmancy-grid slot=\"button\" align=\"center\" cols=\"auto 1fr auto\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\tthis.shiftDateRange(-1)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tarrow_left\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t<schmancy-button class=\"w-max\" variant=\"outlined\" type=\"button\">\n\t\t\t\t\t\t\t${this.selectedDateRange || 'Date range'}\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\tthis.shiftDateRange(1)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tarrow_right\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</schmancy-grid>\n\n\t\t\t\t\t<!-- The menu surface -->\n\t\t\t\t\t<schmancy-surface elevation=\"2\">\n\t\t\t\t\t\t${this.presetRanges.map(\n\t\t\t\t\t\t\tpreset => html`\n\t\t\t\t\t\t\t\t<schmancy-menu-item class=\"w-full\" @click=${() => this.handlePresetChange(preset.label)}>\n\t\t\t\t\t\t\t\t\t<schmancy-grid class=\"w-full\" align=\"center\" cols=\"auto 1fr auto\"> ${preset.label} </schmancy-grid>\n\t\t\t\t\t\t\t\t</schmancy-menu-item>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<schmancy-grid gap=\"sm\" flow=\"row\" class=\"p-4\">\n\t\t\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\t\t\tid=\"checkin\"\n\t\t\t\t\t\t\t\tmin=${ifDefined(this.minDate)}\n\t\t\t\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t\t\t\tlabel=\"${this.dateFrom.label}\"\n\t\t\t\t\t\t\t\t.value=${this.dateFrom.value}\n\t\t\t\t\t\t\t\t@change=${(event: SchmancyInputChangeEvent) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\t\t\tconst format = this.getDateFormat()\n\t\t\t\t\t\t\t\t\tconst selectedDate = moment(event.detail.value, format).format(format)\n\t\t\t\t\t\t\t\t\tthis.dateFrom.value = selectedDate\n\t\t\t\t\t\t\t\t\t// Update the checkout input's minimum date.\n\t\t\t\t\t\t\t\t\tthis.checkOutInput.setAttribute('min', selectedDate)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t></schmancy-input>\n\t\t\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\t\t\tid=\"checkout\"\n\t\t\t\t\t\t\t\tmin=${ifDefined(this.dateFrom.value)}\n\t\t\t\t\t\t\t\tmax=${ifDefined(this.maxDate)}\n\t\t\t\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t\t\t\tlabel=\"${this.dateTo.label}\"\n\t\t\t\t\t\t\t\t.value=${this.dateTo.value}\n\t\t\t\t\t\t\t\t@change=${(event: SchmancyInputChangeEvent) => {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\t\t\tconst format = this.getDateFormat()\n\t\t\t\t\t\t\t\t\tconst selectedDate = moment(event.detail.value, format).format(format)\n\t\t\t\t\t\t\t\t\tthis.dateTo.value = selectedDate\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t></schmancy-input>\n\n\t\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\tthis.handleDateRangeChange()\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tApply\n\t\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t\t</schmancy-grid>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-menu>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\n/**\n * The payload for a date range change event.\n */\nexport type TSchmancDateRangePayload = {\n\tdateFrom?: string\n\tdateTo?: string\n}\n\n/**\n * A custom event fired when the date range is updated.\n */\nexport type SchmancyDateRangeChangeEvent = CustomEvent<TSchmancDateRangePayload>\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-date-range': SchmancyDateRange\n\t}\n}\n"],"names":["SchmancyDateRange","$LitElement","constructor","super","arguments","this","type","selectedDateRange","connectedCallback","initPresetRanges","updateSelectedDateRange","changedProps","has","format","getDateFormat","presetRanges","label","range","dateFrom","moment","subtract","startOf","dateTo","endOf","step","add","preset","find","value","getDisplayFormat","fromDate","toDate","dispatchEvent","CustomEvent","detail","requestUpdate","presetLabel","setDateRange","schmancyMenu","open","factor","currentDiff","diff","newDateFrom","newDateTo","html","e","preventDefault","stopPropagation","shiftDateRange","map","handlePresetChange","ifDefined","minDate","event","selectedDate","checkOutInput","setAttribute","maxDate","handleDateRangeChange","__decorateClass","property","String","prototype","Object","query","state","customElement"],"mappings":"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"}
|