{"version":3,"file":"assets/chunk.d2462ee4a6c785e13ca0.js","mappings":"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","sources":["src/components/list-view.hbs","src/components/list-view.js","src/utils/utils.js","src/components/fieldset-description.hbs","src/components/fieldset-description.ts","src/components/multi-schedule-view.hbs","src/components/multi-schedule-view.ts","src/components/pagination-bar.hbs","src/components/pagination-bar.ts","src/components/route-view/details-view.hbs","src/components/route-view/details-view.js","src/helpers/get-simple-list-item.ts","src/components/adc-banner.hbs","src/components/adc-banner.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{! Render component so that we can determine the height of each item, or default height for future calculations }}\\n {{#if this.prerenderElementSize}}\\n
\\n {{! Prerender the component with no data, this will serve for getting its size }}\\n {{yield}}\\n
\\n {{/if}}\\n\\n {{#each this.cells key=\\\"id\\\" as |cell|}}\\n {{yield\\n (readonly cell.dataItemBound)\\n (readonly cell.itemIndexBound)\\n (fn this.removeItem (readonly cell.itemIndexBound))\\n (fn this.recalculateItemSize cell cell.itemIndexBound)\\n }}\\n {{/each}}\\n\")","import { getOwner } from '@ember/application';\nimport { A } from '@ember/array';\nimport Component from '@ember/component';\nimport { computed, get, set, setProperties, action } from '@ember/object';\nimport { addListener, removeListener } from '@ember/object/events';\nimport { guidFor } from '@ember/object/internals';\nimport { debounce, next } from '@ember/runloop';\nimport { isEmpty } from '@ember/utils';\nimport { task } from 'ember-concurrency';\nimport { Promise, reject, resolve } from 'rsvp';\nimport { outerHeight, scrollParent } from '../utils/utils.js';\n\n// region constants\n\n// How many ms after last debounce event should we start processing it?\nconst RESIZE_DEBOUNCE_MS = 250;\n\n// Direction constants\nconst DIRECTION_DOWN = 'down',\n DIRECTION_UP = 'up';\n\n// Scroll multiplier constants\nconst SCROLL_DIRECTION_BUFFER_MULTIPLIER = 2,\n NON_SCROLL_DIRECTION_BUFFER_MULTIPLIER = 1;\n\n// Rendering class\nconst RENDERING_CLASS = 'rendering';\n\n// endregion\n\n// region initialization\n/**\n * Initializes data for the scroller\n *\n * @private\n * @instance\n */\nfunction initializeData() {\n // Properties that do not need to be bound\n this.anchorItem = { index: 0, offset: 0 };\n this.firstAttachedItemIndex = 0;\n this.lastAttachedItemIndex = 0;\n this.anchorScrollTop = 0;\n this.initialOffset = 0;\n this.loadedItems = 0;\n\n // If we have a reference to a request reject function, execute it and then clear it\n if (this.requestInProgressReject) {\n this.requestInProgressReject();\n\n this.requestInProgressReject = undefined;\n }\n\n this.listItemHeight = 0;\n this.totalCountItems = undefined;\n\n this.scrollDirection = DIRECTION_DOWN;\n this.visibleItemsCount = undefined;\n\n // Set items to empty array\n this.items = [];\n\n setProperties(this, {\n // This stores all data items that we receive\n modelDataItems: A([]),\n // Show the elements that we need for size calculation\n prerenderElementSize: true,\n initialLoad: true\n });\n}\n\n/**\n * Sets up listener functionality\n *\n * @param {HTMLElement} el\n *\n * @private\n * @instance\n */\nfunction setupListeners(el) {\n // Setup on resize and scroll named functions so that we can attach and deattach listeners.\n let fnOnWindowResize = () => {\n // Show the element through which we get the listItemHeight.\n set(this, 'prerenderElementSize', true);\n\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-runloop\n debounce(this, onResize, RESIZE_DEBOUNCE_MS);\n },\n fnOnElementScroll = () => {\n // This is not debounced on purpose. When it was debounced, the scrolling appeared jerky.\n onScroll.call(this);\n };\n\n const scrollEl = (this.scrollEl = scrollParent(el));\n\n // Add listener for when scrolling inside the scroller occurs.\n scrollEl.addEventListener('scroll', fnOnElementScroll);\n // Add listener for when screen gets resized. In that case, we pretty much dump everything.\n window.addEventListener('resize', fnOnWindowResize);\n\n // Function that will be called to remove listeners. It needs to be defined here so that it has pointers\n // to the bound named functions with the right context.\n this.removeListeners = () => {\n // Remove scroll listener.\n scrollEl.removeEventListener('scroll', fnOnElementScroll);\n // Remove window resize listener.\n window.removeEventListener('resize', fnOnWindowResize);\n // Dereference element.\n el = null;\n };\n}\n\n// endregion\n\n// region helper functions\n/**\n * Calculates the item that should be anchored after scrolling by scrollAmount from\n * the initial anchored item.\n *\n * MM: This code is pretty much non-altered Google code\n *\n * @private\n * @static\n *\n * @param {Ember.Array<{index: number, dataItem: Object, offsetTop: number, height: number, width: number, hidden: boolean}>} items\n * @param {number} listItemHeight\n * @param {{index: number, offset: number}} initialAnchor - The initial position to scroll from before calculating the new anchor position.\n * @param {number} delta - The offset from the initial item to scroll by. (scrollAmount)\n * @return {{index: number, offset: number}} - Returns the new item and offset scroll should be anchored to.\n */\nfunction calculateAnchoredItem(items, listItemHeight, initialAnchor, delta) {\n // Did anything change?\n if (delta === 0) {\n return initialAnchor;\n }\n\n delta += initialAnchor.offset;\n\n let i = initialAnchor.index,\n tombstones = 0,\n numItems = items.length;\n\n // Did we scroll upwards?\n if (delta < 0) {\n while (delta < 0 && i > 0 && items[i - 1].height) {\n delta += items[i - 1].height;\n i--;\n }\n\n tombstones = Math.max(-i, Math.ceil(Math.min(delta, 0) / listItemHeight));\n } else {\n // Did we scroll downwards?\n while (delta > 0 && i < numItems - 1 && items[i].height && items[i].height < delta) {\n delta -= items[i].height;\n i++;\n }\n\n if (i >= numItems || !items[i].height) {\n tombstones = Math.floor(Math.max(delta, 0) / listItemHeight);\n }\n }\n\n i += tombstones;\n delta -= tombstones * listItemHeight;\n\n return {\n index: i,\n offset: delta\n };\n}\n\n/**\n * Adds an item to the items collection\n *\n * @private\n * @instance\n *\n * @param {number} index\n *\n * @returns {Object}\n */\nfunction addItem(index) {\n const { allItemsSameSize, listItemHeight, items } = this,\n newItem = {\n index,\n dataItem: undefined,\n top: -1,\n visible: false,\n height: allItemsSameSize ? listItemHeight : 0,\n width: 0\n };\n\n // Add new item\n items.push(newItem);\n\n return newItem;\n}\n\n/**\n * Propagates items count action if it was defined\n *\n * @private\n * @instance\n *\n * @param {number} itemsCount - Number of items in the collection\n */\nfunction triggerItemsCountChangedAction(itemsCount) {\n const action = this['items-count-changed'];\n\n // Only trigger the action if it was defined so that we don't waste cycles\n action && action(itemsCount);\n}\n\n/**\n * Cleans up the cells objects\n *\n * @private\n * @instance\n */\nfunction cleanupCells() {\n const cells = this.cells;\n\n if (!cells) {\n return;\n }\n\n for (let i = 0, count = cells.length; i < count; i++) {\n const cell = cells[i];\n\n // Remove listener from the component if it has been set\n (cell.removeComponentListener || (() => {}))();\n\n setProperties(cell, {\n dataItemBound: undefined,\n itemIndexBound: undefined\n });\n\n cell.node = undefined;\n cell.itemComponent = undefined;\n }\n\n set(this, 'cells', undefined);\n}\n\n// endregion\n\n// region processing\n/**\n * Gets called when screen size changes.\n *\n * Resets the layout of items\n *\n * @private\n * @instance\n *\n * @param {boolean} isInitialRender - Is this the initial render?\n */\nfunction onResize(isInitialRender) {\n if (this.isDestroyed) {\n return;\n }\n\n let { items, scrollEl } = this,\n element = document.querySelector(`#${this.elId}`),\n allItemsSameSize = this.allItemsSameSize;\n\n // Get the prerender elements size.\n const elPrerender = element.querySelectorAll('.prerender-element-size')[0];\n\n // If the prerender element does not exist yet, then re-run this function in the next run cycle.\n if (!elPrerender) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-runloop\n next(this, onResize, isInitialRender);\n return;\n }\n\n // First cleanup cells.\n cleanupCells.call(this);\n\n // Predefine variables that will be overwritten and used later.\n let listItemHeight, visibleItemsCount;\n\n // Set the standard (assumed) itemHeight.\n // Make sure that the listItemHeight is at least 1px, otherwise bad things happen.\n this.listItemHeight = listItemHeight = outerHeight(elPrerender.firstElementChild) || 1;\n\n if (isInitialRender) {\n if (!this.scrollRunway) {\n // Create an element to force the scroller to allow scrolling to a certain point.\n const scrollRunway = document.createElement('div');\n\n scrollRunway.classList.add('scroll-runway');\n\n // Append the scroll runway element.\n this.scrollRunway = element.appendChild(scrollRunway);\n }\n\n // Assign back to the list view object.\n this.scrollRunwayEnd = 0;\n }\n\n // Set the initial offset of list-view element from its scrollable parent.\n this.initialOffset = parseInt(\n element.getBoundingClientRect().top - scrollEl.getBoundingClientRect().top + scrollEl.scrollTop,\n 10\n );\n\n // Clear previously cached sizes for items.\n for (let i = 0, itemsCount = items.length; i < itemsCount; i++) {\n const item = items[i];\n\n // Force size recalculation.\n item.top = -1;\n\n // Reset size properties.\n // If we know the height because all items are the same, then set the height so that it does not need to be recalculated.\n item.height = allItemsSameSize ? listItemHeight : 0;\n item.width = 0;\n }\n\n // Generate the correct number of cells.\n this.visibleItemsCount = visibleItemsCount = Math.ceil(scrollEl.offsetHeight / listItemHeight);\n\n const // Define cells array.\n cells = [],\n // Minimum number of cells to show.\n minCellsCount = 20,\n // Make the number of cells that we want be at least the min number of cells, or related to buffers, whichever is greater.\n cellsCount = Math.max(\n (SCROLL_DIRECTION_BUFFER_MULTIPLIER + NON_SCROLL_DIRECTION_BUFFER_MULTIPLIER) * visibleItemsCount,\n minCellsCount\n );\n\n for (let i = 0; i < cellsCount; i++) {\n cells.push({\n id: `cell-${i}`,\n dataItem: undefined,\n itemIndex: undefined,\n // Should the cell be visible? (not display: none)\n visible: true\n });\n\n addItem.call(this, i);\n }\n\n this.cellsCount = this.visibleCells = cellsCount;\n\n setProperties(this, {\n // Hide the prerender elements.\n prerenderElementSize: false,\n // Set the display cells\n cells\n });\n\n // Run in the next run cycle, so that the rendered properties can get resolved.\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-runloop\n next(this, () => {\n // Here use finally instead of then because we always want it to continue to onScroll.\n maybeRequestContent.call(this).finally(onScroll.bind(this));\n });\n}\n\n/**\n * Gets called when the scroll position changes, or after screen resize.\n *\n * Determines the newly attached items and requests more items if necessary.\n *\n * @todo We could probably make this be smarter so that there is no work done if the list-view is not currently in the viewport. Not sure how important that is though.\n *\n * @private\n * @instance\n */\nfunction onScroll() {\n if (this.isDestroyed) {\n return;\n }\n\n // Cache amount of distance scrolled in the current element.\n let {\n anchorItem,\n scrollDirection,\n items,\n listItemHeight,\n visibleItemsCount,\n cellsCount,\n totalCountItems,\n visibleCells,\n initialOffset,\n scrollEl,\n previousScrollTop\n } = this,\n scrollTop = scrollEl.scrollTop;\n\n // Amount of scrolling that has occurred.\n // Positive amount is downwards, negative is upwards.\n const scrollAmount = scrollTop - (previousScrollTop || 0);\n\n // Cache previous scrollTop.\n this.previousScrollTop = scrollTop;\n\n // Update scrollTop to be relative to the list-view element.\n const scrollTopRelative = Math.max(scrollTop - initialOffset, 0);\n\n // If the number of cells is greater than the number of total items, we can just get rid of cells.\n if (visibleCells > totalCountItems || visibleCells < cellsCount) {\n const cells = this.cells;\n\n for (let i = 0; i < cellsCount; i++) {\n set(cells[i], 'visible', i < totalCountItems);\n }\n }\n\n // Special case, if we get to very top, always scroll to top.\n this.anchorItem = anchorItem =\n scrollTopRelative === 0\n ? { index: 0, offset: scrollTop - initialOffset }\n : calculateAnchoredItem.call(this, items, listItemHeight, anchorItem, scrollAmount);\n\n // Update value for what we perceive as the anchor item.\n this.anchorScrollTop = scrollTopRelative;\n\n // Predefine indexes.\n let startIndex = anchorItem.index,\n newDirection = scrollAmount === 0 ? scrollDirection : scrollAmount > 0 ? DIRECTION_DOWN : DIRECTION_UP;\n\n // If scroll amount is 0, keep the direction same, otherwise assign new direction.\n this.scrollDirection = newDirection;\n\n // Create proper buffers based on scrolling direction.\n startIndex -=\n (newDirection === DIRECTION_DOWN\n ? NON_SCROLL_DIRECTION_BUFFER_MULTIPLIER\n : SCROLL_DIRECTION_BUFFER_MULTIPLIER) * visibleItemsCount;\n\n // End index is simply start index plus the number of cells that we are using\n const endIndex = startIndex + cellsCount;\n\n fill.call(this, startIndex, endIndex);\n}\n\n/**\n * Sets the range of items which should be attached and attaches those items.\n *\n * @private\n * @instance\n *\n * @param {number} startIndex The index of the first item which should be attached.\n * @param {number} endIndex One past the index of the last item which should be attached.\n */\nfunction fill(startIndex, endIndex) {\n // If the start index is negative, add the difference from 0 to the endIndex.\n // This will ensure that there is always the same number of elements generated on screen,\n // so there is no DOM recreation penalty.\n if (startIndex < 0) {\n endIndex += Math.abs(startIndex);\n }\n\n const { totalCountItems } = this;\n\n // If we know the total count (number) of items, then have to adjust end and start indexes.\n if (totalCountItems !== undefined) {\n // Get the number of items that endIndex might be pass the total number of items.\n let passTotalCount = endIndex - totalCountItems;\n\n // If endIndex is indeed over, have to adjust.\n if (passTotalCount > 0) {\n // End index can be at most the total count of items.\n endIndex = totalCountItems;\n\n // Move the start index back so we always have the same number of dom elements.\n // Don't need to do max with 0 here because it is done in the next step.\n startIndex -= passTotalCount;\n }\n }\n\n startIndex = Math.max(0, startIndex);\n\n this.firstAttachedItemIndex = startIndex;\n this.lastAttachedItemIndex = endIndex;\n\n // Attach all content and generate it.\n attachContent.call(this);\n}\n\n/**\n * Ensures that the items list has the correct number of items.\n *\n * @private\n * @instance\n */\nfunction ensureCorrectItemsList() {\n let { items, totalCountItems, cellsCount } = this;\n\n if (!items) {\n return;\n }\n\n // How many items do we need to exist in items?\n // This might not need to be totalCountItems right away, but this way we have all the spots created.\n const itemsCountNeeded = totalCountItems !== undefined ? totalCountItems : cellsCount;\n\n // Fill up the items list with needed data.\n for (let i = items.length; i < itemsCountNeeded; i++) {\n addItem.call(this, i);\n }\n\n // If there are more elements in items than totalCountItems, then have to remove the unused items.\n // This can happen if items are being removed.\n if (totalCountItems !== undefined && items.length > totalCountItems) {\n // Reassign the new array back.\n this.items = items.slice(0, totalCountItems);\n }\n}\n\n/**\n * Recalculates the anchor scroll top if we recalculated item heights.\n *\n *\n * @private\n * @instance\n */\nfunction recalculateAnchorScrollTop() {\n const {\n anchorItem: { index, offset },\n items,\n listItemHeight,\n initialOffset\n } = this;\n\n // Fix scroll position in case we have realized the heights of elements that we didn't used to know.\n // Scroll anchoring.\n this.anchorScrollTop =\n items.slice(0, index).reduce((value, { height }) => value + (height || listItemHeight), 0) + offset;\n\n // Update both element's scrollTop and previousScrollTop so that no unintended adjustment of scroll happens.\n this.scrollEl.scrollTop = this.previousScrollTop = this.anchorScrollTop + initialOffset;\n}\n\n/**\n * Process everything, ensures items and tombstones attachment and gets new data.\n *\n * @private\n * @instance\n */\nfunction attachContent() {\n const { isDestroyed, isDestroying, cellsCount } = this;\n\n if (isDestroyed || isDestroying) {\n return;\n }\n\n ensureCorrectItemsList.call(this);\n\n const cells = this.cells,\n firstCell = (cells || [])[0];\n\n if (!firstCell || !firstCell.node) {\n // Get elements in all cells.\n const items = Array.from(document.querySelector(`#${this.elId}`).children).filter((item) =>\n ['scroll-runway', 'prerender-element-size'].every((css) => !item.classList.contains(css))\n );\n\n // list-view items need to have nodes rendered.\n if (isEmpty(items)) {\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-runloop\n next(this, attachContent);\n return;\n }\n\n // This is done only once on the first render so it should be ok to keep as forEach.\n cells.forEach((cell, index) => {\n const node = items[index],\n style = node.style;\n\n style.display = 'none';\n style.position = 'absolute';\n style.top = '0';\n style.transform = 'translate3d(0,0,0)';\n style.willChange = 'transform, opacity';\n style.zIndex = 2;\n\n cell.node = node;\n });\n }\n\n recalculateAnchorScrollTop.call(this);\n\n const { items, anchorScrollTop, anchorItem, listItemHeight, firstAttachedItemIndex, lastAttachedItemIndex } = this,\n // Holds the indexes of items that should be attached.\n attachedIndexes = [];\n\n // Calculate the heights for items.\n // Position all nodes.\n let curPos = anchorScrollTop - anchorItem.offset;\n let i = anchorItem.index;\n\n while (i > firstAttachedItemIndex && i < items.length) {\n curPos -= items[i - 1].height || listItemHeight;\n i--;\n }\n\n while (i < firstAttachedItemIndex) {\n curPos += items[i].height || listItemHeight;\n i++;\n }\n\n // Process items that need to be visible.\n for (let i = firstAttachedItemIndex; i < lastAttachedItemIndex; i++) {\n // Add item index to the indexes that need to be attached.\n attachedIndexes.push(i);\n\n // Update position for the item.\n items[i].top = curPos;\n\n // Increment total position with the item's height or expected size.\n curPos += items[i].height || listItemHeight;\n }\n\n // Process the remaining item heights so that we know the total height of all elements.\n for (let i = lastAttachedItemIndex; i < items.length; i++) {\n curPos += items[i].height || listItemHeight;\n }\n\n // Make things start from the beginning.\n attachedIndexes.reverse();\n\n // Update scroll runway position\n if (this.scrollRunwayEnd - 1 !== curPos) {\n this.scrollRunway.style.height = `${Math.max(curPos - 1, 0)}px`;\n\n this.scrollRunwayEnd = curPos;\n }\n\n // Collection of display cells that will be recycled to reuse for new content.\n let cellsToBeRecycled = [];\n\n // Calculate cell start index and cell ending index.\n for (let i = 0; i < cellsCount; i++) {\n const cell = cells[i],\n { itemIndex, visible } = cell;\n\n if (!visible) {\n continue;\n }\n\n const index = attachedIndexes.indexOf(itemIndex);\n\n if (index !== -1) {\n // All is good, cell is already attached, remove this item from the array.\n attachedIndexes.splice(index, 1);\n } else if (attachedIndexes.length) {\n // Mark this cell for recycling.\n cellsToBeRecycled.push(cell);\n }\n }\n\n const changedCellsData = {};\n\n // Now assign all cells to be recycled the new items.\n for (let i = 0, cellsToBeRecycledCount = cellsToBeRecycled.length; i < cellsToBeRecycledCount; i++) {\n const cell = cellsToBeRecycled[i];\n\n const itemForCell = attachedIndexes.pop();\n\n const { dataItem, index } = items[itemForCell];\n\n cell.dataItem = dataItem;\n cell.itemIndex = index;\n\n // Push the cell data to be changed to the list.\n changedCellsData[cell.id] = {\n cell,\n dataItemBound: dataItem,\n itemIndexBound: index\n };\n\n cell.node.classList.add(RENDERING_CLASS);\n }\n\n const registry = getOwner(this).lookup('-view-registry:main');\n\n // Iterate over all cells and reassign dataItems and check if it needs to calculate its height.\n for (let i = 0; i < cellsCount; i++) {\n const cell = cells[i],\n { itemComponent, node, itemIndex, dataItem, visible, id: cellId } = cell,\n item = items[itemIndex];\n\n // If the display cell does not yet have its component, then get and associate it.\n // The component will remain constant for the lifetime of the cell.\n if (!itemComponent) {\n // Hack to get the Ember component so that we can add an event listener on it.\n const c = registry[node.id];\n\n if (!c) {\n window.console.error('yielded list view item must be a component');\n return;\n }\n\n const fnListener = fnDidRenderComponent.bind(this, cell, item, false);\n\n // Add the listener so we know when component was rendered.\n addListener(c, 'didRender', fnListener);\n\n cell.itemComponent = c;\n\n // Add function that will allow removing listener on the component so that it does not get stuck there.\n cell.removeComponentListener = () => {\n removeListener(c, 'didRender', fnListener);\n };\n }\n\n if (node) {\n node.style.display = visible ? '' : 'none';\n\n if (item && item.top !== cell.top) {\n cell.top = item.top;\n node.style.transform = 'translate3d(0, ' + cell.top + 'px, 0)';\n }\n }\n\n // If the item now has a dataitem and the cell does not, assign the data item to the cell.\n if (!dataItem && item && item.dataItem) {\n // Get the changed cell data for this cell or a new object.\n const cellData = changedCellsData[cellId] || {};\n // Assign the new data\n cellData.dataItemBound = item.dataItem;\n cellData.cell = cell;\n\n // Reassign it back to the changed cells data collection.\n changedCellsData[cellId] = cellData;\n }\n }\n\n const changedCellsKeys = Object.keys(changedCellsData),\n numKeys = changedCellsKeys.length;\n\n if (numKeys > 0) {\n // Assign data to all cells that need it.\n for (let i = 0, count = numKeys; i < count; i++) {\n const { cell, dataItemBound, itemIndexBound } = changedCellsData[changedCellsKeys[i]];\n\n setProperties(cell, { dataItemBound, itemIndexBound });\n }\n\n set(this, 'initialLoad', false);\n }\n\n // Request data and if we got more data and recalculate stuff.\n maybeRequestContent.call(this).then(onScroll.bind(this));\n}\n\n/**\n * Requests additional content if we don't have enough currently.\n *\n * @private\n * @instance\n *\n * @returns {Promise}\n */\nfunction maybeRequestContent() {\n if (this.isDestroyed) {\n return reject();\n }\n\n const { lastAttachedItemIndex, loadedItems, requestInProgressReject, totalCountItems, cellsCount } = this;\n\n // Need this to handle cases where initialLoad gets set to false but code doesn't run through initializeData\n if (loadedItems === 0) {\n set(this, 'initialLoad', true);\n }\n\n // Don't issue another request if one is already in progress as we don't\n // know where to start the next request yet.\n if (requestInProgressReject) {\n return reject();\n }\n\n const loadedItemsBuffer = 5 * cellsCount,\n itemsNeeded =\n loadedItemsBuffer *\n (totalCountItems !== loadedItems && lastAttachedItemIndex + loadedItemsBuffer - loadedItems > 0);\n\n // Do we need more items?\n if (itemsNeeded <= 0) {\n return reject();\n }\n\n // Wrap retrieving of the data in a promise and keep a pointer to its reject function so that we can\n // \"cancel\" it if we reset the component\n return new Promise((resolve, reject) => {\n // Store pointer to the reject function\n this.requestInProgressReject = reject;\n const fnGetItems = this['get-items'];\n\n // There must be action to get items\n if (!fnGetItems) {\n // Log an error\n window.console.error('get-items action must be define in order to obtain any data');\n // Reject the promise\n reject();\n\n return;\n }\n\n // Execute action (that returns a promise) and then resolve this promise\n fnGetItems(loadedItems, itemsNeeded).then(resolve);\n }).then(addContent.bind(this));\n}\n\n/**\n * Adds the given array of items to the items list and then calls\n * attachContent to update the displayed content.\n *\n * @private\n * @instance\n *\n * @param {Ember.Array} dataItems - The array of items to be added to the infinite scroller list.\n *\n * @returns {Promise}\n */\nfunction addContent(dataItems) {\n // Check if the request was \"cancelled\" by redefining it as undefined\n if (!this.requestInProgressReject || this.isDestroyed) {\n return reject();\n }\n\n // Clear the reject function\n this.requestInProgressReject = undefined;\n\n let { items, loadedItems, totalCountItems: previousTotalCountItems } = this;\n\n const meta = get(dataItems, 'meta'),\n // Array for pushing new dataItems to so that bindings don't fire all the time\n newDataItems = [];\n\n // Add the dataItems to the collection\n for (let i = 0, dataItemsCount = get(dataItems, 'length'); i < dataItemsCount; i++) {\n const dataItem = dataItems.objectAt(i);\n\n let currentItem = items[loadedItems] || addItem.call(this, loadedItems);\n\n // Set the data item to the right item\n currentItem.dataItem = dataItem;\n\n // Store pointer to the model\n newDataItems.push(dataItem);\n\n // Increment counter\n loadedItems++;\n }\n\n // Now push the new objects all at once\n this.modelDataItems.pushObjects(newDataItems);\n\n // Store the count back\n this.loadedItems = loadedItems;\n\n // totalCount is the total number of items that are available or the number of loaded items if we don't have a value specified\n // This is because we need to know the total count of items\n let totalCountItems = parseInt((meta || {}).totalCount, 10) || loadedItems;\n\n // Cache it\n this.totalCountItems = totalCountItems;\n\n // If total count of items has changed, onScroll needs to be called to recalculate anchored items\n if (totalCountItems !== undefined && totalCountItems !== previousTotalCountItems) {\n triggerItemsCountChangedAction.call(this, totalCountItems);\n }\n\n return resolve();\n}\n\n/**\n * The function that gets called each time component renders.\n *\n * @private\n * @instance\n *\n * @param {Object} cell The relevant cell\n * @param {Object} item The relevant item\n * @param {boolean} forceRecalculate Whether we should force row size to recalculate.\n */\nfunction fnDidRenderComponent(cell, item, forceRecalculate) {\n const { node } = cell;\n\n if (node) {\n node.classList.remove(RENDERING_CLASS);\n }\n\n if (item && item.dataItem && (!item.height || forceRecalculate)) {\n item.height = node.offsetHeight;\n item.width = node.offsetWidth;\n\n // TODO: Figure out whether we can wrap this in a once somehow.\n onScroll.call(this);\n }\n}\n\n// endregion\n\n/**\n * @classdesc\n *\n * Infinite scroller with ADC specific features for client side applications\n *\n * One of the main benefits of this infinite scroller is that the size of an item does not need to be known beforehand\n *\n * The idea and some of the code was adopted from Google's paper \"Complexities of an infinite scroller\"\n * https://developers.google.com/web/updates/2016/07/infinite-scroller?hl=en\n *\n * @todo Allow for elements to be positioned along horizontal axis as well. Should be quite straightforward, we already have the data.\n *\n * @todo Animations for showing items. Would be cool if they animated one by one like in the Google example.\n *\n * @todo Animations for removal of an item.\n *\n * @todo We could probably defer the initial big items render chunk a bit so that it does not block other parts of a site.\n *\n * @class components.ListView\n * @extends Ember.Component\n */\nexport default class ListView extends Component {\n tagName = '';\n\n // region properties\n\n /**\n * Are all of the items the same size?\n *\n * @type {boolean}\n */\n allItemsSameSize = false;\n\n /**\n * Passed from component consumer to trigger item reset.\n *\n * @type {boolean}\n */\n resetItems = false;\n\n /**\n * A unique ID for this component element.\n *\n * @type {String}\n */\n @computed()\n get elId() {\n return guidFor(this);\n }\n\n /**\n * Computed property for triggering item removal action.\n *\n * @returns {String}\n */\n @computed('modelDataItems.@each.{isDeleted,currentState}')\n get itemStateTrigger() {\n return (this.modelDataItems || [])\n .map(({ isDeleted, currentState }) => `${isDeleted}:${currentState}`)\n .join('|');\n }\n\n // endregion\n\n // region events\n\n /** @override */\n constructor() {\n super(...arguments);\n\n initializeData.call(this);\n }\n\n @action tearDownElement() {\n this.removeListeners();\n\n // Clear up all item objects\n for (let i = 0, count = this.items.length; i < count; i++) {\n this.items[i] = null;\n }\n\n // Clear item properties\n this.items = undefined;\n\n // Cleanup cells\n cleanupCells.call(this);\n }\n\n // endregion\n\n // region Actions\n\n /**\n * Observes data model deletion\n *\n * @note Not sure if this is very efficient, but delete should happen only occasionally, so the only downside are the observers\n *\n * @function\n */\n @action modelDataItemDelete() {\n this.modelDataItems\n .filter((item) => item?.isDeleted && !item?.currentState?.isDirty)\n // Leaving this as forEach, this should be an infrequent action\n .forEach((deletedModelItem) => {\n this.items.some((item) => {\n if (item.dataItem === deletedModelItem) {\n this.removeItem(item.index);\n\n return true;\n }\n\n return false;\n });\n });\n }\n\n /**\n * If the flag to reset items was raised, then reset the items that are in the collection\n *\n * @function\n */\n @action checkItemsReset() {\n if (this.resetItems) {\n // Reset all data\n initializeData.call(this);\n\n // Run the resize logic as a task.\n this.itemsReset.perform();\n }\n }\n\n /**\n * Call to reset items. Is a task so if list view is destroyed, execution of task will be cancelled.\n *\n * @function\n */\n @task *itemsReset() {\n // Passing in true because this is pretty much an initial render\n yield onResize.call(this, true);\n\n // Reset the flag back\n // Have to do it in the next run cycle, otherwise Ember gets confused and the next time it does not fire\n set(this, 'resetItems', false);\n }\n\n /**\n * Initialize and create required data\n *\n * @param {HTMLElement} el\n */\n @action listElementInserted(el) {\n // Setup listeners now that we have the DOM element\n setupListeners.call(this, el);\n\n // Start as if we were resizing the window. That dumps all data and starts over.\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/no-runloop\n next(this, onResize, true);\n }\n\n /**\n * Removes an item from the list\n *\n * @param {number} itemIndex\n */\n @action removeItem(itemIndex) {\n const items = this.items;\n\n // Remove the item at index\n items.splice(itemIndex, 1);\n\n // Index needs to be changed for all of the next items\n for (let i = itemIndex, count = items.length; i < count; i++) {\n items[i].index = i;\n }\n\n // itemIndex needs to be changed for all of the cells that have higher itemIndex\n this.cells\n .filter((cell) => cell.itemIndex >= itemIndex)\n // Leaving this as forEach as this should be an infrequent action\n .forEach((cell) => {\n // If this is the cell that is being removed, clear its data and bound data\n if (cell.itemIndex === itemIndex) {\n cell.dataItem = undefined;\n cell.itemIndex = -1;\n\n setProperties(cell, {\n dataItemBound: undefined,\n itemIndexBound: undefined\n });\n\n return;\n }\n\n // If this is just a regular cell, then decrement the itemIndex and update the bound item index\n cell.itemIndex--;\n\n set(cell, 'itemIndexBound', cell.itemIndex);\n });\n\n // If the index of the item to be removed was less than the items loaded, then we need to reduce that number\n if (itemIndex < this.loadedItems) {\n this.loadedItems--;\n }\n\n // Reduce the number of total count items because we removed one\n if (this.totalCountItems) {\n this.totalCountItems--;\n }\n\n triggerItemsCountChangedAction.call(this, this.totalCountItems);\n\n onScroll.call(this);\n }\n\n /**\n * Recalculates size for given item.\n *\n * @param {Object} cell The relevant cell\n * @param {number} itemIndex The index of the relevant item\n */\n @action recalculateItemSize(cell, itemIndex) {\n fnDidRenderComponent.call(this, cell, this.items[itemIndex], true);\n }\n}\n","/**\n * Utility methods\n * @module\n */\n\n/**\n * Returns height of an element including margins\n *\n * @param {Node} el - Dom node for which we want to get the height with margin\n * @returns {number}\n */\nexport function outerHeight(el) {\n if (!el) {\n return 0;\n }\n\n const style = getComputedStyle(el);\n\n // Returns height of the element including margin top and bottom\n return el.offsetHeight + parseInt(style.marginTop) + parseInt(style.marginBottom);\n}\n\n// region scroll parent\n/**\n * From https://github.com/olahol/scrollparent.js\n * Adapted code to adhere to our standards.\n *\n * @param node\n */\nexport function scrollParent(node) {\n const regex = /(auto|scroll)/,\n getNodeParents = (node, ps) => {\n if (node === null) {\n return ps;\n }\n\n return getNodeParents(node.parentNode, ps.concat([node]));\n },\n getStyleForProperty = (node, prop) => {\n return getComputedStyle(node, null).getPropertyValue(prop);\n },\n isOverflowSetOnElement = (node) => {\n return (\n getStyleForProperty(node, 'overflow') +\n getStyleForProperty(node, 'overflow-y') +\n getStyleForProperty(node, 'overflow-x')\n );\n },\n isElementScrollable = (node) => {\n return regex.test(isOverflowSetOnElement(node));\n };\n\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return;\n }\n\n const ps = getNodeParents(node.parentNode, []);\n\n for (let i = 0; i < ps.length; i += 1) {\n if (isElementScrollable(ps[i])) {\n return ps[i];\n }\n }\n\n return document.body;\n}\n// endregion\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{@text}}\\n
\")","import templateOnlyComponent from '@ember/component/template-only';\n\nimport type { SafeString } from 'handlebars';\n\nexport interface FieldsetDescriptionSignature {\n Element: HTMLDivElement;\n Args: {\n /** The text to be shown in the fieldset description. */\n text: string | SafeString;\n };\n}\n\nconst FieldsetDescription = templateOnlyComponent();\nexport default FieldsetDescription;\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n\\n \\n\\n {{! Schedule blocks }}\\n {{#each this.scheduleElements as |scheduleDay|}}\\n
\\n
\\n {{scheduleDay.dayOfWeek}}\\n
\\n\\n {{#if scheduleDay.allDaySchedules}}\\n
\\n
\\n {{t \\\"@adc/ui-components.components.multi-schedule-view.allDay\\\"}}\\n
\\n
\\n {{#each scheduleDay.allDaySchedules as |accessPlan|}}\\n \\n
\\n \\n
\\n
\\n {{accessPlan.planName}}\\n {{! This .background div is needed because we are coloring it with currentColor\\n and there is no way to set the opacity without making it its own element }}\\n
\\n
\\n
\\n {{/each}}\\n
\\n
\\n {{/if}}\\n\\n {{#each scheduleDay.schedules as |accessPlan|}}\\n {{#if accessPlan.timeBlocks.length}}\\n
\\n {{#each accessPlan.timeBlocks as |scheduleDay|}}\\n \\n {{#if scheduleDay.planNameLabel}}\\n
\\n \\n
\\n {{/if}}\\n
\\n {{scheduleDay.planNameLabel}}\\n {{scheduleDay.label}}\\n {{! This .background div is needed because we are coloring it with currentColor\\n and there is no way to set the opacity without making it its own element }}\\n
\\n
\\n
\\n {{/each}}\\n
\\n {{/if}}\\n {{/each}}\\n
\\n {{/each}}\\n\\n {{#if @showPlanNames}}\\n \\n {{/if}}\\n \\n\")","import { MINUTES_IN_DAY } from '@adc/ember-utils/constants/time';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport BaseSchedule from './views/base-schedule.ts';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { TimeBlock, MultiScheduleObject, ScheduleElement, PlanSchedule } from './views/types';\n\ninterface MultiScheduleTimeBlock extends TimeBlock {\n icon: string;\n color: string;\n}\n\ninterface MultiScheduleElement extends ScheduleElement {\n allDaySchedules: {\n planName: string;\n planColor: string;\n planIcon: string;\n planIconTitle?: string;\n planIconDesc?: string;\n planIconIsHiddenForAccessibility?: boolean;\n }[];\n}\n\ninterface MultiScheduleViewSignature {\n Element: HTMLDivElement;\n Args: {\n /** The array of schedule objects to be rendered. */\n scheduleObjects?: MultiScheduleObject[];\n /** Indicates whether to show the hour labels. */\n showPlanNames?: boolean;\n };\n}\n\n/**\n * A schedule grid that shows multiple schedules.\n */\nexport default class MultiScheduleView extends BaseSchedule {\n @service declare intl: ADCIntlService;\n\n protected getPlanSchedule(schedule: MultiScheduleObject): PlanSchedule & { planName: string; planIcon: string } {\n return Object.assign(super.getPlanSchedule(schedule), {\n planName: schedule.name ?? '',\n planIcon: schedule.iconName ?? 'car'\n });\n }\n\n @computed('args.scheduleObjects.[]')\n get planSchedules(): (PlanSchedule & { planName: string; planIcon: string })[] {\n return (this.args.scheduleObjects ?? []).map((s) => this.getPlanSchedule(s));\n }\n\n protected getEmptyScheduleElements(): MultiScheduleElement[] {\n return super.getEmptyScheduleElements().map((s) => ({\n ...s,\n allDaySchedules: []\n }));\n }\n\n /**\n * Schedule to be rendered into the grid.\n */\n @computed('planSchedules')\n get scheduleElements(): MultiScheduleElement[] {\n const schedules = this.getEmptyScheduleElements();\n\n // For each plan schedule, create the block elements we need to render from their combinedSchedules property.\n this.planSchedules.forEach(({ combinedSchedules, planName, planIcon, planColor }) => {\n if (combinedSchedules.length) {\n const schedulesSlot = schedules[0].schedules.length;\n\n schedules.forEach((schedule) =>\n schedule.schedules.push({\n planName,\n planIcon,\n planColor,\n timeBlocks: []\n })\n );\n\n combinedSchedules.forEach((block: MultiScheduleTimeBlock) => {\n block.title = planName;\n block.icon = planIcon;\n block.color = planColor;\n this.addTimeBlockToScheduleSlot(block, schedules, schedulesSlot);\n });\n }\n });\n\n // Remove Sunday from the front of the array and add it to the end\n // We want Monday to be the first weekday on the schedule\n schedules.push(schedules.shift() as MultiScheduleElement);\n\n return schedules;\n }\n\n /**\n * Add a schedule to the specified list of schedule days.\n */\n protected addTimeBlockToScheduleSlot(\n timeBlock: MultiScheduleTimeBlock,\n schedules: MultiScheduleElement[],\n schedulesSlot: number\n ): void {\n const dayOfWeek = Math.floor(timeBlock.startMinutesLocal / MINUTES_IN_DAY);\n\n this.createElementsForTimeBlock(timeBlock, '', (index, label, classes, start, length, planNameLabel) => {\n // If this schedule day is all day.\n if (start === 0 && length === 100) {\n schedules[index].allDaySchedules.push({\n planName: timeBlock.title ?? '',\n planColor: timeBlock.color,\n planIcon: timeBlock.icon\n });\n\n return;\n }\n\n schedules[index].schedules[schedulesSlot].timeBlocks.push({\n day: dayOfWeek,\n label,\n planNameLabel,\n classes,\n style: htmlSafe(`left:${start}%;width:${length}%;`)\n });\n });\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n {{yield}}\\n
\\n\\n \\n\\n {{#if @linkInfo.route}}\\n \\n {{@linkInfo.text}}\\n \\n {{/if}}\\n\\n {{#if this.showPageSizeDropdown}}\\n
\\n \\n
\\n {{/if}}\\n
\")","import Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { computed, action } from '@ember/object';\nimport { gt } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownActionItem from '../utils/dropdown-action-item.js';\nimport DropdownSelectItem from '../utils/dropdown-select-item.js';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { Placement } from 'popper.js';\n\ninterface PaginationBarSignature {\n Element: HTMLDivElement;\n Args: {\n /** Action called when the user changes the currently selected page. */\n changePage: (page: number) => void;\n /** Action called when the user changes the page size. If this action parameter is not passed the page size selector will not render. */\n changePageSize?: (pageSize: number) => void;\n /** The total number of items. */\n itemCount?: number;\n /** The page size options to render in the page size selector. */\n pageSizeOptions?: number[];\n /** The currently selected page size. */\n selectedPageSize?: number;\n /** The currently selected page. */\n selectedPage?: number;\n /** The placement for the overflow page menu popup. */\n menuPlacement?: Placement;\n /** Optional link and text used to render a link inside link to render in pagination bar. */\n linkInfo?: {\n route?: string | null;\n text: string;\n };\n };\n Blocks: {\n default: [];\n };\n}\n\ninterface PageButton {\n text: string;\n page: number;\n disabled: boolean;\n css: string;\n pages: DropdownActionItem[];\n}\n\n/**\n * @classdesc\n * A pagination component with pages, arrows and a dropdown for page size.\n *\n * This control will always show the \"PREV\" button, the first button, last button, \"NEXT\" button and the three buttons surrounding the current page. If there are pages not represented\n * by that collection we will show popup menus for those pages, unless there is only one page in the popup.\n */\n@intlPath({ module: '@adc/ui-components', path: 'pagination-bar' })\nexport default class PaginationBar extends Component {\n @service declare intl: ADCIntlService;\n\n defaultPageSize = 100;\n\n constructor(owner: unknown, args: PaginationBarSignature['Args']) {\n super(owner, args);\n\n // Verify required closure functions.\n assert(`The changePage closure function must be passed to the pagination bar component`, this.args.changePage);\n\n // Optionally verify changePageSize if needed, but don't assert\n if (this.args.changePageSize) {\n assert(`The changePageSize must be a function`, typeof this.args.changePageSize === 'function');\n }\n }\n\n /**\n * The value of the selected page size.\n */\n @computed('args.selectedPageSize', 'defaultPageSize')\n get selectedPageSize(): number {\n return this.args.selectedPageSize ?? this.defaultPageSize;\n }\n\n /**\n * The computed number of pages.\n */\n @computed('args.itemCount', 'selectedPageSize')\n get pageCount(): number {\n const { selectedPageSize } = this,\n { itemCount = 0 } = this.args;\n\n return Math.ceil(itemCount / selectedPageSize);\n }\n\n get showPageSizeDropdown(): boolean {\n return !!this.args.changePageSize;\n }\n\n /**\n * Determines visibility of the pageButtons.\n */\n @gt('pageCount', 1)\n declare showPages: boolean;\n\n /**\n * The computed page buttons to render.\n *\n * This control will always show the first button, last button, and three buttons surrounding the current page. If there are pages not represented by that collection we will show\n * popup menus for those pages, unless there is only one page in the popup.\n */\n @computed('args.{changePage,selectedPage}', 'pageCount')\n get pageButtons(): PageButton[] {\n const { selectedPage = 1 } = this.args,\n { pageCount } = this;\n\n // Are there NO pages?\n if (pageCount === 0) {\n // Nothing to render.\n return [];\n }\n\n const buttons: PageButton[] = [],\n fnGetRangeOfPages = (start: number, end: number): number[] =>\n Array.from({ length: end - start + 1 }, (_, idx) => idx + start),\n fnGetButton = (text: string, page: number, css: string, pages: DropdownActionItem[] = []): PageButton => ({\n text,\n page,\n disabled: page === selectedPage,\n css,\n pages\n }),\n fnAddPageBtn = (page: number): number =>\n buttons.push(fnGetButton(String(page), page, `page${page === selectedPage ? ' active' : ''}`)),\n fnAddRangeMenuBtn = (pages: number[]): void => {\n // Does the menu only have one page?\n if (pages.length === 1) {\n // Show page button for that single page.\n fnAddPageBtn(pages[0]);\n return;\n }\n\n // Add dropdown actions button.\n buttons.push(\n fnGetButton(\n '...',\n -1,\n 'page',\n pages.map((page) =>\n DropdownActionItem.create({\n name: String(page),\n action: () => this.args.changePage(page)\n })\n )\n )\n );\n };\n\n // Calculate index of previous and next page.\n const previousPage = Math.max(selectedPage - 1, 1),\n nextPage = Math.min(selectedPage + 1, pageCount);\n\n // Assume we will show all pages in selection range.\n let selectionLowerBound = 1,\n selectionUpperBound = pageCount;\n\n // Are there more than six pages?\n if (pageCount > 6) {\n // Selection lower bound is the previous page, constrained to between 1 and the total page count minus 2.\n selectionLowerBound = Math.min(previousPage, pageCount - 2);\n\n // Selection upper bound is the next page, constrained to between 3 and the total page count.\n selectionUpperBound = Math.max(nextPage, 3);\n }\n\n // Get array of buttons around currently selected page, based on calculated lower and upper bound.\n const selectionRange = fnGetRangeOfPages(selectionLowerBound, selectionUpperBound);\n\n // Does the selection range NOT include the first page?\n if (!selectionRange.includes(1)) {\n // Add the first page.\n fnAddPageBtn(1);\n }\n\n // Does the selection range NOT include the second page?\n if (!selectionRange.includes(2)) {\n // Add menu button for the second page through the last page NOT present within the selection range.\n fnAddRangeMenuBtn(fnGetRangeOfPages(2, selectionLowerBound - 1));\n }\n\n // Add all selection range buttons.\n selectionRange.forEach(fnAddPageBtn);\n\n // Does the selection range NOT include the second to last page?\n if (!selectionRange.includes(pageCount - 1)) {\n // Add menu button for the first page after the selection range through the second to last page.\n fnAddRangeMenuBtn(fnGetRangeOfPages(selectionUpperBound + 1, pageCount - 1));\n }\n\n // Does the selection range NOT include the last page?\n if (!selectionRange.includes(pageCount)) {\n // Add the last page.\n fnAddPageBtn(pageCount);\n }\n\n // Return page buttons surrounded by the previous and next buttons.\n return [\n fnGetButton(this.intl.tc(this, 'previousPage'), previousPage, 'ctrl'),\n ...buttons,\n fnGetButton(this.intl.tc(this, 'nextPage'), nextPage, 'ctrl')\n ];\n }\n\n /**\n * Drop down items for page size.\n */\n @computed('args.pageSizeOptions.[]', 'selectedPageSize')\n get pageSizeItems(): DropdownSelectItem[] {\n return (this.args.pageSizeOptions ?? [10, 25, 50, 100]).map((value) =>\n DropdownSelectItem.create({\n name: this.intl.tc(this, 'perPage', { value }),\n value: String(value)\n })\n );\n }\n\n /**\n * Called when the user changes the page size dropdown value.\n * New page begins with first items from previous page.\n */\n @action onPageSizeChanged(size: string): void {\n this.args.changePageSize?.(parseInt(size, 10));\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n\\n \\n {{yield (hash body=container.body)}}\\n\\n {{#if @deleteModel}}\\n \\n {{/if}}\\n\\n \\n\\n \\n\\n\")","import RouteView from '../route-view.js';\n\n/**\n * @classdesc\n * Root component for all \"model details\" routes.\n */\nexport default class DetailsView extends RouteView {\n /** @override */\n useRouteViewClass = true;\n\n /** @override */\n containerMaxWidth = 'md';\n\n /**\n * Optional definition for a delete model button.\n *\n * @type {components.route-view.content.DeleteModel.DeleteModelType|undefined}\n */\n deleteModel;\n}\n","import SimpleListItem from '../components/simple-list/list-item.ts';\n\nexport default function getSimpleListItemHelper(params: Partial): SimpleListItem {\n return new SimpleListItem(params);\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if this.isInformative}}\\n {{#if @icon}}\\n \\n {{/if}}\\n {{/if}}\\n\\n \\n \\n {{message}}\\n \\n \\n\\n {{#if (and this.isIssue @optionText @on-option-click)}}\\n \\n \\n \\n {{/if}}\\n
\")","import Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type { SvgSymbolSignature } from '@adc/svg-system/components/svg-symbol';\n\nexport const ISSUE = 'issue';\nexport const INFORMATIVE = 'informative';\n\nexport interface AdcBannerSignature {\n Element: HTMLDivElement;\n Args: {\n /** The text to appear within the banner. */\n message: string | Promise;\n /** The banner type (defaults to `issue`) */\n type?: typeof ISSUE | typeof INFORMATIVE;\n /** Optional icon to appear in banner. */\n icon?: string;\n /** Optional title for icon. */\n iconTitle?: string;\n /** Optional fill color for icon. */\n iconColor?: SvgSymbolSignature['Args']['fillColor'];\n /** Text to be rendered inside the banner option button. */\n optionText?: string;\n /** Triggered when the user interacts with the banner option button. */\n 'on-option-click'?: VoidFunction;\n };\n}\n\n/**\n * @classdesc\n * Component designed to show status related information with an optional action button.\n */\n@intlPath({ module: '@adc/ui-components', path: 'adc-banner' })\nexport default class AdcBannerComponent extends Component {\n /**\n * The type of the banner. Affects the styling and the composition of the component.\n */\n get type(): string {\n const { type = ISSUE } = this.args;\n return [ISSUE, INFORMATIVE].includes(type) ? type : ISSUE;\n }\n\n get message(): Promise {\n return (async () => {\n const message = await this.args.message;\n assert('[@adc/ui-components] A message needs to be provided for the to make sense.', message);\n return message ?? '';\n })();\n }\n\n /**\n * Is this an Issue banner?\n */\n get isIssue(): boolean {\n return this.type === ISSUE;\n }\n\n /**\n * Is this an Informative banner?\n */\n get isInformative(): boolean {\n return this.type === INFORMATIVE;\n }\n}\n"],"names":["TEMPLATE","createTemplateFactory","scope","didInsert_","didUpdate_","willDestroy_","fn","DIRECTION_DOWN","DIRECTION_UP","SCROLL_DIRECTION_BUFFER_MULTIPLIER","NON_SCROLL_DIRECTION_BUFFER_MULTIPLIER","RENDERING_CLASS","initializeData","this","anchorItem","index","offset","firstAttachedItemIndex","lastAttachedItemIndex","anchorScrollTop","initialOffset","loadedItems","requestInProgressReject","undefined","listItemHeight","totalCountItems","scrollDirection","visibleItemsCount","items","setProperties","modelDataItems","A","prerenderElementSize","initialLoad","setupListeners","el","fnOnWindowResize","set","debounce","onResize","fnOnElementScroll","onScroll","call","scrollEl","node","regex","getNodeParents","ps","parentNode","concat","getStyleForProperty","prop","getComputedStyle","getPropertyValue","isElementScrollable","test","isOverflowSetOnElement","HTMLElement","SVGElement","i","length","document","body","scrollParent","addEventListener","window","removeListeners","removeEventListener","calculateAnchoredItem","initialAnchor","delta","tombstones","numItems","height","Math","max","ceil","min","floor","addItem","allItemsSameSize","newItem","dataItem","top","visible","width","push","triggerItemsCountChangedAction","itemsCount","action","cleanupCells","cells","count","cell","removeComponentListener","dataItemBound","itemIndexBound","itemComponent","isInitialRender","isDestroyed","element","querySelector","elId","elPrerender","querySelectorAll","next","style","offsetHeight","parseInt","marginTop","marginBottom","outerHeight","firstElementChild","scrollRunway","createElement","classList","add","appendChild","scrollRunwayEnd","getBoundingClientRect","scrollTop","item","cellsCount","id","itemIndex","visibleCells","maybeRequestContent","finally","bind","previousScrollTop","scrollAmount","scrollTopRelative","startIndex","newDirection","endIndex","fill","abs","passTotalCount","attachContent","ensureCorrectItemsList","itemsCountNeeded","slice","recalculateAnchorScrollTop","reduce","value","_ref","isDestroying","firstCell","Array","from","children","filter","every","css","contains","isEmpty","forEach","display","position","transform","willChange","zIndex","attachedIndexes","curPos","reverse","cellsToBeRecycled","indexOf","splice","changedCellsData","cellsToBeRecycledCount","itemForCell","pop","registry","getOwner","lookup","cellId","c","console","error","fnListener","fnDidRenderComponent","addListener","removeListener","cellData","changedCellsKeys","Object","keys","numKeys","then","reject","loadedItemsBuffer","itemsNeeded","Promise$1","resolve","fnGetItems","addContent","dataItems","previousTotalCountItems","meta","get","newDataItems","dataItemsCount","objectAt","pushObjects","totalCount","forceRecalculate","remove","offsetWidth","ListView","Component","guidFor","itemStateTrigger","map","_ref2","isDeleted","currentState","join","constructor","super","arguments","_defineProperty","tearDownElement","modelDataItemDelete","_item$currentState","isDirty","deletedModelItem","some","removeItem","checkItemsReset","resetItems","itemsReset","perform","listElementInserted","recalculateItemSize","_ListView","n","prototype","computed","task","setComponentTemplate","FieldsetDescription","templateOnlyComponent","fieldsetDescription","scheduleHourLabels_","t_","svgSymbol_","_intl","WeakMap","MultiScheduleView","BaseSchedule","_classPrivateFieldInitSpec","getPlanSchedule","schedule","_schedule$name","_schedule$iconName","assign","planName","name","planIcon","iconName","planSchedules","_this$args$scheduleOb","args","scheduleObjects","s","getEmptyScheduleElements","_objectSpread","allDaySchedules","scheduleElements","schedules","combinedSchedules","planColor","schedulesSlot","timeBlocks","block","title","icon","color","addTimeBlockToScheduleSlot","shift","timeBlock","dayOfWeek","startMinutesLocal","MINUTES_IN_DAY","createElementsForTimeBlock","label","classes","start","planNameLabel","_timeBlock$title","day","htmlSafe","_MultiScheduleView","g","inject","tc_","dropdownActions_","coalesce_","buttonSimple_","on","LinkTo","dropdownSelectSingleSelect_","toString_","PaginationBar","_showPages","_PaginationBar","owner","changePageSize","selectedPageSize","_this$args$selectedPa","defaultPageSize","pageCount","itemCount","showPageSizeDropdown","pageButtons","selectedPage","buttons","fnGetRangeOfPages","end","_","idx","fnGetButton","text","page","disabled","pages","fnAddPageBtn","String","fnAddRangeMenuBtn","DropdownActionItem","create","changePage","previousPage","nextPage","selectionLowerBound","selectionUpperBound","selectionRange","includes","intl","tc","pageSizeItems","_this$args$pageSizeOp","pageSizeOptions","DropdownSelectItem","onPageSizeChanged","size","_this$args$changePage","_this$args","gt","intlPath","module","path","routeViewViewContainer_","hash","routeViewContentDeleteModel_","DetailsView","RouteView","getSimpleListItemHelper","params","SimpleListItem","asyncLoader_","and_","buttonAsync_","noop_","ISSUE","INFORMATIVE","AdcBannerComponent","type","message","isIssue","isInformative"],"sourceRoot":""}