@nanoporetech-digital/components 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/cjs/index-41582c2a.js +8 -4
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-checkbox-group.cjs.entry.js +12 -3
- package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-details.cjs.entry.js +1 -1
- package/dist/cjs/nano-field-validator.cjs.entry.js +2 -0
- package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +2 -2
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +18 -20
- package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-progress-bar.cjs.entry.js +33 -0
- package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -0
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js +2 -2
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
- package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
- package/dist/cjs/{nano-table-8a898621.js → nano-table-7e02106c.js} +146 -58
- package/dist/cjs/nano-table-7e02106c.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +2 -1
- package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
- package/dist/cjs/{table.worker-b0b0044a.js → table.worker-daf39ca9.js} +3 -2
- package/dist/cjs/table.worker-daf39ca9.js.map +1 -0
- package/dist/cjs/{transitions-d295a09e.js → transitions-5cd8f697.js} +10 -8
- package/dist/cjs/transitions-5cd8f697.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/checkbox/checkbox-group.js +12 -3
- package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
- package/dist/collection/components/field-validator/field-validator.js +2 -0
- package/dist/collection/components/field-validator/field-validator.js.map +1 -1
- package/dist/collection/components/global-nav/assets/ont-logo.svg +89 -47
- package/dist/collection/components/global-nav/global-nav-interface.js.map +1 -1
- package/dist/collection/components/global-nav/global-nav.js +19 -21
- package/dist/collection/components/global-nav/global-nav.js.map +1 -1
- package/dist/collection/components/global-nav/{global-nav.css → style/global-nav.css} +462 -404
- package/dist/collection/components/nav-item/nav-item.css +4 -6
- package/dist/collection/components/progress-bar/progress-bar.css +84 -0
- package/dist/collection/components/progress-bar/progress-bar.js +106 -0
- package/dist/collection/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/collection/components/skeleton/skeleton.css +8 -5
- package/dist/collection/components/skeleton/skeleton.js +1 -1
- package/dist/collection/components/skeleton/skeleton.js.map +1 -1
- package/dist/collection/components/spinner/spinner.css +5 -9
- package/dist/collection/components/table/table.children.js +43 -17
- package/dist/collection/components/table/table.children.js.map +1 -1
- package/dist/collection/components/table/table.css +97 -27
- package/dist/collection/components/table/table.js +143 -33
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.service.js +1 -10
- package/dist/collection/components/table/table.service.js.map +1 -1
- package/dist/collection/components/table/table.store.js +11 -11
- package/dist/collection/components/table/table.store.js.map +1 -1
- package/dist/collection/utils/transitions.js +9 -7
- package/dist/collection/utils/transitions.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/nano-checkbox-group.js +12 -3
- package/dist/components/nano-checkbox-group.js.map +1 -1
- package/dist/components/nano-field-validator.js +2 -0
- package/dist/components/nano-field-validator.js.map +1 -1
- package/dist/components/nano-global-nav.js +17 -19
- package/dist/components/nano-global-nav.js.map +1 -1
- package/dist/components/nano-progress-bar.d.ts +11 -0
- package/dist/components/nano-progress-bar.js +11 -0
- package/dist/components/nano-progress-bar.js.map +1 -0
- package/dist/components/nano-table.js +167 -58
- package/dist/components/nano-table.js.map +1 -1
- package/dist/components/nav-item.js +1 -1
- package/dist/components/nav-item.js.map +1 -1
- package/dist/components/progress-bar.js +48 -0
- package/dist/components/progress-bar.js.map +1 -0
- package/dist/components/skeleton.js +2 -2
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/transitions.js +9 -7
- package/dist/components/transitions.js.map +1 -1
- package/dist/custom-elements/index.d.ts +6 -0
- package/dist/custom-elements/index.js +214 -91
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/index-3c280603.js +8 -4
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-checkbox-group.entry.js +12 -3
- package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-details.entry.js +1 -1
- package/dist/esm/nano-field-validator.entry.js +2 -0
- package/dist/esm/nano-field-validator.entry.js.map +1 -1
- package/dist/esm/nano-global-nav-user-profile_3.entry.js +2 -2
- package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +18 -20
- package/dist/esm/nano-global-nav.entry.js.map +1 -1
- package/dist/esm/nano-progress-bar.entry.js +29 -0
- package/dist/esm/nano-progress-bar.entry.js.map +1 -0
- package/dist/esm/nano-resize-observe_2.entry.js +2 -2
- package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
- package/dist/esm/nano-spinner.entry.js +1 -1
- package/dist/esm/nano-spinner.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +1 -1
- package/dist/esm/{nano-table-efdf3dba.js → nano-table-930d9245.js} +146 -58
- package/dist/esm/nano-table-930d9245.js.map +1 -0
- package/dist/esm/nano-table.entry.js +2 -1
- package/dist/esm/nano-table.entry.js.map +1 -1
- package/dist/esm/{table.worker-10ba1126.js → table.worker-7666db6d.js} +3 -2
- package/dist/esm/table.worker-7666db6d.js.map +1 -0
- package/dist/esm/{transitions-d75d242e.js → transitions-71cca3ed.js} +10 -8
- package/dist/esm/transitions-71cca3ed.js.map +1 -0
- package/dist/nano-components/assets/ont-logo.svg +89 -47
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-components.esm.js.map +1 -1
- package/dist/nano-components/p-167b9165.js +5 -0
- package/dist/nano-components/p-167b9165.js.map +1 -0
- package/dist/nano-components/p-28344d24.entry.js +5 -0
- package/dist/nano-components/p-28344d24.entry.js.map +1 -0
- package/dist/nano-components/p-40b47b05.entry.js +5 -0
- package/dist/nano-components/{p-8a6834ff.entry.js.map → p-40b47b05.entry.js.map} +0 -0
- package/dist/nano-components/p-49458cd9.js +5 -0
- package/dist/nano-components/p-49458cd9.js.map +1 -0
- package/dist/nano-components/p-65f84bbd.entry.js +5 -0
- package/dist/nano-components/p-65f84bbd.entry.js.map +1 -0
- package/dist/nano-components/{p-8ef2363b.entry.js → p-6cd59e58.entry.js} +2 -2
- package/dist/nano-components/{p-8ef2363b.entry.js.map → p-6cd59e58.entry.js.map} +0 -0
- package/dist/nano-components/{p-687350a5.entry.js → p-701e8ebf.entry.js} +2 -2
- package/dist/nano-components/p-701e8ebf.entry.js.map +1 -0
- package/dist/nano-components/p-a2d0d7b9.entry.js.map +1 -1
- package/dist/nano-components/p-b717f6d7.js +5 -0
- package/dist/nano-components/{p-b7b06e04.js.map → p-b717f6d7.js.map} +0 -0
- package/dist/nano-components/p-b7901427.entry.js +5 -0
- package/dist/nano-components/p-b7901427.entry.js.map +1 -0
- package/dist/nano-components/{p-9f8b091a.entry.js → p-b7c3aecb.entry.js} +2 -2
- package/dist/nano-components/{p-9f8b091a.entry.js.map → p-b7c3aecb.entry.js.map} +0 -0
- package/dist/nano-components/p-d8e8d7e3.entry.js +5 -0
- package/dist/nano-components/p-d8e8d7e3.entry.js.map +1 -0
- package/dist/nano-components/p-f95a263c.entry.js +5 -0
- package/dist/nano-components/p-f95a263c.entry.js.map +1 -0
- package/dist/types/components/global-nav/global-nav-interface.d.ts +43 -0
- package/dist/types/components/global-nav/global-nav.d.ts +1 -1
- package/dist/types/components/progress-bar/progress-bar.d.ts +19 -0
- package/dist/types/components/table/table.children.d.ts +2 -1
- package/dist/types/components/table/table.d.ts +25 -7
- package/dist/types/components/table/table.service.d.ts +1 -7
- package/dist/types/components/table/table.store.d.ts +4 -2
- package/dist/types/components.d.ts +60 -5
- package/docs-json.json +273 -49
- package/docs-vscode.json +31 -2
- package/package.json +3 -3
- package/dist/cjs/nano-table-8a898621.js.map +0 -1
- package/dist/cjs/table.worker-b0b0044a.js.map +0 -1
- package/dist/cjs/transitions-d295a09e.js.map +0 -1
- package/dist/esm/nano-table-efdf3dba.js.map +0 -1
- package/dist/esm/table.worker-10ba1126.js.map +0 -1
- package/dist/esm/transitions-d75d242e.js.map +0 -1
- package/dist/nano-components/p-03402e69.entry.js +0 -5
- package/dist/nano-components/p-03402e69.entry.js.map +0 -1
- package/dist/nano-components/p-2382d5e9.entry.js +0 -5
- package/dist/nano-components/p-2382d5e9.entry.js.map +0 -1
- package/dist/nano-components/p-4c6ef60b.js +0 -5
- package/dist/nano-components/p-4c6ef60b.js.map +0 -1
- package/dist/nano-components/p-61bfb8b9.entry.js +0 -5
- package/dist/nano-components/p-61bfb8b9.entry.js.map +0 -1
- package/dist/nano-components/p-687350a5.entry.js.map +0 -1
- package/dist/nano-components/p-82295d91.js +0 -5
- package/dist/nano-components/p-82295d91.js.map +0 -1
- package/dist/nano-components/p-8a6834ff.entry.js +0 -5
- package/dist/nano-components/p-9f2524d4.entry.js +0 -5
- package/dist/nano-components/p-9f2524d4.entry.js.map +0 -1
- package/dist/nano-components/p-b7b06e04.js +0 -5
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["src/components/table/table.constants.ts","@worker-helper","src/components/table/table.store.ts","src/components/table/table.service.tsx","src/components/table/table.children.tsx","src/components/table/table.utils.ts","src/components/table/table.scss?tag=nano-table","src/components/table/table.tsx"],"names":["CSSNAMESPACE","isInstanceOf","value","className","C","globalThis","getTransferables","constructor","Object","values","Array","isArray","flatMap","buffer","pendingIds","callbackIds","pending","Map","callbacks","createWorker","workerPath","workerName","workerMsgId","worker","Worker","name","addEventListener","data","workerMsg","id","err","resolve","reject","get","delete","errObj","assign","Error","message","consoleError","forEach","e","createWorkerProxy","exportedMethod","args","Promise","pendingId","i","argLen","length","mainData","set","callbackId","push","postMessage","w","then","colsToWorker","columns","safeColumns","JSON","parse","stringify","c","sortCompareFn","safeCol","find","sc","prop","toString","stores","WeakMap","async","generateStore","host","rows","map","row","__index","__uuid","cyrb53","join","store","createStore","config","general","workerId","createWorkerStore","state","use","reset","syncDataToWorker","dispose","syncConfigToWorker","getStore","storeSetData","storeSetConfig","storeSearch","term","workerSearch","console","log","storeFilter","filters","workerFilter","storeSort","order","workerSort","colDataModel","rowIndex","colIndex","fetchStores","column","rowModel","cellModel","rowDataModel","mergeProperties","current","extra","props","class","style","getElement","getRenderingRef","mergeCellProperties","defaultProps","extraPropsFunc","cellProperties","cellRender","tpl","cellTemplate","model","h","Fragment","colheadRender","col","colTemplate","title","baseClasses","type","vPinned","classes","[object Object]","classString","entries","on","stickyHIOs","stickyVIOs","addHObserver","el","pos","cb","observer","IntersectionObserver","positions","start","boundingClientRect","x","isIntersecting","end","width","intersectionRect","threshold","rootMargin","requestAnimationFrame","observe","addVObserver","top","y","bottom","height","TableRow","rowRenderer","children","extraProps","rowProperties","pinned","baseProps","key","TableHeadFootRow","onColumnPinned","utils","template","toRender","renderedRow","node","vtag","vattrs","vchildren","cNode","includes","ref","th","TableColHead","headRenderer","onColumnOrderClick","handleColumnOrderClick","target","parentElement","columnProperties","filter","content","Number","colspan","scope","sortable","aria-sort","onClick","TableCell","CellType","rowHeader","rowspan","detectScrollSpeed","lastPos","newPos","timer","delta","delay","clear","window","scrollY","clearTimeout","setTimeout","findScrollParent","element","getComputedStyle","excludeStaticParent","position","overflowRegex","document","documentElement","parent","test","overflow","overflowY","overflowX","isInViewport","percentVisible","r","getBoundingClientRect","windowHeight","innerHeight","clientHeight","left","right","Math","floor","tableCss","Table","this","renderId","currentFilters","currentSort","blockIos","blockHeights","unitHeight","ignoreIO","_isReady","sortStart","sortEvent","nanoTblBeforeSort","emit","defaultPrevented","scrollToTop","customSortFn","sortComplete","warn","setupBlockIO","blockIndex","has","blockIo","ioEntry","readTask","scrollSpeed","activeBlocks","max","nanoTblBlockRendered","block","totalBlocks","blockElements","setBlockHeight","handleColumnPinned","applied","tableEle","classList","toggle","isReady","columnInit","blocksLength","blocks","searchStart","filterStart","additive","measureEle","measureHeight","querySelector","ready","handleReady","speed","hash","location","idRow","scrollIntoView","nanoTblReady","nanoTblAfterSort","nanoTblBeforeSearch","searchTerm","nanoTblAfterSearch","f","ff","nanoTblBeforeFilter","customFilterFn","filterComplete","cFilter","nanoTblAfterFilter","scrollBehaviour","scrollParent","scrollBehavior","b","contains","finishResizing","setMeasureElement","l","perBlock","undefined","cachedBlockHeight","bh","blockLength","fBhI","findIndex","caption","error","processSlots","setBlocks","onChange","setInitialBlockDimension","_newVal","_oldVal","stateName","Host","aria-labelledby","tabindex","role","aria-readonly","aria-rowcount","aria-colcount","tbl","headRender","colModel","tb","rowRender","_colModel","colSpan","getBlockHeight","showFooter","footRender"],"mappings":"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","sourcesContent":["export const CSSNAMESPACE = 'nano-tbl';\n","\nimport { consoleError } from '@stencil/core/internal';\n\n\nconst isInstanceOf = (value, className) => {\n const C = globalThis[className];\n return C != null && value instanceof C;\n}\nconst getTransferables = (value) => {\n if (value != null) {\n if (\n isInstanceOf(value, \"ArrayBuffer\") ||\n isInstanceOf(value, \"MessagePort\") ||\n isInstanceOf(value, \"ImageBitmap\") ||\n isInstanceOf(value, \"OffscreenCanvas\")\n ) {\n return [value];\n }\n if (typeof value === \"object\") {\n if (value.constructor === Object) {\n value = Object.values(value);\n }\n if (Array.isArray(value)) {\n return value.flatMap(getTransferables);\n }\n return getTransferables(value.buffer);\n }\n }\n return [];\n};\n\nlet pendingIds = 0;\nlet callbackIds = 0;\nconst pending = new Map();\nconst callbacks = new Map();\n\nexport const createWorker = (workerPath, workerName, workerMsgId) => {\n const worker = new Worker(workerPath, {name:workerName});\n\n worker.addEventListener('message', ({data}) => {\n if (data) {\n const workerMsg = data[0];\n const id = data[1];\n const value = data[2];\n\n if (workerMsg === workerMsgId) {\n const err = data[3];\n const [resolve, reject, callbackIds] = pending.get(id);\n pending.delete(id);\n\n if (err) {\n const errObj = (err.isError)\n ? Object.assign(new Error(err.value.message), err.value)\n : err.value;\n\n consoleError(errObj);\n reject(errObj);\n } else {\n if (callbackIds) {\n callbackIds.forEach(id => callbacks.delete(id));\n }\n resolve(value);\n }\n } else if (workerMsg === workerMsgId + '.cb') {\n try {\n callbacks.get(id)(...value);\n } catch (e) {\n consoleError(e);\n }\n }\n }\n });\n\n return worker;\n};\n\nexport const createWorkerProxy = (worker, workerMsgId, exportedMethod) => (\n (...args) => new Promise((resolve, reject) => {\n let pendingId = pendingIds++;\n let i = 0;\n let argLen = args.length;\n let mainData = [resolve, reject];\n pending.set(pendingId, mainData);\n\n for (; i < argLen; i++) {\n if (typeof args[i] === 'function') {\n const callbackId = callbackIds++;\n callbacks.set(callbackId, args[i]);\n args[i] = [workerMsgId + '.cb', callbackId];\n (mainData[2] = mainData[2] || []).push(callbackId);\n }\n }\n const postMessage = (w) => (\n w.postMessage(\n [workerMsgId, pendingId, exportedMethod, args],\n getTransferables(args)\n )\n );\n if (worker.then) {\n worker.then(postMessage);\n } else {\n postMessage(worker);\n }\n })\n);\n","import { createStore, ObservableMap } from '@stencil/store';\nimport { cyrb53 } from '../../utils/math';\nimport {\n createWorkerStore,\n syncConfigToWorker,\n syncDataToWorker,\n workerFilter,\n workerSearch,\n workerSort,\n} from './table.worker';\nimport type { TableTypes } from '../../interface';\n\nexport interface TableStores {\n data: ObservableMap<{ rows: TableTypes.NanoTable['rows'] }>;\n config: ObservableMap<{ columns: TableTypes.NanoTable['columns'] }>;\n general: ObservableMap<{ workerId: string }>;\n}\n\nfunction colsToWorker(columns: TableTypes.NanoTable['columns']) {\n const safeColumns: Partial<TableTypes.ColumnConfig>[] = JSON.parse(\n JSON.stringify(columns)\n );\n columns.forEach((c) => {\n if (!!c.sortCompareFn) {\n const safeCol = safeColumns.find((sc) => sc.prop === c.prop);\n safeCol.sortCompareFn = c.sortCompareFn.toString();\n }\n });\n return safeColumns;\n}\n\nconst stores: WeakMap<HTMLElement, TableStores> = new WeakMap();\n\nexport async function generateStore(\n host: HTMLElement,\n rows: TableTypes.NanoTable['rows'],\n columns: TableTypes.NanoTable['columns']\n) {\n // augment data with some internal props\n rows = rows.map((row, i) => ({\n ...row,\n __index: i,\n __uuid: cyrb53(Object.values(row).join()),\n }));\n\n const store: TableStores = {\n data: createStore({ rows }),\n config: createStore({ columns }),\n general: createStore({ workerId: null }),\n };\n\n const id = await createWorkerStore(\n store.data.state.rows,\n colsToWorker(store.config.state.columns)\n );\n store.general.state.workerId = id;\n stores.set(host, store);\n\n // sync data from our store to our worker\n\n store.data.use({\n reset: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n });\n store.config.use({\n reset: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n });\n return store;\n}\n\nexport function getStore(host: HTMLElement) {\n return stores.get(host);\n}\n\nexport function storeSetData(host: HTMLElement, rows: TableTypes.RowData[]) {\n const store = stores.get(host);\n if (!store) return;\n\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, rows);\n store.data.state.rows = rows;\n}\n\nexport function storeSetConfig(\n host: HTMLElement,\n columns: TableTypes.ColumnConfig[]\n) {\n const store = stores.get(host);\n if (!store) return;\n\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, colsToWorker(columns));\n store.config.state.columns = columns;\n}\n\nexport async function storeSearch(host: HTMLElement, term: string) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSearch(\n store.general.state.workerId,\n term\n );\n } catch (e) {\n console.log(e);\n }\n}\n\nexport async function storeFilter(\n host: HTMLElement,\n filters: TableTypes.Filter[]\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerFilter(\n store.general.state.workerId,\n filters\n );\n } catch (e) {\n console.log(e);\n }\n}\n\nexport async function storeSort(\n host: HTMLElement,\n prop: TableTypes.Prop,\n order: TableTypes.Order\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSort(\n store.general.state.workerId,\n prop,\n order\n );\n } catch (e) {\n console.log(e);\n }\n}\n","import { getRenderingRef, getElement, VNode, h, Fragment } from '@stencil/core';\nimport { getStore } from './table.store';\nimport type { TableTypes } from '../../interface';\n\n/**\n * Get a model object for custom cell / property renderers.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns a model object which will be passed to custom renderers\n */\nfunction colDataModel(\n rowIndex: number,\n colIndex: number\n): TableTypes.ColumnDataSchemaModel {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const rows = store.data.state.rows;\n\n const column = columns[colIndex];\n const prop: TableTypes.ColumnProp | undefined = column?.prop;\n const rowModel = rows[rowIndex];\n const cellModel = rowModel[columns[colIndex].prop];\n\n return {\n prop,\n cellModel,\n column,\n rowIndex,\n rowModel,\n };\n}\n\n/**\n * Get a model object for custom row renderers.\n * @param rowIndex\n * @returns a model object passed to custom row renderers\n */\nexport function rowDataModel(rowIndex: number): TableTypes.RowDataSchemaModel {\n const store = fetchStores();\n const rows = store.data.state.rows;\n const row = rows[rowIndex];\n\n return {\n row,\n rowIndex,\n };\n}\n\n/**\n * Merges 2 objects of properties together\n * @param current - property object\n * @param extra - additional object property\n * @returns - merged properties that can be applied to a node\n */\nexport function mergeProperties(\n current: TableTypes.EleProps,\n extra: TableTypes.EleProps\n) {\n if (!extra) return current;\n\n // top level merge\n const props: TableTypes.EleProps = { ...extra, ...current };\n\n // deeper merge\n // merge classes maps or strings\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (\n typeof extra.class === 'string' &&\n typeof props.class === 'object'\n ) {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n // merge style\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n}\n\n/**\n * Returns the current nano-table's stores.\n * @returns the current nano-table stores\n */\nexport function fetchStores() {\n return getStore(getElement(getRenderingRef()));\n}\n\n/**\n * Merges any defined cell properties with properties\n * required by `nano-table` functionality\n * @param rowIndex - the current row index being rendered\n * @param colIndex = the current column index being rendered\n * @param defaultProps - default properties required by `nano-table`\n * @returns - the merged properties that will be applied to a node\n */\nexport function mergeCellProperties(\n rowIndex: number,\n colIndex: number,\n defaultProps: TableTypes.EleProps\n): TableTypes.EleProps {\n const props: TableTypes.EleProps = { ...defaultProps };\n const extraPropsFunc =\n fetchStores().config.state.columns[colIndex]?.cellProperties;\n if (!extraPropsFunc) return props;\n\n const data = colDataModel(rowIndex, colIndex);\n const extra = extraPropsFunc(data);\n if (!extra) return props;\n\n return mergeProperties(props, extra);\n}\n\n/**\n * Renders a cell using a custom renderer if set.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns - a JSX node\n */\nexport function cellRender(rowIndex: number, colIndex: number): VNode {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const tpl = columns[colIndex]?.cellTemplate;\n const model = colDataModel(rowIndex, colIndex);\n\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, model)\n ) : (\n <Fragment>{model.cellModel}</Fragment>\n );\n}\n\n/**\n * Renders a table header (within a thead) using a custom template if set.\n * @param col - the current column config object\n * @returns - a JSX node\n */\nexport function colheadRender(col: TableTypes.ColumnConfig): VNode {\n const tpl = col?.colTemplate;\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n\n/**\n * Renders a table header (within a tfoot) using a custom template if set.\n * @param col - the current column config object\n * @returns - a JSX node\n */\nexport function colFootRender(col: TableTypes.ColumnConfig): VNode | void {\n const tpl = col?.colTemplate;\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n","import { Fragment, FunctionalComponent, h, VNode } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n cellRender,\n colheadRender,\n fetchStores,\n mergeCellProperties,\n mergeProperties,\n rowDataModel,\n} from './table.service';\nimport type { TableTypes } from '../../interface';\n\ntype ValidRenderTypes = 'tr' | 'th' | 'td';\n\ntype PinnedCb = (positions: { [key in TableTypes.Position]?: boolean }) => void;\n\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: false\n): { [key: string]: boolean };\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: true\n): string;\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString = false\n): { [key: string]: boolean } | string {\n const classes = {\n [`${CSSNAMESPACE}__${type}`]: true,\n [`${CSSNAMESPACE}__pin`]: !!vPinned,\n [`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',\n [`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',\n };\n\n if (toString) {\n let classString = '';\n Object.entries(classes).forEach(([className, on]) => {\n if (on) classString += className + ' ';\n });\n return classString;\n }\n return classes;\n}\n\nconst stickyHIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\nconst stickyVIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\n\nfunction addHObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyHIOs.get(el)) return;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'start')\n positions.start = e.boundingClientRect.x < 0 && !e.isIntersecting;\n if (pos === 'end')\n positions.end =\n e.boundingClientRect.width > e.intersectionRect.width &&\n !e.isIntersecting;\n cb(positions);\n },\n { threshold: [1], rootMargin: '1px 0px 1px 0px' }\n );\n stickyHIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\nfunction addVObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyVIOs.get(el)) return;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n console.log(e);\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'top')\n positions.top = e.boundingClientRect.y < 0 && !e.isIntersecting;\n if (pos === 'bottom')\n positions.bottom =\n e.boundingClientRect.height > e.intersectionRect.height &&\n !e.isIntersecting;\n cb(positions);\n },\n { threshold: [0.99], rootMargin: '0px 100px 0px 100px' }\n );\n stickyVIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex?: number;\n row?: TableTypes.RowData;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, row },\n children\n) => {\n let extraProps = {};\n\n if (!row) {\n const model = rowDataModel(rowIndex);\n row = model.row;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ row: row, rowIndex }) || extraProps;\n }\n\n let pinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n pinned = rowRenderer.pinned();\n }\n\n const baseProps = { class: baseClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n\n return (\n <tr {...props} key={row.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: baseClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(h as TableTypes.HFunc<VNode>, {\n renderedRow: <tr {...props}>{children}</tr>,\n });\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: baseClasses('tr', null, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: baseClasses(\n cNode.vtag.toString() as ValidRenderTypes,\n pinned,\n true\n ),\n ref: (th) => {\n addVObserver(th, pinned, onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return <tr {...props}>{children}</tr>;\n};\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnOrderClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLElement\n ) => void;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnOrderClick,\n onColumnPinned,\n}) => {\n function handleColumnOrderClick(e: MouseEvent & { target: HTMLElement }) {\n let order;\n switch (column.order) {\n case 'asc':\n order = 'desc';\n break;\n case 'desc':\n order = null;\n break;\n default:\n order = 'asc';\n }\n onColumnOrderClick(order, column.prop, e.target.parentElement);\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...baseClasses('th', headRenderer?.pinned),\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__filtered`]: !!column.filter,\n },\n };\n let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const content = colheadRender(column);\n\n if (!content) return <Fragment></Fragment>;\n\n props =\n Number((props as TableTypes.EleProps).colspan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (column.sortable !== false) {\n return (\n <th\n {...props}\n aria-sort={\n column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n >\n <button\n class={`${CSSNAMESPACE}__order-btn`}\n onClick={handleColumnOrderClick}\n >\n {colheadRender(column)}\n {!!column.filter && <nano-icon name=\"light/filter\" />}\n {!!column.order &&\n (column.order === 'desc' ? (\n <nano-icon name=\"solid/long-arrow-down\" />\n ) : (\n <nano-icon name=\"solid/long-arrow-up\" />\n ))}\n <div class={`${CSSNAMESPACE}__status-icons`}>\n <nano-icon name=\"light/chevron-down\" />\n </div>\n </button>\n </th>\n );\n }\n\n return (\n <th\n {...props}\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n >\n {colheadRender(column)}\n {!!column.filter && <nano-icon name=\"light/bars-filter\" />}\n </th>\n );\n};\n\ntype TableCellProps = {\n rowIndex: number;\n colIndex: number;\n};\n\nexport const TableCell: FunctionalComponent<TableCellProps> = ({\n rowIndex,\n colIndex,\n}) => {\n const content = cellRender(rowIndex, colIndex);\n if (!content) return <Fragment></Fragment>;\n\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n let CellType = 'td';\n let props = mergeCellProperties(rowIndex, colIndex, {\n class: {\n [`${CSSNAMESPACE}__td`]: true,\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__pin`]: !!column.pinned,\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n },\n });\n\n if (column.rowHeader) {\n props =\n Number((props as TableTypes.EleProps).rowspan) > 1\n ? { ...props, scope: 'rowgroup' }\n : { ...props, scope: 'row' };\n CellType = 'th';\n }\n\n return (\n <CellType\n // role=\"gridcell\"\n {...props}\n >\n {cellRender(rowIndex, colIndex)}\n </CellType>\n );\n};\n","export const detectScrollSpeed = (() => {\n let lastPos: number;\n let newPos: number;\n let timer: number;\n let delta: number;\n const delay = 60; // in \"ms\" (higher means lower fidelity )\n\n const clear = () => {\n lastPos = null;\n delta = 0;\n };\n clear();\n\n return () => {\n newPos = window.scrollY;\n if (lastPos != null) delta = newPos - lastPos;\n lastPos = newPos;\n window.clearTimeout(timer);\n timer = window.setTimeout(clear, delay);\n return delta;\n };\n})();\n\nexport function findScrollParent(element: HTMLElement) {\n let style = getComputedStyle(element);\n const excludeStaticParent = style.position === 'absolute';\n const overflowRegex = /(auto|scroll)/;\n\n if (style.position === 'fixed') return document.documentElement;\n for (let parent = element; (parent = parent.parentElement); ) {\n style = getComputedStyle(parent);\n if (excludeStaticParent && style.position === 'static') {\n continue;\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX))\n return parent;\n }\n return document.documentElement;\n}\n\nexport function isInViewport(el: Element, percentVisible = 100) {\n const r = el.getBoundingClientRect();\n const windowHeight =\n window.innerHeight || document.documentElement.clientHeight;\n\n if (\n !r.bottom &&\n !r.top &&\n !r.left &&\n !r.right &&\n !r.height &&\n !r.width &&\n !r.x &&\n !r.y\n )\n return false;\n\n return !(\n Math.floor(100 - ((r.top >= 0 ? 0 : r.top) / +-r.height) * 100) <\n percentVisible ||\n Math.floor(100 - ((r.bottom - windowHeight) / r.height) * 100) <\n percentVisible\n );\n}\n","@use '../../global/style/utilities/globals' as t;\n\nnano-table {\n display: block;\n\n // general\n --max-col-width: 200px;\n\n // text\n --color: var(--nano-color-mediumgrey, #68767e);\n --font-size: 0.87rem;\n --cell-line-height: 1.5;\n\n // borders\n --border-color: var(--nano-color-palegrey, #b5aea7);\n --border-style: 1px solid var(--border-color);\n --border-tint-color: var(--nano-color-blue, #90c6e7);\n --border-tint-style: 2px solid var(--border-tint-color);\n\n // backgrounds\n --cell-bg-rgb: var(--nano-color-white-rgb);\n --head-bg-rgb: var(--cell-bg-rgb);\n --foot-bg-rgb: var(--cell-bg-rgb);\n --th-row-bg-rgb: var(--cell-bg-rgb);\n --ordered-bg-rgb: var(--nano-color-lightgrey-rgb);\n\n // spacing\n --td-padding: 0.5rem 0.625rem 0.4125rem;\n --th-padding: 0.875rem 0.625rem 0.6875rem;\n --head-th-padding: var(--th-padding);\n --foot-th-padding: var(--td-padding);\n --bookend-col-padding: 2rem;\n}\n\n.nano-tbl {\n $base: &;\n\n color: var(--color);\n text-align: start;\n width: 100%;\n font-size: var(--font-size);\n border-spacing: 0 0;\n margin-block-end: 32px;\n border-collapse: separate;\n background: rgb(var(--cell-bg-rgb));\n\n // for container queries - not working atm\n\n // tr {\n // container-type: inline-size;\n // }\n\n &__ordered {\n background-color: var(--ordered-bg);\n border-inline-start: var(--border-style);\n border-inline-end: var(--border-style);\n }\n\n &__order-btn {\n padding: 0;\n border: none;\n outline: none;\n font: inherit;\n background: none;\n appearance: none;\n color: inherit;\n display: flex;\n gap: 10px;\n align-items: center;\n width: 100%;\n }\n\n &__status-icons {\n margin-inline: auto 10px;\n display: flex;\n gap: 10px;\n }\n\n &__loader {\n font-size: 2rem;\n width: 100%;\n display: block;\n }\n\n &__caption {\n @include t.visually-hide;\n }\n\n &__td,\n &__th {\n line-height: var(--cell-line-height);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: start;\n border-block-end: var(--border-style);\n padding: var(--td-padding);\n max-width: var(--max-col-width);\n background-color: rgb(var(--cell-bg-rgb));\n\n // for container queries - not working atm\n\n // @container (min-width: 700px) {\n // &:first-child {\n // padding-inline-start: var(--bookend-col-padding) !important;\n // }\n\n // &:last-child {\n // padding-inline-end: var(--bookend-col-padding) !important;\n // }\n // }\n\n @include t.media-breakpoint-up('md') {\n &:first-child {\n padding-inline-start: var(--bookend-col-padding) !important;\n }\n\n &:last-child {\n padding-inline-end: var(--bookend-col-padding) !important;\n }\n }\n\n thead & {\n padding: var(--head-th-padding);\n font-weight: 800;\n background: rgba(var(--head-bg-rgb), 90%);\n }\n\n tfoot & {\n padding: var(--foot-th-padding);\n font-weight: 800;\n border-block-end: none;\n background: rgba(var(--foot-bg-rgb), 90%);\n }\n\n &.nano-tbl__ordered {\n background-color: rgba(var(--ordered-bg-rgb), 0.8) !important;\n }\n }\n\n tbody {\n will-change: scroll-position;\n visibility: visible;\n\n &.nano-tbl__inactive {\n visibility: hidden;\n }\n }\n\n th[scope='row'] {\n font-weight: 800;\n max-width: 65vw;\n margin: 0;\n }\n\n &__pin {\n position: sticky;\n\n &--start {\n inset-inline: -1px auto;\n will-change: scroll-position;\n overflow: visible;\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: 5px 0 4px 0 rgb(0 0 0 / 20%);\n opacity: 0;\n }\n\n #{$base}__pinned--start & {\n z-index: 1;\n\n &::after {\n opacity: 1;\n }\n }\n }\n\n &--end {\n inset-inline: auto -1px;\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n box-shadow: -5px 0 4px 0 rgb(0 0 0 / 20%);\n opacity: 0;\n }\n\n #{$base}__pinned--end & {\n z-index: 2;\n\n &::after {\n opacity: 1;\n }\n }\n }\n\n &--top {\n inset-block: -1px auto;\n\n #{$base}__pinned--top & {\n z-index: 3;\n }\n }\n\n &--bottom {\n inset-block: auto -1px;\n\n #{$base}__pinned--bottom & {\n z-index: 4;\n border-block-start: var(--border-tint-style);\n }\n }\n\n &--top#{&}--start {\n #{$base}__pinned--top#{$base}__pinned--start & {\n z-index: 5;\n }\n }\n\n &--top#{&}--end {\n #{$base}__pinned--top#{$base}__pinned--end & {\n z-index: 5;\n }\n }\n\n &--bottom#{&}--start {\n #{$base}__pinned--bottom#{$base}__pinned--start & {\n z-index: 5;\n }\n }\n\n &--bottom#{&}--end {\n #{$base}__pinned--bottom#{$base}__pinned--end & {\n z-index: 5;\n }\n }\n }\n\n thead tr:last-of-type td,\n thead tr:last-of-type th,\n tfoot tr:last-of-type td,\n tfoot tr:last-of-type th {\n border-block-end: var(--border-tint-style);\n }\n\n .unlimited-width {\n max-width: none;\n }\n}\n","import {\n Component,\n Prop,\n h,\n ComponentInterface,\n Element,\n Host,\n Watch,\n State,\n readTask,\n Event,\n EventEmitter,\n Method,\n Build,\n Listen,\n} from '@stencil/core';\nimport { cyrb53 } from '../../utils/math';\nimport {\n TableColHead,\n TableRow,\n TableCell,\n TableHeadFootRow,\n} from './table.children';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n generateStore,\n storeSearch,\n storeSetConfig,\n storeSetData,\n storeSort,\n storeFilter,\n TableStores,\n} from './table.store';\nimport {\n detectScrollSpeed,\n findScrollParent,\n isInViewport,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\nfunction perMark(name: string, end: boolean = false) {\n if (!Build.isDev) return;\n if (end) {\n performance?.mark('end' + name);\n performance?.measure(name, 'start' + name, 'end' + name);\n const entries = performance?.getEntriesByName(name);\n console.log(entries[entries.length ? entries.length - 1 : 0]);\n } else {\n performance?.mark('start' + name);\n }\n}\n\nlet id = 0;\n/**\n * Table\n * @slot - The tooltip's target element. Only the first element will be used as the target.\n * @slot content - The tooltip's content. Alternatively, you can use the content prop.\n */\n@Component({\n tag: 'nano-table',\n styleUrl: 'table.scss',\n})\nexport class Table implements ComponentInterface {\n // Public API\n\n // Props\n\n /** The type of table. Grid type will make cells navigable by keyboard */\n @Prop() type: 'grid' | 'table' = 'table';\n\n /** A descriptive title of the table.\n * You must use this or the `slot=\"caption\"` for accessibility */\n @Prop() caption: string;\n\n /** Show the caption on-screen */\n @Prop() showCaption: boolean = false;\n\n /** The data to place in the table */\n @Prop() rows: TableTypes.NanoTable['rows'] = [];\n\n @Watch('rows')\n handleRowsChange() {\n storeSetData(this.host, this.rows);\n }\n\n /** The column config used to generate present the rows of data */\n @Prop({ mutable: true }) columns: TableTypes.NanoTable['columns'] = [];\n\n @Watch('columns')\n handleColsChange() {\n storeSetConfig(this.host, this.columns);\n if (this.isReady) this.columnInit();\n }\n\n /** Used for custom thead row rendering */\n @Prop() headRender: TableTypes.HeadFootRenderer = { pinned: 'top' };\n\n /** Used for custom row rendering */\n @Prop() rowRender: TableTypes.RowRenderer;\n\n /** Used for custom tfoot row rendering */\n @Prop() footRender: TableTypes.HeadFootRenderer = { pinned: 'bottom' };\n\n /** Whether to show a `<tfoot>` component */\n @Prop() showFooter = false;\n\n /** To improve performance, data is split into blocks\n * which are shown / hidden and rendered as they become visible.\n * Use this to control the number of hits within a block -\n * A block should fill a scrolling viewport.\n * The less perBlock the better for performance */\n @Prop() perBlock = 60;\n\n /** The number of total blocks currently rendered in the table. @readonly */\n @Prop()\n get blocksLength() {\n return this.blocks.length;\n }\n\n /** Term to search for in the data */\n @Prop() searchTerm: string;\n\n /** A custom filtering function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the filter on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customFilterFn?: (filters: TableTypes.Filter[]) => Promise<void>;\n\n /** A custom sorting function. Should return a promise.\n * On successful completion the column UI will be updated.\n * A good use-case would be performing the sort on a server / via fetch.\n * Then on success, updating the table's data via the `rows` property */\n @Prop() customSortFn?: (\n property: TableTypes.Prop,\n order: TableTypes.Order\n ) => Promise<void>;\n\n @Watch('searchTerm')\n handleSearchTermChange() {\n this.searchStart();\n }\n\n /** Fired whenever a block is activated by scrolling into view / becoming visible\n * This could be leveraged for infinite scrolling / to fetch more data.\n */\n @Event() nanoTblBlockRendered: EventEmitter<{\n block: number;\n totalBlocks: number;\n }>;\n\n /** Fired when the table has done it's first complete render */\n @Event() nanoTblReady: EventEmitter;\n\n /** Fired before a column is sorted.\n * `event.preventDefault()` to stop sorting. */\n @Event() nanoTblBeforeSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterSort: EventEmitter<{\n column: TableTypes.Prop;\n order: TableTypes.Order;\n }>;\n\n /** Fired before a column is filtered.\n * `event.preventDefault()` to stop filtering. */\n @Event() nanoTblBeforeFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired after a column is sorted */\n @Event() nanoTblAfterFilter: EventEmitter<{ filters: TableTypes.Filter[] }>;\n\n /** Fired before a general search.\n * `event.preventDefault()` to stop searching. */\n @Event() nanoTblBeforeSearch: EventEmitter<{ term: string }>;\n\n /** Fired after a general search */\n @Event() nanoTblAfterSearch: EventEmitter<{ term: string }>;\n\n /** Remove any column sorts currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetSorting() {\n const col = this.columns.find((c) => !!c.order);\n if (!col) return;\n return this.sortStart(null, col.prop);\n }\n\n /** Apply a sort on a column\n * @returns a promise which resolves when complete */\n @Method()\n async addSort(column: TableTypes.Prop, order: TableTypes.Order) {\n const col = this.columns.find((c) => c.prop === column);\n if (!col) throw 'Cannot find column with ' + column;\n return this.sortStart(order, col.prop);\n }\n\n /** Remove any column filters currently applied\n * @returns a promise which resolves when complete */\n @Method()\n async resetFilters() {\n this.filters = [];\n return this.filterStart();\n }\n\n /** Apply a filter on a column\n * @param filters - the filters to apply\n * @param additive - if true, will add the filters to any currently applied\n * @returns a promise which resolves when complete\n */\n @Method()\n async addFilters(filters: TableTypes.Filter[], additive: boolean = true) {\n if (!additive) this.filters = [];\n return this.filterStart(filters, additive);\n }\n\n // Private Logic\n\n // State\n\n @Element() host: HTMLNanoTableElement;\n private renderId = 'tbl-' + id++;\n private store: TableStores;\n private filters: TableTypes.Filter[] = [];\n private currentFilters = '';\n private currentSort = '';\n private tableEle: HTMLTableElement;\n\n // Blocks\n\n /** `tr` elements split into units - defined by `perPage`\n These are show / hidden for perf */\n @State() blocks: TableTypes.TBody[] = [];\n @State() activeBlocks: number[] = [0, 1, 2];\n @State() measureHeight = 0;\n\n private blockElements: HTMLTableSectionElement[];\n private blockIos: WeakMap<HTMLTableSectionElement, IntersectionObserver> =\n new WeakMap();\n private blockHeights: { blockIndex: number; height: number }[] = [];\n // uses the first 'tr' of an active block as our yard stick\n private set measureEle(el: HTMLTableSectionElement) {\n this.measureHeight = el.getBoundingClientRect().height;\n this.unitHeight =\n el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;\n }\n private unitHeight = 0;\n\n // Scroll / IO used for hiding / showing blocks\n\n private ignoreIO = true;\n private scrollParent: HTMLElement;\n private scrollSpeed: number;\n\n // Misc.\n\n private get isReady() {\n return this._isReady;\n }\n private set isReady(ready: boolean) {\n if (ready === this._isReady) return;\n this._isReady = ready;\n if (this.isReady) requestAnimationFrame(() => this.handleReady());\n }\n private _isReady = false;\n\n // Listeners\n\n @Listen('scroll', { target: 'window' })\n scrollListener() {\n // see explanation in `setupBlockIO`\n const speed = detectScrollSpeed();\n this.scrollSpeed = speed < 0 ? speed * -1 : speed;\n }\n\n // Logic\n\n private handleReady() {\n const hash = window.location.hash;\n if (hash.length > 1) {\n const idRow = document.querySelector(hash);\n if (idRow) {\n idRow.scrollIntoView();\n }\n }\n this.nanoTblReady.emit();\n }\n\n /**\n * Start a sort - can be cancelled by `preventDefault`\n * @param order - column order\n * @param column - column config object\n * @returns A promise\n */\n private sortStart = async (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n element?: HTMLElement\n ) => {\n if (this.currentSort === order + ':' + column) return;\n const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });\n if (sortEvent.defaultPrevented) return;\n perMark('sort');\n this.currentSort = order + ':' + column;\n\n // doesn't make sense to leave user in place for a sort\n this.scrollToTop(element);\n\n if (this.customSortFn) {\n try {\n await this.customSortFn(column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('custom sort failed', e);\n }\n return;\n }\n\n try {\n await storeSort(this.host, column, order);\n this.sortComplete(order, column);\n } catch (e) {\n console.warn('sort failed', e);\n this.currentSort = '';\n }\n };\n\n /**\n * Complete a sort. Reflects the order to ui.\n * @param order - column order\n * @param column - column config object\n */\n private sortComplete(order: TableTypes.Order, column: TableTypes.Prop) {\n this.columns = this.columns.map((c) => {\n if (c.prop === column) return { ...c, order };\n return { ...c, order: null };\n });\n this.nanoTblAfterSort.emit({ column: column, order });\n perMark('sort', true);\n }\n\n private async searchStart() {\n const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });\n if (sortEvent.defaultPrevented) return;\n perMark('search');\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n try {\n await storeSearch(this.host, this.searchTerm);\n this.nanoTblAfterSearch.emit({ term: this.searchTerm });\n perMark('search', true);\n } catch (e) {}\n }\n\n private async filterStart(\n filters?: TableTypes.Filter[],\n additive: boolean = true\n ) {\n if (filters) {\n if (additive) {\n this.filters = [\n ...this.filters.filter(\n (f) => !filters.find((ff) => ff.prop === f.prop)\n ),\n ...filters,\n ];\n } else {\n this.filters = filters;\n }\n }\n\n if (this.currentFilters === JSON.stringify(this.filters)) return;\n const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });\n if (sortEvent.defaultPrevented) return;\n perMark('filter');\n this.currentFilters = JSON.stringify(this.filters);\n\n // doesn't make sense to leave user in place for a search\n this.scrollToTop();\n\n if (this.customFilterFn) {\n try {\n await this.customFilterFn(this.filters);\n this.filterComplete();\n } catch (e) {\n console.warn('custom filter failed', e);\n this.currentFilters = '';\n }\n return;\n }\n\n try {\n await storeFilter(this.host, this.filters);\n this.filterComplete();\n perMark('search', true);\n } catch (e) {}\n }\n\n private filterComplete() {\n this.columns = this.columns.map((c) => {\n const cFilter = this.filters.find((f) => f.prop === c.prop);\n if (cFilter) c.filter = cFilter.filter;\n return c;\n });\n this.nanoTblAfterFilter.emit({ filters: this.filters });\n perMark('filter', true);\n }\n\n /** Scrolls to the top immediately - used whilst sorting / filtering */\n private scrollToTop(element?: HTMLElement) {\n const scrollBehaviour = this.scrollParent.style?.scrollBehavior;\n this.scrollParent.style.scrollBehavior = 'auto';\n this.host.scrollIntoView();\n if (element) element.scrollIntoView();\n if (scrollBehaviour)\n this.scrollParent.style.scrollBehavior = scrollBehaviour;\n }\n\n private setMeasureElement() {\n readTask(() => {\n this.measureEle = this.blockElements.find(\n (b) => !b.classList?.contains(`${CSSNAMESPACE}__inactive`)\n );\n });\n }\n\n /**\n * Sets the initial height on tbody elements that are not active\n * These elements have no natural height - on account of all their rows being hidden\n * So we just estimate for now\n */\n private setInitialBlockDimension() {\n if (!this.blockElements.length) return;\n perMark('blockDims');\n\n const finishResizing: Promise<void> = new Promise((resolve) => {\n readTask(() => {\n this.setMeasureElement();\n\n // find the first active block\n if (!this.measureEle && !this.unitHeight) resolve();\n\n this.blockElements.forEach((el, i) => {\n if (!el || !el.classList?.contains(`${CSSNAMESPACE}__inactive`)) {\n if (i === this.blockElements.length - 1) resolve();\n return;\n }\n if (i === this.blockElements.length - 1) resolve();\n\n // const heightGuess = this.getBlockHeight(this.blockElements.indexOf(el));\n\n // writeTask(() => {\n // el.style.height = heightGuess;\n // if (i === this.blockElements.length - 1) resolve();\n // });\n });\n });\n });\n\n // we're all finished.\n finishResizing.then(() => {\n perMark('blockDims', true);\n perMark('init', true);\n\n requestAnimationFrame(() => {\n this.isReady = true;\n });\n });\n }\n\n /** Apply initial columns settings */\n private async columnInit() {\n this.filters = this.columns\n .filter((c) => !!c.filter)\n .map((c) => {\n const { filter, prop } = c;\n return { filter, prop };\n });\n\n if (this.searchTerm) {\n await this.searchStart();\n }\n\n if (this.filters.length) {\n await this.filterStart();\n }\n // apply sort\n const col = this.columns.find((c) => !!c.order);\n if (!!col) {\n await this.sortStart(col.order, col.prop);\n }\n }\n\n /** Split up all incoming rows into 'blocks' split amongst tbody elements.\n * These can then be hidden / shown to improve performance.\n */\n private setBlocks() {\n perMark('setBlocks');\n this.activeBlocks = [0, 1, 2];\n this.ignoreIO = true;\n let i = 1;\n const l = this.store.data.state.rows.length;\n let rows: TableTypes.RowData[] = [];\n const blocks: TableTypes.TBody[] = [];\n this.blockHeights = [];\n\n // old skool loop for perf\n for (i; i <= l; i++) {\n rows.push(this.store.data.state.rows[i - 1]);\n\n if (i % this.perBlock === 0) {\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n rows = [];\n }\n }\n if (rows.length)\n blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });\n this.blocks = blocks;\n perMark('setBlocks', true);\n }\n\n /**\n * Returns a block render height.\n * If it's currently active - let auto do it's thing\n * If we've rendered it before - return that\n * If all else fails, let's guess it\n * @param blockIndex\n * @returns a height string (incl px)\n */\n private getBlockHeight(blockIndex: number): string {\n if (this.activeBlocks.includes(blockIndex)) return undefined;\n\n if (this.blockHeights.length) {\n const cachedBlockHeight = this.blockHeights.find(\n (bh) => bh.blockIndex === blockIndex\n );\n if (cachedBlockHeight) return cachedBlockHeight.height + 'px';\n }\n const blockLength = this.blocks[blockIndex].rows.length;\n if (blockLength === this.perBlock && this.measureHeight) {\n return this.measureHeight + 'px';\n }\n return this.unitHeight ? this.unitHeight * blockLength + 'px' : undefined;\n }\n\n /** cache the height for all active blocks for later renders */\n private setBlockHeight() {\n readTask(() => {\n this.activeBlocks.forEach((blockIndex) => {\n const el = this.blockElements[blockIndex];\n if (!el) return;\n\n const height = el.getBoundingClientRect().height;\n // cache height to our block heights\n // array for subsequent renders\n const fBhI = this.blockHeights.findIndex(\n (bh) => bh.blockIndex === blockIndex\n );\n if (fBhI > 0) {\n this.blockHeights[fBhI] = { height, blockIndex };\n } else this.blockHeights.push({ height, blockIndex });\n });\n });\n }\n\n /**\n * Attaches an intersection observer to each rendered tbody elements\n * shows / hides intersecting blocks' and sets heights for when their hidden\n * @param el - the tbody element to observe\n * @param blockIndex - the rendering tbody we're attaching the IO to\n */\n private setupBlockIO = (el: HTMLTableSectionElement, blockIndex: number) => {\n if (!el || this.blockIos.has(el)) return;\n\n const blockIo = new IntersectionObserver(\n ([ioEntry]) => {\n if (this.ignoreIO) return;\n\n if (ioEntry.isIntersecting) {\n // This is a bit gross\n // The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast\n // i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.\n // To fix that, we check - for realsies - if the block IS visible.\n // BUT that test is not as sensitive to a block being visible as the IO,\n // so doesn't always fire if scrolling slowing\n // *sigh*\n readTask(() => {\n if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {\n this.activeBlocks = [\n blockIndex,\n blockIndex + 1,\n Math.max(0, blockIndex - 1),\n ];\n this.nanoTblBlockRendered.emit({\n block: blockIndex,\n totalBlocks: this.blockElements.length,\n });\n requestAnimationFrame(() => this.setBlockHeight());\n }\n });\n }\n },\n { threshold: [0] }\n );\n\n blockIo.observe(el);\n this.blockIos.set(el, blockIo);\n };\n\n /** Process slotted content */\n private processSlots() {\n // see if we have slot content\n if (!this.caption && !this.host.querySelector('[slot=\"caption\"]')) {\n console.error(\n 'For accessibility you must set a `title` prop or use the `caption` slot'\n );\n }\n }\n\n private handleColumnPinned = (positions: {\n [key in TableTypes.Position]: boolean;\n }) => {\n Object.entries(positions).forEach(([key, applied]) => {\n this.tableEle.classList.toggle(\n `${CSSNAMESPACE}__pinned--${key}`,\n applied\n );\n });\n };\n\n // Component lifecycle\n\n async componentWillLoad() {\n perMark('init');\n this.store = await generateStore(this.host, this.rows, this.columns);\n await this.columnInit();\n this.processSlots();\n this.setBlocks();\n this.store.data.onChange('rows', () => this.setBlocks());\n }\n\n connectedCallback(): void {\n readTask(() => (this.scrollParent = findScrollParent(this.host)));\n }\n\n componentDidLoad(): void {\n this.setInitialBlockDimension();\n }\n\n componentShouldUpdate(_newVal, _oldVal, stateName: keyof Table) {\n // stop double rendering - we use the store for rendering internally\n // the public facing props are kept in-sync with the store\n // but we don't want it to cause renders\n if (['rows', 'columns'].includes(stateName)) return false;\n }\n\n componentWillRender(): void | Promise<void> {\n perMark('render');\n }\n\n componentDidRender(): void {\n requestAnimationFrame(() => (this.ignoreIO = false));\n this.setMeasureElement();\n perMark('render', true);\n }\n\n render() {\n this.blockElements = [];\n\n return (\n <Host>\n <div\n aria-labelledby={'table-caption-' + this.renderId}\n tabindex={this.type === 'grid' ? '0' : undefined}\n >\n <table\n role={this.type === 'grid' ? 'grid' : undefined}\n aria-readonly={this.type === 'table' ? 'true' : undefined}\n aria-rowcount={this.store.data.state.rows.length}\n aria-colcount={this.store.config.state.columns.length}\n class={`${CSSNAMESPACE}`}\n ref={(tbl) => (this.tableEle = tbl)}\n >\n <caption\n class={`${CSSNAMESPACE}__caption`}\n id={'table-caption-' + this.renderId}\n >\n <slot name=\"caption\">{this.caption}</slot>\n </caption>\n\n {/* Header */}\n <thead>\n <TableHeadFootRow\n rowRenderer={this.headRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.headRender}\n onColumnOrderClick={this.sortStart}\n onColumnPinned={this.handleColumnPinned}\n />,\n ])}\n </TableHeadFootRow>\n </thead>\n\n {/* Body */}\n {this.blocks.map((block, blockIndex) => (\n <tbody\n key={block.__uuid}\n id={`tbody-${this.renderId}-${blockIndex}`}\n ref={(tb) => {\n this.blockElements.push(tb);\n this.setupBlockIO(tb, blockIndex);\n }}\n class={{\n [`${CSSNAMESPACE}__inactive`]:\n !this.activeBlocks.includes(blockIndex),\n [`${CSSNAMESPACE}__active`]:\n this.activeBlocks.includes(blockIndex),\n }}\n >\n {this.activeBlocks.includes(blockIndex) ? (\n block.rows.map((row, i) => {\n const rowIndex =\n blockIndex > 0 ? blockIndex * this.perBlock + i : i;\n return (\n <TableRow rowRenderer={this.rowRender} row={row}>\n {this.store.config.state.columns.map(\n (_colModel, colIndex) => (\n <TableCell\n rowIndex={rowIndex}\n colIndex={colIndex}\n />\n )\n )}\n </TableRow>\n );\n })\n ) : (\n <td\n colSpan={this.store.config.state.columns.length}\n style={{\n height: this.getBlockHeight(blockIndex),\n }}\n />\n )}\n </tbody>\n ))}\n\n {/* Footer */}\n {(this.showFooter || !!this.footRender) && (\n <tfoot>\n <TableHeadFootRow\n rowRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n >\n {this.store.config.state.columns.map((colModel) => [\n <TableColHead\n column={colModel}\n headRenderer={this.footRender}\n onColumnPinned={this.handleColumnPinned}\n />,\n ])}\n </TableHeadFootRow>\n </tfoot>\n )}\n </table>\n </div>\n </Host>\n );\n }\n}\n"]}
|
@@ -1,5 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
import{r as i,c as t,d as e,w as s,h as n,i as a,a as o,g as r}from"./p-1fe12320.js";import{a as l}from"./p-a0b93616.js";import{c as h}from"./p-845ae77e.js";import{C as c}from"./p-e3860f00.js";import{d}from"./p-9746b0a5.js";import{d as b}from"./p-4c6ef60b.js";import"./p-69a3e911.js";async function p(i,{body:t,...e}={}){const s={Accept:"application/json, text/plain, */*","Access-Control-Allow-Origin":"*","Content-Type":"application/json",Cache:"no-cache"};const n={method:t?"POST":"GET",credentials:"include",keepalive:true,mode:"cors",...e,headers:{...s,...e.headers}};if(t){n.body=JSON.stringify(t)}let a=setTimeout((()=>{}),0);if(window.AbortController){const i=new AbortController;const{timeout:t=500}=e;a=setTimeout((()=>i.abort()),t);n.signal=i.signal}const o=await fetch(i,n);clearTimeout(a);if(o.ok){return await o.json()}else{const i=await o.text();return new Error(i)}}const u=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--padding:12px;--padding-top:var(--padding);--padding-end:var(--padding);--padding-bottom:var(--padding);--padding-start:var(--padding);--bar-background:#005c75;--bar-text-color:white;--bar-color-shade:rgb(19, 89, 111);--bar-color-tint:rgb(19, 89, 111);--bar-color-focus:#90c6e7;--menu-background:#001a21;--menu-text-color:white;--menu-dropdown-bg:#196c82;--menu-dropdown-color:white;--menu-user-bg:#016d86;--menu-user-bg-mobile:#001a21;display:block;position:relative;line-height:1.5;height:100%}:host *{-webkit-box-sizing:inherit;box-sizing:inherit}.global-nav{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;font-size:0.88em;z-index:var(--nano-layer-index-menubar, 10)}.global-nav button{background:none;color:inherit;border:none;padding:0}.global-nav .icon-btn{position:relative;background:none;color:inherit;border:none;-ms-flex-item-align:normal;-ms-grid-row-align:normal;align-self:normal;padding:9px 7px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.global-nav .icon-btn nano-icon{width:18px;height:18px}.global-nav ::slotted(nano-nav-item[slot=icon]){--padding-top:9px;--padding-bottom:9px;--padding-start:7px;--padding-end:7px;--display:flex;font-size:18px}.global-nav a{color:inherit;text-decoration:none;white-space:nowrap}.global-nav .nav-links_title{margin:8px 0 3px}.global-nav .nav-links ul{margin:0;padding:0}.global-nav .nav-links li{list-style:none}.global-nav .login-btn{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:0.94em}.global-nav .menu-btn{padding:9px var(--padding) 9px var(--padding)}.gn-menu{position:fixed;inset-block-start:0;inset-inline-start:0;z-index:-1;display:none;-webkit-transition:z-index 0.01s ease 0.2s;transition:z-index 0.01s ease 0.2s;height:100vh;width:100vw;overflow-y:auto}:host(.threshold-4) .gn-menu{position:absolute;width:calc(100vw - 20px)}.gn-menu.menu-full-screen{width:100vw !important}.gn-menu_wrap{max-width:92vw;width:335px;background:var(--menu-background);color:var(--menu-text-color);padding:var(--padding) 0;-webkit-box-shadow:0 0 36px 0 rgba(0, 0, 0, 0.8);box-shadow:0 0 36px 0 rgba(0, 0, 0, 0.8);position:relative;pointer-events:all;-webkit-margin-after:36px;margin-block-end:36px;opacity:0;outline:none;-webkit-transition:opacity 0.2s ease, -webkit-transform 0.2s ease;transition:opacity 0.2s ease, -webkit-transform 0.2s ease;transition:transform 0.2s ease, opacity 0.2s ease;transition:transform 0.2s ease, opacity 0.2s ease, -webkit-transform 0.2s ease}.gn-menu_wrap.has-promotion{padding:var(--padding) 0 0}.gn-menu.open{z-index:var(--nano-layer-index-dropdown, 300);-webkit-transition:z-index 0.01s ease;transition:z-index 0.01s ease}.gn-menu.open .gn-menu_wrap{opacity:1;-webkit-transform:translate3d(0, 0, 0) !important;transform:translate3d(0, 0, 0) !important;-webkit-transition:opacity 0.2s ease 0.01s, -webkit-transform 0.2s ease 0.01s;transition:opacity 0.2s ease 0.01s, -webkit-transform 0.2s ease 0.01s;transition:transform 0.2s ease 0.01s, opacity 0.2s ease 0.01s;transition:transform 0.2s ease 0.01s, opacity 0.2s ease 0.01s, -webkit-transform 0.2s ease 0.01s}.gn-menu_actions{-webkit-padding-end:calc(var(--padding) / 2);padding-inline-end:calc(var(--padding) / 2);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.gn-menu_actions-counter{background:#d0021b;color:#fff;position:absolute;inset-block-end:4px;inset-inline:auto 0;font-size:9px;height:14px;line-height:14px;width:auto;min-width:14px;border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;text-indent:0}.gn-menu .content-wrap{position:relative;overflow:hidden;-webkit-transition:0.2s ease min-height;transition:0.2s ease min-height;min-height:190px}.gn-menu .content--sub{padding:var(--padding) 0 var(--padding) 7px}.gn-menu .menu-btn{-webkit-margin-end:auto;margin-inline-end:auto}.gn-menu .nav-links{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.gn-menu .nav-links ::slotted(nano-nav-item),.gn-menu .nav-links nano-nav-item{--icon-size:14px;--display:inline-block;--secondary-bg-color:#001a21;--padding-top:10px;--padding-bottom:10px;--padding-end:calc(var(--padding) * 2);--padding-start:calc(var(--padding) + 3px);--color:white;--color-hover:#90c6e7;--bg-color-hover:transparent;--bg-color-focus:#002530;--focus-outline:none;font-size:0.99em;width:100%}.gn-menu .nav-links .user-nav{--bg-color:#193037;--padding-top:9px;--padding-bottom:9px;font-weight:bold;margin:5px 0 0}.gn-menu .nav-links .user-nav ::slotted(nano-nav-item),.gn-menu .nav-links .user-nav nano-nav-item{font-weight:500;--bg-color:transparent}.gn-menu .nav-links_title{margin:0 var(--padding) 4px;-webkit-border-after:1px solid #33484d;border-block-end:1px solid #33484d;-webkit-padding-after:8px;padding-block-end:8px;font-size:0.86em;text-transform:uppercase;color:#90c6e7;letter-spacing:1px;font-weight:700}.gn-menu .nav-links-wrap{margin:18px 0}.gn-menu .nav-links-wrap:last-child{-webkit-margin-after:0;margin-block-end:0}.gn-menu .nav-links .back-btn{-webkit-border-before:1px solid #33484d;border-block-start:1px solid #33484d;-webkit-border-after:1px solid #33484d;border-block-end:1px solid #33484d;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 11px 10px 0;width:100%;font-size:12px;text-transform:uppercase;color:#90c6e7;letter-spacing:1px;font-weight:700}.gn-menu .nav-links .back-btn nano-icon{-webkit-margin-end:10px;margin-inline-end:10px;font-size:12px;color:white}.gn-menu .nav-links--sub{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.gn-menu .nav-links--sub ::slotted(nano-nav-item),.gn-menu .nav-links--sub nano-nav-item{--border-bottom:none;--padding-end:var(--padding);--padding-start:var(--padding);--padding-top:8px;--padding-bottom:8px;margin:0;width:50%;line-height:1.8}.gn-menu .nav-links .content{padding:8px var(--padding)}.gn-menu .login-btn{padding-inline:7px var(--padding);padding-block:9px}.gn-menu .login-btn nano-icon{-webkit-margin-start:10px;margin-inline-start:10px}.gn-menu .logout-btn{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.gn-menu .logout-btn a{padding:0 5px}.sticker-trigger{background:var(--bar-background);width:100%;z-index:calc(var(--nano-layer-index-menubar, 10) + 1)}.bars{color:var(--bar-text-color);z-index:var(--nano-layer-index-menubar, 10);position:relative;max-width:100%;min-width:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:0.2s ease box-shadow;transition:0.2s ease box-shadow}[stuck] .bars{-webkit-box-shadow:0 1px 25px 0 rgba(0, 0, 0, 0.15);box-shadow:0 1px 25px 0 rgba(0, 0, 0, 0.15)}.bars::before{content:"";width:100%;height:100%;z-index:-1;background:var(--bar-background);position:absolute}.bars .search-widget{-webkit-margin-start:11px;margin-inline-start:11px;-webkit-margin-end:auto;margin-inline-end:auto;position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;max-width:45vw;min-width:269px;max-height:36px}.bars .search-inputs{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0}.bars .search-inputs input[type=submit]{display:none}.bars .search-autocomplete{position:absolute;inset-block-start:100%;width:100%;inset-inline-start:0;background:white;border:2px solid var(--bar-color-tint);border-radius:0 0 5px 5px;color:#4a4a4a;font-size:0.85em;-webkit-padding-before:calc(var(--padding) / 2);padding-block-start:calc(var(--padding) / 2);-webkit-padding-end:0;padding-inline-end:0;-webkit-padding-after:1px;padding-block-end:1px;-webkit-padding-start:0;padding-inline-start:0;z-index:1}.bars .search-autocomplete-hit{-webkit-padding-before:calc(var(--padding) / 4);padding-block-start:calc(var(--padding) / 4);-webkit-padding-after:calc(var(--padding) / 4);padding-block-end:calc(var(--padding) / 4);-webkit-padding-start:var(--padding);padding-inline-start:var(--padding);-webkit-padding-end:var(--padding);padding-inline-end:var(--padding);width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;text-align:start;line-height:1.5;cursor:pointer}.bars .search-autocomplete-hit-scope{font-size:0.76em;color:#a7b0b3;font-weight:600}.bars .search-autocomplete-hit:hover,.bars .search-autocomplete-hit:focus{background-color:#e4e6e8}.bars .search-autocomplete-hit .search__highlight,.bars .search-autocomplete-hit em{font-weight:bold;font-style:normal}.bars .search-autocomplete-hit--no-result:hover,.bars .search-autocomplete-hit--no-result:focus{background:none !important}.bars .search-autocomplete-foot{margin:7px 0 0}.bars .search-autocomplete-submit{background:none;border:none;-ms-flex-item-align:normal;-ms-grid-row-align:normal;align-self:normal;padding:9px var(--padding);cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#007495;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;width:100%;text-decoration:underline;-webkit-border-before:1px solid #e8eaea;border-block-start:1px solid #e8eaea}.bars .search-autocomplete-submit:hover,.bars .search-autocomplete-submit:focus{background-color:#e4e6e8}.bars .search-input{--input-border-style:solid 1px rgb(85, 140, 157);--input-border-style--focus:solid 1px var(--bar-color-focus, #90c6e7);--input-border-width:1px;font-size:0.9em}.bars nano-select.search-input{--input-bg-color:var(--bar-color-tint, rgb(88, 140, 161));--input-text-color:inherit;--input-border-radius:5px 0 0 5px;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:relative;inset-inline-start:1px}:host([dir=rtl]) .bars nano-select.search-input{--input-border-radius:0 5px 5px 0}:host(:not(.ready)) .bars nano-select.search-input{overflow:hidden;max-height:1em}.bars nano-select.search-input .down-arrow{font-size:0.65em}.bars nano-input.search-input{--input-text-color:inherit;--input-bg-color:var(--bar-color-shade, rgb(40, 110, 133));--clear-btn-color:#4a4a4a;--input-border-radius:0 5px 5px 0;--placeholder-color:white;width:206px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1;flex:1}:host([dir=rtl]) .bars nano-input.search-input{--input-border-radius:5px 0 0 5px}:host(:not(.ready)) .bars nano-input.search-input{overflow:hidden;max-height:1em}.bars nano-input.search-input.has-value{--input-bg-color:#fff;--input-text-color:#4a4a4a}.bars nano-input.search-input.has-value .search-icon{color:#4a4a4a}.bars nano-input.search-input .search-icon{background:none;color:white;padding:0 8px;display:none}.bars nano-input.search-input .search-icon--show{display:-webkit-box;display:-ms-flexbox;display:flex}.bars nano-input.search-input .search-icon--loader{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}@-webkit-keyframes spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.bars nano-input.search-input .search-icon nano-icon{height:1.4em}.user-profile{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:2em;background-color:var(--menu-user-bg-mobile)}.user-profile .left{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.user-profile .avatar-container{position:relative}.user-profile .avatar-container img.avatar{border-radius:50px}.user-profile .avatar-container img.logo-small{position:absolute;height:30px;width:30px;inset-block-end:0;inset-inline-end:0;background-color:#27586e;border-radius:10px;padding:5px}.user-profile .user-details{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 1.25em;color:white}.user-profile .user-details .name{font-size:1.25em}.user-profile .user-details .bio{margin:0.5em 0}.user-profile .user-details .kudos span{background-color:#81c7eb;color:#415958;padding:0.25em;border-radius:0.5em;font-weight:bold}.user-profile .chevron-right{font-size:1.5em;color:white}.main-bar{width:100%;padding-inline:0 var(--padding);padding-block:var(--padding);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;overflow-x:hidden}.main-bar:focus{outline:none}:host(.ready) .main-bar{overflow-x:visible}.main-bar>*,.main-bar ::slotted(*){-webkit-transition:opacity 0.2s ease;transition:opacity 0.2s ease}:host(:not(.ready)) .main-bar>*,:host(:not(.ready)) .main-bar ::slotted(*){opacity:0 !important}:host(.ready) .main-bar>*,:host(.ready) .main-bar ::slotted(*){opacity:1}:host(.resizing) .main-bar>*,:host(.resizing) .main-bar ::slotted(*){opacity:0 !important}.main-bar>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.main-bar>* ::slotted(nano-nav-item[slot=icon]){-webkit-margin-start:11px;margin-inline-start:11px}.main-bar>* ::slotted(nano-nav-item),.main-bar>* nano-nav-item{--color-hover:#e4e6e8;--secondary-bg-color:var(--menu-dropdown-bg);--secondary-color:var(--menu-dropdown-color);--bg-color-open:var(--bar-background);text-decoration:none !important}.main-bar .icon-btn{-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;-webkit-margin-start:6px;margin-inline-start:6px}:host(.threshold-2) .main-bar .icon-btn{-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;-webkit-margin-start:11px;margin-inline-start:11px}.main-bar .menu-btn.icon-btn{margin:0 !important;-webkit-border-end:1.5px solid var(--bar-color-shade);border-inline-end:1.5px solid var(--bar-color-shade)}.main-bar .user-links{position:relative}.main-bar .user-links .icon-btn{-webkit-padding-end:0;padding-inline-end:0;font-size:0.93em;font-weight:500}.main-bar .user-links .icon-btn nano-icon{-webkit-margin-start:5px;margin-inline-start:5px;width:16px;height:16px;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:color 0.2s ease, -webkit-transform 0.2s ease;transition:color 0.2s ease, -webkit-transform 0.2s ease;transition:transform 0.2s ease, color 0.2s ease;transition:transform 0.2s ease, color 0.2s ease, -webkit-transform 0.2s ease}.main-bar .user-links .icon-btn.open nano-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg);color:#007495}.main-bar .user-links-panel{display:none;position:absolute;border-radius:4px 0 4px 4px;-webkit-box-shadow:0 1px 5px 0 rgba(0, 0, 0, 0.4);box-shadow:0 1px 5px 0 rgba(0, 0, 0, 0.4);background-color:#568c9d;opacity:0;-webkit-transform:translate3d(0, 30px, 0);transform:translate3d(0, 30px, 0);-webkit-transition:opacity 0.2s ease, -webkit-transform 0.2s ease;transition:opacity 0.2s ease, -webkit-transform 0.2s ease;transition:transform 0.2s ease, opacity 0.2s ease;transition:transform 0.2s ease, opacity 0.2s ease, -webkit-transform 0.2s ease;inset-inline-end:0;font-size:0.85em;min-width:318px;z-index:2}.main-bar .user-links-panel:focus{outline:none}.main-bar .user-links-panel.show{opacity:1;-webkit-transform:translate3d(0, calc(var(--padding) + 1px), 0);transform:translate3d(0, calc(var(--padding) + 1px), 0)}.main-bar .user-links-panel-content{padding:0 18px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;color:white}.main-bar .user-links-panel-content a{padding:11px 0;-webkit-border-after:#669dac 1px solid;border-block-end:#669dac 1px solid}.main-bar .user-links-panel-content a:hover,.main-bar .user-links-panel-content a:focus{color:#455556}.main-bar .user-links-panel-content a:last-child{-webkit-border-after:none;border-block-end:none}.main-bar .user-links-panel-foot{background-color:#aac5cd;border-radius:0 0 4px 4px;padding:var(--padding);color:#455556;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-weight:500;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.main-bar .user-links-panel-foot a:hover{text-decoration:underline}.main-bar .user-links-panel .user-profile{background-color:var(--menu-user-bg)}.main-bar .logo{height:34px;width:auto;min-width:196px}:host(:not(.threshold-1)) .main-bar .logo{height:30px}.main-bar .logo-link{-webkit-margin-end:auto;margin-inline-end:auto;-webkit-margin-start:0;margin-inline-start:0;padding-inline:11px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:none}.main-bar .nav-links{font-size:0.75rem;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.main-bar .nav-links ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.main-bar .nav-links ::slotted(nano-nav-item),.main-bar .nav-links nano-nav-item{--padding-top:7px;--padding-bottom:7px;--padding-end:2px;--padding-start:2px;--margin:0 8px}.main-bar .nav-links--main{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;letter-spacing:0.33px;font-weight:600;font-stretch:expanded;font-size:0.8125rem}.main-bar .nav-links--main ::slotted(nano-nav-item){--color:#fff;--padding-end:3px;--padding-start:0}.main-bar .nav-links--sub{--color:var(--color, #e2e2e2);opacity:0.9 !important;-webkit-margin-start:6px;margin-inline-start:6px;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.main-bar .login-btn{display:inline-block;border-radius:4px;background-color:#17bb75;color:#fff;padding:3px 10px;position:relative;inset-inline-start:auto;inset-block-end:auto;margin-inline:11px 0}.main-bar .measure-ele{min-width:1px;display:block;margin:0;padding:0}.search-bar{height:0;overflow:hidden;-webkit-transition:0.2s ease height;transition:0.2s ease height;padding:0 var(--padding);outline:none;max-width:45em;-webkit-margin-start:auto;margin-inline-start:auto}.search-bar .search-widget{margin:0;overflow:inherit;max-width:none;max-height:none;padding:0 0 var(--padding)}.search-bar .search-inputs{padding:0 0;margin:0 0}.search-bar .search-autocomplete{inset-block-start:calc(100% - (var(--padding) + 1px))}.site-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition:min-height 0.2s ease;transition:min-height 0.2s ease;min-height:calc(100% - 61px);position:relative;z-index:auto;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.mask{opacity:0;background:rgba(0, 0, 0, 0.3);position:fixed;inset-inline:0;inset-block-start:0;height:100vh;z-index:-1;-webkit-transition:opacity 0.2s ease, visibility 0.01s ease 0.2s, z-index 0.01s ease 0.2s, -webkit-transform 0.2s ease;transition:opacity 0.2s ease, visibility 0.01s ease 0.2s, z-index 0.01s ease 0.2s, -webkit-transform 0.2s ease;transition:transform 0.2s ease, opacity 0.2s ease, visibility 0.01s ease 0.2s, z-index 0.01s ease 0.2s;transition:transform 0.2s ease, opacity 0.2s ease, visibility 0.01s ease 0.2s, z-index 0.01s ease 0.2s, -webkit-transform 0.2s ease;visibility:hidden}.mask.open{opacity:1;-webkit-transition:z-index 0.01s ease, visibility 0.01s ease, opacity 0.2s ease 0.01s, -webkit-transform 0.2s ease 0.01s;transition:z-index 0.01s ease, visibility 0.01s ease, opacity 0.2s ease 0.01s, -webkit-transform 0.2s ease 0.01s;transition:z-index 0.01s ease, visibility 0.01s ease, transform 0.2s ease 0.01s, opacity 0.2s ease 0.01s;transition:z-index 0.01s ease, visibility 0.01s ease, transform 0.2s ease 0.01s, opacity 0.2s ease 0.01s, -webkit-transform 0.2s ease 0.01s;z-index:3;visibility:visible}';const m={search:0,about:1,main:2,login:3,icon:4};const g=class{constructor(e){i(this,e);this.nanoIsReady=t(this,"nanoIsReady",7);this.nanoSearchResult=t(this,"nanoSearchResult",7);this.nanoSearchError=t(this,"nanoSearchError",7);this.nanoSearchReset=t(this,"nanoSearchReset",7);this.currSize=0;this.thresholdsGoingUp=false;this.THRESHOLDLIMIT=Object.keys(m).length;this.autocompleteEles=[];this.currAIndex=-1;this.isLoggedIn=false;this.myAccData=null;this.aboutNavItms=[];this.siteNavItms=[];this.loggedInNavItms=[];this.setResizingState=(i=false)=>{if(typeof this.debounceSetResizingState==="undefined"){this.debounceSetResizingState=d(this.setResizingState,600)}if(i){this.isResizing=true;this.debounceSetResizingState()}else{this.isResizing=false;this.thresholdsGoingUp=false}};this.onMenuBtnKeyDown=i=>{switch(i.key){case"Enter":case" ":this.modalOpen?this.menuClose(i,true):this.menuOpen();break}};this.onMenuBtnClick=i=>{this.menuClose(i,true)};this.menuOpen=i=>{if(i)i.preventDefault();this.menuDiv.style.display="block";this.modalOpen=true;this.modalIsOpen=true;this.menuWrapDiv.addEventListener("focusout",this.menuClose);this.menuWrapDiv.focus({preventScroll:true});if(this.threshold<2||this.menuWrapDiv.scrollHeight>window.innerHeight){document.body.style.overflow="hidden";this.menuFullScreen=true}else document.body.style.overflowX="hidden"};this.onMenuHidden=()=>{this.menuDiv.removeEventListener("transitionend",this.onMenuHidden);this.menuWrapDiv.removeEventListener("focusout",this.menuClose);document.body.style.overflow="";this.menuDiv.style.display="none";this.modalIsOpen=false;this.menuFullScreen=false;setTimeout((()=>{if(document.activeElement===document.body&&this.menuBtn)this.mainBarDiv.focus({preventScroll:true})}),50)};this.menuClose=(i,t=false)=>{if(!t){const t=i;if(t&&t.relatedTarget&&h("#global-nav-menu",t.relatedTarget))return;if(t&&t.relatedTarget&&t.relatedTarget.closest("#global-nav-menu"))return;if(t&&t.relatedTarget&&t.relatedTarget.closest('[slot="promotion"]'))return;if(this.secondaryMenuOpen)return}this.modalOpen=false;this.menuDiv.addEventListener("transitionend",this.onMenuHidden)};this.subMenuClose=i=>{i.preventDefault();i.target.closest("nano-nav-item").open=false};this.onUserBtnClick=i=>{i.preventDefault();this.userMenuOpen=!this.userMenuOpen};this.onUserBtnKeyDown=i=>{switch(i.key){case"Enter":case" ":this.userMenuOpen=!this.userMenuOpen;break}};this.onUserMenuBlur=i=>{if(!i.relatedTarget){this.userMenuOpen=false;return}if(!!i.relatedTarget.closest(".user-links-panel"))return false;this.userMenuOpen=false};this.onSearchBtnClick=i=>{i.preventDefault();if(!this.searchBarShown)this.searchbarShow();else this.searchbarHide()};this.onSearchBtnKeyDown=i=>{switch(i.key){case"Enter":case" ":this.searchBarShown?this.searchbarHide():this.searchbarShow();break}};this.onSearchBarShown=()=>{this.searchBarEl.removeEventListener("transitionend",this.onSearchBarShown);if(this.searchInput)this.searchInput.setFocus();this.searchBarEl.style.overflow="visible"};this.searchbarHide=i=>{if(i&&i.relatedTarget&&i.relatedTarget.closest("#global-nav-search-bar"))return;this.showAutocomplete=false;if(this.searchValInternal.length&&i)return;this.searchBarEl.addEventListener("transitionend",this.onSearchBarHidden);this.searchBarEl.style.overflow="hidden";this.searchBarEl.style.height="0px"};this.onSearchBarHidden=()=>{this.searchBarEl.removeEventListener("transitionend",this.onSearchBarHidden);this.searchBarEl.style.display="none";this.searchBarShown=false};this.onSearchInput=i=>{this.searchValInternal=this.searchInput.value;if(!this.isSearchValSet()){this.searchLoading=false;return}if(i.detail.type==="input"){this.showAutocomplete=false;this.searchLoading=true}};this.onSearchChange=async i=>{this.searchValInternal=this.searchValue=i?i.detail.value:this.searchValInternal;this.showAutocomplete=false;this.autocompleteResults=null;if(!this.isSearchValSet()){if(!this.searchValInternal.length){this.nanoSearchReset.emit()}this.searchLoading=false;return}if(!this.currentIndex)this.currentSelectedIndex();try{this.autocompleteResults=this.processSearchResults(await this.currentIndex.alogliaIndex.search(this.searchValInternal,{attributesToSnippet:["body:5","title:8"],hitsPerPage:5,filters:"created > "+Math.floor((Date.now()-631152e5)/1e3)}))}catch(i){console.error(i)}this.scopeSearch=null;this.scopeSearch=await this.onSearchSubmit(null,false);this.searchLoading=false;this.showAutocompleteResults()};this.onSearchSubmit=async(i,t=true)=>{if(i)i.preventDefault();if(!this.isSearchValSet())return;this.searchLoading=true;this.algoliaSearchResults=null;if(!this.currentIndex)this.currentSelectedIndex();const e=this.internalSearchIndeces.map((i=>({indexName:i.index,query:this.searchValInternal,facets:i.filters,hitsPerPage:10,filters:"created > "+Math.floor((Date.now()-631152e5)/1e3)})));try{this.algoliaSearchResults=this.processSearchResults(await this.algoliaClient.multipleQueries(e))}catch(i){this.nanoSearchError.emit(i)}this.searchLoading=false;if(!this.algoliaSearchResults)return;this.algoliaSearchResults.results.map(((i,t)=>{i.indexName=this.internalSearchIndeces[t].name;i.selected=this.currentIndex.name===this.internalSearchIndeces[t].name;i.domain=this.currentIndex.domain||null;i.domains=this.myAccData.domains||null;i.allGroup=!!this.internalSearchIndeces[t].allGroup;i.filters=this.internalSearchIndeces[t].filters}));if(t){this.nanoSearchResult.emit({results:this.algoliaSearchResults.results,client:{apiKey:this.searchApiKey,appId:this.searchAppId}});this.showAutocomplete=false}return this.algoliaSearchResults};this.onSearchIndexChange=async i=>{const t=i;let e=i;if(!this.currentIndex)this.currentSelectedIndex();if(t.detail&&t.detail.value.length)e=t.detail.value;if(!e||!e.length)return;if(this.currentIndex.index===e)return;const s=this.internalSearchIndeces.find((i=>i.index===e));if(!s||!s.alogliaIndex)return;this.searchIndex=s.index;if(this.isSearchValSet())await this.onSearchChange()};this.switchIndexSubmit=async i=>{if(this.isSearchValSet()){await this.onSearchIndexChange(i);this.onSearchSubmit()}else this.onSearchIndexChange(i)};this.onAutocompleteBlur=i=>{if(!this.showAutocomplete||!this.autocompleteResults)return;if(i&&i.target&&i.target.closest(".search-widget"))return;this.showAutocomplete=false};this.showAutocompleteResults=()=>{if(!this.autocompleteResults||!this.autocompleteResults.hits)return;this.showAutocomplete=true};this.onAutocompleteInteract=i=>{if(!this.showAutocomplete||!this.autocompleteResults)return;let t=this.currAIndex;switch(i.key){case"Tab":setTimeout((()=>{if(!this.el.shadowRoot.activeElement||!this.el.shadowRoot.activeElement.closest(".search-widget")){this.showAutocomplete=false;return}else{const i=this.autocompleteEles.find(((i,t)=>{if(i===this.el.shadowRoot.activeElement){this.currAIndex=t;return true}}));if(i)this.setActiveElement(i);else this.currAIndex=-1}}));break;case"ArrowDown":case"ArrowUp":if(i.key==="ArrowDown")t++;else if(i.key==="ArrowUp")t--;const e=this.autocompleteEles[t];if(e||t<0||t>this.autocompleteEles.length-1)i.preventDefault();if(e){this.setActiveElement(e);this.currAIndex=t}else if(t<0){this.searchInput.setFocus();this.currAIndex=-1}break;case"Enter":case" ":if(this.autocompleteEles[this.currAIndex]){this.autocompleteEles[this.currAIndex].click()}break}};this.userProfileUrl="";this.hasLoggedinSlot=false;this.hasSiteSlot=false;this.hasPromotionSlot=false;this.aboutSlotLen=0;this.iconSlotLen=0;this.mainSlotLen=0;this.overflowSlotLen=0;this.searchSlotLen=0;this.internalSearchIndeces=[];this.thresholdReady=false;this.remoteDataReady=false;this.ready=false;this.isResizing=false;this.intersectRatio=undefined;this.threshold=this.THRESHOLDLIMIT;this.modalOpen=false;this.modalIsOpen=false;this.searchBarShown=false;this.scrollingUp=true;this.searchLoading=false;this.showAutocomplete=false;this.secondaryMenuOpen=false;this.userMenuOpen=false;this.menuFullScreen=false;this.searchValInternal="";this.env="prod";this.ssoDataUrl=undefined;this.ssoRedirect=encodeURIComponent(window.location.href);this.getMyAccountData=true;this.activeMyAccountSections=null;this.showSearch=true;this.showLogo=true;this.logoUrl=location.protocol+"//"+location.host;this.searchIndeces=[];this.myAccountUser=null;this.searchAppId=undefined;this.searchApiKey=undefined;this.searchValue="";this.searchIndex="all_prod_en";this.cartCount=0;this.msgCount=0;this.cartUrl=null;this.msgUrl=null}async submitSearch(){this.onSearchSubmit();this.showAutocomplete=false;return}async getMyAccData(){switch(this.env){case"prod":this.userProfileUrl="https://community.nanoporetech.com/profile/me";case"local":case"dev":case"test":default:this.userProfileUrl="https://community-test.nanoporetech.com/profile/me";break}if(!this.getMyAccountData||this.myAccData){this.remoteDataReady=true;return}let i=this.ssoDataUrl;if(!i){switch(this.env){case"dev":i="https://myaccount-dev.nanoporetech.com/";break;case"test":i="https://myaccount-test.nanoporetech.com/";break;default:i="https://myaccount.nanoporetech.com/";break}}const t={timeout:5e3};try{if(this.env==="local"){this.myAccData=await import("./p-2155fc2c.js")}else{this.myAccData=await p(i+"nav_bar_data.json",t)}if(this.myAccData.user.id){this.isLoggedIn=true;this.myAccountUser=this.myAccData.user}this.processMyAccLinks();this.processMyAccData();setTimeout((()=>this.remoteDataReady=true),300)}catch(i){console.error(i);this.remoteDataReady=true}}currentSelectedIndex(){if(!this.internalSearchIndeces.length){return}const i=this.internalSearchIndeces.find((i=>i.index===this.searchIndex));if(!i){this.currentIndex=this.internalSearchIndeces[0];console.error("index not found");return}this.currentIndex=i;return i}changeInternalSearchVal(){if(this.searchValInternal!==this.searchValue)this.searchValue=this.searchValInternal}initAlgoliaClient(){if(!this.searchAppId||!this.searchApiKey)return;this.algoliaClient=l(this.searchAppId,this.searchApiKey);this.addAlgoliaIndeces()}addIndeces(){this.internalSearchIndeces=[...this.internalSearchIndeces,...this.searchIndeces]}addAlgoliaIndeces(){if(!this.algoliaClient||!this.internalSearchIndeces.length)return;this.internalSearchIndeces.forEach((i=>{i.alogliaIndex=this.algoliaClient.initIndex(i.index)}));if(!this.searchIndex)this.searchIndex=this.internalSearchIndeces[0].index}thresholdChange(i,t){if(i>t){this.thresholdsGoingUp=true;this.setResizingState(true)}}ratioChange(){if(this.intersectRatio<1&&this.threshold>0){if(this.thresholdsGoingUp)this.setResizingState(true);this.threshold--;setTimeout((()=>this.ratioChange()),500)}else{this.thresholdReady=true;this.siteContent.style.minHeight=`calc(100% - ${this.barsDiv.clientHeight+1}px)`;let i,t;e((()=>{i=[...Array.from(this.el.querySelectorAll('nano-nav-item[slot="site"]')),...Array.from(this.el.querySelectorAll('nano-nav-item[slot="overflow"]'))];t=[];if(this.threshold<this.THRESHOLDLIMIT-m.icon)i.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="icon"]')));else t.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="icon"]')));if(this.threshold<this.THRESHOLDLIMIT-m.login)i.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="loggedin"]')));else t.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="loggedin"]')));if(this.threshold<this.THRESHOLDLIMIT-m.main)i.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="main"]')));else t.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="main"]')));if(this.threshold<this.THRESHOLDLIMIT-m.about)i.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="about"]')));else t.push(...Array.from(this.el.querySelectorAll('nano-nav-item[slot="about"]')))}));s((()=>{i.forEach((i=>{i.classList.add("nano-global-nav-menu");i.classList.remove("nano-global-nav-bar")}));t.forEach((i=>{i.classList.remove("nano-global-nav-menu");i.classList.add("nano-global-nav-bar")}))}))}}assessReady(){if(this.thresholdReady&&this.remoteDataReady){this.ready=true}}remoteReady(){this.attachIO()}isReady(){this.nanoIsReady.emit()}setupAutocompleteBlur(){if(this.showAutocomplete){this.el.shadowRoot.addEventListener("click",this.onAutocompleteBlur)}else{this.el.shadowRoot.removeEventListener("click",this.onAutocompleteBlur)}}slotChange(){this.threshold=this.THRESHOLDLIMIT}thresholdClasses(){const i=[];let t=0;for(t;t<this.threshold;t++)i.push("threshold-"+(t+1));return i}onWindowResize(){if(this.threshold<this.THRESHOLDLIMIT&&window.innerWidth>this.currSize){this.threshold=this.THRESHOLDLIMIT}this.currSize=window.innerWidth;this.searchBarShown=false}secondaryOpen(i){if(!i.detail.secondaryMenu)return;i.stopPropagation();this.secondaryMenuOpen=true;this.menuContentDiv.style.minHeight=i.detail.secondaryMenu.scrollHeight+"px"}secondaryClose(i){if(!i.detail.secondaryMenu)return;i.stopPropagation();this.secondaryMenuOpen=false;this.menuContentDiv.style.minHeight=""}async handleUserMenu(){await b(this.userLinkPanel,"show",this.userMenuOpen);if(this.userMenuOpen){this.userLinkPanel.focus();this.userLinkPanel.addEventListener("focusout",this.onUserMenuBlur)}else{this.userLinkPanel.removeEventListener("focusout",this.onUserMenuBlur);this.el.focus()}}searchbarShow(){this.searchBarShown=true;this.searchBarEl.addEventListener("transitionend",this.onSearchBarShown);this.searchBarEl.style.display="block";setTimeout((()=>{this.searchBarEl.style.height=this.searchBarEl.querySelector(".search-widget").scrollHeight+"px"}),50)}autocompleteSnippet(i){const t=["title"];if(i._snippetResult){const e=t.find((t=>i._snippetResult[t]&&i._snippetResult[t].matchLevel!=="none"));if(e){if(e!=="title")return(i.title.length>15?i.title.substring(0,15)+" ...":i.title)+" "+i._snippetResult[e].value;else return i._snippetResult["title"].value}}return i.title}isSearchValSet(){if(this.searchValInternal.length<3)return false;return true}resetHitFocus(){this.currAIndex=-1}setActiveElement(i){this.autocompleteEles.map((i=>i.setAttribute("aria-selected","false")));i.focus({preventScroll:true});i.setAttribute("aria-selected","true")}assessSlottedContent(){e((()=>{this.hasSiteSlot=!!this.el.querySelectorAll('[slot="site"]').length;this.hasLoggedinSlot=!!this.el.querySelectorAll('[slot="loggedin"]').length;this.hasPromotionSlot=!!this.el.querySelectorAll('[slot="promotion"]').length;this.aboutSlotLen=this.el.querySelectorAll('[slot="about"]').length;this.iconSlotLen=this.el.querySelectorAll('[slot="icon"]').length;this.mainSlotLen=this.el.querySelectorAll('[slot="main"]').length;this.overflowSlotLen=this.el.querySelectorAll('[slot="overflow"]').length;this.searchSlotLen=this.el.querySelectorAll('[slot="search"]').length}))}attachIO(){if(this.io)return;const i=this.el.shadowRoot.querySelector(".global-nav .main-bar");if(typeof window!=="undefined"&&window.IntersectionObserver&&!!i){const t=this.io=new window.IntersectionObserver((i=>{this.intersectRatio=i.slice(-1)[0].intersectionRatio}),{root:i,threshold:1});t.observe(i.querySelector(".measure-ele"))}}componentDidLoad(){{this.debounceResize=d(this.onWindowResize.bind(this),300);window.addEventListener("resize",this.debounceResize);this.currSize=window.innerWidth}this.initAlgoliaClient();this.addAlgoliaIndeces();if(this.remoteDataReady)this.attachIO()}componentWillLoad(){c.init(this,["searchIndex","searchValue"],"url-hash","gns");if(typeof window!=="undefined"&&window.MutationObserver){const i=this.mo=new MutationObserver((()=>{this.assessSlottedContent()}));i.observe(this.el,{childList:true,subtree:false})}this.assessSlottedContent()}disconnectedCallback(){if(this.io){this.io.disconnect();this.io=undefined}if(this.mo){this.mo.disconnect();this.mo=undefined}window.removeEventListener("resize",this.debounceResize)}async connectedCallback(){this.getMyAccData()}autocompleteList(){let i;if(this.showAutocomplete&&this.scrollingUp){let t=0;let e=0;const s=(i,t)=>t.index!==this.currentIndex.index?i+t.hits.length:i;const a=(i,t)=>t.index===this.currentIndex.index?i+t.hits.length:i;if(this.scopeSearch){e=this.scopeSearch.results.reduce(s,0);t=this.scopeSearch.results.reduce(a,0)}if(this.autocompleteResults&&this.autocompleteResults.hits.length||e&&!t){let e=0;i=n("div",null,!t&&n("div",{class:"search-autocomplete-hit search-autocomplete-hit--no-result"},"No results matching '",this.searchValInternal,"' were found in"," ",n("strong",null,this.currentIndex.name),". Try another phrase."),this.autocompleteResults&&[this.autocompleteResults.hits.map(((i,t)=>n("a",{role:"option",ref:i=>this.autocompleteEles.push(i),tabindex:"-1",id:"autocomplete-hit-"+t,href:i.url,class:"search-autocomplete-hit",innerHTML:this.autocompleteSnippet(i)})))],(!t||this.currentIndex.allGroup)&&this.scopeSearch&&this.scopeSearch.results&&[this.scopeSearch.results.map(((i,t)=>{if(!i.hits.length||i.index===this.currentIndex.index||e>1)return;e++;return n("button",{role:"option",ref:i=>this.autocompleteEles.push(i),tabindex:"-1",id:"autocomplete-scope-"+t,class:"search-autocomplete-hit",onClick:()=>this.switchIndexSubmit(i.index),onMouseDown:()=>this.switchIndexSubmit(i.index)},'"',this.searchValInternal,'"'," ",n("div",{class:"search-autocomplete-hit-scope"},"in ",i.indexName))}))],!!t&&n("div",{class:"search-autocomplete-foot"},n("button",{role:"option",class:"search-autocomplete-submit",ref:i=>this.autocompleteEles.push(i),id:"autocomplete-foot",onClick:this.onSearchSubmit,onMouseDown:this.onSearchSubmit},"View all results")))}else if(!t){i=n("div",{class:"search-autocomplete-hit search-autocomplete-hit--no-result"},"No results matching '",this.searchValInternal,"' were found. Try another phrase.")}}return n("div",{class:"search-autocomplete",role:"listbox",id:"autocomplete-results","aria-expanded":this.showAutocomplete?"true":"false",hidden:!this.showAutocomplete,onKeyDown:this.onAutocompleteInteract},i)}searchWidget(){return[n("form",{class:"search-inputs",onSubmit:this.onSearchSubmit,id:"global-nav-search"},n("nano-select",{class:"search-input",label:"Which area of content would you like to search?",hideLabel:true,showInlineError:false,value:this.searchIndex,onNanoChange:this.onSearchIndexChange,mask:true},this.internalSearchIndeces.map((i=>n("nano-option",{selected:i.index===this.searchIndex,value:i.index},i.name||i.index))),n("nano-icon",{name:"solid/caret-down",class:"down-arrow",slot:"down-arrow"})),n("nano-input",{class:"search-input",label:"What would you like to search for?","aria-label":"What would you like to search for?",hideLabel:true,showInlineError:false,"clear-input":true,placeholder:"Search...",type:"text",ref:i=>this.searchInput=i,onNanoChange:this.onSearchChange,onNanoInput:this.onSearchInput,onKeyDown:this.onAutocompleteInteract,debounce:500,"aria-autocomplete":"list","aria-activedescendant":this.autocompleteEles[this.currAIndex]?this.autocompleteEles[this.currAIndex].id:false,"aria-controls":"autocomplete-results",onNanoFocus:this.showAutocompleteResults,value:this.searchValue,role:"textbox"},n("button",{class:{"search-icon":true,"search-icon--search":true,"search-icon--show":!this.searchValInternal.length},slot:"end",onMouseDown:i=>{this.searchValInternal=this.searchInput.value;this.onSearchSubmit(i,true)}},n("nano-icon",{name:"light/search"})),n("span",{class:{"search-icon":true,"search-icon--loader":true,"search-icon--show":this.searchLoading},slot:"end"},n("nano-icon",{name:"light/spinner-third"}))),n("input",{type:"submit"}))]}render(){this.autocompleteEles=[];const i=this.el.ownerDocument.dir==="rtl";const t=this.searchWidget();t.push(this.autocompleteList());return n(o,{class:{[this.thresholdClasses().join(" ")]:true,ready:this.ready,"search-bar-shown":this.searchBarShown&&this.scrollingUp,"search-auto-complete-shown":this.showAutocomplete&&this.scrollingUp,"modal-open":this.modalIsOpen,resizing:this.isResizing},dir:i?"rtl":null},n("div",{class:{"global-nav":true,"scrolling-down":!this.scrollingUp}},n("nav",{id:"global-nav-menu",class:{"gn-menu":true,open:this.modalOpen,"has-promotion":this.hasPromotionSlot,"menu-full-screen":this.menuFullScreen,"secondary-open":this.secondaryMenuOpen},"aria-expanded":this.modalOpen?"true":"false",ref:i=>this.menuDiv=i},n("div",{class:"gn-menu_wrap",ref:i=>this.menuWrapDiv=i,tabindex:"-1"},n("div",{class:"gn-menu_actions"},n("button",{class:"menu-btn icon-btn icon-btn",onMouseDown:this.onMenuBtnClick,onKeyDown:this.onMenuBtnKeyDown},this.threshold<this.THRESHOLDLIMIT-3&&n("nano-icon",{name:"light/times","aria-label":"close menu"}),this.threshold>=this.THRESHOLDLIMIT-3&&n("nano-icon",{name:"light/bars","aria-label":"close menu"})),this.threshold<this.THRESHOLDLIMIT-m.icon&&[!!this.iconSlotLen&&n("slot",{name:"icon"}),this.myAccData&&(!this.activeMyAccountSections||this.activeMyAccountSections.includes("icons"))&&[this.msgUrl&&n("a",{href:this.msgUrl,class:"icon-btn"},n("nano-icon",{name:"light/bell"}),this.msgCount>0&&n("span",{class:"gn-menu_actions-counter"},this.msgCount)),this.cartUrl&&n("a",{href:this.cartUrl,class:"icon-btn"},n("nano-icon",{name:"light/shopping-cart"}),this.cartCount>0&&n("span",{class:"gn-menu_actions-counter"},this.cartCount))]],this.myAccData&&this.myAccData.urls.login&&n("a",{href:this.myAccData.urls.login+this.ssoRedirect,class:"login-btn"},"Login / Register"," ",n("nano-icon",{name:"solid/chevron-right"}))),n("div",{class:"content-wrap",ref:i=>this.menuContentDiv=i},n("div",{class:"content"},n("nav",{class:"nav-links nav-links--main"},n("slot",{name:"overflow"}),this.threshold<this.THRESHOLDLIMIT-m.main&&!!this.mainSlotLen&&n("slot",{name:"main"})),((!!this.aboutSlotLen||!!this.aboutNavItms.length)&&this.threshold<this.THRESHOLDLIMIT-m.about||this.hasSiteSlot||!!this.siteNavItms.length)&&n("div",null,(!!this.aboutSlotLen||!!this.aboutNavItms.length)&&this.threshold<this.THRESHOLDLIMIT-m.about&&[(this.threshold>=this.THRESHOLDLIMIT-(m.about+1)||this.mainSlotLen<2)&&this.overflowSlotLen<2&&n("div",{class:"nav-links-wrap"},!!this.aboutNavItms.length&&n("h4",{class:"nav-links_title"},"About"),n("nav",{class:"nav-links nav-links--sub","aria-label":"About the company links"},n("slot",{name:"about"}),this.aboutNavItms.map((i=>n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},n("a",{href:i.address,target:i.target},i.title)))))),(this.threshold<this.THRESHOLDLIMIT-(m.about+1)&&this.mainSlotLen>=2||this.overflowSlotLen>=2)&&n("nav",{class:"nav-links","aria-label":"About the company links"},!this.aboutNavItms.length&&n("slot",{name:"about"}),!!this.aboutNavItms.length&&n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},"Company",n("nano-icon",{slot:"icon-end",name:"solid/chevron-right"}),n("div",{slot:"secondary"},n("div",{class:"content"},n("button",{class:"back-btn",onClick:this.subMenuClose},n("nano-icon",{slot:"icon-end",name:"solid/chevron-left","aria-label":"go back"}),"Company"),n("slot",{name:"about"}),n("div",{class:"content--sub"},this.aboutNavItms.map((i=>n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},n("a",{href:i.address,target:i.target},i.title)))))))))],(this.hasSiteSlot||!!this.siteNavItms.length)&&[(this.threshold>=this.THRESHOLDLIMIT-2||this.mainSlotLen<2)&&this.overflowSlotLen<2&&n("div",{class:"nav-links-wrap"},n("h4",{class:"nav-links_title"},"Sites"),n("nav",{class:"nav-links nav-links--sub","aria-label":"Different company site links"},n("slot",{name:"site"}),this.siteNavItms.map((i=>n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},n("a",{href:i.address,target:i.target},i.title)))))),(this.threshold<this.THRESHOLDLIMIT-2&&this.mainSlotLen>=2||this.overflowSlotLen>=2)&&n("nav",{class:"nav-links","aria-label":"Different company site links"},n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},"Sites",n("nano-icon",{slot:"icon-end",name:"solid/chevron-right"}),n("div",{slot:"secondary"},n("div",{class:"content"},n("button",{class:"back-btn",onClick:this.subMenuClose},n("nano-icon",{slot:"icon-end",name:"solid/chevron-left","aria-label":"go back"}),"Sites"),n("div",{class:"content--sub"},n("slot",{name:"site"}),this.siteNavItms.map((i=>n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},n("a",{href:i.address,target:i.target},i.title)))))))))])),this.isLoggedIn&&this.threshold<this.THRESHOLDLIMIT-m.login&&(this.loggedInNavItms.length||this.hasLoggedinSlot)&&n("nav",{class:"nav-links","aria-label":"Your user account links"},n("nano-nav-item",{class:"nano-global-nav user-nav nano-global-nav-menu"},this.myAccountUser.name,n("nano-icon",{slot:"icon-end",name:"solid/chevron-right"}),n("div",{slot:"secondary"},n("div",{class:"content"},n("button",{class:"back-btn",onClick:this.subMenuClose},n("nano-icon",{slot:"icon-end",name:"solid/chevron-left","aria-label":"go back"}),this.myAccountUser.name),!!this.myAccountUser?.small_avatar_url&&n("nano-global-nav-user-profile",{myAccountUser:this.myAccountUser,userProfileUrl:this.userProfileUrl}),n("div",{class:"content--sub"},n("slot",{name:"loggedin"}),this.loggedInNavItms.map((i=>n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},n("a",{href:i.address,target:i.target},i.title)))),n("nano-nav-item",{class:"nano-global-nav nano-global-nav-menu"},n("a",{href:this.myAccData.urls.forgot_password+this.ssoRedirect},"Change Password"))))))),n("slot",{name:"promotion"}),this.myAccData&&this.myAccData.urls.logout&&n("div",{class:"login-btn logout-btn"},n("a",{href:this.myAccData.urls.logout+this.ssoRedirect},"Logout"))))),n("nano-sticker",{"auto-resize":"false","break-point-max":"800",quietMode:{h:600,w:800}},n("div",{class:"bars",ref:i=>this.barsDiv=i},n("nav",{class:"main-bar","aria-label":"Main site navigation",tabindex:"-1",ref:i=>this.mainBarDiv=i},(this.hasPromotionSlot||!!this.overflowSlotLen||(this.myAccData||!!this.iconSlotLen)&&this.threshold<this.THRESHOLDLIMIT-m.icon||this.isLoggedIn&&(!!this.loggedInNavItms.length||this.hasLoggedinSlot)&&this.threshold<this.THRESHOLDLIMIT-m.login||!!this.mainSlotLen&&this.threshold<this.THRESHOLDLIMIT-m.main||(!!this.aboutSlotLen||!!this.aboutNavItms.length)&&this.threshold<this.THRESHOLDLIMIT-m.about||this.hasSiteSlot||!!this.siteNavItms.length)&&n("button",{class:"menu-btn icon-btn",onMouseDown:this.menuOpen,onKeyDown:this.onMenuBtnKeyDown,"aria-expanded":this.modalOpen?"true":"false","aria-controls":"global-nav-menu",ref:i=>this.menuBtn=i},n("nano-icon",{name:"light/bars","aria-label":"open menu"})),this.showLogo&&n("a",{href:this.logoUrl,class:"logo-link"},n("img",{src:a(`./assets/ont-logo.svg`),alt:"Oxford Nanopore Technologies Logo",class:"logo"})),!this.showLogo&&n("div",{class:"logo-link"},n("slot",{name:"logo"})),n("div",{class:"nav-links nav-links--main"},n("slot",{name:"main"})),this.threshold>=this.THRESHOLDLIMIT-m.search&&[this.showSearch&&!!this.internalSearchIndeces.length&&n("div",{class:"search-widget",role:"combobox","aria-owns":"autocomplete-results","aria-expanded":this.showAutocomplete&&this.autocompleteResults?"true":"false"},t),(!this.showSearch||!this.myAccData)&&!!this.searchSlotLen&&n("slot",{name:"search"})],(!!this.aboutSlotLen||!!this.aboutNavItms.length)&&this.threshold>=this.THRESHOLDLIMIT-m.about&&n("nav",{class:"nav-links nav-links--sub","aria-label":"About the company. Links"},n("slot",{name:"about"}),this.aboutNavItms.map((i=>n("nano-nav-item",{class:"nano-global-nav nano-global-nav-bar"},n("a",{href:i.address,target:i.target},i.title))))),this.threshold<this.THRESHOLDLIMIT-m.search&&(this.showSearch&&!!this.internalSearchIndeces.length||!!this.searchSlotLen)&&n("button",{class:"icon-btn","aria-controls":"global-nav-search-bar","aria-expanded":this.searchBarShown?"true":"false",onMouseDown:this.onSearchBtnClick,onKeyDown:this.onSearchBtnKeyDown},n("nano-icon",{name:"light/search"})),this.threshold>=this.THRESHOLDLIMIT-m.icon&&[!!this.iconSlotLen&&n("slot",{name:"icon"}),this.myAccData&&(!this.activeMyAccountSections||this.activeMyAccountSections.includes("icons"))&&[this.msgUrl&&n("a",{href:this.msgUrl,class:"icon-btn"},n("nano-icon",{name:"light/bell"}),this.msgCount>0&&n("span",{class:"gn-menu_actions-counter"},this.msgCount)),this.cartUrl&&n("a",{href:this.cartUrl,class:"icon-btn"},n("nano-icon",{name:"light/shopping-cart"}),this.cartCount>0&&n("span",{class:"gn-menu_actions-counter"},this.cartCount))]],this.myAccData&&(!this.activeMyAccountSections||this.activeMyAccountSections.includes("loggedin"))&&this.threshold>=this.THRESHOLDLIMIT-m.login&&[this.myAccData.urls.login&&n("a",{href:this.myAccData.urls.login+this.ssoRedirect,class:"login-btn"},"Login / Register"),this.myAccountUser&&n("div",{class:"user-links"},n("button",{class:{"icon-btn":true,"user-links-btn":true,open:this.userMenuOpen},onMouseDown:this.onUserBtnClick,onKeyDown:this.onUserBtnKeyDown}," ",this.myAccountUser.name,n("nano-icon",{name:"solid/caret-down"})),n("div",{class:"user-links-panel",tabindex:"-1",ref:i=>this.userLinkPanel=i},!!this.myAccountUser?.small_avatar_url&&n("nano-global-nav-user-profile",{myAccountUser:this.myAccountUser,userProfileUrl:this.userProfileUrl}),n("div",{class:"user-links-panel-content"},this.loggedInNavItms.map((i=>n("a",{href:i.address,target:i.target},i.title)))),n("div",{class:"user-links-panel-foot"},n("a",{href:this.myAccData.urls.forgot_password+this.ssoRedirect},"Change Password"),n("a",{href:this.myAccData.urls.logout+this.ssoRedirect},"Logout"))))],n("span",{class:"measure-ele"})),this.threshold<this.THRESHOLDLIMIT-m.search&&n("div",{id:"global-nav-search-bar",class:{"search-bar":true,show:this.searchBarShown},"aria-expanded":this.searchBarShown?"true":"false",role:"region",tabindex:"-1",ref:i=>this.searchBarEl=i},n("div",{class:"search-widget"},this.showSearch&&!!this.internalSearchIndeces.length&&n("div",null,t),(!this.showSearch||!this.myAccData)&&!!this.searchSlotLen&&n("slot",{name:"search"}))))),(this.threshold<this.THRESHOLDLIMIT-3||this.menuFullScreen)&&n("div",{class:{mask:true,open:this.modalOpen},onClick:this.menuClose,onTouchEnd:this.menuClose})),n("div",{class:"site-content",ref:i=>this.siteContent=i},n("slot",null)))}domainFor(i){if(!this.myAccData)return"";const t=this.myAccData.domains.find((t=>t.origin===i));return t?t.domain:""}processSearchResults(i){const t=i;const e=i;if(t.results){t.results.forEach(((i,e)=>{t.results[e]=this.processSearchResults(i)}));return t}else{e.hits.map((i=>{if(i.url&&!i.url.match(/^http/))i.url=location.protocol+"//"+this.domainFor(i.origin)+i.url}));return e}}processMyAccData(){if(!this.myAccData||!this.myAccData.search.indeces.length)return;if(this.myAccData.search.api_key)this.searchApiKey=this.myAccData.search.api_key;if(this.myAccData.search.app_id)this.searchAppId=this.myAccData.search.app_id;if(this.myAccData.cart.count)this.cartCount=this.myAccData.cart.count;if(this.myAccData.notifications.count)this.msgCount=this.myAccData.notifications.count;if(!this.searchAppId||!this.searchApiKey)return;this.internalSearchIndeces=[...this.myAccData.search.indeces,...this.searchIndeces];if(this.myAccData.urls.cart&&!this.cartUrl)this.cartUrl=this.myAccData.urls.cart;if(this.myAccData.urls.messages&&!this.msgUrl)this.msgUrl=this.myAccData.urls.messages}processMyAccLinks(){if(!this.myAccData.links||!this.myAccData.links.length)return;this.myAccData.links.forEach((i=>{switch(i.area){case"left-side-logged-in":case"left-side-logged-out":if(this.activeMyAccountSections&&!this.activeMyAccountSections.includes("sites"))break;if(this.isLoggedIn&&i.area==="left-side-logged-in")this.siteNavItms.push(i);else if(!this.isLoggedIn&&i.area==="left-side-logged-out")this.siteNavItms.push(i);break;case"right-side-logged-in":case"right-side-logged-out":if(this.activeMyAccountSections&&!this.activeMyAccountSections.includes("about"))break;if(this.isLoggedIn&&i.area==="right-side-logged-in")this.aboutNavItms.push(i);else if(!this.isLoggedIn&&i.area==="right-side-logged-out")this.aboutNavItms.push(i);break;case"profile-panel-list":if(this.activeMyAccountSections&&!this.activeMyAccountSections.includes("loggedin"))break;this.loggedInNavItms.push(i);break}}))}static get assetsDirs(){return["assets"]}get el(){return r(this)}static get watchers(){return{env:["getMyAccData"],ssoDataUrl:["getMyAccData"],searchIndex:["currentSelectedIndex"],searchValInternal:["changeInternalSearchVal"],searchApiKey:["initAlgoliaClient"],searchAppId:["initAlgoliaClient"],searchIndeces:["addIndeces"],internalSearchIndeces:["addAlgoliaIndeces"],threshold:["thresholdChange"],intersectRatio:["ratioChange"],thresholdReady:["assessReady"],remoteDataReady:["assessReady","remoteReady"],ready:["isReady"],showAutocomplete:["setupAutocompleteBlur","resetHitFocus"],aboutSlotLen:["slotChange"],iconSlotLen:["slotChange"],mainSlotLen:["slotChange"],overflowSlotLen:["slotChange"],searchSlotLen:["slotChange"],userMenuOpen:["handleUserMenu"]}}};g.style=u;export{g as nano_global_nav};
|
5
|
-
//# sourceMappingURL=p-9f2524d4.entry.js.map
|