Skip to content

Release 3.5.0#1918

Merged
theorm merged 28 commits intomasterfrom
develop
Apr 10, 2026
Merged

Release 3.5.0#1918
theorm merged 28 commits intomasterfrom
develop

Conversation

@theorm
Copy link
Copy Markdown
Member

@theorm theorm commented Apr 10, 2026

No description provided.

danieleguido and others added 28 commits February 19, 2026 15:13
Addresses #1418 by implementing content-item level citations (Chicago and BibTeX) and enhancing metadata visibility for staff users. This PR also includes architectural cleanups for bitmap handling and utility migrations.

Citation & Metadata Features
New Citation Component: Added ContentItemCitation supporting Chicago and BibTeX formats.
Copy-to-Clipboard: Integrated a configurable button with navigator.clipboard and DOMParser for clean plain-text extraction.

    Conditional Visibility: Staff get full access to metadata grids; non-staff view is restricted to "Cite as..." (temporary limitation).

UI & Component Updates
ContentItemModal: Introduced a new modal with 'card' and 'transcript' modes, featuring transcript splitting via image.lineBreaks.
Storybook: Added comprehensive stories with MSW handlers for media sources and mock data providers.

Technical Improvements
Bitmap Handling: Formalized DecodedBitmap types and added getPlansFromDecodedBitmap to map binary data to human-readable membership plans.

Utility Migration (#1877): Replaced manual Buffer usage with the base64BytesToBigInt utility for improved performance and type safety.

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Replace the standalone fullscreen toggle with a controls bar that includes a "Show Regions" checkbox, and import BFormCheckbox. Add a reactive showOverlays ref and a watcher to toggle a new .overlay.hidden class on existing overlays; ensure new overlays respect the showOverlays state. Update overlay transition rules to include opacity and add styles for the controls bar and hidden overlays. Add i18n key "showRegions". These changes let users show/hide region overlays and improve controls styling.
Trim the inputDescription to 1000 characters before passing it to exporterService.create to avoid oversized payloads or backend validation errors. Uses this.inputDescription.slice(0, 1000) for the description field.
* solved import issues

* uid -> id

* filter facet updated

* histogram slider typing

* interface fixes

* ongoing issues

* timeline fixed

* fixed filter monitor

* wiki image URL

* refactor: update interface visibility and improve label checks in Topic model

* removing deprecated interface
* Add mock data and stories for Autocomplete component

* added mention pill

* updated ux
* Versions bump and legacy updates

* refactored suggestion model to fix collection suggestions
…prevent initialization order errors in production build
* add notifications in Insitution access app component

* Use URL token, show notifications, and i18n

Prefill the magic-link token from the URL and wire it into the MagicLinkForm (MagicLink.vue -> MagicLinkForm.vue). Add a token prop to the form and initialize form state from it. Replace alert UX in Login.vue with notification store calls and an isEmailConfirmed flag to toggle a confirmation Card and message. Add an i18n entry for the verify button label and related messages; improve error logging and user-facing error notifications.

* Create Reviewer.vue

* Add BSearchInputForm component and stories

Introduce a new BSearchInputForm Vue component and corresponding Storybook stories. The component wraps a BFormInput with an attached search button, uses Vuelidate for conditional validation (required, minLength, maxLength based on props), emits a 'submit' event with the query, and exposes its validation instance. Default props (debounce, placeholder, min/max lengths, search button label) and scoped input styles are provided. The Storybook file adds interactive controls and four example stories (Default, WithMinLength, Optional, FastDebounce) to demonstrate usage and parameters.

* Update ListOfFindResponseItems.vue

* Update SpecialMembershipRequestReviewItem.vue

* Update App.vue

* Update main.ts

* Add search, sorting & toggle modal to requests view

Split the layout into a main list and a sidebar and add search/sort controls and a status-toggle UI to the special membership requests view. Replaced the inline params with a computed userSpecialMembershipRequestsReviewsServiceParams (now includes limit, order_by and q driven by reactive refs), added BSearchInputForm and an order-by dropdown in the header, and wired performSearch to update the query. Each SpecialMembershipRequestReviewItem now exposes an actions slot with a "Toggle Status" button, backed by ToggleSpecialMembershipRequestStatusModal plus show/hide and itemToUpdate state. Also added related imports, i18n keys, and a Reviewer card in the sidebar. Note: default limit changed from 10 to 2 in the new params.

* Create ToggleSpecialMembershipRequestStatusModal.vue

* Add UserDropdown & institution access changes

Introduce a new UserDropdown component and use it in the institutions-access header (replacing the old Reviewer UI). Add InstitutionalAccessGroup constant and a userHasInstitutionAccess getter to the user store to detect institution access. Expose frontend version/branch/revision on window in main.ts for use in the dropdown, and add a small router debug log for JWT groups. Miscellaneous: adjust Card box-shadow, rename z-index class, remove Reviewer component and its usages, log successful magic-link authentication, fix some template formatting/whitespace in recommendation panels, and rename a query param from q to term in institutions-access view service params.

---------

Co-authored-by: Daniele Guido <1181642+danieleguido@users.noreply.github.com>
* handle new types of messages

* less reasoning/tool noise

* Enhance tooltip functionality and styling in Barista components
add corresponding story to test plurals and remove serif text. Adapt initialHeight in Ellipsis to match font size change
Refactor SearchFacets and HistogramSlider to migrate from FilterRange to FilterDynamicRange, supporting statistic-driven dynamic range facets (such as contentLength). Update prop names and add new bindings in SearchFacets. Rewrite FilterRange and HistogramSlider to script-setup Composition API, modernizing renders, i18n usage, state management, and D3 logic. HistogramSlider now features improved bucket sorting, full-width interactive zones, tooltip fixes, and clearer max-value labels. Tooltip and range logic preserve bucket bounds for dynamic facets. Various UI, accessibility, and template details addressed. Fixes issue #1889
…en (#1902)

Feature
auto-authenticate on magic link token, redirect to index on success

Changes
* add text-color-inherit and gap-N class CSS

* TermsOfUse is not always available

* add Role slot in UserDropdown

* Add default Slot in FeathersErrorManager to add custom description

* add action slot to add extra action buttons next tot the submit button

* Add role slot and logout handler to Header

Expose a role slot in the UserDropdown to display the institution contact point (i18n key `institutionContactpoint` -> "Reviewer") and wire a local logout() that calls userStore.logout via the component's @logout event

* enable logout and redirect


---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: danieleguido <1181642+danieleguido@users.noreply.github.com>
Agent-Logs-Url: https://github.com/impresso/impresso-frontend/sessions/b69ea5a1-5522-44a9-a46a-6c314c474df7
Import NewCollectionRequest and cast the payload passed to collectionsItemsService.create in CreateCollectionModal.vue to ensure the request matches the generated API type and avoid TypeScript type errors
* Update Index.vue

* Add InfoButton story and refactor props

Add a Storybook file for InfoButton with Default and WithSlot examples. Refactor InfoButton.vue to export InfoButtonProps, switch to defineProps<T>() with withDefaults for stronger typing, adjust offsetOptions typing and default, import Side as a type from @floating-ui/vue, and update faq import path. Also expose a default slot in the template to allow custom popover content and perform small import/cleanup changes.

* update content access

* flatten down the request access button

* Add success/already-requested UI to request modal

Show informational alerts when the user already requested access or after a successful submission, and hide the form in those cases. Track isSuccess and isAlreadyRequested state (computed) and treat a 409 conflict from the API as a success to reflect existing requests

* Normalize content item special-membership bits

Refactor content access handling and add plan bit metadata.

- Replace legacy common-bit logic with explicit bit-position computations: extract user and content bitmap bit positions, compute normalized special-membership bit positions (subtracting plan bits offset), and expose contentItemRequiresSpecialMembershipAccess and accessLevel computed properties.
- Update ContentItemAccessButton usage to accept normalized special-membership positions
- Remove several old helpers and bitstring/plan conversion code and eliminate stray junk line. Probably more to be removed.
- constants.ts: add PlanResearcherPlus entry (reserved for future use), introduce PlanBitPositions and MaxPlanBitPosition, and annotate reserved values.

These changes formalize plan-bit offsets and make special-membership bit handling explicit so UI components receive normalized bit indexes.

* Replace access list with check button and modal

Replace the v-for list of SpecialMembershipAccessItem components with a single button that triggers an on-demand access check and opens a SpecialMembershipRequestModal via Teleport. Add reactive state (isAccessChecked, isModalVisible, specialMembershipAccessItem) and a handleModalDismiss handler. Update getSpecialMembershipAccess to set the modal item (uses first returned item), warn if none, and adjust loading/access-checked flags. Remove the emit/requestAccess flow and the automatic check on mount — switching to explicit user-initiated checks and modal-based request UI.

* Update SpecialMembershipAccessItem.vue

* fix storybook

* fix copilot linting

* Add specialMemberships feature flag and UI guard

Introduce a new specialMemberships feature flag to the Features interface and default feature set (defaulted to disabled): the special-membership access UI only renders when the feature is enabled.

* Notify on special membership status update

Import the notifications store and use it to show feedback when toggling a special membership request status, and close the modal if any change is successfull

* Update index.ts

* Add special-membership route and re-auth guard

Add a /special-membership-request/:id route that prefetched the request via services.userSpecialMembershipRequestsReviews.get in beforeEnter, passes it as prop prefetchedItem, and logs success/failure. Add debug logging to the existing auth check beforeEach. Introduce a second beforeEach that re-authenticates the backend session via services.app.reAuthenticate(true) for protected routes and redirects to the Login route on failure.

* Dynamic request cards and modal routing

Replace separate pending/approved Card blocks with a v-for-driven cardViewsWithServiceParams computed array (pending & approved) to DRY the list rendering. Add route-based modal navigation: introduce useRouter, routeToModal to navigate to a SpecialMembershipRequest route, and a prefetchedItem prop + watcher to open the toggle-status modal when loaded via route. Increase list query limit to 50, update i18n keys for card titles/errors/empty messages, change card spacing (mt-4 -> my-4), and ensure hiding the modal returns to the Index route.

* Update ContentItemAccess.vue

* Update SpecialMembershipModal.vue

* Update UserArea.vue

---------

Co-authored-by: Daniele Guido <1181642+danieleguido@users.noreply.github.com>
@theorm theorm merged commit 1890086 into master Apr 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants