@orangelogic/design-system 2.179.0 → 2.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/library/chunks/{asset-link-format.DQZgnnXO.js → asset-link-format.CmV7jHbC.js} +5 -5
  2. package/library/chunks/{button.Bj14A10c.js → button.BijVCm3v.js} +1 -1
  3. package/library/chunks/{color-swatch-group.C-N_nK1D.js → color-swatch-group.Zia_zbwS.js} +18 -15
  4. package/library/chunks/{confirm-popover.Ck_3eEK2.js → confirm-popover.DgIbglt-.js} +2 -2
  5. package/library/chunks/{dialog.CCEQCLHm.js → dialog.BD012ZUN.js} +1 -1
  6. package/library/chunks/{document-viewer.BvlSkHYI.js → document-viewer.BzC8HrV6.js} +5 -5
  7. package/library/chunks/{folder-select.CXrAwaij.js → folder-select.D2scByIr.js} +4 -4
  8. package/library/chunks/{icon-button.DgNohAbE.js → icon-button.CBZkhhs8.js} +1 -1
  9. package/library/chunks/{icon.D5iM9wXS.js → icon.BTuMIrIm.js} +1 -1
  10. package/library/chunks/{image.mG-NXUWX.js → image.CCDdKXjt.js} +2 -2
  11. package/library/chunks/{input.CftMH3MT.js → input.B5AHlTl-.js} +1 -1
  12. package/library/chunks/{markdown.Cd1wPPGL.js → markdown.rDppL64E.js} +2 -1
  13. package/library/chunks/{option.Bvyag0r1.js → option.CmvB93ks.js} +1 -1
  14. package/library/chunks/{pagination.BP_FAMg6.js → pagination.CMjet0v-.js} +4 -4
  15. package/library/chunks/{tab-group.CQUXoNxc.js → tab-group.DH3ppGSh.js} +2 -2
  16. package/library/chunks/{tree.B0-6Ny9b.js → tree.CgBxt5my.js} +1 -1
  17. package/library/chunks/url.B17OsCqV.js +76 -0
  18. package/library/components/alert.js +1 -1
  19. package/library/components/animated-image.js +1 -1
  20. package/library/components/asset-link-format.js +2 -2
  21. package/library/components/atoms.js +13 -13
  22. package/library/components/audio.js +1 -1
  23. package/library/components/avatar.js +1 -1
  24. package/library/components/border-input-group.js +1 -1
  25. package/library/components/breadcrumb.js +1 -1
  26. package/library/components/button.js +2 -2
  27. package/library/components/checkbox.js +1 -1
  28. package/library/components/color-picker.js +3 -3
  29. package/library/components/color-swatch-group.js +1 -1
  30. package/library/components/confirm-popover.js +3 -3
  31. package/library/components/copy-button.js +1 -1
  32. package/library/components/corner-position-input-group.js +2 -2
  33. package/library/components/date-calendar.js +1 -1
  34. package/library/components/details.js +1 -1
  35. package/library/components/dialog.js +2 -2
  36. package/library/components/document-viewer.js +3 -3
  37. package/library/components/drawer.js +1 -1
  38. package/library/components/dropdown.js +1 -1
  39. package/library/components/dynamic-select.js +3 -3
  40. package/library/components/element-clamp.js +1 -1
  41. package/library/components/file-on-demand.js +10 -10
  42. package/library/components/folder-select.js +4 -4
  43. package/library/components/icon-button.js +2 -2
  44. package/library/components/icon.js +1 -1
  45. package/library/components/image-comparer.js +1 -1
  46. package/library/components/image.js +3 -3
  47. package/library/components/input.js +2 -2
  48. package/library/components/line-clamp.js +1 -1
  49. package/library/components/markdown.js +2 -2
  50. package/library/components/masonry.js +2 -2
  51. package/library/components/menu-item.js +1 -1
  52. package/library/components/molecules.js +2 -2
  53. package/library/components/option.js +2 -2
  54. package/library/components/organisms.js +2 -2
  55. package/library/components/padding-input-group.js +1 -1
  56. package/library/components/pagination.js +5 -5
  57. package/library/components/progress-ring.js +5 -5
  58. package/library/components/radio.js +2 -2
  59. package/library/components/rating.js +1 -1
  60. package/library/components/select.js +2 -2
  61. package/library/components/shadow-input-group.js +1 -1
  62. package/library/components/share-option-list.js +1 -1
  63. package/library/components/sidebar.js +2 -2
  64. package/library/components/size-input-group.js +2 -2
  65. package/library/components/step.js +1 -1
  66. package/library/components/stepper-wizard.js +1 -1
  67. package/library/components/tab-group.js +3 -3
  68. package/library/components/tab.js +1 -1
  69. package/library/components/tag.js +1 -1
  70. package/library/components/tree-item.js +2 -2
  71. package/library/components/tree.js +1 -1
  72. package/library/components/typeface.js +1 -1
  73. package/library/components/types.js +23554 -23284
  74. package/library/components/video.js +1 -1
  75. package/library/package.json +1 -1
  76. package/library/packages/events/src/cx-space-create.d.ts +6 -0
  77. package/library/packages/events/src/cx-space-delete.d.ts +6 -0
  78. package/library/packages/events/src/cx-space-select.d.ts +9 -0
  79. package/library/packages/events/src/cx-space-settings.d.ts +6 -0
  80. package/library/packages/events/src/events.d.ts +4 -0
  81. package/library/packages/hybrid/table-core/src/table/components/table-toolbar/table-toolbar.d.ts +2 -0
  82. package/library/packages/hybrid/table-core/src/table/table.d.ts +2 -0
  83. package/library/packages/organisms/src/asset-transformation-dialog/asset-transformation-dialog.d.ts +7 -1
  84. package/library/packages/organisms/src/content-builder-viewer/content-builder-viewer.d.ts +43 -0
  85. package/library/packages/organisms/src/index.d.ts +2 -0
  86. package/library/packages/organisms/src/space-selector/space-selector.d.ts +99 -0
  87. package/library/packages/organisms/src/space-selector/space-selector.styles.d.ts +2 -0
  88. package/library/packages/services/src/api/teamspace/teamspace.d.ts +13 -1
  89. package/library/packages/types/src/content-builder.d.ts +2 -0
  90. package/library/packages/utils/src/url/url.d.ts +24 -0
  91. package/library/react-web-component.d.ts +108 -4
  92. package/library/utils.js +187 -185
  93. package/package.json +1 -1
  94. package/library/chunks/url.Bd5rq4G0.js +0 -48
@@ -1,7 +1,7 @@
1
1
  import { _ as kd, a as Sa, b as Be, c as Je } from "../chunks/inheritsLoose.BuSn_CvZ.js";
2
2
  import { c as ps, a as Bn } from "../chunks/_commonjsHelpers.DQNKXVTB.js";
3
3
  import { r as Sb } from "../chunks/___vite-browser-external_commonjs-proxy.C2tf3HsQ.js";
4
- import { C as Cb } from "../chunks/image.mG-NXUWX.js";
4
+ import { C as Cb } from "../chunks/image.CCDdKXjt.js";
5
5
  import Mb from "./resize-observer.js";
6
6
  import { r as Db, R as Pb, a as Rp, b as Lb } from "../chunks/resizable-component.styles.CAfXABBc.js";
7
7
  import { c as Rb } from "../chunks/component.styles.CRO4Odto.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orangelogic/design-system",
3
3
  "type": "module",
4
- "version": "2.179.0",
4
+ "version": "2.181.0",
5
5
  "license": "UNLICENSED",
6
6
  "types": "library/types.d.ts",
7
7
  "scripts": {
@@ -0,0 +1,6 @@
1
+ export type CxSpaceCreateEvent = CustomEvent<Record<PropertyKey, unknown>>;
2
+ declare global {
3
+ interface GlobalEventHandlersEventMap {
4
+ 'cx-space-create': CxSpaceCreateEvent;
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ export type CxSpaceDeleteEvent = CustomEvent<Record<PropertyKey, unknown>>;
2
+ declare global {
3
+ interface GlobalEventHandlersEventMap {
4
+ 'cx-space-delete': CxSpaceDeleteEvent;
5
+ }
6
+ }
@@ -0,0 +1,9 @@
1
+ export type CxSpaceSelectEvent = CustomEvent<{
2
+ module: string;
3
+ url: string;
4
+ }>;
5
+ declare global {
6
+ interface GlobalEventHandlersEventMap {
7
+ 'cx-space-select': CxSpaceSelectEvent;
8
+ }
9
+ }
@@ -0,0 +1,6 @@
1
+ export type CxSpaceSettingsEvent = CustomEvent<Record<PropertyKey, unknown>>;
2
+ declare global {
3
+ interface GlobalEventHandlersEventMap {
4
+ 'cx-space-settings': CxSpaceSettingsEvent;
5
+ }
6
+ }
@@ -191,6 +191,10 @@ export * from './cx-shadow-input-group-change';
191
191
  export * from './cx-share-option-list-item-selected';
192
192
  export * from './cx-show';
193
193
  export * from './cx-slide-change';
194
+ export * from './cx-space-create';
195
+ export * from './cx-space-delete';
196
+ export * from './cx-space-select';
197
+ export * from './cx-space-settings';
194
198
  export * from './cx-special-characters-insert';
195
199
  export * from './cx-start';
196
200
  export * from './cx-swatch-add';
@@ -34,6 +34,8 @@ import { default as CxTableSavedSearchDropdown } from './table-saved-search-drop
34
34
  *
35
35
  * @cssproperty [--dropdown-filter-icon-color=currentColor] - Color of the icon in a dropdown filter trigger.
36
36
  * @cssproperty [--dropdown-filter-icon-size=var(--cx-font-size-large)] - Size of the icon in a dropdown filter trigger. Matches the 20px icon in the design; without it the icon inherits 16px from cx-button.
37
+ * @cssproperty [--search-border-width-focus=0] - Thickness added around the `can-search` search box while it has focus. Drawn outside the box so the input never resizes. Applies to that input only.
38
+ * @cssproperty [--search-border-color-focus=var(--cx-color-primary-600)] - Border color of the `can-search` search box while it has focus. Applies to that input only.
37
39
  */
38
40
  export default class CxTableToolbar extends CortexElement {
39
41
  static readonly styles: CSSResultGroup;
@@ -65,6 +65,8 @@ import { CxTableColumnEditor, CxTableFooter, CxTableHeaderMenu, CxTableRowAction
65
65
  * @cssproperty [--table-active-cell-border-color=var(--cx-color-neutral-200)] - The border color of the active/hover range overlay cell outline.
66
66
  * @cssproperty [--table-selected-cell-border-width=1px] - The border width of the active selected cell.
67
67
  * @cssproperty [--table-selected-cell-border-style=solid] - The border style of the active selected cell.
68
+ * @cssproperty [--search-border-width-focus=0] - Thickness added around the `can-search` search box while it has focus. Drawn outside the box so the input never resizes. Applies to that input only.
69
+ * @cssproperty [--search-border-color-focus=var(--cx-color-primary-600)] - Border color of the `can-search` search box while it has focus. Applies to that input only.
68
70
  * @slot add-action - Passed through to `cx-table-toolbar`'s `add-action` slot. Replaces the default add button when provided; when empty the toolbar's default add button (controlled by `can-add`) is rendered unchanged.
69
71
  *
70
72
  * @event {{ args: any[] }} cx-table.[event_name] - Emitted when the event with such name is emitted on the table.
@@ -21,7 +21,7 @@ import { default as CxAssetLinkFormat } from '../asset-link-format/asset-link-fo
21
21
  *
22
22
  * @event cx-asset-transformation-dialog-cancel - Emitted when the user closes or cancels the dialog.
23
23
  * @event {{ detail: { format: string; transformations: Transformation[] } }} cx-asset-transformation-dialog-confirm - Emitted when the user saves, with the selected proxy id and transformation array.
24
- * @event cx-asset-transformation-dialog-delete - Emitted when the user clears the saved transformations via the delete button.
24
+ * @event cx-asset-transformation-dialog-delete - Emitted when the user resets the format to its default and clears the saved transformations via the reset button.
25
25
  */
26
26
  export default class CxAssetTransformationDialog extends CortexElement {
27
27
  static readonly styles: import('lit').CSSResult[];
@@ -44,6 +44,8 @@ export default class CxAssetTransformationDialog extends CortexElement {
44
44
  private apiGetAuthorizedObjects;
45
45
  private apiGetAvailableProxies;
46
46
  private apiSearchAssets;
47
+ /** Maps proxy format codes to human-readable labels for the settings-row format display. */
48
+ private formatLabels;
47
49
  /** Stores the accessible trigger element for focus return and ARIA updates. */
48
50
  private accessibleTrigger;
49
51
  private readonly triggerSlot;
@@ -85,6 +87,8 @@ export default class CxAssetTransformationDialog extends CortexElement {
85
87
  /** False while the authorization check is in flight or after it confirms no access. */
86
88
  private canAccess;
87
89
  private get hasTransformations();
90
+ /** Resolves the selected format code to its proxy label, falling back to the raw code. */
91
+ private get resolvedFormatLabel();
88
92
  handleAssetIdChange(): Promise<void>;
89
93
  handleCanAccessChange(): void;
90
94
  handleOpenChange(): void;
@@ -107,6 +111,8 @@ export default class CxAssetTransformationDialog extends CortexElement {
107
111
  private handleSave;
108
112
  private handleCancel;
109
113
  private handleAssetLinkFormatShow;
114
+ /** Shows the selected format's resolved label in the settings row, matching cx-asset-format-picker. */
115
+ private renderFormatDisplay;
110
116
  private renderTriggerSlot;
111
117
  render(): import('lit').TemplateResult<1>;
112
118
  }
@@ -0,0 +1,43 @@
1
+ import { default as CortexLightElement } from '../../../base/src/cortex-light-element.ts';
2
+
3
+ /**
4
+ * @summary Wraps content-builder output — read mode and the editor canvas alike —
5
+ * supplying its blocks with data they would otherwise each fetch for themselves.
6
+ *
7
+ * @description Renders no UI. Scans its light-DOM children for blocks linking to a
8
+ * space, fetches the space list once, and assigns it as `spaces`. Blocks skip their
9
+ * own fetch whenever an ancestor supplies it, so they must sit inside this element
10
+ * for that to apply — in the editor that means inside the canvas document.
11
+ *
12
+ * They re-resolve their stored space URL because it breaks when the space moves
13
+ * domain; doing it per block would repeat one identical request each and race this
14
+ * assignment.
15
+ */
16
+ export default class CxContentBuilderViewer extends CortexLightElement {
17
+ #private;
18
+ /** Blocks already populated by a previous scan; skipped on re-scans. */
19
+ private readonly processedBlocks;
20
+ private apiGetTeamSpaceSpaceList;
21
+ constructor();
22
+ createRenderRoot(): this;
23
+ connectedCallback(): void;
24
+ disconnectedCallback(): void;
25
+ /** Blocks arrive in bursts as the page parses, so scans are collapsed. */
26
+ private scheduleScan;
27
+ private scanAndFetch;
28
+ /**
29
+ * One request per element, shared by every scan — authoring mutates the tree
30
+ * constantly, and each burst would otherwise refetch the same list.
31
+ *
32
+ * A failed lookup is not retained, so it is retried on the next scan instead of
33
+ * disabling resolution for the rest of the session.
34
+ */
35
+ private fetchSpaceList;
36
+ private collectPendingBlocks;
37
+ private applySpaceList;
38
+ }
39
+ declare global {
40
+ interface HTMLElementTagNameMap {
41
+ 'cx-content-builder-viewer': CxContentBuilderViewer;
42
+ }
43
+ }
@@ -14,11 +14,13 @@ export { default as CxComment } from './comment/comment';
14
14
  export { default as CxCommentV1 } from './_v1/comment-v1/comment-v1';
15
15
  export { default as CxDamCustomToolbarButtonsEditor } from './dam-custom-toolbar-buttons-editor/dam-custom-toolbar-buttons-editor';
16
16
  export { default as CxContentBuilder } from './content-builder/content-builder';
17
+ export { default as CxContentBuilderViewer } from './content-builder-viewer/content-builder-viewer';
17
18
  export { default as CxDownloader } from './downloader/downloader';
18
19
  export { default as CxFileOnDemand } from './file-on-demand/file-on-demand';
19
20
  export { default as CxFindAndReplace } from './find-and-replace/find-and-replace';
20
21
  export { default as CxLightbox } from './lightbox/lightbox';
21
22
  export { default as CxListEditor } from './list-editor/list-editor';
23
+ export { default as CxSpaceSelector } from './space-selector/space-selector';
22
24
  export { default as CxSpecialCharactersDialog } from './special-characters-dialog/special-characters-dialog';
23
25
  export { default as CxTemplateSwitcher } from './template-switcher/template-switcher';
24
26
  export { default as CxTextToSpeech } from './text-to-speech/text-to-speech';
@@ -0,0 +1,99 @@
1
+ import { default as CxButton } from '../../../atoms/src/components/button/button.ts';
2
+ import { default as CxDropdown } from '../../../atoms/src/components/dropdown/dropdown.ts';
3
+ import { default as CxIcon } from '../../../atoms/src/components/icon/icon.ts';
4
+ import { default as CxIconButton } from '../../../atoms/src/components/icon-button/icon-button.ts';
5
+ import { default as CxMenu } from '../../../atoms/src/components/menu/menu.ts';
6
+ import { default as CxMenuItem } from '../../../atoms/src/components/menu-item/menu-item.ts';
7
+ import { default as CxMenuSection } from '../../../atoms/src/components/menu-section/menu-section.ts';
8
+ import { default as CxSpace } from '../../../atoms/src/components/space/space.ts';
9
+ import { default as CxSpinner } from '../../../atoms/src/components/spinner/spinner.ts';
10
+ import { default as CortexElement } from '../../../base/src/cortex-element.ts';
11
+ import { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
12
+
13
+ /**
14
+ * @summary The space switcher in the page header.
15
+ *
16
+ * The list of spaces it offers costs a search plus a permission trim on the server, and none of it
17
+ * is on screen until the user asks for it - so the list is fetched on first open rather than at page
18
+ * render. In `inline` mode there is no open event to hang that on (the menu is dropped straight into
19
+ * a drawer panel), so visibility drives the fetch instead.
20
+ *
21
+ * Switching, creating, editing and deleting a space stay server-side flows: this component reports
22
+ * the intent as an event and the host decides what to do with it.
23
+ *
24
+ * @slot (default) - Entries the host renders above the space list, e.g. a drawer's "Back" item.
25
+ *
26
+ * @event cx-space-select - The user picked a different space. Detail carries its module and URL.
27
+ * @event cx-space-create - The user asked for a new space.
28
+ * @event cx-space-settings - The user asked for the current space's settings.
29
+ * @event cx-space-delete - The user asked to delete the current space.
30
+ *
31
+ * @dependency cx-button
32
+ * @dependency cx-dropdown
33
+ * @dependency cx-icon
34
+ * @dependency cx-icon-button
35
+ * @dependency cx-menu
36
+ * @dependency cx-menu-item
37
+ * @dependency cx-menu-section
38
+ * @dependency cx-space
39
+ * @dependency cx-spinner
40
+ */
41
+ export default class CxSpaceSelector extends CortexElement {
42
+ #private;
43
+ static readonly styles: CSSResultGroup;
44
+ static readonly dependencies: {
45
+ 'cx-button': typeof CxButton;
46
+ 'cx-dropdown': typeof CxDropdown;
47
+ 'cx-icon': typeof CxIcon;
48
+ 'cx-icon-button': typeof CxIconButton;
49
+ 'cx-menu': typeof CxMenu;
50
+ 'cx-menu-item': typeof CxMenuItem;
51
+ 'cx-menu-section': typeof CxMenuSection;
52
+ 'cx-space': typeof CxSpace;
53
+ 'cx-spinner': typeof CxSpinner;
54
+ };
55
+ /** Whether the user may create a space. */
56
+ canCreate: boolean;
57
+ /** Whether the user may delete the space that is open. */
58
+ canDelete: boolean;
59
+ /** Whether the user may edit the space that is open. */
60
+ canEdit: boolean;
61
+ /** Label of the create entry. Translated by the host. */
62
+ createLabel: string;
63
+ /** Module of the space that is open, so it can be ticked and made unselectable. */
64
+ currentSpaceId: string;
65
+ /** Name of the space that is open, shown on the trigger. */
66
+ currentSpaceName: string;
67
+ /** Label of the delete entry. Translated by the host. */
68
+ deleteLabel: string;
69
+ /** A space that must never be offered, i.e. the default CMS space. */
70
+ excludedSpaceId: string;
71
+ /** Message shown when the user has no space to switch to. Translated by the host. */
72
+ emptyLabel: string;
73
+ /**
74
+ * `dropdown` renders a trigger that opens the list in a panel (page header).
75
+ * `inline` renders the bare menu, for a host that reveals it itself (right drawer).
76
+ */
77
+ mode: 'dropdown' | 'inline';
78
+ /**
79
+ * `always` keeps the panel available at every width. `desktop-only` hides it below the desktop
80
+ * breakpoint, for the headers whose trigger opens the right drawer on smaller screens.
81
+ */
82
+ panelVisibility: 'always' | 'desktop-only';
83
+ /** Label of the settings entry. Translated by the host. */
84
+ settingsLabel: string;
85
+ /** Icon of the trigger. */
86
+ triggerIcon: string;
87
+ /** Accessible name of the trigger, used when it renders as an icon button. */
88
+ triggerLabel: string;
89
+ /** `button` shows the space name, `icon-button` is the compact header variant. */
90
+ triggerVariant: 'button' | 'icon-button';
91
+ /** Whether the space list is currently being fetched. */
92
+ private loading;
93
+ /** Spaces available to switch to, once fetched. */
94
+ private spaces;
95
+ connectedCallback(): void;
96
+ disconnectedCallback(): void;
97
+ protected updated(changedProperties: PropertyValues): void;
98
+ render(): TemplateResult;
99
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: import('lit').CSSResult;
2
+ export default _default;
@@ -17,9 +17,21 @@ export declare function apiGetTeamSpaceSpaceListOptions({ searchTerm, }: {
17
17
  }[];
18
18
  hasMore: boolean;
19
19
  }>;
20
- export declare function apiGetPagesAndLinks({ forcedPageId, parentId, searchTerm, start, }: {
20
+ /**
21
+ * Lists the current space's pages and links, one folder at a time by default.
22
+ * Pass `limit: null` to drop the page cap and `seeThru: true` to flatten the
23
+ * hierarchy regardless of `searchTerm`.
24
+ */
25
+ export declare function apiGetPagesAndLinks({ forcedPageId, limit, parentId, searchTerm, seeThru, start, }: {
21
26
  forcedPageId?: string;
27
+ limit?: null | number;
22
28
  parentId: string;
23
29
  searchTerm: string;
30
+ seeThru?: boolean;
24
31
  start: number;
25
32
  }): Promise<GetPagesAndLinksResponse>;
33
+ /**
34
+ * The space's whole page/link catalog, flattened and uncapped, for looking up
35
+ * an item by ID regardless of which folder it now lives in.
36
+ */
37
+ export declare function apiGetAllPagesAndLinks(): Promise<(import('../../../../types/src/content-builder').Page | import('../../../../types/src/content-builder').Link)[]>;
@@ -268,6 +268,8 @@ export type TeamSpace = {
268
268
  description: string;
269
269
  module: string;
270
270
  name: string;
271
+ /** Relative URL of the space. Falls back as a label for a space with no name. */
272
+ url?: string;
271
273
  };
272
274
  export declare enum TeamSpaceRole {
273
275
  Administrator = "Administrator",
@@ -7,6 +7,30 @@
7
7
  * @param origin - Origin to compare against (defaults to `window.location.origin`).
8
8
  */
9
9
  export declare function toRelativeUrl(url: string | null | undefined, origin?: string): string | undefined;
10
+ /**
11
+ * Path of a URL, without origin, trailing slash, query or hash — a key for
12
+ * matching two links that may be served from different domains. Accepts
13
+ * absolute and relative URLs; returns an empty string for falsy input.
14
+ */
15
+ export declare function toUrlPathKey(url: string | null | undefined): string;
16
+ /**
17
+ * Current URL of the space a stored URL points at, given the live space list.
18
+ *
19
+ * A stored space URL is a snapshot from when it was picked, so it breaks once
20
+ * the space is served from another domain. Spaces carry no id, so a moved space
21
+ * can only be identified by its path — a heuristic, applied conservatively:
22
+ *
23
+ * - a URL still matching a live space is returned unchanged;
24
+ * - otherwise its path is matched, which is what repairs a moved space;
25
+ * - a path claimed by several spaces identifies none of them, and a root-level
26
+ * URL has no path to match on, so both are left unresolved.
27
+ *
28
+ * Returns `undefined` for anything it cannot place, so callers keep the stored
29
+ * URL rather than pointing the link somewhere else.
30
+ */
31
+ export declare function resolveSpaceUrl(storedUrl: string | null | undefined, spaces: Array<{
32
+ absoluteURL: string;
33
+ }>): string | undefined;
10
34
  export declare function appendProtocol(inputUrl: string, defaultProtocol?: string, ignoreRelativeUrl?: boolean): string;
11
35
  /**
12
36
  * Appends a query parameter to a URL, using `&` when the URL already has a