@leaflink/stash 48.19.0 → 48.20.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 (38) hide show
  1. package/dist/ActionsDropdown.js +4 -4
  2. package/dist/Button.js +35 -20
  3. package/dist/Button.js.map +1 -1
  4. package/dist/Button.vue.d.ts +7 -0
  5. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js +17 -0
  6. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js.map +1 -0
  7. package/dist/ChevronToggle.js +2 -2
  8. package/dist/Copy.js +1 -1
  9. package/dist/DataViewFilters.js +1 -1
  10. package/dist/DataViewSortButton.js +1 -1
  11. package/dist/DataViewToolbar.js +3 -3
  12. package/dist/DatePicker.js +1 -1
  13. package/dist/Dialog.js +1 -1
  14. package/dist/FileUpload.js +1 -1
  15. package/dist/FilterDropdown.js +3 -3
  16. package/dist/Filters.js +4 -4
  17. package/dist/Filters.vue.d.ts +19 -0
  18. package/dist/HttpError.js +16 -14
  19. package/dist/HttpError.js.map +1 -1
  20. package/dist/ListView.js +3 -3
  21. package/dist/ListView.vue.d.ts +95 -0
  22. package/dist/Modal.js +1 -1
  23. package/dist/ObfuscateText.js +1 -1
  24. package/dist/SearchBar.js +1 -1
  25. package/dist/SearchBar.vue.d.ts +1 -1
  26. package/dist/Stepper.js +1 -1
  27. package/dist/Table.js +1 -1
  28. package/dist/Table.vue.d.ts +1 -1
  29. package/dist/TableCell.js +1 -1
  30. package/dist/TableHeaderCell.js +1 -1
  31. package/dist/TableHeaderRow.js +1 -1
  32. package/dist/TableRow.js +1 -1
  33. package/dist/TextEditor.js +3 -3
  34. package/dist/components.css +1 -1
  35. package/dist/index.js +2 -2
  36. package/package.json +1 -1
  37. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js +0 -17
  38. package/dist/Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js.map +0 -1
@@ -5,7 +5,10 @@ import g from "./Dropdown.js";
5
5
  import B from "./Icon.js";
6
6
  import { _ as D } from "./_plugin-vue_export-helper-dad06003.js";
7
7
  import "lodash-es/get";
8
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
8
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
9
+ import "lodash-es/uniqueId";
10
+ import "./index-9e1095ef.js";
11
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
9
12
  import "./constants.js";
10
13
  import "./clickoutside.js";
11
14
  import "./utils/calculateElementOverflow.js";
@@ -13,9 +16,6 @@ import "./utils/helpers.js";
13
16
  import "lodash-es/camelCase";
14
17
  import "lodash-es/isFinite";
15
18
  import "lodash-es/isPlainObject";
16
- import "lodash-es/uniqueId";
17
- import "./index-9e1095ef.js";
18
- import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
19
19
  const y = /* @__PURE__ */ c({
20
20
  name: "ll-actions-dropdown",
21
21
  __name: "ActionsDropdown",
package/dist/Button.js CHANGED
@@ -1,8 +1,12 @@
1
- import { defineComponent as f, useCssModule as i, computed as n, openBlock as d, createBlock as p, resolveDynamicComponent as m, mergeProps as b, unref as a, withCtx as y, renderSlot as _ } from "vue";
2
- import { s as h } from "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
3
- import { _ as v } from "./_plugin-vue_export-helper-dad06003.js";
4
- var s = /* @__PURE__ */ ((e) => (e.Icon = "icon", e.IconLabel = "iconLabel", e.Secondary = "secondary", e.Tertiary = "tertiary", e.Inline = "inline", e.Primary = "primary", e))(s || {});
5
- const $ = /* @__PURE__ */ f({
1
+ import { defineComponent as p, useCssModule as m, useAttrs as b, computed as n, openBlock as l, createBlock as i, resolveDynamicComponent as y, mergeProps as h, unref as r, withCtx as _, renderSlot as v } from "vue";
2
+ import g from "./Icon.js";
3
+ import { s as L } from "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
4
+ import { _ as $ } from "./_plugin-vue_export-helper-dad06003.js";
5
+ import "lodash-es/uniqueId";
6
+ import "./index-9e1095ef.js";
7
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
8
+ var u = /* @__PURE__ */ ((e) => (e.Icon = "icon", e.IconLabel = "iconLabel", e.Secondary = "secondary", e.Tertiary = "tertiary", e.Inline = "inline", e.Primary = "primary", e))(u || {});
9
+ const k = /* @__PURE__ */ p({
6
10
  name: "ll-button",
7
11
  __name: "Button",
8
12
  props: {
@@ -13,38 +17,49 @@ const $ = /* @__PURE__ */ f({
13
17
  inline: { type: Boolean, default: !1 },
14
18
  color: { default: void 0 },
15
19
  to: { default: void 0 },
16
- href: { default: "" }
20
+ href: { default: "" },
21
+ isLoading: { type: Boolean, default: !1 }
17
22
  },
18
23
  setup(e) {
19
- const t = e, r = i(), l = n(() => {
20
- for (const o of Object.values(s))
24
+ const t = e, a = m(), c = b(), s = n(() => {
25
+ for (const o of Object.values(u))
21
26
  if (t[o])
22
27
  return o;
23
28
  return "primary";
24
- }), u = n(() => t.to ? "router-link" : t.href ? "a" : "button"), c = n(() => t.to ? {
29
+ }), f = n(() => t.to ? "router-link" : t.href ? "a" : "button"), d = n(() => t.to ? {
25
30
  to: t.to
26
31
  } : t.href ? {
27
32
  href: t.href
28
33
  } : {});
29
- return (o, C) => (d(), p(m(u.value), b(c.value, {
34
+ return (o, C) => (l(), i(y(f.value), h({
35
+ disabled: t.isLoading || r(c).disabled
36
+ }, d.value, {
30
37
  class: ["stash-button", [
31
- a(r).button,
32
- `stash-button--${l.value}`,
33
- a(r)[`button--${l.value}`],
34
- { [`stash-button--${t.color}`]: t.color, [a(r)[`button--${t.color}`]]: t.color }
38
+ r(a).button,
39
+ `stash-button--${s.value}`,
40
+ r(a)[`button--${s.value}`],
41
+ {
42
+ [`stash-button--${t.color}`]: t.color,
43
+ [r(a)[`button--${t.color}`]]: t.color,
44
+ "stash-button--is-loading": t.isLoading
45
+ }
35
46
  ]],
36
47
  "data-test": "ll-button"
37
48
  }), {
38
- default: y(() => [
39
- _(o.$slots, "default")
49
+ default: _(() => [
50
+ t.isLoading ? (l(), i(g, {
51
+ key: 0,
52
+ name: "loading-empty",
53
+ class: "tw-animate-spin"
54
+ })) : v(o.$slots, "default", { key: 1 })
40
55
  ]),
41
56
  _: 3
42
- }, 16, ["class"]));
57
+ }, 16, ["disabled", "class"]));
43
58
  }
44
59
  }), B = {
45
- $style: h
46
- }, L = /* @__PURE__ */ v($, [["__cssModules", B]]);
60
+ $style: L
61
+ }, j = /* @__PURE__ */ $(k, [["__cssModules", B]]);
47
62
  export {
48
- L as default
63
+ j as default
49
64
  };
50
65
  //# sourceMappingURL=Button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sources":["../src/components/Button/Button.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, useCssModule } from 'vue';\n import { RouteLocationRaw } from 'vue-router';\n\n defineOptions({\n name: 'll-button',\n });\n\n export interface ButtonProps {\n /**\n * Renders the secondary variant\n */\n secondary?: boolean;\n\n /**\n * Renders the button as a container for an Icon\n */\n icon?: boolean;\n\n /**\n * Renders the button as a container for an IconLabel\n */\n iconLabel?: boolean;\n\n /**\n * Renders the tertiary variant\n */\n tertiary?: boolean;\n\n /**\n * Renders the component inline\n */\n inline?: boolean;\n\n /**\n * Renders a color variant\n */\n color?: 'blue' | 'red';\n\n /**\n * The `to` prop for vue-router's `RouterLink` component. If defined, the button will render as a `<router-link />`.\n */\n to?: RouteLocationRaw;\n\n /**\n * Button link. If defined, the button will render as an `<a />` tag.\n */\n href?: string;\n }\n\n const props = withDefaults(defineProps<ButtonProps>(), {\n secondary: false,\n icon: false,\n iconLabel: false,\n tertiary: false,\n inline: false,\n color: undefined,\n href: '',\n to: undefined,\n });\n const classes = useCssModule();\n\n enum ButtonTypes {\n Icon = 'icon',\n IconLabel = 'iconLabel',\n Secondary = 'secondary',\n Tertiary = 'tertiary',\n Inline = 'inline',\n Primary = 'primary',\n }\n\n type ButtonType = `${ButtonTypes}`;\n\n const buttonType = computed<ButtonType>(() => {\n for (const type of Object.values(ButtonTypes)) {\n if (props[type]) {\n return type;\n }\n }\n\n return ButtonTypes.Primary;\n });\n\n const is = computed(() => {\n if (props.to) {\n return 'router-link';\n }\n\n if (props.href) {\n return 'a';\n }\n\n return 'button';\n });\n\n const buttonAttrs = computed(() => {\n if (props.to) {\n return {\n to: props.to,\n };\n }\n\n if (props.href) {\n return {\n href: props.href,\n };\n }\n\n return {};\n });\n</script>\n\n<template>\n <component\n :is=\"is\"\n v-bind=\"buttonAttrs\"\n class=\"stash-button\"\n :class=\"[\n classes.button,\n `stash-button--${buttonType}`,\n classes[`button--${buttonType}`],\n { [`stash-button--${props.color}`]: props.color, [classes[`button--${props.color}`]]: props.color },\n ]\"\n data-test=\"ll-button\"\n >\n <!-- @slot default -->\n <slot></slot>\n </component>\n</template>\n\n<style module>\n .button {\n border-radius: theme('borderRadius.DEFAULT');\n border-width: 1px;\n display: inline-block;\n font-size: 0.875rem;\n font-weight: theme('fontWeight.semibold');\n line-height: 2.125rem;\n margin: 0;\n min-width: 144px;\n padding: 0 theme('spacing.3');\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n white-space: nowrap;\n }\n\n @media screen('lg') {\n /* `focus` and `hover` should be added only for large screens */\n .button:focus {\n box-shadow: 0 0 0 3px rgb(0 123 255 / 14%);\n outline: none;\n }\n\n .button:hover {\n text-decoration: none;\n }\n }\n\n .button[disabled] {\n cursor: default;\n pointer-events: none;\n }\n\n /* Solid treatment */\n .button--solid {\n background-color: var(--button-color);\n border-color: transparent;\n color: var(--text-color);\n }\n\n @media screen('lg') {\n /* `hover` should be added only for large screens */\n .button--solid:hover {\n background-color: var(--button-hover-color);\n }\n }\n\n .button--solid:active {\n background-color: var(--button-hover-color);\n }\n\n .button--solid[disabled] {\n --button-color: var(--color-ice-500) !important;\n }\n\n /* Ghost treatment */\n .button--ghost {\n background-color: rgb(0 0 0 / 0%);\n border-color: var(--button-color);\n color: var(--text-color);\n }\n\n @media screen('lg') {\n /* `hover` should be added only for large screens */\n .button--ghost:hover {\n background-color: var(--button-hover-color);\n }\n }\n\n .button--ghost:active {\n background-color: var(--button-hover-color);\n }\n\n .button--ghost[disabled] {\n --button-color: var(--color-ice-500) !important;\n --text-color: var(--color-ice-500) !important;\n }\n\n /* Types */\n .button--primary {\n composes: button--solid;\n --button-color: var(--color-blue-500);\n --button-hover-color: var(--color-blue-hover);\n --text-color: var(--color-white);\n }\n\n .button--secondary {\n composes: button--ghost;\n --button-color: var(--color-ice-500);\n --button-hover-color: var(--color-ice-700-hover);\n --text-color: var(--color-ice-700);\n }\n\n .button--tertiary {\n composes: button--ghost;\n --button-color: var(--color-white);\n --button-hover-color: var(--color-white-hover);\n --text-color: var(--color-white);\n }\n\n .button--icon,\n .button--iconLabel {\n /* https://developers.google.com/web/fundamentals/accessibility/accessible-styles */\n border: 0;\n border-radius: theme('borderRadius.DEFAULT');\n height: theme('spacing.12');\n min-width: theme('spacing.12');\n text-decoration: none;\n }\n\n .button--icon {\n padding: theme('spacing.3');\n width: theme('spacing.12');\n }\n\n .button--iconLabel {\n padding: 0;\n width: unset;\n }\n\n @media screen('lg') {\n /* `hover` should be added only for large screens */\n .button--icon:hover,\n .button--iconLabel:hover {\n text-decoration: none;\n }\n }\n\n .button--icon svg,\n .button--iconLabel svg {\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\n .button--icon[disabled] svg,\n .button--iconLabel[disabled],\n .button--iconLabel[disabled] svg {\n color: var(--color-ice-500);\n }\n\n .button--inline {\n border: 0;\n color: var(--color-blue-500);\n font-weight: theme('fontWeight.medium');\n line-height: 1.5;\n min-width: 0;\n padding: 0;\n }\n\n .button--inline:hover {\n text-decoration: underline;\n }\n\n .button--inline[disabled] {\n color: var(--color-ice-500);\n }\n\n /* Colors */\n .button--blue.button--primary,\n .button--blue.button--secondary {\n --button-color: var(--color-blue-500);\n }\n\n .button--blue.button--primary {\n --button-hover-color: var(--color-blue-hover);\n }\n\n .button--blue.button--secondary {\n --text-color: var(--color-blue-500);\n --button-hover-color: var(--button-secondary-blue-hover);\n }\n\n .button--red.button--primary,\n .button--red.button--secondary {\n --button-color: var(--color-red-500);\n }\n\n .button--red.button--primary {\n --button-hover-color: var(--color-red-hover);\n }\n\n .button--red.button--secondary {\n --text-color: var(--color-red-500);\n --button-hover-color: var(--button-secondary-red-hover);\n }\n\n /**\n * Button Grid\n * TODO: Move into separate component\n * https://leaflink.atlassian.net/browse/STASH-230\n * See `styles/elements/_buttons.scss` for button-grid (parent element) specific styles.\n */\n :global(.button-grid) > .button,\n :global(.header-button-grid) > .button {\n width: 50%;\n }\n\n :global(.button-grid) > .button + .button {\n margin-left: theme('spacing.6');\n }\n\n @media screen('md') {\n :global(.button-grid) > .button {\n width: auto;\n }\n }\n\n :global(.header-button-grid) > .button + .button {\n margin-left: theme('spacing.6');\n }\n\n @media screen('lg') {\n :global(.header-button-grid) > .button {\n width: auto;\n }\n }\n</style>\n"],"names":["ButtonTypes","props","__props","classes","useCssModule","buttonType","computed","type","is","buttonAttrs"],"mappings":";;;AA8DE,IAAKA,sBAAAA,OACHA,EAAA,OAAO,QACPA,EAAA,YAAY,aACZA,EAAA,YAAY,aACZA,EAAA,WAAW,YACXA,EAAA,SAAS,UACTA,EAAA,UAAU,WANPA,IAAAA,KAAA,CAAA,CAAA;;;;;;;;;;;;;;;AAZL,UAAMC,IAAQC,GAURC,IAAUC,KAaVC,IAAaC,EAAqB,MAAM;AAC5C,iBAAWC,KAAQ,OAAO,OAAOP,CAAW;AACtC,YAAAC,EAAMM,CAAI;AACL,iBAAAA;AAIJ,aAAA;AAAA,IAAA,CACR,GAEKC,IAAKF,EAAS,MACdL,EAAM,KACD,gBAGLA,EAAM,OACD,MAGF,QACR,GAEKQ,IAAcH,EAAS,MACvBL,EAAM,KACD;AAAA,MACL,IAAIA,EAAM;AAAA,IAAA,IAIVA,EAAM,OACD;AAAA,MACL,MAAMA,EAAM;AAAA,IAAA,IAIT,EACR;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Button.js","sources":["../src/components/Button/Button.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, useAttrs, useCssModule } from 'vue';\n import { RouteLocationRaw } from 'vue-router';\n\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({\n name: 'll-button',\n });\n\n export interface ButtonProps {\n /**\n * Renders the secondary variant\n */\n secondary?: boolean;\n\n /**\n * Renders the button as a container for an Icon\n */\n icon?: boolean;\n\n /**\n * Renders the button as a container for an IconLabel\n */\n iconLabel?: boolean;\n\n /**\n * Renders the tertiary variant\n */\n tertiary?: boolean;\n\n /**\n * Renders the component inline\n */\n inline?: boolean;\n\n /**\n * Renders a color variant\n */\n color?: 'blue' | 'red';\n\n /**\n * The `to` prop for vue-router's `RouterLink` component. If defined, the button will render as a `<router-link />`.\n */\n to?: RouteLocationRaw;\n\n /**\n * Button link. If defined, the button will render as an `<a />` tag.\n */\n href?: string;\n\n /**\n * Displays a spinning loading icon in place of the button text and disables the button\n */\n isLoading?: boolean;\n }\n\n const props = withDefaults(defineProps<ButtonProps>(), {\n secondary: false,\n icon: false,\n iconLabel: false,\n tertiary: false,\n inline: false,\n color: undefined,\n href: '',\n to: undefined,\n isLoading: false,\n });\n const classes = useCssModule();\n const attrs = useAttrs();\n\n enum ButtonTypes {\n Icon = 'icon',\n IconLabel = 'iconLabel',\n Secondary = 'secondary',\n Tertiary = 'tertiary',\n Inline = 'inline',\n Primary = 'primary',\n }\n\n type ButtonType = `${ButtonTypes}`;\n\n const buttonType = computed<ButtonType>(() => {\n for (const type of Object.values(ButtonTypes)) {\n if (props[type]) {\n return type;\n }\n }\n\n return ButtonTypes.Primary;\n });\n\n const is = computed(() => {\n if (props.to) {\n return 'router-link';\n }\n\n if (props.href) {\n return 'a';\n }\n\n return 'button';\n });\n\n const buttonAttrs = computed(() => {\n if (props.to) {\n return {\n to: props.to,\n };\n }\n\n if (props.href) {\n return {\n href: props.href,\n };\n }\n\n return {};\n });\n</script>\n\n<template>\n <component\n :is=\"is\"\n :disabled=\"props.isLoading || attrs.disabled\"\n v-bind=\"buttonAttrs\"\n class=\"stash-button\"\n :class=\"[\n classes.button,\n `stash-button--${buttonType}`,\n classes[`button--${buttonType}`],\n {\n [`stash-button--${props.color}`]: props.color,\n [classes[`button--${props.color}`]]: props.color,\n 'stash-button--is-loading': props.isLoading,\n },\n ]\"\n data-test=\"ll-button\"\n >\n <Icon v-if=\"props.isLoading\" name=\"loading-empty\" class=\"tw-animate-spin\" />\n <!-- @slot default -->\n <slot v-else></slot>\n </component>\n</template>\n\n<style module>\n .button {\n border-radius: theme('borderRadius.DEFAULT');\n border-width: 1px;\n display: inline-block;\n font-size: 0.875rem;\n font-weight: theme('fontWeight.semibold');\n line-height: 2.125rem;\n margin: 0;\n min-width: 144px;\n padding: 0 theme('spacing.3');\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n white-space: nowrap;\n }\n\n @media screen('lg') {\n /* `focus` and `hover` should be added only for large screens */\n .button:focus {\n box-shadow: 0 0 0 3px rgb(0 123 255 / 14%);\n outline: none;\n }\n\n .button:hover {\n text-decoration: none;\n }\n }\n\n .button[disabled] {\n cursor: default;\n pointer-events: none;\n }\n\n /* Solid treatment */\n .button--solid {\n background-color: var(--button-color);\n border-color: transparent;\n color: var(--text-color);\n }\n\n @media screen('lg') {\n /* `hover` should be added only for large screens */\n .button--solid:hover {\n background-color: var(--button-hover-color);\n }\n }\n\n .button--solid:active {\n background-color: var(--button-hover-color);\n }\n\n .button--solid[disabled]:not(:global(.stash-button--is-loading)) {\n --button-color: var(--color-ice-500) !important;\n }\n\n /* Ghost treatment */\n .button--ghost {\n background-color: rgb(0 0 0 / 0%);\n border-color: var(--button-color);\n color: var(--text-color);\n }\n\n @media screen('lg') {\n /* `hover` should be added only for large screens */\n .button--ghost:hover {\n background-color: var(--button-hover-color);\n }\n }\n\n .button--ghost:active {\n background-color: var(--button-hover-color);\n }\n\n .button--ghost[disabled]:not(:global(.stash-button--is-loading)) {\n --button-color: var(--color-ice-500) !important;\n --text-color: var(--color-ice-500) !important;\n }\n\n /* Types */\n .button--primary {\n composes: button--solid;\n --button-color: var(--color-blue-500);\n --button-hover-color: var(--color-blue-hover);\n --text-color: var(--color-white);\n }\n\n .button--secondary {\n composes: button--ghost;\n --button-color: var(--color-ice-500);\n --button-hover-color: var(--color-ice-700-hover);\n --text-color: var(--color-ice-700);\n }\n\n .button--tertiary {\n composes: button--ghost;\n --button-color: var(--color-white);\n --button-hover-color: var(--color-white-hover);\n --text-color: var(--color-white);\n }\n\n .button--icon,\n .button--iconLabel {\n /* https://developers.google.com/web/fundamentals/accessibility/accessible-styles */\n border: 0;\n border-radius: theme('borderRadius.DEFAULT');\n height: theme('spacing.12');\n min-width: theme('spacing.12');\n text-decoration: none;\n }\n\n .button--icon {\n padding: theme('spacing.3');\n width: theme('spacing.12');\n }\n\n .button--iconLabel {\n padding: 0;\n width: unset;\n }\n\n @media screen('lg') {\n /* `hover` should be added only for large screens */\n .button--icon:hover,\n .button--iconLabel:hover {\n text-decoration: none;\n }\n }\n\n .button--icon svg,\n .button--iconLabel svg {\n display: block;\n margin-left: auto;\n margin-right: auto;\n }\n\n .button--icon[disabled]:not(:global(.stash-button--is-loading)) svg,\n .button--iconLabel[disabled]:not(:global(.stash-button--is-loading)),\n .button--iconLabel[disabled]:not(:global(.stash-button--is-loading)) svg {\n color: var(--color-ice-500);\n }\n\n .button--inline {\n border: 0;\n color: var(--color-blue-500);\n font-weight: theme('fontWeight.medium');\n line-height: 1.5;\n min-width: 0;\n padding: 0;\n }\n\n .button--inline:hover {\n text-decoration: underline;\n }\n\n .button--inline[disabled] {\n color: var(--color-ice-500);\n }\n\n /* Colors */\n .button--blue.button--primary,\n .button--blue.button--secondary {\n --button-color: var(--color-blue-500);\n }\n\n .button--blue.button--primary {\n --button-hover-color: var(--color-blue-hover);\n }\n\n .button--blue.button--secondary {\n --text-color: var(--color-blue-500);\n --button-hover-color: var(--button-secondary-blue-hover);\n }\n\n .button--red.button--primary,\n .button--red.button--secondary {\n --button-color: var(--color-red-500);\n }\n\n .button--red.button--primary {\n --button-hover-color: var(--color-red-hover);\n }\n\n .button--red.button--secondary {\n --text-color: var(--color-red-500);\n --button-hover-color: var(--button-secondary-red-hover);\n }\n\n /**\n * Button Grid\n * TODO: Move into separate component\n * https://leaflink.atlassian.net/browse/STASH-230\n * See `styles/elements/_buttons.scss` for button-grid (parent element) specific styles.\n */\n :global(.button-grid) > .button,\n :global(.header-button-grid) > .button {\n width: 50%;\n }\n\n :global(.button-grid) > .button + .button {\n margin-left: theme('spacing.6');\n }\n\n @media screen('md') {\n :global(.button-grid) > .button {\n width: auto;\n }\n }\n\n :global(.header-button-grid) > .button + .button {\n margin-left: theme('spacing.6');\n }\n\n @media screen('lg') {\n :global(.header-button-grid) > .button {\n width: auto;\n }\n }\n</style>\n"],"names":["ButtonTypes","props","__props","classes","useCssModule","attrs","useAttrs","buttonType","computed","type","is","buttonAttrs"],"mappings":";;;;;;;AAuEE,IAAKA,sBAAAA,OACHA,EAAA,OAAO,QACPA,EAAA,YAAY,aACZA,EAAA,YAAY,aACZA,EAAA,WAAW,YACXA,EAAA,SAAS,UACTA,EAAA,UAAU,WANPA,IAAAA,KAAA,CAAA,CAAA;;;;;;;;;;;;;;;;AAdL,UAAMC,IAAQC,GAWRC,IAAUC,KACVC,IAAQC,KAaRC,IAAaC,EAAqB,MAAM;AAC5C,iBAAWC,KAAQ,OAAO,OAAOT,CAAW;AACtC,YAAAC,EAAMQ,CAAI;AACL,iBAAAA;AAIJ,aAAA;AAAA,IAAA,CACR,GAEKC,IAAKF,EAAS,MACdP,EAAM,KACD,gBAGLA,EAAM,OACD,MAGF,QACR,GAEKU,IAAcH,EAAS,MACvBP,EAAM,KACD;AAAA,MACL,IAAIA,EAAM;AAAA,IAAA,IAIVA,EAAM,OACD;AAAA,MACL,MAAMA,EAAM;AAAA,IAAA,IAIT,EACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -68,6 +68,10 @@ export declare interface ButtonProps {
68
68
  * Button link. If defined, the button will render as an `<a />` tag.
69
69
  */
70
70
  href?: string;
71
+ /**
72
+ * Displays a spinning loading icon in place of the button text and disables the button
73
+ */
74
+ isLoading?: boolean;
71
75
  }
72
76
 
73
77
  declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<ButtonProps>, {
@@ -79,6 +83,7 @@ declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes
79
83
  color: undefined;
80
84
  href: string;
81
85
  to: undefined;
86
+ isLoading: boolean;
82
87
  }>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<ButtonProps>, {
83
88
  secondary: boolean;
84
89
  icon: boolean;
@@ -88,6 +93,7 @@ declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes
88
93
  color: undefined;
89
94
  href: string;
90
95
  to: undefined;
96
+ isLoading: boolean;
91
97
  }>>> & Readonly<{}>, {
92
98
  to: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric;
93
99
  icon: boolean;
@@ -97,6 +103,7 @@ declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes
97
103
  tertiary: boolean;
98
104
  inline: boolean;
99
105
  color: "blue" | "red";
106
+ isLoading: boolean;
100
107
  }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
101
108
  default?(_: {}): any;
102
109
  }>;
@@ -0,0 +1,17 @@
1
+ const t = "_button_4w1qh_2", o = {
2
+ button: t,
3
+ "button--solid": "_button--solid_4w1qh_36",
4
+ "button--ghost": "_button--ghost_4w1qh_58",
5
+ "button--primary": "_button--primary_4w1qh_81 _button--solid_4w1qh_36",
6
+ "button--secondary": "_button--secondary_4w1qh_88 _button--ghost_4w1qh_58",
7
+ "button--tertiary": "_button--tertiary_4w1qh_95 _button--ghost_4w1qh_58",
8
+ "button--icon": "_button--icon_4w1qh_102",
9
+ "button--iconLabel": "_button--iconLabel_4w1qh_103",
10
+ "button--inline": "_button--inline_4w1qh_143",
11
+ "button--blue": "_button--blue_4w1qh_161",
12
+ "button--red": "_button--red_4w1qh_175"
13
+ };
14
+ export {
15
+ o as s
16
+ };
17
+ //# sourceMappingURL=Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -1,12 +1,12 @@
1
1
  import { _ as o } from "./ChevronToggle.vue_vue_type_script_setup_true_lang-fcdf0c19.js";
2
2
  import "vue";
3
3
  import "./Button.js";
4
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
5
- import "./_plugin-vue_export-helper-dad06003.js";
6
4
  import "./Icon.js";
7
5
  import "lodash-es/uniqueId";
8
6
  import "./index-9e1095ef.js";
9
7
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
8
+ import "./_plugin-vue_export-helper-dad06003.js";
9
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
10
10
  export {
11
11
  o as default
12
12
  };
package/dist/Copy.js CHANGED
@@ -12,7 +12,7 @@ import "lodash-es/camelCase";
12
12
  import "lodash-es/get";
13
13
  import "lodash-es/isFinite";
14
14
  import "lodash-es/isPlainObject";
15
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
15
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
16
16
  import "lodash-es/uniqueId";
17
17
  import "./index-9e1095ef.js";
18
18
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
@@ -15,7 +15,7 @@ import Y from "./SearchBar.js";
15
15
  import { D as ee } from "./DataViewFilters.keys-c80ffabe.js";
16
16
  import { i as L } from "./isDefined-2ce6cde4.js";
17
17
  import "lodash-es/get";
18
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
18
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
19
19
  import "./_plugin-vue_export-helper-dad06003.js";
20
20
  import "lodash-es/uniqueId";
21
21
  import "./index-9e1095ef.js";
@@ -9,7 +9,7 @@ import E from "./Dropdown.js";
9
9
  import I from "./IconLabel.js";
10
10
  import { _ as N } from "./_plugin-vue_export-helper-dad06003.js";
11
11
  import "lodash-es/get";
12
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
12
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
13
13
  import "lodash-es/uniqueId";
14
14
  import "./index-9e1095ef.js";
15
15
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
@@ -7,13 +7,13 @@ import C from "./Icon.js";
7
7
  import "./Paginate.vue_used_vue_type_style_index_0_lang.module-18343da7.js";
8
8
  import { D as B } from "./DataView.vue_used_vue_type_style_index_0_lang.module-5c180dba.js";
9
9
  import "lodash-es/get";
10
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
10
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
11
11
  import "./_plugin-vue_export-helper-dad06003.js";
12
- import "@leaflink/snitch";
13
12
  import "lodash-es/uniqueId";
14
- import "./Checkbox.vue_used_vue_type_style_index_0_lang.module-fa8d9c06.js";
15
13
  import "./index-9e1095ef.js";
16
14
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
15
+ import "@leaflink/snitch";
16
+ import "./Checkbox.vue_used_vue_type_style_index_0_lang.module-fa8d9c06.js";
17
17
  const q = { class: "tw-flex tw-place-items-center" }, G = { class: "tw-flex tw-items-center tw-gap-x-2 lg:tw-gap-x-6" }, H = {
18
18
  key: 0,
19
19
  class: "tw-flex tw-items-center"
@@ -15,7 +15,7 @@ import { _ as Bf } from "./_plugin-vue_export-helper-dad06003.js";
15
15
  import "lodash-es/get";
16
16
  import "./toTimeZone-e6e9ab75.js";
17
17
  import "./_commonjsHelpers-10dfc225.js";
18
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
18
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
19
19
  import "./index-9e1095ef.js";
20
20
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
21
21
  import "lodash-es/isNil";
package/dist/Dialog.js CHANGED
@@ -7,7 +7,7 @@ import D from "./Button.js";
7
7
  import R from "./Icon.js";
8
8
  import { _ as U } from "./_plugin-vue_export-helper-dad06003.js";
9
9
  import "lodash-es/get";
10
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
10
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
11
11
  import "./index-9e1095ef.js";
12
12
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
13
13
  const W = ["open", "aria-labelledby", "data-test"], X = ["id"], tt = {
@@ -6,7 +6,7 @@ import F from "./Button.js";
6
6
  import ie from "./Icon.js";
7
7
  import { _ as ae } from "./_plugin-vue_export-helper-dad06003.js";
8
8
  import "lodash-es/get";
9
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
9
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
10
10
  import "lodash-es/uniqueId";
11
11
  import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
12
12
  const M = {
@@ -11,8 +11,10 @@ import { D as G } from "./DataViewFilters.keys-c80ffabe.js";
11
11
  import $ from "./Dropdown.js";
12
12
  import q from "./FilterChip.js";
13
13
  import "lodash-es/get";
14
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
14
+ import "./Icon.js";
15
+ import "./index-9e1095ef.js";
15
16
  import "./_plugin-vue_export-helper-dad06003.js";
17
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
16
18
  import "./constants.js";
17
19
  import "./clickoutside.js";
18
20
  import "./utils/calculateElementOverflow.js";
@@ -20,8 +22,6 @@ import "./utils/helpers.js";
20
22
  import "lodash-es/camelCase";
21
23
  import "lodash-es/isFinite";
22
24
  import "lodash-es/isPlainObject";
23
- import "./Icon.js";
24
- import "./index-9e1095ef.js";
25
25
  import "./Chip.js";
26
26
  import "./utils/colorScheme.js";
27
27
  const H = { class: "tw-flex tw-h-full tw-flex-col tw-rounded" }, K = { class: "tw-relative tw-grow tw-overflow-hidden tw-rounded-t" }, M = {
package/dist/Filters.js CHANGED
@@ -23,8 +23,11 @@ import "./utils/helpers.js";
23
23
  import "lodash-es/camelCase";
24
24
  import "lodash-es/isFinite";
25
25
  import "lodash-es/isPlainObject";
26
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
26
+ import "./Icon.js";
27
27
  import "lodash-es/uniqueId";
28
+ import "./index-9e1095ef.js";
29
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
30
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
28
31
  import "./Checkbox.vue_used_vue_type_style_index_0_lang.module-fa8d9c06.js";
29
32
  import "./utils/createValidDate.js";
30
33
  import "./index-5e5945a9.js";
@@ -33,9 +36,6 @@ import "./utils/formatDateTime.js";
33
36
  import "./utils/normalizeDate.js";
34
37
  import "./toTimeZone-e6e9ab75.js";
35
38
  import "./_commonjsHelpers-10dfc225.js";
36
- import "./Icon.js";
37
- import "./index-9e1095ef.js";
38
- import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
39
39
  import "lodash-es/isNil";
40
40
  import "./utils/i18n.js";
41
41
  import "./Field.vue_vue_type_script_setup_true_lang-e1e4ff03.js";
@@ -117,6 +117,10 @@ declare const _default: DefineComponent<any, {
117
117
  type: PropType<"blue" | "red">;
118
118
  default: undefined;
119
119
  };
120
+ isLoading: {
121
+ type: PropType<boolean>;
122
+ default: boolean;
123
+ };
120
124
  }>> & Readonly<{}>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, VNodeProps & AllowedComponentProps & ComponentCustomProps & Readonly<ExtractPropTypes<{
121
125
  to: {
122
126
  type: PropType<string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric>;
@@ -150,6 +154,10 @@ declare const _default: DefineComponent<any, {
150
154
  type: PropType<"blue" | "red">;
151
155
  default: undefined;
152
156
  };
157
+ isLoading: {
158
+ type: PropType<boolean>;
159
+ default: boolean;
160
+ };
153
161
  }>> & Readonly<{}>, {
154
162
  to: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric;
155
163
  icon: boolean;
@@ -159,6 +167,7 @@ declare const _default: DefineComponent<any, {
159
167
  tertiary: boolean;
160
168
  inline: boolean;
161
169
  color: "blue" | "red";
170
+ isLoading: boolean;
162
171
  }, true, {}, {}, GlobalComponents, GlobalDirectives, string, {}, any, ComponentProvideOptions, {
163
172
  P: {};
164
173
  B: {};
@@ -199,6 +208,10 @@ declare const _default: DefineComponent<any, {
199
208
  type: PropType<"blue" | "red">;
200
209
  default: undefined;
201
210
  };
211
+ isLoading: {
212
+ type: PropType<boolean>;
213
+ default: boolean;
214
+ };
202
215
  }>> & Readonly<{}>, {}, {}, {}, {}, {
203
216
  to: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric;
204
217
  icon: boolean;
@@ -208,6 +221,7 @@ declare const _default: DefineComponent<any, {
208
221
  tertiary: boolean;
209
222
  inline: boolean;
210
223
  color: "blue" | "red";
224
+ isLoading: boolean;
211
225
  }>;
212
226
  __isFragment?: undefined;
213
227
  __isTeleport?: undefined;
@@ -245,6 +259,10 @@ declare const _default: DefineComponent<any, {
245
259
  type: PropType<"blue" | "red">;
246
260
  default: undefined;
247
261
  };
262
+ isLoading: {
263
+ type: PropType<boolean>;
264
+ default: boolean;
265
+ };
248
266
  }>> & Readonly<{}>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, {
249
267
  to: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric;
250
268
  icon: boolean;
@@ -254,6 +272,7 @@ declare const _default: DefineComponent<any, {
254
272
  tertiary: boolean;
255
273
  inline: boolean;
256
274
  color: "blue" | "red";
275
+ isLoading: boolean;
257
276
  }, {}, string, {}, GlobalComponents, GlobalDirectives, string, ComponentProvideOptions> & VNodeProps & AllowedComponentProps & ComponentCustomProps & (new () => {
258
277
  $slots: {
259
278
  default?(_: {}): any;
package/dist/HttpError.js CHANGED
@@ -1,13 +1,15 @@
1
- import { defineComponent as B, useCssModule as b, useSlots as z, computed as i, resolveComponent as S, openBlock as _, createElementBlock as m, normalizeClass as n, unref as s, createElementVNode as o, createVNode as p, withCtx as h, toDisplayString as a, createTextVNode as c, renderSlot as V, createCommentVNode as X } from "vue";
1
+ import { defineComponent as B, useCssModule as b, useSlots as z, computed as s, resolveComponent as S, openBlock as m, createElementBlock as _, normalizeClass as n, unref as i, createElementVNode as o, createVNode as p, withCtx as h, toDisplayString as a, createTextVNode as c, renderSlot as V, createCommentVNode as X } from "vue";
2
2
  import { t } from "./locale.js";
3
3
  import I from "./Button.js";
4
4
  import { _ as N, I as $, V as M } from "./Illustration.vue_vue_type_script_setup_true_lang-e26c3841.js";
5
5
  import { _ as T } from "./Logo.vue_vue_type_script_setup_true_lang-2a2597cb.js";
6
6
  import { _ as D } from "./_plugin-vue_export-helper-dad06003.js";
7
7
  import "lodash-es/get";
8
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
8
+ import "./Icon.js";
9
9
  import "lodash-es/uniqueId";
10
10
  import "./index-9e1095ef.js";
11
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
12
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
11
13
  import "@leaflink/snitch";
12
14
  const H = { class: "heading-jumbo tw-m-0 tw-mb-3 !tw-text-white" }, j = { class: "tw-mb-8 tw-text-white" }, F = { class: "tw-mb-4 tw-text-white" }, R = ["href"], Y = {
13
15
  key: 0,
@@ -56,15 +58,15 @@ const H = { class: "heading-jumbo tw-m-0 tw-mb-3 !tw-text-white" }, j = { class:
56
58
  title: t("ll.httpError.504.title"),
57
59
  description: t("ll.httpError.504.description")
58
60
  }
59
- }, r = f, l = b(), w = z(), E = i(() => r.errorCode.toString()), g = i(() => parseInt(E.value, 10)), u = i(() => d[g.value] || d[500]), v = i(() => r.title || u.value.title), y = i(() => r.description || u.value.description), k = i(() => !r.hideLogoutButton && r.onLogout), C = i(() => r.retryLink || window.location.href);
61
+ }, r = f, l = b(), w = z(), E = s(() => r.errorCode.toString()), g = s(() => parseInt(E.value, 10)), u = s(() => d[g.value] || d[500]), v = s(() => r.title || u.value.title), y = s(() => r.description || u.value.description), k = s(() => !r.hideLogoutButton && r.onLogout), C = s(() => r.retryLink || window.location.href);
60
62
  return (x, e) => {
61
63
  const L = S("router-link");
62
- return _(), m("div", {
63
- class: n(["stash-http-error tw-px-6 tw-py-12", s(l).root]),
64
+ return m(), _("div", {
65
+ class: n(["stash-http-error tw-px-6 tw-py-12", i(l).root]),
64
66
  "data-test": "stash-http-error"
65
67
  }, [
66
68
  o("div", {
67
- class: n(s(l).wrapper)
69
+ class: n(i(l).wrapper)
68
70
  }, [
69
71
  p(L, {
70
72
  to: "/",
@@ -79,10 +81,10 @@ const H = { class: "heading-jumbo tw-m-0 tw-mb-3 !tw-text-white" }, j = { class:
79
81
  _: 1
80
82
  }),
81
83
  o("div", {
82
- class: n(["tw-mb-8 tw-gap-6", s(l).content])
84
+ class: n(["tw-mb-8 tw-gap-6", i(l).content])
83
85
  }, [
84
86
  o("div", {
85
- class: n(["tw-order-2 lg:tw-order-1", s(l).content__text])
87
+ class: n(["tw-order-2 lg:tw-order-1", i(l).content__text])
86
88
  }, [
87
89
  o("h1", H, a(v.value), 1),
88
90
  o("h2", j, "Error Code: " + a(r.errorCode), 1),
@@ -101,16 +103,16 @@ const H = { class: "heading-jumbo tw-m-0 tw-mb-3 !tw-text-white" }, j = { class:
101
103
  ])
102
104
  ], 2),
103
105
  o("div", {
104
- class: n(["tw-order-1 lg:tw-order-2", s(l).illustration])
106
+ class: n(["tw-order-1 lg:tw-order-2", i(l).illustration])
105
107
  }, [
106
108
  p(N, {
107
109
  size: 300,
108
- type: s($).Vignette,
109
- name: s(M).SearchStorefront
110
+ type: i($).Vignette,
111
+ name: i(M).SearchStorefront
110
112
  }, null, 8, ["type", "name"])
111
113
  ], 2)
112
114
  ], 2),
113
- s(w).actions || k.value ? (_(), m("div", Y, [
115
+ i(w).actions || k.value ? (m(), _("div", Y, [
114
116
  V(x.$slots, "actions", {}, () => [
115
117
  p(I, {
116
118
  tertiary: "",
@@ -135,8 +137,8 @@ const H = { class: "heading-jumbo tw-m-0 tw-mb-3 !tw-text-white" }, j = { class:
135
137
  content__text: O
136
138
  }, Q = {
137
139
  $style: P
138
- }, pt = /* @__PURE__ */ D(q, [["__cssModules", Q]]);
140
+ }, at = /* @__PURE__ */ D(q, [["__cssModules", Q]]);
139
141
  export {
140
- pt as default
142
+ at as default
141
143
  };
142
144
  //# sourceMappingURL=HttpError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HttpError.js","sources":["../src/components/HttpError/HttpError.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, useCssModule, useSlots } from 'vue';\n\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import { IllustrationType, VignetteName } from '../Illustration/Illustration.models';\n import Illustration from '../Illustration/Illustration.vue';\n import Logo from '../Logo/Logo.vue';\n\n type ErrorCodes = 401 | 403 | 404 | 405 | 500 | 502 | 503 | 504;\n const errors: Record<ErrorCodes, { title: string; description: string }> = {\n 401: {\n title: t('ll.httpError.401.title'),\n description: t('ll.httpError.401.description'),\n },\n 403: {\n title: t('ll.httpError.403.title'),\n description: t('ll.httpError.403.description'),\n },\n 404: {\n title: t('ll.httpError.404.title'),\n description: t('ll.httpError.404.description'),\n },\n 405: {\n title: t('ll.httpError.405.title'),\n description: t('ll.httpError.405.description'),\n },\n 500: {\n title: t('ll.httpError.50X.title'),\n description: t('ll.httpError.50X.description'),\n },\n 502: {\n title: t('ll.httpError.50X.title'),\n description: t('ll.httpError.50X.description'),\n },\n 503: {\n title: t('ll.httpError.50X.title'),\n description: t('ll.httpError.50X.description'),\n },\n 504: {\n title: t('ll.httpError.504.title'),\n description: t('ll.httpError.504.description'),\n },\n };\n\n export interface HttpErrorProps {\n /**\n * A description of what possibly happened.\n */\n description?: string;\n\n /**\n * The error code.\n */\n errorCode: keyof typeof errors | `${keyof typeof errors}`;\n\n /**\n * By default, the logout button is visible unless content is provided to the `actions` slot or\n * this prop is `true`.\n */\n hideLogoutButton?: boolean;\n\n /**\n * A callback that will be called when the user clicks the logout button. If not provided,\n * a `logout` event will be emitted.\n */\n onLogout?: () => void;\n\n /**\n * A link to redirect the user to see if a hard refresh fixes the issue.\n */\n retryLink?: string;\n\n /**\n * The error title.\n */\n title?: string;\n }\n\n const props = withDefaults(defineProps<HttpErrorProps>(), {\n description: '',\n errorCode: '404',\n onLogout: undefined,\n hideLogoutButton: false,\n retryLink: undefined,\n title: '',\n });\n\n const classes = useCssModule();\n const slots = useSlots();\n\n const errorCodeStr = computed(() => props.errorCode.toString());\n const errorCodeInt = computed(() => parseInt(errorCodeStr.value, 10));\n const defaultInfoByErrorCode = computed(() => errors[errorCodeInt.value] || errors['500']);\n const errorTitle = computed(() => props.title || defaultInfoByErrorCode.value.title);\n const errorDescription = computed(() => props.description || defaultInfoByErrorCode.value.description);\n\n const showLogoutButton = computed(() => !props.hideLogoutButton && props.onLogout);\n const computedRetryLink = computed(() => props.retryLink || window.location.href);\n</script>\n\n<template>\n <div class=\"stash-http-error tw-px-6 tw-py-12\" :class=\"classes.root\" data-test=\"stash-http-error\">\n <div :class=\"classes.wrapper\">\n <router-link to=\"/\" class=\"tw-mb-8 tw-block\">\n <Logo color=\"white\" width=\"192\" />\n </router-link>\n\n <div class=\"tw-mb-8 tw-gap-6\" :class=\"classes.content\">\n <div class=\"tw-order-2 lg:tw-order-1\" :class=\"classes.content__text\">\n <h1 class=\"heading-jumbo tw-m-0 tw-mb-3 !tw-text-white\">\n {{ errorTitle }}\n </h1>\n <h2 class=\"tw-mb-8 tw-text-white\">Error Code: {{ props.errorCode }}</h2>\n <p class=\"tw-mb-4 tw-text-white\">\n {{ errorDescription }} You can <a :href=\"computedRetryLink\" class=\"link\">try again</a> or reach out to\n <a href=\"mailto:support@leaflink.com\" class=\"link\">support@leaflink.com</a> for assistance.\n </p>\n </div>\n <div class=\"tw-order-1 lg:tw-order-2\" :class=\"classes.illustration\">\n <Illustration :size=\"300\" :type=\"IllustrationType.Vignette\" :name=\"VignetteName.SearchStorefront\" />\n </div>\n </div>\n\n <div v-if=\"slots.actions || showLogoutButton\" class=\"tw-flex tw-items-start tw-gap-6\">\n <slot name=\"actions\">\n <Button tertiary @click=\"props.onLogout\">Logout</Button>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n .root {\n background-color: var(--color-purple-500);\n display: flex;\n height: 100%;\n justify-content: center;\n align-items: center;\n max-width: 100vw;\n }\n\n .wrapper {\n max-width: 100%;\n width: 56rem;\n }\n\n .content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .illustration {\n /* width and height similar to figma. */\n width: 300px;\n height: 193px;\n }\n\n @media screen and (width < 1024px) {\n .content {\n flex-wrap: wrap;\n gap: 0;\n }\n\n .illustration {\n margin-bottom: 30px;\n }\n }\n\n @media screen and (width >= 1024px) {\n .content__text {\n max-width: 50vw;\n }\n }\n\n .illustration svg {\n /*\n * We cannot use the same sizes from figma because the illustration would be smaller\n * and it would break alignment. The specified height in figma is 193px but the\n * illustration is 300px, so, (300 - 193) / 2 ~= 53, which keeps it aligned.\n */\n margin-top: -53px;\n }\n</style>\n"],"names":["errors","props","__props","classes","useCssModule","slots","useSlots","errorCodeStr","computed","errorCodeInt","defaultInfoByErrorCode","errorTitle","errorDescription","showLogoutButton","computedRetryLink"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAUE,UAAMA,IAAqE;AAAA,MACzE,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,IAAA,GAqCIC,IAAQC,GASRC,IAAUC,KACVC,IAAQC,KAERC,IAAeC,EAAS,MAAMP,EAAM,UAAU,UAAU,GACxDQ,IAAeD,EAAS,MAAM,SAASD,EAAa,OAAO,EAAE,CAAC,GAC9DG,IAAyBF,EAAS,MAAMR,EAAOS,EAAa,KAAK,KAAKT,EAAO,GAAK,CAAC,GACnFW,IAAaH,EAAS,MAAMP,EAAM,SAASS,EAAuB,MAAM,KAAK,GAC7EE,IAAmBJ,EAAS,MAAMP,EAAM,eAAeS,EAAuB,MAAM,WAAW,GAE/FG,IAAmBL,EAAS,MAAM,CAACP,EAAM,oBAAoBA,EAAM,QAAQ,GAC3Ea,IAAoBN,EAAS,MAAMP,EAAM,aAAa,OAAO,SAAS,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"HttpError.js","sources":["../src/components/HttpError/HttpError.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, useCssModule, useSlots } from 'vue';\n\n import { t } from '../../locale';\n import Button from '../Button/Button.vue';\n import { IllustrationType, VignetteName } from '../Illustration/Illustration.models';\n import Illustration from '../Illustration/Illustration.vue';\n import Logo from '../Logo/Logo.vue';\n\n type ErrorCodes = 401 | 403 | 404 | 405 | 500 | 502 | 503 | 504;\n const errors: Record<ErrorCodes, { title: string; description: string }> = {\n 401: {\n title: t('ll.httpError.401.title'),\n description: t('ll.httpError.401.description'),\n },\n 403: {\n title: t('ll.httpError.403.title'),\n description: t('ll.httpError.403.description'),\n },\n 404: {\n title: t('ll.httpError.404.title'),\n description: t('ll.httpError.404.description'),\n },\n 405: {\n title: t('ll.httpError.405.title'),\n description: t('ll.httpError.405.description'),\n },\n 500: {\n title: t('ll.httpError.50X.title'),\n description: t('ll.httpError.50X.description'),\n },\n 502: {\n title: t('ll.httpError.50X.title'),\n description: t('ll.httpError.50X.description'),\n },\n 503: {\n title: t('ll.httpError.50X.title'),\n description: t('ll.httpError.50X.description'),\n },\n 504: {\n title: t('ll.httpError.504.title'),\n description: t('ll.httpError.504.description'),\n },\n };\n\n export interface HttpErrorProps {\n /**\n * A description of what possibly happened.\n */\n description?: string;\n\n /**\n * The error code.\n */\n errorCode: keyof typeof errors | `${keyof typeof errors}`;\n\n /**\n * By default, the logout button is visible unless content is provided to the `actions` slot or\n * this prop is `true`.\n */\n hideLogoutButton?: boolean;\n\n /**\n * A callback that will be called when the user clicks the logout button. If not provided,\n * a `logout` event will be emitted.\n */\n onLogout?: () => void;\n\n /**\n * A link to redirect the user to see if a hard refresh fixes the issue.\n */\n retryLink?: string;\n\n /**\n * The error title.\n */\n title?: string;\n }\n\n const props = withDefaults(defineProps<HttpErrorProps>(), {\n description: '',\n errorCode: '404',\n onLogout: undefined,\n hideLogoutButton: false,\n retryLink: undefined,\n title: '',\n });\n\n const classes = useCssModule();\n const slots = useSlots();\n\n const errorCodeStr = computed(() => props.errorCode.toString());\n const errorCodeInt = computed(() => parseInt(errorCodeStr.value, 10));\n const defaultInfoByErrorCode = computed(() => errors[errorCodeInt.value] || errors['500']);\n const errorTitle = computed(() => props.title || defaultInfoByErrorCode.value.title);\n const errorDescription = computed(() => props.description || defaultInfoByErrorCode.value.description);\n\n const showLogoutButton = computed(() => !props.hideLogoutButton && props.onLogout);\n const computedRetryLink = computed(() => props.retryLink || window.location.href);\n</script>\n\n<template>\n <div class=\"stash-http-error tw-px-6 tw-py-12\" :class=\"classes.root\" data-test=\"stash-http-error\">\n <div :class=\"classes.wrapper\">\n <router-link to=\"/\" class=\"tw-mb-8 tw-block\">\n <Logo color=\"white\" width=\"192\" />\n </router-link>\n\n <div class=\"tw-mb-8 tw-gap-6\" :class=\"classes.content\">\n <div class=\"tw-order-2 lg:tw-order-1\" :class=\"classes.content__text\">\n <h1 class=\"heading-jumbo tw-m-0 tw-mb-3 !tw-text-white\">\n {{ errorTitle }}\n </h1>\n <h2 class=\"tw-mb-8 tw-text-white\">Error Code: {{ props.errorCode }}</h2>\n <p class=\"tw-mb-4 tw-text-white\">\n {{ errorDescription }} You can <a :href=\"computedRetryLink\" class=\"link\">try again</a> or reach out to\n <a href=\"mailto:support@leaflink.com\" class=\"link\">support@leaflink.com</a> for assistance.\n </p>\n </div>\n <div class=\"tw-order-1 lg:tw-order-2\" :class=\"classes.illustration\">\n <Illustration :size=\"300\" :type=\"IllustrationType.Vignette\" :name=\"VignetteName.SearchStorefront\" />\n </div>\n </div>\n\n <div v-if=\"slots.actions || showLogoutButton\" class=\"tw-flex tw-items-start tw-gap-6\">\n <slot name=\"actions\">\n <Button tertiary @click=\"props.onLogout\">Logout</Button>\n </slot>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n .root {\n background-color: var(--color-purple-500);\n display: flex;\n height: 100%;\n justify-content: center;\n align-items: center;\n max-width: 100vw;\n }\n\n .wrapper {\n max-width: 100%;\n width: 56rem;\n }\n\n .content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .illustration {\n /* width and height similar to figma. */\n width: 300px;\n height: 193px;\n }\n\n @media screen and (width < 1024px) {\n .content {\n flex-wrap: wrap;\n gap: 0;\n }\n\n .illustration {\n margin-bottom: 30px;\n }\n }\n\n @media screen and (width >= 1024px) {\n .content__text {\n max-width: 50vw;\n }\n }\n\n .illustration svg {\n /*\n * We cannot use the same sizes from figma because the illustration would be smaller\n * and it would break alignment. The specified height in figma is 193px but the\n * illustration is 300px, so, (300 - 193) / 2 ~= 53, which keeps it aligned.\n */\n margin-top: -53px;\n }\n</style>\n"],"names":["errors","props","__props","classes","useCssModule","slots","useSlots","errorCodeStr","computed","errorCodeInt","defaultInfoByErrorCode","errorTitle","errorDescription","showLogoutButton","computedRetryLink"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAUE,UAAMA,IAAqE;AAAA,MACzE,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,MACA,KAAK;AAAA,QACH,OAAO,EAAE,wBAAwB;AAAA,QACjC,aAAa,EAAE,8BAA8B;AAAA,MAC/C;AAAA,IAAA,GAqCIC,IAAQC,GASRC,IAAUC,KACVC,IAAQC,KAERC,IAAeC,EAAS,MAAMP,EAAM,UAAU,UAAU,GACxDQ,IAAeD,EAAS,MAAM,SAASD,EAAa,OAAO,EAAE,CAAC,GAC9DG,IAAyBF,EAAS,MAAMR,EAAOS,EAAa,KAAK,KAAKT,EAAO,GAAK,CAAC,GACnFW,IAAaH,EAAS,MAAMP,EAAM,SAASS,EAAuB,MAAM,KAAK,GAC7EE,IAAmBJ,EAAS,MAAMP,EAAM,eAAeS,EAAuB,MAAM,WAAW,GAE/FG,IAAmBL,EAAS,MAAM,CAACP,EAAM,oBAAoBA,EAAM,QAAQ,GAC3Ea,IAAoBN,EAAS,MAAMP,EAAM,aAAa,OAAO,SAAS,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/ListView.js CHANGED
@@ -26,13 +26,13 @@ import "lodash-es/camelCase";
26
26
  import "lodash-es/isFinite";
27
27
  import "./utils/storage.js";
28
28
  import "@leaflink/snitch";
29
- import "./Button.vue_used_vue_type_style_index_0_lang.module-a9290468.js";
29
+ import "./Button.vue_used_vue_type_style_index_0_lang.module-4dabc2a9.js";
30
30
  import "lodash-es/uniqueId";
31
+ import "./index-9e1095ef.js";
32
+ import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
31
33
  import "./Checkbox.vue_used_vue_type_style_index_0_lang.module-fa8d9c06.js";
32
34
  import "./clickoutside.js";
33
35
  import "./utils/calculateElementOverflow.js";
34
- import "./index-9e1095ef.js";
35
- import "./Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js";
36
36
  import "lodash-es/merge";
37
37
  import "./useValidation.js";
38
38
  import "lodash-es/debounce";