@carbon/ibmdotcom-web-components 1.32.0-rc.0 → 1.32.0-rc.2
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.
- package/custom-elements.json +18 -18
- package/dist/{20-2c34f739.js → 20-4d0d088b.js} +1 -1
- package/dist/{20-002a62f9.js → 20-c7872d45.js} +1 -1
- package/dist/{20-e53335d3.js → 20-d0071628.js} +1 -1
- package/dist/{20-4f726b86.js → 20-f07ed7a1.js} +1 -1
- package/dist/cloud-masthead.js +2 -2
- package/dist/cloud-masthead.min.js +1 -1
- package/dist/cloud-masthead.rtl.js +2 -2
- package/dist/cloud-masthead.rtl.min.js +1 -1
- package/dist/dotcom-shell.js +2 -2
- package/dist/dotcom-shell.min.js +1 -1
- package/dist/dotcom-shell.rtl.js +2 -2
- package/dist/dotcom-shell.rtl.min.js +1 -1
- package/dist/ibmdotcom-web-components-dotcom-shell.js +9 -7
- package/dist/ibmdotcom-web-components-dotcom-shell.min.js +2 -2
- package/dist/ibmdotcom-web-components-dotcom-shell.rtl.js +9 -7
- package/dist/ibmdotcom-web-components-dotcom-shell.rtl.min.js +2 -2
- package/dist/{left-nav-menu-72142ae5.js → left-nav-menu-0454e7fe.js} +1 -1
- package/dist/{left-nav-menu-136466dc.js → left-nav-menu-4bb5d738.js} +1 -1
- package/dist/{left-nav-menu-d0e0c8a1.js → left-nav-menu-a9193172.js} +1 -1
- package/dist/{left-nav-menu-3436909a.js → left-nav-menu-aa14d1fd.js} +1 -1
- package/dist/{left-nav-menu-category-heading-71bd687e.js → left-nav-menu-category-heading-308b7583.js} +1 -1
- package/dist/{left-nav-menu-category-heading-b2b5a65f.js → left-nav-menu-category-heading-c9962ac5.js} +1 -1
- package/dist/{left-nav-menu-category-heading-2a3e1e8f.js → left-nav-menu-category-heading-daf5ebfa.js} +1 -1
- package/dist/{left-nav-menu-category-heading-17849a08.js → left-nav-menu-category-heading-fc02a361.js} +1 -1
- package/dist/{left-nav-menu-item-19e02851.js → left-nav-menu-item-0275a3b9.js} +1 -1
- package/dist/{left-nav-menu-item-8caa4256.js → left-nav-menu-item-354f4261.js} +1 -1
- package/dist/{left-nav-menu-item-ee78e342.js → left-nav-menu-item-7814505a.js} +1 -1
- package/dist/{left-nav-menu-item-327fee2b.js → left-nav-menu-item-fa33cbd9.js} +1 -1
- package/dist/{left-nav-menu-section-5f999435.js → left-nav-menu-section-5c2e24f8.js} +2 -2
- package/dist/{left-nav-menu-section-518e5d37.js → left-nav-menu-section-94e4e49c.js} +1 -1
- package/dist/{left-nav-menu-section-e0a8964a.js → left-nav-menu-section-b5303d97.js} +2 -2
- package/dist/{left-nav-menu-section-6150369f.js → left-nav-menu-section-fcd88473.js} +1 -1
- package/dist/{left-nav-overlay-5731f7e5.js → left-nav-overlay-1e1910e9.js} +1 -1
- package/dist/{left-nav-overlay-6882d48d.js → left-nav-overlay-320c1270.js} +1 -1
- package/dist/{left-nav-overlay-a4cc3b3e.js → left-nav-overlay-81eb5e93.js} +1 -1
- package/dist/{left-nav-overlay-de7eb950.js → left-nav-overlay-ce49183f.js} +1 -1
- package/dist/{masthead-composite-c8dbcd61.js → masthead-composite-10b5102f.js} +3 -3
- package/dist/{masthead-composite-306adeb9.js → masthead-composite-1ed7f190.js} +3 -3
- package/dist/{masthead-composite-fb2bb203.js → masthead-composite-4096f117.js} +18 -14
- package/dist/{masthead-composite-73d938e4.js → masthead-composite-e578b925.js} +18 -14
- package/dist/{megamenu-category-group-43899a46.js → megamenu-category-group-0042c754.js} +1 -1
- package/dist/{megamenu-category-group-3bf5d73c.js → megamenu-category-group-b777facf.js} +1 -1
- package/dist/{megamenu-category-group-copy-2b87813d.js → megamenu-category-group-copy-69e90843.js} +1 -1
- package/dist/{megamenu-category-group-copy-283a25a3.js → megamenu-category-group-copy-6cc797f8.js} +1 -1
- package/dist/{megamenu-category-group-copy-93aa0a96.js → megamenu-category-group-copy-83e643e1.js} +1 -1
- package/dist/{megamenu-category-group-copy-775aaa80.js → megamenu-category-group-copy-e60dfb61.js} +1 -1
- package/dist/{megamenu-category-group-79513624.js → megamenu-category-group-d474b15d.js} +1 -1
- package/dist/{megamenu-category-group-999cba46.js → megamenu-category-group-f7dba932.js} +1 -1
- package/dist/{megamenu-category-link-71bd2020.js → megamenu-category-link-0df4440e.js} +1 -1
- package/dist/{megamenu-category-link-dbc8b4a4.js → megamenu-category-link-54e1011f.js} +1 -1
- package/dist/{megamenu-category-link-fb99f944.js → megamenu-category-link-68b5ea65.js} +1 -1
- package/dist/{megamenu-category-link-e3280b1e.js → megamenu-category-link-84732d66.js} +1 -1
- package/dist/{megamenu-left-navigation-3b9086ee.js → megamenu-left-navigation-7c8616c7.js} +1 -1
- package/dist/{megamenu-left-navigation-1f60ff1b.js → megamenu-left-navigation-862becf2.js} +1 -1
- package/dist/{megamenu-left-navigation-dd0372b5.js → megamenu-left-navigation-98f428cf.js} +1 -1
- package/dist/{megamenu-left-navigation-35bcade1.js → megamenu-left-navigation-c5ed7f0e.js} +1 -1
- package/dist/{megamenu-overlay-50af9c22.js → megamenu-overlay-213de889.js} +1 -1
- package/dist/{megamenu-overlay-2b2fe43c.js → megamenu-overlay-3ad6b0b2.js} +1 -1
- package/dist/{megamenu-overlay-5ff8fbf2.js → megamenu-overlay-ab9a9cff.js} +1 -1
- package/dist/{megamenu-overlay-ddd5122f.js → megamenu-overlay-d948063a.js} +1 -1
- package/es/components/image/image.d.ts +0 -3
- package/es/components/image/image.d.ts.map +1 -1
- package/es/components/image/image.js +1 -1
- package/es/components/image/image.js.map +1 -1
- package/es/components/locale-modal/locale-modal.d.ts.map +1 -1
- package/es/components/locale-modal/locale-modal.js +7 -5
- package/es/components/locale-modal/locale-modal.js.map +1 -1
- package/es/components/masthead/masthead-composite.d.ts +1 -1
- package/es/components/masthead/masthead-composite.d.ts.map +1 -1
- package/es/components/masthead/masthead-composite.js +4 -3
- package/es/components/masthead/masthead-composite.js.map +1 -1
- package/es/components/notice-choice/notice-choice.d.ts.map +1 -1
- package/es/components/notice-choice/notice-choice.js +0 -1
- package/es/components/notice-choice/notice-choice.js.map +1 -1
- package/es/components/search-with-typeahead/search-with-typeahead.d.ts.map +1 -1
- package/es/components/search-with-typeahead/search-with-typeahead.js +4 -1
- package/es/components/search-with-typeahead/search-with-typeahead.js.map +1 -1
- package/es/components/table-of-contents/table-of-contents.d.ts +12 -7
- package/es/components/table-of-contents/table-of-contents.d.ts.map +1 -1
- package/es/components/table-of-contents/table-of-contents.js +13 -2
- package/es/components/table-of-contents/table-of-contents.js.map +1 -1
- package/es/components/video-player/video-player.d.ts +1 -9
- package/es/components/video-player/video-player.d.ts.map +1 -1
- package/es/components/video-player/video-player.js +7 -2
- package/es/components/video-player/video-player.js.map +1 -1
- package/es/components-react/footer/dropdown.js +39 -0
- package/es/components-react/masthead/masthead-composite.d.ts +1 -1
- package/es/components-react/masthead/masthead-composite.js +241 -0
- package/es/components-react/masthead/masthead-container.js +25 -0
- package/es/components-react/masthead/masthead.js +23 -0
- package/es/components-react/quote/quote-link-with-icon.js +25 -0
- package/es/components-react/quote/quote-source-bottom-copy.js +30 -0
- package/es/components-react/quote/quote-source-copy.js +30 -0
- package/es/components-react/quote/quote-source-heading.js +30 -0
- package/es/components-react/search-with-typeahead/scoped-search-dropdown-mobile.js +32 -0
- package/es/components-react/search-with-typeahead/scoped-search-dropdown.js +39 -0
- package/es/components-react/search-with-typeahead/search-with-typeahead-item.js +47 -0
- package/es/components-react/search-with-typeahead/search-with-typeahead.js +175 -0
- package/es/components-react/structured-list/structured-list-body.js +23 -0
- package/es/components-react/structured-list/structured-list-cell.js +41 -0
- package/es/components-react/structured-list/structured-list-group.js +29 -0
- package/es/components-react/structured-list/structured-list-head.js +23 -0
- package/es/components-react/structured-list/structured-list-header-cell.js +23 -0
- package/es/components-react/structured-list/structured-list-header-row.js +23 -0
- package/es/components-react/structured-list/structured-list-row.js +23 -0
- package/es/components-react/structured-list/structured-list.js +23 -0
- package/es/components-react/table-of-contents/table-of-contents.js +49 -0
- package/es/components-react/tabs-extended/tab.js +53 -0
- package/es/components-react/tabs-extended/tabs-extended.js +36 -0
- package/es/components-react/tabs-extended-media/tabs-extended-media.js +34 -0
- package/es/components-react/tag-group/tag-group.js +23 -0
- package/es/components-react/tag-link/tag-link.js +57 -0
- package/es/components-react/universal-banner/universal-banner-copy.js +29 -0
- package/es/components-react/universal-banner/universal-banner-heading.js +30 -0
- package/es/components-react/universal-banner/universal-banner-image.js +25 -0
- package/es/components-react/universal-banner/universal-banner.js +57 -0
- package/es/components-react/video-player/video-player.js +134 -0
- package/lib/components-react-node/footer/dropdown.js +80 -0
- package/lib/components-react-node/masthead/masthead-composite.js +295 -0
- package/lib/components-react-node/masthead/masthead-container.js +41 -0
- package/lib/components-react-node/masthead/masthead.js +40 -0
- package/lib/components-react-node/quote/quote-link-with-icon.js +41 -0
- package/lib/components-react-node/quote/quote-source-bottom-copy.js +47 -0
- package/lib/components-react-node/quote/quote-source-copy.js +47 -0
- package/lib/components-react-node/quote/quote-source-heading.js +47 -0
- package/lib/components-react-node/search-with-typeahead/scoped-search-dropdown-mobile.js +49 -0
- package/lib/components-react-node/search-with-typeahead/scoped-search-dropdown.js +68 -0
- package/lib/components-react-node/search-with-typeahead/search-with-typeahead-item.js +102 -0
- package/lib/components-react-node/search-with-typeahead/search-with-typeahead.js +230 -0
- package/lib/components-react-node/structured-list/structured-list-body.js +40 -0
- package/lib/components-react-node/structured-list/structured-list-cell.js +58 -0
- package/lib/components-react-node/structured-list/structured-list-group.js +46 -0
- package/lib/components-react-node/structured-list/structured-list-head.js +40 -0
- package/lib/components-react-node/structured-list/structured-list-header-cell.js +40 -0
- package/lib/components-react-node/structured-list/structured-list-header-row.js +40 -0
- package/lib/components-react-node/structured-list/structured-list-row.js +40 -0
- package/lib/components-react-node/structured-list/structured-list.js +40 -0
- package/lib/components-react-node/table-of-contents/table-of-contents.js +104 -0
- package/lib/components-react-node/tabs-extended/tab.js +108 -0
- package/lib/components-react-node/tabs-extended/tabs-extended.js +53 -0
- package/lib/components-react-node/tabs-extended-media/tabs-extended-media.js +50 -0
- package/lib/components-react-node/tag-group/tag-group.js +40 -0
- package/lib/components-react-node/tag-link/tag-link.js +74 -0
- package/lib/components-react-node/universal-banner/universal-banner-copy.js +45 -0
- package/lib/components-react-node/universal-banner/universal-banner-heading.js +47 -0
- package/lib/components-react-node/universal-banner/universal-banner-image.js +41 -0
- package/lib/components-react-node/universal-banner/universal-banner.js +112 -0
- package/lib/components-react-node/video-player/video-player.js +197 -0
- package/package.json +7 -7
- package/scss/components/image/image.scss +1 -1
- package/es/components-react/notice-choice/notice-choice.d.ts +0 -48
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["components/table-of-contents/table-of-contents.ts"],"names":[],"mappings":"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","file":"table-of-contents.d.ts","sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2020, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport {\n html,\n property,\n state,\n query,\n queryAll,\n LitElement,\n} from 'lit-element';\nimport CaretLeft20 from '../../internal/vendor/@carbon/web-components/icons/caret--left/20.js';\nimport CaretRight20 from '../../internal/vendor/@carbon/web-components/icons/caret--right/20.js';\nimport settings from 'carbon-components/es/globals/js/settings.js';\nimport { baseFontSize, breakpoints } from '@carbon/layout';\nimport HostListener from '../../internal/vendor/@carbon/web-components/globals/decorators/host-listener.js';\nimport HostListenerMixin from '../../internal/vendor/@carbon/web-components/globals/mixins/host-listener.js';\nimport TableOfContents20 from '../../internal/vendor/@carbon/web-components/icons/table-of-contents/20.js';\nimport throttle from 'lodash-es/throttle.js';\nimport StickyHeader from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/StickyHeader/StickyHeader';\nimport ddsSettings from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/settings/settings';\nimport styles from './table-of-contents.scss';\nimport { TOC_TYPES } from './defs';\nimport StableSelectorMixin from '../../globals/mixins/stable-selector';\nimport { carbonElement as customElement } from '../../internal/vendor/@carbon/web-components/globals/decorators/carbon-element.js';\n\nconst { prefix } = settings;\nconst { stablePrefix: ddsPrefix } = ddsSettings;\n\n// total button width - grid offset\nconst buttonWidthOffset = 32;\n\nconst gridLgBreakpoint = parseFloat(breakpoints.lg.width) * baseFontSize;\n\ninterface Cancelable {\n cancel(): void;\n}\n\n/**\n * @param a An array.\n * @param predicate The callback function.\n * @param [thisObject] The context object for the given callback function.\n * @returns The index of the last item in the given array where `predicate` returns `true`. `-1` if no such item is found.\n */\nfunction findLastIndex<T>(\n a: T[],\n predicate: (search: T, index?: number, thisObject?: any) => boolean,\n thisObject?: any\n): number {\n for (let i = a.length - 1; i >= 0; --i) {\n if (predicate(a[i], i, thisObject)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Table of contents.\n *\n * @element dds-table-of-contents\n * @csspart table - The table UI.\n * @slot heading - The heading content.\n * @slot menu-rule - The menu rule.\n */\n@customElement(`${ddsPrefix}-table-of-contents`)\nclass DDSTableOfContents extends HostListenerMixin(\n StableSelectorMixin(LitElement)\n) {\n /**\n * The formatter for the aria label text for the mobile ToC.\n * Should be changed upon the locale the component is rendered with.\n */\n @property({ attribute: false })\n ariaLabelFormatter = 'Table of contents';\n\n /**\n * Defines TOC type, \"\" for default, `horizontal` for horizontal variant.\n */\n @property({ reflect: true, attribute: 'toc-layout' })\n layout = TOC_TYPES.DEFAULT;\n\n /**\n * The current scroll position.\n */\n @state()\n private _currentScrollPosition = 0;\n\n /**\n * The current target `<a>` that should be in view.\n */\n @state()\n private _currentTarget: HTMLAnchorElement | null = null;\n\n /**\n * `true` if left-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the left-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionLeftTrackerInContent = true;\n\n /**\n * `true` if right-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the right-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionRightTrackerInContent = true;\n\n /**\n * `true` if there is a heading content.\n */\n @state()\n private _hasHeading = false;\n\n /**\n * `true` if mobile container is visible.\n */\n @state()\n private _hasMobileContainerVisible = false;\n\n /**\n * The observer for the intersection of left-side content edge.\n */\n private _observerIntersection: IntersectionObserver | null = null;\n\n /**\n * The scrolling content.\n */\n @query(`.${prefix}--tableofcontents__desktop`)\n private _contentNode?: HTMLElement;\n\n /**\n * The left-hand sentinel to track intersection with the host element.\n * If they intersect, the left-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-left`)\n private _intersectionLeftSentinelNode?: HTMLElement;\n\n /**\n * The right-hand sentinel to track intersection with the host element.\n * If they intersect, the right-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-right`)\n private _intersectionRightSentinelNode?: HTMLElement;\n\n @queryAll(`.${prefix}--tableofcontents__desktop__item`)\n private _itemNodes?: HTMLElement[] = [];\n\n @query(`.${prefix}--tableofcontents__navbar`)\n private _navBar?: HTMLElement;\n\n /**\n * The container for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile`)\n private _mobileContainerNode?: HTMLElement;\n\n /**\n * The `<select>` for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile__select`)\n private _mobileSelectNode?: HTMLSelectElement;\n\n /**\n * The observer for the resize of the mobile container.\n */\n private _observerResizeMobileContainer: any | null = null; // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n\n /**\n * The target elements matching `[name]` harvested from the document.\n */\n @state()\n private _targets: HTMLElement[] = [];\n\n /**\n * The Element.tagName values that should never be used as a TOC target.\n * Typically added here because these elements have their own `[name]` attribute.\n */\n private _tagNamesToAvoid = [`${ddsPrefix}-video-player`];\n\n /**\n * Boolean checking if page is RTL\n */\n @state()\n private _pageIsRTL: Boolean =\n this.ownerDocument!.documentElement.dir === 'rtl';\n\n /**\n * The handler for throttled scrolling\n */\n private _throttleScroll: (((event: Event) => void) & Cancelable) | null =\n null;\n\n /**\n * Cleans-up and creats the resize observer for the mobile container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new resize observer.\n */\n private _cleanAndCreateObserverResizeMobileContainer({\n create,\n }: { create?: boolean } = {}) {\n const { _mobileContainerNode: mobileContainerNode } = this;\n if (mobileContainerNode) {\n if (this._observerResizeMobileContainer) {\n this._observerResizeMobileContainer.disconnect();\n this._observerResizeMobileContainer = null;\n }\n if (create) {\n // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n // @ts-ignore\n this._observerResizeMobileContainer = new ResizeObserver(\n this._observeResizeMobileContainer\n );\n this._observerResizeMobileContainer.observe(mobileContainerNode);\n }\n }\n }\n\n /**\n * Handles `change` event on mobile `<select>`.\n *\n * @param event The event.\n */\n private _handleChangeSelect(event: Event) {\n this._handleUserInitiatedJump((event.target as HTMLSelectElement).value);\n }\n\n /**\n * Handles `click` event on a menu item.\n *\n * @param event The event.\n */\n private _handleClickItem(event: MouseEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n if (target.matches?.(selectorDesktopItem)) {\n this._handleUserInitiatedJump(target.dataset.target!);\n event.preventDefault();\n }\n }\n\n /**\n * Handles `click` event on a TOC navigation item.\n *\n * @param event The event.\n */\n private _handleOnKeyDown(event: KeyboardEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n const { _pageIsRTL: pageIsRTL } = this;\n if (target.matches?.(selectorDesktopItem)) {\n if (pageIsRTL) {\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n } else if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling!.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling!.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n }\n }\n\n /**\n * Handles intersection of target `<a>`s with the viewport by checking which target's\n * immediate siblings are close to the viewport, and set the active target depending\n * on their positions.\n */\n private _handleOnScroll = () => {\n this.ownerDocument!.defaultView!.requestAnimationFrame(() => {\n if (this._targets) {\n const items = this._targets\n .map((elem, index, arr) => ({\n elem,\n height: arr[index + 1]\n ? arr[index + 1].getBoundingClientRect().y -\n elem.getBoundingClientRect().y\n : null,\n position: elem.getBoundingClientRect().y,\n }))\n .filter((elem, index, arr) =>\n elem.height === null\n ? arr[index - 1].position < arr[index - 1].height!\n : elem.position - 50 - this.stickyOffset > -elem.height\n );\n\n // Sets last section as active at the end of page in case there is not enough height for it to dynamically activate\n const bottomReached =\n this.ownerDocument!.scrollingElement!.scrollTop +\n this.ownerDocument!.scrollingElement!.clientHeight ===\n this.ownerDocument!.scrollingElement!.scrollHeight;\n if (items && items[0] && items[items.length - 1]) {\n this._currentTarget = !bottomReached\n ? (items[0].elem as HTMLAnchorElement)\n : (items[items.length - 1].elem as HTMLAnchorElement);\n }\n }\n });\n };\n\n /**\n * Watches for changes to content in the default slot.\n */\n private _contentMutationObserver = new MutationObserver(\n this._contentObserverCallback.bind(this)\n );\n\n /**\n * Sets table of contents targets whenever any node tree mutation is observed.\n */\n private _contentObserverCallback() {\n const shadowRoot = this.shadowRoot as ShadowRoot;\n const allSlots = Array.from(\n shadowRoot.querySelectorAll(`slot`)\n ) as HTMLSlotElement[];\n const allSlottedNodes = allSlots.flatMap((slot) => slot.assignedNodes());\n this._setTargets(allSlottedNodes);\n }\n\n /**\n * Sets targets used for generating the table of contents.\n */\n private _setTargets(nodes: Node[]) {\n const { _tagNamesToAvoid: tagNamesToAvoid } = this;\n const { selectorTarget } = this.constructor as typeof DDSTableOfContents;\n this._targets = nodes.reduce((acc, node) => {\n if (node instanceof HTMLElement) {\n const descendants = node.querySelectorAll(\n selectorTarget\n ) as NodeListOf<HTMLElement>;\n const elems = [node, ...descendants].filter((elem) => {\n const notWhiteSpace = /[^\\s\\n\\r]/g;\n const hasTitle =\n elem.innerText.match(notWhiteSpace) ||\n elem.dataset.title?.match(notWhiteSpace);\n const hasNameAttr = elem.matches(selectorTarget);\n const notExcluded = !tagNamesToAvoid.includes(\n elem.tagName.toLowerCase()\n );\n\n return hasTitle && hasNameAttr && notExcluded;\n });\n\n acc.push(...(elems as HTMLElement[]));\n }\n\n return acc;\n }, [] as HTMLElement[]);\n }\n\n /**\n * Handles `slotchange` event on the default `<slot>`.\n *\n * @param event The event.\n */\n private _handleSlotChange(event: Event) {\n // Handle changes to immediate slotted children.\n const slottedElements = (event.target as HTMLSlotElement)\n .assignedNodes()\n .filter((node) => node instanceof HTMLElement);\n this._setTargets(slottedElements as HTMLElement[]);\n\n // Handle changes to slotted contents' children.\n this._contentMutationObserver.disconnect();\n (event.target as HTMLSlotElement).assignedNodes().forEach((node) => {\n if (node instanceof HTMLElement) {\n this._contentMutationObserver.observe(node, {\n subtree: true,\n childList: true,\n attributeFilter: ['name', 'data-title'],\n });\n }\n });\n }\n\n /**\n * Handles `slotchange` event on `<slot name=\"heading\">`.\n */\n private _handleSlotChangeHeading() {\n this._hasHeading = Array.from(\n this.querySelectorAll('[slot=\"heading\"]')\n ).some(\n (node) => node.nodeType !== Node.TEXT_NODE || node!.textContent!.trim()\n );\n }\n\n /**\n * Handles user-initiated jump to a hash.\n *\n * @param target The hash name.\n */\n private _handleUserInitiatedJump(target: string) {\n const elem = this.querySelector(`[name=\"${target}\"]`);\n const masthead: HTMLElement | null = this.ownerDocument.querySelector(\n `${ddsPrefix}-masthead`\n );\n const mobilePadding =\n window.innerWidth < gridLgBreakpoint\n ? this._mobileContainerNode?.offsetHeight\n : 0;\n\n if (elem instanceof HTMLElement) {\n const currentY = window.scrollY;\n let targetY;\n\n if (currentY > elem.offsetTop && masthead) {\n targetY = elem.offsetTop - masthead.offsetHeight;\n } else {\n targetY = elem.offsetTop - mobilePadding!;\n }\n\n window.scrollTo(0, targetY);\n\n elem.setAttribute('tabindex', '0');\n (elem as HTMLElement).focus({ preventScroll: true });\n elem.addEventListener(\n 'focusout',\n ({ target: focusoutTarget }) => {\n (focusoutTarget as HTMLElement)?.removeAttribute('tabindex');\n },\n {\n once: true,\n }\n );\n }\n }\n\n /**\n * Cleans-up and creates the intersection observer for the scrolling container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new intersection observer.\n */\n private _cleanAndCreateIntersectionObserverContainer({\n create,\n }: { create?: boolean } = {}) {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n if (this._observerIntersection) {\n this._observerIntersection.disconnect();\n this._observerIntersection = null;\n }\n if (create) {\n this._observerIntersection = new IntersectionObserver(\n this._observeIntersectionContainer,\n {\n root: this._navBar,\n threshold: 0,\n }\n );\n if (intersectionLeftSentinelNode) {\n this._observerIntersection.observe(intersectionLeftSentinelNode);\n }\n if (intersectionRightSentinelNode) {\n this._observerIntersection.observe(intersectionRightSentinelNode);\n }\n }\n }\n\n /**\n * The intersection observer callback for the scrolling container.\n *\n * @param records The intersection observer records.\n */\n private _observeIntersectionContainer = (records) => {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n records.forEach(({ isIntersecting, target }) => {\n if (target === intersectionLeftSentinelNode) {\n this._isIntersectionLeftTrackerInContent = isIntersecting;\n }\n if (target === intersectionRightSentinelNode) {\n this._isIntersectionRightTrackerInContent = isIntersecting;\n }\n });\n };\n\n /**\n * Handles `click` event on the left-hand paginator button.\n */\n private _paginateLeft() {\n const {\n _currentScrollPosition: currentScrollPosition,\n _navBar: navBar,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n // If the right-side intersection sentinel is in the view, it means that right-side caret button is hidden.\n // Given scrolling to left makes it shown,\n // `contentContainerNode!.offsetWidth` will shrink as we scroll and we need to adjust for it.\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().right;\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().right > interimLeft - buttonWidthOffset\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().left;\n // 48 = button width - button gradient\n const newScrollPosition =\n currentScrollPosition - lastVisibleElementRight + 48;\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n } else {\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().left <\n buttonWidthOffset + navBar!.getBoundingClientRect().left\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().right;\n const newScrollPosition =\n lastVisibleElementRight +\n currentScrollPosition -\n navBar!.getBoundingClientRect().right +\n buttonWidthOffset;\n // If the new scroll position is less than the width of the left caret button,\n // it means that hiding the left caret button reveals the whole of the left-most nav item.\n // Snaps the left-most nav item to the left edge of nav container in this case.\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n }\n }\n }\n\n /**\n * Handles `click` event on the right-hand paginator button.\n */\n private _paginateRight() {\n const {\n _navBar: navBar,\n _contentNode: contentNode,\n _currentScrollPosition: currentScrollPosition,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().left;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().left < interimLeft + buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft = Math.abs(\n elems[firstVisibleElementIndex].getBoundingClientRect().right +\n buttonWidthOffset -\n navBar!.getBoundingClientRect().right\n );\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n } else {\n const interimRight = navBar!.getBoundingClientRect().right;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().right >\n interimRight - buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft =\n elems[firstVisibleElementIndex].getBoundingClientRect().left -\n navBar!.getBoundingClientRect().left -\n buttonWidthOffset;\n // Ensures that is there is no blank area at the right hand side in scroll area\n // if we see the right remainder nav items can be contained in a page\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n }\n }\n }\n\n /**\n * Handles resize of mobile container.\n *\n * @param records The resize records.\n */\n private _observeResizeMobileContainer = (records) => {\n const entry = records[records.length - 1];\n const { height } = entry.contentRect;\n this._hasMobileContainerVisible = height > 0;\n };\n\n /**\n * The current 0px offset from the top of page.\n */\n @property({ type: Number })\n stickyOffset = 0;\n\n /**\n * The throttled scroll listener.\n *\n * @param event scroll handler\n */\n @HostListener('window:scroll')\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleScroll = (event: Event) => {\n this._throttleScroll!(event);\n };\n\n /**\n * The trigger reharvest listener.\n */\n @HostListener(`document:${ddsPrefix}-table-of-contents-reharvest`)\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _retriggerHarvest = () => {\n this._targets = Array.from(this.querySelectorAll('[name]'));\n };\n\n connectedCallback() {\n super.connectedCallback();\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n if (!this._throttleScroll) {\n this._throttleScroll = throttle(this._handleOnScroll, 250);\n this._handleOnScroll();\n }\n }\n\n disconnectedCallback() {\n this._cleanAndCreateObserverResizeMobileContainer();\n this._cleanAndCreateIntersectionObserverContainer();\n this._contentMutationObserver.disconnect();\n if (this._throttleScroll) {\n this._throttleScroll.cancel();\n this._throttleScroll = null;\n }\n super.disconnectedCallback();\n }\n\n firstUpdated() {\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n\n StickyHeader.global.tableOfContents = this;\n }\n\n updated(changedProperties) {\n if (changedProperties.has('_currentTarget')) {\n const {\n _currentTarget: currentTarget,\n _mobileSelectNode: mobileSelectNode,\n } = this;\n // Ensures setting the `value` after rendering child `<option>`s when there is a change in `value`,\n // given reflecting `value` requires child `<option>`s being there beforehand\n mobileSelectNode!.value = currentTarget?.getAttribute('name') ?? '';\n }\n }\n\n render() {\n const {\n stickyOffset,\n _currentTarget: currentTarget,\n _currentScrollPosition: currentScrollPosition,\n _hasHeading: hasHeading,\n _hasMobileContainerVisible: hasMobileContainerVisible,\n _isIntersectionLeftTrackerInContent: isIntersectionLeftTrackerInContent,\n _isIntersectionRightTrackerInContent: isIntersectionRightTrackerInContent,\n _targets: targets,\n _handleChangeSelect: handleChangeSelect,\n _handleClickItem: handleClickItem,\n _handleOnKeyDown: handleOnKeyDown,\n _handleSlotChange: handleSlotChange,\n _handleSlotChangeHeading: handleSlotChangeHeading,\n _paginateLeft: paginateLeft,\n _paginateRight: paginateRight,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const containerClasses = classMap({\n [`${ddsPrefix}-ce--table-of-contents__container`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${ddsPrefix}-ce--table-of-contents-horizontal__container`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const navigationClasses = classMap({\n [`${prefix}--tableofcontents__sidebar`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${prefix}--tableofcontents__navbar`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const caretLeftContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-left-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionLeftTrackerInContent,\n });\n\n const caretRightContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-right-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionRightTrackerInContent,\n });\n\n return html`\n ${this.layout === 'horizontal'\n ? html`\n <ul class=\"${prefix}--toc__print-styles\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n `\n : ``}\n <div class=\"${containerClasses}\">\n <div part=\"table\" class=\"${navigationClasses}\">\n ${hasMobileContainerVisible\n ? nothing\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__desktop__children\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n <slot name=\"menu-rule\"></slot>\n </div>\n `}\n <div class=\"${prefix}--tableofcontents__mobile-top\"></div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretLeft20()}\n </button>\n </div>\n `\n : html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretLeft20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `}\n `\n : ``}\n <div\n class=\"${ddsPrefix}-ce--table-of-contents__items-container\"\n style=\"position: sticky; top: ${stickyOffset &&\n this.layout !== TOC_TYPES.HORIZONTAL\n ? `${stickyOffset}px`\n : 0}\">\n <div class=\"${prefix}--tableofcontents__desktop-container\">\n <div\n class=\"${prefix}--tableofcontents__desktop\"\n style=\"${pageIsRTL\n ? 'right'\n : 'left'}: -${currentScrollPosition}px\">\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-right\"></div> `\n : html` <div class=\"${prefix}--sub-content-left\"></div> `}\n <ul>\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-left\"></div> `\n : html` <div class=\"${prefix}--sub-content-right\"></div> `}\n </div>\n </div>\n <div class=\"${prefix}--tableofcontents__mobile\">\n <div class=\"${prefix}--tableofcontents__mobile__select__wrapper\">\n <select\n aria-label=\"${this.ariaLabelFormatter}\"\n class=\"${prefix}--tableofcontents__mobile__select\"\n @change=\"${handleChangeSelect}\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n return html`\n <option\n class=\"${prefix}--tableofcontents__mobile__select__option\"\n value=\"${name!}\">\n ${title}\n </option>\n `;\n })}\n </select>\n ${TableOfContents20({\n class: `${prefix}--tableofcontents__mobile__select__icon`,\n })}\n </div>\n </div>\n </div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretRight20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `\n : html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretRight20()}\n </button>\n </div>\n `}\n `\n : ``}\n </div>\n <div class=\"${prefix}--tableofcontents__content\">\n <div class=\"${prefix}--tableofcontents__content-wrapper\">\n ${!hasMobileContainerVisible\n ? undefined\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__children__mobile\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n </div>\n `}\n <slot @slotchange=\"${handleSlotChange}\"></slot>\n </div>\n </div>\n </div>\n `;\n }\n\n /**\n * The selector that selects the desktop link items.\n */\n static get selectorDesktopItem() {\n return `.${prefix}--tableofcontents__desktop__item a`;\n }\n\n /**\n * The selector that determines where to harvest the table of contents from.\n */\n static selectorTarget = '[name]';\n\n static get stableSelector() {\n return `${ddsPrefix}--table-of-contents`;\n }\n\n static styles = styles; // `styles` here is a `CSSResult` generated by custom WebPack loader\n}\n\n/* @__GENERATE_REACT_CUSTOM_ELEMENT_TYPE__ */\nexport default DDSTableOfContents;\n"]}
|
|
1
|
+
{"version":3,"sources":["components/table-of-contents/table-of-contents.ts"],"names":[],"mappings":"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","file":"table-of-contents.d.ts","sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2020, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport {\n html,\n property,\n state,\n query,\n queryAll,\n LitElement,\n} from 'lit-element';\nimport CaretLeft20 from '../../internal/vendor/@carbon/web-components/icons/caret--left/20.js';\nimport CaretRight20 from '../../internal/vendor/@carbon/web-components/icons/caret--right/20.js';\nimport settings from 'carbon-components/es/globals/js/settings.js';\nimport { baseFontSize, breakpoints } from '@carbon/layout';\nimport HostListener from '../../internal/vendor/@carbon/web-components/globals/decorators/host-listener.js';\nimport HostListenerMixin from '../../internal/vendor/@carbon/web-components/globals/mixins/host-listener.js';\nimport TableOfContents20 from '../../internal/vendor/@carbon/web-components/icons/table-of-contents/20.js';\nimport throttle from 'lodash-es/throttle.js';\nimport StickyHeader from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/StickyHeader/StickyHeader';\nimport ddsSettings from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/settings/settings';\nimport styles from './table-of-contents.scss';\nimport { TOC_TYPES } from './defs';\nimport StableSelectorMixin from '../../globals/mixins/stable-selector';\nimport { carbonElement as customElement } from '../../internal/vendor/@carbon/web-components/globals/decorators/carbon-element.js';\n\nconst { prefix } = settings;\nconst { stablePrefix: ddsPrefix } = ddsSettings;\n\n// total button width - grid offset\nconst buttonWidthOffset = 32;\n\nconst gridLgBreakpoint = parseFloat(breakpoints.lg.width) * baseFontSize;\n\ninterface Cancelable {\n cancel(): void;\n}\n\n/**\n * @param a An array.\n * @param predicate The callback function.\n * @param [thisObject] The context object for the given callback function.\n * @returns The index of the last item in the given array where `predicate` returns `true`. `-1` if no such item is found.\n */\nfunction findLastIndex<T>(\n a: T[],\n predicate: (search: T, index?: number, thisObject?: any) => boolean,\n thisObject?: any\n): number {\n for (let i = a.length - 1; i >= 0; --i) {\n if (predicate(a[i], i, thisObject)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Table of contents.\n *\n * @element dds-table-of-contents\n * @csspart table - The table UI.\n * @slot heading - The heading content.\n * @slot menu-rule - The menu rule.\n */\n@customElement(`${ddsPrefix}-table-of-contents`)\nclass DDSTableOfContents extends HostListenerMixin(\n StableSelectorMixin(LitElement)\n) {\n /**\n * The formatter for the aria label text for the mobile ToC.\n * Should be changed upon the locale the component is rendered with.\n */\n @property({ attribute: false })\n ariaLabelFormatter = 'Table of contents';\n\n /**\n * Defines TOC type, \"\" for default, `horizontal` for horizontal variant.\n */\n @property({ reflect: true, attribute: 'toc-layout' })\n layout = TOC_TYPES.DEFAULT;\n\n /**\n * The current scroll position.\n */\n @state()\n private _currentScrollPosition = 0;\n\n /**\n * The current target `<a>` that should be in view.\n */\n @state()\n private _currentTarget: HTMLAnchorElement | null = null;\n\n /**\n * `true` if left-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the left-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionLeftTrackerInContent = true;\n\n /**\n * `true` if right-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the right-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionRightTrackerInContent = true;\n\n /**\n * `true` if there is a heading content.\n */\n @state()\n private _hasHeading = false;\n\n /**\n * `true` if mobile container is visible.\n */\n @state()\n private _hasMobileContainerVisible = false;\n\n /**\n * The observer for the intersection of left-side content edge.\n */\n private _observerIntersection: IntersectionObserver | null = null;\n\n /**\n * The scrolling content.\n */\n @query(`.${prefix}--tableofcontents__desktop`)\n private _contentNode?: HTMLElement;\n\n /**\n * The left-hand sentinel to track intersection with the host element.\n * If they intersect, the left-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-left`)\n private _intersectionLeftSentinelNode?: HTMLElement;\n\n /**\n * The right-hand sentinel to track intersection with the host element.\n * If they intersect, the right-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-right`)\n private _intersectionRightSentinelNode?: HTMLElement;\n\n @queryAll(`.${prefix}--tableofcontents__desktop__item`)\n private _itemNodes?: HTMLElement[] = [];\n\n @query(`.${prefix}--tableofcontents__navbar`)\n private _navBar?: HTMLElement;\n\n /**\n * The container for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile`)\n private _mobileContainerNode?: HTMLElement;\n\n /**\n * The `<select>` for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile__select`)\n private _mobileSelectNode?: HTMLSelectElement;\n\n /**\n * The observer for the resize of the mobile container.\n */\n private _observerResizeMobileContainer: any | null = null; // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n\n /**\n * The target elements matching `[name]` harvested from the document.\n */\n @state()\n private _targets: HTMLElement[] = [];\n\n /**\n * The Element.tagName values that should never be used as a TOC target.\n * Typically added here because these elements have their own `[name]` attribute.\n */\n private _tagNamesToAvoid = [`${ddsPrefix}-video-player`];\n\n /**\n * The name of an attribute that will prevent the DOM element and any elements\n * in its subtree from being added to the ToC.\n */\n private _disableTargetAttribute = 'no-toc';\n\n /**\n * Boolean checking if page is RTL\n */\n @state()\n private _pageIsRTL: Boolean =\n this.ownerDocument!.documentElement.dir === 'rtl';\n\n /**\n * The handler for throttled scrolling\n */\n private _throttleScroll: (((event: Event) => void) & Cancelable) | null =\n null;\n\n /**\n * Cleans-up and creats the resize observer for the mobile container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new resize observer.\n */\n private _cleanAndCreateObserverResizeMobileContainer({\n create,\n }: { create?: boolean } = {}) {\n const { _mobileContainerNode: mobileContainerNode } = this;\n if (mobileContainerNode) {\n if (this._observerResizeMobileContainer) {\n this._observerResizeMobileContainer.disconnect();\n this._observerResizeMobileContainer = null;\n }\n if (create) {\n // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n // @ts-ignore\n this._observerResizeMobileContainer = new ResizeObserver(\n this._observeResizeMobileContainer\n );\n this._observerResizeMobileContainer.observe(mobileContainerNode);\n }\n }\n }\n\n /**\n * Handles `change` event on mobile `<select>`.\n *\n * @param event The event.\n */\n private _handleChangeSelect(event: Event) {\n this._handleUserInitiatedJump((event.target as HTMLSelectElement).value);\n }\n\n /**\n * Handles `click` event on a menu item.\n *\n * @param event The event.\n */\n private _handleClickItem(event: MouseEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n if (target.matches?.(selectorDesktopItem)) {\n this._handleUserInitiatedJump(target.dataset.target!);\n event.preventDefault();\n }\n }\n\n /**\n * Handles `click` event on a TOC navigation item.\n *\n * @param event The event.\n */\n private _handleOnKeyDown(event: KeyboardEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n const { _pageIsRTL: pageIsRTL } = this;\n if (target.matches?.(selectorDesktopItem)) {\n if (pageIsRTL) {\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n } else if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling!.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling!.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n }\n }\n\n /**\n * Handles intersection of target `<a>`s with the viewport by checking which target's\n * immediate siblings are close to the viewport, and set the active target depending\n * on their positions.\n */\n private _handleOnScroll = () => {\n this.ownerDocument!.defaultView!.requestAnimationFrame(() => {\n if (this._targets) {\n const items = this._targets\n .map((elem, index, arr) => ({\n elem,\n height: arr[index + 1]\n ? arr[index + 1].getBoundingClientRect().y -\n elem.getBoundingClientRect().y\n : null,\n position: elem.getBoundingClientRect().y,\n }))\n .filter((elem, index, arr) =>\n elem.height === null\n ? arr[index - 1].position < arr[index - 1].height!\n : elem.position - 50 - this.stickyOffset > -elem.height\n );\n\n // Sets last section as active at the end of page in case there is not enough height for it to dynamically activate\n const bottomReached =\n this.ownerDocument!.scrollingElement!.scrollTop +\n this.ownerDocument!.scrollingElement!.clientHeight ===\n this.ownerDocument!.scrollingElement!.scrollHeight;\n if (items && items[0] && items[items.length - 1]) {\n this._currentTarget = !bottomReached\n ? (items[0].elem as HTMLAnchorElement)\n : (items[items.length - 1].elem as HTMLAnchorElement);\n }\n }\n });\n };\n\n /**\n * Watches for changes to content in the default slot.\n */\n private _contentMutationObserver = new MutationObserver(\n this._contentObserverCallback.bind(this)\n );\n\n /**\n * Sets table of contents targets whenever any node tree mutation is observed.\n */\n private _contentObserverCallback() {\n const shadowRoot = this.shadowRoot as ShadowRoot;\n const allSlots = Array.from(\n shadowRoot.querySelectorAll(`slot`)\n ) as HTMLSlotElement[];\n const allSlottedNodes = allSlots.flatMap((slot) => slot.assignedNodes());\n this._setTargets(allSlottedNodes);\n }\n\n /**\n * Sets targets used for generating the table of contents.\n */\n private _setTargets(nodes: Node[]) {\n const {\n _tagNamesToAvoid: tagNamesToAvoid,\n _disableTargetAttribute: disableTargetAttribute,\n } = this;\n const { selectorTarget } = this.constructor as typeof DDSTableOfContents;\n this._targets = nodes.reduce((acc, node) => {\n if (node instanceof HTMLElement) {\n const descendants = node.querySelectorAll(\n selectorTarget\n ) as NodeListOf<HTMLElement>;\n const elems = [node, ...descendants].filter((elem) => {\n const notWhiteSpace = /[^\\s\\n\\r]/g;\n const hasTitle =\n elem.innerText.match(notWhiteSpace) ||\n elem.dataset.title?.match(notWhiteSpace);\n const hasNameAttr = elem.matches(selectorTarget);\n const notExcluded =\n !tagNamesToAvoid.includes(elem.tagName.toLowerCase()) &&\n !elem.closest(`[${disableTargetAttribute}]`);\n\n return hasTitle && hasNameAttr && notExcluded;\n });\n\n acc.push(...(elems as HTMLElement[]));\n }\n\n return acc;\n }, [] as HTMLElement[]);\n }\n\n /**\n * Handles `slotchange` event on the default `<slot>`.\n *\n * @param event The event.\n */\n private _handleSlotChange(event: Event) {\n // Handle changes to immediate slotted children.\n const slottedElements = (event.target as HTMLSlotElement)\n .assignedNodes()\n .filter((node) => node instanceof HTMLElement);\n this._setTargets(slottedElements as HTMLElement[]);\n\n // Handle changes to slotted contents' children.\n this._contentMutationObserver.disconnect();\n (event.target as HTMLSlotElement).assignedNodes().forEach((node) => {\n if (node instanceof HTMLElement) {\n this._contentMutationObserver.observe(node, {\n subtree: true,\n childList: true,\n attributeFilter: ['name', 'data-title'],\n });\n }\n });\n }\n\n /**\n * Handles `slotchange` event on `<slot name=\"heading\">`.\n */\n private _handleSlotChangeHeading() {\n this._hasHeading = Array.from(\n this.querySelectorAll('[slot=\"heading\"]')\n ).some(\n (node) => node.nodeType !== Node.TEXT_NODE || node!.textContent!.trim()\n );\n }\n\n /**\n * Handles user-initiated jump to a hash.\n *\n * @param target The hash name.\n */\n private _handleUserInitiatedJump(target: string) {\n const elem = this.querySelector(`[name=\"${target}\"]`);\n const masthead: HTMLElement | null = this.ownerDocument.querySelector(\n `${ddsPrefix}-masthead`\n );\n const mobilePadding =\n window.innerWidth < gridLgBreakpoint\n ? this._mobileContainerNode?.offsetHeight\n : 0;\n\n if (elem instanceof HTMLElement) {\n const currentY = window.scrollY;\n let targetY;\n\n if (currentY > elem.offsetTop && masthead) {\n targetY = elem.offsetTop - masthead.offsetHeight;\n } else {\n targetY = elem.offsetTop - mobilePadding!;\n }\n\n window.scrollTo(0, targetY);\n\n elem.setAttribute('tabindex', '0');\n (elem as HTMLElement).focus({ preventScroll: true });\n elem.addEventListener(\n 'focusout',\n ({ target: focusoutTarget }) => {\n (focusoutTarget as HTMLElement)?.removeAttribute('tabindex');\n },\n {\n once: true,\n }\n );\n }\n }\n\n /**\n * Cleans-up and creates the intersection observer for the scrolling container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new intersection observer.\n */\n private _cleanAndCreateIntersectionObserverContainer({\n create,\n }: { create?: boolean } = {}) {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n if (this._observerIntersection) {\n this._observerIntersection.disconnect();\n this._observerIntersection = null;\n }\n if (create) {\n this._observerIntersection = new IntersectionObserver(\n this._observeIntersectionContainer,\n {\n root: this._navBar,\n threshold: 0,\n }\n );\n if (intersectionLeftSentinelNode) {\n this._observerIntersection.observe(intersectionLeftSentinelNode);\n }\n if (intersectionRightSentinelNode) {\n this._observerIntersection.observe(intersectionRightSentinelNode);\n }\n }\n }\n\n /**\n * The intersection observer callback for the scrolling container.\n *\n * @param records The intersection observer records.\n */\n private _observeIntersectionContainer = (records) => {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n records.forEach(({ isIntersecting, target }) => {\n if (target === intersectionLeftSentinelNode) {\n this._isIntersectionLeftTrackerInContent = isIntersecting;\n }\n if (target === intersectionRightSentinelNode) {\n this._isIntersectionRightTrackerInContent = isIntersecting;\n }\n });\n };\n\n /**\n * Handles `click` event on the left-hand paginator button.\n */\n private _paginateLeft() {\n const {\n _currentScrollPosition: currentScrollPosition,\n _navBar: navBar,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n // If the right-side intersection sentinel is in the view, it means that right-side caret button is hidden.\n // Given scrolling to left makes it shown,\n // `contentContainerNode!.offsetWidth` will shrink as we scroll and we need to adjust for it.\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().right;\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().right > interimLeft - buttonWidthOffset\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().left;\n // 48 = button width - button gradient\n const newScrollPosition =\n currentScrollPosition - lastVisibleElementRight + 48;\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n } else {\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().left <\n buttonWidthOffset + navBar!.getBoundingClientRect().left\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().right;\n const newScrollPosition =\n lastVisibleElementRight +\n currentScrollPosition -\n navBar!.getBoundingClientRect().right +\n buttonWidthOffset;\n // If the new scroll position is less than the width of the left caret button,\n // it means that hiding the left caret button reveals the whole of the left-most nav item.\n // Snaps the left-most nav item to the left edge of nav container in this case.\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n }\n }\n }\n\n /**\n * Handles `click` event on the right-hand paginator button.\n */\n private _paginateRight() {\n const {\n _navBar: navBar,\n _contentNode: contentNode,\n _currentScrollPosition: currentScrollPosition,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().left;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().left < interimLeft + buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft = Math.abs(\n elems[firstVisibleElementIndex].getBoundingClientRect().right +\n buttonWidthOffset -\n navBar!.getBoundingClientRect().right\n );\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n } else {\n const interimRight = navBar!.getBoundingClientRect().right;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().right >\n interimRight - buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft =\n elems[firstVisibleElementIndex].getBoundingClientRect().left -\n navBar!.getBoundingClientRect().left -\n buttonWidthOffset;\n // Ensures that is there is no blank area at the right hand side in scroll area\n // if we see the right remainder nav items can be contained in a page\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n }\n }\n }\n\n /**\n * Handles resize of mobile container.\n *\n * @param records The resize records.\n */\n private _observeResizeMobileContainer = (records) => {\n const entry = records[records.length - 1];\n const { height } = entry.contentRect;\n this._hasMobileContainerVisible = height > 0;\n };\n\n /**\n * The current 0px offset from the top of page.\n */\n @property({ type: Number })\n stickyOffset = 0;\n\n /**\n * The throttled scroll listener.\n *\n * @param event scroll handler\n */\n @HostListener('window:scroll')\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleScroll = (event: Event) => {\n this._throttleScroll!(event);\n };\n\n /**\n * The trigger reharvest listener.\n */\n @HostListener(`document:${ddsPrefix}-table-of-contents-reharvest`)\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _retriggerHarvest = () => {\n this._targets = Array.from(this.querySelectorAll('[name]'));\n };\n\n connectedCallback() {\n super.connectedCallback();\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n if (!this._throttleScroll) {\n this._throttleScroll = throttle(this._handleOnScroll, 250);\n this._handleOnScroll();\n }\n }\n\n disconnectedCallback() {\n this._cleanAndCreateObserverResizeMobileContainer();\n this._cleanAndCreateIntersectionObserverContainer();\n this._contentMutationObserver.disconnect();\n if (this._throttleScroll) {\n this._throttleScroll.cancel();\n this._throttleScroll = null;\n }\n super.disconnectedCallback();\n }\n\n firstUpdated() {\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n\n StickyHeader.global.tableOfContents = this;\n }\n\n updated(changedProperties) {\n if (changedProperties.has('_currentTarget')) {\n const {\n _currentTarget: currentTarget,\n _mobileSelectNode: mobileSelectNode,\n } = this;\n // Ensures setting the `value` after rendering child `<option>`s when there is a change in `value`,\n // given reflecting `value` requires child `<option>`s being there beforehand\n mobileSelectNode!.value = currentTarget?.getAttribute('name') ?? '';\n }\n }\n\n render() {\n const {\n stickyOffset,\n _currentTarget: currentTarget,\n _currentScrollPosition: currentScrollPosition,\n _hasHeading: hasHeading,\n _hasMobileContainerVisible: hasMobileContainerVisible,\n _isIntersectionLeftTrackerInContent: isIntersectionLeftTrackerInContent,\n _isIntersectionRightTrackerInContent: isIntersectionRightTrackerInContent,\n _targets: targets,\n _handleChangeSelect: handleChangeSelect,\n _handleClickItem: handleClickItem,\n _handleOnKeyDown: handleOnKeyDown,\n _handleSlotChange: handleSlotChange,\n _handleSlotChangeHeading: handleSlotChangeHeading,\n _paginateLeft: paginateLeft,\n _paginateRight: paginateRight,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const containerClasses = classMap({\n [`${ddsPrefix}-ce--table-of-contents__container`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${ddsPrefix}-ce--table-of-contents-horizontal__container`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const navigationClasses = classMap({\n [`${prefix}--tableofcontents__sidebar`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${prefix}--tableofcontents__navbar`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const caretLeftContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-left-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionLeftTrackerInContent,\n });\n\n const caretRightContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-right-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionRightTrackerInContent,\n });\n\n return html`\n ${this.layout === 'horizontal'\n ? html`\n <ul class=\"${prefix}--toc__print-styles\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n `\n : ``}\n <div class=\"${containerClasses}\">\n <div part=\"table\" class=\"${navigationClasses}\">\n ${hasMobileContainerVisible\n ? nothing\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__desktop__children\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n <slot name=\"menu-rule\"></slot>\n </div>\n `}\n <div class=\"${prefix}--tableofcontents__mobile-top\"></div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretLeft20()}\n </button>\n </div>\n `\n : html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretLeft20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `}\n `\n : ``}\n <div\n class=\"${ddsPrefix}-ce--table-of-contents__items-container\"\n style=\"position: sticky; top: ${stickyOffset &&\n this.layout !== TOC_TYPES.HORIZONTAL\n ? `${stickyOffset}px`\n : 0}\">\n <div class=\"${prefix}--tableofcontents__desktop-container\">\n <div\n class=\"${prefix}--tableofcontents__desktop\"\n style=\"${pageIsRTL\n ? 'right'\n : 'left'}: -${currentScrollPosition}px\">\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-right\"></div> `\n : html` <div class=\"${prefix}--sub-content-left\"></div> `}\n <ul>\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-left\"></div> `\n : html` <div class=\"${prefix}--sub-content-right\"></div> `}\n </div>\n </div>\n <div class=\"${prefix}--tableofcontents__mobile\">\n <div class=\"${prefix}--tableofcontents__mobile__select__wrapper\">\n <select\n aria-label=\"${this.ariaLabelFormatter}\"\n class=\"${prefix}--tableofcontents__mobile__select\"\n @change=\"${handleChangeSelect}\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n return html`\n <option\n class=\"${prefix}--tableofcontents__mobile__select__option\"\n value=\"${name!}\">\n ${title}\n </option>\n `;\n })}\n </select>\n ${TableOfContents20({\n class: `${prefix}--tableofcontents__mobile__select__icon`,\n })}\n </div>\n </div>\n </div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretRight20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `\n : html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretRight20()}\n </button>\n </div>\n `}\n `\n : ``}\n </div>\n <div class=\"${prefix}--tableofcontents__content\">\n <div class=\"${prefix}--tableofcontents__content-wrapper\">\n ${!hasMobileContainerVisible\n ? undefined\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__children__mobile\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n </div>\n `}\n <slot @slotchange=\"${handleSlotChange}\"></slot>\n </div>\n </div>\n </div>\n `;\n }\n\n /**\n * The selector that selects the desktop link items.\n */\n static get selectorDesktopItem() {\n return `.${prefix}--tableofcontents__desktop__item a`;\n }\n\n /**\n * The selector that determines where to harvest the table of contents from.\n */\n static selectorTarget = '[name]';\n\n static get stableSelector() {\n return `${ddsPrefix}--table-of-contents`;\n }\n\n static styles = styles; // `styles` here is a `CSSResult` generated by custom WebPack loader\n}\n\n/* @__GENERATE_REACT_CUSTOM_ELEMENT_TYPE__ */\nexport default DDSTableOfContents;\n"]}
|
|
@@ -214,6 +214,12 @@ var DDSTableOfContents = (0, _decorate2["default"])([(0, _carbonElement.carbonEl
|
|
|
214
214
|
value: function value() {
|
|
215
215
|
return ["".concat(ddsPrefix, "-video-player")];
|
|
216
216
|
}
|
|
217
|
+
}, {
|
|
218
|
+
kind: "field",
|
|
219
|
+
key: "_disableTargetAttribute",
|
|
220
|
+
value: function value() {
|
|
221
|
+
return 'no-toc';
|
|
222
|
+
}
|
|
217
223
|
}, {
|
|
218
224
|
kind: "field",
|
|
219
225
|
decorators: [(0, _litElement.state)()],
|
|
@@ -303,6 +309,10 @@ var DDSTableOfContents = (0, _decorate2["default"])([(0, _carbonElement.carbonEl
|
|
|
303
309
|
* The Element.tagName values that should never be used as a TOC target.
|
|
304
310
|
* Typically added here because these elements have their own `[name]` attribute.
|
|
305
311
|
*/
|
|
312
|
+
/**
|
|
313
|
+
* The name of an attribute that will prevent the DOM element and any elements
|
|
314
|
+
* in its subtree from being added to the ToC.
|
|
315
|
+
*/
|
|
306
316
|
/**
|
|
307
317
|
* Boolean checking if page is RTL
|
|
308
318
|
*/
|
|
@@ -469,7 +479,8 @@ var DDSTableOfContents = (0, _decorate2["default"])([(0, _carbonElement.carbonEl
|
|
|
469
479
|
kind: "method",
|
|
470
480
|
key: "_setTargets",
|
|
471
481
|
value: function _setTargets(nodes) {
|
|
472
|
-
var tagNamesToAvoid = this._tagNamesToAvoid
|
|
482
|
+
var tagNamesToAvoid = this._tagNamesToAvoid,
|
|
483
|
+
disableTargetAttribute = this._disableTargetAttribute;
|
|
473
484
|
var _ref4 = this.constructor,
|
|
474
485
|
selectorTarget = _ref4.selectorTarget;
|
|
475
486
|
this._targets = nodes.reduce(function (acc, node) {
|
|
@@ -480,7 +491,7 @@ var DDSTableOfContents = (0, _decorate2["default"])([(0, _carbonElement.carbonEl
|
|
|
480
491
|
var notWhiteSpace = /[^\s\n\r]/g;
|
|
481
492
|
var hasTitle = elem.innerText.match(notWhiteSpace) || ((_elem$dataset$title = elem.dataset.title) === null || _elem$dataset$title === void 0 ? void 0 : _elem$dataset$title.match(notWhiteSpace));
|
|
482
493
|
var hasNameAttr = elem.matches(selectorTarget);
|
|
483
|
-
var notExcluded = !tagNamesToAvoid.includes(elem.tagName.toLowerCase());
|
|
494
|
+
var notExcluded = !tagNamesToAvoid.includes(elem.tagName.toLowerCase()) && !elem.closest("[".concat(disableTargetAttribute, "]"));
|
|
484
495
|
return hasTitle && hasNameAttr && notExcluded;
|
|
485
496
|
});
|
|
486
497
|
acc.push.apply(acc, (0, _toConsumableArray2["default"])(elems));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-of-contents.js","names":["_litHtml","require","_classMap7","_ifDefined","_litElement","_","_interopRequireDefault","_2","_settings","_layout","_hostListener","_hostListener2","_3","_throttle","_StickyHeader","_settings2","_tableOfContentsCss","_defs","_stableSelector","_carbonElement","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_templateObject17","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","Reflect","construct","arguments","apply","_possibleConstructorReturn2","sham","Proxy","Boolean","prototype","valueOf","call","e","prefix","settings","ddsPrefix","ddsSettings","stablePrefix","buttonWidthOffset","gridLgBreakpoint","parseFloat","breakpoints","lg","width","baseFontSize","findLastIndex","a","predicate","thisObject","i","length","DDSTableOfContents","_decorate2","customElement","concat","_initialize","_HostListenerMixin","_HostListenerMixin2","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","_assertThisInitialized2","_createClass2","F","d","kind","decorators","property","attribute","key","value","reflect","TOC_TYPES","DEFAULT","state","query","queryAll","ownerDocument","documentElement","dir","_cleanAndCreateObserverResizeMobileContainer","_ref","undefined","create","mobileContainerNode","_mobileContainerNode","_observerResizeMobileContainer","disconnect","ResizeObserver","_observeResizeMobileContainer","observe","_handleChangeSelect","event","_handleUserInitiatedJump","target","_handleClickItem","_target$matches","_ref2","selectorDesktopItem","matches","dataset","preventDefault","_handleOnKeyDown","_target$matches2","_ref3","pageIsRTL","_pageIsRTL","_target$parentElement3","_target$parentElement4","shiftKey","_target$parentElement","_target$parentElement2","parentElement","previousElementSibling","getBoundingClientRect","right","_navBar","_paginateLeft","nextElementSibling","left","_paginateRight","_target$parentElement7","_target$parentElement8","_target$parentElement5","_target$parentElement6","_this2","defaultView","requestAnimationFrame","_targets","items","map","elem","index","arr","height","y","position","filter","stickyOffset","bottomReached","scrollingElement","scrollTop","clientHeight","scrollHeight","_currentTarget","MutationObserver","_contentObserverCallback","bind","shadowRoot","allSlots","from","querySelectorAll","allSlottedNodes","flatMap","slot","assignedNodes","_setTargets","nodes","tagNamesToAvoid","_tagNamesToAvoid","_ref4","selectorTarget","reduce","acc","node","HTMLElement","descendants","elems","_toConsumableArray2","_elem$dataset$title","notWhiteSpace","hasTitle","innerText","match","title","hasNameAttr","notExcluded","includes","tagName","toLowerCase","push","_handleSlotChange","_this3","slottedElements","_contentMutationObserver","forEach","subtree","childList","attributeFilter","_handleSlotChangeHeading","_hasHeading","some","nodeType","Node","TEXT_NODE","textContent","trim","_this$_mobileContaine","querySelector","masthead","mobilePadding","window","innerWidth","offsetHeight","currentY","scrollY","targetY","offsetTop","scrollTo","setAttribute","focus","preventScroll","addEventListener","_ref5","focusoutTarget","removeAttribute","once","_cleanAndCreateIntersectionObserverContainer","_ref6","intersectionLeftSentinelNode","_intersectionLeftSentinelNode","intersectionRightSentinelNode","_intersectionRightSentinelNode","_observerIntersection","IntersectionObserver","_observeIntersectionContainer","root","threshold","_this4","records","_ref7","isIntersecting","_isIntersectionLeftTrackerInContent","_isIntersectionRightTrackerInContent","currentScrollPosition","_currentScrollPosition","navBar","itemNodes","_itemNodes","slice","interimLeft","lastVisibleElementIndex","lastVisibleElementRight","newScrollPosition","contentNode","_contentNode","firstVisibleElementIndex","findIndex","firstVisibleElementLeft","Math","abs","maxLeft","scrollWidth","offsetWidth","min","interimRight","_this5","entry","contentRect","_hasMobileContainerVisible","type","Number","HostListener","_this6","_throttleScroll","_this7","connectedCallback","_get2","throttle","_handleOnScroll","disconnectedCallback","cancel","firstUpdated","StickyHeader","global","tableOfContents","updated","changedProperties","has","_currentTarget$getAtt","currentTarget","mobileSelectNode","_mobileSelectNode","getAttribute","render","_classMap","_classMap2","_classMap3","_classMap4","hasHeading","hasMobileContainerVisible","isIntersectionLeftTrackerInContent","isIntersectionRightTrackerInContent","targets","handleChangeSelect","handleClickItem","handleOnKeyDown","handleSlotChange","handleSlotChangeHeading","paginateLeft","paginateRight","containerClasses","classMap","_defineProperty2","layout","HORIZONTAL","navigationClasses","caretLeftContainerClasses","caretRightContainerClasses","html","_taggedTemplateLiteral2","item","_ref8","_item$dataset$title","_classMap5","name","selected","itemClasses","ifDefined","nothing","CaretLeft20","_ref9","_item$dataset$title2","_classMap6","ariaLabelFormatter","_ref10","_item$dataset$title3","TableOfContents20","CaretRight20","stableSelector","styles","HostListenerMixin","StableSelectorMixin","LitElement","_default","exports"],"sources":["components/table-of-contents/table-of-contents.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2020, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport {\n html,\n property,\n state,\n query,\n queryAll,\n LitElement,\n} from 'lit-element';\nimport CaretLeft20 from '../../internal/vendor/@carbon/web-components/icons/caret--left/20.js';\nimport CaretRight20 from '../../internal/vendor/@carbon/web-components/icons/caret--right/20.js';\nimport settings from 'carbon-components/es/globals/js/settings.js';\nimport { baseFontSize, breakpoints } from '@carbon/layout';\nimport HostListener from '../../internal/vendor/@carbon/web-components/globals/decorators/host-listener.js';\nimport HostListenerMixin from '../../internal/vendor/@carbon/web-components/globals/mixins/host-listener.js';\nimport TableOfContents20 from '../../internal/vendor/@carbon/web-components/icons/table-of-contents/20.js';\nimport throttle from 'lodash-es/throttle.js';\nimport StickyHeader from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/StickyHeader/StickyHeader';\nimport ddsSettings from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/settings/settings';\nimport styles from './table-of-contents.scss';\nimport { TOC_TYPES } from './defs';\nimport StableSelectorMixin from '../../globals/mixins/stable-selector';\nimport { carbonElement as customElement } from '../../internal/vendor/@carbon/web-components/globals/decorators/carbon-element.js';\n\nconst { prefix } = settings;\nconst { stablePrefix: ddsPrefix } = ddsSettings;\n\n// total button width - grid offset\nconst buttonWidthOffset = 32;\n\nconst gridLgBreakpoint = parseFloat(breakpoints.lg.width) * baseFontSize;\n\ninterface Cancelable {\n cancel(): void;\n}\n\n/**\n * @param a An array.\n * @param predicate The callback function.\n * @param [thisObject] The context object for the given callback function.\n * @returns The index of the last item in the given array where `predicate` returns `true`. `-1` if no such item is found.\n */\nfunction findLastIndex<T>(\n a: T[],\n predicate: (search: T, index?: number, thisObject?: any) => boolean,\n thisObject?: any\n): number {\n for (let i = a.length - 1; i >= 0; --i) {\n if (predicate(a[i], i, thisObject)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Table of contents.\n *\n * @element dds-table-of-contents\n * @csspart table - The table UI.\n * @slot heading - The heading content.\n * @slot menu-rule - The menu rule.\n */\n@customElement(`${ddsPrefix}-table-of-contents`)\nclass DDSTableOfContents extends HostListenerMixin(\n StableSelectorMixin(LitElement)\n) {\n /**\n * The formatter for the aria label text for the mobile ToC.\n * Should be changed upon the locale the component is rendered with.\n */\n @property({ attribute: false })\n ariaLabelFormatter = 'Table of contents';\n\n /**\n * Defines TOC type, \"\" for default, `horizontal` for horizontal variant.\n */\n @property({ reflect: true, attribute: 'toc-layout' })\n layout = TOC_TYPES.DEFAULT;\n\n /**\n * The current scroll position.\n */\n @state()\n private _currentScrollPosition = 0;\n\n /**\n * The current target `<a>` that should be in view.\n */\n @state()\n private _currentTarget: HTMLAnchorElement | null = null;\n\n /**\n * `true` if left-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the left-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionLeftTrackerInContent = true;\n\n /**\n * `true` if right-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the right-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionRightTrackerInContent = true;\n\n /**\n * `true` if there is a heading content.\n */\n @state()\n private _hasHeading = false;\n\n /**\n * `true` if mobile container is visible.\n */\n @state()\n private _hasMobileContainerVisible = false;\n\n /**\n * The observer for the intersection of left-side content edge.\n */\n private _observerIntersection: IntersectionObserver | null = null;\n\n /**\n * The scrolling content.\n */\n @query(`.${prefix}--tableofcontents__desktop`)\n private _contentNode?: HTMLElement;\n\n /**\n * The left-hand sentinel to track intersection with the host element.\n * If they intersect, the left-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-left`)\n private _intersectionLeftSentinelNode?: HTMLElement;\n\n /**\n * The right-hand sentinel to track intersection with the host element.\n * If they intersect, the right-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-right`)\n private _intersectionRightSentinelNode?: HTMLElement;\n\n @queryAll(`.${prefix}--tableofcontents__desktop__item`)\n private _itemNodes?: HTMLElement[] = [];\n\n @query(`.${prefix}--tableofcontents__navbar`)\n private _navBar?: HTMLElement;\n\n /**\n * The container for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile`)\n private _mobileContainerNode?: HTMLElement;\n\n /**\n * The `<select>` for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile__select`)\n private _mobileSelectNode?: HTMLSelectElement;\n\n /**\n * The observer for the resize of the mobile container.\n */\n private _observerResizeMobileContainer: any | null = null; // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n\n /**\n * The target elements matching `[name]` harvested from the document.\n */\n @state()\n private _targets: HTMLElement[] = [];\n\n /**\n * The Element.tagName values that should never be used as a TOC target.\n * Typically added here because these elements have their own `[name]` attribute.\n */\n private _tagNamesToAvoid = [`${ddsPrefix}-video-player`];\n\n /**\n * Boolean checking if page is RTL\n */\n @state()\n private _pageIsRTL: Boolean =\n this.ownerDocument!.documentElement.dir === 'rtl';\n\n /**\n * The handler for throttled scrolling\n */\n private _throttleScroll: (((event: Event) => void) & Cancelable) | null =\n null;\n\n /**\n * Cleans-up and creats the resize observer for the mobile container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new resize observer.\n */\n private _cleanAndCreateObserverResizeMobileContainer({\n create,\n }: { create?: boolean } = {}) {\n const { _mobileContainerNode: mobileContainerNode } = this;\n if (mobileContainerNode) {\n if (this._observerResizeMobileContainer) {\n this._observerResizeMobileContainer.disconnect();\n this._observerResizeMobileContainer = null;\n }\n if (create) {\n // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n // @ts-ignore\n this._observerResizeMobileContainer = new ResizeObserver(\n this._observeResizeMobileContainer\n );\n this._observerResizeMobileContainer.observe(mobileContainerNode);\n }\n }\n }\n\n /**\n * Handles `change` event on mobile `<select>`.\n *\n * @param event The event.\n */\n private _handleChangeSelect(event: Event) {\n this._handleUserInitiatedJump((event.target as HTMLSelectElement).value);\n }\n\n /**\n * Handles `click` event on a menu item.\n *\n * @param event The event.\n */\n private _handleClickItem(event: MouseEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n if (target.matches?.(selectorDesktopItem)) {\n this._handleUserInitiatedJump(target.dataset.target!);\n event.preventDefault();\n }\n }\n\n /**\n * Handles `click` event on a TOC navigation item.\n *\n * @param event The event.\n */\n private _handleOnKeyDown(event: KeyboardEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n const { _pageIsRTL: pageIsRTL } = this;\n if (target.matches?.(selectorDesktopItem)) {\n if (pageIsRTL) {\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n } else if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling!.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling!.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n }\n }\n\n /**\n * Handles intersection of target `<a>`s with the viewport by checking which target's\n * immediate siblings are close to the viewport, and set the active target depending\n * on their positions.\n */\n private _handleOnScroll = () => {\n this.ownerDocument!.defaultView!.requestAnimationFrame(() => {\n if (this._targets) {\n const items = this._targets\n .map((elem, index, arr) => ({\n elem,\n height: arr[index + 1]\n ? arr[index + 1].getBoundingClientRect().y -\n elem.getBoundingClientRect().y\n : null,\n position: elem.getBoundingClientRect().y,\n }))\n .filter((elem, index, arr) =>\n elem.height === null\n ? arr[index - 1].position < arr[index - 1].height!\n : elem.position - 50 - this.stickyOffset > -elem.height\n );\n\n // Sets last section as active at the end of page in case there is not enough height for it to dynamically activate\n const bottomReached =\n this.ownerDocument!.scrollingElement!.scrollTop +\n this.ownerDocument!.scrollingElement!.clientHeight ===\n this.ownerDocument!.scrollingElement!.scrollHeight;\n if (items && items[0] && items[items.length - 1]) {\n this._currentTarget = !bottomReached\n ? (items[0].elem as HTMLAnchorElement)\n : (items[items.length - 1].elem as HTMLAnchorElement);\n }\n }\n });\n };\n\n /**\n * Watches for changes to content in the default slot.\n */\n private _contentMutationObserver = new MutationObserver(\n this._contentObserverCallback.bind(this)\n );\n\n /**\n * Sets table of contents targets whenever any node tree mutation is observed.\n */\n private _contentObserverCallback() {\n const shadowRoot = this.shadowRoot as ShadowRoot;\n const allSlots = Array.from(\n shadowRoot.querySelectorAll(`slot`)\n ) as HTMLSlotElement[];\n const allSlottedNodes = allSlots.flatMap((slot) => slot.assignedNodes());\n this._setTargets(allSlottedNodes);\n }\n\n /**\n * Sets targets used for generating the table of contents.\n */\n private _setTargets(nodes: Node[]) {\n const { _tagNamesToAvoid: tagNamesToAvoid } = this;\n const { selectorTarget } = this.constructor as typeof DDSTableOfContents;\n this._targets = nodes.reduce((acc, node) => {\n if (node instanceof HTMLElement) {\n const descendants = node.querySelectorAll(\n selectorTarget\n ) as NodeListOf<HTMLElement>;\n const elems = [node, ...descendants].filter((elem) => {\n const notWhiteSpace = /[^\\s\\n\\r]/g;\n const hasTitle =\n elem.innerText.match(notWhiteSpace) ||\n elem.dataset.title?.match(notWhiteSpace);\n const hasNameAttr = elem.matches(selectorTarget);\n const notExcluded = !tagNamesToAvoid.includes(\n elem.tagName.toLowerCase()\n );\n\n return hasTitle && hasNameAttr && notExcluded;\n });\n\n acc.push(...(elems as HTMLElement[]));\n }\n\n return acc;\n }, [] as HTMLElement[]);\n }\n\n /**\n * Handles `slotchange` event on the default `<slot>`.\n *\n * @param event The event.\n */\n private _handleSlotChange(event: Event) {\n // Handle changes to immediate slotted children.\n const slottedElements = (event.target as HTMLSlotElement)\n .assignedNodes()\n .filter((node) => node instanceof HTMLElement);\n this._setTargets(slottedElements as HTMLElement[]);\n\n // Handle changes to slotted contents' children.\n this._contentMutationObserver.disconnect();\n (event.target as HTMLSlotElement).assignedNodes().forEach((node) => {\n if (node instanceof HTMLElement) {\n this._contentMutationObserver.observe(node, {\n subtree: true,\n childList: true,\n attributeFilter: ['name', 'data-title'],\n });\n }\n });\n }\n\n /**\n * Handles `slotchange` event on `<slot name=\"heading\">`.\n */\n private _handleSlotChangeHeading() {\n this._hasHeading = Array.from(\n this.querySelectorAll('[slot=\"heading\"]')\n ).some(\n (node) => node.nodeType !== Node.TEXT_NODE || node!.textContent!.trim()\n );\n }\n\n /**\n * Handles user-initiated jump to a hash.\n *\n * @param target The hash name.\n */\n private _handleUserInitiatedJump(target: string) {\n const elem = this.querySelector(`[name=\"${target}\"]`);\n const masthead: HTMLElement | null = this.ownerDocument.querySelector(\n `${ddsPrefix}-masthead`\n );\n const mobilePadding =\n window.innerWidth < gridLgBreakpoint\n ? this._mobileContainerNode?.offsetHeight\n : 0;\n\n if (elem instanceof HTMLElement) {\n const currentY = window.scrollY;\n let targetY;\n\n if (currentY > elem.offsetTop && masthead) {\n targetY = elem.offsetTop - masthead.offsetHeight;\n } else {\n targetY = elem.offsetTop - mobilePadding!;\n }\n\n window.scrollTo(0, targetY);\n\n elem.setAttribute('tabindex', '0');\n (elem as HTMLElement).focus({ preventScroll: true });\n elem.addEventListener(\n 'focusout',\n ({ target: focusoutTarget }) => {\n (focusoutTarget as HTMLElement)?.removeAttribute('tabindex');\n },\n {\n once: true,\n }\n );\n }\n }\n\n /**\n * Cleans-up and creates the intersection observer for the scrolling container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new intersection observer.\n */\n private _cleanAndCreateIntersectionObserverContainer({\n create,\n }: { create?: boolean } = {}) {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n if (this._observerIntersection) {\n this._observerIntersection.disconnect();\n this._observerIntersection = null;\n }\n if (create) {\n this._observerIntersection = new IntersectionObserver(\n this._observeIntersectionContainer,\n {\n root: this._navBar,\n threshold: 0,\n }\n );\n if (intersectionLeftSentinelNode) {\n this._observerIntersection.observe(intersectionLeftSentinelNode);\n }\n if (intersectionRightSentinelNode) {\n this._observerIntersection.observe(intersectionRightSentinelNode);\n }\n }\n }\n\n /**\n * The intersection observer callback for the scrolling container.\n *\n * @param records The intersection observer records.\n */\n private _observeIntersectionContainer = (records) => {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n records.forEach(({ isIntersecting, target }) => {\n if (target === intersectionLeftSentinelNode) {\n this._isIntersectionLeftTrackerInContent = isIntersecting;\n }\n if (target === intersectionRightSentinelNode) {\n this._isIntersectionRightTrackerInContent = isIntersecting;\n }\n });\n };\n\n /**\n * Handles `click` event on the left-hand paginator button.\n */\n private _paginateLeft() {\n const {\n _currentScrollPosition: currentScrollPosition,\n _navBar: navBar,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n // If the right-side intersection sentinel is in the view, it means that right-side caret button is hidden.\n // Given scrolling to left makes it shown,\n // `contentContainerNode!.offsetWidth` will shrink as we scroll and we need to adjust for it.\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().right;\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().right > interimLeft - buttonWidthOffset\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().left;\n // 48 = button width - button gradient\n const newScrollPosition =\n currentScrollPosition - lastVisibleElementRight + 48;\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n } else {\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().left <\n buttonWidthOffset + navBar!.getBoundingClientRect().left\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().right;\n const newScrollPosition =\n lastVisibleElementRight +\n currentScrollPosition -\n navBar!.getBoundingClientRect().right +\n buttonWidthOffset;\n // If the new scroll position is less than the width of the left caret button,\n // it means that hiding the left caret button reveals the whole of the left-most nav item.\n // Snaps the left-most nav item to the left edge of nav container in this case.\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n }\n }\n }\n\n /**\n * Handles `click` event on the right-hand paginator button.\n */\n private _paginateRight() {\n const {\n _navBar: navBar,\n _contentNode: contentNode,\n _currentScrollPosition: currentScrollPosition,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().left;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().left < interimLeft + buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft = Math.abs(\n elems[firstVisibleElementIndex].getBoundingClientRect().right +\n buttonWidthOffset -\n navBar!.getBoundingClientRect().right\n );\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n } else {\n const interimRight = navBar!.getBoundingClientRect().right;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().right >\n interimRight - buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft =\n elems[firstVisibleElementIndex].getBoundingClientRect().left -\n navBar!.getBoundingClientRect().left -\n buttonWidthOffset;\n // Ensures that is there is no blank area at the right hand side in scroll area\n // if we see the right remainder nav items can be contained in a page\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n }\n }\n }\n\n /**\n * Handles resize of mobile container.\n *\n * @param records The resize records.\n */\n private _observeResizeMobileContainer = (records) => {\n const entry = records[records.length - 1];\n const { height } = entry.contentRect;\n this._hasMobileContainerVisible = height > 0;\n };\n\n /**\n * The current 0px offset from the top of page.\n */\n @property({ type: Number })\n stickyOffset = 0;\n\n /**\n * The throttled scroll listener.\n *\n * @param event scroll handler\n */\n @HostListener('window:scroll')\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleScroll = (event: Event) => {\n this._throttleScroll!(event);\n };\n\n /**\n * The trigger reharvest listener.\n */\n @HostListener(`document:${ddsPrefix}-table-of-contents-reharvest`)\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _retriggerHarvest = () => {\n this._targets = Array.from(this.querySelectorAll('[name]'));\n };\n\n connectedCallback() {\n super.connectedCallback();\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n if (!this._throttleScroll) {\n this._throttleScroll = throttle(this._handleOnScroll, 250);\n this._handleOnScroll();\n }\n }\n\n disconnectedCallback() {\n this._cleanAndCreateObserverResizeMobileContainer();\n this._cleanAndCreateIntersectionObserverContainer();\n this._contentMutationObserver.disconnect();\n if (this._throttleScroll) {\n this._throttleScroll.cancel();\n this._throttleScroll = null;\n }\n super.disconnectedCallback();\n }\n\n firstUpdated() {\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n\n StickyHeader.global.tableOfContents = this;\n }\n\n updated(changedProperties) {\n if (changedProperties.has('_currentTarget')) {\n const {\n _currentTarget: currentTarget,\n _mobileSelectNode: mobileSelectNode,\n } = this;\n // Ensures setting the `value` after rendering child `<option>`s when there is a change in `value`,\n // given reflecting `value` requires child `<option>`s being there beforehand\n mobileSelectNode!.value = currentTarget?.getAttribute('name') ?? '';\n }\n }\n\n render() {\n const {\n stickyOffset,\n _currentTarget: currentTarget,\n _currentScrollPosition: currentScrollPosition,\n _hasHeading: hasHeading,\n _hasMobileContainerVisible: hasMobileContainerVisible,\n _isIntersectionLeftTrackerInContent: isIntersectionLeftTrackerInContent,\n _isIntersectionRightTrackerInContent: isIntersectionRightTrackerInContent,\n _targets: targets,\n _handleChangeSelect: handleChangeSelect,\n _handleClickItem: handleClickItem,\n _handleOnKeyDown: handleOnKeyDown,\n _handleSlotChange: handleSlotChange,\n _handleSlotChangeHeading: handleSlotChangeHeading,\n _paginateLeft: paginateLeft,\n _paginateRight: paginateRight,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const containerClasses = classMap({\n [`${ddsPrefix}-ce--table-of-contents__container`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${ddsPrefix}-ce--table-of-contents-horizontal__container`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const navigationClasses = classMap({\n [`${prefix}--tableofcontents__sidebar`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${prefix}--tableofcontents__navbar`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const caretLeftContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-left-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionLeftTrackerInContent,\n });\n\n const caretRightContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-right-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionRightTrackerInContent,\n });\n\n return html`\n ${this.layout === 'horizontal'\n ? html`\n <ul class=\"${prefix}--toc__print-styles\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n `\n : ``}\n <div class=\"${containerClasses}\">\n <div part=\"table\" class=\"${navigationClasses}\">\n ${hasMobileContainerVisible\n ? nothing\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__desktop__children\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n <slot name=\"menu-rule\"></slot>\n </div>\n `}\n <div class=\"${prefix}--tableofcontents__mobile-top\"></div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretLeft20()}\n </button>\n </div>\n `\n : html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretLeft20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `}\n `\n : ``}\n <div\n class=\"${ddsPrefix}-ce--table-of-contents__items-container\"\n style=\"position: sticky; top: ${stickyOffset &&\n this.layout !== TOC_TYPES.HORIZONTAL\n ? `${stickyOffset}px`\n : 0}\">\n <div class=\"${prefix}--tableofcontents__desktop-container\">\n <div\n class=\"${prefix}--tableofcontents__desktop\"\n style=\"${pageIsRTL\n ? 'right'\n : 'left'}: -${currentScrollPosition}px\">\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-right\"></div> `\n : html` <div class=\"${prefix}--sub-content-left\"></div> `}\n <ul>\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-left\"></div> `\n : html` <div class=\"${prefix}--sub-content-right\"></div> `}\n </div>\n </div>\n <div class=\"${prefix}--tableofcontents__mobile\">\n <div class=\"${prefix}--tableofcontents__mobile__select__wrapper\">\n <select\n aria-label=\"${this.ariaLabelFormatter}\"\n class=\"${prefix}--tableofcontents__mobile__select\"\n @change=\"${handleChangeSelect}\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n return html`\n <option\n class=\"${prefix}--tableofcontents__mobile__select__option\"\n value=\"${name!}\">\n ${title}\n </option>\n `;\n })}\n </select>\n ${TableOfContents20({\n class: `${prefix}--tableofcontents__mobile__select__icon`,\n })}\n </div>\n </div>\n </div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretRight20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `\n : html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretRight20()}\n </button>\n </div>\n `}\n `\n : ``}\n </div>\n <div class=\"${prefix}--tableofcontents__content\">\n <div class=\"${prefix}--tableofcontents__content-wrapper\">\n ${!hasMobileContainerVisible\n ? undefined\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__children__mobile\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n </div>\n `}\n <slot @slotchange=\"${handleSlotChange}\"></slot>\n </div>\n </div>\n </div>\n `;\n }\n\n /**\n * The selector that selects the desktop link items.\n */\n static get selectorDesktopItem() {\n return `.${prefix}--tableofcontents__desktop__item a`;\n }\n\n /**\n * The selector that determines where to harvest the table of contents from.\n */\n static selectorTarget = '[name]';\n\n static get stableSelector() {\n return `${ddsPrefix}--table-of-contents`;\n }\n\n static styles = styles; // `styles` here is a `CSSResult` generated by custom WebPack loader\n}\n\n/* @__GENERATE_REACT_CUSTOM_ELEMENT_TYPE__ */\nexport default DDSTableOfContents;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-of-contents.js","names":["_litHtml","require","_classMap7","_ifDefined","_litElement","_","_interopRequireDefault","_2","_settings","_layout","_hostListener","_hostListener2","_3","_throttle","_StickyHeader","_settings2","_tableOfContentsCss","_defs","_stableSelector","_carbonElement","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_templateObject17","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","Reflect","construct","arguments","apply","_possibleConstructorReturn2","sham","Proxy","Boolean","prototype","valueOf","call","e","prefix","settings","ddsPrefix","ddsSettings","stablePrefix","buttonWidthOffset","gridLgBreakpoint","parseFloat","breakpoints","lg","width","baseFontSize","findLastIndex","a","predicate","thisObject","i","length","DDSTableOfContents","_decorate2","customElement","concat","_initialize","_HostListenerMixin","_HostListenerMixin2","_inherits2","_super","_this","_classCallCheck2","_len","args","Array","_key","_assertThisInitialized2","_createClass2","F","d","kind","decorators","property","attribute","key","value","reflect","TOC_TYPES","DEFAULT","state","query","queryAll","ownerDocument","documentElement","dir","_cleanAndCreateObserverResizeMobileContainer","_ref","undefined","create","mobileContainerNode","_mobileContainerNode","_observerResizeMobileContainer","disconnect","ResizeObserver","_observeResizeMobileContainer","observe","_handleChangeSelect","event","_handleUserInitiatedJump","target","_handleClickItem","_target$matches","_ref2","selectorDesktopItem","matches","dataset","preventDefault","_handleOnKeyDown","_target$matches2","_ref3","pageIsRTL","_pageIsRTL","_target$parentElement3","_target$parentElement4","shiftKey","_target$parentElement","_target$parentElement2","parentElement","previousElementSibling","getBoundingClientRect","right","_navBar","_paginateLeft","nextElementSibling","left","_paginateRight","_target$parentElement7","_target$parentElement8","_target$parentElement5","_target$parentElement6","_this2","defaultView","requestAnimationFrame","_targets","items","map","elem","index","arr","height","y","position","filter","stickyOffset","bottomReached","scrollingElement","scrollTop","clientHeight","scrollHeight","_currentTarget","MutationObserver","_contentObserverCallback","bind","shadowRoot","allSlots","from","querySelectorAll","allSlottedNodes","flatMap","slot","assignedNodes","_setTargets","nodes","tagNamesToAvoid","_tagNamesToAvoid","disableTargetAttribute","_disableTargetAttribute","_ref4","selectorTarget","reduce","acc","node","HTMLElement","descendants","elems","_toConsumableArray2","_elem$dataset$title","notWhiteSpace","hasTitle","innerText","match","title","hasNameAttr","notExcluded","includes","tagName","toLowerCase","closest","push","_handleSlotChange","_this3","slottedElements","_contentMutationObserver","forEach","subtree","childList","attributeFilter","_handleSlotChangeHeading","_hasHeading","some","nodeType","Node","TEXT_NODE","textContent","trim","_this$_mobileContaine","querySelector","masthead","mobilePadding","window","innerWidth","offsetHeight","currentY","scrollY","targetY","offsetTop","scrollTo","setAttribute","focus","preventScroll","addEventListener","_ref5","focusoutTarget","removeAttribute","once","_cleanAndCreateIntersectionObserverContainer","_ref6","intersectionLeftSentinelNode","_intersectionLeftSentinelNode","intersectionRightSentinelNode","_intersectionRightSentinelNode","_observerIntersection","IntersectionObserver","_observeIntersectionContainer","root","threshold","_this4","records","_ref7","isIntersecting","_isIntersectionLeftTrackerInContent","_isIntersectionRightTrackerInContent","currentScrollPosition","_currentScrollPosition","navBar","itemNodes","_itemNodes","slice","interimLeft","lastVisibleElementIndex","lastVisibleElementRight","newScrollPosition","contentNode","_contentNode","firstVisibleElementIndex","findIndex","firstVisibleElementLeft","Math","abs","maxLeft","scrollWidth","offsetWidth","min","interimRight","_this5","entry","contentRect","_hasMobileContainerVisible","type","Number","HostListener","_this6","_throttleScroll","_this7","connectedCallback","_get2","throttle","_handleOnScroll","disconnectedCallback","cancel","firstUpdated","StickyHeader","global","tableOfContents","updated","changedProperties","has","_currentTarget$getAtt","currentTarget","mobileSelectNode","_mobileSelectNode","getAttribute","render","_classMap","_classMap2","_classMap3","_classMap4","hasHeading","hasMobileContainerVisible","isIntersectionLeftTrackerInContent","isIntersectionRightTrackerInContent","targets","handleChangeSelect","handleClickItem","handleOnKeyDown","handleSlotChange","handleSlotChangeHeading","paginateLeft","paginateRight","containerClasses","classMap","_defineProperty2","layout","HORIZONTAL","navigationClasses","caretLeftContainerClasses","caretRightContainerClasses","html","_taggedTemplateLiteral2","item","_ref8","_item$dataset$title","_classMap5","name","selected","itemClasses","ifDefined","nothing","CaretLeft20","_ref9","_item$dataset$title2","_classMap6","ariaLabelFormatter","_ref10","_item$dataset$title3","TableOfContents20","CaretRight20","stableSelector","styles","HostListenerMixin","StableSelectorMixin","LitElement","_default","exports"],"sources":["components/table-of-contents/table-of-contents.ts"],"sourcesContent":["/**\n * @license\n *\n * Copyright IBM Corp. 2020, 2023\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport {\n html,\n property,\n state,\n query,\n queryAll,\n LitElement,\n} from 'lit-element';\nimport CaretLeft20 from '../../internal/vendor/@carbon/web-components/icons/caret--left/20.js';\nimport CaretRight20 from '../../internal/vendor/@carbon/web-components/icons/caret--right/20.js';\nimport settings from 'carbon-components/es/globals/js/settings.js';\nimport { baseFontSize, breakpoints } from '@carbon/layout';\nimport HostListener from '../../internal/vendor/@carbon/web-components/globals/decorators/host-listener.js';\nimport HostListenerMixin from '../../internal/vendor/@carbon/web-components/globals/mixins/host-listener.js';\nimport TableOfContents20 from '../../internal/vendor/@carbon/web-components/icons/table-of-contents/20.js';\nimport throttle from 'lodash-es/throttle.js';\nimport StickyHeader from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/StickyHeader/StickyHeader';\nimport ddsSettings from '../../internal/vendor/@carbon/ibmdotcom-utilities/utilities/settings/settings';\nimport styles from './table-of-contents.scss';\nimport { TOC_TYPES } from './defs';\nimport StableSelectorMixin from '../../globals/mixins/stable-selector';\nimport { carbonElement as customElement } from '../../internal/vendor/@carbon/web-components/globals/decorators/carbon-element.js';\n\nconst { prefix } = settings;\nconst { stablePrefix: ddsPrefix } = ddsSettings;\n\n// total button width - grid offset\nconst buttonWidthOffset = 32;\n\nconst gridLgBreakpoint = parseFloat(breakpoints.lg.width) * baseFontSize;\n\ninterface Cancelable {\n cancel(): void;\n}\n\n/**\n * @param a An array.\n * @param predicate The callback function.\n * @param [thisObject] The context object for the given callback function.\n * @returns The index of the last item in the given array where `predicate` returns `true`. `-1` if no such item is found.\n */\nfunction findLastIndex<T>(\n a: T[],\n predicate: (search: T, index?: number, thisObject?: any) => boolean,\n thisObject?: any\n): number {\n for (let i = a.length - 1; i >= 0; --i) {\n if (predicate(a[i], i, thisObject)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Table of contents.\n *\n * @element dds-table-of-contents\n * @csspart table - The table UI.\n * @slot heading - The heading content.\n * @slot menu-rule - The menu rule.\n */\n@customElement(`${ddsPrefix}-table-of-contents`)\nclass DDSTableOfContents extends HostListenerMixin(\n StableSelectorMixin(LitElement)\n) {\n /**\n * The formatter for the aria label text for the mobile ToC.\n * Should be changed upon the locale the component is rendered with.\n */\n @property({ attribute: false })\n ariaLabelFormatter = 'Table of contents';\n\n /**\n * Defines TOC type, \"\" for default, `horizontal` for horizontal variant.\n */\n @property({ reflect: true, attribute: 'toc-layout' })\n layout = TOC_TYPES.DEFAULT;\n\n /**\n * The current scroll position.\n */\n @state()\n private _currentScrollPosition = 0;\n\n /**\n * The current target `<a>` that should be in view.\n */\n @state()\n private _currentTarget: HTMLAnchorElement | null = null;\n\n /**\n * `true` if left-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the left-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionLeftTrackerInContent = true;\n\n /**\n * `true` if right-hand scroll intersection sentinel intersects with the host element.\n * In this condition, the right-hand paginator button should be hidden.\n */\n @state()\n private _isIntersectionRightTrackerInContent = true;\n\n /**\n * `true` if there is a heading content.\n */\n @state()\n private _hasHeading = false;\n\n /**\n * `true` if mobile container is visible.\n */\n @state()\n private _hasMobileContainerVisible = false;\n\n /**\n * The observer for the intersection of left-side content edge.\n */\n private _observerIntersection: IntersectionObserver | null = null;\n\n /**\n * The scrolling content.\n */\n @query(`.${prefix}--tableofcontents__desktop`)\n private _contentNode?: HTMLElement;\n\n /**\n * The left-hand sentinel to track intersection with the host element.\n * If they intersect, the left-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-left`)\n private _intersectionLeftSentinelNode?: HTMLElement;\n\n /**\n * The right-hand sentinel to track intersection with the host element.\n * If they intersect, the right-hand paginator button should be hidden.\n */\n @query(`.${prefix}--sub-content-right`)\n private _intersectionRightSentinelNode?: HTMLElement;\n\n @queryAll(`.${prefix}--tableofcontents__desktop__item`)\n private _itemNodes?: HTMLElement[] = [];\n\n @query(`.${prefix}--tableofcontents__navbar`)\n private _navBar?: HTMLElement;\n\n /**\n * The container for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile`)\n private _mobileContainerNode?: HTMLElement;\n\n /**\n * The `<select>` for the mobile UI.\n */\n @query(`.${prefix}--tableofcontents__mobile__select`)\n private _mobileSelectNode?: HTMLSelectElement;\n\n /**\n * The observer for the resize of the mobile container.\n */\n private _observerResizeMobileContainer: any | null = null; // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n\n /**\n * The target elements matching `[name]` harvested from the document.\n */\n @state()\n private _targets: HTMLElement[] = [];\n\n /**\n * The Element.tagName values that should never be used as a TOC target.\n * Typically added here because these elements have their own `[name]` attribute.\n */\n private _tagNamesToAvoid = [`${ddsPrefix}-video-player`];\n\n /**\n * The name of an attribute that will prevent the DOM element and any elements\n * in its subtree from being added to the ToC.\n */\n private _disableTargetAttribute = 'no-toc';\n\n /**\n * Boolean checking if page is RTL\n */\n @state()\n private _pageIsRTL: Boolean =\n this.ownerDocument!.documentElement.dir === 'rtl';\n\n /**\n * The handler for throttled scrolling\n */\n private _throttleScroll: (((event: Event) => void) & Cancelable) | null =\n null;\n\n /**\n * Cleans-up and creats the resize observer for the mobile container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new resize observer.\n */\n private _cleanAndCreateObserverResizeMobileContainer({\n create,\n }: { create?: boolean } = {}) {\n const { _mobileContainerNode: mobileContainerNode } = this;\n if (mobileContainerNode) {\n if (this._observerResizeMobileContainer) {\n this._observerResizeMobileContainer.disconnect();\n this._observerResizeMobileContainer = null;\n }\n if (create) {\n // TODO: Wait for `.d.ts` update to support `ResizeObserver`\n // @ts-ignore\n this._observerResizeMobileContainer = new ResizeObserver(\n this._observeResizeMobileContainer\n );\n this._observerResizeMobileContainer.observe(mobileContainerNode);\n }\n }\n }\n\n /**\n * Handles `change` event on mobile `<select>`.\n *\n * @param event The event.\n */\n private _handleChangeSelect(event: Event) {\n this._handleUserInitiatedJump((event.target as HTMLSelectElement).value);\n }\n\n /**\n * Handles `click` event on a menu item.\n *\n * @param event The event.\n */\n private _handleClickItem(event: MouseEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n if (target.matches?.(selectorDesktopItem)) {\n this._handleUserInitiatedJump(target.dataset.target!);\n event.preventDefault();\n }\n }\n\n /**\n * Handles `click` event on a TOC navigation item.\n *\n * @param event The event.\n */\n private _handleOnKeyDown(event: KeyboardEvent) {\n const { selectorDesktopItem } = this\n .constructor as typeof DDSTableOfContents;\n const target = event.target as HTMLAnchorElement;\n const { _pageIsRTL: pageIsRTL } = this;\n if (target.matches?.(selectorDesktopItem)) {\n if (pageIsRTL) {\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n } else if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (\n target.parentElement?.previousElementSibling &&\n target.parentElement?.previousElementSibling!.getBoundingClientRect()\n .left <\n this._navBar!.getBoundingClientRect().left + buttonWidthOffset\n ) {\n this._paginateLeft();\n }\n } else if (\n target.parentElement?.nextElementSibling &&\n target.parentElement?.nextElementSibling!.getBoundingClientRect()\n .right >\n this._navBar!.getBoundingClientRect().right - buttonWidthOffset\n ) {\n this._paginateRight();\n }\n }\n }\n }\n\n /**\n * Handles intersection of target `<a>`s with the viewport by checking which target's\n * immediate siblings are close to the viewport, and set the active target depending\n * on their positions.\n */\n private _handleOnScroll = () => {\n this.ownerDocument!.defaultView!.requestAnimationFrame(() => {\n if (this._targets) {\n const items = this._targets\n .map((elem, index, arr) => ({\n elem,\n height: arr[index + 1]\n ? arr[index + 1].getBoundingClientRect().y -\n elem.getBoundingClientRect().y\n : null,\n position: elem.getBoundingClientRect().y,\n }))\n .filter((elem, index, arr) =>\n elem.height === null\n ? arr[index - 1].position < arr[index - 1].height!\n : elem.position - 50 - this.stickyOffset > -elem.height\n );\n\n // Sets last section as active at the end of page in case there is not enough height for it to dynamically activate\n const bottomReached =\n this.ownerDocument!.scrollingElement!.scrollTop +\n this.ownerDocument!.scrollingElement!.clientHeight ===\n this.ownerDocument!.scrollingElement!.scrollHeight;\n if (items && items[0] && items[items.length - 1]) {\n this._currentTarget = !bottomReached\n ? (items[0].elem as HTMLAnchorElement)\n : (items[items.length - 1].elem as HTMLAnchorElement);\n }\n }\n });\n };\n\n /**\n * Watches for changes to content in the default slot.\n */\n private _contentMutationObserver = new MutationObserver(\n this._contentObserverCallback.bind(this)\n );\n\n /**\n * Sets table of contents targets whenever any node tree mutation is observed.\n */\n private _contentObserverCallback() {\n const shadowRoot = this.shadowRoot as ShadowRoot;\n const allSlots = Array.from(\n shadowRoot.querySelectorAll(`slot`)\n ) as HTMLSlotElement[];\n const allSlottedNodes = allSlots.flatMap((slot) => slot.assignedNodes());\n this._setTargets(allSlottedNodes);\n }\n\n /**\n * Sets targets used for generating the table of contents.\n */\n private _setTargets(nodes: Node[]) {\n const {\n _tagNamesToAvoid: tagNamesToAvoid,\n _disableTargetAttribute: disableTargetAttribute,\n } = this;\n const { selectorTarget } = this.constructor as typeof DDSTableOfContents;\n this._targets = nodes.reduce((acc, node) => {\n if (node instanceof HTMLElement) {\n const descendants = node.querySelectorAll(\n selectorTarget\n ) as NodeListOf<HTMLElement>;\n const elems = [node, ...descendants].filter((elem) => {\n const notWhiteSpace = /[^\\s\\n\\r]/g;\n const hasTitle =\n elem.innerText.match(notWhiteSpace) ||\n elem.dataset.title?.match(notWhiteSpace);\n const hasNameAttr = elem.matches(selectorTarget);\n const notExcluded =\n !tagNamesToAvoid.includes(elem.tagName.toLowerCase()) &&\n !elem.closest(`[${disableTargetAttribute}]`);\n\n return hasTitle && hasNameAttr && notExcluded;\n });\n\n acc.push(...(elems as HTMLElement[]));\n }\n\n return acc;\n }, [] as HTMLElement[]);\n }\n\n /**\n * Handles `slotchange` event on the default `<slot>`.\n *\n * @param event The event.\n */\n private _handleSlotChange(event: Event) {\n // Handle changes to immediate slotted children.\n const slottedElements = (event.target as HTMLSlotElement)\n .assignedNodes()\n .filter((node) => node instanceof HTMLElement);\n this._setTargets(slottedElements as HTMLElement[]);\n\n // Handle changes to slotted contents' children.\n this._contentMutationObserver.disconnect();\n (event.target as HTMLSlotElement).assignedNodes().forEach((node) => {\n if (node instanceof HTMLElement) {\n this._contentMutationObserver.observe(node, {\n subtree: true,\n childList: true,\n attributeFilter: ['name', 'data-title'],\n });\n }\n });\n }\n\n /**\n * Handles `slotchange` event on `<slot name=\"heading\">`.\n */\n private _handleSlotChangeHeading() {\n this._hasHeading = Array.from(\n this.querySelectorAll('[slot=\"heading\"]')\n ).some(\n (node) => node.nodeType !== Node.TEXT_NODE || node!.textContent!.trim()\n );\n }\n\n /**\n * Handles user-initiated jump to a hash.\n *\n * @param target The hash name.\n */\n private _handleUserInitiatedJump(target: string) {\n const elem = this.querySelector(`[name=\"${target}\"]`);\n const masthead: HTMLElement | null = this.ownerDocument.querySelector(\n `${ddsPrefix}-masthead`\n );\n const mobilePadding =\n window.innerWidth < gridLgBreakpoint\n ? this._mobileContainerNode?.offsetHeight\n : 0;\n\n if (elem instanceof HTMLElement) {\n const currentY = window.scrollY;\n let targetY;\n\n if (currentY > elem.offsetTop && masthead) {\n targetY = elem.offsetTop - masthead.offsetHeight;\n } else {\n targetY = elem.offsetTop - mobilePadding!;\n }\n\n window.scrollTo(0, targetY);\n\n elem.setAttribute('tabindex', '0');\n (elem as HTMLElement).focus({ preventScroll: true });\n elem.addEventListener(\n 'focusout',\n ({ target: focusoutTarget }) => {\n (focusoutTarget as HTMLElement)?.removeAttribute('tabindex');\n },\n {\n once: true,\n }\n );\n }\n }\n\n /**\n * Cleans-up and creates the intersection observer for the scrolling container.\n *\n * @param [options] The options.\n * @param [options.create] `true` to create the new intersection observer.\n */\n private _cleanAndCreateIntersectionObserverContainer({\n create,\n }: { create?: boolean } = {}) {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n if (this._observerIntersection) {\n this._observerIntersection.disconnect();\n this._observerIntersection = null;\n }\n if (create) {\n this._observerIntersection = new IntersectionObserver(\n this._observeIntersectionContainer,\n {\n root: this._navBar,\n threshold: 0,\n }\n );\n if (intersectionLeftSentinelNode) {\n this._observerIntersection.observe(intersectionLeftSentinelNode);\n }\n if (intersectionRightSentinelNode) {\n this._observerIntersection.observe(intersectionRightSentinelNode);\n }\n }\n }\n\n /**\n * The intersection observer callback for the scrolling container.\n *\n * @param records The intersection observer records.\n */\n private _observeIntersectionContainer = (records) => {\n const {\n _intersectionLeftSentinelNode: intersectionLeftSentinelNode,\n _intersectionRightSentinelNode: intersectionRightSentinelNode,\n } = this;\n records.forEach(({ isIntersecting, target }) => {\n if (target === intersectionLeftSentinelNode) {\n this._isIntersectionLeftTrackerInContent = isIntersecting;\n }\n if (target === intersectionRightSentinelNode) {\n this._isIntersectionRightTrackerInContent = isIntersecting;\n }\n });\n };\n\n /**\n * Handles `click` event on the left-hand paginator button.\n */\n private _paginateLeft() {\n const {\n _currentScrollPosition: currentScrollPosition,\n _navBar: navBar,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n // If the right-side intersection sentinel is in the view, it means that right-side caret button is hidden.\n // Given scrolling to left makes it shown,\n // `contentContainerNode!.offsetWidth` will shrink as we scroll and we need to adjust for it.\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().right;\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().right > interimLeft - buttonWidthOffset\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().left;\n // 48 = button width - button gradient\n const newScrollPosition =\n currentScrollPosition - lastVisibleElementRight + 48;\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n } else {\n const lastVisibleElementIndex = findLastIndex(\n elems,\n (elem) =>\n elem.getBoundingClientRect().left <\n buttonWidthOffset + navBar!.getBoundingClientRect().left\n );\n if (lastVisibleElementIndex >= 0) {\n const lastVisibleElementRight =\n elems[lastVisibleElementIndex].getBoundingClientRect().right;\n const newScrollPosition =\n lastVisibleElementRight +\n currentScrollPosition -\n navBar!.getBoundingClientRect().right +\n buttonWidthOffset;\n // If the new scroll position is less than the width of the left caret button,\n // it means that hiding the left caret button reveals the whole of the left-most nav item.\n // Snaps the left-most nav item to the left edge of nav container in this case.\n this._currentScrollPosition =\n newScrollPosition <= 0 ? 0 : newScrollPosition;\n }\n }\n }\n }\n\n /**\n * Handles `click` event on the right-hand paginator button.\n */\n private _paginateRight() {\n const {\n _navBar: navBar,\n _contentNode: contentNode,\n _currentScrollPosition: currentScrollPosition,\n _itemNodes: itemNodes,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const elems = Array.prototype.slice.call(itemNodes);\n if (elems) {\n if (pageIsRTL) {\n const interimLeft = navBar!.getBoundingClientRect().left;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().left < interimLeft + buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft = Math.abs(\n elems[firstVisibleElementIndex].getBoundingClientRect().right +\n buttonWidthOffset -\n navBar!.getBoundingClientRect().right\n );\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n } else {\n const interimRight = navBar!.getBoundingClientRect().right;\n const firstVisibleElementIndex = elems.findIndex(\n (elem) =>\n elem.getBoundingClientRect().right >\n interimRight - buttonWidthOffset\n );\n if (firstVisibleElementIndex > 0) {\n const firstVisibleElementLeft =\n elems[firstVisibleElementIndex].getBoundingClientRect().left -\n navBar!.getBoundingClientRect().left -\n buttonWidthOffset;\n // Ensures that is there is no blank area at the right hand side in scroll area\n // if we see the right remainder nav items can be contained in a page\n const maxLeft = contentNode!.scrollWidth - navBar!.offsetWidth;\n this._currentScrollPosition = Math.min(\n firstVisibleElementLeft + currentScrollPosition,\n maxLeft\n );\n }\n }\n }\n }\n\n /**\n * Handles resize of mobile container.\n *\n * @param records The resize records.\n */\n private _observeResizeMobileContainer = (records) => {\n const entry = records[records.length - 1];\n const { height } = entry.contentRect;\n this._hasMobileContainerVisible = height > 0;\n };\n\n /**\n * The current 0px offset from the top of page.\n */\n @property({ type: Number })\n stickyOffset = 0;\n\n /**\n * The throttled scroll listener.\n *\n * @param event scroll handler\n */\n @HostListener('window:scroll')\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleScroll = (event: Event) => {\n this._throttleScroll!(event);\n };\n\n /**\n * The trigger reharvest listener.\n */\n @HostListener(`document:${ddsPrefix}-table-of-contents-reharvest`)\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _retriggerHarvest = () => {\n this._targets = Array.from(this.querySelectorAll('[name]'));\n };\n\n connectedCallback() {\n super.connectedCallback();\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n if (!this._throttleScroll) {\n this._throttleScroll = throttle(this._handleOnScroll, 250);\n this._handleOnScroll();\n }\n }\n\n disconnectedCallback() {\n this._cleanAndCreateObserverResizeMobileContainer();\n this._cleanAndCreateIntersectionObserverContainer();\n this._contentMutationObserver.disconnect();\n if (this._throttleScroll) {\n this._throttleScroll.cancel();\n this._throttleScroll = null;\n }\n super.disconnectedCallback();\n }\n\n firstUpdated() {\n this._cleanAndCreateObserverResizeMobileContainer({ create: true });\n this._cleanAndCreateIntersectionObserverContainer({ create: true });\n\n StickyHeader.global.tableOfContents = this;\n }\n\n updated(changedProperties) {\n if (changedProperties.has('_currentTarget')) {\n const {\n _currentTarget: currentTarget,\n _mobileSelectNode: mobileSelectNode,\n } = this;\n // Ensures setting the `value` after rendering child `<option>`s when there is a change in `value`,\n // given reflecting `value` requires child `<option>`s being there beforehand\n mobileSelectNode!.value = currentTarget?.getAttribute('name') ?? '';\n }\n }\n\n render() {\n const {\n stickyOffset,\n _currentTarget: currentTarget,\n _currentScrollPosition: currentScrollPosition,\n _hasHeading: hasHeading,\n _hasMobileContainerVisible: hasMobileContainerVisible,\n _isIntersectionLeftTrackerInContent: isIntersectionLeftTrackerInContent,\n _isIntersectionRightTrackerInContent: isIntersectionRightTrackerInContent,\n _targets: targets,\n _handleChangeSelect: handleChangeSelect,\n _handleClickItem: handleClickItem,\n _handleOnKeyDown: handleOnKeyDown,\n _handleSlotChange: handleSlotChange,\n _handleSlotChangeHeading: handleSlotChangeHeading,\n _paginateLeft: paginateLeft,\n _paginateRight: paginateRight,\n _pageIsRTL: pageIsRTL,\n } = this;\n\n const containerClasses = classMap({\n [`${ddsPrefix}-ce--table-of-contents__container`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${ddsPrefix}-ce--table-of-contents-horizontal__container`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const navigationClasses = classMap({\n [`${prefix}--tableofcontents__sidebar`]:\n this.layout === TOC_TYPES.DEFAULT,\n [`${prefix}--tableofcontents__navbar`]:\n this.layout === TOC_TYPES.HORIZONTAL,\n });\n\n const caretLeftContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-left-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionLeftTrackerInContent,\n });\n\n const caretRightContainerClasses = classMap({\n [`${prefix}--toc__navbar-caret-right-container`]: true,\n [`${ddsPrefix}-ce--toc__navbar-caret-container--hidden`]:\n isIntersectionRightTrackerInContent,\n });\n\n return html`\n ${this.layout === 'horizontal'\n ? html`\n <ul class=\"${prefix}--toc__print-styles\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n `\n : ``}\n <div class=\"${containerClasses}\">\n <div part=\"table\" class=\"${navigationClasses}\">\n ${hasMobileContainerVisible\n ? nothing\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__desktop__children\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n <slot name=\"menu-rule\"></slot>\n </div>\n `}\n <div class=\"${prefix}--tableofcontents__mobile-top\"></div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretLeft20()}\n </button>\n </div>\n `\n : html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretLeft20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `}\n `\n : ``}\n <div\n class=\"${ddsPrefix}-ce--table-of-contents__items-container\"\n style=\"position: sticky; top: ${stickyOffset &&\n this.layout !== TOC_TYPES.HORIZONTAL\n ? `${stickyOffset}px`\n : 0}\">\n <div class=\"${prefix}--tableofcontents__desktop-container\">\n <div\n class=\"${prefix}--tableofcontents__desktop\"\n style=\"${pageIsRTL\n ? 'right'\n : 'left'}: -${currentScrollPosition}px\">\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-right\"></div> `\n : html` <div class=\"${prefix}--sub-content-left\"></div> `}\n <ul>\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n const selected = item === currentTarget;\n const itemClasses = classMap({\n [`${prefix}--tableofcontents__desktop__item`]: true,\n [`${prefix}--tableofcontents__desktop__item--active`]:\n selected,\n });\n return html`\n <li\n class=\"${itemClasses}\"\n @click=\"${handleClickItem}\"\n @keydown=\"${handleOnKeyDown}\">\n <a\n aria-current=\"${ifDefined(\n !selected ? undefined : 'location'\n )}\"\n data-target=\"${name!}\"\n href=\"#${name}\">\n ${title}\n </a>\n </li>\n `;\n })}\n </ul>\n ${pageIsRTL\n ? html` <div class=\"${prefix}--sub-content-left\"></div> `\n : html` <div class=\"${prefix}--sub-content-right\"></div> `}\n </div>\n </div>\n <div class=\"${prefix}--tableofcontents__mobile\">\n <div class=\"${prefix}--tableofcontents__mobile__select__wrapper\">\n <select\n aria-label=\"${this.ariaLabelFormatter}\"\n class=\"${prefix}--tableofcontents__mobile__select\"\n @change=\"${handleChangeSelect}\">\n ${targets.map((item) => {\n const name = item.getAttribute('name');\n const title = (\n item.dataset.title ??\n item.textContent ??\n ''\n ).trim();\n return html`\n <option\n class=\"${prefix}--tableofcontents__mobile__select__option\"\n value=\"${name!}\">\n ${title}\n </option>\n `;\n })}\n </select>\n ${TableOfContents20({\n class: `${prefix}--tableofcontents__mobile__select__icon`,\n })}\n </div>\n </div>\n </div>\n ${this.layout === 'horizontal'\n ? html`\n ${pageIsRTL\n ? html`\n <div class=\"${caretLeftContainerClasses}\">\n <button\n part=\"prev-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-left\"\n @click=\"${paginateLeft}\">\n ${CaretRight20()}\n </button>\n <div\n class=\"${prefix}--toc__navbar-caret-left-gradient\"></div>\n </div>\n `\n : html`\n <div class=\"${caretRightContainerClasses}\">\n <div\n class=\"${prefix}--toc__navbar-caret-right-gradient\"></div>\n <button\n part=\"next-button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"${prefix}--toc__navbar-caret-right\"\n @click=\"${paginateRight}\">\n ${CaretRight20()}\n </button>\n </div>\n `}\n `\n : ``}\n </div>\n <div class=\"${prefix}--tableofcontents__content\">\n <div class=\"${prefix}--tableofcontents__content-wrapper\">\n ${!hasMobileContainerVisible\n ? undefined\n : html`\n <div\n ?hidden=\"${!hasHeading}\"\n class=\"${prefix}--tableofcontents__children__mobile\">\n <slot\n name=\"heading\"\n @slotchange=\"${handleSlotChangeHeading}\"></slot>\n </div>\n `}\n <slot @slotchange=\"${handleSlotChange}\"></slot>\n </div>\n </div>\n </div>\n `;\n }\n\n /**\n * The selector that selects the desktop link items.\n */\n static get selectorDesktopItem() {\n return `.${prefix}--tableofcontents__desktop__item a`;\n }\n\n /**\n * The selector that determines where to harvest the table of contents from.\n */\n static selectorTarget = '[name]';\n\n static get stableSelector() {\n return `${ddsPrefix}--table-of-contents`;\n }\n\n static styles = styles; // `styles` here is a `CSSResult` generated by custom WebPack loader\n}\n\n/* @__GENERATE_REACT_CUSTOM_ELEMENT_TYPE__ */\nexport default DDSTableOfContents;\n"],"mappings":"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"}
|
|
@@ -101,18 +101,10 @@ declare const DDSVideoPlayer_base: (new (...args: any[]) => {
|
|
|
101
101
|
scrollTo(x: number, y: number): void;
|
|
102
102
|
setAttribute(qualifiedName: string, value: string): void;
|
|
103
103
|
setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;
|
|
104
|
-
setAttributeNode(attr: Attr): Attr | null;
|
|
105
|
-
* The thumbnail URL.
|
|
106
|
-
*/
|
|
104
|
+
setAttributeNode(attr: Attr): Attr | null;
|
|
107
105
|
setAttributeNodeNS(attr: Attr): Attr | null;
|
|
108
106
|
setPointerCapture(pointerId: number): void;
|
|
109
107
|
toggleAttribute(qualifiedName: string, force?: boolean | undefined): boolean;
|
|
110
|
-
/**
|
|
111
|
-
* Override default aspect ratio of `16x9`.
|
|
112
|
-
* Available aspect ratios:
|
|
113
|
-
*
|
|
114
|
-
* `16x9`, `9x16`, `2x1`, `1x2`, `4x3`, `3x4`, `1x1`
|
|
115
|
-
*/
|
|
116
108
|
webkitMatchesSelector(selectors: string): boolean;
|
|
117
109
|
readonly baseURI: string;
|
|
118
110
|
readonly childNodes: NodeListOf<ChildNode>;
|