diff --git a/src/components/DocumentationTopic.vue b/src/components/DocumentationTopic.vue
index d86a3c430..644778253 100644
--- a/src/components/DocumentationTopic.vue
+++ b/src/components/DocumentationTopic.vue
@@ -16,6 +16,7 @@
:enhanceBackground="enhanceBackground"
:shortHero="shortHero"
:shouldShowLanguageSwitcher="shouldShowLanguageSwitcher"
+ :iconOverride="references[pageIcon]"
>
@@ -270,6 +271,10 @@ export default {
type: Object,
required: false,
},
+ pageImages: {
+ type: Array,
+ required: false,
+ },
},
provide() {
// NOTE: this is not reactive: if this.references change, the provided value
@@ -350,6 +355,15 @@ export default {
|| (primaryContentSections && primaryContentSections.length)
),
tagName: ({ isSymbolDeprecated }) => (isSymbolDeprecated ? 'Deprecated' : 'Beta'),
+ /**
+ * Finds the page icon in the `pageImages` array
+ * @param {Array} pageImages
+ * @returns {String|null}
+ */
+ pageIcon: ({ pageImages = [] }) => {
+ const icon = pageImages.find(({ type }) => type === 'icon');
+ return icon ? icon.identifier : null;
+ },
},
methods: {
normalizePath(path) {
diff --git a/src/components/DocumentationTopic/DocumentationHero.vue b/src/components/DocumentationTopic/DocumentationHero.vue
index 30f7ca1ed..b22c4809d 100644
--- a/src/components/DocumentationTopic/DocumentationHero.vue
+++ b/src/components/DocumentationTopic/DocumentationHero.vue
@@ -17,8 +17,10 @@
:style="styles"
>
-
@@ -36,14 +38,14 @@
diff --git a/src/components/IconOverrideProvider.vue b/src/components/IconOverrideProvider.vue
new file mode 100644
index 000000000..0d23bf57d
--- /dev/null
+++ b/src/components/IconOverrideProvider.vue
@@ -0,0 +1,35 @@
+
+
+
diff --git a/src/components/Navigator.vue b/src/components/Navigator.vue
index 895019116..39291a72e 100644
--- a/src/components/Navigator.vue
+++ b/src/components/Navigator.vue
@@ -27,6 +27,7 @@
:api-changes="apiChanges"
:allow-hiding="allowHiding"
:enableQuickNavigation="enableQuickNavigation"
+ :navigator-references="navigatorReferences"
@close="$emit('close')"
/>
@@ -55,6 +56,7 @@ import { getSetting } from 'docc-render/utils/theme-settings';
* @property {number} uid - generated UID
* @property {string} title - title of symbol
* @property {string} type - symbol type, used for the icon
+ * @property {string} icon - an image reference to override the type icon
* @property {array} abstract - symbol abstract
* @property {string} path - path to page, used in navigation
* @property {number} parent - parent UID
@@ -101,6 +103,10 @@ export default {
type: Object,
default: () => {},
},
+ navigatorReferences: {
+ type: Object,
+ default: () => {},
+ },
scrollLockID: {
type: String,
default: '',
diff --git a/src/components/Navigator/NavigatorCard.vue b/src/components/Navigator/NavigatorCard.vue
index 842731948..6f66fefbd 100644
--- a/src/components/Navigator/NavigatorCard.vue
+++ b/src/components/Navigator/NavigatorCard.vue
@@ -65,6 +65,7 @@
:api-change="apiChangesObject[item.path]"
:isFocused="focusedIndex === index"
:enableFocus="!externalFocusChange"
+ :navigator-references="navigatorReferences"
@toggle="toggle"
@toggle-full="toggleFullTree"
@toggle-siblings="toggleSiblings"
@@ -253,6 +254,10 @@ export default {
type: Boolean,
default: true,
},
+ navigatorReferences: {
+ type: Object,
+ default: () => {},
+ },
},
mixins: [
keyboardNavigation,
diff --git a/src/components/Navigator/NavigatorCardItem.vue b/src/components/Navigator/NavigatorCardItem.vue
index 5bfa3281d..f7f74d881 100644
--- a/src/components/Navigator/NavigatorCardItem.vue
+++ b/src/components/Navigator/NavigatorCardItem.vue
@@ -45,9 +45,10 @@
/>
-
import InlineChevronRightIcon from 'theme/components/Icons/InlineChevronRightIcon.vue';
-import NavigatorLeafIcon from 'docc-render/components/Navigator/NavigatorLeafIcon.vue';
+import TopicTypeIcon from 'docc-render/components/TopicTypeIcon.vue';
import HighlightMatches from 'docc-render/components/Navigator/HighlightMatches.vue';
import Reference from 'docc-render/components/ContentNode/Reference.vue';
import Badge from 'docc-render/components/Badge.vue';
@@ -111,7 +112,7 @@ export default {
],
components: {
HighlightMatches,
- NavigatorLeafIcon,
+ TopicTypeIcon,
InlineChevronRightIcon,
Reference,
Badge,
@@ -154,6 +155,10 @@ export default {
type: Boolean,
default: true,
},
+ navigatorReferences: {
+ type: Object,
+ default: () => ({}),
+ },
},
idState() {
return {
diff --git a/src/components/Navigator/NavigatorDataProvider.vue b/src/components/Navigator/NavigatorDataProvider.vue
index 719268d3c..e0c3d1a99 100644
--- a/src/components/Navigator/NavigatorDataProvider.vue
+++ b/src/components/Navigator/NavigatorDataProvider.vue
@@ -40,6 +40,7 @@ export default {
navigationIndex: {
[Language.swift.key.url]: [],
},
+ navigationReferences: {},
diffs: null,
};
},
@@ -73,8 +74,9 @@ export default {
async fetchIndexData() {
try {
this.isFetching = true;
- const { interfaceLanguages } = await fetchIndexPathsData();
+ const { interfaceLanguages, references } = await fetchIndexPathsData();
this.navigationIndex = Object.freeze(interfaceLanguages);
+ this.navigationReferences = Object.freeze(references);
} catch (e) {
this.errorFetching = true;
} finally {
@@ -89,6 +91,7 @@ export default {
errorFetching: this.errorFetching,
isFetchingAPIChanges: this.isFetchingAPIChanges,
apiChanges: this.diffs,
+ references: this.navigationReferences,
});
},
};
diff --git a/src/components/SVGIcon.vue b/src/components/SVGIcon.vue
index 1dfaa87c1..1ec359f99 100644
--- a/src/components/SVGIcon.vue
+++ b/src/components/SVGIcon.vue
@@ -13,13 +13,30 @@
aria-hidden="true"
class="svg-icon"
xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
>
-
+
+