@aotearoan/neon 28.1.1 → 28.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/components/layout/filter-bar/NeonFilterBar.cjs.js +2 -0
  2. package/dist/components/layout/filter-bar/NeonFilterBar.cjs.js.map +1 -0
  3. package/dist/components/layout/filter-bar/NeonFilterBar.es.js +11 -0
  4. package/dist/components/layout/filter-bar/NeonFilterBar.es.js.map +1 -0
  5. package/dist/components/layout/filter-bar/NeonFilterBar.vue.cjs.js +2 -0
  6. package/dist/components/layout/filter-bar/NeonFilterBar.vue.cjs.js.map +1 -0
  7. package/dist/components/layout/filter-bar/NeonFilterBar.vue.es.js +34 -0
  8. package/dist/components/layout/filter-bar/NeonFilterBar.vue.es.js.map +1 -0
  9. package/dist/components/presentation/header/NeonHeader.vue.cjs.js +1 -1
  10. package/dist/components/presentation/header/NeonHeader.vue.cjs.js.map +1 -1
  11. package/dist/components/presentation/header/NeonHeader.vue.es.js +12 -10
  12. package/dist/components/presentation/header/NeonHeader.vue.es.js.map +1 -1
  13. package/dist/components/user-input/filter/NeonFilter.cjs.js +2 -0
  14. package/dist/components/user-input/filter/NeonFilter.cjs.js.map +1 -0
  15. package/dist/components/user-input/filter/NeonFilter.es.js +138 -0
  16. package/dist/components/user-input/filter/NeonFilter.es.js.map +1 -0
  17. package/dist/components/user-input/filter/NeonFilter.vue.cjs.js +2 -0
  18. package/dist/components/user-input/filter/NeonFilter.vue.cjs.js.map +1 -0
  19. package/dist/components/user-input/filter/NeonFilter.vue.es.js +123 -0
  20. package/dist/components/user-input/filter/NeonFilter.vue.es.js.map +1 -0
  21. package/dist/components/user-input/number/NeonNumber.cjs.js +1 -1
  22. package/dist/components/user-input/number/NeonNumber.cjs.js.map +1 -1
  23. package/dist/components/user-input/number/NeonNumber.es.js +23 -26
  24. package/dist/components/user-input/number/NeonNumber.es.js.map +1 -1
  25. package/dist/components/user-input/search-filter/NeonSearchFilter.cjs.js +2 -0
  26. package/dist/components/user-input/search-filter/NeonSearchFilter.cjs.js.map +1 -0
  27. package/dist/components/user-input/search-filter/NeonSearchFilter.es.js +123 -0
  28. package/dist/components/user-input/search-filter/NeonSearchFilter.es.js.map +1 -0
  29. package/dist/components/user-input/search-filter/NeonSearchFilter.vue.cjs.js +2 -0
  30. package/dist/components/user-input/search-filter/NeonSearchFilter.vue.cjs.js.map +1 -0
  31. package/dist/components/user-input/search-filter/NeonSearchFilter.vue.es.js +88 -0
  32. package/dist/components/user-input/search-filter/NeonSearchFilter.vue.es.js.map +1 -0
  33. package/dist/neon.cjs.js +1 -1
  34. package/dist/neon.es.js +209 -203
  35. package/dist/neon.es.js.map +1 -1
  36. package/dist/src/components/layout/filter-bar/NeonFilterBar.d.ts +70 -0
  37. package/dist/src/components/layout/filter-bar/NeonFilterBar.vue.d.ts +2 -0
  38. package/dist/src/components/presentation/image-carousel/NeonImageCarousel.d.ts +1 -1
  39. package/dist/src/components/user-input/filter/NeonFilter.d.ts +3557 -0
  40. package/dist/src/components/user-input/filter/NeonFilter.vue.d.ts +2 -0
  41. package/dist/src/components/user-input/search-filter/NeonSearchFilter.d.ts +3288 -0
  42. package/dist/src/components/user-input/search-filter/NeonSearchFilter.vue.d.ts +2 -0
  43. package/dist/src/model/user-input/filter/NeonFilterItem.d.ts +13 -0
  44. package/dist/src/neon.d.ts +4 -0
  45. package/dist/src/utils/common/debounce/NeonDebounceUtils.d.ts +1 -1
  46. package/dist/utils/common/debounce/NeonDebounceUtils.cjs.js +1 -1
  47. package/dist/utils/common/debounce/NeonDebounceUtils.cjs.js.map +1 -1
  48. package/dist/utils/common/debounce/NeonDebounceUtils.es.js +1 -1
  49. package/dist/utils/common/debounce/NeonDebounceUtils.es.js.map +1 -1
  50. package/package.json +3 -1
  51. package/src/sass/components/_button.scss +17 -17
  52. package/src/sass/components/_filter-bar.scss +55 -0
  53. package/src/sass/components/_filter.scss +53 -0
  54. package/src/sass/components/_search-filter.scss +25 -0
  55. package/src/sass/components/_skeleton-loader.scss +1 -1
  56. package/src/sass/components/components.scss +3 -0
  57. package/src/sass/includes/_dependencies.scss +3 -0
  58. package/src/sass/theme.scss +12 -0
  59. package/src/sass/variables-global.scss +7 -0
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue"),n=require("../inline/NeonInline.vue.cjs.js"),o=require("../swiper/NeonSwiper.vue.cjs.js"),r=e.defineComponent({name:"NeonFilterBar",components:{NeonInline:n,NeonSwiper:o}});module.exports=r;
2
+ //# sourceMappingURL=NeonFilterBar.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilterBar.cjs.js","sources":["../../../../src/components/layout/filter-bar/NeonFilterBar.ts?vue&type=script&src=true&lang.ts"],"sourcesContent":["import { defineComponent } from 'vue';\nimport NeonInline from '@/components/layout/inline/NeonInline.vue';\nimport NeonSwiper from '@/components/layout/swiper/NeonSwiper.vue';\n\n/**\n * A filter bar to be placed above a list of items providing search, filter and sort options.\n */\nexport default defineComponent({\n name: 'NeonFilterBar',\n components: { NeonInline, NeonSwiper },\n});\n"],"names":["_sfc_main","defineComponent","NeonInline","NeonSwiper"],"mappings":"8HAOAA,EAAeC,kBAAgB,CAC7B,KAAM,gBACN,WAAY,CAAE,WAAAC,EAAY,WAAAC,CAAA,CAC5B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { defineComponent as o } from "vue";
2
+ import e from "../inline/NeonInline.vue.es.js";
3
+ import n from "../swiper/NeonSwiper.vue.es.js";
4
+ const i = o({
5
+ name: "NeonFilterBar",
6
+ components: { NeonInline: e, NeonSwiper: n }
7
+ });
8
+ export {
9
+ i as default
10
+ };
11
+ //# sourceMappingURL=NeonFilterBar.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilterBar.es.js","sources":["../../../../src/components/layout/filter-bar/NeonFilterBar.ts?vue&type=script&src=true&lang.ts"],"sourcesContent":["import { defineComponent } from 'vue';\nimport NeonInline from '@/components/layout/inline/NeonInline.vue';\nimport NeonSwiper from '@/components/layout/swiper/NeonSwiper.vue';\n\n/**\n * A filter bar to be placed above a list of items providing search, filter and sort options.\n */\nexport default defineComponent({\n name: 'NeonFilterBar',\n components: { NeonInline, NeonSwiper },\n});\n"],"names":["_sfc_main","defineComponent","NeonInline","NeonSwiper"],"mappings":";;;AAOA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY,EAAE,YAAAC,GAAY,YAAAC,EAAA;AAC5B,CAAC;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const o=require("./NeonFilterBar.cjs.js"),e=require("vue"),s=require("../../../_virtual/_plugin-vue_export-helper.cjs.js"),l={class:"neon-filter-bar__sort"};function i(t,c,a,p,u,d){const n=e.resolveComponent("neon-inline"),r=e.resolveComponent("neon-swiper");return e.openBlock(),e.createBlock(n,{class:"neon-filter-bar",gap:"m"},{default:e.withCtx(()=>[e.createVNode(r,{class:"neon-filter-bar__swiper"},{default:e.withCtx(()=>[e.createVNode(n,{class:"neon-filter-bar__filters"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"filters")]),_:3})]),_:3}),e.createElementVNode("div",l,[e.renderSlot(t.$slots,"sort")])]),_:3})}const _=s(o,[["render",i]]);module.exports=_;
2
+ //# sourceMappingURL=NeonFilterBar.vue.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilterBar.vue.cjs.js","sources":["../../../../src/components/layout/filter-bar/NeonFilterBar.vue"],"sourcesContent":["<template>\n <neon-inline class=\"neon-filter-bar\" gap=\"m\">\n <neon-swiper class=\"neon-filter-bar__swiper\">\n <neon-inline class=\"neon-filter-bar__filters\">\n <!-- @slot container for filters, e.g. search-filter & filter components -->\n <slot name=\"filters\"></slot>\n </neon-inline>\n </neon-swiper>\n <div class=\"neon-filter-bar__sort\">\n <!-- @slot sort component, e.g. select component -->\n <slot name=\"sort\"></slot>\n </div>\n </neon-inline>\n</template>\n\n<script lang=\"ts\" src=\"./NeonFilterBar.ts\"></script>\n"],"names":["_hoisted_1","_createBlock","_component_neon_inline","_createVNode","_component_neon_swiper","_renderSlot","_ctx","_createElementVNode"],"mappings":"wIAQSA,EAAA,CAAA,MAAM,uBAAuB,6HAPpCC,EAAAA,YAWcC,EAAA,CAXD,MAAM,kBAAkB,IAAI,wBACvC,IAKc,CALdC,EAAAA,YAKcC,EAAA,CALD,MAAM,yBAAyB,EAAA,mBAC1C,IAGc,CAHdD,EAAAA,YAGcD,EAAA,CAHD,MAAM,0BAA0B,EAAA,mBAE3C,IAA4B,CAA5BG,aAA4BC,EAAA,OAAA,SAAA,kBAGhCC,EAAAA,mBAGM,MAHNP,EAGM,CADJK,aAAyBC,EAAA,OAAA,MAAA"}
@@ -0,0 +1,34 @@
1
+ import i from "./NeonFilterBar.es.js";
2
+ import { resolveComponent as t, openBlock as _, createBlock as a, withCtx as e, createVNode as r, renderSlot as s, createElementVNode as c } from "vue";
3
+ import f from "../../../_virtual/_plugin-vue_export-helper.es.js";
4
+ const p = { class: "neon-filter-bar__sort" };
5
+ function d(o, m, u, $, b, w) {
6
+ const n = t("neon-inline"), l = t("neon-swiper");
7
+ return _(), a(n, {
8
+ class: "neon-filter-bar",
9
+ gap: "m"
10
+ }, {
11
+ default: e(() => [
12
+ r(l, { class: "neon-filter-bar__swiper" }, {
13
+ default: e(() => [
14
+ r(n, { class: "neon-filter-bar__filters" }, {
15
+ default: e(() => [
16
+ s(o.$slots, "filters")
17
+ ]),
18
+ _: 3
19
+ })
20
+ ]),
21
+ _: 3
22
+ }),
23
+ c("div", p, [
24
+ s(o.$slots, "sort")
25
+ ])
26
+ ]),
27
+ _: 3
28
+ });
29
+ }
30
+ const k = /* @__PURE__ */ f(i, [["render", d]]);
31
+ export {
32
+ k as default
33
+ };
34
+ //# sourceMappingURL=NeonFilterBar.vue.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilterBar.vue.es.js","sources":["../../../../src/components/layout/filter-bar/NeonFilterBar.vue"],"sourcesContent":["<template>\n <neon-inline class=\"neon-filter-bar\" gap=\"m\">\n <neon-swiper class=\"neon-filter-bar__swiper\">\n <neon-inline class=\"neon-filter-bar__filters\">\n <!-- @slot container for filters, e.g. search-filter & filter components -->\n <slot name=\"filters\"></slot>\n </neon-inline>\n </neon-swiper>\n <div class=\"neon-filter-bar__sort\">\n <!-- @slot sort component, e.g. select component -->\n <slot name=\"sort\"></slot>\n </div>\n </neon-inline>\n</template>\n\n<script lang=\"ts\" src=\"./NeonFilterBar.ts\"></script>\n"],"names":["_hoisted_1","_createBlock","_component_neon_inline","_createVNode","_component_neon_swiper","_renderSlot","_ctx","_createElementVNode"],"mappings":";;;AAQS,MAAAA,IAAA,EAAA,OAAM,wBAAuB;;;cAPpCC,EAWcC,GAAA;AAAA,IAXD,OAAM;AAAA,IAAkB,KAAI;AAAA;eACvC,MAKc;AAAA,MALdC,EAKcC,GAAA,EALD,OAAM,0BAAyB,GAAA;AAAA,mBAC1C,MAGc;AAAA,UAHdD,EAGcD,GAAA,EAHD,OAAM,2BAA0B,GAAA;AAAA,uBAE3C,MAA4B;AAAA,cAA5BG,EAA4BC,EAAA,QAAA,SAAA;AAAA;;;;;;MAGhCC,EAGM,OAHNP,GAGM;AAAA,QADJK,EAAyBC,EAAA,QAAA,MAAA;AAAA;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";const l=require("./NeonHeader.cjs.js"),e=require("vue"),r=require("../../../_virtual/_plugin-vue_export-helper.cjs.js"),s={key:0,class:"neon-header__subtitle"};function c(t,u,i,p,b,_){const a=e.resolveComponent("neon-breadcrumbs"),o=e.resolveComponent("neon-inline"),n=e.resolveComponent("neon-stack");return e.openBlock(),e.createBlock(n,{class:e.normalizeClass([`neon-header--${t.level}`,"neon-header"])},{default:e.withCtx(()=>[t.level===t.NeonHeaderLevel.Page&&(t.backButton||t.breadcrumbs.length!==0)?(e.openBlock(),e.createBlock(a,{key:0,"back-button":t.backButton,"back-label":t.backLabel,breadcrumbs:t.breadcrumbs},null,8,["back-button","back-label","breadcrumbs"])):e.createCommentVNode("",!0),e.createVNode(o,{class:"neon-header__content"},{default:e.withCtx(()=>[e.createVNode(n,{class:"neon-header__content-copy",gap:"s"},{default:e.withCtx(()=>[e.createVNode(o,{class:"neon-header__title-wrapper",gap:"m"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.titleLevel),{class:"neon-header__title"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.title),1)]),_:1})),t.slots.labels?(e.openBlock(),e.createBlock(o,{key:0,class:"neon-header__labels",gap:"m"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"labels")]),_:3})):e.createCommentVNode("",!0)]),_:3}),t.subtitle?(e.openBlock(),e.createElementBlock("span",s,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)]),_:3}),t.slots.actions?(e.openBlock(),e.createBlock(o,{key:0,class:"neon-header__actions",gap:"s"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"actions")]),_:3})):e.createCommentVNode("",!0)]),_:3})]),_:3},8,["class"])}const d=r(l,[["render",c]]);module.exports=d;
1
+ "use strict";const l=require("./NeonHeader.cjs.js"),e=require("vue"),r=require("../../../_virtual/_plugin-vue_export-helper.cjs.js"),s={key:0,class:"neon-header__subtitle"};function c(t,u,i,p,b,_){const a=e.resolveComponent("neon-breadcrumbs"),o=e.resolveComponent("neon-inline"),n=e.resolveComponent("neon-stack");return e.openBlock(),e.createBlock(n,{class:e.normalizeClass([`neon-header--${t.level}`,"neon-header"])},{default:e.withCtx(()=>[t.level===t.NeonHeaderLevel.Page&&(t.backButton||t.breadcrumbs.length!==0)?(e.openBlock(),e.createBlock(a,{key:0,"back-button":t.backButton,"back-label":t.backLabel,breadcrumbs:t.breadcrumbs},null,8,["back-button","back-label","breadcrumbs"])):e.createCommentVNode("",!0),e.createVNode(o,{class:"neon-header__content"},{default:e.withCtx(()=>[e.createVNode(n,{class:"neon-header__content-copy",gap:"s"},{default:e.withCtx(()=>[e.createVNode(o,{class:"neon-header__title-wrapper",gap:"m"},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.titleLevel),{class:"neon-header__title"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.title),1)]),_:1})),t.slots.labels?(e.openBlock(),e.createBlock(o,{key:0,class:"neon-header__labels",gap:"m"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"labels")]),_:3})):e.createCommentVNode("",!0)]),_:3}),e.renderSlot(t.$slots,"subtitle",{},()=>[t.subtitle?(e.openBlock(),e.createElementBlock("span",s,e.toDisplayString(t.subtitle),1)):e.createCommentVNode("",!0)])]),_:3}),t.slots.actions?(e.openBlock(),e.createBlock(o,{key:0,class:"neon-header__actions",gap:"s"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"actions")]),_:3})):e.createCommentVNode("",!0)]),_:3})]),_:3},8,["class"])}const d=r(l,[["render",c]]);module.exports=d;
2
2
  //# sourceMappingURL=NeonHeader.vue.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NeonHeader.vue.cjs.js","sources":["../../../../src/components/presentation/header/NeonHeader.vue"],"sourcesContent":["<template>\n <neon-stack :class=\"`neon-header--${level}`\" class=\"neon-header\">\n <neon-breadcrumbs\n v-if=\"level === NeonHeaderLevel.Page && (backButton || breadcrumbs.length !== 0)\"\n :back-button=\"backButton\"\n :back-label=\"backLabel\"\n :breadcrumbs=\"breadcrumbs\"\n />\n <neon-inline class=\"neon-header__content\">\n <neon-stack class=\"neon-header__content-copy\" gap=\"s\">\n <neon-inline class=\"neon-header__title-wrapper\" gap=\"m\">\n <component :is=\"titleLevel\" class=\"neon-header__title\">{{ title }}</component>\n <neon-inline v-if=\"slots.labels\" class=\"neon-header__labels\" gap=\"m\">\n <!-- @slot a slot for adding labels/info popovers next to the title. NOTE: these are rendered in reverse order on mobile -->\n <slot name=\"labels\"></slot>\n </neon-inline>\n </neon-inline>\n <span v-if=\"subtitle\" class=\"neon-header__subtitle\">{{ subtitle }}</span>\n </neon-stack>\n <neon-inline v-if=\"slots.actions\" class=\"neon-header__actions\" gap=\"s\">\n <!-- @slot a slot for adding contextual action buttons to the header. The wrapper is provided, just add the buttons here in order to apply the correct spacings -->\n <slot name=\"actions\"></slot>\n </neon-inline>\n </neon-inline>\n </neon-stack>\n</template>\n\n<script lang=\"ts\" src=\"./NeonHeader.ts\" />\n"],"names":["_createBlock","_component_neon_stack","_normalizeClass","_ctx","_component_neon_breadcrumbs","_createVNode","_component_neon_inline","_openBlock","_resolveDynamicComponent","_renderSlot","_createElementBlock","_hoisted_1","_toDisplayString"],"mappings":"8IAiB8B,MAAM,4LAhBlCA,EAAAA,YAuBaC,EAAA,CAvBA,MAAKC,EAAAA,eAAA,CAAA,gBAAkBC,EAAA,KAAK,GAAU,aAAa,CAAA,sBAC9D,IAKE,CAJMA,EAAA,QAAUA,kBAAgB,OAASA,EAAA,YAAcA,EAAA,YAAY,SAAM,kBAD3EH,EAAAA,YAKEI,EAAA,OAHC,cAAaD,EAAA,WACb,aAAYA,EAAA,UACZ,YAAaA,EAAA,6FAEhBE,EAAAA,YAecC,EAAA,CAfD,MAAM,sBAAsB,EAAA,mBACvC,IASa,CATbD,EAAAA,YASaJ,EAAA,CATD,MAAM,4BAA4B,IAAI,wBAChD,IAMc,CANdI,EAAAA,YAMcC,EAAA,CAND,MAAM,6BAA6B,IAAI,wBAClD,IAA8E,EAA9EC,YAAA,EAAAP,EAAAA,YAA8EQ,0BAA9DL,EAAA,UAAU,EAAA,CAAE,MAAM,sBAAoB,mBAAC,IAAW,qCAARA,EAAA,KAAK,EAAA,CAAA,WAC5CA,EAAA,MAAM,sBAAzBH,EAAAA,YAGcM,EAAA,OAHmB,MAAM,sBAAsB,IAAI,wBAE/D,IAA2B,CAA3BG,aAA2BN,EAAA,OAAA,QAAA,+CAGnBA,EAAA,wBAAZO,EAAAA,mBAAyE,OAAzEC,EAAyEC,EAAAA,gBAAlBT,EAAA,QAAQ,EAAA,CAAA,uCAE9CA,EAAA,MAAM,uBAAzBH,EAAAA,YAGcM,EAAA,OAHoB,MAAM,uBAAuB,IAAI,wBAEjE,IAA4B,CAA5BG,aAA4BN,EAAA,OAAA,SAAA"}
1
+ {"version":3,"file":"NeonHeader.vue.cjs.js","sources":["../../../../src/components/presentation/header/NeonHeader.vue"],"sourcesContent":["<template>\n <neon-stack :class=\"`neon-header--${level}`\" class=\"neon-header\">\n <neon-breadcrumbs\n v-if=\"level === NeonHeaderLevel.Page && (backButton || breadcrumbs.length !== 0)\"\n :back-button=\"backButton\"\n :back-label=\"backLabel\"\n :breadcrumbs=\"breadcrumbs\"\n />\n <neon-inline class=\"neon-header__content\">\n <neon-stack class=\"neon-header__content-copy\" gap=\"s\">\n <neon-inline class=\"neon-header__title-wrapper\" gap=\"m\">\n <component :is=\"titleLevel\" class=\"neon-header__title\">{{ title }}</component>\n <neon-inline v-if=\"slots.labels\" class=\"neon-header__labels\" gap=\"m\">\n <!-- @slot a slot for adding labels/info popovers next to the title. NOTE: these are rendered in reverse order on mobile -->\n <slot name=\"labels\"></slot>\n </neon-inline>\n </neon-inline>\n <!-- @slot a slot for overriding the default subtitle styling and proving richer content -->\n <slot name=\"subtitle\">\n <span v-if=\"subtitle\" class=\"neon-header__subtitle\">{{ subtitle }}</span>\n </slot>\n </neon-stack>\n <neon-inline v-if=\"slots.actions\" class=\"neon-header__actions\" gap=\"s\">\n <!-- @slot a slot for adding contextual action buttons to the header. The wrapper is provided, just add the buttons here in order to apply the correct spacings -->\n <slot name=\"actions\"></slot>\n </neon-inline>\n </neon-inline>\n </neon-stack>\n</template>\n\n<script lang=\"ts\" src=\"./NeonHeader.ts\" />\n"],"names":["_createBlock","_component_neon_stack","_normalizeClass","_ctx","_component_neon_breadcrumbs","_createVNode","_component_neon_inline","_openBlock","_resolveDynamicComponent","_renderSlot","_createElementBlock","_hoisted_1","_toDisplayString"],"mappings":"8IAmBgC,MAAM,4LAlBpCA,EAAAA,YA0BaC,EAAA,CA1BA,MAAKC,EAAAA,eAAA,CAAA,gBAAkBC,EAAA,KAAK,GAAU,aAAa,CAAA,sBAC9D,IAKE,CAJMA,EAAA,QAAUA,kBAAgB,OAASA,EAAA,YAAcA,EAAA,YAAY,SAAM,kBAD3EH,EAAAA,YAKEI,EAAA,OAHC,cAAaD,EAAA,WACb,aAAYA,EAAA,UACZ,YAAaA,EAAA,6FAEhBE,EAAAA,YAkBcC,EAAA,CAlBD,MAAM,sBAAsB,EAAA,mBACvC,IAYa,CAZbD,EAAAA,YAYaJ,EAAA,CAZD,MAAM,4BAA4B,IAAI,wBAChD,IAMc,CANdI,EAAAA,YAMcC,EAAA,CAND,MAAM,6BAA6B,IAAI,wBAClD,IAA8E,EAA9EC,YAAA,EAAAP,EAAAA,YAA8EQ,0BAA9DL,EAAA,UAAU,EAAA,CAAE,MAAM,sBAAoB,mBAAC,IAAW,qCAARA,EAAA,KAAK,EAAA,CAAA,WAC5CA,EAAA,MAAM,sBAAzBH,EAAAA,YAGcM,EAAA,OAHmB,MAAM,sBAAsB,IAAI,wBAE/D,IAA2B,CAA3BG,aAA2BN,EAAA,OAAA,QAAA,+CAI/BM,EAAAA,WAEON,uBAFP,IAEO,CADOA,EAAA,wBAAZO,EAAAA,mBAAyE,OAAzEC,EAAyEC,EAAAA,gBAAlBT,EAAA,QAAQ,EAAA,CAAA,yCAGhDA,EAAA,MAAM,uBAAzBH,EAAAA,YAGcM,EAAA,OAHoB,MAAM,uBAAuB,IAAI,wBAEjE,IAA4B,CAA5BG,aAA4BN,EAAA,OAAA,SAAA"}
@@ -1,13 +1,13 @@
1
1
  import i from "./NeonHeader.es.js";
2
- import { resolveComponent as l, openBlock as a, createBlock as o, normalizeClass as m, withCtx as n, createCommentVNode as s, createVNode as r, resolveDynamicComponent as p, createTextVNode as _, toDisplayString as d, renderSlot as b, createElementBlock as k } from "vue";
2
+ import { resolveComponent as l, openBlock as a, createBlock as o, normalizeClass as m, withCtx as n, createCommentVNode as s, createVNode as r, resolveDynamicComponent as p, createTextVNode as _, toDisplayString as b, renderSlot as c, createElementBlock as k } from "vue";
3
3
  import f from "../../../_virtual/_plugin-vue_export-helper.es.js";
4
4
  const h = {
5
5
  key: 0,
6
6
  class: "neon-header__subtitle"
7
7
  };
8
- function g(e, y, $, v, B, C) {
9
- const u = l("neon-breadcrumbs"), t = l("neon-inline"), c = l("neon-stack");
10
- return a(), o(c, {
8
+ function $(e, g, y, v, B, C) {
9
+ const u = l("neon-breadcrumbs"), t = l("neon-inline"), d = l("neon-stack");
10
+ return a(), o(d, {
11
11
  class: m([`neon-header--${e.level}`, "neon-header"])
12
12
  }, {
13
13
  default: n(() => [
@@ -19,7 +19,7 @@ function g(e, y, $, v, B, C) {
19
19
  }, null, 8, ["back-button", "back-label", "breadcrumbs"])) : s("", !0),
20
20
  r(t, { class: "neon-header__content" }, {
21
21
  default: n(() => [
22
- r(c, {
22
+ r(d, {
23
23
  class: "neon-header__content-copy",
24
24
  gap: "s"
25
25
  }, {
@@ -31,7 +31,7 @@ function g(e, y, $, v, B, C) {
31
31
  default: n(() => [
32
32
  (a(), o(p(e.titleLevel), { class: "neon-header__title" }, {
33
33
  default: n(() => [
34
- _(d(e.title), 1)
34
+ _(b(e.title), 1)
35
35
  ]),
36
36
  _: 1
37
37
  })),
@@ -41,14 +41,16 @@ function g(e, y, $, v, B, C) {
41
41
  gap: "m"
42
42
  }, {
43
43
  default: n(() => [
44
- b(e.$slots, "labels")
44
+ c(e.$slots, "labels")
45
45
  ]),
46
46
  _: 3
47
47
  })) : s("", !0)
48
48
  ]),
49
49
  _: 3
50
50
  }),
51
- e.subtitle ? (a(), k("span", h, d(e.subtitle), 1)) : s("", !0)
51
+ c(e.$slots, "subtitle", {}, () => [
52
+ e.subtitle ? (a(), k("span", h, b(e.subtitle), 1)) : s("", !0)
53
+ ])
52
54
  ]),
53
55
  _: 3
54
56
  }),
@@ -58,7 +60,7 @@ function g(e, y, $, v, B, C) {
58
60
  gap: "s"
59
61
  }, {
60
62
  default: n(() => [
61
- b(e.$slots, "actions")
63
+ c(e.$slots, "actions")
62
64
  ]),
63
65
  _: 3
64
66
  })) : s("", !0)
@@ -69,7 +71,7 @@ function g(e, y, $, v, B, C) {
69
71
  _: 3
70
72
  }, 8, ["class"]);
71
73
  }
72
- const w = /* @__PURE__ */ f(i, [["render", g]]);
74
+ const w = /* @__PURE__ */ f(i, [["render", $]]);
73
75
  export {
74
76
  w as default
75
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NeonHeader.vue.es.js","sources":["../../../../src/components/presentation/header/NeonHeader.vue"],"sourcesContent":["<template>\n <neon-stack :class=\"`neon-header--${level}`\" class=\"neon-header\">\n <neon-breadcrumbs\n v-if=\"level === NeonHeaderLevel.Page && (backButton || breadcrumbs.length !== 0)\"\n :back-button=\"backButton\"\n :back-label=\"backLabel\"\n :breadcrumbs=\"breadcrumbs\"\n />\n <neon-inline class=\"neon-header__content\">\n <neon-stack class=\"neon-header__content-copy\" gap=\"s\">\n <neon-inline class=\"neon-header__title-wrapper\" gap=\"m\">\n <component :is=\"titleLevel\" class=\"neon-header__title\">{{ title }}</component>\n <neon-inline v-if=\"slots.labels\" class=\"neon-header__labels\" gap=\"m\">\n <!-- @slot a slot for adding labels/info popovers next to the title. NOTE: these are rendered in reverse order on mobile -->\n <slot name=\"labels\"></slot>\n </neon-inline>\n </neon-inline>\n <span v-if=\"subtitle\" class=\"neon-header__subtitle\">{{ subtitle }}</span>\n </neon-stack>\n <neon-inline v-if=\"slots.actions\" class=\"neon-header__actions\" gap=\"s\">\n <!-- @slot a slot for adding contextual action buttons to the header. The wrapper is provided, just add the buttons here in order to apply the correct spacings -->\n <slot name=\"actions\"></slot>\n </neon-inline>\n </neon-inline>\n </neon-stack>\n</template>\n\n<script lang=\"ts\" src=\"./NeonHeader.ts\" />\n"],"names":["_createBlock","_component_neon_stack","_normalizeClass","_ctx","_component_neon_breadcrumbs","_createVNode","_component_neon_inline","_openBlock","_resolveDynamicComponent","_renderSlot","_createElementBlock","_hoisted_1","_toDisplayString"],"mappings":";;;;;EAiB8B,OAAM;;;;cAhBlCA,EAuBaC,GAAA;AAAA,IAvBA,OAAKC,EAAA,CAAA,gBAAkBC,EAAA,KAAK,IAAU,aAAa,CAAA;AAAA;eAC9D,MAKE;AAAA,MAJMA,EAAA,UAAUA,kBAAgB,SAASA,EAAA,cAAcA,EAAA,YAAY,WAAM,WAD3EH,EAKEI,GAAA;AAAA;QAHC,eAAaD,EAAA;AAAA,QACb,cAAYA,EAAA;AAAA,QACZ,aAAaA,EAAA;AAAA;MAEhBE,EAecC,GAAA,EAfD,OAAM,uBAAsB,GAAA;AAAA,mBACvC,MASa;AAAA,UATbD,EASaJ,GAAA;AAAA,YATD,OAAM;AAAA,YAA4B,KAAI;AAAA;uBAChD,MAMc;AAAA,cANdI,EAMcC,GAAA;AAAA,gBAND,OAAM;AAAA,gBAA6B,KAAI;AAAA;2BAClD,MAA8E;AAAA,mBAA9EC,EAAA,GAAAP,EAA8EQ,EAA9DL,EAAA,UAAU,GAAA,EAAE,OAAM,wBAAoB;AAAA,+BAAC,MAAW;AAAA,0BAARA,EAAA,KAAK,GAAA,CAAA;AAAA;;;kBAC5CA,EAAA,MAAM,eAAzBH,EAGcM,GAAA;AAAA;oBAHmB,OAAM;AAAA,oBAAsB,KAAI;AAAA;+BAE/D,MAA2B;AAAA,sBAA3BG,EAA2BN,EAAA,QAAA,QAAA;AAAA;;;;;;cAGnBA,EAAA,iBAAZO,EAAyE,QAAzEC,GAAyEC,EAAlBT,EAAA,QAAQ,GAAA,CAAA;;;;UAE9CA,EAAA,MAAM,gBAAzBH,EAGcM,GAAA;AAAA;YAHoB,OAAM;AAAA,YAAuB,KAAI;AAAA;uBAEjE,MAA4B;AAAA,cAA5BG,EAA4BN,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;"}
1
+ {"version":3,"file":"NeonHeader.vue.es.js","sources":["../../../../src/components/presentation/header/NeonHeader.vue"],"sourcesContent":["<template>\n <neon-stack :class=\"`neon-header--${level}`\" class=\"neon-header\">\n <neon-breadcrumbs\n v-if=\"level === NeonHeaderLevel.Page && (backButton || breadcrumbs.length !== 0)\"\n :back-button=\"backButton\"\n :back-label=\"backLabel\"\n :breadcrumbs=\"breadcrumbs\"\n />\n <neon-inline class=\"neon-header__content\">\n <neon-stack class=\"neon-header__content-copy\" gap=\"s\">\n <neon-inline class=\"neon-header__title-wrapper\" gap=\"m\">\n <component :is=\"titleLevel\" class=\"neon-header__title\">{{ title }}</component>\n <neon-inline v-if=\"slots.labels\" class=\"neon-header__labels\" gap=\"m\">\n <!-- @slot a slot for adding labels/info popovers next to the title. NOTE: these are rendered in reverse order on mobile -->\n <slot name=\"labels\"></slot>\n </neon-inline>\n </neon-inline>\n <!-- @slot a slot for overriding the default subtitle styling and proving richer content -->\n <slot name=\"subtitle\">\n <span v-if=\"subtitle\" class=\"neon-header__subtitle\">{{ subtitle }}</span>\n </slot>\n </neon-stack>\n <neon-inline v-if=\"slots.actions\" class=\"neon-header__actions\" gap=\"s\">\n <!-- @slot a slot for adding contextual action buttons to the header. The wrapper is provided, just add the buttons here in order to apply the correct spacings -->\n <slot name=\"actions\"></slot>\n </neon-inline>\n </neon-inline>\n </neon-stack>\n</template>\n\n<script lang=\"ts\" src=\"./NeonHeader.ts\" />\n"],"names":["_createBlock","_component_neon_stack","_normalizeClass","_ctx","_component_neon_breadcrumbs","_createVNode","_component_neon_inline","_openBlock","_resolveDynamicComponent","_renderSlot","_createElementBlock","_hoisted_1","_toDisplayString"],"mappings":";;;;;EAmBgC,OAAM;;;;cAlBpCA,EA0BaC,GAAA;AAAA,IA1BA,OAAKC,EAAA,CAAA,gBAAkBC,EAAA,KAAK,IAAU,aAAa,CAAA;AAAA;eAC9D,MAKE;AAAA,MAJMA,EAAA,UAAUA,kBAAgB,SAASA,EAAA,cAAcA,EAAA,YAAY,WAAM,WAD3EH,EAKEI,GAAA;AAAA;QAHC,eAAaD,EAAA;AAAA,QACb,cAAYA,EAAA;AAAA,QACZ,aAAaA,EAAA;AAAA;MAEhBE,EAkBcC,GAAA,EAlBD,OAAM,uBAAsB,GAAA;AAAA,mBACvC,MAYa;AAAA,UAZbD,EAYaJ,GAAA;AAAA,YAZD,OAAM;AAAA,YAA4B,KAAI;AAAA;uBAChD,MAMc;AAAA,cANdI,EAMcC,GAAA;AAAA,gBAND,OAAM;AAAA,gBAA6B,KAAI;AAAA;2BAClD,MAA8E;AAAA,mBAA9EC,EAAA,GAAAP,EAA8EQ,EAA9DL,EAAA,UAAU,GAAA,EAAE,OAAM,wBAAoB;AAAA,+BAAC,MAAW;AAAA,0BAARA,EAAA,KAAK,GAAA,CAAA;AAAA;;;kBAC5CA,EAAA,MAAM,eAAzBH,EAGcM,GAAA;AAAA;oBAHmB,OAAM;AAAA,oBAAsB,KAAI;AAAA;+BAE/D,MAA2B;AAAA,sBAA3BG,EAA2BN,EAAA,QAAA,QAAA;AAAA;;;;;;cAI/BM,EAEON,0BAFP,MAEO;AAAA,gBADOA,EAAA,iBAAZO,EAAyE,QAAzEC,GAAyEC,EAAlBT,EAAA,QAAQ,GAAA,CAAA;;;;;UAGhDA,EAAA,MAAM,gBAAzBH,EAGcM,GAAA;AAAA;YAHoB,OAAM;AAAA,YAAuB,KAAI;AAAA;uBAEjE,MAA4B;AAAA,cAA5BG,EAA4BN,EAAA,QAAA,SAAA;AAAA;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const l=require("vue"),V=require("../button/NeonButton.vue.cjs.js"),F=require("../../presentation/dropdown/NeonDropdown.vue.cjs.js"),I=require("../field-group/NeonFieldGroup.vue.cjs.js"),U=require("../input/NeonInput.vue.cjs.js"),k=require("../../navigation/link/NeonLink.vue.cjs.js"),x=require("../../layout/stack/NeonStack.vue.cjs.js"),z=require("../switch/NeonSwitch.vue.cjs.js"),d=require("../../../utils/common/number/NeonNumberUtils.cjs.js"),T=require("../../../model/common/size/NeonSize.cjs.js"),B=require("../../../model/common/color/NeonFunctionalColor.cjs.js"),D=l.defineComponent({name:"NeonFilter",components:{NeonButton:V,NeonDropdown:F,NeonFieldGroup:I,NeonInput:U,NeonLink:k,NeonStack:x,NeonSwitch:z},props:{modelValue:{type:Array,required:!0},label:{type:String,required:!0},color:{type:String,default:()=>B.NeonFunctionalColor.HighContrast},size:{type:String,default:()=>T.NeonSize.Small},disabled:{type:Boolean,default:!1},editTitle:{type:String,default:"Edit"},clearTitle:{type:String,default:"Clear"},resetLabel:{type:String,default:"Reset filter"},placeholder:{type:String,default:"Search"},closeLabel:{type:String,default:"Close"},showLabel:{type:String,default:"Show {count} items | Show {count} item | Show {count} items"}},emits:["close","update:modelValue"],setup(a,{emit:m}){const p=l.ref(!1),f=()=>a.modelValue.map(e=>({...e})),o=l.ref(f()),r=l.ref(""),b=l.computed(()=>{if(r.value==="")return[...o.value];const e=r.value.toLowerCase();return[...o.value.filter(t=>t.label.toLowerCase().indexOf(e)>=0)]}),u=l.computed(()=>a.modelValue.filter(e=>e.selected)),N=l.computed(()=>b.value.filter(e=>e.selected)),c=l.computed(()=>o.value.filter(e=>e.selected)),s=l.computed(()=>(c.value.length>0?c.value:o.value).map(t=>t.count).reduce((t,n)=>t+n,0)),i=l.computed(()=>!(u.value.length===N.value.length&&u.value.map(e=>e.label).every(e=>c.value.map(t=>t.label).indexOf(e)>=0))),S=()=>{o.value=o.value.map(e=>({...e,selected:!1}))},g=e=>{const t=o.value.find(n=>n.label===e);t&&(t.selected=!t.selected,o.value=[...o.value])},h=()=>{i.value&&m("update:modelValue",o.value),p.value=!1},y=l.computed(()=>a.label.split("|").map(t=>t.trim())[0]),q=l.computed(()=>{var v;const e=a.label.split("|").map(L=>L.trim()),t=u.value.length;return e[t>1?2:t].replace("{count}",d.NeonNumberUtils.formatNumber(t)).replace("{itemLabel}",(v=u.value[0])==null?void 0:v.label)}),w=l.computed(()=>{const t=a.showLabel.split("|").map(n=>n.trim())[s.value>1?2:s.value];return i.value?t.replace("{count}",d.NeonNumberUtils.formatNumber(s.value)):a.closeLabel}),C=()=>{const e=a.modelValue.map(t=>({...t,selected:!1}));m("update:modelValue",e)};return l.watch(()=>a.modelValue,()=>{o.value=f()},{deep:!0}),{open:p,filterString:r,filteredItems:b,isDirty:i,computedLabel:q,computedShowLabel:w,computedTitle:y,selected:u,clearSelection:C,resetFilter:S,toggleSelected:g,ctaClick:h,formatNumber:d.NeonNumberUtils.formatNumber}}});module.exports=D;
2
+ //# sourceMappingURL=NeonFilter.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilter.cjs.js","sources":["../../../../src/components/user-input/filter/NeonFilter.ts?vue&type=script&src=true&lang.ts"],"sourcesContent":["import { computed, defineComponent, ref, watch } from 'vue';\nimport NeonButton from '@/components/user-input/button/NeonButton.vue';\nimport NeonDropdown from '@/components/presentation/dropdown/NeonDropdown.vue';\nimport NeonFieldGroup from '@/components/user-input/field-group/NeonFieldGroup.vue';\nimport NeonInput from '@/components/user-input/input/NeonInput.vue';\nimport NeonLink from '@/components/navigation/link/NeonLink.vue';\nimport NeonStack from '@/components/layout/stack/NeonStack.vue';\nimport NeonSwitch from '@/components/user-input/switch/NeonSwitch.vue';\nimport type { NeonFilterItem } from '@/model/user-input/filter/NeonFilterItem';\nimport { NeonNumberUtils } from '@/utils/common/number/NeonNumberUtils';\nimport { NeonSize } from '@/model/common/size/NeonSize';\nimport { NeonFunctionalColor } from '@/model/common/color/NeonFunctionalColor';\n\n/**\n * A filtering component consisting of a button and a dropdown with a list of options. The button either displayed the\n * label or information about the selected items (the selected item or the count of selected items).\n */\nexport default defineComponent({\n name: 'NeonFilter',\n components: {\n NeonButton,\n NeonDropdown,\n NeonFieldGroup,\n NeonInput,\n NeonLink,\n NeonStack,\n NeonSwitch,\n },\n props: {\n /**\n * The list of filter items.\n */\n modelValue: { type: Array as () => Array<NeonFilterItem>, required: true },\n /**\n * The button label. This should conform to an i18n pluralization format,\n * e.g. 'Artists | {itemLabel} | {count} artists'.\n * There are two placeholders: {itemLabel} - the name of the item and {count} the count of selected items.\n * NOTE: In the case nothing is selected the label should just be the filter label, e.g. 'Artists' instead of '0 Artists'.\n */\n label: { type: String, required: true },\n /**\n * The color of the component.\n */\n color: { type: String as () => NeonFunctionalColor, default: () => NeonFunctionalColor.HighContrast },\n /**\n * The size of the dropdown button.\n */\n size: { type: String as () => NeonSize, default: () => NeonSize.Small },\n /**\n * The disabled state of the filter buttons\n */\n disabled: { type: Boolean, default: false },\n /**\n * Button title when items are selected.\n */\n editTitle: { type: String, default: 'Edit' },\n /**\n * Clear button title.\n */\n clearTitle: { type: String, default: 'Clear' },\n /**\n * The reset filter CTA label.\n */\n resetLabel: { type: String, default: 'Reset filter' },\n /**\n * The checkbox list filter placeholder text.\n */\n placeholder: { type: String, default: 'Search' },\n /**\n * The close CTA label.\n */\n closeLabel: { type: String, default: 'Close' },\n /**\n * The show 'n' items CTA label. This should adhere to the vue-i18n pluralization format\n * e.g. 'Show {count} items | Show {count} item | Show {count} items'.\n * There is one placeholder: {count} - the count of items matching this filter.\n */\n showLabel: { type: String, default: 'Show {count} items | Show {count} item | Show {count} items' },\n },\n emits: [\n /**\n * Emitted when the close CTA is clicked.\n */\n 'close',\n /**\n * Emitted when the selection is changed & the 'Show' CTA is triggered.\n *\n * @type {Array<NeonFilterItem>} - The filtered items.\n */\n 'update:modelValue',\n ],\n setup(props, { emit }) {\n const open = ref<boolean>(false);\n\n const calcInternalItems = () => props.modelValue.map((item) => ({ ...item }));\n\n const internalItems = ref<Array<NeonFilterItem>>(calcInternalItems());\n\n const filterString = ref<string>('');\n const filteredItems = computed<Array<NeonFilterItem>>(() => {\n if (filterString.value === '') {\n return [...internalItems.value];\n }\n\n const filter = filterString.value.toLowerCase();\n return [...internalItems.value.filter((item) => item.label.toLowerCase().indexOf(filter) >= 0)];\n });\n\n const selected = computed<Array<NeonFilterItem>>(() => props.modelValue.filter((item) => item.selected));\n const internalSelected = computed<Array<NeonFilterItem>>(() => filteredItems.value.filter((item) => item.selected));\n const unfilteredSelected = computed<Array<NeonFilterItem>>(() =>\n internalItems.value.filter((item) => item.selected),\n );\n\n const selectedCount = computed<number>(() => {\n const items = unfilteredSelected.value.length > 0 ? unfilteredSelected.value : internalItems.value;\n return items.map((item) => item.count).reduce((acc, item) => acc + item, 0);\n });\n\n const isDirty = computed<boolean>(() => {\n return !(\n selected.value.length === internalSelected.value.length &&\n selected.value\n .map((sv) => sv.label)\n .every((selectedItem) => unfilteredSelected.value.map((us) => us.label).indexOf(selectedItem) >= 0)\n );\n });\n\n const resetFilter = () => {\n internalItems.value = internalItems.value.map((item) => ({ ...item, selected: false }));\n };\n\n const toggleSelected = (label: string) => {\n const item = internalItems.value.find((item) => item.label === label);\n\n if (item) {\n item.selected = !item.selected;\n internalItems.value = [...internalItems.value];\n }\n };\n\n const ctaClick = () => {\n if (isDirty.value) {\n emit('update:modelValue', internalItems.value);\n }\n\n open.value = false;\n };\n\n const computedTitle = computed<string>(() => {\n const labels = props.label.split('|').map((l) => l.trim());\n return labels[0];\n });\n\n const computedLabel = computed<string>(() => {\n const labels = props.label.split('|').map((l) => l.trim());\n const itemCount = selected.value.length;\n const label = labels[itemCount > 1 ? 2 : itemCount];\n return label\n .replace('{count}', NeonNumberUtils.formatNumber(itemCount))\n .replace('{itemLabel}', selected.value[0]?.label);\n });\n\n const computedShowLabel = computed<string>(() => {\n const labels = props.showLabel.split('|').map((l) => l.trim());\n const label = labels[selectedCount.value > 1 ? 2 : selectedCount.value];\n return isDirty.value\n ? label.replace('{count}', NeonNumberUtils.formatNumber(selectedCount.value))\n : props.closeLabel;\n });\n\n const clearSelection = () => {\n const items = props.modelValue.map((item) => ({ ...item, selected: false }));\n emit('update:modelValue', items);\n };\n\n watch(\n () => props.modelValue,\n () => {\n internalItems.value = calcInternalItems();\n },\n { deep: true },\n );\n\n return {\n open,\n filterString,\n filteredItems,\n isDirty,\n computedLabel,\n computedShowLabel,\n computedTitle,\n selected,\n clearSelection,\n resetFilter,\n toggleSelected,\n ctaClick,\n formatNumber: NeonNumberUtils.formatNumber,\n };\n },\n});\n"],"names":["_sfc_main","defineComponent","NeonButton","NeonDropdown","NeonFieldGroup","NeonInput","NeonLink","NeonStack","NeonSwitch","NeonFunctionalColor","NeonSize","props","emit","open","ref","calcInternalItems","item","internalItems","filterString","filteredItems","computed","filter","selected","internalSelected","unfilteredSelected","selectedCount","acc","isDirty","sv","selectedItem","us","resetFilter","toggleSelected","label","ctaClick","computedTitle","l","computedLabel","labels","itemCount","NeonNumberUtils","_a","computedShowLabel","clearSelection","items","watch"],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import { defineComponent as F, ref as m, computed as a, watch as k } from "vue";
2
+ import x from "../button/NeonButton.vue.es.js";
3
+ import T from "../../presentation/dropdown/NeonDropdown.vue.es.js";
4
+ import q from "../field-group/NeonFieldGroup.vue.es.js";
5
+ import z from "../input/NeonInput.vue.es.js";
6
+ import B from "../../navigation/link/NeonLink.vue.es.js";
7
+ import D from "../../layout/stack/NeonStack.vue.es.js";
8
+ import O from "../switch/NeonSwitch.vue.es.js";
9
+ import { NeonNumberUtils as d } from "../../../utils/common/number/NeonNumberUtils.es.js";
10
+ import { NeonSize as _ } from "../../../model/common/size/NeonSize.es.js";
11
+ import { NeonFunctionalColor as A } from "../../../model/common/color/NeonFunctionalColor.es.js";
12
+ const W = F({
13
+ name: "NeonFilter",
14
+ components: {
15
+ NeonButton: x,
16
+ NeonDropdown: T,
17
+ NeonFieldGroup: q,
18
+ NeonInput: z,
19
+ NeonLink: B,
20
+ NeonStack: D,
21
+ NeonSwitch: O
22
+ },
23
+ props: {
24
+ /**
25
+ * The list of filter items.
26
+ */
27
+ modelValue: { type: Array, required: !0 },
28
+ /**
29
+ * The button label. This should conform to an i18n pluralization format,
30
+ * e.g. 'Artists | {itemLabel} | {count} artists'.
31
+ * There are two placeholders: {itemLabel} - the name of the item and {count} the count of selected items.
32
+ * NOTE: In the case nothing is selected the label should just be the filter label, e.g. 'Artists' instead of '0 Artists'.
33
+ */
34
+ label: { type: String, required: !0 },
35
+ /**
36
+ * The color of the component.
37
+ */
38
+ color: { type: String, default: () => A.HighContrast },
39
+ /**
40
+ * The size of the dropdown button.
41
+ */
42
+ size: { type: String, default: () => _.Small },
43
+ /**
44
+ * The disabled state of the filter buttons
45
+ */
46
+ disabled: { type: Boolean, default: !1 },
47
+ /**
48
+ * Button title when items are selected.
49
+ */
50
+ editTitle: { type: String, default: "Edit" },
51
+ /**
52
+ * Clear button title.
53
+ */
54
+ clearTitle: { type: String, default: "Clear" },
55
+ /**
56
+ * The reset filter CTA label.
57
+ */
58
+ resetLabel: { type: String, default: "Reset filter" },
59
+ /**
60
+ * The checkbox list filter placeholder text.
61
+ */
62
+ placeholder: { type: String, default: "Search" },
63
+ /**
64
+ * The close CTA label.
65
+ */
66
+ closeLabel: { type: String, default: "Close" },
67
+ /**
68
+ * The show 'n' items CTA label. This should adhere to the vue-i18n pluralization format
69
+ * e.g. 'Show {count} items | Show {count} item | Show {count} items'.
70
+ * There is one placeholder: {count} - the count of items matching this filter.
71
+ */
72
+ showLabel: { type: String, default: "Show {count} items | Show {count} item | Show {count} items" }
73
+ },
74
+ emits: [
75
+ /**
76
+ * Emitted when the close CTA is clicked.
77
+ */
78
+ "close",
79
+ /**
80
+ * Emitted when the selection is changed & the 'Show' CTA is triggered.
81
+ *
82
+ * @type {Array<NeonFilterItem>} - The filtered items.
83
+ */
84
+ "update:modelValue"
85
+ ],
86
+ setup(o, { emit: f }) {
87
+ const p = m(!1), b = () => o.modelValue.map((e) => ({ ...e })), l = m(b()), u = m(""), v = a(() => {
88
+ if (u.value === "")
89
+ return [...l.value];
90
+ const e = u.value.toLowerCase();
91
+ return [...l.value.filter((t) => t.label.toLowerCase().indexOf(e) >= 0)];
92
+ }), n = a(() => o.modelValue.filter((e) => e.selected)), g = a(() => v.value.filter((e) => e.selected)), i = a(
93
+ () => l.value.filter((e) => e.selected)
94
+ ), c = a(() => (i.value.length > 0 ? i.value : l.value).map((t) => t.count).reduce((t, r) => t + r, 0)), s = a(() => !(n.value.length === g.value.length && n.value.map((e) => e.label).every((e) => i.value.map((t) => t.label).indexOf(e) >= 0))), N = () => {
95
+ l.value = l.value.map((e) => ({ ...e, selected: !1 }));
96
+ }, h = (e) => {
97
+ const t = l.value.find((r) => r.label === e);
98
+ t && (t.selected = !t.selected, l.value = [...l.value]);
99
+ }, y = () => {
100
+ s.value && f("update:modelValue", l.value), p.value = !1;
101
+ }, w = a(() => o.label.split("|").map((t) => t.trim())[0]), L = a(() => {
102
+ var S;
103
+ const e = o.label.split("|").map((I) => I.trim()), t = n.value.length;
104
+ return e[t > 1 ? 2 : t].replace("{count}", d.formatNumber(t)).replace("{itemLabel}", (S = n.value[0]) == null ? void 0 : S.label);
105
+ }), C = a(() => {
106
+ const t = o.showLabel.split("|").map((r) => r.trim())[c.value > 1 ? 2 : c.value];
107
+ return s.value ? t.replace("{count}", d.formatNumber(c.value)) : o.closeLabel;
108
+ }), V = () => {
109
+ const e = o.modelValue.map((t) => ({ ...t, selected: !1 }));
110
+ f("update:modelValue", e);
111
+ };
112
+ return k(
113
+ () => o.modelValue,
114
+ () => {
115
+ l.value = b();
116
+ },
117
+ { deep: !0 }
118
+ ), {
119
+ open: p,
120
+ filterString: u,
121
+ filteredItems: v,
122
+ isDirty: s,
123
+ computedLabel: L,
124
+ computedShowLabel: C,
125
+ computedTitle: w,
126
+ selected: n,
127
+ clearSelection: V,
128
+ resetFilter: N,
129
+ toggleSelected: h,
130
+ ctaClick: y,
131
+ formatNumber: d.formatNumber
132
+ };
133
+ }
134
+ });
135
+ export {
136
+ W as default
137
+ };
138
+ //# sourceMappingURL=NeonFilter.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilter.es.js","sources":["../../../../src/components/user-input/filter/NeonFilter.ts?vue&type=script&src=true&lang.ts"],"sourcesContent":["import { computed, defineComponent, ref, watch } from 'vue';\nimport NeonButton from '@/components/user-input/button/NeonButton.vue';\nimport NeonDropdown from '@/components/presentation/dropdown/NeonDropdown.vue';\nimport NeonFieldGroup from '@/components/user-input/field-group/NeonFieldGroup.vue';\nimport NeonInput from '@/components/user-input/input/NeonInput.vue';\nimport NeonLink from '@/components/navigation/link/NeonLink.vue';\nimport NeonStack from '@/components/layout/stack/NeonStack.vue';\nimport NeonSwitch from '@/components/user-input/switch/NeonSwitch.vue';\nimport type { NeonFilterItem } from '@/model/user-input/filter/NeonFilterItem';\nimport { NeonNumberUtils } from '@/utils/common/number/NeonNumberUtils';\nimport { NeonSize } from '@/model/common/size/NeonSize';\nimport { NeonFunctionalColor } from '@/model/common/color/NeonFunctionalColor';\n\n/**\n * A filtering component consisting of a button and a dropdown with a list of options. The button either displayed the\n * label or information about the selected items (the selected item or the count of selected items).\n */\nexport default defineComponent({\n name: 'NeonFilter',\n components: {\n NeonButton,\n NeonDropdown,\n NeonFieldGroup,\n NeonInput,\n NeonLink,\n NeonStack,\n NeonSwitch,\n },\n props: {\n /**\n * The list of filter items.\n */\n modelValue: { type: Array as () => Array<NeonFilterItem>, required: true },\n /**\n * The button label. This should conform to an i18n pluralization format,\n * e.g. 'Artists | {itemLabel} | {count} artists'.\n * There are two placeholders: {itemLabel} - the name of the item and {count} the count of selected items.\n * NOTE: In the case nothing is selected the label should just be the filter label, e.g. 'Artists' instead of '0 Artists'.\n */\n label: { type: String, required: true },\n /**\n * The color of the component.\n */\n color: { type: String as () => NeonFunctionalColor, default: () => NeonFunctionalColor.HighContrast },\n /**\n * The size of the dropdown button.\n */\n size: { type: String as () => NeonSize, default: () => NeonSize.Small },\n /**\n * The disabled state of the filter buttons\n */\n disabled: { type: Boolean, default: false },\n /**\n * Button title when items are selected.\n */\n editTitle: { type: String, default: 'Edit' },\n /**\n * Clear button title.\n */\n clearTitle: { type: String, default: 'Clear' },\n /**\n * The reset filter CTA label.\n */\n resetLabel: { type: String, default: 'Reset filter' },\n /**\n * The checkbox list filter placeholder text.\n */\n placeholder: { type: String, default: 'Search' },\n /**\n * The close CTA label.\n */\n closeLabel: { type: String, default: 'Close' },\n /**\n * The show 'n' items CTA label. This should adhere to the vue-i18n pluralization format\n * e.g. 'Show {count} items | Show {count} item | Show {count} items'.\n * There is one placeholder: {count} - the count of items matching this filter.\n */\n showLabel: { type: String, default: 'Show {count} items | Show {count} item | Show {count} items' },\n },\n emits: [\n /**\n * Emitted when the close CTA is clicked.\n */\n 'close',\n /**\n * Emitted when the selection is changed & the 'Show' CTA is triggered.\n *\n * @type {Array<NeonFilterItem>} - The filtered items.\n */\n 'update:modelValue',\n ],\n setup(props, { emit }) {\n const open = ref<boolean>(false);\n\n const calcInternalItems = () => props.modelValue.map((item) => ({ ...item }));\n\n const internalItems = ref<Array<NeonFilterItem>>(calcInternalItems());\n\n const filterString = ref<string>('');\n const filteredItems = computed<Array<NeonFilterItem>>(() => {\n if (filterString.value === '') {\n return [...internalItems.value];\n }\n\n const filter = filterString.value.toLowerCase();\n return [...internalItems.value.filter((item) => item.label.toLowerCase().indexOf(filter) >= 0)];\n });\n\n const selected = computed<Array<NeonFilterItem>>(() => props.modelValue.filter((item) => item.selected));\n const internalSelected = computed<Array<NeonFilterItem>>(() => filteredItems.value.filter((item) => item.selected));\n const unfilteredSelected = computed<Array<NeonFilterItem>>(() =>\n internalItems.value.filter((item) => item.selected),\n );\n\n const selectedCount = computed<number>(() => {\n const items = unfilteredSelected.value.length > 0 ? unfilteredSelected.value : internalItems.value;\n return items.map((item) => item.count).reduce((acc, item) => acc + item, 0);\n });\n\n const isDirty = computed<boolean>(() => {\n return !(\n selected.value.length === internalSelected.value.length &&\n selected.value\n .map((sv) => sv.label)\n .every((selectedItem) => unfilteredSelected.value.map((us) => us.label).indexOf(selectedItem) >= 0)\n );\n });\n\n const resetFilter = () => {\n internalItems.value = internalItems.value.map((item) => ({ ...item, selected: false }));\n };\n\n const toggleSelected = (label: string) => {\n const item = internalItems.value.find((item) => item.label === label);\n\n if (item) {\n item.selected = !item.selected;\n internalItems.value = [...internalItems.value];\n }\n };\n\n const ctaClick = () => {\n if (isDirty.value) {\n emit('update:modelValue', internalItems.value);\n }\n\n open.value = false;\n };\n\n const computedTitle = computed<string>(() => {\n const labels = props.label.split('|').map((l) => l.trim());\n return labels[0];\n });\n\n const computedLabel = computed<string>(() => {\n const labels = props.label.split('|').map((l) => l.trim());\n const itemCount = selected.value.length;\n const label = labels[itemCount > 1 ? 2 : itemCount];\n return label\n .replace('{count}', NeonNumberUtils.formatNumber(itemCount))\n .replace('{itemLabel}', selected.value[0]?.label);\n });\n\n const computedShowLabel = computed<string>(() => {\n const labels = props.showLabel.split('|').map((l) => l.trim());\n const label = labels[selectedCount.value > 1 ? 2 : selectedCount.value];\n return isDirty.value\n ? label.replace('{count}', NeonNumberUtils.formatNumber(selectedCount.value))\n : props.closeLabel;\n });\n\n const clearSelection = () => {\n const items = props.modelValue.map((item) => ({ ...item, selected: false }));\n emit('update:modelValue', items);\n };\n\n watch(\n () => props.modelValue,\n () => {\n internalItems.value = calcInternalItems();\n },\n { deep: true },\n );\n\n return {\n open,\n filterString,\n filteredItems,\n isDirty,\n computedLabel,\n computedShowLabel,\n computedTitle,\n selected,\n clearSelection,\n resetFilter,\n toggleSelected,\n ctaClick,\n formatNumber: NeonNumberUtils.formatNumber,\n };\n },\n});\n"],"names":["_sfc_main","defineComponent","NeonButton","NeonDropdown","NeonFieldGroup","NeonInput","NeonLink","NeonStack","NeonSwitch","NeonFunctionalColor","NeonSize","props","emit","open","ref","calcInternalItems","item","internalItems","filterString","filteredItems","computed","filter","selected","internalSelected","unfilteredSelected","selectedCount","acc","isDirty","sv","selectedItem","us","resetFilter","toggleSelected","label","ctaClick","computedTitle","l","computedLabel","labels","itemCount","NeonNumberUtils","_a","computedShowLabel","clearSelection","items","watch"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const p=require("./NeonFilter.cjs.js"),e=require("vue"),b=require("../../../_virtual/_plugin-vue_export-helper.cjs.js"),m={class:"neon-filter__title"},k=["onClick"];function f(o,n,g,V,h,v){const t=e.resolveComponent("neon-button"),r=e.resolveComponent("neon-field-group"),s=e.resolveComponent("neon-link"),d=e.resolveComponent("neon-input"),i=e.resolveComponent("neon-stack"),a=e.resolveComponent("neon-switch"),c=e.resolveComponent("neon-dropdown");return e.openBlock(),e.createBlock(c,{modelValue:o.open,"onUpdate:modelValue":n[4]||(n[4]=l=>o.open=l),class:"neon-filter"},{"dropdown-button":e.withCtx(()=>[o.selected.length?(e.openBlock(),e.createBlock(r,{key:0,"indicator-style":"external"},{default:e.withCtx(()=>[e.createVNode(t,{color:o.color,disabled:o.disabled,label:o.computedLabel,size:o.size,title:o.editTitle,"button-style":"solid",onClick:n[0]||(n[0]=l=>o.open=!0)},null,8,["color","disabled","label","size","title"]),e.createVNode(t,{color:o.color,disabled:o.disabled,size:o.size,title:o.clearTitle,"button-style":"solid",icon:"close",onClick:o.clearSelection},null,8,["color","disabled","size","title","onClick"])]),_:1})):(e.openBlock(),e.createBlock(t,{key:1,disabled:o.disabled,label:o.computedLabel,size:o.size,"button-style":"outline",color:"high-contrast",indicator:"",onClick:n[1]||(n[1]=l=>o.open=!0)},null,8,["disabled","label","size"]))]),default:e.withCtx(()=>[e.createVNode(i,{class:"neon-filter__content"},{default:e.withCtx(()=>[e.createVNode(i,{gap:"m"},{default:e.withCtx(()=>[e.createElementVNode("span",m,e.toDisplayString(o.computedTitle),1),e.createVNode(s,{class:"neon-filter__reset-link",onClick:o.resetFilter},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.resetLabel),1)]),_:1},8,["onClick"]),e.createVNode(d,{modelValue:o.filterString,"onUpdate:modelValue":n[2]||(n[2]=l=>o.filterString=l),icon:o.filterString===""?"search":"close",placeholder:o.placeholder,color:"high-contrast",onIconClick:n[3]||(n[3]=l=>o.filterString!==""?o.filterString="":void 0)},null,8,["modelValue","icon","placeholder"])]),_:1}),e.createVNode(i,{class:"neon-filter__items",gap:"s"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.filteredItems,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"neon-filter__item"},[e.createVNode(a,{disabled:l.disabled,label:l.label,"model-value":l.selected,color:"brand","switch-style":"checkbox","onUpdate:modelValue":u=>o.toggleSelected(l.label)},null,8,["disabled","label","model-value","onUpdate:modelValue"]),e.createElementVNode("span",{class:e.normalizeClass(["neon-number","neon-filter__item-count",{"neon-filter__item-count--disabled":l.disabled}]),onClick:u=>!l.disabled&&o.toggleSelected(l.label)},e.toDisplayString(o.formatNumber(l.count)),11,k)]))),128))]),_:1}),e.createVNode(t,{"button-style":o.isDirty?"solid":"outline",label:o.computedShowLabel,class:"neon-filter__cta",color:"high-contrast","full-width":"",onClick:o.ctaClick},null,8,["button-style","label","onClick"])]),_:1})]),_:1},8,["modelValue"])}const C=b(p,[["render",f]]);module.exports=C;
2
+ //# sourceMappingURL=NeonFilter.vue.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilter.vue.cjs.js","sources":["../../../../src/components/user-input/filter/NeonFilter.vue"],"sourcesContent":["<template>\n <neon-dropdown v-model=\"open\" class=\"neon-filter\">\n <template #dropdown-button>\n <neon-field-group v-if=\"selected.length\" indicator-style=\"external\">\n <neon-button\n :color=\"color\"\n :disabled=\"disabled\"\n :label=\"computedLabel\"\n :size=\"size\"\n :title=\"editTitle\"\n button-style=\"solid\"\n @click=\"open = true\"\n />\n <neon-button\n :color=\"color\"\n :disabled=\"disabled\"\n :size=\"size\"\n :title=\"clearTitle\"\n button-style=\"solid\"\n icon=\"close\"\n @click=\"clearSelection\"\n />\n </neon-field-group>\n <neon-button\n v-else\n :disabled=\"disabled\"\n :label=\"computedLabel\"\n :size=\"size\"\n button-style=\"outline\"\n color=\"high-contrast\"\n indicator\n @click=\"open = true\"\n />\n </template>\n <template #default>\n <neon-stack class=\"neon-filter__content\">\n <neon-stack gap=\"m\">\n <span class=\"neon-filter__title\">{{ computedTitle }}</span>\n <neon-link class=\"neon-filter__reset-link\" @click=\"resetFilter\">\n {{ resetLabel }}\n </neon-link>\n <neon-input\n v-model=\"filterString\"\n :icon=\"filterString === '' ? 'search' : 'close'\"\n :placeholder=\"placeholder\"\n color=\"high-contrast\"\n @icon-click=\"filterString !== '' ? (filterString = '') : undefined\"\n />\n </neon-stack>\n <neon-stack class=\"neon-filter__items\" gap=\"s\">\n <div v-for=\"item in filteredItems\" :key=\"item.label\" class=\"neon-filter__item\">\n <neon-switch\n :disabled=\"item.disabled\"\n :label=\"item.label\"\n :model-value=\"item.selected\"\n color=\"brand\"\n switch-style=\"checkbox\"\n @update:model-value=\"toggleSelected(item.label)\"\n />\n <span\n :class=\"[\n 'neon-number',\n 'neon-filter__item-count',\n { 'neon-filter__item-count--disabled': item.disabled },\n ]\"\n @click=\"!item.disabled && toggleSelected(item.label)\"\n >\n {{ formatNumber(item.count) }}\n </span>\n </div>\n </neon-stack>\n <neon-button\n :button-style=\"isDirty ? 'solid' : 'outline'\"\n :label=\"computedShowLabel\"\n class=\"neon-filter__cta\"\n color=\"high-contrast\"\n full-width\n @click=\"ctaClick\"\n />\n </neon-stack>\n </template>\n </neon-dropdown>\n</template>\n<script lang=\"ts\" src=\"./NeonFilter.ts\" />\n"],"names":["_hoisted_1","_createBlock","_component_neon_dropdown","_ctx","$event","_component_neon_field_group","_createVNode","_component_neon_button","_component_neon_stack","_createElementVNode","_toDisplayString","_component_neon_link","_component_neon_input","_cache","_createElementBlock","_Fragment","_renderList","item","_component_neon_switch","_normalizeClass","_hoisted_2"],"mappings":"qIAqCgBA,EAAA,CAAA,MAAM,oBAAoB,kUApCxCC,EAAAA,YAgFgBC,EAAA,YAhFQC,EAAA,0CAAAA,EAAA,KAAIC,GAAE,MAAM,gBACvB,4BACT,IAmBmB,CAnBKD,EAAA,SAAS,sBAAjCF,EAAAA,YAmBmBI,EAAA,OAnBsB,kBAAgB,+BACvD,IAQE,CARFC,EAAAA,YAQEC,EAAA,CAPC,MAAOJ,EAAA,MACP,SAAUA,EAAA,SACV,MAAOA,EAAA,cACP,KAAMA,EAAA,KACN,MAAOA,EAAA,UACR,eAAa,QACZ,uBAAOA,EAAA,KAAI,yDAEdG,EAAAA,YAQEC,EAAA,CAPC,MAAOJ,EAAA,MACP,SAAUA,EAAA,SACV,KAAMA,EAAA,KACN,MAAOA,EAAA,WACR,eAAa,QACb,KAAK,QACJ,QAAOA,EAAA,8FAGZF,EAAAA,YASEM,EAAA,OAPC,SAAUJ,EAAA,SACV,MAAOA,EAAA,cACP,KAAMA,EAAA,KACP,eAAa,UACb,MAAM,gBACN,UAAA,GACC,uBAAOA,EAAA,KAAI,4CAGL,kBACT,IA4Ca,CA5CbG,EAAAA,YA4CaE,EAAA,CA5CD,MAAM,sBAAsB,EAAA,mBACtC,IAYa,CAZbF,EAAAA,YAYaE,EAAA,CAZD,IAAI,GAAG,EAAA,mBACjB,IAA2D,CAA3DC,EAAAA,mBAA2D,OAA3DT,EAA2DU,EAAAA,gBAAvBP,EAAA,aAAa,EAAA,CAAA,EACjDG,EAAAA,YAEYK,EAAA,CAFD,MAAM,0BAA2B,QAAOR,EAAA,gCACjD,IAAgB,qCAAbA,EAAA,UAAU,EAAA,CAAA,wBAEfG,EAAAA,YAMEM,EAAA,YALST,EAAA,kDAAAA,EAAA,aAAYC,GACpB,KAAMD,EAAA,eAAY,GAAA,SAAA,QAClB,YAAaA,EAAA,YACd,MAAM,gBACL,YAAUU,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAT,GAAED,EAAA,eAAY,GAAWA,EAAA,gBAAqB,6DAG7DG,EAAAA,YAqBaE,EAAA,CArBD,MAAM,qBAAqB,IAAI,wBACpC,IAA6B,kBAAlCM,EAAAA,mBAmBMC,EAAAA,SAAA,KAAAC,EAAAA,WAnBcb,EAAA,cAARc,kBAAZH,EAAAA,mBAmBM,MAAA,CAnB8B,IAAKG,EAAK,MAAO,MAAM,sBACzDX,EAAAA,YAOEY,EAAA,CANC,SAAUD,EAAK,SACf,MAAOA,EAAK,MACZ,cAAaA,EAAK,SACnB,MAAM,QACN,eAAa,WACZ,sBAAkBb,GAAED,EAAA,eAAec,EAAK,KAAK,oEAEhDR,EAAAA,mBASO,OAAA,CARJ,MAAKU,EAAAA,eAAA,yCAAqI,CAAA,oCAAAF,EAAK,QAAQ,IAKvJ,QAAKb,GAAA,CAAGa,EAAK,UAAYd,EAAA,eAAec,EAAK,KAAK,qBAEhDd,EAAA,aAAac,EAAK,KAAK,CAAA,EAAA,GAAAG,CAAA,oBAIhCd,EAAAA,YAOEC,EAAA,CANC,eAAcJ,EAAA,QAAO,QAAA,UACrB,MAAOA,EAAA,kBACR,MAAM,mBACN,MAAM,gBACN,aAAA,GACC,QAAOA,EAAA"}
@@ -0,0 +1,123 @@
1
+ import y from "./NeonFilter.es.js";
2
+ import { resolveComponent as t, openBlock as s, createBlock as a, withCtx as i, createVNode as n, createElementVNode as c, toDisplayString as u, createTextVNode as _, createElementBlock as p, Fragment as h, renderList as V, normalizeClass as z } from "vue";
3
+ import S from "../../../_virtual/_plugin-vue_export-helper.es.js";
4
+ const v = { class: "neon-filter__title" }, w = ["onClick"];
5
+ function $(e, o, L, N, T, U) {
6
+ const d = t("neon-button"), b = t("neon-field-group"), f = t("neon-link"), m = t("neon-input"), r = t("neon-stack"), k = t("neon-switch"), g = t("neon-dropdown");
7
+ return s(), a(g, {
8
+ modelValue: e.open,
9
+ "onUpdate:modelValue": o[4] || (o[4] = (l) => e.open = l),
10
+ class: "neon-filter"
11
+ }, {
12
+ "dropdown-button": i(() => [
13
+ e.selected.length ? (s(), a(b, {
14
+ key: 0,
15
+ "indicator-style": "external"
16
+ }, {
17
+ default: i(() => [
18
+ n(d, {
19
+ color: e.color,
20
+ disabled: e.disabled,
21
+ label: e.computedLabel,
22
+ size: e.size,
23
+ title: e.editTitle,
24
+ "button-style": "solid",
25
+ onClick: o[0] || (o[0] = (l) => e.open = !0)
26
+ }, null, 8, ["color", "disabled", "label", "size", "title"]),
27
+ n(d, {
28
+ color: e.color,
29
+ disabled: e.disabled,
30
+ size: e.size,
31
+ title: e.clearTitle,
32
+ "button-style": "solid",
33
+ icon: "close",
34
+ onClick: e.clearSelection
35
+ }, null, 8, ["color", "disabled", "size", "title", "onClick"])
36
+ ]),
37
+ _: 1
38
+ })) : (s(), a(d, {
39
+ key: 1,
40
+ disabled: e.disabled,
41
+ label: e.computedLabel,
42
+ size: e.size,
43
+ "button-style": "outline",
44
+ color: "high-contrast",
45
+ indicator: "",
46
+ onClick: o[1] || (o[1] = (l) => e.open = !0)
47
+ }, null, 8, ["disabled", "label", "size"]))
48
+ ]),
49
+ default: i(() => [
50
+ n(r, { class: "neon-filter__content" }, {
51
+ default: i(() => [
52
+ n(r, { gap: "m" }, {
53
+ default: i(() => [
54
+ c("span", v, u(e.computedTitle), 1),
55
+ n(f, {
56
+ class: "neon-filter__reset-link",
57
+ onClick: e.resetFilter
58
+ }, {
59
+ default: i(() => [
60
+ _(u(e.resetLabel), 1)
61
+ ]),
62
+ _: 1
63
+ }, 8, ["onClick"]),
64
+ n(m, {
65
+ modelValue: e.filterString,
66
+ "onUpdate:modelValue": o[2] || (o[2] = (l) => e.filterString = l),
67
+ icon: e.filterString === "" ? "search" : "close",
68
+ placeholder: e.placeholder,
69
+ color: "high-contrast",
70
+ onIconClick: o[3] || (o[3] = (l) => e.filterString !== "" ? e.filterString = "" : void 0)
71
+ }, null, 8, ["modelValue", "icon", "placeholder"])
72
+ ]),
73
+ _: 1
74
+ }),
75
+ n(r, {
76
+ class: "neon-filter__items",
77
+ gap: "s"
78
+ }, {
79
+ default: i(() => [
80
+ (s(!0), p(h, null, V(e.filteredItems, (l) => (s(), p("div", {
81
+ key: l.label,
82
+ class: "neon-filter__item"
83
+ }, [
84
+ n(k, {
85
+ disabled: l.disabled,
86
+ label: l.label,
87
+ "model-value": l.selected,
88
+ color: "brand",
89
+ "switch-style": "checkbox",
90
+ "onUpdate:modelValue": (C) => e.toggleSelected(l.label)
91
+ }, null, 8, ["disabled", "label", "model-value", "onUpdate:modelValue"]),
92
+ c("span", {
93
+ class: z([
94
+ "neon-number",
95
+ "neon-filter__item-count",
96
+ { "neon-filter__item-count--disabled": l.disabled }
97
+ ]),
98
+ onClick: (C) => !l.disabled && e.toggleSelected(l.label)
99
+ }, u(e.formatNumber(l.count)), 11, w)
100
+ ]))), 128))
101
+ ]),
102
+ _: 1
103
+ }),
104
+ n(d, {
105
+ "button-style": e.isDirty ? "solid" : "outline",
106
+ label: e.computedShowLabel,
107
+ class: "neon-filter__cta",
108
+ color: "high-contrast",
109
+ "full-width": "",
110
+ onClick: e.ctaClick
111
+ }, null, 8, ["button-style", "label", "onClick"])
112
+ ]),
113
+ _: 1
114
+ })
115
+ ]),
116
+ _: 1
117
+ }, 8, ["modelValue"]);
118
+ }
119
+ const E = /* @__PURE__ */ S(y, [["render", $]]);
120
+ export {
121
+ E as default
122
+ };
123
+ //# sourceMappingURL=NeonFilter.vue.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeonFilter.vue.es.js","sources":["../../../../src/components/user-input/filter/NeonFilter.vue"],"sourcesContent":["<template>\n <neon-dropdown v-model=\"open\" class=\"neon-filter\">\n <template #dropdown-button>\n <neon-field-group v-if=\"selected.length\" indicator-style=\"external\">\n <neon-button\n :color=\"color\"\n :disabled=\"disabled\"\n :label=\"computedLabel\"\n :size=\"size\"\n :title=\"editTitle\"\n button-style=\"solid\"\n @click=\"open = true\"\n />\n <neon-button\n :color=\"color\"\n :disabled=\"disabled\"\n :size=\"size\"\n :title=\"clearTitle\"\n button-style=\"solid\"\n icon=\"close\"\n @click=\"clearSelection\"\n />\n </neon-field-group>\n <neon-button\n v-else\n :disabled=\"disabled\"\n :label=\"computedLabel\"\n :size=\"size\"\n button-style=\"outline\"\n color=\"high-contrast\"\n indicator\n @click=\"open = true\"\n />\n </template>\n <template #default>\n <neon-stack class=\"neon-filter__content\">\n <neon-stack gap=\"m\">\n <span class=\"neon-filter__title\">{{ computedTitle }}</span>\n <neon-link class=\"neon-filter__reset-link\" @click=\"resetFilter\">\n {{ resetLabel }}\n </neon-link>\n <neon-input\n v-model=\"filterString\"\n :icon=\"filterString === '' ? 'search' : 'close'\"\n :placeholder=\"placeholder\"\n color=\"high-contrast\"\n @icon-click=\"filterString !== '' ? (filterString = '') : undefined\"\n />\n </neon-stack>\n <neon-stack class=\"neon-filter__items\" gap=\"s\">\n <div v-for=\"item in filteredItems\" :key=\"item.label\" class=\"neon-filter__item\">\n <neon-switch\n :disabled=\"item.disabled\"\n :label=\"item.label\"\n :model-value=\"item.selected\"\n color=\"brand\"\n switch-style=\"checkbox\"\n @update:model-value=\"toggleSelected(item.label)\"\n />\n <span\n :class=\"[\n 'neon-number',\n 'neon-filter__item-count',\n { 'neon-filter__item-count--disabled': item.disabled },\n ]\"\n @click=\"!item.disabled && toggleSelected(item.label)\"\n >\n {{ formatNumber(item.count) }}\n </span>\n </div>\n </neon-stack>\n <neon-button\n :button-style=\"isDirty ? 'solid' : 'outline'\"\n :label=\"computedShowLabel\"\n class=\"neon-filter__cta\"\n color=\"high-contrast\"\n full-width\n @click=\"ctaClick\"\n />\n </neon-stack>\n </template>\n </neon-dropdown>\n</template>\n<script lang=\"ts\" src=\"./NeonFilter.ts\" />\n"],"names":["_hoisted_1","_createBlock","_component_neon_dropdown","_ctx","$event","_component_neon_field_group","_createVNode","_component_neon_button","_component_neon_stack","_createElementVNode","_toDisplayString","_component_neon_link","_component_neon_input","_cache","_createElementBlock","_Fragment","_renderList","item","_component_neon_switch","_normalizeClass","_hoisted_2"],"mappings":";;;AAqCgB,MAAAA,IAAA,EAAA,OAAM,qBAAoB;;;cApCxCC,EAgFgBC,GAAA;AAAA,gBAhFQC,EAAA;AAAA,kDAAAA,EAAA,OAAIC;AAAA,IAAE,OAAM;AAAA;IACvB,qBACT,MAmBmB;AAAA,MAnBKD,EAAA,SAAS,eAAjCF,EAmBmBI,GAAA;AAAA;QAnBsB,mBAAgB;AAAA;mBACvD,MAQE;AAAA,UARFC,EAQEC,GAAA;AAAA,YAPC,OAAOJ,EAAA;AAAA,YACP,UAAUA,EAAA;AAAA,YACV,OAAOA,EAAA;AAAA,YACP,MAAMA,EAAA;AAAA,YACN,OAAOA,EAAA;AAAA,YACR,gBAAa;AAAA,YACZ,gCAAOA,EAAA,OAAI;AAAA;UAEdG,EAQEC,GAAA;AAAA,YAPC,OAAOJ,EAAA;AAAA,YACP,UAAUA,EAAA;AAAA,YACV,MAAMA,EAAA;AAAA,YACN,OAAOA,EAAA;AAAA,YACR,gBAAa;AAAA,YACb,MAAK;AAAA,YACJ,SAAOA,EAAA;AAAA;;;kBAGZF,EASEM,GAAA;AAAA;QAPC,UAAUJ,EAAA;AAAA,QACV,OAAOA,EAAA;AAAA,QACP,MAAMA,EAAA;AAAA,QACP,gBAAa;AAAA,QACb,OAAM;AAAA,QACN,WAAA;AAAA,QACC,gCAAOA,EAAA,OAAI;AAAA;;IAGL,WACT,MA4Ca;AAAA,MA5CbG,EA4CaE,GAAA,EA5CD,OAAM,uBAAsB,GAAA;AAAA,mBACtC,MAYa;AAAA,UAZbF,EAYaE,GAAA,EAZD,KAAI,IAAG,GAAA;AAAA,uBACjB,MAA2D;AAAA,cAA3DC,EAA2D,QAA3DT,GAA2DU,EAAvBP,EAAA,aAAa,GAAA,CAAA;AAAA,cACjDG,EAEYK,GAAA;AAAA,gBAFD,OAAM;AAAA,gBAA2B,SAAOR,EAAA;AAAA;2BACjD,MAAgB;AAAA,sBAAbA,EAAA,UAAU,GAAA,CAAA;AAAA;;;cAEfG,EAMEM,GAAA;AAAA,4BALST,EAAA;AAAA,8DAAAA,EAAA,eAAYC;AAAA,gBACpB,MAAMD,EAAA,iBAAY,KAAA,WAAA;AAAA,gBAClB,aAAaA,EAAA;AAAA,gBACd,OAAM;AAAA,gBACL,aAAUU,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAT,MAAED,EAAA,iBAAY,KAAWA,EAAA,oBAAqB;AAAA;;;;UAG7DG,EAqBaE,GAAA;AAAA,YArBD,OAAM;AAAA,YAAqB,KAAI;AAAA;uBACpC,MAA6B;AAAA,sBAAlCM,EAmBMC,GAAA,MAAAC,EAnBcb,EAAA,eAAa,CAArBc,YAAZH,EAmBM,OAAA;AAAA,gBAnB8B,KAAKG,EAAK;AAAA,gBAAO,OAAM;AAAA;gBACzDX,EAOEY,GAAA;AAAA,kBANC,UAAUD,EAAK;AAAA,kBACf,OAAOA,EAAK;AAAA,kBACZ,eAAaA,EAAK;AAAA,kBACnB,OAAM;AAAA,kBACN,gBAAa;AAAA,kBACZ,uBAAkB,CAAAb,MAAED,EAAA,eAAec,EAAK,KAAK;AAAA;gBAEhDR,EASO,QAAA;AAAA,kBARJ,OAAKU,EAAA;AAAA;;oBAAqI,EAAA,qCAAAF,EAAK,SAAQ;AAAA;kBAKvJ,SAAK,CAAAb,MAAA,CAAGa,EAAK,YAAYd,EAAA,eAAec,EAAK,KAAK;AAAA,qBAEhDd,EAAA,aAAac,EAAK,KAAK,CAAA,GAAA,IAAAG,CAAA;AAAA;;;;UAIhCd,EAOEC,GAAA;AAAA,YANC,gBAAcJ,EAAA,UAAO,UAAA;AAAA,YACrB,OAAOA,EAAA;AAAA,YACR,OAAM;AAAA,YACN,OAAM;AAAA,YACN,cAAA;AAAA,YACC,SAAOA,EAAA;AAAA;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";const u=require("vue"),g=require("../../../model/common/color/NeonFunctionalColor.cjs.js"),S=require("../../../model/common/size/NeonSize.cjs.js"),q=require("../../../model/user-input/input/NeonInputMode.cjs.js"),F=require("../button/NeonButton.vue.cjs.js"),B=require("../field-group/NeonFieldGroup.vue.cjs.js"),p=require("../input/NeonInput.vue.cjs.js"),s=require("../../../utils/common/number/NeonNumberUtils.cjs.js"),x=u.defineComponent({name:"NeonNumber",components:{NeonButton:F,NeonFieldGroup:B,NeonInput:p},props:{id:{type:String,default:null},modelValue:{type:Number,default:null},min:{type:Number,required:!1},max:{type:Number,required:!1},step:{type:Number,required:!1},color:{type:String,default:g.NeonFunctionalColor.Primary},size:{type:String,default:S.NeonSize.Medium},locale:{type:String,default:null},placeholder:{type:String,default:null},disabled:{type:Boolean,default:!1},editable:{type:Boolean,default:!0},spinButtons:{type:Boolean,default:!1},percentage:{type:Boolean,default:!1},decimals:{type:Number,required:!1},valueTemplate:{type:String,required:!1},inputmode:{type:String,default:q.NeonInputMode.Numeric},incrementLabel:{type:String,default:"Increment"},decrementLabel:{type:String,default:"Decrement"}},emits:["update:modelValue"],setup(e,{emit:f}){const N=u.useAttrs(),o=u.ref(!1),r=t=>{e.disabled||f("update:modelValue",t)},v=u.computed(()=>{const{onBlur:t,onFocus:n,...i}=N;return i}),V=t=>{const n=s.NeonNumberUtils.parseNumber(t),i=t!==""&&t!==null?Math.max(Math.min(n,e.max??Number.MAX_SAFE_INTEGER),e.min??Number.MIN_SAFE_INTEGER):null;(i===null||!isNaN(n))&&r(i)},l=u.computed(()=>e.decimals??(e.percentage?0:void 0)),a=u.computed(()=>e.percentage&&l.value!==void 0?l.value+2:l.value),m=u.computed(()=>{const t=e.modelValue!==null?+e.modelValue:e.min||0;return a.value!==void 0?Number(t.toFixed(a.value)):t}),b=u.computed(()=>e.modelValue!==null&&(e.valueTemplate!==void 0||l.value!==void 0||e.percentage!==void 0)?s.NeonNumberUtils.formatNumber(e.modelValue,{decimals:l.value,format:e.valueTemplate,percentage:e.percentage},e.locale):e.modelValue),c=u.computed(()=>{var t;return a.value?(t=e.modelValue)==null?void 0:t.toFixed(a.value):e.modelValue}),y=u.computed(()=>o.value?c.value?`${c.value}`:"":b.value),d=u.computed(()=>e.step??(e.percentage?.01:1));return{focus:o,sanitizedAttributes:v,computedDecimals:l,computedRawDecimals:a,computedValue:m,computedStep:d,displayValue:y,valueChanged:V,increment:()=>{const t=m.value+d.value,n=e.max!==void 0?Math.min(e.max,t):t;n!==e.modelValue&&r(n)},decrement:()=>{const t=m.value-d.value,n=e.min!==void 0?Math.max(e.min,t):t;n!==e.modelValue&&r(n)},onFocus:()=>o.value=!0,onBlur:()=>o.value=!1}}});module.exports=x;
1
+ "use strict";const u=require("vue"),g=require("../../../model/common/color/NeonFunctionalColor.cjs.js"),S=require("../../../model/common/size/NeonSize.cjs.js"),q=require("../../../model/user-input/input/NeonInputMode.cjs.js"),F=require("../button/NeonButton.vue.cjs.js"),B=require("../field-group/NeonFieldGroup.vue.cjs.js"),x=require("../input/NeonInput.vue.cjs.js"),s=require("../../../utils/common/number/NeonNumberUtils.cjs.js"),M=u.defineComponent({name:"NeonNumber",components:{NeonButton:F,NeonFieldGroup:B,NeonInput:x},props:{id:{type:String,default:null},modelValue:{type:Number,default:null},min:{type:Number,required:!1},max:{type:Number,required:!1},step:{type:Number,required:!1},color:{type:String,default:g.NeonFunctionalColor.Primary},size:{type:String,default:S.NeonSize.Medium},locale:{type:String,default:null},placeholder:{type:String,default:null},disabled:{type:Boolean,default:!1},editable:{type:Boolean,default:!0},spinButtons:{type:Boolean,default:!1},percentage:{type:Boolean,default:!1},decimals:{type:Number,required:!1},valueTemplate:{type:String,required:!1},inputmode:{type:String,default:q.NeonInputMode.Numeric},incrementLabel:{type:String,default:"Increment"},decrementLabel:{type:String,default:"Decrement"}},emits:["update:modelValue"],setup(e,{emit:f}){const N=u.useAttrs(),o=u.ref(!1),i=t=>{e.disabled||f("update:modelValue",t)},v=u.computed(()=>{const{onBlur:t,onFocus:l,...d}=N;return d}),V=t=>{const l=s.NeonNumberUtils.parseNumber(t),d=t!==""&&t!==null?Math.max(Math.min(l,e.max??Number.MAX_SAFE_INTEGER),e.min??Number.MIN_SAFE_INTEGER):null;(d===null||!isNaN(l))&&i(d)},n=u.computed(()=>e.decimals??(e.percentage?0:void 0)),a=u.computed(()=>e.percentage&&n.value!==void 0?n.value+2:n.value),m=u.computed(()=>{const t=e.modelValue!==null?+e.modelValue:e.min??0;return a.value!==void 0?Number(t.toFixed(a.value)):t}),b=u.computed(()=>e.modelValue!==null&&(e.valueTemplate!==void 0||n.value!==void 0||e.percentage!==void 0)?s.NeonNumberUtils.formatNumber(e.modelValue,{decimals:n.value,format:e.valueTemplate,percentage:e.percentage},e.locale):e.modelValue),c=u.computed(()=>a.value!==void 0&&e.modelValue!==null?e.modelValue.toFixed(a.value):e.modelValue===null?"":`${e.modelValue}`),y=u.computed(()=>o.value?c.value!==void 0?`${c.value}`:"":b.value),r=u.computed(()=>e.step??(e.percentage?.01:1));return{focus:o,sanitizedAttributes:v,computedDecimals:n,computedRawDecimals:a,computedValue:m,computedStep:r,displayValue:y,valueChanged:V,increment:()=>{const t=m.value+r.value,l=e.max!==void 0?Math.min(e.max,t):t;l!==e.modelValue&&i(l)},decrement:()=>{const t=m.value-r.value,l=e.min!==void 0?Math.max(e.min,t):t;l!==e.modelValue&&i(l)},onFocus:()=>o.value=!0,onBlur:()=>o.value=!1}}});module.exports=M;
2
2
  //# sourceMappingURL=NeonNumber.cjs.js.map