@unitybase/adminui-vue #

Added #

7.0.59 2026-05-31 #
  • ub-auth.html: uiSettings.adminUI.faviconURL support on the authorization page
7.0.58 2026-05-26 #
  • UPdfViewerExt: iframe-side architecture rewrite. The viewer is now driven by an iframe-side module host (iframe/moduleHost.js) where built-in features (pdfDocument, semanticHighlight, summary, customButtons) and external features are self-contained modules with a uniform install(api) contract. External packages ship iframe-side functionality (toolbar buttons, button actions, eventBus listeners, postMessage handlers) by declaring iframeModule: { src } on pdfViewerExtensions.register(id, ext); globalThis.__upveModules.register({ id, install }) is the same hook used by built-in modules — there is no second-class API for external code. The parent awaits all extension scripts via pdfViewerExtensions.injectIframeModules(iframeWindow).loaded before the iframe bootstraps, so every module is installed before the first prop watcher fires. See components/controls/UFile/views/UPdfViewerExt/iframe/README.md for the full extension guide (how to add a module, toolbar button, action, message handler).
  • UPdfViewerExt: new public method print() that programmatically triggers the browser print dialog (respects allowPrint prop); new events before-print and after-print emitted regardless of whether print was triggered by the toolbar button or programmatically.
  • UPdfViewerExt: toolbarButtons prop and pdfViewerExtensions registry — register custom toolbar buttons, document lifecycle hooks and panel interactions without modifying the component source. Buttons support toggle-right-panel action with interactive panelItems, dynamic state updates via updateToolbarButton(buttonId, patch), and toolbar-button-click / panel-item-click events.
  • fileRendererFactory, fileRendererMixin: third-party code can now register custom file renderers for any MIME type without modifying UFileRenderer. Use fileRendererMixin in the renderer component to receive all standard props (file, entityName, attributeName, recordId, fileOrigName, previewEditable), then register the component via fileRendererFactory.registerRenderer():
const { fileRendererFactory, fileRendererMixin } = require('@unitybase/adminui-vue')
// GltfRenderer.vue — use fileRendererMixin to get all standard props
export default {
  mixins: [fileRendererMixin],
  // file, entityName, attributeName, recordId, fileOrigName, previewEditable are available
// registration
fileRendererFactory.registerRenderer({
  match: ({contentType}) => contentType === 'model/gltf+json',
  component: require('./GltfRenderer.vue').default
  • UBAuthCore.checkOIDCRedirectResponse(vm): new utility that detects an OIDC auth response encoded in the URL hash (#oidc=...) after a same-window redirect and immediately resolves window.deferred, completing authentication without any user interaction. Call from onCredentialRequired in auth pages.
  • ub-auth.html / UBAuthCore.doOpenIDLogin: OpenID Connect login on the initial login page now uses a same-window redirect instead of a popup window, avoiding popup-blocker issues and aligning with the standard OAuth2 Authorization Code Flow. Session-expired relogin (UAuthOpenidconnect.vue) still uses the popup to preserve SPA state.
  • UBAuthCore: new loginWithFullPageRedirect reactive data field (default false). When uiSettings.adminUI.loginWithFullPageRedirect is true in ubConfig.json, doOpenIDLogin uses a full-page redirect to the selected OIDC provider instead of a popup, regardless of how many providers are configured. Additionally, if only one OpenIDConnect provider is the sole auth method, applyAppConfig automatically redirects to the provider on page load, bypassing the ub-auth form. The auto-redirect is skipped when the user explicitly logged out to prevent silent re-authentication via an active IdP session.
7.0.57 2026-05-07 #
  • USelectMultiple: added popperClass prop to pass a custom class to the dropdown popper for styling

Changed #

7.0.58 2026-05-26 #
  • package.json: overrides force element-ui to resolve async-validator@^4.2.5, dropping the legacy async-validator@1.xbabel-runtimecore-js@2 chain from installs of this package
7.0.57 2026-05-07 #
  • UTableEntity: when exporting to xls/html format, only visible columns are now exported (as in the Ext grid)

Deprecated #

7.0.58 2026-05-26 #
  • UFileRenderer: fileRenderer.$refs.view is no accessible anymore. Use fileRenderer.getBlobViewer() instead.

Removed #

7.0.58 2026-05-26 #
  • UPdfViewerExt: removed the legacy single-file viewer at components/controls/UFile/views/UPdfViewerExt.vue (with its accompanying UPdfViewerExt.md). The folder-based viewer at components/controls/UFile/views/UPdfViewerExt/UPdfViewerExt.vue is the only shipped implementation; both registrations previously bound the same Vue component name (UPdfViewerExt) so the legacy registration was already dead code (utils/install-ub-components.js). The styleguidist config in apps/docs-adminui now points at the folder-based path.
  • components/controls/UFile/views/PdfViewerExt_InsideIframe.js — legacy 1.2K-line iframe-side script replaced by the iframe module bundle (dist/updf-viewer-iframe.min.js) produced from components/controls/UFile/views/UPdfViewerExt/iframe/index.js. The only remaining consumer (adminui-pub UB.ux.PDFComponent) is migrated to the new bundle in the same release.
  • prevent call of logout twice when user close browser tab - first for beforeunload and second for pagehide
  • UToolbar: support dropdownOnly: true setting for default buttons

Fixed #

7.0.59 2026-05-31 #
  • SECURITY harden OpenID Connect login flows in UBAuthCore and UAuthOpenidconnect: popup postMessage consumers now require exact event.origin equality, and post-login returnUrl redirects are parsed with URL and allowed only for the exact current origin
  • clickOutside: ignore programmatic clicks where e.target === document.body to prevent closing dropdowns
7.0.58 2026-05-26 #
  • UBVueApp.wrapTab().on(): read the current tab from items instead of the stale closure so that subsequent tab.on(...) calls no longer wipe previously bound handlers
  • Vue navbar tab for an Ext-based form now invokes BasePanel.beforeClose() on close, so the unsaved-data confirmation dialog is shown when the user closes the tab via the Vue navbar
  • Vue navbar tab title for an Ext-based form now reflects the form dirty state with the * prefix and stays in sync with setTitle calls coming from the Ext form
7.0.57 2026-05-07 #
  • UToolbar: fixed keyboard shortcuts (Ctrl+S, Ctrl+R) not working when a non-Latin keyboard layout (e.g. Ukrainian, Russian) is active. e.key returns a layout-specific character instead of the Latin letter, so the conditions never matched and e.preventDefault() was never called for Ctrl+S, causing the browser's native "Save page" dialog to open instead of saving the form. Fixed by switching to e.code (e.g. 'KeyS', 'KeyR') which is layout-independent.
  • UToolbar: fixed Ctrl+Enter ("Save & Close") closing all open unsaved forms simultaneously instead of only the currently active one. Root cause: the keydown listener was attached to this.$root.$el (the application root), so every mounted toolbar received and handled the same event. Fixed by adding a guard in onKeydownActions: if (!this.$parent.$el.contains(document.activeElement)) return — the handler now reacts only when the focused element belongs to this toolbar's parent form container.
  • el-dialog: fixed an issue where dialogs rendered without the append-to-body prop had incorrect stacking context — the dialog body appeared behind the overlay backdrop due to a lower z-index on the tabs content container. Resolved by resetting tabsContentEl.style.zIndex to unset

Chores #

7.0.58 2026-05-26 #
  • update sanitize-html dependency

@unitybase/adminui-pub #

Added #

7.0.43 2026-05-26 #
  • index.mustache: favicon is now resolved dynamically from uiSettings.adminUI.faviconURL. If specified, replaces the default /favicon.ico in <link rel="shortcut icon"> and <link rel="icon"> elements

Changed #

7.0.43 2026-05-26 #
  • UB.ux.PDFComponent: extended-pdf-viewer mode now injects the iframe module bundle (@unitybase/adminui-vue/dist/updf-viewer-iframe.min.js) instead of the removed legacy PdfViewerExt_InsideIframe.js. The new iframe runtime requires a UPdfViewerExt:readyUPdfViewerExt:beginBootstrap handshake before its module host bootstraps; the component now listens for ready from its iframe and replies with beginBootstrap immediately (no pdfViewerExtensions are registered on the ExtJS side). The handshake listener is removed in onDestroy() to avoid leaks when the panel is closed.

@unitybase/adminui-reg #

Added #

7.0.45 2026-05-26 #
  • index.mustache: favicon is now resolved dynamically from uiSettings.adminUI.faviconURL. If specified, replaces the default /favicon.ico in <link rel="shortcut icon"> and <link rel="icon"> elements

@unitybase/base #

Changed #

5.24.34 2026-05-31 #
  • SyncConnection.authorize for root user (console only) now do not call /auth

@unitybase/logview #

Changed #

1.1.99 2026-05-26 #
  • ULogView, ULogFiles: toolbar extracted into a new ULogToolbar component with its own styles instead of relying on u-toolbar classes from UToolbar

@unitybase/openid-connect #

Added #

5.25.5 2026-05-31 #
  • SECURITY per-request OIDC nonce
  • SECURITY: validate id_token claims before trusting any data from it
  • New optional provider config property issuer: the expected value of the iss claim in the id_token. If omitted, issuer validation is skipped. Pre-configured providers in ubConfig-partial.json now include the correct issuer value:
    • Google: "https://accounts.google.com"
    • Azure: "https://login.microsoftonline.com/<tenant>/v2.0" Migration: add "issuer" to each provider section in your ubConfig.json.
5.25.4 2026-05-26 #
  • OpenIdProvider: support same-window redirect flow for initial login pages. When the OIDC endpoint is called with a returnUrl query parameter (same-origin validated), the auth result is encoded in the URL hash (#oidc=...) and the browser is redirected back to the login page instead of using postMessage + window.close(). The popup-based flow (session-expired relogin inside SPA) is fully preserved and unchanged.
  • Support for URI-based multitenant environments. resolveExternalURL resolves tenant-specific origin by looking up Session.tenantID in security.multitenancy.tenants[] and inheriting the scheme from App.externalURL. Header-based MT (tenantIDHeader) is explicitly not supported by the OIDC endpoint and will throw an error

Changed #

5.25.5 2026-05-31 #
  • SECURITY BREAKING: userInfoAddAuthHeader now defaults to true, switching userinfo requests to the more secure Authorization header transport by default. Setting userInfoAddAuthHeader: false preserves legacy compatibility mode: GET sends access_token in the query string, and POST sends it in the form body. Otherwise, the token is sent only in the Authorization: Bearer header.
5.25.4 2026-05-26 #
  • SECURITY unified all random token generation to use crypto.randomBytes
  • SECURITY improve security by preventing leakage of sensitive information in case of OpenID connect errors
  • SECURITY refactored OpenID request/query parameter building into a shared helper and enforce safe application/x-www-form-urlencoded string generation for auth, token and userInfo requests
  • SECURITY BREAKING PKCE (Proof Key for Code Exchange, RFC 7636) is now enabled by default for all providers. On each login a fresh code_verifier (256-bit random, SHA-256 hashed) is generated and bound to the session; the corresponding code_challenge (S256 method) is appended to the authorization URL, and code_verifier is included in the token-exchange request, preventing authorization code interception. Set pkce: false in the provider config only for legacy providers that do not support PKCE (e.g. ADFS 3 / WS2012).

Deprecated #

5.25.5 2026-05-31 #
  • providerConfig.nonce — any static nonce value in provider config is silently ignored. Remove the nonce field from your provider configuration in ubConfig.json .
5.25.4 2026-05-26 #
  • auth page now not need to call UB.get('openIDConnect') from client - OpenID provider list now accessible in conn.appConfig.oidcProviders

Fixed #

5.25.5 2026-05-31 #
  • SECURITY OpenIdProvider: OIDC session cookie now includes an explicit SameSite attribute and a bounded Max-Age=600 (10 minutes, aligned with the server-side state cache TTL).
  • SECURITY stop logging sensitive OIDC cookie and token data in callback, refresh, and M2M token flows.
5.25.4 2026-05-26 #
  • SECURITY fixed reflected XSS in the OIDC callback/error page. JSON.stringify is not safe for embedding inside an HTML <script> block because the HTML parser terminates the script tag on the literal bytes </script before any JavaScript parsing occurs.

@unitybase/ub-pub #

Fixed #

5.24.47 2026-05-07 #
  • UBConnection.invalidateCache: fixed a race condition where a select on a cached entity could read stale data if it was initiated immediately after update/insert/delete while cache invalidation was still in progress. Added _pendingInvalidateCacheRequests map (keyed by entity name) that stores the invalidation promise while cacheOccurrenceRefresh is running. _doSelectForCacheableEntity now waits for the pending invalidation promise (if any) before reading the cache, ensuring fresh data is always returned. The map self-cleans on both resolve and reject.

@unitybase/ub #

Added #

5.25.83 2026-05-26 #
  • ubConfig.schema.json: new uiSettings.adminUI.loginWithFullPageRedirect boolean property (default false). When true, OpenIDConnect login uses a full-page redirect to the identity provider instead of a popup. Additionally, if only one OpenIDConnect provider is configured as the sole auth method, the login page will redirect directly to the provider on load, bypassing the ub-auth form entirely.
  • ubConfig.schema.json: new uiSettings.adminUI.faviconURL string property. Optional URL path for a custom favicon. If specified, replaces the default /favicon.ico.

@unitybase/uba #

Fixed #

5.24.75 2026-05-31 #
  • fixed uba_user i18n for ka, nl, tg and uz locales (removed localization for not existed attribute gender)

@unitybase/ubm #

Added #

5.24.93 2026-05-26 #
  • ubm_desktop.changeUISettings: faviconURL is now included in the reset list, so resetting UI settings also removes a previously set custom favicon

Fixed #

5.24.93 2026-05-26 #
  • dataURI2Blob: added support for data:image/vnd.microsoft.icon;base64, MIME type so .ico favicons uploaded via the UI settings form are correctly parsed and saved