Add heuristics for exposing fields/props to the content-entity-reference selection UI
### Overview
When a Code Component Developer uses the `content-entity-reference` "Typed Data browser" UI (added in #3585354) to pick which entity data a prop consumes, the picker offers fields and properties it should not:
- **Internal metadata** that storage would reject anyway (e.g. the `revision_default` / `workspace` base fields).
- **A duplicated image URL**: the `image` field surfaces *"Resolved image URL with ?alternateWidths query parameter"* twice, because the `src` and `src_with_alternate_widths` computed properties share that label. `src` exists precisely as the developer-facing alias; `src_with_alternate_widths` is the internal implementation detail.
- **Advanced translation/revision metadata** a developer should not select: "Default Translation", "Revision translation affected", "Translation source", "Translation outdated", "Revision log message".
- **Unprocessed formatted text**: formatted text fields (`text`, `text_long`, `text_with_summary`) exposed the raw, unfiltered `value`/`format` (and `summary`) alongside the already-processed `processed`/`summary_processed` — the frontend should only ever receive text that has already been run through the configured input format.
- **A raw, non-navigable URI**: some field types expose a raw URI representation that a browser cannot use directly — the `link` field's raw `uri` (e.g. `entity:node/1`, `internal:/node`) and a referenced file's raw stream-wrapper URI (e.g. `public://image.jpg`) — alongside an already-resolved, browser-accessible URL.
- **A crash-inducing datetime property**: picking a datetime field's computed `date` (or a date range's `start_date`/`end_date`) — a `DrupalDateTime` object, not a string — crashed rendering with a `preg_match()` TypeError.
The picker should only offer data a developer can meaningfully consume — the same intent as `PropSourceSuggester::isConsideredIrrelevant()`.
### Proposed resolution
Two distinct heuristics are needed; they do not overlap:
1. **Omit internal properties** — the rule agreed in [!1112 (note 1077113)](https://git.drupalcode.org/project/canvas/-/merge_requests/1112#note_1077113): drop any field/property marked internal (`DataDefinitionInterface::isInternal()`), while keeping non-internal computed properties (e.g. the image field's `src`). In practice this rule had a blind spot: `isInternal()` cannot distinguish an explicit internal mark from the value it defaults to for computed properties, so a property that is *both* computed *and* explicitly marked internal (like the datetime `date` property) was never actually caught — this is what caused the crash above. The rule now inspects the underlying definition directly to tell the two cases apart, and the equivalent storage-side validation had the same blind spot and is fixed the same way, so saving an expression that targets such a property is rejected, not just hidden.
2. **Omit unwanted non-internal base fields** — the translation/revision metadata listed above is **not** marked internal in core, so the rule above cannot reach it. A separate heuristic hides these.
For the duplicated image URL: `src` stays exposed, and `src_with_alternate_widths` is hard-coded hidden from the picker (rather than waiting on #3591648, which will remove it for good). `src` is relabeled "Image URL" instead of inheriting `src_with_alternate_widths`'s implementation-detail label.
For formatted text fields: the raw `value`/`format`/`summary` properties are hidden, keeping only the computed `processed`/`summary_processed`.
For non-navigable URIs: any property whose value is a URI is hidden unless it is guaranteed to resolve to an absolute HTTP(S) URL — the only kind directly usable in a browser. This generalizes what was originally just a `link`-field-specific check, and additionally catches a referenced file's raw stream-wrapper URI, which the link-specific version missed. Storage gained a matching validation rule, so such an expression cannot be saved by any other route either (e.g. hand-authored, or produced by a different feature that also composes these expressions).
For datetime fields: the computed `DrupalDateTime`-object properties (`date`, `start_date`, `end_date`) are hidden by the internal-property fix above, which is what makes them unreachable — no separate datetime-specific guard is needed.
### User interface changes
The `content-entity-reference` selection UI no longer lists internal fields, the duplicate `src_with_alternate_widths` image URL property, advanced translation/revision metadata, a formatted text field's raw `value`/`format`/`summary`, a non-navigable raw URI (a link field's raw `uri`, or a referenced file's raw stream-wrapper URI), or a datetime field's computed `DrupalDateTime` properties — only data a developer can meaningfully consume. The image field's URL property is shown as "Image URL"; the link field's resolved URL is shown as "Resolved URL".
### API changes
None (internal HTTP API for the Canvas UI only).
---
Raised in [!1112 (note 1080490)](https://git.drupalcode.org/project/canvas/-/merge_requests/1112#note_1080490); priority and the concrete items above were set following @lauriii's review feedback in [!1182 (note 1259193)](https://git.drupalcode.org/project/canvas/-/work_items/3591669#note_1259193). The formatted text, link, and datetime heuristics were added following further review feedback in [!1289 (note 1372044)](https://git.drupalcode.org/project/canvas/-/merge_requests/1289#note_1372044); the internal-property blind spot and the raw-URI generalization were found and fixed following @wimleers's review feedback on the same MR.
issue