From f6fbe6fd4751a022812215cb66da57f54031254f Mon Sep 17 00:00:00 2001 From: chyzman Date: Mon, 17 Aug 2026 15:17:58 -0400 Subject: [PATCH 1/5] fix some ButtonLinks not being links --- .../ui/src/components/base/buttons/ButtonLink.vue | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/base/buttons/ButtonLink.vue b/packages/ui/src/components/base/buttons/ButtonLink.vue index cb11c7c6c6..de2ee04ce7 100644 --- a/packages/ui/src/components/base/buttons/ButtonLink.vue +++ b/packages/ui/src/components/base/buttons/ButtonLink.vue @@ -38,6 +38,15 @@ const resolvedRel = computed(() => { return props.target === '_blank' ? 'noopener noreferrer' : undefined }) +// https://github.com/vuejs/vue-router/issues/2005 moment +const linkAttrs = computed(() => + usesRouter.value + ? { to: props.to } + : !props.disabled + ? { href: props.href } + : {}, +) + function handleClick(event: MouseEvent) { if (!props.disabled) return event.preventDefault() @@ -52,8 +61,7 @@ function handleClick(event: MouseEvent) { :color="props.color" :size="props.size" :interaction="props.interaction" - :to="usesRouter ? props.to : undefined" - :href="!usesRouter && !props.disabled ? props.href : undefined" + v-bind="linkAttrs" :target="props.target" :rel="resolvedRel" :download="!props.disabled ? props.download : undefined" From 125624ee8aaca225eee936c45eb5ee5dcd5bb548 Mon Sep 17 00:00:00 2001 From: Blodhgarm Date: Mon, 17 Aug 2026 23:12:08 -0500 Subject: [PATCH 2/5] feat: Add download link inside managed content modal --- .../managed-content-modal/index.vue | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/ui/src/layouts/shared/content-tab/components/managed-content-modal/index.vue b/packages/ui/src/layouts/shared/content-tab/components/managed-content-modal/index.vue index ccce906bd7..8932684043 100644 --- a/packages/ui/src/layouts/shared/content-tab/components/managed-content-modal/index.vue +++ b/packages/ui/src/layouts/shared/content-tab/components/managed-content-modal/index.vue @@ -3,6 +3,7 @@ import { ArrowLeftRightIcon, BoxIcon, ExternalIcon, + FileIcon, GlassesIcon, PaintbrushIcon, SearchIcon, @@ -104,6 +105,10 @@ const messages = defineMessages({ id: 'instances.managed-content-modal.open-in-slicer', defaultMessage: 'Open in Slicer', }, + downloadFile: { + id: 'instances.managed-content-modal.download-file', + defaultMessage: 'Download File', + }, }) export interface ManagedContentModalState { @@ -314,6 +319,15 @@ const externalSlicerUrls = computed(() => { } return urls }) +const externalUrls = computed(() => { + const urls: Record = {} + for (const item of items.value) { + if (item.external && item.external_url) { + urls[item.id] = item.external_url + } + } + return urls +}) const hasExternalSlicerUrls = computed(() => Object.keys(externalSlicerUrls.value).length > 0) const showTableActions = computed(() => props.enableToggle || hasExternalSlicerUrls.value) @@ -598,6 +612,18 @@ defineExpose({ show, showLoading, hide, getState, restore, updateItem, setItems > + + + From 9f5008ce17f6a5ee1ea50a7794473b9b9eb9b015 Mon Sep 17 00:00:00 2001 From: chyzman Date: Tue, 18 Aug 2026 14:19:41 -0400 Subject: [PATCH 3/5] fix comboboxes not aligning correctly immediately --- packages/ui/src/components/base/Combobox.vue | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/components/base/Combobox.vue b/packages/ui/src/components/base/Combobox.vue index 750238a9e1..eddd74c20c 100644 --- a/packages/ui/src/components/base/Combobox.vue +++ b/packages/ui/src/components/base/Combobox.vue @@ -478,7 +478,7 @@ function setInitialFocus() { function determineOpenDirection( triggerRect: DOMRect, - dropdownRect: DOMRect, + dropdownRect: { width: number; height: number }, viewport: ViewportRect, ): 'up' | 'down' { if (props.forceDirection) { @@ -499,7 +499,7 @@ function determineOpenDirection( function calculateVerticalPosition( triggerRect: DOMRect, - dropdownRect: DOMRect, + dropdownRect: { width: number; height: number }, direction: 'up' | 'down', viewport: ViewportRect, ): number { @@ -513,7 +513,7 @@ function calculateVerticalPosition( function calculateHorizontalPosition( triggerRect: DOMRect, - dropdownRect: DOMRect, + dropdownRect: { width: number; height: number }, viewport: ViewportRect, ): number { const minLeft = viewport.offsetLeft + DROPDOWN_VIEWPORT_MARGIN @@ -556,7 +556,7 @@ async function updateDropdownPosition() { await nextTick() const triggerRect = effectiveTriggerEl.value.getBoundingClientRect() - const width = resolveDropdownWidth(triggerRect.width) + const width = resolveDropdownWidth(effectiveTriggerEl.value.offsetWidth) const minWidth = resolveCssSize(props.dropdownMinWidth) ?? '0px' dropdownStyle.value = { @@ -567,7 +567,10 @@ async function updateDropdownPosition() { await nextTick() - const dropdownRect = dropdownRef.value.getBoundingClientRect() + const dropdownRect = { + width: dropdownRef.value.offsetWidth, + height: dropdownRef.value.offsetHeight, + } const viewport = getViewportRect() const direction = determineOpenDirection(triggerRect, dropdownRect, viewport) From 866867c94b3fb21e7a12ddf6f026de886417f9c5 Mon Sep 17 00:00:00 2001 From: Blodhgarm Date: Tue, 18 Aug 2026 15:10:09 -0500 Subject: [PATCH 4/5] fix: add missing localization for download file btn added --- packages/ui/src/locales/en-US/index.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/ui/src/locales/en-US/index.json b/packages/ui/src/locales/en-US/index.json index db2dfba00f..16fb280747 100644 --- a/packages/ui/src/locales/en-US/index.json +++ b/packages/ui/src/locales/en-US/index.json @@ -2246,6 +2246,9 @@ "instances.content-install.show-unavailable": { "defaultMessage": "Show unavailable" }, + "instances.managed-content-modal.download-file": { + "defaultMessage": "Download File" + }, "instances.managed-content-modal.empty-description": { "defaultMessage": "This source does not include any managed content." }, From 3a4ad3c968e5123dde3365bf6e88b0bf299b6ae7 Mon Sep 17 00:00:00 2001 From: chyzman Date: Wed, 19 Aug 2026 15:02:05 -0400 Subject: [PATCH 5/5] prepr --- packages/ui/src/components/base/buttons/ButtonLink.vue | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/ui/src/components/base/buttons/ButtonLink.vue b/packages/ui/src/components/base/buttons/ButtonLink.vue index de2ee04ce7..08d59351cf 100644 --- a/packages/ui/src/components/base/buttons/ButtonLink.vue +++ b/packages/ui/src/components/base/buttons/ButtonLink.vue @@ -40,11 +40,7 @@ const resolvedRel = computed(() => { // https://github.com/vuejs/vue-router/issues/2005 moment const linkAttrs = computed(() => - usesRouter.value - ? { to: props.to } - : !props.disabled - ? { href: props.href } - : {}, + usesRouter.value ? { to: props.to } : !props.disabled ? { href: props.href } : {}, ) function handleClick(event: MouseEvent) {