@nexxtmove/ui 1.1.2 → 1.1.3

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.
@@ -0,0 +1,16 @@
1
+ export type NexxtTemplateCardContentFeature = 'references' | 'valuation' | 'reviews' | 'packages';
2
+ export interface NexxtTemplateCardProps {
3
+ image?: string;
4
+ title: string;
5
+ subtitle?: string;
6
+ contentFeatures?: NexxtTemplateCardContentFeature[];
7
+ messages?: Partial<Record<NexxtTemplateCardContentFeature, string>>;
8
+ }
9
+ declare const __VLS_export: import('vue').DefineComponent<NexxtTemplateCardProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<NexxtTemplateCardProps> & Readonly<{}>, {
10
+ image: string;
11
+ messages: Partial<Record<NexxtTemplateCardContentFeature, string>>;
12
+ subtitle: string;
13
+ contentFeatures: NexxtTemplateCardContentFeature[];
14
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
package/dist/index.d.ts CHANGED
@@ -43,6 +43,7 @@ export { default as NexxtSwitch } from './components/Switch/Switch.vue';
43
43
  export { default as NexxtTabbedContent } from './components/TabbedContent/TabbedContent.vue';
44
44
  export { default as NexxtTable } from './components/Table/Table.vue';
45
45
  export { default as NexxtTabs } from './components/Tabs/Tabs.vue';
46
+ export { default as NexxtTemplateCard } from './components/TemplateCard/TemplateCard.vue';
46
47
  export { default as NexxtTimelineEvent } from './components/TimelineEvent/TimelineEvent.vue';
47
48
  export { default as NexxtTimelinePhaseblock } from './components/TimelinePhaseblock/TimelinePhaseblock.vue';
48
49
  export { default as NexxtToast } from './components/Toast/Toast.vue';
package/dist/index.js CHANGED
@@ -4508,65 +4508,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4508
4508
  })
4509
4509
  ])], 8, Oa)]));
4510
4510
  }
4511
- }), Ba = [
4512
- "data-event-source",
4513
- "data-event-date",
4514
- "date-event-type"
4515
- ], Va = { class: "heading-3" }, Ha = ["href"], Ua = { class: "truncate group-hover:underline" }, Wa = {
4516
- key: 1,
4517
- class: "mt-1 text-sm text-gray-500"
4518
- }, Ga = /* @__PURE__ */ p({
4519
- name: "NexxtTimelineEvent",
4520
- __name: "TimelineEvent",
4521
- props: {
4522
- event: {},
4523
- splitView: {
4524
- type: Boolean,
4525
- default: !0
4526
- }
4527
- },
4528
- setup(e) {
4529
- let t = {
4530
- label: "Gebeurtenis",
4531
- icon: "info",
4532
- color: "bg-gray-500"
4533
- }, n = i(() => Qn[r.event.type] || {
4534
- ...t,
4535
- label: r.event.type
4536
- }), r = e, a = i(() => {
4537
- let e = new Date(r.event.happened_at);
4538
- return `${e.toLocaleDateString("nl-NL", {
4539
- day: "numeric",
4540
- month: "short",
4541
- year: "numeric"
4542
- })} om ${e.toLocaleTimeString("nl-NL", {
4543
- hour: "2-digit",
4544
- minute: "2-digit"
4545
- })}`;
4546
- }), l = i(() => r.splitView && r.event.direction === "inbound");
4547
- return (t, r) => (w(), s("div", {
4548
- "data-event-source": e.event.direction,
4549
- "data-event-date": e.event.happened_at,
4550
- "date-event-type": e.event.type,
4551
- class: y(["relative z-20 flex flex-wrap items-center gap-x-6 gap-y-2", { "justify-end": l.value }])
4552
- }, [c("div", { class: y(["w-full px-24 extra-small-normal text-gray-600", { "text-right": l.value }]) }, k(a.value), 3), c("div", { class: y(["flex w-full shrink-0 items-center gap-6", { "flex-row-reverse": l.value }]) }, [c("div", { class: y(["flex h-10 w-10 shrink-0 items-center justify-center rounded-full", [n.value.color]]) }, [f(Z, {
4553
- name: n.value.icon,
4554
- class: "flex h-6 w-6 text-xl text-white"
4555
- }, null, 8, ["name"])], 2), c("div", { class: y(["flex w-full flex-col gap-2 rounded-xl border border-gray-200 p-8", { "max-w-lg": e.splitView }]) }, [
4556
- c("span", Va, k(n.value.label), 1),
4557
- e.event.url ? (w(), s("a", {
4558
- key: 0,
4559
- href: e.event.url,
4560
- target: "_blank",
4561
- class: "group mt-1 flex justify-between gap-2 text-sm text-cornflower-blue-500 hover:text-cornflower-blue-600"
4562
- }, [c("span", Ua, k(e.event.description || e.event.url), 1), f(Z, {
4563
- name: "external-link",
4564
- class: "ml-1 h-4 w-4 text-gray-950"
4565
- })], 8, Ha)) : o("", !0),
4566
- e.event.request_reason ? (w(), s("span", Wa, " Reden: " + k(e.event.request_reason), 1)) : o("", !0)
4567
- ], 2)], 2)], 10, Ba));
4568
- }
4569
- }), Ka = /* @__PURE__ */ p({
4511
+ }), Ba = /* @__PURE__ */ p({
4570
4512
  name: "NexxtTooltip",
4571
4513
  __name: "Tooltip",
4572
4514
  props: {
@@ -4618,13 +4560,140 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4618
4560
  _: 3
4619
4561
  }));
4620
4562
  }
4621
- }), qa = ["data-phase"], Ja = {
4563
+ }), Va = { class: "w-full max-w-105 rounded-xl border border-gray-200" }, Ha = { class: "h-38 w-full" }, Ua = ["src", "alt"], Wa = {
4564
+ key: 1,
4565
+ class: "flex h-38 w-full items-center justify-center rounded-t-xl bg-gray-100"
4566
+ }, Ga = { class: "rounded-b-xl px-8 pt-3.5 pb-4" }, Ka = { class: "truncate heading-4 text-gray-900" }, qa = {
4567
+ key: 0,
4568
+ class: "truncate body-normal text-gray-700"
4569
+ }, Ja = {
4570
+ key: 1,
4571
+ class: "mt-3 flex flex-wrap gap-2"
4572
+ }, Ya = { class: "body-small text-gray-700" }, Xa = /* @__PURE__ */ p({
4573
+ name: "NexxtTemplateCard",
4574
+ __name: "TemplateCard",
4575
+ props: {
4576
+ image: { default: void 0 },
4577
+ title: {},
4578
+ subtitle: { default: void 0 },
4579
+ contentFeatures: { default: () => [] },
4580
+ messages: { default: () => ({}) }
4581
+ },
4582
+ setup(t) {
4583
+ let n = {
4584
+ references: {
4585
+ icon: "house-circle-check",
4586
+ textColor: "text-cornflower-blue-500",
4587
+ backgroundColor: "bg-cornflower-blue-50"
4588
+ },
4589
+ valuation: {
4590
+ icon: "circle-euro",
4591
+ textColor: "text-rose-500",
4592
+ backgroundColor: "bg-rose-50"
4593
+ },
4594
+ reviews: {
4595
+ icon: "star",
4596
+ textColor: "text-orange-500",
4597
+ backgroundColor: "bg-orange-50"
4598
+ },
4599
+ packages: {
4600
+ icon: "piggy-bank",
4601
+ textColor: "text-green-500",
4602
+ backgroundColor: "bg-green-50"
4603
+ }
4604
+ }, r = {
4605
+ references: "Referenties",
4606
+ valuation: "Waardebepaling",
4607
+ reviews: "Reviews",
4608
+ packages: "Courtage"
4609
+ }, a = t, l = i(() => ({
4610
+ ...r,
4611
+ ...a.messages
4612
+ }));
4613
+ return (r, i) => (w(), s("div", Va, [c("picture", Ha, [t.image ? (w(), s("img", {
4614
+ key: 0,
4615
+ src: t.image,
4616
+ alt: t.title,
4617
+ loading: "lazy",
4618
+ class: "w-full rounded-t-xl object-cover"
4619
+ }, null, 8, Ua)) : (w(), s("div", Wa, [f(Z, {
4620
+ name: "image",
4621
+ class: "text-4xl text-gray-400"
4622
+ })]))]), c("div", Ga, [
4623
+ c("h3", Ka, k(t.title), 1),
4624
+ t.subtitle ? (w(), s("p", qa, k(t.subtitle), 1)) : o("", !0),
4625
+ t.contentFeatures.length ? (w(), s("ul", Ja, [(w(!0), s(e, null, E(t.contentFeatures, (e) => (w(), s("li", { key: e }, [f(Ba, null, {
4626
+ tooltip: R(() => [c("span", Ya, k(l.value[e]), 1)]),
4627
+ default: R(() => [c("div", { class: y([[n[e].backgroundColor, n[e].textColor], "flex size-8 items-center justify-center rounded-full"]) }, [f(Z, { name: n[e].icon }, null, 8, ["name"])], 2)]),
4628
+ _: 2
4629
+ }, 1024)]))), 128))])) : o("", !0)
4630
+ ])]));
4631
+ }
4632
+ }), Za = [
4633
+ "data-event-source",
4634
+ "data-event-date",
4635
+ "date-event-type"
4636
+ ], Qa = { class: "heading-3" }, $a = ["href"], eo = { class: "truncate group-hover:underline" }, to = {
4637
+ key: 1,
4638
+ class: "mt-1 text-sm text-gray-500"
4639
+ }, no = /* @__PURE__ */ p({
4640
+ name: "NexxtTimelineEvent",
4641
+ __name: "TimelineEvent",
4642
+ props: {
4643
+ event: {},
4644
+ splitView: {
4645
+ type: Boolean,
4646
+ default: !0
4647
+ }
4648
+ },
4649
+ setup(e) {
4650
+ let t = {
4651
+ label: "Gebeurtenis",
4652
+ icon: "info",
4653
+ color: "bg-gray-500"
4654
+ }, n = i(() => Qn[r.event.type] || {
4655
+ ...t,
4656
+ label: r.event.type
4657
+ }), r = e, a = i(() => {
4658
+ let e = new Date(r.event.happened_at);
4659
+ return `${e.toLocaleDateString("nl-NL", {
4660
+ day: "numeric",
4661
+ month: "short",
4662
+ year: "numeric"
4663
+ })} om ${e.toLocaleTimeString("nl-NL", {
4664
+ hour: "2-digit",
4665
+ minute: "2-digit"
4666
+ })}`;
4667
+ }), l = i(() => r.splitView && r.event.direction === "inbound");
4668
+ return (t, r) => (w(), s("div", {
4669
+ "data-event-source": e.event.direction,
4670
+ "data-event-date": e.event.happened_at,
4671
+ "date-event-type": e.event.type,
4672
+ class: y(["relative z-20 flex flex-wrap items-center gap-x-6 gap-y-2", { "justify-end": l.value }])
4673
+ }, [c("div", { class: y(["w-full px-24 extra-small-normal text-gray-600", { "text-right": l.value }]) }, k(a.value), 3), c("div", { class: y(["flex w-full shrink-0 items-center gap-6", { "flex-row-reverse": l.value }]) }, [c("div", { class: y(["flex h-10 w-10 shrink-0 items-center justify-center rounded-full", [n.value.color]]) }, [f(Z, {
4674
+ name: n.value.icon,
4675
+ class: "flex h-6 w-6 text-xl text-white"
4676
+ }, null, 8, ["name"])], 2), c("div", { class: y(["flex w-full flex-col gap-2 rounded-xl border border-gray-200 p-8", { "max-w-lg": e.splitView }]) }, [
4677
+ c("span", Qa, k(n.value.label), 1),
4678
+ e.event.url ? (w(), s("a", {
4679
+ key: 0,
4680
+ href: e.event.url,
4681
+ target: "_blank",
4682
+ class: "group mt-1 flex justify-between gap-2 text-sm text-cornflower-blue-500 hover:text-cornflower-blue-600"
4683
+ }, [c("span", eo, k(e.event.description || e.event.url), 1), f(Z, {
4684
+ name: "external-link",
4685
+ class: "ml-1 h-4 w-4 text-gray-950"
4686
+ })], 8, $a)) : o("", !0),
4687
+ e.event.request_reason ? (w(), s("span", to, " Reden: " + k(e.event.request_reason), 1)) : o("", !0)
4688
+ ], 2)], 2)], 10, Za));
4689
+ }
4690
+ }), ro = ["data-phase"], io = {
4622
4691
  key: 0,
4623
4692
  class: "relative z-10"
4624
- }, Ya = { class: "flex items-center justify-between px-4 py-2" }, Xa = { class: "flex gap-1" }, Za = { class: "flex gap-1" }, Qa = { class: "text-sm font-semibold tracking-wider uppercase" }, $a = { class: "mt-2 font-medium text-xs text-gray-500" }, eo = {
4693
+ }, ao = { class: "flex items-center justify-between px-4 py-2" }, oo = { class: "flex gap-1" }, so = { class: "flex gap-1" }, co = { class: "text-sm font-semibold tracking-wider uppercase" }, lo = { class: "mt-2 font-medium text-xs text-gray-500" }, uo = {
4625
4694
  key: 1,
4626
4695
  class: "h-1"
4627
- }, to = /* @__PURE__ */ p({
4696
+ }, fo = /* @__PURE__ */ p({
4628
4697
  name: "NexxtTimelinePhaseblock",
4629
4698
  __name: "TimelinePhaseblock",
4630
4699
  props: {
@@ -4660,14 +4729,14 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4660
4729
  class: "relative z-10 flex flex-col gap-16",
4661
4730
  "data-phase": t.phase.phase.value
4662
4731
  }, [
4663
- t.index === 0 && t.isSplitView ? (w(), s("div", Ja, [c("div", Ya, [c("span", Xa, [i[1] ||= d(" Outbound ", -1), f(Ka, null, {
4732
+ t.index === 0 && t.isSplitView ? (w(), s("div", io, [c("div", ao, [c("span", oo, [i[1] ||= d(" Outbound ", -1), f(Ba, null, {
4664
4733
  tooltip: R(() => [...i[0] ||= [c("span", { class: "text-sm" }, "Vanuit Nexxtmove", -1)]]),
4665
4734
  default: R(() => [f(Z, {
4666
4735
  name: "circle-info",
4667
4736
  class: "h-4 w-4 text-xs text-gray-600"
4668
4737
  })]),
4669
4738
  _: 1
4670
- })]), c("span", Za, [i[3] ||= d(" Inbound ", -1), f(Ka, { "as-child": "" }, {
4739
+ })]), c("span", so, [i[3] ||= d(" Inbound ", -1), f(Ba, { "as-child": "" }, {
4671
4740
  tooltip: R(() => [...i[2] ||= [c("span", { class: "text-sm" }, "Vanuit relatie", -1)]]),
4672
4741
  default: R(() => [f(Z, {
4673
4742
  name: "circle-info",
@@ -4680,7 +4749,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4680
4749
  key: 1,
4681
4750
  class: y(["absolute right-5 bottom-0 w-0 border-l", [A($)[t.phase.phase.value].color, t.index === 0 ? "top-10" : "top-0"]])
4682
4751
  }, null, 2)) : o("", !0),
4683
- (w(!0), s(e, null, E(t.phase.events, (e) => (w(), a(Ga, {
4752
+ (w(!0), s(e, null, E(t.phase.events, (e) => (w(), a(no, {
4684
4753
  key: e.id,
4685
4754
  event: e,
4686
4755
  "split-view": t.isSplitView
@@ -4689,36 +4758,36 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4689
4758
  key: 2,
4690
4759
  class: y(["relative flex flex-col items-center pt-8 pb-24 text-center", { "pl-16": !t.isSplitView }])
4691
4760
  }, [
4692
- c("div", { class: y(["flex items-center gap-2 rounded-full px-12 py-4", [A($)[t.phase.phase.value].bgColor, A($)[t.phase.phase.value].textColor]]) }, [c("span", Qa, k(A($)[t.phase.phase.value].label), 1), p() ? (w(), a(Z, {
4761
+ c("div", { class: y(["flex items-center gap-2 rounded-full px-12 py-4", [A($)[t.phase.phase.value].bgColor, A($)[t.phase.phase.value].textColor]]) }, [c("span", co, k(A($)[t.phase.phase.value].label), 1), p() ? (w(), a(Z, {
4693
4762
  key: 0,
4694
4763
  name: p() === "up" ? "arrow-up" : "arrow-down",
4695
4764
  class: "h-4 w-4 text-white"
4696
4765
  }, null, 8, ["name"])) : o("", !0)], 2),
4697
- c("span", $a, k(u()), 1),
4766
+ c("span", lo, k(u()), 1),
4698
4767
  t.isSplitView ? (w(), s("div", {
4699
4768
  key: 0,
4700
4769
  class: y(["mt-4 h-px w-[75%]", A($)[t.phase.phase.value].bgColor])
4701
4770
  }, null, 2)) : o("", !0),
4702
- t.isLast ? o("", !0) : (w(), s("div", eo)),
4771
+ t.isLast ? o("", !0) : (w(), s("div", uo)),
4703
4772
  c("div", { class: y(["absolute top-0 bottom-0 left-5 w-px bg-linear-to-b", r.value]) }, null, 2),
4704
4773
  t.isSplitView ? (w(), s("div", {
4705
4774
  key: 2,
4706
4775
  class: y(["absolute top-0 right-5 bottom-0 w-px bg-linear-to-b", r.value])
4707
4776
  }, null, 2)) : o("", !0)
4708
4777
  ], 2))
4709
- ], 8, qa));
4778
+ ], 8, ro));
4710
4779
  }
4711
- }), no = ["role", "aria-live"], ro = { class: "flex min-w-0 flex-1 flex-col gap-0.5 pt-0.5" }, io = {
4780
+ }), po = ["role", "aria-live"], mo = { class: "flex min-w-0 flex-1 flex-col gap-0.5 pt-0.5" }, ho = {
4712
4781
  key: 1,
4713
4782
  class: "body-normal"
4714
- }, ao = ["aria-label"], oo = {
4783
+ }, go = ["aria-label"], _o = {
4715
4784
  key: 0,
4716
4785
  class: "absolute inset-0 -rotate-90 text-gray-400",
4717
4786
  viewBox: "0 0 24 24",
4718
4787
  width: "32",
4719
4788
  height: "32",
4720
4789
  "aria-hidden": "true"
4721
- }, so = 56.55, co = /*#__PURE__*/ Mn(/* @__PURE__ */ p({
4790
+ }, vo = 56.55, yo = /*#__PURE__*/ Mn(/* @__PURE__ */ p({
4722
4791
  name: "NexxtToast",
4723
4792
  __name: "Toast",
4724
4793
  props: {
@@ -4733,7 +4802,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4733
4802
  },
4734
4803
  emits: ["dismiss"],
4735
4804
  setup(e, { emit: t }) {
4736
- j((e) => ({ v3e3d3e68: so }));
4805
+ j((e) => ({ v3e3d3e68: vo }));
4737
4806
  let n = {
4738
4807
  info: {
4739
4808
  icon: "info",
@@ -4781,12 +4850,12 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4781
4850
  name: l.value.icon,
4782
4851
  class: "text-xl"
4783
4852
  }, null, 8, ["name"])], 2),
4784
- c("div", ro, [
4853
+ c("div", mo, [
4785
4854
  e.title ? (w(), s("p", {
4786
4855
  key: 0,
4787
4856
  class: y(["heading-4", l.value.titleColor])
4788
4857
  }, k(e.title), 3)) : o("", !0),
4789
- e.message ? (w(), s("p", io, k(e.message), 1)) : o("", !0),
4858
+ e.message ? (w(), s("p", ho, k(e.message), 1)) : o("", !0),
4790
4859
  D(t.$slots, "default", {}, void 0, !0)
4791
4860
  ]),
4792
4861
  e.dismissible ? (w(), s("button", {
@@ -4795,7 +4864,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4795
4864
  class: "relative flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center focus:outline-none",
4796
4865
  "aria-label": e.autoClose ? `Sluiten (verdwijnt automatisch na ${e.autoClose / 1e3} seconden)` : "Sluiten",
4797
4866
  onClick: n[0] ||= (e) => r("dismiss")
4798
- }, [e.autoClose ? (w(), s("svg", oo, [c("circle", {
4867
+ }, [e.autoClose ? (w(), s("svg", _o, [c("circle", {
4799
4868
  cx: "12",
4800
4869
  cy: "12",
4801
4870
  r: "9",
@@ -4803,7 +4872,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4803
4872
  stroke: "currentColor",
4804
4873
  "stroke-width": "1.2",
4805
4874
  "stroke-linecap": "round",
4806
- "stroke-dasharray": so,
4875
+ "stroke-dasharray": vo,
4807
4876
  class: "timer-circle",
4808
4877
  style: x({
4809
4878
  animationDuration: `${e.autoClose}ms`,
@@ -4812,10 +4881,10 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4812
4881
  }, null, 4)])) : o("", !0), f(Z, {
4813
4882
  name: "xmark",
4814
4883
  class: "text-sm"
4815
- })], 8, ao)) : o("", !0)
4816
- ], 42, no));
4884
+ })], 8, go)) : o("", !0)
4885
+ ], 42, po));
4817
4886
  }
4818
- }), [["__scopeId", "data-v-89269eaa"]]), lo = /* @__PURE__ */ p({
4887
+ }), [["__scopeId", "data-v-89269eaa"]]), bo = /* @__PURE__ */ p({
4819
4888
  name: "NexxtToaster",
4820
4889
  __name: "Toaster",
4821
4890
  props: {
@@ -4848,7 +4917,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4848
4917
  default: R(() => [(w(!0), s(e, null, E(n.toasts, (e) => (w(), s("div", {
4849
4918
  key: e.id,
4850
4919
  class: "pointer-events-auto"
4851
- }, [f(co, _({ ref_for: !0 }, e, { onDismiss: (t) => o("dismiss", e.id) }), null, 16, ["onDismiss"])]))), 128))]),
4920
+ }, [f(yo, _({ ref_for: !0 }, e, { onDismiss: (t) => o("dismiss", e.id) }), null, 16, ["onDismiss"])]))), 128))]),
4852
4921
  _: 1
4853
4922
  }, 8, [
4854
4923
  "class",
@@ -4856,19 +4925,19 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4856
4925
  "leave-to-class"
4857
4926
  ])], 2)]));
4858
4927
  }
4859
- }), uo = { class: "flex flex-col gap-1" }, fo = {
4928
+ }), xo = { class: "flex flex-col gap-1" }, So = {
4860
4929
  key: 0,
4861
4930
  class: "text-color-gray-700 justify-start body-normal text-sm"
4862
- }, po = ["onClick"], mo = {
4931
+ }, Co = ["onClick"], wo = {
4863
4932
  key: 1,
4864
4933
  class: "extra-small-semibold"
4865
- }, ho = ["onClick"], go = {
4934
+ }, To = ["onClick"], Eo = {
4866
4935
  key: 1,
4867
4936
  class: "extra-small-semibold"
4868
- }, _o = {
4937
+ }, Do = {
4869
4938
  key: 1,
4870
4939
  class: "extra-small-semibold"
4871
- }, vo = /* @__PURE__ */ p({
4940
+ }, Oo = /* @__PURE__ */ p({
4872
4941
  name: "NexxtToggleGroup",
4873
4942
  __name: "ToggleGroup",
4874
4943
  props: /*@__PURE__*/ g({
@@ -4899,7 +4968,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4899
4968
  };
4900
4969
  return I(r, async () => await m()), et(i, () => m()), S(async () => {
4901
4970
  await document.fonts.ready, await m(), await v(), p.value = !0;
4902
- }), (n, m) => (w(), s("div", uo, [t.label ? (w(), s("label", fo, k(t.label), 1)) : o("", !0), c("div", {
4971
+ }), (n, m) => (w(), s("div", xo, [t.label ? (w(), s("label", So, k(t.label), 1)) : o("", !0), c("div", {
4903
4972
  ref_key: "containerRef",
4904
4973
  ref: i,
4905
4974
  class: y(["relative isolate flex h-10 gap-1 rounded-xl bg-gray-100 p-1", { "flex-wrap": !t.equalWidth }])
@@ -4909,7 +4978,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4909
4978
  class: y(["absolute inset-y-1 left-0 rounded-lg bg-white", p.value ? "transition-transform duration-500 ease-[cubic-bezier(0.34,1.2,0.64,1)]" : ""]),
4910
4979
  style: x(u.value)
4911
4980
  }, null, 6),
4912
- (w(!0), s(e, null, E(t.options, (n, i) => (w(), s(e, { key: n.value }, [n.tooltip ? (w(), a(Ka, {
4981
+ (w(!0), s(e, null, E(t.options, (n, i) => (w(), s(e, { key: n.value }, [n.tooltip ? (w(), a(Ba, {
4913
4982
  key: 0,
4914
4983
  "disable-closing-trigger": ""
4915
4984
  }, {
@@ -4923,7 +4992,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4923
4992
  }, [n.icon ? (w(), a(Z, {
4924
4993
  key: 0,
4925
4994
  name: n.icon
4926
- }, null, 8, ["name"])) : o("", !0), n.label ? (w(), s("span", mo, k(n.label), 1)) : o("", !0)], 10, po)]),
4995
+ }, null, 8, ["name"])) : o("", !0), n.label ? (w(), s("span", wo, k(n.label), 1)) : o("", !0)], 10, Co)]),
4927
4996
  _: 2
4928
4997
  }, 1024)) : (w(), s("button", {
4929
4998
  key: 1,
@@ -4935,7 +5004,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4935
5004
  }, [n.icon ? (w(), a(Z, {
4936
5005
  key: 0,
4937
5006
  name: n.icon
4938
- }, null, 8, ["name"])) : o("", !0), n.label ? (w(), s("span", go, k(n.label), 1)) : o("", !0)], 10, ho))], 64))), 128)),
5007
+ }, null, 8, ["name"])) : o("", !0), n.label ? (w(), s("span", Eo, k(n.label), 1)) : o("", !0)], 10, To))], 64))), 128)),
4939
5008
  c("div", {
4940
5009
  "aria-hidden": "true",
4941
5010
  class: y(["pointer-events-none absolute inset-0 z-20 flex gap-1 p-1", [p.value ? "transition-[clip-path] duration-500 ease-[cubic-bezier(0.34,1.2,0.64,1)]" : "", { "flex-wrap": !t.equalWidth }]]),
@@ -4946,29 +5015,29 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
4946
5015
  }, [e.icon ? (w(), a(Z, {
4947
5016
  key: 0,
4948
5017
  name: e.icon
4949
- }, null, 8, ["name"])) : o("", !0), e.label ? (w(), s("span", _o, k(e.label), 1)) : o("", !0)], 2))), 128))], 6)
5018
+ }, null, 8, ["name"])) : o("", !0), e.label ? (w(), s("span", Do, k(e.label), 1)) : o("", !0)], 2))), 128))], 6)
4950
5019
  ], 2)]));
4951
5020
  }
4952
- }), yo = [
5021
+ }), ko = [
4953
5022
  "src",
4954
5023
  "loop",
4955
5024
  "aria-label"
4956
- ], bo = {
5025
+ ], Ao = {
4957
5026
  key: 0,
4958
5027
  role: "alert",
4959
5028
  class: "absolute inset-0 flex flex-col items-center justify-center gap-3 rounded-lg bg-gray-900 text-white"
4960
- }, xo = { class: "heading-4" }, So = { class: "max-w-xs truncate extra-small-normal text-white/50" }, Co = {
5029
+ }, jo = { class: "heading-4" }, Mo = { class: "max-w-xs truncate extra-small-normal text-white/50" }, No = {
4961
5030
  key: 0,
4962
5031
  class: "pointer-events-none absolute inset-0 flex items-center justify-center"
4963
- }, wo = {
5032
+ }, Po = {
4964
5033
  class: "flex h-16 w-16 items-center justify-center rounded-full bg-black/50 text-white",
4965
5034
  "aria-hidden": "true"
4966
- }, To = [
5035
+ }, Fo = [
4967
5036
  "aria-label",
4968
5037
  "aria-valuemax",
4969
5038
  "aria-valuenow",
4970
5039
  "aria-valuetext"
4971
- ], Eo = { class: "flex items-center gap-2" }, Do = ["aria-label"], Oo = { class: "extra-small-normal text-white/70 tabular-nums" }, ko = ["aria-label"], Ao = ["aria-label"], jo = /* @__PURE__ */ p({
5040
+ ], Io = { class: "flex items-center gap-2" }, Lo = ["aria-label"], Ro = { class: "extra-small-normal text-white/70 tabular-nums" }, zo = ["aria-label"], Bo = ["aria-label"], Vo = /* @__PURE__ */ p({
4972
5041
  __name: "VideoPlayer",
4973
5042
  props: {
4974
5043
  src: {},
@@ -5049,15 +5118,15 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
5049
5118
  "aria-label": a.value.video,
5050
5119
  onError: r[0] ||= (e) => E.value = !0,
5051
5120
  onClick: r[1] ||= (t) => e.showControls === !1 ? void 0 : L()
5052
- }, null, 42, yo),
5053
- E.value ? (w(), s("div", bo, [
5121
+ }, null, 42, ko),
5122
+ E.value ? (w(), s("div", Ao, [
5054
5123
  f(Z, {
5055
5124
  name: "circle-exclamation",
5056
5125
  class: "text-3xl text-red-400",
5057
5126
  "aria-hidden": "true"
5058
5127
  }),
5059
- c("p", xo, k(a.value.error), 1),
5060
- c("p", So, k(e.src), 1)
5128
+ c("p", jo, k(a.value.error), 1),
5129
+ c("p", Mo, k(e.src), 1)
5061
5130
  ])) : o("", !0),
5062
5131
  f(n, {
5063
5132
  "enter-active-class": "transition-opacity duration-100 ease-out",
@@ -5065,7 +5134,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
5065
5134
  "enter-from-class": "opacity-0",
5066
5135
  "leave-to-class": "opacity-0"
5067
5136
  }, {
5068
- default: R(() => [e.showControls !== !1 && D.value && !E.value ? (w(), s("div", Co, [c("div", wo, [f(Z, {
5137
+ default: R(() => [e.showControls !== !1 && D.value && !E.value ? (w(), s("div", No, [c("div", Po, [f(Z, {
5069
5138
  name: D.value,
5070
5139
  class: "text-2xl"
5071
5140
  }, null, 8, ["name"])])])) : o("", !0)]),
@@ -5108,7 +5177,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
5108
5177
  class: "absolute top-1/2 h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full bg-sapphire-100 opacity-0 shadow transition-opacity group-hover/player:opacity-100",
5109
5178
  style: x({ left: `${ee.value}%` })
5110
5179
  }, null, 4)
5111
- ], 40, To), c("div", Eo, [
5180
+ ], 40, Fo), c("div", Io, [
5112
5181
  c("button", {
5113
5182
  type: "button",
5114
5183
  "aria-label": A(u) ? a.value.pause : a.value.play,
@@ -5118,8 +5187,8 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
5118
5187
  name: A(u) ? "pause" : "play",
5119
5188
  class: "text-sm",
5120
5189
  "aria-hidden": "true"
5121
- }, null, 8, ["name"])], 8, Do),
5122
- c("span", Oo, k(F(W.value)) + " / " + k(F(A(m))), 1),
5190
+ }, null, 8, ["name"])], 8, Lo),
5191
+ c("span", Ro, k(F(W.value)) + " / " + k(F(A(m))), 1),
5123
5192
  r[7] ||= c("div", { class: "flex-1" }, null, -1),
5124
5193
  c("button", {
5125
5194
  type: "button",
@@ -5130,7 +5199,7 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
5130
5199
  name: A(h) ? "volume-xmark" : "volume-high",
5131
5200
  class: "text-sm",
5132
5201
  "aria-hidden": "true"
5133
- }, null, 8, ["name"])], 8, ko),
5202
+ }, null, 8, ["name"])], 8, zo),
5134
5203
  c("button", {
5135
5204
  type: "button",
5136
5205
  "aria-label": A(_) ? a.value.exitFullscreen : a.value.enterFullscreen,
@@ -5140,10 +5209,10 @@ var Zi = { render: Xi }, Qi = { class: "flex items-center justify-end self-stret
5140
5209
  name: A(_) ? "compress" : "expand",
5141
5210
  class: "text-sm",
5142
5211
  "aria-hidden": "true"
5143
- }, null, 8, ["name"])], 8, Ao)
5212
+ }, null, 8, ["name"])], 8, Bo)
5144
5213
  ])], 4)) : o("", !0)
5145
5214
  ], 32));
5146
5215
  }
5147
5216
  });
5148
5217
  //#endregion
5149
- export { tt as NexxtAnimatedNumber, rt as NexxtAnnouncement, ct as NexxtAvatar, ut as NexxtButton, Ht as NexxtCalendar, Gt as NexxtCard, qt as NexxtCheckbox, Jt as NexxtChip, ln as NexxtColorPicker, jn as NexxtCombobox, An as NexxtComboboxPanel, Rn as NexxtContactInfoCard, Zn as NexxtCountrySelect, nr as NexxtCustomerJourneyTile, rr as NexxtDatePicker, dr as NexxtDoughnutChart, gr as NexxtDropdownButton, Q as NexxtFloatingPanel, yr as NexxtHeader, Z as NexxtIcon, xr as NexxtInfoBlock, _n as NexxtInputField, Ar as NexxtInputSelect, Pr as NexxtModal, Fr as NexxtPagination, zr as NexxtPresenceIndicator, Jr as NexxtProgressBar, ai as NexxtPropertyCard, ei as NexxtPropertyListing, mi as NexxtSelect, bi as NexxtSidebarMenuItem, Si as NexxtSkeleton, Ei as NexxtSkeletonPropertyCard, ki as NexxtSocialIcons, Ni as NexxtSocialMediaCustomTemplate, Hi as NexxtSocialMediaTemplate, na as NexxtSocialMediaType, ha as NexxtSource, st as NexxtSquircle, ga as NexxtStepperHeader, ya as NexxtSwitch, Ea as NexxtTabbedContent, za as NexxtTable, Sa as NexxtTabs, Ga as NexxtTimelineEvent, to as NexxtTimelinePhaseblock, co as NexxtToast, lo as NexxtToaster, vo as NexxtToggleGroup, Ka as NexxtTooltip, jo as NexxtVideoPlayer, fa as SOURCE_MAP };
5218
+ export { tt as NexxtAnimatedNumber, rt as NexxtAnnouncement, ct as NexxtAvatar, ut as NexxtButton, Ht as NexxtCalendar, Gt as NexxtCard, qt as NexxtCheckbox, Jt as NexxtChip, ln as NexxtColorPicker, jn as NexxtCombobox, An as NexxtComboboxPanel, Rn as NexxtContactInfoCard, Zn as NexxtCountrySelect, nr as NexxtCustomerJourneyTile, rr as NexxtDatePicker, dr as NexxtDoughnutChart, gr as NexxtDropdownButton, Q as NexxtFloatingPanel, yr as NexxtHeader, Z as NexxtIcon, xr as NexxtInfoBlock, _n as NexxtInputField, Ar as NexxtInputSelect, Pr as NexxtModal, Fr as NexxtPagination, zr as NexxtPresenceIndicator, Jr as NexxtProgressBar, ai as NexxtPropertyCard, ei as NexxtPropertyListing, mi as NexxtSelect, bi as NexxtSidebarMenuItem, Si as NexxtSkeleton, Ei as NexxtSkeletonPropertyCard, ki as NexxtSocialIcons, Ni as NexxtSocialMediaCustomTemplate, Hi as NexxtSocialMediaTemplate, na as NexxtSocialMediaType, ha as NexxtSource, st as NexxtSquircle, ga as NexxtStepperHeader, ya as NexxtSwitch, Ea as NexxtTabbedContent, za as NexxtTable, Sa as NexxtTabs, Xa as NexxtTemplateCard, no as NexxtTimelineEvent, fo as NexxtTimelinePhaseblock, yo as NexxtToast, bo as NexxtToaster, Oo as NexxtToggleGroup, Ba as NexxtTooltip, Vo as NexxtVideoPlayer, fa as SOURCE_MAP };
package/dist/nuxt.js CHANGED
@@ -47536,6 +47536,7 @@ var Yw, Xw, Zw, Qw, $w, eT = d((() => {
47536
47536
  NexxtTabbedContent: "components/TabbedContent/TabbedContent.vue",
47537
47537
  NexxtTable: "components/Table/Table.vue",
47538
47538
  NexxtTabs: "components/Tabs/Tabs.vue",
47539
+ NexxtTemplateCard: "components/TemplateCard/TemplateCard.vue",
47539
47540
  NexxtTimelineEvent: "components/TimelineEvent/TimelineEvent.vue",
47540
47541
  NexxtTimelinePhaseblock: "components/TimelinePhaseblock/TimelinePhaseblock.vue",
47541
47542
  NexxtToast: "components/Toast/Toast.vue",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nexxtmove/ui",
3
3
  "type": "module",
4
- "version": "1.1.2",
4
+ "version": "1.1.3",
5
5
  "exports": {
6
6
  ".": {
7
7
  "types": "./dist/index.d.ts",
@@ -0,0 +1,90 @@
1
+ <script lang="ts" setup>
2
+ import type { IconName } from '@awesome.me/kit-37b149f3ef/icons'
3
+ import { computed } from 'vue'
4
+ import NexxtIcon from '../Icon/Icon.vue'
5
+ import NexxtTooltip from '../Tooltip/Tooltip.vue'
6
+
7
+ export type NexxtTemplateCardContentFeature = 'references' | 'valuation' | 'reviews' | 'packages'
8
+
9
+ export interface NexxtTemplateCardProps {
10
+ image?: string
11
+ title: string
12
+ subtitle?: string
13
+ contentFeatures?: NexxtTemplateCardContentFeature[]
14
+ messages?: Partial<Record<NexxtTemplateCardContentFeature, string>>
15
+ }
16
+
17
+ type TemplateCardIcon = {
18
+ icon: IconName
19
+ textColor: string
20
+ backgroundColor: string
21
+ }
22
+
23
+ const ICON_MAP: Record<NexxtTemplateCardContentFeature, TemplateCardIcon> = {
24
+ references: {
25
+ icon: 'house-circle-check',
26
+ textColor: 'text-cornflower-blue-500',
27
+ backgroundColor: 'bg-cornflower-blue-50',
28
+ },
29
+ valuation: { icon: 'circle-euro', textColor: 'text-rose-500', backgroundColor: 'bg-rose-50' },
30
+ reviews: { icon: 'star', textColor: 'text-orange-500', backgroundColor: 'bg-orange-50' },
31
+ packages: { icon: 'piggy-bank', textColor: 'text-green-500', backgroundColor: 'bg-green-50' },
32
+ }
33
+
34
+ const DEFAULT_MESSAGES: Record<NexxtTemplateCardContentFeature, string> = {
35
+ references: 'Referenties',
36
+ valuation: 'Waardebepaling',
37
+ reviews: 'Reviews',
38
+ packages: 'Courtage',
39
+ }
40
+
41
+ defineOptions({ name: 'NexxtTemplateCard' })
42
+
43
+ const props = withDefaults(defineProps<NexxtTemplateCardProps>(), {
44
+ image: undefined,
45
+ subtitle: undefined,
46
+ contentFeatures: () => [],
47
+ messages: () => ({}),
48
+ })
49
+
50
+ const featureMessages = computed<Record<NexxtTemplateCardContentFeature, string>>(() => ({
51
+ ...DEFAULT_MESSAGES,
52
+ ...props.messages,
53
+ }))
54
+ </script>
55
+
56
+ <template>
57
+ <div class="w-full max-w-105 rounded-xl border border-gray-200">
58
+ <picture class="h-38 w-full">
59
+ <img
60
+ v-if="image"
61
+ :src="image"
62
+ :alt="title"
63
+ loading="lazy"
64
+ class="w-full rounded-t-xl object-cover"
65
+ />
66
+ <div v-else class="flex h-38 w-full items-center justify-center rounded-t-xl bg-gray-100">
67
+ <NexxtIcon name="image" class="text-4xl text-gray-400" />
68
+ </div>
69
+ </picture>
70
+ <div class="rounded-b-xl px-8 pt-3.5 pb-4">
71
+ <h3 class="truncate heading-4 text-gray-900">{{ title }}</h3>
72
+ <p v-if="subtitle" class="truncate body-normal text-gray-700">{{ subtitle }}</p>
73
+ <ul v-if="contentFeatures.length" class="mt-3 flex flex-wrap gap-2">
74
+ <li v-for="feature in contentFeatures" :key="feature">
75
+ <NexxtTooltip>
76
+ <div
77
+ :class="[ICON_MAP[feature].backgroundColor, ICON_MAP[feature].textColor]"
78
+ class="flex size-8 items-center justify-center rounded-full"
79
+ >
80
+ <NexxtIcon :name="ICON_MAP[feature].icon" />
81
+ </div>
82
+ <template #tooltip>
83
+ <span class="body-small text-gray-700">{{ featureMessages[feature] }}</span>
84
+ </template>
85
+ </NexxtTooltip>
86
+ </li>
87
+ </ul>
88
+ </div>
89
+ </div>
90
+ </template>
@@ -43,6 +43,7 @@
43
43
  "NexxtTabbedContent": "components/TabbedContent/TabbedContent.vue",
44
44
  "NexxtTable": "components/Table/Table.vue",
45
45
  "NexxtTabs": "components/Tabs/Tabs.vue",
46
+ "NexxtTemplateCard": "components/TemplateCard/TemplateCard.vue",
46
47
  "NexxtTimelineEvent": "components/TimelineEvent/TimelineEvent.vue",
47
48
  "NexxtTimelinePhaseblock": "components/TimelinePhaseblock/TimelinePhaseblock.vue",
48
49
  "NexxtToast": "components/Toast/Toast.vue",
package/src/index.ts CHANGED
@@ -46,6 +46,7 @@ export { default as NexxtSwitch } from './components/Switch/Switch.vue'
46
46
  export { default as NexxtTabbedContent } from './components/TabbedContent/TabbedContent.vue'
47
47
  export { default as NexxtTable } from './components/Table/Table.vue'
48
48
  export { default as NexxtTabs } from './components/Tabs/Tabs.vue'
49
+ export { default as NexxtTemplateCard } from './components/TemplateCard/TemplateCard.vue'
49
50
  export { default as NexxtTimelineEvent } from './components/TimelineEvent/TimelineEvent.vue'
50
51
  export { default as NexxtTimelinePhaseblock } from './components/TimelinePhaseblock/TimelinePhaseblock.vue'
51
52
  export { default as NexxtToast } from './components/Toast/Toast.vue'