@knime/product-features 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @knime/product-features
2
2
 
3
+ ## 2.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [f008d53]
8
+ - Updated dependencies [0cc879e]
9
+ - @knime/kds-components@5.0.0
10
+ - @knime/kds-styles@5.0.0
11
+
12
+ ## 2.1.1
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [e2b5bfe]
17
+ - Updated dependencies [bd4a10e]
18
+ - @knime/kds-components@4.0.0
19
+ - @knime/kds-styles@4.0.0
20
+
3
21
  ## 2.1.0
4
22
 
5
23
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"CurrentState.vue.d.ts","sourceRoot":"","sources":["../../../../src/versions/VersionHistory/CurrentState.vue"],"names":[],"mappings":"AA2GA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErE,KAAK,KAAK,GAAG;IACX,gBAAgB,EAAE,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AA0KF,QAAA,MAAM,YAAY;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"CurrentState.vue.d.ts","sourceRoot":"","sources":["../../../../src/versions/VersionHistory/CurrentState.vue"],"names":[],"mappings":"AA0GA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErE,KAAK,KAAK,GAAG;IACX,gBAAgB,EAAE,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;IAC1D,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AA0KF,QAAA,MAAM,YAAY;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"VersionItem.vue.d.ts","sourceRoot":"","sources":["../../../../src/versions/VersionHistory/VersionItem.vue"],"names":[],"mappings":"AAmIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAExE,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AA0LF,QAAA,MAAM,YAAY;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"VersionItem.vue.d.ts","sourceRoot":"","sources":["../../../../src/versions/VersionHistory/VersionItem.vue"],"names":[],"mappings":"AAkIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAExE,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,gBAAgB,GAAG,UAAU,GAAG,UAAU,CAAC;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AA0LF,QAAA,MAAM,YAAY;;;;;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"VersionLimitInfo.vue.d.ts","sourceRoot":"","sources":["../../../../src/versions/VersionHistory/VersionLimitInfo.vue"],"names":[],"mappings":"AA4DA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAgHF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"VersionLimitInfo.vue.d.ts","sourceRoot":"","sources":["../../../../src/versions/VersionHistory/VersionLimitInfo.vue"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,WAAW,GAAG;IACjB,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AA8GF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
package/dist/versions.css CHANGED
@@ -57,11 +57,10 @@
57
57
  visibility: hidden;
58
58
  }
59
59
 
60
- .content-wrapper[data-v-a6a58c85] {
60
+ .content-wrapper[data-v-10912261] {
61
61
  display: flex;
62
62
  flex-direction: column;
63
63
  gap: var(--kds-spacing-container-0-37x);
64
- padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);
65
64
  }
66
65
 
67
66
  .label-popover-container[data-v-00d7133a] {
@@ -81,23 +80,18 @@
81
80
  font: var(--kds-font-base-body-small-strong);
82
81
  }
83
82
 
84
- .content-wrapper[data-v-9cf889d1] {
83
+ .content-wrapper[data-v-67c64c70] {
85
84
  display: flex;
86
85
  flex-direction: column;
87
86
  gap: var(--kds-spacing-container-0-37x);
88
- padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);
89
87
  }
90
- .labels-wrapper[data-v-9cf889d1] {
88
+ .labels-wrapper[data-v-67c64c70] {
91
89
  display: flex;
92
90
  flex-wrap: wrap;
93
91
  gap: var(--kds-spacing-container-0-25x) var(--kds-spacing-container-0-5x);
94
92
  align-items: center;
95
93
  }
96
94
 
97
- .content-wrapper[data-v-0a98c542] {
98
- padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);
99
- }
100
-
101
95
  .version-history-wrapper[data-v-e775efff] {
102
96
  display: flex;
103
97
  flex-direction: column;
package/dist/versions.js CHANGED
@@ -157,7 +157,7 @@ var CurrentState_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
157
157
  }, 8, ["is-selected", "is-last-item"]);
158
158
  };
159
159
  }
160
- }), [["__scopeId", "data-v-a6a58c85"]]);
160
+ }), [["__scopeId", "data-v-10912261"]]);
161
161
  //#endregion
162
162
  //#region src/versions/VersionHistory/VersionLabel.vue?vue&type=script&setup=true&lang.ts
163
163
  var _hoisted_1$4 = { class: "label-popover-container" };
@@ -310,13 +310,13 @@ var VersionItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
310
310
  ]);
311
311
  };
312
312
  }
313
- }), [["__scopeId", "data-v-9cf889d1"]]);
313
+ }), [["__scopeId", "data-v-67c64c70"]]);
314
314
  //#endregion
315
315
  //#region src/versions/VersionHistory/VersionLimitInfo.vue?vue&type=script&setup=true&lang.ts
316
316
  var _hoisted_1$2 = { class: "content-wrapper" };
317
317
  //#endregion
318
318
  //#region src/versions/VersionHistory/VersionLimitInfo.vue
319
- var VersionLimitInfo_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
319
+ var VersionLimitInfo_default = /* @__PURE__ */ defineComponent({
320
320
  __name: "VersionLimitInfo",
321
321
  props: {
322
322
  versionLimit: {},
@@ -356,7 +356,7 @@ var VersionLimitInfo_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/
356
356
  });
357
357
  };
358
358
  }
359
- }), [["__scopeId", "data-v-0a98c542"]]);
359
+ });
360
360
  //#endregion
361
361
  //#region src/versions/VersionHistory/constants.ts
362
362
  var VERSION_DEFAULT_LIMIT = 10;
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","names":["$emit","$emit"],"sources":["../src/versions/VersionHistory/HistoryEvent.vue","../src/versions/VersionHistory/HistoryEvent.vue","../src/versions/VersionHistory/HistoryEventAuthor.vue","../src/versions/VersionHistory/HistoryEventAuthor.vue","../src/versions/VersionHistory/HistoryEventFooter.vue","../src/versions/VersionHistory/HistoryEventFooter.vue","../src/versions/VersionHistory/CurrentState.vue","../src/versions/VersionHistory/CurrentState.vue","../src/versions/VersionHistory/VersionLabel.vue","../src/versions/VersionHistory/VersionLabel.vue","../src/versions/VersionHistory/VersionItem.vue","../src/versions/VersionHistory/VersionItem.vue","../src/versions/VersionHistory/VersionLimitInfo.vue","../src/versions/VersionHistory/VersionLimitInfo.vue","../src/versions/VersionHistory/constants.ts","../src/versions/VersionHistory/VersionHistory.vue","../src/versions/VersionHistory/VersionHistory.vue","../src/versions/CreateVersionForm/CreateVersionForm.vue","../src/versions/CreateVersionForm/CreateVersionForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { KdsIcon } from \"@knime/kds-components\";\n\ntype Props = {\n isSelected: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\ndefineProps<Props>();\n</script>\n\n<template>\n <div class=\"history-event-wrapper\">\n <div class=\"history-event-decorator\">\n <div v-if=\"!isFirstItem\" class=\"history-event-line-top\" />\n <KdsIcon\n class=\"history-event-icon\"\n :name=\"isSelected ? 'circle-success' : 'circle-unchecked'\"\n size=\"small\"\n />\n <div v-if=\"!isLastItem\" class=\"history-event-line-bottom\" />\n </div>\n\n <div class=\"card-wrapper\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.history-event-wrapper {\n display: flex;\n}\n\n.history-event-decorator {\n position: relative;\n display: flex;\n flex-shrink: 0;\n justify-content: center;\n width: var(--kds-dimension-component-width-0-75x);\n margin: 0 var(--kds-spacing-container-0-75x);\n}\n\n.history-event-line-top {\n position: absolute;\n top: calc(var(--kds-spacing-container-0-37x) * -1);\n height: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x)\n );\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-line-bottom {\n position: absolute;\n top: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x) +\n var(--kds-spacing-container-0-37x)\n );\n bottom: calc(var(--kds-spacing-container-0-37x) * -1);\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-icon {\n position: absolute;\n top: var(--kds-spacing-container-1x);\n}\n\n.card-wrapper {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n min-width: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { KdsIcon } from \"@knime/kds-components\";\n\ntype Props = {\n isSelected: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\ndefineProps<Props>();\n</script>\n\n<template>\n <div class=\"history-event-wrapper\">\n <div class=\"history-event-decorator\">\n <div v-if=\"!isFirstItem\" class=\"history-event-line-top\" />\n <KdsIcon\n class=\"history-event-icon\"\n :name=\"isSelected ? 'circle-success' : 'circle-unchecked'\"\n size=\"small\"\n />\n <div v-if=\"!isLastItem\" class=\"history-event-line-bottom\" />\n </div>\n\n <div class=\"card-wrapper\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.history-event-wrapper {\n display: flex;\n}\n\n.history-event-decorator {\n position: relative;\n display: flex;\n flex-shrink: 0;\n justify-content: center;\n width: var(--kds-dimension-component-width-0-75x);\n margin: 0 var(--kds-spacing-container-0-75x);\n}\n\n.history-event-line-top {\n position: absolute;\n top: calc(var(--kds-spacing-container-0-37x) * -1);\n height: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x)\n );\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-line-bottom {\n position: absolute;\n top: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x) +\n var(--kds-spacing-container-0-37x)\n );\n bottom: calc(var(--kds-spacing-container-0-37x) * -1);\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-icon {\n position: absolute;\n top: var(--kds-spacing-container-1x);\n}\n\n.card-wrapper {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n min-width: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { KdsAvatar } from \"@knime/kds-components\";\n\nimport type { WithAvatar } from \"./types\";\n\ntype Props = WithAvatar & {\n author: string;\n};\n\ndefineProps<Props>();\n\nconst nameInitials = (name: string) =>\n name\n .split(/[., _-]/, 2)\n .map((part) => part.charAt(0).toUpperCase())\n .join(\"\");\n</script>\n\n<template>\n <div class=\"avatar-and-name-wrapper\">\n <KdsAvatar\n :src=\"avatar.src\"\n :tooltip=\"author\"\n :initials=\"nameInitials(author)\"\n />\n <span class=\"author-name\">{{ author }}</span>\n </div>\n</template>\n\n<style scoped>\n.avatar-and-name-wrapper {\n display: flex;\n gap: var(--kds-spacing-container-0-25x);\n align-items: center;\n}\n\n.author-name {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-neutral);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { KdsAvatar } from \"@knime/kds-components\";\n\nimport type { WithAvatar } from \"./types\";\n\ntype Props = WithAvatar & {\n author: string;\n};\n\ndefineProps<Props>();\n\nconst nameInitials = (name: string) =>\n name\n .split(/[., _-]/, 2)\n .map((part) => part.charAt(0).toUpperCase())\n .join(\"\");\n</script>\n\n<template>\n <div class=\"avatar-and-name-wrapper\">\n <KdsAvatar\n :src=\"avatar.src\"\n :tooltip=\"author\"\n :initials=\"nameInitials(author)\"\n />\n <span class=\"author-name\">{{ author }}</span>\n </div>\n</template>\n\n<style scoped>\n.avatar-and-name-wrapper {\n display: flex;\n gap: var(--kds-spacing-container-0-25x);\n align-items: center;\n}\n\n.author-name {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-neutral);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\n\nimport { vKdsTooltip } from \"@knime/kds-components\";\nimport { formatDateTimeString, formatLocalDateTimeString } from \"@knime/utils\";\n\nimport type { NamedItemVersion } from \"./types\";\n\ntype Props = {\n date: string;\n version?: NamedItemVersion[\"version\"];\n};\n\nconst { version, date } = defineProps<Props>();\n\n// Render the hidden non-local format on the server / first paint to reserve the\n// space and avoid content jumping once the localized value swaps in after mount\nconst isMounted = ref(false);\nconst localDateTime = computed(() =>\n isMounted.value\n ? formatLocalDateTimeString(date, true)\n : formatDateTimeString(date, true),\n);\n\nonMounted(() => {\n isMounted.value = true;\n});\n</script>\n\n<template>\n <span class=\"history-event-footer\">\n Created on\n <time\n v-kds-tooltip=\"date\"\n :datetime=\"date\"\n :class=\"{ hidden: !isMounted }\"\n >{{ localDateTime }}</time\n >\n <template v-if=\"version\">– Version {{ version }}</template>\n </span>\n</template>\n\n<style scoped>\n.history-event-footer {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-subtle);\n}\n\n.hidden {\n visibility: hidden;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\n\nimport { vKdsTooltip } from \"@knime/kds-components\";\nimport { formatDateTimeString, formatLocalDateTimeString } from \"@knime/utils\";\n\nimport type { NamedItemVersion } from \"./types\";\n\ntype Props = {\n date: string;\n version?: NamedItemVersion[\"version\"];\n};\n\nconst { version, date } = defineProps<Props>();\n\n// Render the hidden non-local format on the server / first paint to reserve the\n// space and avoid content jumping once the localized value swaps in after mount\nconst isMounted = ref(false);\nconst localDateTime = computed(() =>\n isMounted.value\n ? formatLocalDateTimeString(date, true)\n : formatDateTimeString(date, true),\n);\n\nonMounted(() => {\n isMounted.value = true;\n});\n</script>\n\n<template>\n <span class=\"history-event-footer\">\n Created on\n <time\n v-kds-tooltip=\"date\"\n :datetime=\"date\"\n :class=\"{ hidden: !isMounted }\"\n >{{ localDateTime }}</time\n >\n <template v-if=\"version\">– Version {{ version }}</template>\n </span>\n</template>\n\n<style scoped>\n.history-event-footer {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-subtle);\n}\n\n.hidden {\n visibility: hidden;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport type { ItemSavepoint, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n currentSavepoint: ItemSavepoint & WithAvatar & WithLabels;\n isSelected: boolean;\n hasEditCapability: boolean;\n hasPreviousVersion: boolean;\n hasVersionLimit: boolean;\n isVersionLimitExceeded?: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n createVersion: [];\n discard: [];\n select: [];\n}>();\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n props.hasEditCapability && props.hasPreviousVersion\n ? [\n {\n id: \"discard\",\n text: \"Discard\",\n handler: () => emit(\"discard\"),\n },\n ]\n : [],\n);\n</script>\n\n<template>\n <HistoryEvent\n :is-selected\n is-first-item\n :is-last-item=\"!hasPreviousVersion && !hasVersionLimit\"\n >\n <KdsSelectableCard\n :model-value=\"isSelected\"\n headline=\"Draft\"\n ariaLabel=\"Savepoint history event\"\n @update:model-value=\"!isSelected && $emit('select')\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor\n :author=\"currentSavepoint.author\"\n :avatar=\"currentSavepoint.avatar\"\n />\n\n <HistoryEventFooter :date=\"currentSavepoint.lastEditedOn\" />\n </div>\n </KdsSelectableCard>\n\n <KdsButton\n v-if=\"hasEditCapability && !isVersionLimitExceeded\"\n label=\"Create version\"\n @click.stop=\"$emit('createVersion')\"\n />\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport type { ItemSavepoint, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n currentSavepoint: ItemSavepoint & WithAvatar & WithLabels;\n isSelected: boolean;\n hasEditCapability: boolean;\n hasPreviousVersion: boolean;\n hasVersionLimit: boolean;\n isVersionLimitExceeded?: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n createVersion: [];\n discard: [];\n select: [];\n}>();\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n props.hasEditCapability && props.hasPreviousVersion\n ? [\n {\n id: \"discard\",\n text: \"Discard\",\n handler: () => emit(\"discard\"),\n },\n ]\n : [],\n);\n</script>\n\n<template>\n <HistoryEvent\n :is-selected\n is-first-item\n :is-last-item=\"!hasPreviousVersion && !hasVersionLimit\"\n >\n <KdsSelectableCard\n :model-value=\"isSelected\"\n headline=\"Draft\"\n ariaLabel=\"Savepoint history event\"\n @update:model-value=\"!isSelected && $emit('select')\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor\n :author=\"currentSavepoint.author\"\n :avatar=\"currentSavepoint.avatar\"\n />\n\n <HistoryEventFooter :date=\"currentSavepoint.lastEditedOn\" />\n </div>\n </KdsSelectableCard>\n\n <KdsButton\n v-if=\"hasEditCapability && !isVersionLimitExceeded\"\n label=\"Create version\"\n @click.stop=\"$emit('createVersion')\"\n />\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTemplateRef } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPopover,\n type KdsPopoverExpose,\n KdsToggleButton,\n} from \"@knime/kds-components\";\n\nimport type { AssignedLabel } from \"./types\";\n\ntype Props = {\n label: AssignedLabel;\n};\n\ndefineProps<Props>();\n\nconst isPopoverOpen = defineModel<boolean>({ default: false });\nconst popoverEl = useTemplateRef<KdsPopoverExpose>(\"popover\");\n</script>\n\n<template>\n <KdsToggleButton\n v-model=\"isPopoverOpen\"\n data-kds-card-secondary-action\n :label=\"label.label.name\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isPopoverOpen\"\n :aria-controls=\"popoverEl?.popoverId\"\n size=\"xsmall\"\n :style=\"popoverEl?.anchorStyle\"\n />\n\n <KdsPopover\n ref=\"popover\"\n v-model=\"isPopoverOpen\"\n placement=\"bottom-left\"\n role=\"dialog\"\n aria-label=\"Label details\"\n >\n <div class=\"label-popover-container\">\n <div class=\"label-title\">{{ label.label.name }}</div>\n <KdsDescription :text=\"label.label.description\" />\n <KdsDescription v-if=\"label.message\" :text=\"label.message\" />\n </div>\n </KdsPopover>\n</template>\n\n<style scoped>\n.label-popover-container {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-5x);\n align-items: flex-start;\n max-width: var(--kds-dimension-component-width-20x);\n max-height: var(--kds-dimension-component-height-20x);\n padding: var(--kds-spacing-container-0-75x) var(--kds-spacing-container-1x);\n overflow-y: auto;\n background-color: var(--kds-color-surface-default);\n border-radius: var(--kds-border-radius-container-0-50x);\n box-shadow: var(--kds-elevation-level-3);\n}\n\n.label-title {\n font: var(--kds-font-base-body-small-strong);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTemplateRef } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPopover,\n type KdsPopoverExpose,\n KdsToggleButton,\n} from \"@knime/kds-components\";\n\nimport type { AssignedLabel } from \"./types\";\n\ntype Props = {\n label: AssignedLabel;\n};\n\ndefineProps<Props>();\n\nconst isPopoverOpen = defineModel<boolean>({ default: false });\nconst popoverEl = useTemplateRef<KdsPopoverExpose>(\"popover\");\n</script>\n\n<template>\n <KdsToggleButton\n v-model=\"isPopoverOpen\"\n data-kds-card-secondary-action\n :label=\"label.label.name\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isPopoverOpen\"\n :aria-controls=\"popoverEl?.popoverId\"\n size=\"xsmall\"\n :style=\"popoverEl?.anchorStyle\"\n />\n\n <KdsPopover\n ref=\"popover\"\n v-model=\"isPopoverOpen\"\n placement=\"bottom-left\"\n role=\"dialog\"\n aria-label=\"Label details\"\n >\n <div class=\"label-popover-container\">\n <div class=\"label-title\">{{ label.label.name }}</div>\n <KdsDescription :text=\"label.label.description\" />\n <KdsDescription v-if=\"label.message\" :text=\"label.message\" />\n </div>\n </KdsPopover>\n</template>\n\n<style scoped>\n.label-popover-container {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-5x);\n align-items: flex-start;\n max-width: var(--kds-dimension-component-width-20x);\n max-height: var(--kds-dimension-component-height-20x);\n padding: var(--kds-spacing-container-0-75x) var(--kds-spacing-container-1x);\n overflow-y: auto;\n background-color: var(--kds-color-surface-default);\n border-radius: var(--kds-border-radius-container-0-50x);\n box-shadow: var(--kds-elevation-level-3);\n}\n\n.label-title {\n font: var(--kds-font-base-body-small-strong);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsDescription,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport VersionLabel from \"./VersionLabel.vue\";\nimport type { NamedItemVersion, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n version: NamedItemVersion & WithAvatar & WithLabels;\n isSelected: boolean;\n hasAdminRights: boolean;\n hasEditCapability: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n select: [selectionStatus: boolean];\n delete: [];\n restore: [];\n}>();\n\nconst toggleVersionSelection = () => {\n emit(\"select\", !props.isSelected);\n};\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n [\n props.hasEditCapability && {\n id: \"show\",\n text: props.isSelected ? \"Deselect this version\" : \"Show this version\",\n handler: toggleVersionSelection,\n },\n props.hasEditCapability && {\n id: \"restore\",\n text: \"Restore this version\",\n handler: () => emit(\"restore\"),\n },\n props.hasAdminRights && {\n id: \"delete\",\n text: \"Delete this version\",\n handler: () => emit(\"delete\"),\n },\n ].filter((i) => i !== false),\n);\n</script>\n\n<template>\n <HistoryEvent :is-selected :is-first-item :is-last-item>\n <KdsSelectableCard\n :model-value=\"isSelected\"\n :headline=\"version.title\"\n ariaLabel=\"Version history event\"\n @update:model-value=\"toggleVersionSelection\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor :author=\"version.author\" :avatar=\"version.avatar\" />\n\n <KdsDescription\n v-if=\"version.description\"\n :text=\"version.description\"\n />\n\n <div class=\"labels-wrapper\">\n <VersionLabel\n v-for=\"label in version.labels\"\n :key=\"label.labelId\"\n :label=\"label\"\n />\n </div>\n\n <HistoryEventFooter\n :version=\"version.version\"\n :date=\"version.createdOn\"\n />\n </div>\n </KdsSelectableCard>\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);\n}\n\n.labels-wrapper {\n display: flex;\n flex-wrap: wrap;\n gap: var(--kds-spacing-container-0-25x) var(--kds-spacing-container-0-5x);\n align-items: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsDescription,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport VersionLabel from \"./VersionLabel.vue\";\nimport type { NamedItemVersion, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n version: NamedItemVersion & WithAvatar & WithLabels;\n isSelected: boolean;\n hasAdminRights: boolean;\n hasEditCapability: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n select: [selectionStatus: boolean];\n delete: [];\n restore: [];\n}>();\n\nconst toggleVersionSelection = () => {\n emit(\"select\", !props.isSelected);\n};\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n [\n props.hasEditCapability && {\n id: \"show\",\n text: props.isSelected ? \"Deselect this version\" : \"Show this version\",\n handler: toggleVersionSelection,\n },\n props.hasEditCapability && {\n id: \"restore\",\n text: \"Restore this version\",\n handler: () => emit(\"restore\"),\n },\n props.hasAdminRights && {\n id: \"delete\",\n text: \"Delete this version\",\n handler: () => emit(\"delete\"),\n },\n ].filter((i) => i !== false),\n);\n</script>\n\n<template>\n <HistoryEvent :is-selected :is-first-item :is-last-item>\n <KdsSelectableCard\n :model-value=\"isSelected\"\n :headline=\"version.title\"\n ariaLabel=\"Version history event\"\n @update:model-value=\"toggleVersionSelection\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor :author=\"version.author\" :avatar=\"version.avatar\" />\n\n <KdsDescription\n v-if=\"version.description\"\n :text=\"version.description\"\n />\n\n <div class=\"labels-wrapper\">\n <VersionLabel\n v-for=\"label in version.labels\"\n :key=\"label.labelId\"\n :label=\"label\"\n />\n </div>\n\n <HistoryEventFooter\n :version=\"version.version\"\n :date=\"version.createdOn\"\n />\n </div>\n </KdsSelectableCard>\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);\n}\n\n.labels-wrapper {\n display: flex;\n flex-wrap: wrap;\n gap: var(--kds-spacing-container-0-25x) var(--kds-spacing-container-0-5x);\n align-items: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport { KdsCard, KdsDescription, KdsLinkButton } from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport type { VersionLimit } from \"./types\";\n\nconst {\n versionLimit,\n upgradeUrl = undefined,\n isPrivate = false,\n} = defineProps<{\n versionLimit: Required<VersionLimit>;\n upgradeUrl?: string;\n isPrivate?: boolean;\n}>();\n\nconst isLimitReached = computed(\n () => versionLimit.currentUsage >= versionLimit.limit,\n);\n\nconst headline = computed(() => {\n if (isLimitReached.value) {\n return `You've reached the maximum of ${versionLimit.limit} versions.`;\n } else {\n return `Using ${versionLimit.currentUsage} of ${versionLimit.limit} versions.`;\n }\n});\n</script>\n\n<template>\n <HistoryEvent :is-selected=\"false\" :is-first-item=\"false\" is-last-item>\n <KdsCard variant=\"filled\" :headline=\"headline\">\n <template v-if=\"upgradeUrl\" #header-actions>\n <KdsLinkButton label=\"Upgrade\" :to=\"upgradeUrl\" />\n </template>\n\n <div class=\"content-wrapper\">\n <KdsDescription\n :text=\"`Upgrade to use unlimited versions${isPrivate ? ' for private items.' : '.'}`\"\n />\n </div>\n </KdsCard>\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport { KdsCard, KdsDescription, KdsLinkButton } from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport type { VersionLimit } from \"./types\";\n\nconst {\n versionLimit,\n upgradeUrl = undefined,\n isPrivate = false,\n} = defineProps<{\n versionLimit: Required<VersionLimit>;\n upgradeUrl?: string;\n isPrivate?: boolean;\n}>();\n\nconst isLimitReached = computed(\n () => versionLimit.currentUsage >= versionLimit.limit,\n);\n\nconst headline = computed(() => {\n if (isLimitReached.value) {\n return `You've reached the maximum of ${versionLimit.limit} versions.`;\n } else {\n return `Using ${versionLimit.currentUsage} of ${versionLimit.limit} versions.`;\n }\n});\n</script>\n\n<template>\n <HistoryEvent :is-selected=\"false\" :is-first-item=\"false\" is-last-item>\n <KdsCard variant=\"filled\" :headline=\"headline\">\n <template v-if=\"upgradeUrl\" #header-actions>\n <KdsLinkButton label=\"Upgrade\" :to=\"upgradeUrl\" />\n </template>\n\n <div class=\"content-wrapper\">\n <KdsDescription\n :text=\"`Upgrade to use unlimited versions${isPrivate ? ' for private items.' : '.'}`\"\n />\n </div>\n </KdsCard>\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n padding: 0 var(--kds-spacing-container-1x) var(--kds-spacing-container-1x);\n}\n</style>\n","export const VERSION_DEFAULT_LIMIT = 10;\nexport const CURRENT_STATE_VERSION = \"current-state\";\nexport const MOST_RECENT_VERSION = \"most-recent\";\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n KdsPanel,\n type KdsPanelHeadlineTrailingAction,\n} from \"@knime/kds-components\";\n\nimport CurrentState from \"./CurrentState.vue\";\nimport VersionItem from \"./VersionItem.vue\";\nimport VersionLimitInfo from \"./VersionLimitInfo.vue\";\nimport { CURRENT_STATE_VERSION } from \"./constants\";\nimport type { NamedItemVersion, VersionHistoryProps } from \"./types\";\n\nconst props = defineProps<VersionHistoryProps>();\n\nconst emit = defineEmits<{\n close: [];\n loadAll: [];\n create: [];\n delete: [version: NamedItemVersion[\"version\"]];\n restore: [version: NamedItemVersion[\"version\"]];\n select: [version: NamedItemVersion[\"version\"]];\n discardCurrentState: [];\n}>();\n\nconst isVersionLimitExceeded = computed(() => {\n return (\n props.versionLimit?.limit !== undefined &&\n props.versionLimit.currentUsage >= props.versionLimit.limit\n );\n});\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"close\"),\n },\n ],\n);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Version history\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n >\n <div class=\"version-history-wrapper\">\n <CurrentState\n v-if=\"unversionedSavepoint\"\n :current-savepoint=\"unversionedSavepoint\"\n :is-selected=\"currentVersion === CURRENT_STATE_VERSION\"\n :has-edit-capability=\"hasEditCapability\"\n :has-previous-version=\"versionHistory.length > 0\"\n :has-version-limit=\"versionLimit?.limit !== undefined\"\n :is-version-limit-exceeded=\"isVersionLimitExceeded\"\n @select=\"$emit('select', CURRENT_STATE_VERSION)\"\n @create-version=\"$emit('create')\"\n @discard=\"$emit('discardCurrentState')\"\n />\n\n <VersionItem\n v-for=\"(historyEvent, index) in versionHistory\"\n :key=\"historyEvent.version\"\n :version=\"historyEvent\"\n :is-selected=\"historyEvent.version === currentVersion\"\n :has-admin-rights=\"hasAdminRights\"\n :has-edit-capability=\"hasEditCapability\"\n :is-first-item=\"!unversionedSavepoint && index === 0\"\n :is-last-item=\"\n index === versionHistory.length - 1 &&\n versionLimit?.limit === undefined\n \"\n @delete=\"$emit('delete', historyEvent.version)\"\n @restore=\"$emit('restore', historyEvent.version)\"\n @select=\"\n $emit('select', $event ? historyEvent.version : CURRENT_STATE_VERSION)\n \"\n />\n\n <VersionLimitInfo\n v-if=\"versionLimit?.limit !== undefined\"\n class=\"version-limit-info\"\n :version-limit=\"{\n limit: versionLimit.limit,\n currentUsage: versionLimit.currentUsage,\n }\"\n :upgrade-url\n :is-private\n />\n\n <KdsButton\n v-if=\"!hasLoadedAllVersions\"\n variant=\"transparent\"\n :disabled=\"loading\"\n :label=\"loading ? 'Loading...' : 'Load all'\"\n class=\"load-more-button\"\n @click=\"$emit('loadAll')\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.version-history-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-75x);\n}\n\n.load-more-button {\n margin: 0 auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n KdsPanel,\n type KdsPanelHeadlineTrailingAction,\n} from \"@knime/kds-components\";\n\nimport CurrentState from \"./CurrentState.vue\";\nimport VersionItem from \"./VersionItem.vue\";\nimport VersionLimitInfo from \"./VersionLimitInfo.vue\";\nimport { CURRENT_STATE_VERSION } from \"./constants\";\nimport type { NamedItemVersion, VersionHistoryProps } from \"./types\";\n\nconst props = defineProps<VersionHistoryProps>();\n\nconst emit = defineEmits<{\n close: [];\n loadAll: [];\n create: [];\n delete: [version: NamedItemVersion[\"version\"]];\n restore: [version: NamedItemVersion[\"version\"]];\n select: [version: NamedItemVersion[\"version\"]];\n discardCurrentState: [];\n}>();\n\nconst isVersionLimitExceeded = computed(() => {\n return (\n props.versionLimit?.limit !== undefined &&\n props.versionLimit.currentUsage >= props.versionLimit.limit\n );\n});\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"close\"),\n },\n ],\n);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Version history\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n >\n <div class=\"version-history-wrapper\">\n <CurrentState\n v-if=\"unversionedSavepoint\"\n :current-savepoint=\"unversionedSavepoint\"\n :is-selected=\"currentVersion === CURRENT_STATE_VERSION\"\n :has-edit-capability=\"hasEditCapability\"\n :has-previous-version=\"versionHistory.length > 0\"\n :has-version-limit=\"versionLimit?.limit !== undefined\"\n :is-version-limit-exceeded=\"isVersionLimitExceeded\"\n @select=\"$emit('select', CURRENT_STATE_VERSION)\"\n @create-version=\"$emit('create')\"\n @discard=\"$emit('discardCurrentState')\"\n />\n\n <VersionItem\n v-for=\"(historyEvent, index) in versionHistory\"\n :key=\"historyEvent.version\"\n :version=\"historyEvent\"\n :is-selected=\"historyEvent.version === currentVersion\"\n :has-admin-rights=\"hasAdminRights\"\n :has-edit-capability=\"hasEditCapability\"\n :is-first-item=\"!unversionedSavepoint && index === 0\"\n :is-last-item=\"\n index === versionHistory.length - 1 &&\n versionLimit?.limit === undefined\n \"\n @delete=\"$emit('delete', historyEvent.version)\"\n @restore=\"$emit('restore', historyEvent.version)\"\n @select=\"\n $emit('select', $event ? historyEvent.version : CURRENT_STATE_VERSION)\n \"\n />\n\n <VersionLimitInfo\n v-if=\"versionLimit?.limit !== undefined\"\n class=\"version-limit-info\"\n :version-limit=\"{\n limit: versionLimit.limit,\n currentUsage: versionLimit.currentUsage,\n }\"\n :upgrade-url\n :is-private\n />\n\n <KdsButton\n v-if=\"!hasLoadedAllVersions\"\n variant=\"transparent\"\n :disabled=\"loading\"\n :label=\"loading ? 'Loading...' : 'Load all'\"\n class=\"load-more-button\"\n @click=\"$emit('loadAll')\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.version-history-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-75x);\n}\n\n.load-more-button {\n margin: 0 auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPanel,\n type KdsPanelButtonAction,\n type KdsPanelHeadlineTrailingAction,\n KdsTextInput,\n KdsTextarea,\n} from \"@knime/kds-components\";\n\nimport type { CreateVersionFormProps } from \"./types\";\n\nconst { isCreationPending = false } = defineProps<CreateVersionFormProps>();\n\nconst emit = defineEmits<{\n create: [{ name: string; description: string }];\n cancel: [hasUnsavedChanges: boolean];\n}>();\n\nconst versionName = ref(\"\");\nconst versionDescription = ref(\"\");\n\nconst doValidate = ref(false);\n\nconst isVersionNameInvalid = computed(() => {\n return doValidate.value && versionName.value.trim().length <= 0;\n});\n\nconst hasUnsavedChanges = computed(() => {\n return versionName.value !== \"\" || versionDescription.value !== \"\";\n});\n\nconst onCreate = async () => {\n doValidate.value = true;\n await nextTick();\n\n if (!isVersionNameInvalid.value) {\n emit(\"create\", {\n name: versionName.value.trim(),\n description: versionDescription.value,\n });\n }\n};\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n ],\n);\n\nconst footerLeadingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Cancel\",\n variant: \"outlined\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n]);\n\nconst footerTrailingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Create\",\n variant: \"filled\",\n disabled: isVersionNameInvalid.value || isCreationPending,\n },\n onClick: onCreate,\n },\n]);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Create version\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n :footer-leading-actions=\"footerLeadingActions\"\n :footer-trailing-actions=\"footerTrailingActions\"\n >\n <div class=\"create-version-form-wrapper\">\n <KdsDescription\n text=\"Give your version a name and description. Versions can be used to create a deployment.\"\n class=\"create-version-form-description\"\n />\n\n <KdsTextInput\n v-model=\"versionName\"\n label=\"Version name\"\n type=\"text\"\n :error=\"isVersionNameInvalid\"\n :sub-text=\"\n isVersionNameInvalid\n ? 'Please enter at least 1 character.'\n : undefined\n \"\n />\n\n <KdsTextarea\n v-model=\"versionDescription\"\n label=\"Description\"\n class=\"description\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.create-version-form-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-1x);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPanel,\n type KdsPanelButtonAction,\n type KdsPanelHeadlineTrailingAction,\n KdsTextInput,\n KdsTextarea,\n} from \"@knime/kds-components\";\n\nimport type { CreateVersionFormProps } from \"./types\";\n\nconst { isCreationPending = false } = defineProps<CreateVersionFormProps>();\n\nconst emit = defineEmits<{\n create: [{ name: string; description: string }];\n cancel: [hasUnsavedChanges: boolean];\n}>();\n\nconst versionName = ref(\"\");\nconst versionDescription = ref(\"\");\n\nconst doValidate = ref(false);\n\nconst isVersionNameInvalid = computed(() => {\n return doValidate.value && versionName.value.trim().length <= 0;\n});\n\nconst hasUnsavedChanges = computed(() => {\n return versionName.value !== \"\" || versionDescription.value !== \"\";\n});\n\nconst onCreate = async () => {\n doValidate.value = true;\n await nextTick();\n\n if (!isVersionNameInvalid.value) {\n emit(\"create\", {\n name: versionName.value.trim(),\n description: versionDescription.value,\n });\n }\n};\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n ],\n);\n\nconst footerLeadingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Cancel\",\n variant: \"outlined\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n]);\n\nconst footerTrailingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Create\",\n variant: \"filled\",\n disabled: isVersionNameInvalid.value || isCreationPending,\n },\n onClick: onCreate,\n },\n]);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Create version\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n :footer-leading-actions=\"footerLeadingActions\"\n :footer-trailing-actions=\"footerTrailingActions\"\n >\n <div class=\"create-version-form-wrapper\">\n <KdsDescription\n text=\"Give your version a name and description. Versions can be used to create a deployment.\"\n class=\"create-version-form-description\"\n />\n\n <KdsTextInput\n v-model=\"versionName\"\n label=\"Version name\"\n type=\"text\"\n :error=\"isVersionNameInvalid\"\n :sub-text=\"\n isVersionNameInvalid\n ? 'Please enter at least 1 character.'\n : undefined\n \"\n />\n\n <KdsTextarea\n v-model=\"versionDescription\"\n label=\"Description\"\n class=\"description\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.create-version-form-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-1x);\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"versions.js","names":["$emit","$emit"],"sources":["../src/versions/VersionHistory/HistoryEvent.vue","../src/versions/VersionHistory/HistoryEvent.vue","../src/versions/VersionHistory/HistoryEventAuthor.vue","../src/versions/VersionHistory/HistoryEventAuthor.vue","../src/versions/VersionHistory/HistoryEventFooter.vue","../src/versions/VersionHistory/HistoryEventFooter.vue","../src/versions/VersionHistory/CurrentState.vue","../src/versions/VersionHistory/CurrentState.vue","../src/versions/VersionHistory/VersionLabel.vue","../src/versions/VersionHistory/VersionLabel.vue","../src/versions/VersionHistory/VersionItem.vue","../src/versions/VersionHistory/VersionItem.vue","../src/versions/VersionHistory/VersionLimitInfo.vue","../src/versions/VersionHistory/VersionLimitInfo.vue","../src/versions/VersionHistory/constants.ts","../src/versions/VersionHistory/VersionHistory.vue","../src/versions/VersionHistory/VersionHistory.vue","../src/versions/CreateVersionForm/CreateVersionForm.vue","../src/versions/CreateVersionForm/CreateVersionForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { KdsIcon } from \"@knime/kds-components\";\n\ntype Props = {\n isSelected: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\ndefineProps<Props>();\n</script>\n\n<template>\n <div class=\"history-event-wrapper\">\n <div class=\"history-event-decorator\">\n <div v-if=\"!isFirstItem\" class=\"history-event-line-top\" />\n <KdsIcon\n class=\"history-event-icon\"\n :name=\"isSelected ? 'circle-success' : 'circle-unchecked'\"\n size=\"small\"\n />\n <div v-if=\"!isLastItem\" class=\"history-event-line-bottom\" />\n </div>\n\n <div class=\"card-wrapper\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.history-event-wrapper {\n display: flex;\n}\n\n.history-event-decorator {\n position: relative;\n display: flex;\n flex-shrink: 0;\n justify-content: center;\n width: var(--kds-dimension-component-width-0-75x);\n margin: 0 var(--kds-spacing-container-0-75x);\n}\n\n.history-event-line-top {\n position: absolute;\n top: calc(var(--kds-spacing-container-0-37x) * -1);\n height: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x)\n );\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-line-bottom {\n position: absolute;\n top: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x) +\n var(--kds-spacing-container-0-37x)\n );\n bottom: calc(var(--kds-spacing-container-0-37x) * -1);\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-icon {\n position: absolute;\n top: var(--kds-spacing-container-1x);\n}\n\n.card-wrapper {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n min-width: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { KdsIcon } from \"@knime/kds-components\";\n\ntype Props = {\n isSelected: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\ndefineProps<Props>();\n</script>\n\n<template>\n <div class=\"history-event-wrapper\">\n <div class=\"history-event-decorator\">\n <div v-if=\"!isFirstItem\" class=\"history-event-line-top\" />\n <KdsIcon\n class=\"history-event-icon\"\n :name=\"isSelected ? 'circle-success' : 'circle-unchecked'\"\n size=\"small\"\n />\n <div v-if=\"!isLastItem\" class=\"history-event-line-bottom\" />\n </div>\n\n <div class=\"card-wrapper\">\n <slot />\n </div>\n </div>\n</template>\n\n<style scoped>\n.history-event-wrapper {\n display: flex;\n}\n\n.history-event-decorator {\n position: relative;\n display: flex;\n flex-shrink: 0;\n justify-content: center;\n width: var(--kds-dimension-component-width-0-75x);\n margin: 0 var(--kds-spacing-container-0-75x);\n}\n\n.history-event-line-top {\n position: absolute;\n top: calc(var(--kds-spacing-container-0-37x) * -1);\n height: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x)\n );\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-line-bottom {\n position: absolute;\n top: calc(\n var(--kds-spacing-container-1x) + var(--kds-spacing-container-0-37x) +\n var(--kds-spacing-container-0-37x)\n );\n bottom: calc(var(--kds-spacing-container-0-37x) * -1);\n border-left: var(--kds-border-base-subtle);\n}\n\n.history-event-icon {\n position: absolute;\n top: var(--kds-spacing-container-1x);\n}\n\n.card-wrapper {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n min-width: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { KdsAvatar } from \"@knime/kds-components\";\n\nimport type { WithAvatar } from \"./types\";\n\ntype Props = WithAvatar & {\n author: string;\n};\n\ndefineProps<Props>();\n\nconst nameInitials = (name: string) =>\n name\n .split(/[., _-]/, 2)\n .map((part) => part.charAt(0).toUpperCase())\n .join(\"\");\n</script>\n\n<template>\n <div class=\"avatar-and-name-wrapper\">\n <KdsAvatar\n :src=\"avatar.src\"\n :tooltip=\"author\"\n :initials=\"nameInitials(author)\"\n />\n <span class=\"author-name\">{{ author }}</span>\n </div>\n</template>\n\n<style scoped>\n.avatar-and-name-wrapper {\n display: flex;\n gap: var(--kds-spacing-container-0-25x);\n align-items: center;\n}\n\n.author-name {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-neutral);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { KdsAvatar } from \"@knime/kds-components\";\n\nimport type { WithAvatar } from \"./types\";\n\ntype Props = WithAvatar & {\n author: string;\n};\n\ndefineProps<Props>();\n\nconst nameInitials = (name: string) =>\n name\n .split(/[., _-]/, 2)\n .map((part) => part.charAt(0).toUpperCase())\n .join(\"\");\n</script>\n\n<template>\n <div class=\"avatar-and-name-wrapper\">\n <KdsAvatar\n :src=\"avatar.src\"\n :tooltip=\"author\"\n :initials=\"nameInitials(author)\"\n />\n <span class=\"author-name\">{{ author }}</span>\n </div>\n</template>\n\n<style scoped>\n.avatar-and-name-wrapper {\n display: flex;\n gap: var(--kds-spacing-container-0-25x);\n align-items: center;\n}\n\n.author-name {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-neutral);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\n\nimport { vKdsTooltip } from \"@knime/kds-components\";\nimport { formatDateTimeString, formatLocalDateTimeString } from \"@knime/utils\";\n\nimport type { NamedItemVersion } from \"./types\";\n\ntype Props = {\n date: string;\n version?: NamedItemVersion[\"version\"];\n};\n\nconst { version, date } = defineProps<Props>();\n\n// Render the hidden non-local format on the server / first paint to reserve the\n// space and avoid content jumping once the localized value swaps in after mount\nconst isMounted = ref(false);\nconst localDateTime = computed(() =>\n isMounted.value\n ? formatLocalDateTimeString(date, true)\n : formatDateTimeString(date, true),\n);\n\nonMounted(() => {\n isMounted.value = true;\n});\n</script>\n\n<template>\n <span class=\"history-event-footer\">\n Created on\n <time\n v-kds-tooltip=\"date\"\n :datetime=\"date\"\n :class=\"{ hidden: !isMounted }\"\n >{{ localDateTime }}</time\n >\n <template v-if=\"version\">– Version {{ version }}</template>\n </span>\n</template>\n\n<style scoped>\n.history-event-footer {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-subtle);\n}\n\n.hidden {\n visibility: hidden;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\n\nimport { vKdsTooltip } from \"@knime/kds-components\";\nimport { formatDateTimeString, formatLocalDateTimeString } from \"@knime/utils\";\n\nimport type { NamedItemVersion } from \"./types\";\n\ntype Props = {\n date: string;\n version?: NamedItemVersion[\"version\"];\n};\n\nconst { version, date } = defineProps<Props>();\n\n// Render the hidden non-local format on the server / first paint to reserve the\n// space and avoid content jumping once the localized value swaps in after mount\nconst isMounted = ref(false);\nconst localDateTime = computed(() =>\n isMounted.value\n ? formatLocalDateTimeString(date, true)\n : formatDateTimeString(date, true),\n);\n\nonMounted(() => {\n isMounted.value = true;\n});\n</script>\n\n<template>\n <span class=\"history-event-footer\">\n Created on\n <time\n v-kds-tooltip=\"date\"\n :datetime=\"date\"\n :class=\"{ hidden: !isMounted }\"\n >{{ localDateTime }}</time\n >\n <template v-if=\"version\">– Version {{ version }}</template>\n </span>\n</template>\n\n<style scoped>\n.history-event-footer {\n font: var(--kds-font-base-subtext-small);\n color: var(--kds-color-text-and-icon-subtle);\n}\n\n.hidden {\n visibility: hidden;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport type { ItemSavepoint, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n currentSavepoint: ItemSavepoint & WithAvatar & WithLabels;\n isSelected: boolean;\n hasEditCapability: boolean;\n hasPreviousVersion: boolean;\n hasVersionLimit: boolean;\n isVersionLimitExceeded?: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n createVersion: [];\n discard: [];\n select: [];\n}>();\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n props.hasEditCapability && props.hasPreviousVersion\n ? [\n {\n id: \"discard\",\n text: \"Discard\",\n handler: () => emit(\"discard\"),\n },\n ]\n : [],\n);\n</script>\n\n<template>\n <HistoryEvent\n :is-selected\n is-first-item\n :is-last-item=\"!hasPreviousVersion && !hasVersionLimit\"\n >\n <KdsSelectableCard\n :model-value=\"isSelected\"\n headline=\"Draft\"\n ariaLabel=\"Savepoint history event\"\n @update:model-value=\"!isSelected && $emit('select')\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor\n :author=\"currentSavepoint.author\"\n :avatar=\"currentSavepoint.avatar\"\n />\n\n <HistoryEventFooter :date=\"currentSavepoint.lastEditedOn\" />\n </div>\n </KdsSelectableCard>\n\n <KdsButton\n v-if=\"hasEditCapability && !isVersionLimitExceeded\"\n label=\"Create version\"\n @click.stop=\"$emit('createVersion')\"\n />\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport type { ItemSavepoint, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n currentSavepoint: ItemSavepoint & WithAvatar & WithLabels;\n isSelected: boolean;\n hasEditCapability: boolean;\n hasPreviousVersion: boolean;\n hasVersionLimit: boolean;\n isVersionLimitExceeded?: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n createVersion: [];\n discard: [];\n select: [];\n}>();\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n props.hasEditCapability && props.hasPreviousVersion\n ? [\n {\n id: \"discard\",\n text: \"Discard\",\n handler: () => emit(\"discard\"),\n },\n ]\n : [],\n);\n</script>\n\n<template>\n <HistoryEvent\n :is-selected\n is-first-item\n :is-last-item=\"!hasPreviousVersion && !hasVersionLimit\"\n >\n <KdsSelectableCard\n :model-value=\"isSelected\"\n headline=\"Draft\"\n ariaLabel=\"Savepoint history event\"\n @update:model-value=\"!isSelected && $emit('select')\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor\n :author=\"currentSavepoint.author\"\n :avatar=\"currentSavepoint.avatar\"\n />\n\n <HistoryEventFooter :date=\"currentSavepoint.lastEditedOn\" />\n </div>\n </KdsSelectableCard>\n\n <KdsButton\n v-if=\"hasEditCapability && !isVersionLimitExceeded\"\n label=\"Create version\"\n @click.stop=\"$emit('createVersion')\"\n />\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTemplateRef } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPopover,\n type KdsPopoverExpose,\n KdsToggleButton,\n} from \"@knime/kds-components\";\n\nimport type { AssignedLabel } from \"./types\";\n\ntype Props = {\n label: AssignedLabel;\n};\n\ndefineProps<Props>();\n\nconst isPopoverOpen = defineModel<boolean>({ default: false });\nconst popoverEl = useTemplateRef<KdsPopoverExpose>(\"popover\");\n</script>\n\n<template>\n <KdsToggleButton\n v-model=\"isPopoverOpen\"\n data-kds-card-secondary-action\n :label=\"label.label.name\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isPopoverOpen\"\n :aria-controls=\"popoverEl?.popoverId\"\n size=\"xsmall\"\n :style=\"popoverEl?.anchorStyle\"\n />\n\n <KdsPopover\n ref=\"popover\"\n v-model=\"isPopoverOpen\"\n placement=\"bottom-left\"\n role=\"dialog\"\n aria-label=\"Label details\"\n >\n <div class=\"label-popover-container\">\n <div class=\"label-title\">{{ label.label.name }}</div>\n <KdsDescription :text=\"label.label.description\" />\n <KdsDescription v-if=\"label.message\" :text=\"label.message\" />\n </div>\n </KdsPopover>\n</template>\n\n<style scoped>\n.label-popover-container {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-5x);\n align-items: flex-start;\n max-width: var(--kds-dimension-component-width-20x);\n max-height: var(--kds-dimension-component-height-20x);\n padding: var(--kds-spacing-container-0-75x) var(--kds-spacing-container-1x);\n overflow-y: auto;\n background-color: var(--kds-color-surface-default);\n border-radius: var(--kds-border-radius-container-0-50x);\n box-shadow: var(--kds-elevation-level-3);\n}\n\n.label-title {\n font: var(--kds-font-base-body-small-strong);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTemplateRef } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPopover,\n type KdsPopoverExpose,\n KdsToggleButton,\n} from \"@knime/kds-components\";\n\nimport type { AssignedLabel } from \"./types\";\n\ntype Props = {\n label: AssignedLabel;\n};\n\ndefineProps<Props>();\n\nconst isPopoverOpen = defineModel<boolean>({ default: false });\nconst popoverEl = useTemplateRef<KdsPopoverExpose>(\"popover\");\n</script>\n\n<template>\n <KdsToggleButton\n v-model=\"isPopoverOpen\"\n data-kds-card-secondary-action\n :label=\"label.label.name\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"isPopoverOpen\"\n :aria-controls=\"popoverEl?.popoverId\"\n size=\"xsmall\"\n :style=\"popoverEl?.anchorStyle\"\n />\n\n <KdsPopover\n ref=\"popover\"\n v-model=\"isPopoverOpen\"\n placement=\"bottom-left\"\n role=\"dialog\"\n aria-label=\"Label details\"\n >\n <div class=\"label-popover-container\">\n <div class=\"label-title\">{{ label.label.name }}</div>\n <KdsDescription :text=\"label.label.description\" />\n <KdsDescription v-if=\"label.message\" :text=\"label.message\" />\n </div>\n </KdsPopover>\n</template>\n\n<style scoped>\n.label-popover-container {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-5x);\n align-items: flex-start;\n max-width: var(--kds-dimension-component-width-20x);\n max-height: var(--kds-dimension-component-height-20x);\n padding: var(--kds-spacing-container-0-75x) var(--kds-spacing-container-1x);\n overflow-y: auto;\n background-color: var(--kds-color-surface-default);\n border-radius: var(--kds-border-radius-container-0-50x);\n box-shadow: var(--kds-elevation-level-3);\n}\n\n.label-title {\n font: var(--kds-font-base-body-small-strong);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsDescription,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport VersionLabel from \"./VersionLabel.vue\";\nimport type { NamedItemVersion, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n version: NamedItemVersion & WithAvatar & WithLabels;\n isSelected: boolean;\n hasAdminRights: boolean;\n hasEditCapability: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n select: [selectionStatus: boolean];\n delete: [];\n restore: [];\n}>();\n\nconst toggleVersionSelection = () => {\n emit(\"select\", !props.isSelected);\n};\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n [\n props.hasEditCapability && {\n id: \"show\",\n text: props.isSelected ? \"Deselect this version\" : \"Show this version\",\n handler: toggleVersionSelection,\n },\n props.hasEditCapability && {\n id: \"restore\",\n text: \"Restore this version\",\n handler: () => emit(\"restore\"),\n },\n props.hasAdminRights && {\n id: \"delete\",\n text: \"Delete this version\",\n handler: () => emit(\"delete\"),\n },\n ].filter((i) => i !== false),\n);\n</script>\n\n<template>\n <HistoryEvent :is-selected :is-first-item :is-last-item>\n <KdsSelectableCard\n :model-value=\"isSelected\"\n :headline=\"version.title\"\n ariaLabel=\"Version history event\"\n @update:model-value=\"toggleVersionSelection\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor :author=\"version.author\" :avatar=\"version.avatar\" />\n\n <KdsDescription\n v-if=\"version.description\"\n :text=\"version.description\"\n />\n\n <div class=\"labels-wrapper\">\n <VersionLabel\n v-for=\"label in version.labels\"\n :key=\"label.labelId\"\n :label=\"label\"\n />\n </div>\n\n <HistoryEventFooter\n :version=\"version.version\"\n :date=\"version.createdOn\"\n />\n </div>\n </KdsSelectableCard>\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n}\n\n.labels-wrapper {\n display: flex;\n flex-wrap: wrap;\n gap: var(--kds-spacing-container-0-25x) var(--kds-spacing-container-0-5x);\n align-items: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsDescription,\n type KdsMenuActionItem,\n KdsMenuButton,\n KdsSelectableCard,\n} from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport HistoryEventAuthor from \"./HistoryEventAuthor.vue\";\nimport HistoryEventFooter from \"./HistoryEventFooter.vue\";\nimport VersionLabel from \"./VersionLabel.vue\";\nimport type { NamedItemVersion, WithAvatar, WithLabels } from \"./types\";\n\ntype Props = {\n version: NamedItemVersion & WithAvatar & WithLabels;\n isSelected: boolean;\n hasAdminRights: boolean;\n hasEditCapability: boolean;\n isFirstItem: boolean;\n isLastItem: boolean;\n};\n\nconst props = defineProps<Props>();\n\nconst emit = defineEmits<{\n select: [selectionStatus: boolean];\n delete: [];\n restore: [];\n}>();\n\nconst toggleVersionSelection = () => {\n emit(\"select\", !props.isSelected);\n};\n\nconst menuItems = computed<KdsMenuActionItem[]>(() =>\n [\n props.hasEditCapability && {\n id: \"show\",\n text: props.isSelected ? \"Deselect this version\" : \"Show this version\",\n handler: toggleVersionSelection,\n },\n props.hasEditCapability && {\n id: \"restore\",\n text: \"Restore this version\",\n handler: () => emit(\"restore\"),\n },\n props.hasAdminRights && {\n id: \"delete\",\n text: \"Delete this version\",\n handler: () => emit(\"delete\"),\n },\n ].filter((i) => i !== false),\n);\n</script>\n\n<template>\n <HistoryEvent :is-selected :is-first-item :is-last-item>\n <KdsSelectableCard\n :model-value=\"isSelected\"\n :headline=\"version.title\"\n ariaLabel=\"Version history event\"\n @update:model-value=\"toggleVersionSelection\"\n >\n <template v-if=\"menuItems.length\" #header-actions>\n <KdsMenuButton\n :items=\"menuItems\"\n variant=\"transparent\"\n leading-icon=\"more-actions\"\n ariaLabel=\"More actions\"\n />\n </template>\n\n <div class=\"content-wrapper\">\n <HistoryEventAuthor :author=\"version.author\" :avatar=\"version.avatar\" />\n\n <KdsDescription\n v-if=\"version.description\"\n :text=\"version.description\"\n />\n\n <div class=\"labels-wrapper\">\n <VersionLabel\n v-for=\"label in version.labels\"\n :key=\"label.labelId\"\n :label=\"label\"\n />\n </div>\n\n <HistoryEventFooter\n :version=\"version.version\"\n :date=\"version.createdOn\"\n />\n </div>\n </KdsSelectableCard>\n </HistoryEvent>\n</template>\n\n<style scoped>\n.content-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-37x);\n}\n\n.labels-wrapper {\n display: flex;\n flex-wrap: wrap;\n gap: var(--kds-spacing-container-0-25x) var(--kds-spacing-container-0-5x);\n align-items: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport { KdsCard, KdsDescription, KdsLinkButton } from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport type { VersionLimit } from \"./types\";\n\nconst {\n versionLimit,\n upgradeUrl = undefined,\n isPrivate = false,\n} = defineProps<{\n versionLimit: Required<VersionLimit>;\n upgradeUrl?: string;\n isPrivate?: boolean;\n}>();\n\nconst isLimitReached = computed(\n () => versionLimit.currentUsage >= versionLimit.limit,\n);\n\nconst headline = computed(() => {\n if (isLimitReached.value) {\n return `You've reached the maximum of ${versionLimit.limit} versions.`;\n } else {\n return `Using ${versionLimit.currentUsage} of ${versionLimit.limit} versions.`;\n }\n});\n</script>\n\n<template>\n <HistoryEvent :is-selected=\"false\" :is-first-item=\"false\" is-last-item>\n <KdsCard variant=\"filled\" :headline=\"headline\">\n <template v-if=\"upgradeUrl\" #header-actions>\n <KdsLinkButton label=\"Upgrade\" :to=\"upgradeUrl\" />\n </template>\n\n <div class=\"content-wrapper\">\n <KdsDescription\n :text=\"`Upgrade to use unlimited versions${isPrivate ? ' for private items.' : '.'}`\"\n />\n </div>\n </KdsCard>\n </HistoryEvent>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport { KdsCard, KdsDescription, KdsLinkButton } from \"@knime/kds-components\";\n\nimport HistoryEvent from \"./HistoryEvent.vue\";\nimport type { VersionLimit } from \"./types\";\n\nconst {\n versionLimit,\n upgradeUrl = undefined,\n isPrivate = false,\n} = defineProps<{\n versionLimit: Required<VersionLimit>;\n upgradeUrl?: string;\n isPrivate?: boolean;\n}>();\n\nconst isLimitReached = computed(\n () => versionLimit.currentUsage >= versionLimit.limit,\n);\n\nconst headline = computed(() => {\n if (isLimitReached.value) {\n return `You've reached the maximum of ${versionLimit.limit} versions.`;\n } else {\n return `Using ${versionLimit.currentUsage} of ${versionLimit.limit} versions.`;\n }\n});\n</script>\n\n<template>\n <HistoryEvent :is-selected=\"false\" :is-first-item=\"false\" is-last-item>\n <KdsCard variant=\"filled\" :headline=\"headline\">\n <template v-if=\"upgradeUrl\" #header-actions>\n <KdsLinkButton label=\"Upgrade\" :to=\"upgradeUrl\" />\n </template>\n\n <div class=\"content-wrapper\">\n <KdsDescription\n :text=\"`Upgrade to use unlimited versions${isPrivate ? ' for private items.' : '.'}`\"\n />\n </div>\n </KdsCard>\n </HistoryEvent>\n</template>\n","export const VERSION_DEFAULT_LIMIT = 10;\nexport const CURRENT_STATE_VERSION = \"current-state\";\nexport const MOST_RECENT_VERSION = \"most-recent\";\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n KdsPanel,\n type KdsPanelHeadlineTrailingAction,\n} from \"@knime/kds-components\";\n\nimport CurrentState from \"./CurrentState.vue\";\nimport VersionItem from \"./VersionItem.vue\";\nimport VersionLimitInfo from \"./VersionLimitInfo.vue\";\nimport { CURRENT_STATE_VERSION } from \"./constants\";\nimport type { NamedItemVersion, VersionHistoryProps } from \"./types\";\n\nconst props = defineProps<VersionHistoryProps>();\n\nconst emit = defineEmits<{\n close: [];\n loadAll: [];\n create: [];\n delete: [version: NamedItemVersion[\"version\"]];\n restore: [version: NamedItemVersion[\"version\"]];\n select: [version: NamedItemVersion[\"version\"]];\n discardCurrentState: [];\n}>();\n\nconst isVersionLimitExceeded = computed(() => {\n return (\n props.versionLimit?.limit !== undefined &&\n props.versionLimit.currentUsage >= props.versionLimit.limit\n );\n});\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"close\"),\n },\n ],\n);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Version history\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n >\n <div class=\"version-history-wrapper\">\n <CurrentState\n v-if=\"unversionedSavepoint\"\n :current-savepoint=\"unversionedSavepoint\"\n :is-selected=\"currentVersion === CURRENT_STATE_VERSION\"\n :has-edit-capability=\"hasEditCapability\"\n :has-previous-version=\"versionHistory.length > 0\"\n :has-version-limit=\"versionLimit?.limit !== undefined\"\n :is-version-limit-exceeded=\"isVersionLimitExceeded\"\n @select=\"$emit('select', CURRENT_STATE_VERSION)\"\n @create-version=\"$emit('create')\"\n @discard=\"$emit('discardCurrentState')\"\n />\n\n <VersionItem\n v-for=\"(historyEvent, index) in versionHistory\"\n :key=\"historyEvent.version\"\n :version=\"historyEvent\"\n :is-selected=\"historyEvent.version === currentVersion\"\n :has-admin-rights=\"hasAdminRights\"\n :has-edit-capability=\"hasEditCapability\"\n :is-first-item=\"!unversionedSavepoint && index === 0\"\n :is-last-item=\"\n index === versionHistory.length - 1 &&\n versionLimit?.limit === undefined\n \"\n @delete=\"$emit('delete', historyEvent.version)\"\n @restore=\"$emit('restore', historyEvent.version)\"\n @select=\"\n $emit('select', $event ? historyEvent.version : CURRENT_STATE_VERSION)\n \"\n />\n\n <VersionLimitInfo\n v-if=\"versionLimit?.limit !== undefined\"\n class=\"version-limit-info\"\n :version-limit=\"{\n limit: versionLimit.limit,\n currentUsage: versionLimit.currentUsage,\n }\"\n :upgrade-url\n :is-private\n />\n\n <KdsButton\n v-if=\"!hasLoadedAllVersions\"\n variant=\"transparent\"\n :disabled=\"loading\"\n :label=\"loading ? 'Loading...' : 'Load all'\"\n class=\"load-more-button\"\n @click=\"$emit('loadAll')\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.version-history-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-75x);\n}\n\n.load-more-button {\n margin: 0 auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport {\n KdsButton,\n KdsPanel,\n type KdsPanelHeadlineTrailingAction,\n} from \"@knime/kds-components\";\n\nimport CurrentState from \"./CurrentState.vue\";\nimport VersionItem from \"./VersionItem.vue\";\nimport VersionLimitInfo from \"./VersionLimitInfo.vue\";\nimport { CURRENT_STATE_VERSION } from \"./constants\";\nimport type { NamedItemVersion, VersionHistoryProps } from \"./types\";\n\nconst props = defineProps<VersionHistoryProps>();\n\nconst emit = defineEmits<{\n close: [];\n loadAll: [];\n create: [];\n delete: [version: NamedItemVersion[\"version\"]];\n restore: [version: NamedItemVersion[\"version\"]];\n select: [version: NamedItemVersion[\"version\"]];\n discardCurrentState: [];\n}>();\n\nconst isVersionLimitExceeded = computed(() => {\n return (\n props.versionLimit?.limit !== undefined &&\n props.versionLimit.currentUsage >= props.versionLimit.limit\n );\n});\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"close\"),\n },\n ],\n);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Version history\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n >\n <div class=\"version-history-wrapper\">\n <CurrentState\n v-if=\"unversionedSavepoint\"\n :current-savepoint=\"unversionedSavepoint\"\n :is-selected=\"currentVersion === CURRENT_STATE_VERSION\"\n :has-edit-capability=\"hasEditCapability\"\n :has-previous-version=\"versionHistory.length > 0\"\n :has-version-limit=\"versionLimit?.limit !== undefined\"\n :is-version-limit-exceeded=\"isVersionLimitExceeded\"\n @select=\"$emit('select', CURRENT_STATE_VERSION)\"\n @create-version=\"$emit('create')\"\n @discard=\"$emit('discardCurrentState')\"\n />\n\n <VersionItem\n v-for=\"(historyEvent, index) in versionHistory\"\n :key=\"historyEvent.version\"\n :version=\"historyEvent\"\n :is-selected=\"historyEvent.version === currentVersion\"\n :has-admin-rights=\"hasAdminRights\"\n :has-edit-capability=\"hasEditCapability\"\n :is-first-item=\"!unversionedSavepoint && index === 0\"\n :is-last-item=\"\n index === versionHistory.length - 1 &&\n versionLimit?.limit === undefined\n \"\n @delete=\"$emit('delete', historyEvent.version)\"\n @restore=\"$emit('restore', historyEvent.version)\"\n @select=\"\n $emit('select', $event ? historyEvent.version : CURRENT_STATE_VERSION)\n \"\n />\n\n <VersionLimitInfo\n v-if=\"versionLimit?.limit !== undefined\"\n class=\"version-limit-info\"\n :version-limit=\"{\n limit: versionLimit.limit,\n currentUsage: versionLimit.currentUsage,\n }\"\n :upgrade-url\n :is-private\n />\n\n <KdsButton\n v-if=\"!hasLoadedAllVersions\"\n variant=\"transparent\"\n :disabled=\"loading\"\n :label=\"loading ? 'Loading...' : 'Load all'\"\n class=\"load-more-button\"\n @click=\"$emit('loadAll')\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.version-history-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-0-75x);\n}\n\n.load-more-button {\n margin: 0 auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPanel,\n type KdsPanelButtonAction,\n type KdsPanelHeadlineTrailingAction,\n KdsTextInput,\n KdsTextarea,\n} from \"@knime/kds-components\";\n\nimport type { CreateVersionFormProps } from \"./types\";\n\nconst { isCreationPending = false } = defineProps<CreateVersionFormProps>();\n\nconst emit = defineEmits<{\n create: [{ name: string; description: string }];\n cancel: [hasUnsavedChanges: boolean];\n}>();\n\nconst versionName = ref(\"\");\nconst versionDescription = ref(\"\");\n\nconst doValidate = ref(false);\n\nconst isVersionNameInvalid = computed(() => {\n return doValidate.value && versionName.value.trim().length <= 0;\n});\n\nconst hasUnsavedChanges = computed(() => {\n return versionName.value !== \"\" || versionDescription.value !== \"\";\n});\n\nconst onCreate = async () => {\n doValidate.value = true;\n await nextTick();\n\n if (!isVersionNameInvalid.value) {\n emit(\"create\", {\n name: versionName.value.trim(),\n description: versionDescription.value,\n });\n }\n};\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n ],\n);\n\nconst footerLeadingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Cancel\",\n variant: \"outlined\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n]);\n\nconst footerTrailingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Create\",\n variant: \"filled\",\n disabled: isVersionNameInvalid.value || isCreationPending,\n },\n onClick: onCreate,\n },\n]);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Create version\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n :footer-leading-actions=\"footerLeadingActions\"\n :footer-trailing-actions=\"footerTrailingActions\"\n >\n <div class=\"create-version-form-wrapper\">\n <KdsDescription\n text=\"Give your version a name and description. Versions can be used to create a deployment.\"\n class=\"create-version-form-description\"\n />\n\n <KdsTextInput\n v-model=\"versionName\"\n label=\"Version name\"\n type=\"text\"\n :error=\"isVersionNameInvalid\"\n :sub-text=\"\n isVersionNameInvalid\n ? 'Please enter at least 1 character.'\n : undefined\n \"\n />\n\n <KdsTextarea\n v-model=\"versionDescription\"\n label=\"Description\"\n class=\"description\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.create-version-form-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-1x);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from \"vue\";\n\nimport {\n KdsDescription,\n KdsPanel,\n type KdsPanelButtonAction,\n type KdsPanelHeadlineTrailingAction,\n KdsTextInput,\n KdsTextarea,\n} from \"@knime/kds-components\";\n\nimport type { CreateVersionFormProps } from \"./types\";\n\nconst { isCreationPending = false } = defineProps<CreateVersionFormProps>();\n\nconst emit = defineEmits<{\n create: [{ name: string; description: string }];\n cancel: [hasUnsavedChanges: boolean];\n}>();\n\nconst versionName = ref(\"\");\nconst versionDescription = ref(\"\");\n\nconst doValidate = ref(false);\n\nconst isVersionNameInvalid = computed(() => {\n return doValidate.value && versionName.value.trim().length <= 0;\n});\n\nconst hasUnsavedChanges = computed(() => {\n return versionName.value !== \"\" || versionDescription.value !== \"\";\n});\n\nconst onCreate = async () => {\n doValidate.value = true;\n await nextTick();\n\n if (!isVersionNameInvalid.value) {\n emit(\"create\", {\n name: versionName.value.trim(),\n description: versionDescription.value,\n });\n }\n};\n\nconst headlineTrailingActions = computed<KdsPanelHeadlineTrailingAction[]>(\n () => [\n {\n type: \"button\",\n props: {\n leadingIcon: \"x-close\",\n ariaLabel: \"Close\",\n variant: \"transparent\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n ],\n);\n\nconst footerLeadingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Cancel\",\n variant: \"outlined\",\n },\n onClick: () => emit(\"cancel\", hasUnsavedChanges.value),\n },\n]);\n\nconst footerTrailingActions = computed<KdsPanelButtonAction[]>(() => [\n {\n type: \"button\",\n props: {\n label: \"Create\",\n variant: \"filled\",\n disabled: isVersionNameInvalid.value || isCreationPending,\n },\n onClick: onCreate,\n },\n]);\n</script>\n\n<template>\n <KdsPanel\n headline=\"Create version\"\n :headline-trailing-actions=\"headlineTrailingActions\"\n :footer-leading-actions=\"footerLeadingActions\"\n :footer-trailing-actions=\"footerTrailingActions\"\n >\n <div class=\"create-version-form-wrapper\">\n <KdsDescription\n text=\"Give your version a name and description. Versions can be used to create a deployment.\"\n class=\"create-version-form-description\"\n />\n\n <KdsTextInput\n v-model=\"versionName\"\n label=\"Version name\"\n type=\"text\"\n :error=\"isVersionNameInvalid\"\n :sub-text=\"\n isVersionNameInvalid\n ? 'Please enter at least 1 character.'\n : undefined\n \"\n />\n\n <KdsTextarea\n v-model=\"versionDescription\"\n label=\"Description\"\n class=\"description\"\n />\n </div>\n </KdsPanel>\n</template>\n\n<style scoped>\n.create-version-form-wrapper {\n display: flex;\n flex-direction: column;\n gap: var(--kds-spacing-container-1x);\n}\n</style>\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knime/product-features",
3
- "version": "2.1.0",
3
+ "version": "2.1.2",
4
4
  "description": "Package containing composition patterns of KDS Components and KNIME business logic",
5
5
  "repository": {
6
6
  "type": "git",
@@ -54,8 +54,8 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "consola": "^3.4.2",
57
- "@knime/kds-components": "^3.0.0",
58
- "@knime/kds-styles": "^3.0.0",
57
+ "@knime/kds-components": "^5.0.0",
58
+ "@knime/kds-styles": "^5.0.0",
59
59
  "@knime/utils": "^2.0.0"
60
60
  },
61
61
  "devDependencies": {
@@ -69,7 +69,7 @@
69
69
  "flush-promises": "^1.0.2",
70
70
  "mock-xmlhttprequest": "^8.4.1",
71
71
  "ofetch": "^1.5.1",
72
- "prettier": "3.9.5",
72
+ "prettier": "3.9.6",
73
73
  "prettier-plugin-vue": "^1.1.6",
74
74
  "storybook": "^10.4.6",
75
75
  "ts-morph": "^28.0.0",
@@ -77,7 +77,7 @@
77
77
  "vite-plugin-dts": "^5.0.3",
78
78
  "vite-plugin-lib-inject-css": "^2.2.2",
79
79
  "vite-svg-loader": "^5.1.1",
80
- "vue": "3.5.39",
80
+ "vue": "3.5.40",
81
81
  "vue-tsc": "^3.3.7"
82
82
  },
83
83
  "engines": {