Commit Graph

70416 Commits

Author SHA1 Message Date
1cbd63a6a7 docs: fix markdown list formatting in README
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-27 05:41:12 +00:00
yv01p
03ea078822 Update and rename README.md to README.md.original 2025-12-27 05:41:12 +00:00
f1ff8ebaff docs: add workflow and context management documentation
Add project documentation covering:
- Agentic development workflow using Superpowers framework
- Context window management strategies for Claude Code CLI
- README with final report for Utf8ToAsciiConverter refactoring

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-27 05:41:12 +00:00
ff6d7c9683 docs(strings): add final report for Utf8ToAsciiConverter refactoring
Consolidates performance benchmarks, cyclomatic complexity analysis,
and test coverage comparison into a single comprehensive document.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 05:03:46 +00:00
45edc5916b docs(strings): fix Cyrillic mapping examples to match actual implementation
Update design doc and implementation plan to reflect that the actual
Cyrillic mappings use simplified transliterations for backward
compatibility with existing Umbraco URLs:
- Щ→"Sh" (not "Shch")
- Ц→"F" (not "Ts")

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 04:28:42 +00:00
5fd9a1f22c fix(strings): correct Cyrillic Щ mapping test expectation
The test expected "Shch" but the actual mapping in cyrillic.json
uses "Sh" for backward compatibility with existing Umbraco URLs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 04:22:44 +00:00
6adb654ec4 docs(strings): document normalization coverage and character mapping analysis
Added comprehensive analysis of Utf8ToAsciiConverter normalization coverage:
- Created Utf8ToAsciiConverterNormalizationCoverageTests to analyze which
  character mappings are covered by Unicode normalization vs require dictionary
- Generated utf8-converter-normalization-coverage.md documentation with:
  - Coverage statistics: 487/1308 (37.2%) covered by normalization
  - Detailed categorization of 821 dictionary-required characters
  - Breakdown by category: ligatures, special Latin, Cyrillic, punctuation,
    numbers, and extended Latin
  - Examples and rationale for each category
  - Language coverage analysis
  - Design rationale and future extensibility notes

Key findings:
- Normalization automatically handles common European accented characters
  (French, Spanish, German, Polish, Czech, Vietnamese, etc.)
- Dictionary required for: ligatures (Æ, Œ, ß, ff, fi), special Latin
  (Ð, Þ, Ø, Ł), Cyrillic transliteration, symbols, and numbers
- Two-tier approach reduces maintenance while providing 100% backward
  compatibility

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 04:00:42 +00:00
c5a09233aa perf(strings): add final benchmarks and performance comparison for Utf8ToAsciiConverter
- Create Utf8ToAsciiConverterBenchmarks.cs for new SIMD implementation
- Update baseline benchmarks to use OldUtf8ToAsciiConverter
- Document final benchmark results showing 12-157x speedup for ASCII
- Document 1.3-2.2x speedup for mixed content
- Document 60-100% memory reduction across all scenarios
- Create comprehensive comparison document with analysis

Results:
- Pure ASCII: 12-157x faster with zero allocations (fast-path optimization)
- Mixed content: 1.3-2.2x faster with 73% memory reduction
- New Span API: 95% memory reduction for advanced scenarios
- Worst case (Cyrillic): Similar performance, 60% memory reduction

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 03:47:31 +00:00
e8f1ad62d5 refactor(strings): update DefaultShortStringHelper to use IUtf8ToAsciiConverter via DI
- Add IUtf8ToAsciiConverter as constructor parameter to DefaultShortStringHelper
- Register ICharacterMappingLoader and IUtf8ToAsciiConverter as singletons in DI
- Add internal Instance property to Utf8ToAsciiConverterStatic for test compatibility
- Update 12 test files to pass converter instance

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 01:55:26 +00:00
bce8cba755 refactor(strings): replace Utf8ToAsciiConverter with SIMD-optimized implementation
- Rename original to Utf8ToAsciiConverterOriginal.cs (kept as reference, not compiled)
- Rename Utf8ToAsciiConverterNew to Utf8ToAsciiConverter
- Add Utf8ToAsciiConverterStatic with [Obsolete] static methods for backward compat
2025-12-13 01:28:03 +00:00
8d532696f0 refactor(strings): apply code review fixes to Utf8ToAsciiConverterNew
- Document backward compat rationale in cyrillic.json
- Extract magic number 4 to MaxExpansionRatio constant
- Add fail-fast assertion for missing golden mappings file
- Add edge case tests (control chars, whitespace, emoji, empty mappings)
- Handle original converter buffer overflow bugs in golden tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 01:09:33 +00:00
aed6e99246 test(strings): fix unit test expectations to match original behavior
Updates Cyrillic transliteration test cases to match the original
Utf8ToAsciiConverter behavior (Щ→Sh instead of Shch). The goal is
behavioral equivalence, not improved transliteration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 00:37:22 +00:00
dff0f68b39 feat(strings): add complete character mappings from golden test data
Adds missing character mappings to ensure behavioral equivalence with
original Utf8ToAsciiConverter implementation. Creates extended-mappings.json
with 1,213 additional characters covering punctuation, symbols, extended
Latin, Greek, and other Unicode blocks.

Also fixes 8 Cyrillic character mappings to match original behavior.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 00:31:26 +00:00
b9ba2bd043 fix(tests): configure golden test data to copy to output directory
Previously, the golden-mappings.json file in the TestData directory was not being copied to the output directory, causing golden tests to skip silently when the file couldn't be found at runtime.

Added ItemGroup configuration to Umbraco.Tests.UnitTests.csproj to copy all JSON files from Umbraco.Core\Strings\TestData\ to the output directory using PreserveNewest, ensuring the golden test data is available for test execution.

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 00:19:02 +00:00
1102b34e88 feat(strings): implement SIMD-optimized Utf8ToAsciiConverterNew with golden file tests
Implements Task 4 of the Utf8ToAsciiConverter refactor plan.

Key features:
- SIMD-optimized ASCII detection using SearchValues (AVX-512 capable)
- Unicode normalization for accented characters (FormD decomposition)
- FrozenDictionary for ligatures, Cyrillic, and special Latin mappings
- Span-based API for zero-allocation scenarios
- ArrayPool usage for temporary buffers
- Comprehensive test coverage (21 unit tests, all passing)

Implementation details:
- Fast path for pure ASCII input (no conversion needed)
- Dictionary lookup for special cases (ligatures, Cyrillic, etc.)
- Unicode normalization fallback for accented characters
- Control character stripping and whitespace normalization
- Proper surrogate pair handling

Test coverage:
- Null/empty string handling
- ASCII fast path verification
- Accented character normalization (café → cafe)
- Ligature expansion (Æ → AE, ß → ss, Œ → OE)
- Cyrillic transliteration (Москва → Moskva, Щ → Shch)
- Special Latin characters (Ł → L, Ø → O, Þ → TH)
- Span API for zero-allocation scenarios
- Mixed content handling

Golden file tests are included for regression testing against the original
implementation, though they require test data file configuration to run.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 00:13:11 +00:00
72dfd667c5 test(strings): add edge case tests for CharacterMappingLoader
Add comprehensive edge case testing for CharacterMappingLoader:
- Test priority override behavior (user mappings vs built-in)
- Test graceful handling of invalid user mapping files
- Test multi-character key warning logging
- Add logging for multi-character keys that are skipped

All tests pass successfully.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 00:01:52 +00:00
ca05d69be2 feat(strings): implement CharacterMappingLoader for JSON-based character mappings
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 23:52:41 +00:00
e7ac544a2f fix(strings): correct Cyrillic hard/soft sign mappings to match original behavior
The Cyrillic hard and soft signs (Ъ, ъ, Ь, ь) were incorrectly mapped to empty strings in cyrillic.json.
This fix restores the correct mappings from the original Utf8ToAsciiConverter implementation:
- Ъ (hard sign uppercase) → " (double quote)
- ъ (hard sign lowercase) → " (double quote)
- Ь (soft sign uppercase) → ' (single quote)
- ь (soft sign lowercase) → ' (single quote)

These mappings now match the golden-mappings.json reference file extracted from the original implementation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 23:42:58 +00:00
486aa6be81 feat(strings): add character mapping JSON files and golden test data
- Extract 1,308 character mappings from original Utf8ToAsciiConverter.cs switch statement
- Create golden-mappings.json test data file with complete mappings for regression testing
- Create ligatures.json (14 mappings: Æ, Œ, IJ, ß, ff, fi, fl, ffi, ffl, st ligatures)
- Create special-latin.json (14 mappings: Ð, Đ, Ħ, Ł, Ŀ, Ø, Þ, Ŧ and lowercase variants)
- Create cyrillic.json (66 mappings: Russian Cyrillic alphabet transliteration)
- Update Umbraco.Core.csproj to embed JSON files as resources
- Verified embedded resources in compiled DLL

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 23:38:33 +00:00
f750f37a32 feat(strings): add IUtf8ToAsciiConverter and ICharacterMappingLoader interfaces
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-12 23:31:53 +00:00
610976c41c perf(strings): establish Utf8ToAsciiConverter baseline benchmarks 2025-12-12 23:11:24 +00:00
Eric
475010148b Added 'mandatory' tag as a visual indicator for webhook events being … (#21075)
* Added 'mandatory' tag as a visual indicator for webhook events being mandatory.

* Map the webhook validation for no events specified to a specific API response problem details message.

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-12-05 15:44:33 +00:00
Laura Neto
830250b682 Docs: Update outdated branch references from contrib to main (#21072)
The contributing documentation still referenced the old `contrib` branch,
which was causing AI tools to incorrectly use it as the base branch for
comparisons. Updated all references to use `main` instead.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-05 14:24:40 +00:00
Nicklas Kramer
15b2cb7bd1 News Dashboard: Adding functionality to overwrite the cache duration (#21064)
* Adding functionality to overwrite the cacheduration for NewsDashboard

* Making the extension its own class, as to avoid having to inherit the entire service.

* Changing options to duration and adding interface
2025-12-05 10:43:43 +01:00
Andy Butland
5683ae9e4b oEmbed Providers: Updated the X oEmbed provider to use the x.com domain (closes #21052) (#21053)
* Updated the X oEmbed provider to use the x.com domain.

* Fixed issues raised in code review.
2025-12-05 10:38:58 +01:00
Andreas Zerbst
b6580ed40c E2E: QA updated current accceptance test project README to match current project (#21063)
* Updated readme

* Update tests/Umbraco.Tests.AcceptanceTest/README.md

Co-authored-by: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com>

* Update tests/Umbraco.Tests.AcceptanceTest/README.md

Co-authored-by: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com>

---------

Co-authored-by: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com>
2025-12-05 07:43:34 +00:00
Lotte Pitcher
61a69852e3 Dotnet new templates: Fix placeholders and port in umbraco-extension template (#20956)
* reset placeholders and port number in umbraco-extension template

* add readme instructions on how to test templates locally
2025-12-04 15:34:57 +01:00
Andy Butland
e6c7ef8904 Segments: Only validate segment values for cultures they are defined for (closes #21029) (#21033)
* Only validate segment values for cultures they are defined for.

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Integration test suppressions.

* Remove previous implementation using ISegmentService and rely on values provided in the model to determine segments with cultures.

* Omit null culture and remove passing but unrealistic tests.

* Fixed nullability error.

* Apply suggestions from code review

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>

* Relocated function following code review.

* Reset unchanged files.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
2025-12-04 12:54:44 +01:00
Rick Butterfield
effccef81d Collections: Add selection mode toggle in UmbTableElement update lifecycle (#20486)
* Add selection mode toggle in UmbTableElement update lifecycle

* Update src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Markup attribute consistency

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: leekelleher <leekelleher@gmail.com>
2025-12-04 11:25:19 +00:00
Engiber Lozada
88f04cd722 Document Tree: Fix undefined name for variants without fallback. (#21046)
* fix(backoffice): Tree menu item shows undefined for variant names without fallback

When a document variant has no name set and there's no fallback language
configured, the tree now falls back to the first variant with any name
instead of displaying "undefined".

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(backoffice): Show (Untitled) when no variant has a name

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-04 10:01:57 +00:00
Nicklas Kramer
26efa520bc Packaging: Fixing bad serialization for data types in packages (#21043)
* Changing data type serialization to datatype

* Moving and correcting comment
2025-12-04 10:52:23 +01:00
Jacob Overgaard
d8c03c426e Property Editors: Fix localization of user-provided labels (closes #20974) (#21045)
* fix: uses localization string() to localize user-provided labels

* fix: localizes placeholder as well

* Refinements to the Toggle input

The localizations can happen in the `config` setter,
then they don't need to re-get the localization each re-render.

Added a `when` directive to show/hide the label `<span>` tag.

Removed `_currentLabel` as unused.

* Refinements to the Textbox input

The localizations can happen in the `config` setter,
then they don't need to re-get the localization each re-render.

Refactored the `uui-input` attributes/properties.

* Refinements to the Number input

The localizations can happen in the `config` setter,
then they don't need to re-get the localization each re-render.

Refactored the `uui-input` attributes/properties.

* Update src/Umbraco.Web.UI.Client/src/packages/core/components/input-toggle/input-toggle.element.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/Umbraco.Web.UI.Client/src/packages/property-editors/text-box/property-editor-ui-text-box.element.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/Umbraco.Web.UI.Client/src/packages/property-editors/number/property-editor-ui-number.element.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Updates based on Copilot feedback

---------

Co-authored-by: leekelleher <leekelleher@gmail.com>
Co-authored-by: Lee Kelleher <leekelleher@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-04 09:20:33 +00:00
Lee Kelleher
455e7027a0 Block Grid: Sort mode (#20869)
* Added `icon-sort`

from Lucide's "arrow-down-up" icon.

* Added "Sort" package

with property action and context.

* Adds the "sort" property action and context to the Block Grid property

* [WIP] Observing sort mode toggle on Block Grid editor

* [WIP] Further work on Block Grid editor sort-mode

* Added "umb-sort-mode-toolbar" component

* Fixed typo of private method "renderNoting"

* Renamed "sort" property-action to "sort-mode"

* Corrected bad copypasta!

* Renamed "Sort" package to "Sorter"

to include the Sorter controller and maintain backwards-compatibility.

* Code updates based on @copilot feedback

* Fixed circular references

* Removed reference to "sorter/index.ts"

that I'd missed when relocating the package.

* Moved "sorter" back into "core" package

* Moved the "sort" property-action to a combined "property-actions" location

Fixed up other code, use of constants and manifest clarity.

* rename with claude code (#21036)

* rename with claude code

* include property action in name

* renaming

* Rename sortingMode to isSortMode in property sort context

Refactored property sort mode context and related components to use 'isSortMode'

* add jsdocs

* Update vite.config.ts

* no need to export as element

* add tests

* Ordered the tsconfig namespaces

* Reverted the relocation of the "sorter" controller files

* Import ordering

* Reverted some code style tweaks

* Renamed `sortingMode` to `isSortMode`

* Renamed `sortModeEnabled` to `isSortMode`

* Add tests for property sort mode action

* add js docs

---------

Co-authored-by: Mads Rasmussen <madsr@hey.com>
2025-12-04 09:03:58 +00:00
Jacob Overgaard
26679d17db build(deps): bumps monaco-editor from 0.54.0 to 0.55.1 (#21054) 2025-12-04 08:51:45 +00:00
Andreas Zerbst
7b462c17f9 E2E: QA updated flaky acceptance tests (#21012)
* Updated tests

* Updated tests

* Cleane up

* Bumped version of test helpers

* Updated tests

* Bumped test helpers
2025-12-04 08:26:47 +00:00
Jacob Overgaard
cb454372f2 Debug mode: Marks UMB-DEBUG cookie as HttpOnly and Secure (#21032)
* fix: sets profiling cookie to httpOnly and strict in order to run non-secure

* fix: adds extra message to explain when you can set a cookie

* fix: simplify cookie explanation comment in WebProfilerRepository

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: checks that the profiler is actually enabled and/or disabled and warns the user if that is not the case

* Update src/Umbraco.Web.UI.Client/src/assets/lang/en.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-04 08:55:39 +01:00
Jacob Overgaard
84fecd3521 Backoffice: CTRL+Click to open in a new tab should work on Linux (closes #21009) (#21027)
* fix: uses 'href' as property instead of attribute

* build: runs on PR to release branches

* Content references: Avoid requesting references for content that is not yet persisted server side (#21035)

* Avoid requesting references for content that is not yet persisted server side.

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor to use condition

* revert

* danish translations

* da translation

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>

* fix: CTRL+Click now opens links in new tab on Linux

The router's anchor click handler incorrectly assumed non-Windows
platforms use Meta (⌘) key for "open in new tab". This broke
CTRL+Click on Linux, which uses CTRL like Windows.

Changed detection from "is Windows" to "is Mac" so Linux correctly
uses CTRL+Click while Mac continues to use Meta+Click.

Also replaced deprecated navigator.platform with navigator.userAgent.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-12-03 15:03:18 +00:00
Jacob Overgaard
c35fcf181b Merge remote-tracking branch 'origin/release/17.0' 2025-12-03 15:10:47 +01:00
Andy Butland
86411e4ae3 Content references: Avoid requesting references for content that is not yet persisted server side (#21035)
* Avoid requesting references for content that is not yet persisted server side.

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor to use condition

* revert

* danish translations

* da translation

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
2025-12-03 12:25:06 +00:00
Bjarne Fyrstenborg
6104ae60ce Image cropper modal import missing component (#20651)
* Import missing component

* Handle nullable type

* Vertically center image

* Add minimum width for SVG without dimensions

* 100% height until max height

* 100% height minus top/bottom padding

* Revert "100% height minus top/bottom padding"

This reverts commit 67ada4c70f4b75dfcfa2b54ce139ec7465a17ce1.

* Revert "Handle nullable type"

This reverts commit 3130e11a4be83a18b5a7d8c1c24ee23c94d8765d.

* Removed flexbox style

* Fixed circular dependency

---------

Co-authored-by: leekelleher <leekelleher@gmail.com>
2025-12-02 17:07:01 +00:00
Lee Kelleher
bcec927e64 Modal: Remove unused uui-dialog element in modal component (#21030)
refactor(backoffice): remove unused uui-dialog element in modal component

Remove dead code that created an unnecessary uui-dialog element inside uui-modal-dialog. The uui-modal-dialog component already manages its own internal dialog element, making the manual creation redundant.

This aligns the dialog implementation with the sidebar implementation pattern, where container elements manage their own internal structure.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-02 18:04:19 +01:00
Andy Butland
5e1f758117 Merge branch 'release/17.0' 2025-12-02 15:57:09 +01:00
Andy Butland
b0e5cd768d Reverted accidental change to Program.cs. 2025-12-02 15:56:30 +01:00
Andy Butland
a9d8d13735 Merge branch 'release/17.0'
# Conflicts:
#	tests/Umbraco.Tests.Integration/CompatibilitySuppressions.xml
2025-12-02 15:42:32 +01:00
Niels Lyngsø
857f2900bb Segments: Fix for processing data for Segments-variants (#21018)
* refactor to load segments before processing incoming data

* clean up

* remove unused segment promise
2025-12-02 15:00:25 +01:00
Mads Rasmussen
876fc5fff9 Collection: Introduce Collection Item Ref extension type (#20994)
* Add entity collection item card extension type + default elements

* implement user collection item card

* fix selection events

* map to prop

* add prop/attr for href

* add support for which detail properties to show

* update type import

* Update src/Umbraco.Web.UI.Client/src/packages/core/collection/item/entity-collection-item-card/entity-collection-item-card.element.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* import card in correct file

* Fix event listener binding for selection events

* implement disabled property for collection item cards

* init commit of collection item ref extension

* fix imports

* add element interface

* Implement UmbEntityCollectionItemElement interface in item cards

Added the UmbEntityCollectionItemElement interface to document and user collection item card elements for improved type safety and consistency. Updated type exports to include the new interface.

* Update collection item ref to use uui-ref-node

Replaces the placeholder div with a uui-ref-node component, passing relevant item properties and event handlers. Adds dynamic icon rendering using umb-icon.

* Refactor entity collection item elements to use shared base

Introduces a new abstract base class for entity collection item elements, consolidating shared logic for card and ref variants. Updates card and ref element implementations to extend the new base, and refactors extension manifest interfaces for consistency. This improves maintainability and reduces code duplication.

* use class instead of magic string

* Use ifDefined for href in item card element

* Fix href attribute handling in collection item ref

* Make meta property optional in ManifestEntityCollectionItemBase

* Use ifDefined for href binding in document card

* Fix user card href binding with ifDefined

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-02 13:07:52 +00:00
Jacob Overgaard
c612fcc866 Localization: Adds termOrDefault() method to accept a fallback value (#20947)
* feat: adds `termOrDefault` to be able to safely fall back to a value if the translation does not exist

* feat: accepts 'null' as fallback

* feat: uses 'termOrDefault' to do a safe null-check and uses 'willUpdate' to contain number of re-renders

* feat: uses null-check to determine if key is set

* chore: accidental rename of variable

* uses `when()` to evaluate

* revert commits

* fix: improves the fallback mechanism

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-02 11:58:25 +00:00
Niels Lyngsø
c885922a64 Block: open-interaction only available when Content is Editable (#20833)
Only interactive-open area when editable
2025-12-02 10:57:17 +00:00
Mads Rasmussen
1cdc15efda Collection: Introduce Collection Item Card extension type (#20954)
* Add entity collection item card extension type + default elements

* implement user collection item card

* fix selection events

* map to prop

* add prop/attr for href

* add support for which detail properties to show

* update type import

* Update src/Umbraco.Web.UI.Client/src/packages/core/collection/item/entity-collection-item-card/entity-collection-item-card.element.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* import card in correct file

* Fix event listener binding for selection events

* implement disabled property for collection item cards

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-02 10:43:43 +00:00
Kenn Jacobsen
657ccbd104 Delivery API: Retain the Delivery API login redirect behavior in .NET 10 (closes #21000) (#21023)
* Retain the Delivery API login redirect behavior in .NET 10

* Retrofit fix for backwards compatability
2025-12-02 11:02:18 +01:00