wcs-core 4.1.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +59 -90
  3. package/dist/cjs/accessibility-e99b032d.js +68 -0
  4. package/dist/cjs/accessibility-e99b032d.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/wcs-checkbox.cjs.entry.js +1 -0
  7. package/dist/cjs/wcs-checkbox.cjs.entry.js.map +1 -1
  8. package/dist/cjs/wcs-counter.cjs.entry.js +1 -0
  9. package/dist/cjs/wcs-counter.cjs.entry.js.map +1 -1
  10. package/dist/cjs/wcs-dropdown.cjs.entry.js +3 -5
  11. package/dist/cjs/wcs-dropdown.cjs.entry.js.map +1 -1
  12. package/dist/cjs/wcs-grid.cjs.entry.js +1 -1
  13. package/dist/cjs/wcs-grid.cjs.entry.js.map +1 -1
  14. package/dist/cjs/wcs-input.cjs.entry.js +1 -3
  15. package/dist/cjs/wcs-input.cjs.entry.js.map +1 -1
  16. package/dist/cjs/wcs-modal.cjs.entry.js +68 -6
  17. package/dist/cjs/wcs-modal.cjs.entry.js.map +1 -1
  18. package/dist/cjs/wcs-native-select.cjs.entry.js +19 -0
  19. package/dist/cjs/wcs-native-select.cjs.entry.js.map +1 -1
  20. package/dist/cjs/wcs-radio-group.cjs.entry.js +48 -4
  21. package/dist/cjs/wcs-radio-group.cjs.entry.js.map +1 -1
  22. package/dist/cjs/wcs-radio.cjs.entry.js +17 -4
  23. package/dist/cjs/wcs-radio.cjs.entry.js.map +1 -1
  24. package/dist/cjs/wcs-tab.cjs.entry.js +1 -1
  25. package/dist/cjs/wcs-tab.cjs.entry.js.map +1 -1
  26. package/dist/cjs/wcs-tabs.cjs.entry.js +37 -1
  27. package/dist/cjs/wcs-tabs.cjs.entry.js.map +1 -1
  28. package/dist/cjs/wcs-textarea.cjs.entry.js +3 -2
  29. package/dist/cjs/wcs-textarea.cjs.entry.js.map +1 -1
  30. package/dist/cjs/wcs.cjs.js +1 -1
  31. package/dist/collection/collection-manifest.json +2 -2
  32. package/dist/collection/components/checkbox/checkbox.js +1 -0
  33. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  34. package/dist/collection/components/counter/counter.js +1 -0
  35. package/dist/collection/components/counter/counter.js.map +1 -1
  36. package/dist/collection/components/dropdown/dropdown.js +1 -0
  37. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  38. package/dist/collection/components/grid/grid.js +1 -1
  39. package/dist/collection/components/grid/grid.js.map +1 -1
  40. package/dist/collection/components/input/input.js +2 -4
  41. package/dist/collection/components/input/input.js.map +1 -1
  42. package/dist/collection/components/modal/modal.js +71 -6
  43. package/dist/collection/components/modal/modal.js.map +1 -1
  44. package/dist/collection/components/native-select/{native-select.component.js → native-select.js} +58 -7
  45. package/dist/collection/components/native-select/native-select.js.map +1 -0
  46. package/dist/collection/components/radio/radio.css +13 -1
  47. package/dist/collection/components/radio/{radio.component.js → radio.js} +37 -4
  48. package/dist/collection/components/radio/radio.js.map +1 -0
  49. package/dist/collection/components/radio-group/radio-group.js +60 -4
  50. package/dist/collection/components/radio-group/radio-group.js.map +1 -1
  51. package/dist/collection/components/tab/tab.js +1 -1
  52. package/dist/collection/components/tab/tab.js.map +1 -1
  53. package/dist/collection/components/tabs/tabs.js +54 -1
  54. package/dist/collection/components/tabs/tabs.js.map +1 -1
  55. package/dist/collection/components/textarea/textarea.js +8 -4
  56. package/dist/collection/components/textarea/textarea.js.map +1 -1
  57. package/dist/collection/utils/accessibility.js +58 -0
  58. package/dist/collection/utils/accessibility.js.map +1 -1
  59. package/dist/esm/accessibility-ffa12842.js +65 -0
  60. package/dist/esm/accessibility-ffa12842.js.map +1 -0
  61. package/dist/esm/{helpers-1f7170dd.js → helpers-1d55b67f.js} +2 -2
  62. package/dist/esm/{helpers-1f7170dd.js.map → helpers-1d55b67f.js.map} +1 -1
  63. package/dist/esm/loader.js +1 -1
  64. package/dist/esm/wcs-button.entry.js +1 -1
  65. package/dist/esm/wcs-checkbox.entry.js +1 -0
  66. package/dist/esm/wcs-checkbox.entry.js.map +1 -1
  67. package/dist/esm/wcs-com-nav-category.entry.js +1 -1
  68. package/dist/esm/wcs-com-nav-submenu.entry.js +1 -1
  69. package/dist/esm/wcs-com-nav.entry.js +1 -1
  70. package/dist/esm/wcs-counter.entry.js +2 -1
  71. package/dist/esm/wcs-counter.entry.js.map +1 -1
  72. package/dist/esm/wcs-dropdown-item.entry.js +1 -1
  73. package/dist/esm/wcs-dropdown.entry.js +3 -5
  74. package/dist/esm/wcs-dropdown.entry.js.map +1 -1
  75. package/dist/esm/wcs-galactic-menu.entry.js +1 -1
  76. package/dist/esm/wcs-grid.entry.js +1 -1
  77. package/dist/esm/wcs-grid.entry.js.map +1 -1
  78. package/dist/esm/wcs-input.entry.js +2 -4
  79. package/dist/esm/wcs-input.entry.js.map +1 -1
  80. package/dist/esm/wcs-modal.entry.js +69 -7
  81. package/dist/esm/wcs-modal.entry.js.map +1 -1
  82. package/dist/esm/wcs-native-select.entry.js +19 -0
  83. package/dist/esm/wcs-native-select.entry.js.map +1 -1
  84. package/dist/esm/wcs-nav-item.entry.js +1 -1
  85. package/dist/esm/wcs-radio-group.entry.js +48 -4
  86. package/dist/esm/wcs-radio-group.entry.js.map +1 -1
  87. package/dist/esm/wcs-radio.entry.js +18 -5
  88. package/dist/esm/wcs-radio.entry.js.map +1 -1
  89. package/dist/esm/wcs-select_2.entry.js +1 -1
  90. package/dist/esm/wcs-tab.entry.js +1 -1
  91. package/dist/esm/wcs-tab.entry.js.map +1 -1
  92. package/dist/esm/wcs-tabs.entry.js +37 -1
  93. package/dist/esm/wcs-tabs.entry.js.map +1 -1
  94. package/dist/esm/wcs-textarea.entry.js +4 -3
  95. package/dist/esm/wcs-textarea.entry.js.map +1 -1
  96. package/dist/esm/wcs.js +1 -1
  97. package/dist/types/components/input/input.d.ts +1 -3
  98. package/dist/types/components/modal/modal.d.ts +25 -5
  99. package/dist/types/components/native-select/{native-select.component.d.ts → native-select.d.ts} +22 -5
  100. package/dist/types/components/radio/{radio.component.d.ts → radio.d.ts} +2 -0
  101. package/dist/types/components/radio-group/radio-group.d.ts +3 -0
  102. package/dist/types/components/tabs/tabs.d.ts +13 -0
  103. package/dist/types/components/textarea/textarea.d.ts +2 -2
  104. package/dist/types/components.d.ts +74 -24
  105. package/dist/types/utils/accessibility.d.ts +2 -0
  106. package/dist/wcs/p-0f8db386.js +2 -0
  107. package/dist/wcs/p-0f8db386.js.map +1 -0
  108. package/dist/wcs/{p-4b4d53e2.entry.js → p-1f8c73eb.entry.js} +2 -2
  109. package/dist/wcs/{p-554ca93c.entry.js → p-2185bf8b.entry.js} +2 -2
  110. package/dist/wcs/{p-22480bd8.entry.js → p-2f63d6c5.entry.js} +2 -2
  111. package/dist/wcs/p-2f63d6c5.entry.js.map +1 -0
  112. package/dist/wcs/p-39821dd2.entry.js +2 -0
  113. package/dist/wcs/p-39821dd2.entry.js.map +1 -0
  114. package/dist/wcs/{p-84afb8af.entry.js → p-3b1fc676.entry.js} +2 -2
  115. package/dist/wcs/{p-12ac2547.js → p-3dc6b507.js} +2 -2
  116. package/dist/wcs/p-4ffe4539.entry.js +2 -0
  117. package/dist/wcs/p-4ffe4539.entry.js.map +1 -0
  118. package/dist/wcs/p-61cab06f.entry.js +2 -0
  119. package/dist/wcs/p-61cab06f.entry.js.map +1 -0
  120. package/dist/wcs/{p-15058c29.entry.js → p-6de70331.entry.js} +2 -2
  121. package/dist/wcs/p-6de70331.entry.js.map +1 -0
  122. package/dist/wcs/{p-b6cd196d.entry.js → p-7269272f.entry.js} +2 -2
  123. package/dist/wcs/{p-966a241e.entry.js → p-7519a270.entry.js} +2 -2
  124. package/dist/wcs/{p-6b66ce85.entry.js → p-8c4ed883.entry.js} +2 -2
  125. package/dist/wcs/p-8c4ed883.entry.js.map +1 -0
  126. package/dist/wcs/p-8fed8b1c.entry.js +2 -0
  127. package/dist/wcs/p-8fed8b1c.entry.js.map +1 -0
  128. package/dist/wcs/{p-d2da0c9f.entry.js → p-ac106663.entry.js} +2 -2
  129. package/dist/wcs/{p-d2da0c9f.entry.js.map → p-ac106663.entry.js.map} +1 -1
  130. package/dist/wcs/{p-b229a91c.entry.js → p-cb90bc3a.entry.js} +2 -2
  131. package/dist/wcs/{p-f82e7a61.entry.js → p-e348058b.entry.js} +2 -2
  132. package/dist/wcs/{p-405140f9.entry.js → p-ec84d6fd.entry.js} +2 -2
  133. package/dist/wcs/{p-26c4c983.entry.js → p-ed3132be.entry.js} +2 -2
  134. package/dist/wcs/p-ed3132be.entry.js.map +1 -0
  135. package/dist/wcs/p-f06f48f3.entry.js +2 -0
  136. package/dist/wcs/{p-6acbf38a.entry.js.map → p-f06f48f3.entry.js.map} +1 -1
  137. package/dist/wcs/p-f20b9024.entry.js +2 -0
  138. package/dist/wcs/p-f20b9024.entry.js.map +1 -0
  139. package/dist/wcs/p-f489793d.entry.js +2 -0
  140. package/dist/wcs/p-f489793d.entry.js.map +1 -0
  141. package/dist/wcs/wcs.esm.js +1 -1
  142. package/dist/wcs/wcs.esm.js.map +1 -1
  143. package/package.json +3 -2
  144. package/dist/collection/components/native-select/native-select.component.js.map +0 -1
  145. package/dist/collection/components/radio/radio.component.js.map +0 -1
  146. package/dist/wcs/p-069555a1.entry.js +0 -2
  147. package/dist/wcs/p-069555a1.entry.js.map +0 -1
  148. package/dist/wcs/p-07b8cd36.entry.js +0 -2
  149. package/dist/wcs/p-07b8cd36.entry.js.map +0 -1
  150. package/dist/wcs/p-15058c29.entry.js.map +0 -1
  151. package/dist/wcs/p-22480bd8.entry.js.map +0 -1
  152. package/dist/wcs/p-26c4c983.entry.js.map +0 -1
  153. package/dist/wcs/p-64dd7356.entry.js +0 -2
  154. package/dist/wcs/p-64dd7356.entry.js.map +0 -1
  155. package/dist/wcs/p-6acbf38a.entry.js +0 -2
  156. package/dist/wcs/p-6b66ce85.entry.js.map +0 -1
  157. package/dist/wcs/p-732b2faa.entry.js +0 -2
  158. package/dist/wcs/p-732b2faa.entry.js.map +0 -1
  159. package/dist/wcs/p-94d95b99.entry.js +0 -2
  160. package/dist/wcs/p-94d95b99.entry.js.map +0 -1
  161. package/dist/wcs/p-b856f2f6.entry.js +0 -2
  162. package/dist/wcs/p-b856f2f6.entry.js.map +0 -1
  163. /package/dist/wcs/{p-4b4d53e2.entry.js.map → p-1f8c73eb.entry.js.map} +0 -0
  164. /package/dist/wcs/{p-554ca93c.entry.js.map → p-2185bf8b.entry.js.map} +0 -0
  165. /package/dist/wcs/{p-84afb8af.entry.js.map → p-3b1fc676.entry.js.map} +0 -0
  166. /package/dist/wcs/{p-12ac2547.js.map → p-3dc6b507.js.map} +0 -0
  167. /package/dist/wcs/{p-b6cd196d.entry.js.map → p-7269272f.entry.js.map} +0 -0
  168. /package/dist/wcs/{p-966a241e.entry.js.map → p-7519a270.entry.js.map} +0 -0
  169. /package/dist/wcs/{p-b229a91c.entry.js.map → p-cb90bc3a.entry.js.map} +0 -0
  170. /package/dist/wcs/{p-f82e7a61.entry.js.map → p-e348058b.entry.js.map} +0 -0
  171. /package/dist/wcs/{p-405140f9.entry.js.map → p-ec84d6fd.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["patchBrowser","importMeta","import","meta","url","opts","resourcesUrl","URL","href","promiseResolve","then","options","bootstrapLazy","type","label","readonly","value","validateFn","formatFn","errorMsg","size","currentState","isError","currentStep","steps","mode","checkOnComplete","internalCurrentStep","previous","next","min","max","step","displayedValue","serverMode","data","loading","selectionConfig","selectedItems","wcsGridPaginationId","rowIdPath","columns","paginationEl","rows","availablePageSizes","currentPage","pageSize","itemsCount","pageCount","withoutBackdrop","show","showCloseButton","hideActions","noArrow","shape","disabled","placement","expanded","text","showPopoverMenu","fireFocusEvents","accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","debounce","prefixLabel","suffixLabel","enterkeyhint","icon","inputmode","maxlength","minlength","multiple","name","pattern","placeholder","required","spellcheck","state","hasFocus","passwordReveal","setFocus","setBlur","getInputElement","cols","wrap","autoGrow","resize","fitContent","hideActionText","highlight","groupContentWithHeader","open","close","gutter","hasTabs","color","appName","mobileMenuOpen","currentActiveSizing","categoryOpen","panelTitle","panelDescription","menuOpen","path","sort","sortFn","formatter","sortOrder","width","customCells","hidden","columnId","rowId","small","activated","showLabel","animation","radius","rounded","height","checked","labelAlignment","header","itemKey","align","selectedIndex","selectedKey","headersOnly","headers","currentActiveTabIndex","for","position","interactive","maxWidth","delay","duration","trigger","theme","content","appendTo","hide","disable","enable","selected","chipColor","chipBackgroundColor","chips","compareWith","hasLoaded","displayText","focused","overlayDirection","hasPrefix","hasSuffix","spiedElement","indeterminate","target","ripple","family"],"sources":["./node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v3.0.0 | MIT Licensed | https://stenciljs.com\n */\nimport { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';\nimport { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@stencil/core';\n/**\n * Helper method for querying a `meta` tag that contains a nonce value\n * out of a DOM's head.\n *\n * @param doc The DOM containing the `head` to query against\n * @returns The content of the meta tag representing the nonce value, or `undefined` if no tag\n * exists or the tag has no content.\n */\nfunction queryNonceMetaTagContent(doc) {\n var _a, _b, _c;\n return (_c = (_b = (_a = doc.head) === null || _a === void 0 ? void 0 : _a.querySelector('meta[name=\"csp-nonce\"]')) === null || _b === void 0 ? void 0 : _b.getAttribute('content')) !== null && _c !== void 0 ? _c : undefined;\n}\n// TODO(STENCIL-661): Remove code related to the dynamic import shim\nconst getDynamicImportFunction = (namespace) => `__sc_import_${namespace.replace(/\\s|-/g, '_')}`;\nconst patchBrowser = () => {\n // NOTE!! This fn cannot use async/await!\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo('Running in development mode.');\n }\n // TODO(STENCIL-659): Remove code implementing the CSS variable shim\n if (BUILD.cssVarShim) {\n // shim css vars\n // TODO(STENCIL-659): Remove code implementing the CSS variable shim\n plt.$cssShim$ = win.__cssshim;\n }\n if (BUILD.cloneNodeFix) {\n // opted-in to polyfill cloneNode() for slot polyfilled components\n patchCloneNodeFix(H.prototype);\n }\n if (BUILD.profile && !performance.mark) {\n // not all browsers support performance.mark/measure (Safari 10)\n // because the mark/measure APIs are designed to write entries to a buffer in the browser that does not exist,\n // simply stub the implementations out.\n // TODO(STENCIL-323): Remove this patch when support for older browsers is removed (breaking)\n // @ts-ignore\n performance.mark = performance.measure = () => {\n /*noop*/\n };\n performance.getEntriesByName = () => [];\n }\n // @ts-ignore\n const scriptElm = \n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n BUILD.scriptDataOpts || BUILD.safari10 || BUILD.dynamicImportShim\n ? Array.from(doc.querySelectorAll('script')).find((s) => new RegExp(`\\/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) ||\n s.getAttribute('data-stencil-namespace') === NAMESPACE)\n : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? scriptElm['data-opts'] || {} : {};\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n if (BUILD.safari10 && 'onbeforeload' in scriptElm && !history.scrollRestoration /* IS_ESM_BUILD */) {\n // Safari < v11 support: This IF is true if it's Safari below v11.\n // This fn cannot use async/await since Safari didn't support it until v11,\n // however, Safari 10 did support modules. Safari 10 also didn't support \"nomodule\",\n // so both the ESM file and nomodule file would get downloaded. Only Safari\n // has 'onbeforeload' in the script, and \"history.scrollRestoration\" was added\n // to Safari in v11. Return a noop then() so the async/await ESM code doesn't continue.\n // IS_ESM_BUILD is replaced at build time so this check doesn't happen in systemjs builds.\n return {\n then() {\n /* promise noop */\n },\n };\n }\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n if (!BUILD.safari10 && importMeta !== '') {\n opts.resourcesUrl = new URL('.', importMeta).href;\n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n }\n else if (BUILD.dynamicImportShim || BUILD.safari10) {\n opts.resourcesUrl = new URL('.', new URL(scriptElm.getAttribute('data-resources-url') || scriptElm.src, win.location.href)).href;\n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n if (BUILD.dynamicImportShim) {\n patchDynamicImport(opts.resourcesUrl, scriptElm);\n }\n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n if (BUILD.dynamicImportShim && !win.customElements) {\n // module support, but no custom elements support (Old Edge)\n // @ts-ignore\n return import(/* webpackChunkName: \"polyfills-dom\" */ './dom.js').then(() => opts);\n }\n }\n return promiseResolve(opts);\n};\n// TODO(STENCIL-661): Remove code related to the dynamic import shim\nconst patchDynamicImport = (base, orgScriptElm) => {\n const importFunctionName = getDynamicImportFunction(NAMESPACE);\n try {\n // test if this browser supports dynamic imports\n // There is a caching issue in V8, that breaks using import() in Function\n // By generating a random string, we can workaround it\n // Check https://bugs.chromium.org/p/chromium/issues/detail?id=990810 for more info\n win[importFunctionName] = new Function('w', `return import(w);//${Math.random()}`);\n }\n catch (e) {\n // this shim is specifically for browsers that do support \"esm\" imports\n // however, they do NOT support \"dynamic\" imports\n // basically this code is for old Edge, v18 and below\n const moduleMap = new Map();\n win[importFunctionName] = (src) => {\n var _a;\n const url = new URL(src, base).href;\n let mod = moduleMap.get(url);\n if (!mod) {\n const script = doc.createElement('script');\n script.type = 'module';\n script.crossOrigin = orgScriptElm.crossOrigin;\n script.src = URL.createObjectURL(new Blob([`import * as m from '${url}'; window.${importFunctionName}.m = m;`], {\n type: 'application/javascript',\n }));\n // Apply CSP nonce to the script tag if it exists\n const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);\n if (nonce != null) {\n script.setAttribute('nonce', nonce);\n }\n mod = new Promise((resolve) => {\n script.onload = () => {\n resolve(win[importFunctionName].m);\n script.remove();\n };\n });\n moduleMap.set(url, mod);\n doc.head.appendChild(script);\n }\n return mod;\n };\n }\n};\nconst patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function (deep) {\n if (this.nodeName === 'TEMPLATE') {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n // Node.ATTRIBUTE_NODE === 2, and checking because IE11\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport { patchBrowser };\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(options => {\n globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["patchBrowser","importMeta","import","meta","url","opts","resourcesUrl","URL","href","promiseResolve","then","options","bootstrapLazy","type","label","readonly","value","validateFn","formatFn","errorMsg","size","currentState","isError","currentStep","steps","mode","checkOnComplete","internalCurrentStep","previous","next","min","max","step","displayedValue","serverMode","data","loading","selectionConfig","selectedItems","wcsGridPaginationId","rowIdPath","columns","paginationEl","rows","availablePageSizes","currentPage","pageSize","itemsCount","pageCount","withoutBackdrop","show","showCloseButton","hideActions","noArrow","shape","disabled","placement","expanded","text","showPopoverMenu","fireFocusEvents","accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","debounce","prefixLabel","suffixLabel","enterkeyhint","icon","inputmode","maxlength","minlength","multiple","name","pattern","placeholder","required","spellcheck","state","hasFocus","passwordReveal","setFocus","setBlur","getInputElement","cols","wrap","autoGrow","resize","fitContent","hideActionText","highlight","groupContentWithHeader","open","close","gutter","hasTabs","color","appName","mobileMenuOpen","currentActiveSizing","categoryOpen","panelTitle","panelDescription","menuOpen","path","sort","sortFn","formatter","sortOrder","width","customCells","hidden","columnId","rowId","small","activated","updateStyles","showLabel","animation","radius","rounded","height","checked","labelAlignment","header","itemKey","align","selectedIndex","selectedKey","headersOnly","description","headers","currentActiveTabIndex","for","position","interactive","maxWidth","delay","duration","trigger","theme","content","appendTo","hide","disable","enable","selected","chipColor","chipBackgroundColor","chips","compareWith","hasLoaded","displayText","focused","overlayDirection","hasPrefix","hasSuffix","spiedElement","indeterminate","target","ripple","family"],"sources":["./node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v3.0.0 | MIT Licensed | https://stenciljs.com\n */\nimport { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';\nimport { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@stencil/core';\n/**\n * Helper method for querying a `meta` tag that contains a nonce value\n * out of a DOM's head.\n *\n * @param doc The DOM containing the `head` to query against\n * @returns The content of the meta tag representing the nonce value, or `undefined` if no tag\n * exists or the tag has no content.\n */\nfunction queryNonceMetaTagContent(doc) {\n var _a, _b, _c;\n return (_c = (_b = (_a = doc.head) === null || _a === void 0 ? void 0 : _a.querySelector('meta[name=\"csp-nonce\"]')) === null || _b === void 0 ? void 0 : _b.getAttribute('content')) !== null && _c !== void 0 ? _c : undefined;\n}\n// TODO(STENCIL-661): Remove code related to the dynamic import shim\nconst getDynamicImportFunction = (namespace) => `__sc_import_${namespace.replace(/\\s|-/g, '_')}`;\nconst patchBrowser = () => {\n // NOTE!! This fn cannot use async/await!\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo('Running in development mode.');\n }\n // TODO(STENCIL-659): Remove code implementing the CSS variable shim\n if (BUILD.cssVarShim) {\n // shim css vars\n // TODO(STENCIL-659): Remove code implementing the CSS variable shim\n plt.$cssShim$ = win.__cssshim;\n }\n if (BUILD.cloneNodeFix) {\n // opted-in to polyfill cloneNode() for slot polyfilled components\n patchCloneNodeFix(H.prototype);\n }\n if (BUILD.profile && !performance.mark) {\n // not all browsers support performance.mark/measure (Safari 10)\n // because the mark/measure APIs are designed to write entries to a buffer in the browser that does not exist,\n // simply stub the implementations out.\n // TODO(STENCIL-323): Remove this patch when support for older browsers is removed (breaking)\n // @ts-ignore\n performance.mark = performance.measure = () => {\n /*noop*/\n };\n performance.getEntriesByName = () => [];\n }\n // @ts-ignore\n const scriptElm = \n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n BUILD.scriptDataOpts || BUILD.safari10 || BUILD.dynamicImportShim\n ? Array.from(doc.querySelectorAll('script')).find((s) => new RegExp(`\\/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) ||\n s.getAttribute('data-stencil-namespace') === NAMESPACE)\n : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? scriptElm['data-opts'] || {} : {};\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n if (BUILD.safari10 && 'onbeforeload' in scriptElm && !history.scrollRestoration /* IS_ESM_BUILD */) {\n // Safari < v11 support: This IF is true if it's Safari below v11.\n // This fn cannot use async/await since Safari didn't support it until v11,\n // however, Safari 10 did support modules. Safari 10 also didn't support \"nomodule\",\n // so both the ESM file and nomodule file would get downloaded. Only Safari\n // has 'onbeforeload' in the script, and \"history.scrollRestoration\" was added\n // to Safari in v11. Return a noop then() so the async/await ESM code doesn't continue.\n // IS_ESM_BUILD is replaced at build time so this check doesn't happen in systemjs builds.\n return {\n then() {\n /* promise noop */\n },\n };\n }\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n if (!BUILD.safari10 && importMeta !== '') {\n opts.resourcesUrl = new URL('.', importMeta).href;\n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n // TODO(STENCIL-663): Remove code related to deprecated `safari10` field.\n }\n else if (BUILD.dynamicImportShim || BUILD.safari10) {\n opts.resourcesUrl = new URL('.', new URL(scriptElm.getAttribute('data-resources-url') || scriptElm.src, win.location.href)).href;\n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n if (BUILD.dynamicImportShim) {\n patchDynamicImport(opts.resourcesUrl, scriptElm);\n }\n // TODO(STENCIL-661): Remove code related to the dynamic import shim\n if (BUILD.dynamicImportShim && !win.customElements) {\n // module support, but no custom elements support (Old Edge)\n // @ts-ignore\n return import(/* webpackChunkName: \"polyfills-dom\" */ './dom.js').then(() => opts);\n }\n }\n return promiseResolve(opts);\n};\n// TODO(STENCIL-661): Remove code related to the dynamic import shim\nconst patchDynamicImport = (base, orgScriptElm) => {\n const importFunctionName = getDynamicImportFunction(NAMESPACE);\n try {\n // test if this browser supports dynamic imports\n // There is a caching issue in V8, that breaks using import() in Function\n // By generating a random string, we can workaround it\n // Check https://bugs.chromium.org/p/chromium/issues/detail?id=990810 for more info\n win[importFunctionName] = new Function('w', `return import(w);//${Math.random()}`);\n }\n catch (e) {\n // this shim is specifically for browsers that do support \"esm\" imports\n // however, they do NOT support \"dynamic\" imports\n // basically this code is for old Edge, v18 and below\n const moduleMap = new Map();\n win[importFunctionName] = (src) => {\n var _a;\n const url = new URL(src, base).href;\n let mod = moduleMap.get(url);\n if (!mod) {\n const script = doc.createElement('script');\n script.type = 'module';\n script.crossOrigin = orgScriptElm.crossOrigin;\n script.src = URL.createObjectURL(new Blob([`import * as m from '${url}'; window.${importFunctionName}.m = m;`], {\n type: 'application/javascript',\n }));\n // Apply CSP nonce to the script tag if it exists\n const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);\n if (nonce != null) {\n script.setAttribute('nonce', nonce);\n }\n mod = new Promise((resolve) => {\n script.onload = () => {\n resolve(win[importFunctionName].m);\n script.remove();\n };\n });\n moduleMap.set(url, mod);\n doc.head.appendChild(script);\n }\n return mod;\n };\n }\n};\nconst patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function (deep) {\n if (this.nodeName === 'TEMPLATE') {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n // Node.ATTRIBUTE_NODE === 2, and checking because IE11\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport { patchBrowser };\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(options => {\n globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wcs-core",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "Web Components SNCF",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",
@@ -27,7 +27,8 @@
27
27
  "update-version": "node scripts/update-version.js",
28
28
  "update-develop": "node scripts/update-develop-from-master.js",
29
29
  "storybook": "storybook dev -p 6006",
30
- "build-storybook": "storybook build"
30
+ "build-storybook": "storybook build",
31
+ "build-angular-libs": "cd angular && npm run build:wcs-angular && npm run build:wcs-formly"
31
32
  },
32
33
  "devDependencies": {
33
34
  "@babel/preset-env": "^7.20.2",
@@ -1 +0,0 @@
1
- {"version":3,"file":"native-select.component.js","sourceRoot":"","sources":["../../../src/components/native-select/native-select.component.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, ComponentInterface, State, Prop, Host, Element } from '@stencil/core';\nimport { SelectArrow } from '../select/select-arrow';\nimport { WcsSize } from \"../../shared-types\";\n\nexport type WcsNativeSelectSize = Extract<WcsSize, 'l' | 'm'>; // todo: move into common file with custom select\n\n\n\n/**\n * The `wcs-native-select` component is designed to accept a native <select> element as a slotted child. This choice\n * allows developers to bind the <select> element using the framework of their choice, without the need to re-expose all the\n * properties of the <select> and <option> elements in this component.\n *\n * The component wraps the native <select> element and provides custom styles and behavior, while preserving the native\n * functionality and accessibility.\n *\n * Example usage:\n *\n * <wcs-native-select>\n * <select>\n * <option value=\"option1\">Option 1</option>\n * <option value=\"option2\">Option 2</option>\n * <option value=\"option3\">Option 3</option>\n * </select>\n * </wcs-native-select>\n */\n@Component({\n tag: 'wcs-native-select',\n styleUrl: 'native-select.scss',\n shadow: true\n})\nexport class NativeSelect implements ComponentInterface {\n /**\n * The `size` property controls the size of the slotted `select` element by adjusting its padding.\n * There are two possible size options:\n * - 'm': medium size\n * - 'l': large size\n *\n * The default value is 'm'.\n */\n @Prop({ reflect: true }) size: WcsNativeSelectSize = 'm';\n\n @Element() private el!: HTMLWcsNativeSelectElement;\n\n @State() private expanded: boolean = false;\n @State() private disabled: boolean;\n\n private selectElement: HTMLSelectElement;\n private observer: MutationObserver;\n\n\n private readonly SLOTTED_SELECT_TRACKED_ATTRIBUTES_LIST = ['disabled'];\n\n componentWillLoad() {\n this.selectElement = this.el.querySelector('select');\n if (!this.selectElement) throw new Error(\"wcs-native-select must be used with a native slotted select, please refer to the documentation.\");\n\n this.onSelectedOptionChange();\n\n /**\n * We use an event listener to apply the default style to the select when user chose an active option\n */\n this.selectElement.addEventListener('change', () => {\n this.onSelectedOptionChange();\n });\n\n this.observer = new MutationObserver(mutations => {\n const hasSpiedAttrMutation = mutations.filter(m => this.SLOTTED_SELECT_TRACKED_ATTRIBUTES_LIST.includes(m.attributeName)).length > 0;\n if (hasSpiedAttrMutation) {\n this.updateHostAttributeWithSlottedSelect();\n }\n });\n this.updateHostAttributeWithSlottedSelect();\n this.observer.observe(this.selectElement, {attributes: true});\n }\n\n private onSelectedOptionChange(): void {\n if (this.isPlaceholderOptionSelected()) {\n this.applyPlaceholderStylesOnNativeSlottedSelectElement();\n } else {\n this.applySelectedOptionStylesOnNativeSlottedSelectElement();\n }\n }\n\n private isPlaceholderOptionSelected() {\n return Array.from(this.selectElement.options).filter(o => o.selected)[0]?.disabled == true;\n }\n\n /**\n * This method should always unset all styles modified by the `applyPlaceholderStylesOnNativeSlottedSelectElement()`\n * @private\n */\n private applySelectedOptionStylesOnNativeSlottedSelectElement() {\n this.selectElement.style.color = \"var(--wcs-primary)\";\n this.selectElement.style.fontStyle = 'normal';\n this.selectElement.style.fontWeight = '500';\n Array.from(this.selectElement.options).forEach(option => {\n option.style.fontStyle = 'normal';\n if (!option.disabled) {\n option.style.color = \"black\";\n }\n });\n }\n\n /**\n * This method apply styles when the placeholder is shown.\n *\n * We use javascript because we cannot achieve that behaviour in pure css when the native select is not required\n * @private\n */\n private applyPlaceholderStylesOnNativeSlottedSelectElement() {\n this.selectElement.style.color = \"var(--wcs-text-medium)\";\n this.selectElement.style.fontWeight = '400';\n this.selectElement.style.fontStyle = 'italic';\n Array.from(this.selectElement.options).forEach(option => {\n option.style.fontStyle = 'normal';\n if (!option.disabled) {\n option.style.color = \"black\";\n }\n });\n }\n\n private updateHostAttributeWithSlottedSelect() {\n this.disabled = this.selectElement?.hasAttribute('disabled');\n }\n\n disconnectedCallback() {\n this.observer?.disconnect();\n this.selectElement?.removeEventListener(\"change\", () => {\n this.onSelectedOptionChange();\n });\n }\n\n render() {\n return (\n <Host class={`${this.expanded ? 'expanded' : ''}`} data-disabled={this.disabled} data-size={this.size}>\n <div class=\"select-wrapper\">\n <slot></slot>\n <div class=\"arrow-container\">\n <SelectArrow up={this.expanded}></SelectArrow>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"radio.component.js","sourceRoot":"","sources":["../../../src/components/radio/radio.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAgB,MAAM,EAAE,MAAM,eAAe,CAAC;AAGnH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAO7D,MAAM,OAAO,KAAK;;IACN,YAAO,GAAG,UAAU,cAAc,EAAE,EAAE,CAAC;gBAGiB,OAAO;;;mBAOvB,KAAK;oBAIjB,KAAK;;EAKzC,SAAS,CAAC,MAAqB;IAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;MAChE,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;MACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;EACL,CAAC;EAED,iBAAiB;IACb,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;MAC1B,yDAAyD;MACzD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;KACxC;EACL,CAAC;EAED,gBAAgB;IACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;MACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;MAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC,CAAA;EACN,CAAC;EAED,oBAAoB;IAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;MACpB,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,MAAM,EAAE,IAAI,CAAC,EAAE;MACf,KAAK,EAAE,IAAI,CAAC,KAAK;KACpB,CAAC,CAAC;EACP,CAAC;EAED,MAAM;IACF,OAAO,CACH,EAAC,IAAI,IAAC,IAAI,EAAC,QAAQ;MACf,aACI,EAAE,EAAE,IAAI,CAAC,OAAO,EAChB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,mBACR,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,kBAC9B,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG;MACtC,aAAO,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,IAAG,IAAI,CAAC,KAAK,CAAS,CACpD,CACV,CAAC;EACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ;AAED,IAAI,cAAc,GAAG,CAAC,CAAC","sourcesContent":["import { Component, ComponentInterface, h, Host, Prop, Element, Event, EventEmitter, Listen } from '@stencil/core';\nimport { RadioChosedEvent } from './radio-interface';\nimport { RadioGroupMode } from '../radio-group/radio-group-interface';\nimport { isEnterKey, isSpaceKey } from '../../utils/helpers';\n\n@Component({\n tag: 'wcs-radio',\n styleUrl: 'radio.scss',\n shadow: true\n})\nexport class Radio implements ComponentInterface {\n private inputId = `wcs-rb-${radioButtonIds++}`;\n private inputEl: HTMLInputElement;\n @Element() private el!: HTMLWcsRadioElement;\n @Prop({ reflect: true, mutable: false }) mode: RadioGroupMode = 'radio';\n\n @Prop({ mutable: true, reflect: true }) value: any | any[] | undefined | null;\n @Prop({ mutable: true, reflect: true }) label: string;\n /**\n * If `true`, the radio is selected.\n */\n @Prop({mutable: true, reflect: true}) checked = false;\n /**\n * If `true`, the user cannot interact with the radio.\n */\n @Prop({ mutable: true }) disabled = false;\n // FIXME renommer l'évènement c'est pas un onclick mais un onchange\n @Event({eventName: 'wcsRadioClick' }) wcsRadioClick: EventEmitter<RadioChosedEvent>\n\n @Listen('keydown')\n onKeyDown(_event: KeyboardEvent) {\n if ((isSpaceKey(_event) || isEnterKey(_event)) && !this.el.checked) {\n this.el.checked = true;\n this.emitRadioChangeEvent();\n }\n }\n\n componentWillLoad(): Promise<void> | void {\n if (this.value === undefined) {\n // If no value was given we use the text content instead.\n this.value = this.el.innerText || '';\n }\n }\n\n componentDidLoad() {\n this.inputEl = this.el.shadowRoot.querySelector('input');\n this.inputEl.addEventListener('change', _ => {\n this.emitRadioChangeEvent();\n this.checked = true;\n })\n }\n\n emitRadioChangeEvent() {\n this.wcsRadioClick.emit({\n label: this.label,\n source: this.el,\n value: this.value\n });\n }\n\n render() {\n return (\n <Host slot=\"option\">\n <input\n id={this.inputId}\n type=\"radio\"\n value={this.value}\n checked={this.checked}\n disabled={this.disabled}\n aria-disabled={this.disabled ? 'true' : null}\n aria-checked={`${this.checked}`}/>\n <label htmlFor={`${this.inputId}`}>{this.label}</label>\n </Host>\n );\n }\n}\n\nlet radioButtonIds = 0;\n"]}
@@ -1,2 +0,0 @@
1
- import{r as t,c as o,h as s,H as e,g as i}from"./p-a2df3a49.js";const a=":host{display:flex}:host([mode=radio]){flex-direction:column}:host([mode=radio]) ::slotted([slot=option]:first-child){margin-top:0}:host([mode=radio]) ::slotted([slot=option]:last-child){margin-bottom:0}:host([mode=radio]) ::slotted([slot=options]){margin-top:calc(var(--wcs-base-margin) / 2);margin-bottom:calc(var(--wcs-base-margin) / 2)}:host([mode=option]){display:inline-flex;flex-direction:row;padding:calc(var(--wcs-base-margin) / 4);background-color:#4d4f53;border-radius:0.6875rem}:host([mode=horizontal]){justify-content:space-between}";const n=class{constructor(s){t(this,s);this.wcsChange=o(this,"wcsChange",7);this.value=undefined;this.name=undefined;this.mode="radio"}onValueChangeHandler(t){this.updateOptionsState(t,true)}componentDidLoad(){if(this.value){this.updateOptionsState(this.value,true)}if(this.mode==="option"||this.mode==="horizontal"){for(const t of this.options){t.mode=this.mode}}}get options(){const t=this.el.querySelectorAll("wcs-radio");const o=this.el.querySelector("slot");return t.length!==0?t:o!==null?o.assignedElements():[]}selectedOptionChanged(t){this.updateOptionsState(t.detail.value,false);this.wcsChange.emit({value:t.detail.value})}updateOptionsState(t,o){for(const s of this.options){if(s.value!==t){s.removeAttribute("checked")}else{if(o){s.setAttribute("checked","")}}}}render(){return s(e,null,s("slot",{name:"option"}))}get el(){return i(this)}static get watchers(){return{value:["onValueChangeHandler"]}}};n.style=a;export{n as wcs_radio_group};
2
- //# sourceMappingURL=p-069555a1.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["radioGroupCss","RadioGroup","onValueChangeHandler","newValue","this","updateOptionsState","componentDidLoad","value","mode","option","options","opts","el","querySelectorAll","slot","querySelector","length","assignedElements","selectedOptionChanged","event","detail","wcsChange","emit","markAsChecked","removeAttribute","setAttribute","render","h","Host","name"],"sources":["./src/components/radio-group/radio-group.scss?tag=wcs-radio-group&encapsulation=shadow","./src/components/radio-group/radio-group.tsx"],"sourcesContent":[":host {\n display: flex;\n}\n\n:host([mode=radio]) {\n flex-direction: column;\n\n ::slotted([slot=option]:first-child) {\n margin-top: 0;\n }\n\n ::slotted([slot=option]:last-child) {\n margin-bottom: 0;\n }\n\n ::slotted([slot=options]) {\n margin-top: calc(var(--wcs-base-margin) / 2);\n margin-bottom: calc(var(--wcs-base-margin) / 2);\n }\n}\n\n:host([mode=option]) {\n display: inline-flex;\n flex-direction: row;\n padding: calc(var(--wcs-base-margin) / 4);\n background-color: #4d4f53;\n border-radius: 0.6875rem;\n}\n\n:host([mode=horizontal]) {\n justify-content: space-between;\n}\n","import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n Watch\n} from '@stencil/core';\nimport { RadioGroupChangeEventDetail, RadioGroupMode } from './radio-group-interface';\nimport { RadioChosedEvent } from '../radio/radio-interface';\n\n@Component({\n tag: 'wcs-radio-group',\n styleUrl: 'radio-group.scss',\n shadow: true\n})\nexport class RadioGroup implements ComponentInterface {\n @Prop() value: any | any[] | undefined | null;\n @Prop({reflect: true, mutable: false}) name;\n @Prop({reflect: true, mutable: false}) mode: RadioGroupMode = 'radio';\n @Element() private el!: HTMLWcsRadioGroupElement;\n\n /** Emitted when the value has changed. */\n @Event() wcsChange!: EventEmitter<RadioGroupChangeEventDetail>;\n\n @Watch('value')\n onValueChangeHandler(newValue: any) {\n this.updateOptionsState(newValue, true);\n }\n\n componentDidLoad() {\n if (this.value) {\n this.updateOptionsState(this.value, true);\n }\n if (this.mode === 'option' || this.mode === 'horizontal') {\n for (const option of this.options) {\n option.mode = this.mode;\n }\n }\n }\n\n private get options(): HTMLWcsRadioElement[] {\n const opts = this.el.querySelectorAll('wcs-radio');\n const slot = this.el.querySelector('slot');\n return opts.length !== 0\n ? opts as unknown as HTMLWcsRadioElement[]\n : slot !== null\n ? slot.assignedElements() as HTMLWcsRadioElement[]\n : [];\n }\n\n @Listen('wcsRadioClick')\n selectedOptionChanged(event: CustomEvent<RadioChosedEvent>) {\n this.updateOptionsState(event.detail.value, false);\n this.wcsChange.emit({\n value: event.detail.value\n })\n }\n\n private updateOptionsState(value: string, markAsChecked: boolean) {\n for (const option of this.options) {\n if (option.value !== value) {\n option.removeAttribute('checked');\n } else {\n if (markAsChecked) {\n option.setAttribute('checked', '');\n }\n }\n }\n }\n\n render() {\n return (\n <Host>\n <slot name=\"option\"/>\n </Host>\n );\n }\n\n}\n"],"mappings":"gEAAA,MAAMA,EAAgB,oiB,MCoBTC,EAAU,M,iHAG2C,O,CAO9DC,qBAAqBC,GACjBC,KAAKC,mBAAmBF,EAAU,K,CAGtCG,mBACI,GAAIF,KAAKG,MAAO,CACZH,KAAKC,mBAAmBD,KAAKG,MAAO,K,CAExC,GAAIH,KAAKI,OAAS,UAAYJ,KAAKI,OAAS,aAAc,CACtD,IAAK,MAAMC,KAAUL,KAAKM,QAAS,CAC/BD,EAAOD,KAAOJ,KAAKI,I,GAKnBE,cACR,MAAMC,EAAOP,KAAKQ,GAAGC,iBAAiB,aACtC,MAAMC,EAAOV,KAAKQ,GAAGG,cAAc,QACnC,OAAOJ,EAAKK,SAAW,EACjBL,EACAG,IAAS,KACLA,EAAKG,mBACL,E,CAIdC,sBAAsBC,GAClBf,KAAKC,mBAAmBc,EAAMC,OAAOb,MAAO,OAC5CH,KAAKiB,UAAUC,KAAK,CAChBf,MAAOY,EAAMC,OAAOb,O,CAIpBF,mBAAmBE,EAAegB,GACtC,IAAK,MAAMd,KAAUL,KAAKM,QAAS,CAC/B,GAAID,EAAOF,QAAUA,EAAO,CACxBE,EAAOe,gBAAgB,U,KACpB,CACH,GAAID,EAAe,CACfd,EAAOgB,aAAa,UAAW,G,IAM/CC,SACI,OACIC,EAACC,EAAI,KACDD,EAAA,QAAME,KAAK,W"}
@@ -1,2 +0,0 @@
1
- import{r as t,c as s,h as e,H as i,g as a}from"./p-a2df3a49.js";const n=':host{--wcs-tabs-padding-bottom:16px}:host([align=start]) .wcs-tabs-headers{justify-content:start}:host([align=end]) .wcs-tabs-headers{justify-content:end}:host([align=center]) .wcs-tabs-headers{justify-content:center}.wcs-tabs-headers{padding-top:4px;overflow-x:auto;display:flex;position:relative}:host([gutter]) .wcs-tabs-headers{border-bottom:var(--wcs-tabs-headers-border-bottom)}.wcs-tab-header{padding:8px 24px 16px 0;display:flex;flex-shrink:0;align-items:center;justify-content:center;cursor:pointer;outline:none}.wcs-tab-header span{text-align:center;color:var(--wcs-text-disabled);font-size:1rem;font-weight:400}.wcs-tab-header:focus span,.wcs-tab-header:hover span{color:var(--wcs-primary)}.wcs-tab-header:focus-visible>span{outline:2px dashed var(--wcs-primary);outline-offset:4px;border-radius:0.1rem}.active span{font-weight:500;color:var(--wcs-primary);position:relative}.active span::after{position:absolute;bottom:calc(var(--wcs-tabs-padding-bottom) * -1);left:0;width:100%;height:0.3125rem;content:"";background-color:var(--wcs-primary);border-radius:3px}';const r=class{constructor(e){t(this,e);this.tabChange=s(this,"tabChange",7);this.align="start";this.selectedIndex=0;this.selectedKey=undefined;this.headersOnly=false;this.gutter=undefined;this.headers=[];this.currentActiveTabIndex=0}selectedIndexChanged(t){this.currentActiveTabIndex=t}selectedTabkeyChanged(t){this.updateCurrentActiveIndexByTabKey(t)}emitActiveTabChange(){this.tabChange.emit({tabName:this.headers[this.currentActiveTabIndex],tabIndex:this.currentActiveTabIndex,selectedKey:this.tabs[this.currentActiveTabIndex].itemKey})}updateCurrentActiveIndexByTabKey(t){for(let s=0;s<this.tabs.length;s++){const e=this.tabs[s];if(e.itemKey===t){this.currentActiveTabIndex=s}}}onTabLoaded(){this.refreshHeaders()}componentDidLoad(){this.putTabsInCorrectDivIfTheyAreNot();this.refreshHeaders();if(this.selectedIndex){this.currentActiveTabIndex=this.selectedIndex}if(this.selectedKey){this.updateCurrentActiveIndexByTabKey(this.selectedKey)}}putTabsInCorrectDivIfTheyAreNot(){const t=this.el.shadowRoot.querySelector(".wcs-tabs");if(t.querySelector("slot")===null){Array.from(this.el.querySelectorAll("wcs-tab")).filter((s=>s.parentNode!==t)).forEach((s=>{if(s.parentElement.isEqualNode(this.el)){this.el.removeChild(s);t.appendChild(s)}}))}}handleKeyDown(t,s){var e,i;const a=t.target;switch(t.key){case" ":case"Enter":{this.currentActiveTabIndex=s;this.emitActiveTabChange();t.preventDefault();break}case"ArrowLeft":{if((e=a.previousElementSibling)===null||e===void 0?void 0:e.classList.contains("wcs-tab-header")){a.previousElementSibling.focus();t.preventDefault()}break}case"ArrowRight":{if((i=a.nextElementSibling)===null||i===void 0?void 0:i.classList.contains("wcs-tab-header")){a.nextElementSibling.focus();t.preventDefault()}break}}}refreshHeaders(){this.headers=[];this.tabs.forEach((t=>{this.headers.push(t.getAttribute("header"))}))}get tabs(){var t;const s=this.el.shadowRoot.querySelector(".wcs-tabs");const e=this.el.shadowRoot.querySelectorAll(".wcs-tabs > wcs-tab");return e.length!==0?e:(s===null||s===void 0?void 0:s.querySelector("slot"))?(t=s===null||s===void 0?void 0:s.querySelector("slot"))===null||t===void 0?void 0:t.assignedElements():[]}selectTabAndEmitChangeEvent(t){this.currentActiveTabIndex=t;this.emitActiveTabChange()}componentWillUpdate(){if(!this.headersOnly){this.updateTabVisibility()}else{this.hideAllTabsContent()}}updateTabVisibility(){this.tabs.forEach(((t,s)=>{if(s!==this.currentActiveTabIndex){t.setAttribute("style","display: none;")}else{t.setAttribute("style","display: block;")}}))}hideAllTabsContent(){this.tabs.forEach((t=>t.setAttribute("style","display: none;")))}render(){return e(i,null,e("div",{class:"wcs-tabs-headers"},this.headers.map(((t,s)=>e("div",{class:"wcs-tab-header "+(this.currentActiveTabIndex===s?"active":""),onClick:()=>this.selectTabAndEmitChangeEvent(s),onKeyDown:t=>this.handleKeyDown(t,s),tabIndex:this.currentActiveTabIndex===s?0:-1},e("span",null,t))))),e("div",{class:"wcs-tabs"},e("slot",{name:"wcs-tab"})))}get el(){return a(this)}static get watchers(){return{selectedIndex:["selectedIndexChanged"],selectedKey:["selectedTabkeyChanged"]}}};r.style=n;export{r as wcs_tabs};
2
- //# sourceMappingURL=p-07b8cd36.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["tabsCss","Tabs","selectedIndexChanged","newValue","this","currentActiveTabIndex","selectedTabkeyChanged","updateCurrentActiveIndexByTabKey","emitActiveTabChange","tabChange","emit","tabName","headers","tabIndex","selectedKey","tabs","itemKey","i","length","tab","onTabLoaded","refreshHeaders","componentDidLoad","putTabsInCorrectDivIfTheyAreNot","selectedIndex","tabDiv","el","shadowRoot","querySelector","Array","from","querySelectorAll","filter","node","parentNode","forEach","parentElement","isEqualNode","removeChild","appendChild","handleKeyDown","ev","target","key","preventDefault","_a","previousElementSibling","classList","contains","focus","_b","nextElementSibling","x","push","getAttribute","tabsEl","assignedElements","selectTabAndEmitChangeEvent","index","componentWillUpdate","headersOnly","updateTabVisibility","hideAllTabsContent","idx","setAttribute","render","h","Host","class","map","header","onClick","onKeyDown","evt","name"],"sources":["./src/components/tabs/tabs.scss?tag=wcs-tabs&encapsulation=shadow","./src/components/tabs/tabs.tsx"],"sourcesContent":["@import '../../style/focus-outline.scss';\n\n:host {\n --wcs-tabs-padding-bottom: 16px;\n}\n\n:host([align=start]) .wcs-tabs-headers {\n justify-content: start;\n}\n\n:host([align=end]) .wcs-tabs-headers {\n justify-content: end;\n}\n\n:host([align=center]) .wcs-tabs-headers {\n justify-content: center;\n}\n\n.wcs-tabs-headers {\n padding-top: 4px;\n overflow-x: auto;\n display: flex;\n position: relative;\n}\n\n:host([gutter]) {\n .wcs-tabs-headers {\n border-bottom: var(--wcs-tabs-headers-border-bottom);\n }\n}\n\n.wcs-tab-header {\n padding: 8px 24px 16px 0;\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none;\n\n span {\n text-align: center;\n color: var(--wcs-text-disabled);\n font-size: 1rem;\n font-weight: 400;\n }\n\n\n &:focus,\n &:hover {\n span {\n color: var(--wcs-primary);\n }\n }\n\n &:focus-visible > span {\n @include focus-outline;\n }\n}\n\n\n.active {\n span {\n font-weight: 500;\n color: var(--wcs-primary);\n position: relative;\n }\n\n span::after {\n position: absolute;\n bottom: calc(var(--wcs-tabs-padding-bottom) * -1);\n left: 0;\n width: 100%;\n height: 0.3125rem;\n content: \"\";\n background-color: var(--wcs-primary);\n border-radius: 3px;\n }\n}\n","import {\n Component,\n Prop,\n Element,\n State,\n ComponentInterface,\n Event,\n EventEmitter,\n Watch,\n h,\n Host,\n Listen\n} from '@stencil/core';\n\nimport { WcsTabsAlignment, WcsTabChangeEvent } from './tabs-interface';\n\n/**\n * Tabs component to switch between tab content.\n * Use in conjuction with `wcs-tab`.\n *\n * @example\n * ```html\n * <wcs-tabs>\n * <wcs-tab header=\"One\">The content !</wcs-tab>\n * <wcs-tab header=\"Two\">More content !</wcs-tab>\n * </wcs-tabs>\n * ```\n */\n@Component({\n tag: 'wcs-tabs',\n styleUrl: 'tabs.scss',\n shadow: true,\n})\nexport class Tabs implements ComponentInterface {\n /**\n * Tab headers alignment.\n */\n @Prop({reflect: true}) align: WcsTabsAlignment = 'start';\n\n /**\n * Current selected tab index.\n * Starts at 0.\n */\n @Prop() selectedIndex: number = 0;\n\n @Prop() selectedKey: any;\n\n /**\n * Whether to skip rendering the tabpanel with the content of the selected tab. Use this prop if you plan to\n * separately render the tab content.\n */\n @Prop() headersOnly: boolean = false;\n /** Determines if tabs header should have a border at the bottom */\n @Prop() gutter: boolean;\n\n /**\n *\n * Emitted when the selected tab change.\n */\n @Event() tabChange!: EventEmitter<WcsTabChangeEvent>;\n\n @Element() private el!: HTMLWcsTabsElement;\n\n @State() private headers: string[] = [];\n\n @State() private currentActiveTabIndex = 0;\n\n @Watch('selectedIndex')\n selectedIndexChanged(newValue: number) {\n this.currentActiveTabIndex = newValue;\n }\n\n @Watch('selectedKey')\n selectedTabkeyChanged(newValue: any) {\n this.updateCurrentActiveIndexByTabKey(newValue);\n }\n\n private emitActiveTabChange() {\n this.tabChange.emit({\n tabName: this.headers[this.currentActiveTabIndex],\n tabIndex: this.currentActiveTabIndex,\n selectedKey: this.tabs[this.currentActiveTabIndex].itemKey\n });\n }\n\n private updateCurrentActiveIndexByTabKey(newValue: any) {\n for (let i = 0; i < this.tabs.length; i++) {\n const tab = this.tabs[i];\n if (tab.itemKey === newValue) {\n this.currentActiveTabIndex = i;\n }\n }\n }\n\n @Listen('tabLoaded')\n onTabLoaded() {\n this.refreshHeaders();\n }\n\n componentDidLoad() {\n this.putTabsInCorrectDivIfTheyAreNot();\n this.refreshHeaders();\n if (this.selectedIndex) {\n this.currentActiveTabIndex = this.selectedIndex;\n }\n if (this.selectedKey) {\n this.updateCurrentActiveIndexByTabKey(this.selectedKey);\n }\n }\n\n // XXX: Firefox < 63\n private putTabsInCorrectDivIfTheyAreNot() {\n const tabDiv = this.el.shadowRoot.querySelector('.wcs-tabs');\n if (tabDiv.querySelector('slot') === null) {\n Array.from(this.el.querySelectorAll('wcs-tab'))\n .filter(node => node.parentNode !== tabDiv)\n .forEach(tab => {\n if (tab.parentElement.isEqualNode(this.el)) {\n this.el.removeChild(tab);\n tabDiv.appendChild(tab);\n }\n });\n }\n }\n\n handleKeyDown(ev: KeyboardEvent, tabIndex: number) {\n const target = ev.target as HTMLDivElement;\n switch (ev.key) {\n case ' ':\n case 'Enter': {\n this.currentActiveTabIndex = tabIndex;\n this.emitActiveTabChange();\n ev.preventDefault();\n break;\n }\n case 'ArrowLeft': {\n if (target.previousElementSibling?.classList.contains('wcs-tab-header')) {\n (target.previousElementSibling as HTMLDivElement).focus();\n ev.preventDefault();\n }\n break;\n }\n case 'ArrowRight': {\n if (target.nextElementSibling?.classList.contains('wcs-tab-header')) {\n (target.nextElementSibling as HTMLDivElement).focus();\n ev.preventDefault();\n }\n break;\n }\n }\n }\n\n private refreshHeaders() {\n this.headers = [];\n this.tabs\n .forEach(x => {\n this.headers.push(x.getAttribute('header'));\n });\n }\n\n private get tabs() {\n const tabsEl = this.el.shadowRoot.querySelector('.wcs-tabs');\n // FIXME: problem with this selector being too greedy in ff < 63\n const tabs = this.el.shadowRoot.querySelectorAll('.wcs-tabs > wcs-tab');\n\n return tabs.length !== 0\n ? tabs\n : tabsEl?.querySelector('slot')\n ? tabsEl?.querySelector('slot')?.assignedElements() as unknown as NodeListOf<HTMLWcsTabElement>\n : [];\n }\n\n private selectTabAndEmitChangeEvent(index: number) {\n this.currentActiveTabIndex = index;\n this.emitActiveTabChange()\n }\n\n componentWillUpdate() {\n if (!this.headersOnly) {\n this.updateTabVisibility();\n } else {\n this.hideAllTabsContent();\n }\n }\n\n private updateTabVisibility() {\n this.tabs.forEach((el: HTMLWcsTabElement, idx: number) => {\n if (idx !== this.currentActiveTabIndex) {\n el.setAttribute('style', 'display: none;');\n } else {\n el.setAttribute('style', 'display: block;');\n }\n });\n }\n\n private hideAllTabsContent() {\n this.tabs.forEach((el: HTMLWcsTabElement) => el.setAttribute('style', 'display: none;'));\n }\n\n render() {\n return (\n <Host>\n <div class=\"wcs-tabs-headers\">\n {this.headers.map((header, idx) =>\n <div class={'wcs-tab-header ' + (this.currentActiveTabIndex === idx ? 'active' : '')}\n onClick={() => this.selectTabAndEmitChangeEvent(idx)}\n onKeyDown={evt => this.handleKeyDown(evt, idx)}\n tabIndex={this.currentActiveTabIndex === idx ? 0 : -1}\n >\n <span>{header}</span>\n </div>\n )}\n </div>\n <div class=\"wcs-tabs\">\n <slot name=\"wcs-tab\"/>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["getSortOrderInteger","sortOrder","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","REGEX","validate","uuid","test","byteToHex","i","push","toString","substr","stringify","arr","offset","arguments","length","undefined","toLowerCase","TypeError","v4","options","buf","rnds","random","symbolTag","isSymbol","value","isObjectLike","baseGetTag","arrayMap","array","iteratee","index","result","Array","INFINITY","symbolProto","Symbol","prototype","symbolToString","baseToString","isArray","call","objectCreate","Object","create","baseCreate","object","proto","isObject","copyArray","source","defineProperty","func","getNative","e","arrayEach","baseAssignValue","key","configurable","enumerable","writable","objectProto","hasOwnProperty","assignValue","objValue","eq","copyObject","props","customizer","isNew","newValue","nativeKeysIn","baseKeysIn","isProto","isPrototype","keysIn","isArrayLike","arrayLikeKeys","reIsDeepProp","reIsPlainProp","isKey","type","FUNC_ERROR_TEXT","memoize","resolver","memoized","args","apply","this","cache","has","get","set","Cache","MapCache","MAX_MEMOIZE_SIZE","memoizeCapped","size","clear","rePropName","reEscapeChar","stringToPath","string","charCodeAt","replace","match","number","quote","subString","castPath","toKey","baseGet","path","defaultValue","getPrototype","overArg","getPrototypeOf","baseAssign","keys","baseAssignIn","freeExports","exports","nodeType","freeModule","module","moduleExports","Buffer","root","allocUnsafe","cloneBuffer","buffer","isDeep","slice","constructor","copy","copySymbols","getSymbols","nativeGetSymbols","getOwnPropertySymbols","getSymbolsIn","stubArray","arrayPush","copySymbolsIn","getAllKeysIn","baseGetAllKeys","initCloneArray","input","cloneArrayBuffer","arrayBuffer","byteLength","cloneDataView","dataView","byteOffset","reFlags","cloneRegExp","regexp","exec","lastIndex","symbolValueOf","valueOf","cloneSymbol","symbol","cloneTypedArray","typedArray","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","stringTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","initCloneByTag","tag","Ctor","initCloneObject","baseIsMap","getTag","nodeIsMap","nodeUtil","isMap","baseUnary","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","argsTag","arrayTag","errorTag","funcTag","genTag","objectTag","weakMapTag","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isArr","isFunc","isBuffer","Stack","stacked","forEach","subValue","add","keysFunc","getAllKeys","cloneDeep","gridCss","Grid","onDataChange","updateGridRows","refreshSort","onSelectedItemsPropertyChange","updateSelectionWithValues","onHiddenColumnChange","forceUpdate","values","selectionConfig","rows","map","r","selected","row","isEqual","data","find","x","wcsGridRowToWcsGridRowData","page","columns","cells","column","content","formatter","updatePageIndex","componentDidLoad","getGridColumnsFromTemplate","paginationEl","wcsGridPaginationId","document","getElementById","getGridPaginationsFromTemplate","selectedItems","refreshOthersColmumnsSortOrderState","first","other","filter","c","serverMode","sortBy","disableSortOrderForColumns","slotted","el","shadowRoot","querySelector","assignedElements","sortChangeEventHandler","event","detail","order","colmun","sortFn","sort","a","b","itemsCount","pageCount","Math","ceil","pageSize","currentPage","GridPagination","INDEX_FIRST_PAGE","floor","paginationChangeEventHandler","onPaginationChange","paginationChangeEventHandlerOutside","target","id","onRowSelection","wcsGridSelectionChange","emit","selectAllRows","getRowsForCurrentPage","allRowsAreSelected","wcsGridAllSelectionChange","renderSelectionColumn","h","checked","onClick","onWcsChange","getCellContent","cell","totalColumnCount","render","Host","class","name","loading","colSpan","_a","renderRow","hidden","customCells","rowIdPath","part"],"sources":["./src/components/grid/grid-interface.ts","./node_modules/uuid/dist/esm-browser/rng.js","./node_modules/uuid/dist/esm-browser/regex.js","./node_modules/uuid/dist/esm-browser/validate.js","./node_modules/uuid/dist/esm-browser/stringify.js","./node_modules/uuid/dist/esm-browser/v4.js","./node_modules/lodash-es/isSymbol.js","./node_modules/lodash-es/_arrayMap.js","./node_modules/lodash-es/_baseToString.js","./node_modules/lodash-es/_baseCreate.js","./node_modules/lodash-es/_copyArray.js","./node_modules/lodash-es/_defineProperty.js","./node_modules/lodash-es/_arrayEach.js","./node_modules/lodash-es/_baseAssignValue.js","./node_modules/lodash-es/_assignValue.js","./node_modules/lodash-es/_copyObject.js","./node_modules/lodash-es/_nativeKeysIn.js","./node_modules/lodash-es/_baseKeysIn.js","./node_modules/lodash-es/keysIn.js","./node_modules/lodash-es/_isKey.js","./node_modules/lodash-es/memoize.js","./node_modules/lodash-es/_memoizeCapped.js","./node_modules/lodash-es/_stringToPath.js","./node_modules/lodash-es/toString.js","./node_modules/lodash-es/_castPath.js","./node_modules/lodash-es/_toKey.js","./node_modules/lodash-es/_baseGet.js","./node_modules/lodash-es/get.js","./node_modules/lodash-es/_getPrototype.js","./node_modules/lodash-es/_baseAssign.js","./node_modules/lodash-es/_baseAssignIn.js","./node_modules/lodash-es/_cloneBuffer.js","./node_modules/lodash-es/_copySymbols.js","./node_modules/lodash-es/_getSymbolsIn.js","./node_modules/lodash-es/_copySymbolsIn.js","./node_modules/lodash-es/_getAllKeysIn.js","./node_modules/lodash-es/_initCloneArray.js","./node_modules/lodash-es/_cloneArrayBuffer.js","./node_modules/lodash-es/_cloneDataView.js","./node_modules/lodash-es/_cloneRegExp.js","./node_modules/lodash-es/_cloneSymbol.js","./node_modules/lodash-es/_cloneTypedArray.js","./node_modules/lodash-es/_initCloneByTag.js","./node_modules/lodash-es/_initCloneObject.js","./node_modules/lodash-es/_baseIsMap.js","./node_modules/lodash-es/isMap.js","./node_modules/lodash-es/_baseIsSet.js","./node_modules/lodash-es/isSet.js","./node_modules/lodash-es/_baseClone.js","./node_modules/lodash-es/cloneDeep.js","./src/components/grid/grid.scss?tag=wcs-grid&encapsulation=shadow","./src/components/grid/grid.tsx"],"sourcesContent":["import { VNode } from '@stencil/core';\n\nexport type WcsGridSelectionConfig = 'none' | 'single' | 'multiple';\n\nexport type WcsSortFn = (a: any, b: any, column: HTMLWcsGridColumnElement) => -1 | 0 | 1;\n\nexport type WcsCellFormatter = (_h: HyperFunc<VNode>, column: HTMLWcsGridColumnElement, rowData: WcsGridRowData) => HTMLElement | HTMLElement[];\n\nexport interface WcsGridColumnSortChangeEventDetails {\n sortFn: WcsSortFn;\n order: WcsSortOrder;\n column: HTMLWcsGridColumnElement;\n}\n\nexport interface WcsGridRowSelectedEventDetails {\n row: WcsGridRowData;\n}\n\nexport interface WcsGridAllRowSelectedEventDetails {\n rows: WcsGridRowData[];\n}\n\nexport type WcsGridPaginationConfig = {\n currentPage: number;\n pageSize: number;\n itemsCount: number;\n pageCount: number;\n};\n\nexport interface WcsGridPaginationChangeEventDetails {\n pagination: WcsGridPaginationConfig;\n}\n\nexport type WcsSortOrder = 'asc' | 'desc' | 'none';\n\nexport function getSortOrderInteger(sortOrder: WcsSortOrder) {\n switch (sortOrder) {\n case 'asc':\n return 1;\n case 'desc':\n return -1;\n case 'none':\n break;\n }\n}\n\nexport interface WcsGridRow {\n uuid: string;\n page?: number;\n selected?: boolean;\n data?: any;\n cells?: WcsGridCell[];\n}\n\nexport interface WcsGridCell {\n content: string | void;\n column: HTMLWcsGridColumnElement;\n formatter: (_h: HyperFunc<VNode>, column: HTMLWcsGridColumnElement, rowData: WcsGridRowData) => HTMLElement | HTMLElement[];\n}\n\nexport interface WcsGridRowData {\n page: number;\n selected: boolean;\n data: any;\n}\n\nexport interface HyperFunc<T> {\n (tag: any): T;\n}\n\nexport interface HyperFunc<T> {\n (tag: any, data: any): T;\n}\n\nexport interface HyperFunc<T> {\n (tag: any, text: string): T;\n}\n\nexport interface HyperFunc<T> {\n (sel: any, children: (T | undefined | null)[]): T;\n}\n\nexport interface HyperFunc<T> {\n (sel: any, data: any, text: string): T;\n}\n\nexport interface HyperFunc<T> {\n (sel: any, data: any, children: (T | undefined | null)[]): T;\n}\n\nexport interface HyperFunc<T> {\n (sel: any, data: any, children: T): T;\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n",":host {\n display: block;\n --wcs-grid-highlight-color: var(--wcs-light);\n\n th {\n background-color: var(--wcs-light);\n }\n\n th:not(:first-child) {\n border-left: solid 1px var(--wcs-text-light);\n }\n\n // Remove the border for the first column\n ::slotted([slot=grid-column]:first-child) {\n --wcs-grid-column-border-left: none;\n }\n\n table {\n width: 100%;\n border-spacing: 0;\n }\n\n td {\n color: var(--wcs-gray-light);\n margin: 0;\n padding: calc(var(--wcs-padding) / 2) var(--wcs-padding);\n }\n\n tr:not(:last-child) td {\n border-bottom: solid 1px var(--wcs-text-light);\n }\n\n .wcs-grid-selection-column {\n padding: calc(var(--wcs-padding) / 2) var(--wcs-padding);\n width: 40px;\n }\n\n tr.selected {\n background-color: var(--wcs-grid-highlight-color);\n }\n\n .loading {\n text-align: center;\n }\n}\n\n// If the grid displays a selection column, we set the border on the\n// first data column (which has been disabled in :host)\n:host([selection]) {\n ::slotted([slot=grid-column]:first-child) {\n --wcs-grid-column-border-left: solid 1px var(--wcs-text-light) !important;\n }\n}\n","import {\n Component,\n ComponentDidLoad,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Prop,\n State,\n VNode,\n Watch\n} from '@stencil/core';\nimport {\n getSortOrderInteger,\n HyperFunc,\n WcsGridAllRowSelectedEventDetails,\n WcsGridCell,\n WcsGridColumnSortChangeEventDetails,\n WcsGridPaginationChangeEventDetails,\n WcsGridRow,\n WcsGridRowData,\n WcsGridRowSelectedEventDetails,\n WcsGridSelectionConfig\n} from './grid-interface';\nimport { v4 as uuid } from 'uuid';\nimport { cloneDeep, isEqual, get } from 'lodash-es';\nimport { GridPagination } from '../grid-pagination/grid-pagination';\n\n/**\n * The grid component is a complex component used as an HTML table to display collections of data.\n *\n * @cssprop --wcs-grid-highlight-color - Color for selected rows\n * @cssprop --wcs-grid-column-border-left - Left border of all grid headers\n * @slot grid-column - The slot containing the column of the grid in the `<thead>`\n * @slot grid-pagination - The slot containing the pagination of the grid below the `<table>`\n */\n@Component({\n tag: 'wcs-grid',\n styleUrl: 'grid.scss',\n shadow: true\n})\nexport class Grid implements ComponentInterface, ComponentDidLoad {\n @Element() private el!: HTMLWcsGridElement;\n /**\n * Manage sort and pagination with a backend server when set to `true`\n */\n @Prop() serverMode: boolean = false;\n /**\n * Contains the data to display in the table from a js object\n */\n @Prop() data: any[];\n /**\n * Flag to display a spinner during data loading\n */\n @Prop() loading: boolean;\n /**\n * Used to manage grid's row selection. \n * \"none\": no row can be selected. \n * \"multiple\": several rows can be selected. \n * \"single\": one row only can be selected. \n */\n @Prop() selectionConfig: WcsGridSelectionConfig = 'none';\n /**\n * Set the selected items (rows)\n */\n @Prop() selectedItems: any | any[] = [];\n /**\n * Automatically set by the component to reference the wcs-grid-pagination HTML element by its id.\n */\n @Prop() wcsGridPaginationId: string;\n /**\n * Name of the object's key that will be used to display the cells whose `keyValue` attribute matches to the\n * object's value for this key.\n */\n @Prop() rowIdPath: string;\n @State() private columns: HTMLWcsGridColumnElement[];\n @State() private paginationEl: HTMLWcsGridPaginationElement;\n /**\n * Rows to display, contains user data and meta data\n */\n @State() private rows: WcsGridRow[] = [];\n /**\n * Event emitted when a row is selected or unselected\n */\n @Event() wcsGridSelectionChange!: EventEmitter<WcsGridRowSelectedEventDetails>;\n /**\n * Event emitted when all rows are selected or unselected\n */\n @Event() wcsGridAllSelectionChange!: EventEmitter<WcsGridAllRowSelectedEventDetails>;\n\n @Watch('data')\n onDataChange(newValue: any[]): void {\n this.updateGridRows(newValue);\n this.refreshSort(false);\n }\n\n @Watch('selectedItems')\n onSelectedItemsPropertyChange(newValue: any | any[]) {\n this.updateSelectionWithValues(newValue);\n }\n\n @Listen('wcsHiddenChange')\n onHiddenColumnChange(): void {\n // We use forceUpdate because the fact of hiding a column or not does not modify the internal structure of the grid (WcsGridRow).\n // Hide a column only impacts the way it is rendered but the grid-column remains in the dom and in our internal model.\n forceUpdate(this);\n }\n\n private updateSelectionWithValues(values: any | any[]) {\n if (this.selectionConfig === 'single') {\n this.rows.map(r => r.selected = false);\n for (const row of this.rows) {\n if (isEqual(row.data, values)) {\n row.selected = true;\n break; // only one line can be selected\n }\n }\n } else if (this.selectionConfig === 'multiple') {\n this.rows.map(r => r.selected = false);\n for (const row of this.rows) {\n if (values.find(x => isEqual(x, row.data))) {\n row.selected = true;\n }\n }\n }\n this.rows = cloneDeep(this.rows);\n }\n\n private wcsGridRowToWcsGridRowData(row: WcsGridRow): WcsGridRowData {\n return {selected: row.selected, page: row.page, data: row.data};\n }\n\n private updateGridRows(data: any[]): void {\n const rows: WcsGridRow[] = [];\n if (data && this.columns) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < data.length; i++) {\n const row: WcsGridRow = {\n uuid: uuid(),\n data: data[i],\n selected: false,\n cells: []\n };\n for (const column of this.columns) {\n row.cells.push({\n content: get(data[i], column.path),\n column,\n formatter: column.formatter\n })\n }\n rows.push(row);\n }\n this.rows = rows;\n this.updatePageIndex();\n }\n }\n\n componentDidLoad(): void {\n this.columns = this.getGridColumnsFromTemplate();\n this.paginationEl = this.wcsGridPaginationId\n ? document.getElementById(this.wcsGridPaginationId) as HTMLWcsGridPaginationElement\n : this.getGridPaginationsFromTemplate()[0];\n this.updateGridRows(this.data);\n if (this.selectedItems) {\n this.updateSelectionWithValues(this.selectedItems);\n }\n this.refreshSort(true);\n }\n\n /**\n * Handle existing column's filters (defined before the grid is instantiated)\n * @private\n */\n private refreshSort(refreshOthersColmumnsSortOrderState: boolean) {\n //fixme: why the column property can be null or undefined?\n if (this.columns) {\n const [first, ...other] = this.columns.filter(c => c.sortOrder !== 'none');\n if (first && !this.serverMode) {\n this.sortBy(first);\n }\n refreshOthersColmumnsSortOrderState && this.disableSortOrderForColumns(other);\n }\n }\n\n private disableSortOrderForColumns(columns: HTMLWcsGridColumnElement[] | null | undefined): void {\n columns?.forEach(c => c.sortOrder = 'none');\n }\n\n private getGridColumnsFromTemplate(): HTMLWcsGridColumnElement[] {\n const slotted = this.el.shadowRoot.querySelector('slot[name=\"grid-column\"]') as HTMLSlotElement;\n return slotted.assignedElements() as any as HTMLWcsGridColumnElement[];\n }\n\n private getGridPaginationsFromTemplate(): HTMLWcsGridPaginationElement[] {\n const slotted = this.el.shadowRoot.querySelector('slot[name=\"grid-pagination\"]') as HTMLSlotElement;\n return slotted.assignedElements() as any as HTMLWcsGridPaginationElement[];\n }\n\n @Listen('wcsSortChange')\n sortChangeEventHandler(event: CustomEvent<WcsGridColumnSortChangeEventDetails>): void {\n if (event.detail.order === 'none') return;\n // We keep only one active sort column\n this.disableSortOrderForColumns(this.columns.filter(c => c !== event.detail.column));\n if (this.serverMode) return;\n this.sortBy(event.detail.column);\n this.updatePageIndex();\n }\n\n /**\n * Sorts the grid rows according to the given column's configuration\n * @param colmun Column from which to extract the sorting configuration\n * @private\n */\n private sortBy(colmun: HTMLWcsGridColumnElement) {\n if (colmun.sortFn) {\n this.rows = cloneDeep(this.rows)\n .sort((a: any, b: any) => colmun.sortFn(a.data, b.data, colmun) * getSortOrderInteger(colmun.sortOrder));\n } else {\n this.rows = cloneDeep(this.rows)\n .sort((a: any, b: any) => {\n const path = colmun.path;\n return ((get(a.data, path) < get(b.data, path)) ? -1 : (get(a.data, path) > get(b.data, path)) ? 1 : 0) * getSortOrderInteger(colmun.sortOrder);\n });\n }\n }\n\n /**\n * Update the page's number of all rows\n */\n private updatePageIndex(): void {\n if (!this.serverMode && this.paginationEl) {\n this.paginationEl.itemsCount = this.data.length;\n this.paginationEl.pageCount = Math.ceil(this.data.length / this.paginationEl.pageSize);\n\n if (this.paginationEl.pageCount <= 1) {\n this.paginationEl.currentPage = GridPagination.INDEX_FIRST_PAGE;\n } else if (this.paginationEl.pageCount > 0 && this.paginationEl.currentPage + 1 > this.paginationEl.pageCount) {\n this.paginationEl.currentPage = this.paginationEl.pageCount - 1;\n }\n\n const rows = cloneDeep(this.rows);\n rows.forEach((row: WcsGridRow, index: number) =>\n row.page = Math.floor(index / this.paginationEl.pageSize)\n );\n this.rows = [...rows];\n }\n }\n\n @Listen('wcsGridPaginationChange')\n paginationChangeEventHandler(): void {\n this.onPaginationChange();\n }\n\n @Listen('wcsGridPaginationChange', {target: 'window'})\n paginationChangeEventHandlerOutside(event: CustomEvent<WcsGridPaginationChangeEventDetails>): void {\n if (this.wcsGridPaginationId && this.wcsGridPaginationId === (event.target as HTMLElement).id) {\n this.onPaginationChange();\n }\n }\n\n private onPaginationChange(): void {\n if (this.serverMode) return;\n this.updatePageIndex();\n }\n\n private onRowSelection(row: WcsGridRow): void {\n if (this.selectionConfig === 'single') {\n this.rows.filter(r => r.uuid !== row.uuid).map(r => r.selected = false);\n }\n row.selected = !row.selected;\n if (this.selectionConfig !== 'single' || row.selected) {\n this.wcsGridSelectionChange.emit({row: this.wcsGridRowToWcsGridRowData(row)});\n }\n this.rows = cloneDeep(this.rows);\n }\n\n private selectAllRows(): void {\n const rows = this.getRowsForCurrentPage();\n const selected = !this.allRowsAreSelected();\n rows.map(r => r.selected = selected);\n this.wcsGridAllSelectionChange.emit({rows: selected ? rows.map(row => this.wcsGridRowToWcsGridRowData(row)) : []});\n this.rows = cloneDeep(this.rows);\n }\n\n private allRowsAreSelected(): boolean {\n const rows = this.getRowsForCurrentPage();\n return rows.length > 0 && rows.filter(row => row.selected).length === rows.length;\n }\n\n private getRowsForCurrentPage(): WcsGridRow[] {\n if (this.paginationEl) {\n return this.rows.filter(row => row.page === this.paginationEl.currentPage);\n }\n return this.rows;\n }\n\n renderSelectionColumn(row: WcsGridRow): any {\n switch (this.selectionConfig) {\n case 'none':\n return;\n case 'single':\n return <td>\n <wcs-radio checked={row.selected} onClick={this.onRowSelection.bind(this, row)}/>\n </td>;\n case 'multiple':\n return <td>\n <wcs-checkbox checked={row.selected} onWcsChange={this.onRowSelection.bind(this, row)}/>\n </td>;\n }\n }\n\n private getCellContent(row: WcsGridRow, cell: WcsGridCell): HTMLElement | HTMLElement[] | string | void {\n if (cell.formatter) {\n return cell.formatter(\n (h as unknown) as HyperFunc<VNode>,\n cell.column,\n this.wcsGridRowToWcsGridRowData(row)\n );\n }\n return cell.content;\n }\n\n private totalColumnCount() {\n if (!this.columns) {\n return 0;\n }\n return this.columns.length + (this.selectionConfig === 'none' ? 0 : 1);\n }\n\n render(): any {\n return (\n <Host>\n {\n <table>\n <thead>\n {\n this.selectionConfig === 'none' ? ''\n : <th class=\"wcs-grid-selection-column\">\n {\n this.selectionConfig === 'single' ? '' :\n <wcs-checkbox checked={this.allRowsAreSelected()}\n onWcsChange={this.selectAllRows.bind(this)}/>\n }\n </th>\n }\n <slot name=\"grid-column\"></slot>\n </thead>\n <tbody>\n {\n this.loading\n ? <tr>\n <td colSpan={this.totalColumnCount()} class=\"loading\">\n <wcs-spinner></wcs-spinner>\n </td>\n </tr>\n : this.rows\n ?.filter(row => this.serverMode || !this.paginationEl || row.page === this.paginationEl.currentPage)\n .map(row =>\n this.renderRow(row)\n )\n }\n </tbody>\n </table>\n }\n <slot name=\"grid-pagination\"></slot>\n </Host>\n );\n }\n\n private renderRow(row: WcsGridRow) {\n return <tr class={row.selected ? 'selected' : ''}>\n {this.renderSelectionColumn(row)}\n {row.cells?.map(cell => {\n if (cell.column.hidden) {\n return;\n }\n return cell.column.customCells\n ? (<td>\n <slot name={cell.column.id + '-' + row.data[this.rowIdPath]}/>\n </td>)\n : (<td part={cell.column.path + '-column'}>{this.getCellContent(row, cell)}</td>)\n }\n )}\n </tr>;\n }\n}\n\n/**\n * Pour resize le tableau\n * https://www.brainbell.com/javascript/making-resizable-table-js.htmls\n *\n */\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["nativeSelectCss","NativeSelect","this","SLOTTED_SELECT_TRACKED_ATTRIBUTES_LIST","componentWillLoad","selectElement","el","querySelector","Error","onSelectedOptionChange","addEventListener","observer","MutationObserver","mutations","hasSpiedAttrMutation","filter","m","includes","attributeName","length","updateHostAttributeWithSlottedSelect","observe","attributes","isPlaceholderOptionSelected","applyPlaceholderStylesOnNativeSlottedSelectElement","applySelectedOptionStylesOnNativeSlottedSelectElement","_a","Array","from","options","o","selected","disabled","style","color","fontStyle","fontWeight","forEach","option","hasAttribute","disconnectedCallback","disconnect","_b","removeEventListener","render","h","Host","class","expanded","size","SelectArrow","up"],"sources":["./src/components/native-select/native-select.scss?tag=wcs-native-select&encapsulation=shadow","./src/components/native-select/native-select.component.tsx"],"sourcesContent":["// TODO: voir pour mettre en commun avec le style du composant personnalisée\n@import '../../style/focus-outline.scss';\n\n:host {\n box-sizing: border-box;\n}\n\n::slotted(select) {\n box-sizing: border-box;\n -moz-appearance:none !important;\n -webkit-appearance: none !important;\n appearance: none !important;\n\n --wcs-select-native-ligther-percentage: 40;\n --wcs-select-native-border-radius: var(--wcs-border-radius);\n --wcs-select-native-background-color: var(--wcs-light);\n --wcs-select-native-placeholder-color: var(--wcs-text-medium);\n --wcs-select-native-value-color: var(--wcs-primary);\n --wcs-select-native-border-color: transparent;\n --wcs-select-native-overlay-max-height: 360px;\n --wcs-select-native-border-width: 2px;\n\n background-color: var(--wcs-select-native-background-color);\n\n color: var(--wcs-select-native-color);\n\n border-radius: var(--wcs-border-radius);\n border: none;\n\n outline: none;\n user-select: none;\n cursor: pointer;\n line-height: 1.5;\n font-size: 1rem;\n\n max-width: 100%;\n flex-grow: 1;\n padding-right: calc((var(--wcs-base-margin) * 2) + 24px);\n padding-left: calc(var(--wcs-base-margin) * 2);\n}\n\n::slotted(select:disabled) {\n cursor: not-allowed;\n color: var(--wcs-text-disabled);\n}\n\n:host([data-disabled]) {\n .select-wrapper {\n .arrow-container {\n .arrow {\n fill: var(--wcs-text-medium);\n }\n }\n }\n}\n\n:host([data-size=m]) {\n ::slotted(select) {\n height: var(--wcs-size-m);\n }\n}\n\n:host([data-size=l]) {\n ::slotted(select) {\n height: var(--wcs-size-l);\n }\n}\n\n::slotted(select:focus) {\n background-clip: padding-box;\n box-shadow: inset 0 0 0 var(--wcs-select-native-border-width) var(--wcs-primary);\n background-color: var(--wcs-white);\n}\n\n.select-wrapper {\n position: relative;\n\n display: flex;\n flex-wrap: nowrap;\n}\n\n// So the arrow on the right doesn't shrink when text overflows.\nsvg {\n flex-shrink: 0;\n}\n\n.arrow {\n fill: var(--wcs-primary);\n}\n\n.arrow-container {\n pointer-events: none;\n display: flex;\n align-items: center;\n vertical-align: center;\n\n position: absolute;\n top: 0;\n bottom: 0;\n right: calc(var(--wcs-padding) - 1px);\n margin: auto 0;\n}\n","import { Component, h, ComponentInterface, State, Prop, Host, Element } from '@stencil/core';\nimport { SelectArrow } from '../select/select-arrow';\nimport { WcsSize } from \"../../shared-types\";\n\nexport type WcsNativeSelectSize = Extract<WcsSize, 'l' | 'm'>; // todo: move into common file with custom select\n\n\n\n/**\n * The `wcs-native-select` component is designed to accept a native <select> element as a slotted child. This choice\n * allows developers to bind the <select> element using the framework of their choice, without the need to re-expose all the\n * properties of the <select> and <option> elements in this component.\n *\n * The component wraps the native <select> element and provides custom styles and behavior, while preserving the native\n * functionality and accessibility.\n *\n * Example usage:\n *\n * <wcs-native-select>\n * <select>\n * <option value=\"option1\">Option 1</option>\n * <option value=\"option2\">Option 2</option>\n * <option value=\"option3\">Option 3</option>\n * </select>\n * </wcs-native-select>\n */\n@Component({\n tag: 'wcs-native-select',\n styleUrl: 'native-select.scss',\n shadow: true\n})\nexport class NativeSelect implements ComponentInterface {\n /**\n * The `size` property controls the size of the slotted `select` element by adjusting its padding.\n * There are two possible size options:\n * - 'm': medium size\n * - 'l': large size\n *\n * The default value is 'm'.\n */\n @Prop({ reflect: true }) size: WcsNativeSelectSize = 'm';\n\n @Element() private el!: HTMLWcsNativeSelectElement;\n\n @State() private expanded: boolean = false;\n @State() private disabled: boolean;\n\n private selectElement: HTMLSelectElement;\n private observer: MutationObserver;\n\n\n private readonly SLOTTED_SELECT_TRACKED_ATTRIBUTES_LIST = ['disabled'];\n\n componentWillLoad() {\n this.selectElement = this.el.querySelector('select');\n if (!this.selectElement) throw new Error(\"wcs-native-select must be used with a native slotted select, please refer to the documentation.\");\n\n this.onSelectedOptionChange();\n\n /**\n * We use an event listener to apply the default style to the select when user chose an active option\n */\n this.selectElement.addEventListener('change', () => {\n this.onSelectedOptionChange();\n });\n\n this.observer = new MutationObserver(mutations => {\n const hasSpiedAttrMutation = mutations.filter(m => this.SLOTTED_SELECT_TRACKED_ATTRIBUTES_LIST.includes(m.attributeName)).length > 0;\n if (hasSpiedAttrMutation) {\n this.updateHostAttributeWithSlottedSelect();\n }\n });\n this.updateHostAttributeWithSlottedSelect();\n this.observer.observe(this.selectElement, {attributes: true});\n }\n\n private onSelectedOptionChange(): void {\n if (this.isPlaceholderOptionSelected()) {\n this.applyPlaceholderStylesOnNativeSlottedSelectElement();\n } else {\n this.applySelectedOptionStylesOnNativeSlottedSelectElement();\n }\n }\n\n private isPlaceholderOptionSelected() {\n return Array.from(this.selectElement.options).filter(o => o.selected)[0]?.disabled == true;\n }\n\n /**\n * This method should always unset all styles modified by the `applyPlaceholderStylesOnNativeSlottedSelectElement()`\n * @private\n */\n private applySelectedOptionStylesOnNativeSlottedSelectElement() {\n this.selectElement.style.color = \"var(--wcs-primary)\";\n this.selectElement.style.fontStyle = 'normal';\n this.selectElement.style.fontWeight = '500';\n Array.from(this.selectElement.options).forEach(option => {\n option.style.fontStyle = 'normal';\n if (!option.disabled) {\n option.style.color = \"black\";\n }\n });\n }\n\n /**\n * This method apply styles when the placeholder is shown.\n *\n * We use javascript because we cannot achieve that behaviour in pure css when the native select is not required\n * @private\n */\n private applyPlaceholderStylesOnNativeSlottedSelectElement() {\n this.selectElement.style.color = \"var(--wcs-text-medium)\";\n this.selectElement.style.fontWeight = '400';\n this.selectElement.style.fontStyle = 'italic';\n Array.from(this.selectElement.options).forEach(option => {\n option.style.fontStyle = 'normal';\n if (!option.disabled) {\n option.style.color = \"black\";\n }\n });\n }\n\n private updateHostAttributeWithSlottedSelect() {\n this.disabled = this.selectElement?.hasAttribute('disabled');\n }\n\n disconnectedCallback() {\n this.observer?.disconnect();\n this.selectElement?.removeEventListener(\"change\", () => {\n this.onSelectedOptionChange();\n });\n }\n\n render() {\n return (\n <Host class={`${this.expanded ? 'expanded' : ''}`} data-disabled={this.disabled} data-size={this.size}>\n <div class=\"select-wrapper\">\n <slot></slot>\n <div class=\"arrow-container\">\n <SelectArrow up={this.expanded}></SelectArrow>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"6FAAA,MAAMA,EAAkB,2nD,MC+BXC,EAAY,M,yBAoBJC,KAAAC,uCAAyC,CAAC,Y,UAXN,I,cAIhB,M,wBASrCC,oBACIF,KAAKG,cAAgBH,KAAKI,GAAGC,cAAc,UAC3C,IAAKL,KAAKG,cAAe,MAAM,IAAIG,MAAM,mGAEzCN,KAAKO,yBAKLP,KAAKG,cAAcK,iBAAiB,UAAU,KAC1CR,KAAKO,wBAAwB,IAGjCP,KAAKS,SAAW,IAAIC,kBAAiBC,IACjC,MAAMC,EAAuBD,EAAUE,QAAOC,GAAKd,KAAKC,uCAAuCc,SAASD,EAAEE,iBAAgBC,OAAS,EACnI,GAAIL,EAAsB,CACtBZ,KAAKkB,sC,KAGblB,KAAKkB,uCACLlB,KAAKS,SAASU,QAAQnB,KAAKG,cAAe,CAACiB,WAAY,M,CAGnDb,yBACJ,GAAIP,KAAKqB,8BAA+B,CACpCrB,KAAKsB,oD,KACF,CACHtB,KAAKuB,uD,EAILF,8B,MACJ,QAAOG,EAAAC,MAAMC,KAAK1B,KAAKG,cAAcwB,SAASd,QAAOe,GAAKA,EAAEC,WAAU,MAAE,MAAAL,SAAA,SAAAA,EAAEM,WAAY,I,CAOlFP,wDACJvB,KAAKG,cAAc4B,MAAMC,MAAQ,qBACjChC,KAAKG,cAAc4B,MAAME,UAAY,SACrCjC,KAAKG,cAAc4B,MAAMG,WAAa,MACtCT,MAAMC,KAAK1B,KAAKG,cAAcwB,SAASQ,SAAQC,IAC3CA,EAAOL,MAAME,UAAY,SACzB,IAAKG,EAAON,SAAU,CAClBM,EAAOL,MAAMC,MAAQ,O,KAWzBV,qDACJtB,KAAKG,cAAc4B,MAAMC,MAAQ,yBACjChC,KAAKG,cAAc4B,MAAMG,WAAa,MACtClC,KAAKG,cAAc4B,MAAME,UAAY,SACrCR,MAAMC,KAAK1B,KAAKG,cAAcwB,SAASQ,SAAQC,IAC3CA,EAAOL,MAAME,UAAY,SACzB,IAAKG,EAAON,SAAU,CAClBM,EAAOL,MAAMC,MAAQ,O,KAKzBd,uC,MACJlB,KAAK8B,UAAWN,EAAAxB,KAAKG,iBAAa,MAAAqB,SAAA,SAAAA,EAAEa,aAAa,W,CAGrDC,uB,SACId,EAAAxB,KAAKS,YAAQ,MAAAe,SAAA,SAAAA,EAAEe,cACfC,EAAAxC,KAAKG,iBAAa,MAAAqC,SAAA,SAAAA,EAAEC,oBAAoB,UAAU,KAC9CzC,KAAKO,wBAAwB,G,CAIrCmC,SACI,OACIC,EAACC,EAAI,CAACC,MAAO,GAAG7C,KAAK8C,SAAW,WAAa,KAAI,gBAAiB9C,KAAK8B,SAAQ,YAAa9B,KAAK+C,MAC7FJ,EAAA,OAAKE,MAAM,kBACPF,EAAA,aACAA,EAAA,OAAKE,MAAM,mBACPF,EAACK,EAAW,CAACC,GAAIjD,KAAK8C,a"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["textareaCss","Textarea","this","inputId","textareaIds","didBlurAfterEdit","inheritedAttributes","onInput","ev","nativeInput","value","wcsInput","emit","onFocus","hasFocus","focusChange","fireFocusEvents","wcsFocus","onBlur","wcsBlur","onKeyDown","checkClearOnEdit","debounceChanged","wcsChange","debounceEvent","debounce","valueChanged","getValue","runAutoGrow","connectedCallback","document","dispatchEvent","CustomEvent","detail","el","disconnectedCallback","componentWillLoad","inheritAttributes","componentDidLoad","raf","autoGrow","readTask","style","height","scrollHeight","async","focus","blur","getInputElement","Promise","resolve","clearOnEdit","hasValue","render","labelId","label","findItemLabel","id","Object","assign","resize","h","Host","disabled","icon","size","class","ref","autoCapitalize","autocapitalize","autoFocus","autofocus","enterKeyHint","enterkeyhint","inputMode","inputmode","maxLength","maxlength","minLength","minlength","name","placeholder","readOnly","readonly","required","spellcheck","cols","rows","wrap"],"sources":["./src/components/textarea/textarea.scss?tag=wcs-textarea&encapsulation=shadow","./src/components/textarea/textarea.tsx"],"sourcesContent":["@import '../../style/focus-outline.scss';\n\n:host {\n --wcs-textarea-icon-color: var(--wcs-text-medium);\n --wcs-internal-textarea-border-radius-left: var(--wcs-textarea-border-radius-left, var(--wcs-border-radius));\n --wcs-internal-textarea-border-radius-right: var(--wcs-textarea-border-radius-right, var(--wcs-border-radius));\n --wcs-internal-textarea-border-width: 2px;\n --wcs-textarea-max-height: unset;\n display: flex;\n flex-direction: row;\n width: 100%;\n border-radius: var(--wcs-internal-textarea-border-radius-left) var(--wcs-internal-textarea-border-radius-right) var(--wcs-internal-textarea-border-radius-right) var(--wcs-internal-textarea-border-radius-left);\n background-color: var(--wcs-light);\n border: var(--wcs-internal-textarea-border-width) solid var(--wcs-light);\n background-clip: padding-box;\n\n ::placeholder {\n font-weight: 400;\n font-style: italic;\n }\n\n textarea {\n overflow: auto;\n flex: 1;\n width: 100%;\n box-sizing: border-box;\n min-height: var(--wcs-size-m);\n max-height: var(--wcs-textarea-max-height);\n background-color: transparent;\n font-family: var(--wcs-font-sans-serif);\n color: var(--wcs-primary);\n font-weight: var(--wcs-font-weight-form-value) !important;\n border: none;\n // On divise --wcs-internal-input-border-width par deux car la valeur du padding est appliquée en haut et en bas\n padding: calc(calc(var(--wcs-padding) / 2) - calc(var(--wcs-internal-textarea-border-width) / 2)) calc(var(--wcs-padding) - var(--wcs-internal-textarea-border-width));\n font-size: 1rem;\n line-height: 1.5;\n }\n\n textarea:focus {\n box-shadow: none;\n outline: 0;\n }\n\n wcs-mat-icon {\n position: relative;\n margin-top: 7px;\n margin-left: 8px;\n margin-right: -8px;\n }\n}\n\n:host([disabled]) {\n textarea {\n color: var(--wcs-text-disabled);\n cursor: not-allowed;\n }\n}\n\n:host([state=error]) {\n border-color: var(--wcs-red) !important;\n}\n\n:host(:focus-within) {\n border: dashed var(--wcs-internal-textarea-border-width) var(--wcs-primary);\n\n wcs-mat-icon {\n color: var(--wcs-primary);\n }\n}\n","import {\n Component,\n ComponentInterface,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n EventEmitter,\n Element,\n Event,\n Build,\n readTask\n} from '@stencil/core';\nimport { debounceEvent, findItemLabel, inheritAttributes, raf } from '../../utils/helpers';\nimport { TextareaChangeEventDetail } from './textarea-interface';\n\n/**\n * Mainly inspired from Ionic Textarea Component\n *\n * @cssprop --wcs-textarea-max-height - Max height of the text area component\n *\n */\n@Component({\n tag: 'wcs-textarea',\n styleUrl: 'textarea.scss',\n shadow: true,\n})\nexport class Textarea implements ComponentInterface {\n private nativeInput?: HTMLTextAreaElement;\n private inputId = `wcs-textarea-${textareaIds++}`;\n private didBlurAfterEdit = false;\n private inheritedAttributes: { [k: string]: any } = {};\n\n /**\n * This is required for a WebKit bug which requires us to\n * blur and focus an input to properly focus the input in\n * an item with delegatesFocus. It will no longer be needed\n * with iOS 14.\n *\n * @internal\n */\n @Prop() fireFocusEvents = true;\n\n @Element() private el!: HTMLElement;\n\n @State() private hasFocus = false;\n\n /**\n * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.\n */\n @Prop() autocapitalize = 'none';\n\n /**\n * This Boolean attribute lets you specify that a form control should have input focus when the page loads.\n */\n @Prop() autofocus = false;\n\n /**\n * If `true`, the value will be cleared after focus upon edit. Defaults to `true` when `type` is `\"password\"`, `false` for all other types.\n */\n @Prop({mutable: true}) clearOnEdit = false;\n\n /**\n * Set the amount of time, in milliseconds, to wait to trigger the `wcsChange` event after each keystroke. This also impacts form bindings such as `ngModel` or `v-model`.\n */\n @Prop() debounce = 0;\n\n @Watch('debounce')\n protected debounceChanged() {\n this.wcsChange = debounceEvent(this.wcsChange, this.debounce);\n }\n\n /**\n * If `true`, the user cannot interact with the textarea.\n */\n @Prop() disabled = false;\n\n /**\n * Name of the material icon to add to the input\n */\n @Prop() icon: string;\n\n /**\n * A hint to the browser for which keyboard to display.\n * Possible values: `\"none\"`, `\"text\"`, `\"tel\"`, `\"url\"`,\n * `\"email\"`, `\"numeric\"`, `\"decimal\"`, and `\"search\"`.\n */\n @Prop() inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n\n /**\n * A hint to the browser for which enter key to display.\n * Possible values: `\"enter\"`, `\"done\"`, `\"go\"`, `\"next\"`,\n * `\"previous\"`, `\"search\"`, and `\"send\"`.\n */\n @Prop() enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';\n\n /**\n * If the value of the type attribute is `text`, `email`, `search`, `password`, `tel`, or `url`, this attribute specifies the maximum number of characters that the user can enter.\n */\n @Prop() maxlength?: number;\n\n /**\n * If the value of the type attribute is `text`, `email`, `search`, `password`, `tel`, or `url`, this attribute specifies the minimum number of characters that the user can enter.\n */\n @Prop() minlength?: number;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.inputId;\n\n /**\n * Instructional text that shows before the input has a value.\n */\n @Prop() placeholder?: string | null;\n\n /**\n * If `true`, the user cannot modify the value.\n */\n @Prop() readonly = false;\n\n /**\n * If `true`, the user must fill in a value before submitting a form.\n */\n @Prop() required = false;\n\n /**\n * If `true`, the element will have its spelling and grammar checked.\n */\n @Prop() spellcheck = false;\n\n /**\n * Specifies the state of the input. By default the input is in an initial state but you can set it to 'error' state if the data given by the user is not valid.\n */\n @Prop({reflect: true}) state: 'initial' | 'error' = 'initial';\n\n /**\n * The visible width of the text control, in average character widths. If it is specified, it must be a positive integer.\n */\n @Prop() cols?: number;\n\n /**\n * The number of visible text lines for the control.\n */\n @Prop() rows?: number;\n\n /**\n * Indicates how the control wraps text.\n */\n @Prop() wrap?: 'hard' | 'soft' | 'off';\n\n /**\n * If `true`, the element height will increase based on the value.\n */\n @Prop() autoGrow = false;\n\n /**\n * The value of the textarea.\n */\n @Prop({mutable: true}) value?: string | null = '';\n\n /**\n * Indicates how the textarea should be resizable.\n * Possible values 'both' | 'none' | 'vertical' | 'horizontal'\n */\n @Prop({reflect: true}) resize?: 'both' | 'none' | 'vertical' | 'horizontal';\n\n /**\n * Update the native input element when the value changes\n */\n @Watch('value')\n protected valueChanged() {\n const nativeInput = this.nativeInput;\n const value = this.getValue();\n if (nativeInput && nativeInput.value !== value) {\n nativeInput.value = value;\n }\n this.runAutoGrow();\n this.wcsChange.emit({value});\n }\n\n /**\n * Emitted when the input value has changed.\n */\n @Event() wcsChange!: EventEmitter<TextareaChangeEventDetail>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() wcsInput!: EventEmitter<KeyboardEvent>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() wcsBlur!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the input has focus.\n */\n @Event() wcsFocus!: EventEmitter<FocusEvent>;\n\n connectedCallback() {\n this.debounceChanged();\n if (Build.isBrowser) {\n document.dispatchEvent(new CustomEvent('wcsInputDidLoad', {\n detail: this.el\n }));\n }\n }\n\n disconnectedCallback() {\n if (Build.isBrowser) {\n document.dispatchEvent(new CustomEvent('wcsInputDidUnload', {\n detail: this.el\n }));\n }\n }\n\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['title']);\n }\n\n componentDidLoad() {\n raf(() => this.runAutoGrow());\n }\n\n private runAutoGrow() {\n const nativeInput = this.nativeInput;\n if (nativeInput && this.autoGrow) {\n readTask(() => {\n nativeInput.style.height = 'auto';\n nativeInput.style.height = nativeInput.scrollHeight + 'px';\n });\n }\n }\n\n /**\n * This method make the textarea automatically adopt the size of the content without a scroll bar\n */\n @Method()\n async fitContent() {\n raf(() => this.runAutoGrow());\n }\n\n /**\n * Sets focus on the native `textarea` in `wcs-textarea`. Use this method instead of the global\n * `textarea.focus()`.\n */\n @Method()\n async setFocus() {\n if (this.nativeInput) {\n this.nativeInput.focus();\n }\n }\n\n /**\n * Sets blur on the native `textarea` in `wcs-textarea`. Use this method instead of the global\n * `textarea.blur()`.\n * @internal\n */\n @Method()\n async setBlur() {\n if (this.nativeInput) {\n this.nativeInput.blur();\n }\n }\n\n /**\n * Returns the native `<textarea>` element used under the hood.\n */\n @Method()\n getInputElement(): Promise<HTMLTextAreaElement> {\n // tslint:disable-next-line:no-non-null-assertion\n return Promise.resolve(this.nativeInput!);\n }\n\n /**\n * Check if we need to clear the text input if clearOnEdit is enabled\n */\n private checkClearOnEdit() {\n if (!this.clearOnEdit) {\n return;\n }\n\n // Did the input value change after it was blurred and edited?\n if (this.didBlurAfterEdit && this.hasValue()) {\n // Clear the input\n this.value = '';\n }\n\n // Reset the flag\n this.didBlurAfterEdit = false;\n }\n\n private focusChange() {\n // If clearOnEdit is enabled and the input blurred but has a value, set a flag\n if (this.clearOnEdit && !this.hasFocus && this.hasValue()) {\n this.didBlurAfterEdit = true;\n }\n }\n\n private hasValue(): boolean {\n return this.getValue() !== '';\n }\n\n private getValue(): string {\n return this.value || '';\n }\n\n private onInput = (ev: Event) => {\n if (this.nativeInput) {\n this.value = this.nativeInput.value;\n }\n this.wcsInput.emit(ev as KeyboardEvent);\n }\n\n private onFocus = (ev: FocusEvent) => {\n this.hasFocus = true;\n this.focusChange();\n\n if (this.fireFocusEvents) {\n this.wcsFocus.emit(ev);\n }\n }\n\n private onBlur = (ev: FocusEvent) => {\n this.hasFocus = false;\n this.focusChange();\n\n if (this.fireFocusEvents) {\n this.wcsBlur.emit(ev);\n }\n }\n\n private onKeyDown = () => {\n this.checkClearOnEdit();\n }\n\n render() {\n const value = this.getValue();\n const labelId = this.inputId + '-lbl';\n const label = findItemLabel(this.el);\n if (label) {\n label.id = labelId;\n }\n const style = {\n ...(this.resize && {'resize': this.resize})\n }\n\n return (\n <Host\n aria-disabled={this.disabled ? 'true' : null}\n >\n {this.icon ? (<wcs-mat-icon icon={this.icon} size=\"m\"></wcs-mat-icon>) : null}\n <textarea\n class=\"native-textarea\"\n aria-labelledby={label ? labelId : null}\n ref={el => this.nativeInput = el}\n autoCapitalize={this.autocapitalize}\n autoFocus={this.autofocus}\n enterKeyHint={this.enterkeyhint}\n inputMode={this.inputmode}\n disabled={this.disabled}\n maxLength={this.maxlength}\n minLength={this.minlength}\n name={this.name}\n placeholder={this.placeholder || ''}\n readOnly={this.readonly}\n required={this.required}\n spellcheck={this.spellcheck}\n cols={this.cols}\n rows={this.rows}\n wrap={this.wrap}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.onKeyDown}\n style={style}\n {...this.inheritedAttributes}\n >\n {value}\n </textarea>\n </Host>\n );\n }\n}\n\nlet textareaIds = 0;\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as s,c as t,h as a,H as o}from"./p-a2df3a49.js";const n=class{constructor(a){s(this,a);this.tabLoaded=t(this,"tabLoaded",7);this.header=undefined;this.itemKey=undefined}componentDidLoad(){this.tabLoaded.emit()}render(){return a(o,{slot:"wcs-tab"},a("slot",null))}};export{n as wcs_tab};
2
- //# sourceMappingURL=p-64dd7356.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Tab","componentDidLoad","this","tabLoaded","emit","render","h","Host","slot"],"sources":["./src/components/tab/tab.tsx"],"sourcesContent":["import { Component, Prop, h, Host, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Tab content component.\n * Use this component to specify the content of a component.\n */\n@Component({\n tag: 'wcs-tab',\n shadow: true,\n})\nexport class Tab {\n /**\n * The header you want to be displayed for this tab.\n */\n @Prop({ reflect: true }) header: string;\n\n @Prop() itemKey: any;\n\n // TODO: See if there is a solution that doesn't pollute the API.\n /**\n * Do not use, meant for internal use only.\n * @inner\n * @ignore\n */\n @Event()\n tabLoaded!: EventEmitter<void>;\n\n componentDidLoad() {\n this.tabLoaded.emit();\n }\n\n render() {\n return (\n <Host slot=\"wcs-tab\">\n <slot></slot>\n </Host>\n );\n }\n}\n"],"mappings":"+DAUaA,EAAG,M,2GAiBZC,mBACIC,KAAKC,UAAUC,M,CAGnBC,SACI,OACIC,EAACC,EAAI,CAACC,KAAK,WACPF,EAAA,a"}
@@ -1,2 +0,0 @@
1
- import{r as c,c as e,h as r,H as s}from"./p-a2df3a49.js";const t=':host{--wcs-checkbox-border-color:var(--wcs-text-medium);--wcs-checkbox-text-color:var(--wcs-text-medium);display:flex}:host([disabled]){--wcs-checkbox-border-color:var(--wcs-light);--wcs-checkbox-text-color:var(--wcs-text-disabled)}:host([disabled]) .wcs-container{cursor:not-allowed}.wcs-checkmark{transition:background-color 225ms cubic-bezier(0.17, 0.84, 0.44, 1), color 225ms cubic-bezier(0.17, 0.84, 0.44, 1)}.wcs-container{position:relative;font-size:1rem;user-select:none;font-weight:500;display:flex}.wcs-container:not([aria-disabled]){cursor:pointer}:host([label-alignment=top]) .wcs-container{align-items:start}:host([label-alignment=center]) .wcs-container{align-items:center}:host([label-alignment=bottom]) .wcs-container{align-items:flex-end}.wcs-container input{position:absolute;opacity:0;height:1px;width:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.wcs-container:hover:not([aria-disabled]),input:focus{--wcs-checkbox-border-color:var(--wcs-primary);--wcs-checkbox-text-color:var(--wcs-primary)}.wcs-container:has(input:focus-visible){outline:2px dashed var(--wcs-primary);outline-offset:4px;border-radius:calc(var(--wcs-border-radius) / 2)}@supports not selector(.wcs-container:has(input:focus-visible)){.wcs-container:focus-within{outline:2px dashed var(--wcs-primary);outline-offset:4px;border-radius:calc(var(--wcs-border-radius) / 2)}}.wcs-checkmark{flex:0 0 1.125rem;width:1.125rem;height:1.125rem;border:2px solid var(--wcs-checkbox-border-color);border-radius:3px}:host([indeterminate]) .wcs-checkmark{--wcs-checkbox-border-color:var(--wcs-primary);background:var(--wcs-primary)}.wcs-container:not([aria-disabled]) input:checked~.wcs-checkmark{background-color:var(--wcs-primary);--wcs-checkbox-border-color:var(--wcs-primary)}.wcs-container[aria-disabled] input:checked~.wcs-checkmark{background-color:var(--wcs-light);--wcs-checkbox-border-color:var(--wcs-light)}.wcs-checkmark:after{content:"";position:absolute;display:none}.wcs-container input:checked~.wcs-checkmark:after{display:flex}.wcs-container .wcs-checkmark:after{left:7px;width:5px;height:10px;border:solid var(--wcs-white, white);border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.wcs-container:not([aria-disabled]) input:checked~.text{--wcs-checkbox-text-color:var(--wcs-primary)}.text{color:var(--wcs-checkbox-text-color);margin-left:6px;font-weight:500;line-height:1.375}';const o=class{constructor(r){c(this,r);this.wcsChange=e(this,"wcsChange",7);this.checkboxId=`wcs-checkbox-${a++}`;this.name=this.checkboxId;this.indeterminate=false;this.checked=false;this.labelAlignment="center";this.disabled=false}handleChange(c){this.indeterminate=false;this.checked=!this.checked;this.wcsChange.emit({checked:this.checked})}render(){return r(s,null,r("label",{htmlFor:this.name,class:"wcs-container","aria-disabled":this.disabled},r("input",{onChange:c=>this.handleChange(c),checked:this.checked,class:"wcs-checkbox",type:"checkbox",name:this.name,disabled:this.disabled,id:this.name}),r("span",{class:"wcs-checkmark"}),r("span",{class:"text"},r("slot",null))))}};let a=0;o.style=t;export{o as wcs_checkbox};
2
- //# sourceMappingURL=p-6acbf38a.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["WcsCounterSizeValues","isWcsCounterSize","size","includes","counterCss","ANIMATION_DURATION","Counter","this","animateRunning","getCounterContainer","Array","from","el","shadowRoot","children","find","tagName","handleDecrement","min","undefined","value","step","notifyChange","animate","handleIncrement","max","direction","counterContainer","outliers","filter","span","classList","contains","add","forEach","remove","setTimeout","displayedValue","componentWillLoad","handleValueChange","console","error","join","valueChange","newVal","oldVal","setMinimumIfValueIsUndefinedOrNull","ensureValueIsNotOutOfMinMax","updateDisplayValueIfNoAnimationRunning","_a","onKeyDown","_event","isKeyup","preventDefault","isKeydown","isHomeKey","isEndKey","wcsChange","emit","render","h","Host","class","shape","tabindex","onClick","onBlur","event","wcsBlur","disabled","icon","id","role","label"],"sources":["./src/components/counter/counter-interface.ts","./src/components/counter/counter.scss?tag=wcs-counter&encapsulation=shadow","./src/components/counter/counter.tsx"],"sourcesContent":["import { WcsSize } from \"../../shared-types\";\n\nexport interface CounterChangeEventDetail {\n value: number;\n}\n\nexport const WcsCounterSizeValues = ['m', 'l'] as const; // as const keyword is used to infer and preserve the exact literal values of an array or object.\n\nexport type WcsCounterSize = Extract<WcsSize, typeof WcsCounterSizeValues[number]>;\n\nexport function isWcsCounterSize(size: string): size is WcsCounterSize {\n // @ts-ignore : ignore size type, as it is checked with WcsInputSizeValues\n return WcsCounterSizeValues.includes(size);\n}\n","@import '../../style/focus-outline.scss';\n\n@keyframes spin-animation-up {\n 0% {\n transform: translateY(0);\n transform-origin: center;\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n transform: translateY(30px);\n transform-origin: center;\n opacity: 1;\n }\n}\n\n@keyframes spin-animation-down {\n 0% {\n transform: translateY(0);\n transform-origin: center;\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n transform: translateY(-30px);\n transform-origin: center;\n opacity: 1;\n }\n}\n\n:host {\n box-sizing: border-box;\n height: var(--wcs-counter-host-height);\n --wcs-input-icon-color: var(--wcs-text-medium);\n --wcs-internal-input-border-radius: calc(var(--wcs-border-radius) * 10); // 80 px\n --wcs-internal-input-border-width: 2px;\n font-family: var(--wcs-font-sans-serif);\n font-size: var(--wcs-counter-font-size);\n font-weight: bold;\n display: flex;\n align-items: center;\n padding: var(--wcs-counter-host-padding);\n width: fit-content;\n overflow: hidden;\n border-radius: var(--wcs-internal-input-border-radius);\n background-color: var(--wcs-light);\n border: var(--wcs-internal-input-border-width) solid var(--wcs-light);\n background-clip: padding-box;\n\n .counter-container {\n height: var(--wcs-counter-host-height);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin: 0 calc(2* var(--wcs-base-margin));\n position: relative;\n }\n\n .outliers {\n position: absolute;\n }\n\n #outlier-down {\n top: calc((var(--wcs-counter-host-height) / 2) * -1);\n }\n\n #outlier-up {\n bottom: calc((var(--wcs-counter-host-height) / 2) * -1);\n }\n\n span.current-value {\n &:focus-visible {\n @include focus-outline;\n }\n }\n\n .animate-up {\n animation: spin-animation-up 0.175s ease-in-out;\n }\n\n .animate-down {\n animation: spin-animation-down 0.175s ease-in-out;\n }\n\n .hidden {\n opacity: 0;\n }\n}\n\n:host([size='m']) { // Default\n --wcs-counter-host-padding: 4px;\n --wcs-counter-host-height: var(--wcs-size-m);\n --wcs-counter-font-size: 1rem;\n}\n\n:host([size='l']) {\n --wcs-counter-host-padding: 8px;\n --wcs-counter-host-height: var(--wcs-size-l);\n --wcs-counter-font-size: 1.0625rem;\n}\n","import {\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch\n} from '@stencil/core';\nimport { isEndKey, isHomeKey, isKeydown, isKeyup } from '../../utils/helpers';\nimport { CounterChangeEventDetail, isWcsCounterSize, WcsCounterSize, WcsCounterSizeValues } from './counter-interface';\n\nconst ANIMATION_DURATION = 0.175 // seconds\n\n/**\n * Counter component, meant to be used for small range of values (e.g : 0 - 5).<br>\n * For larger or specific ranges, please use [wcs-input (type number)](.?path=/docs/components-input--documentation)\n */\n@Component({\n tag: 'wcs-counter',\n styleUrl: 'counter.scss',\n shadow: true,\n})\nexport class Counter implements ComponentInterface {\n @Element() private el!: HTMLElement;\n\n /**\n * Specify the size (height) of the counter.\n */\n @Prop({reflect: true}) size: WcsCounterSize = 'm';\n\n /**\n * The label of the counter.<br/>\n * e.g. Number of passengers, train carriages, railroad tracks...\n */\n @Prop({mutable: false}) label!: string;\n\n /**\n * The minimum value of the counter.\n * If the value of the min attribute isn't set, then the element has no minimum value.\n */\n @Prop({mutable: true}) min?: number;\n\n /**\n * The maximum value of the counter.\n * If the value of the max attribute isn't set, then the element has no maximum value.\n */\n @Prop({mutable: true}) max?: number;\n\n /**\n * Defines by how much the counter will be incremented or decremented.\n */\n @Prop({mutable: true}) step: number = 1;\n\n /**\n * Emitted when the value of the counter has changed.\n */\n @Event() wcsChange!: EventEmitter<CounterChangeEventDetail>;\n\n /**\n * The current value of the counter.\n */\n @Prop({mutable: true}) value!: number;\n\n /**\n * Only for animation and display purpose\n */\n @State() private displayedValue: number;\n\n private animateRunning = false;\n\n /**\n * Emitted when the counter loses focus.\n */\n @Event() wcsBlur!: EventEmitter<FocusEvent>;\n\n componentWillLoad() {\n this.handleValueChange();\n\n if (!isWcsCounterSize(this.size)) {\n console.error(`Invalid size value for wcs-counter : \"${this.size}\". Must be one of \"${WcsCounterSizeValues.join(', ')}\"`);\n this.size = \"m\"; // Default fallback value\n }\n }\n\n /**\n * Current value change => handle event and interval\n */\n @Watch('value')\n valueChange(newVal: any, oldVal: any) {\n if(oldVal === newVal) return;\n\n this.handleValueChange();\n }\n\n private handleValueChange() {\n this.setMinimumIfValueIsUndefinedOrNull();\n this.ensureValueIsNotOutOfMinMax();\n this.updateDisplayValueIfNoAnimationRunning();\n }\n\n private updateDisplayValueIfNoAnimationRunning() {\n if (!this.animateRunning) {\n this.displayedValue = this.value;\n }\n }\n\n private ensureValueIsNotOutOfMinMax() {\n if (this.max !== undefined && this.value > this.max) {\n this.value = this.max;\n } else if (this.min !== undefined && this.value < this.min) {\n this.value = this.min;\n }\n }\n\n private setMinimumIfValueIsUndefinedOrNull() {\n if (this.value === undefined || this.value === null) {\n this.value = this.min ?? 0;\n }\n }\n\n onKeyDown(_event: KeyboardEvent) {\n if (isKeyup(_event)) {\n _event.preventDefault();\n this.handleIncrement()\n }\n if (isKeydown(_event)) {\n _event.preventDefault();\n this.handleDecrement()\n }\n if (isHomeKey(_event)) {\n _event.preventDefault();\n if (this.min != null) {\n this.value = this.min;\n this.displayedValue = this.value;\n this.notifyChange();\n }\n }\n if (isEndKey(_event)) {\n _event.preventDefault();\n if (this.max != null) {\n this.value = this.max;\n this.displayedValue = this.value;\n this.notifyChange();\n }\n }\n }\n\n private notifyChange() {\n this.wcsChange.emit({\n value: this.value\n });\n }\n \n private getCounterContainer = (): HTMLDivElement => {\n return Array.from(this.el.shadowRoot.children)\n .find(el => el.tagName === 'DIV') as HTMLDivElement;\n }\n\n private handleDecrement = () => {\n if (this.min === undefined || this.value > this.min) {\n // we set animateRunning here to prevent the watch method on value prop from affecting the displayed value\n // before the animation runs.\n this.animateRunning = true; \n this.value -= this.step;\n this.notifyChange();\n this.animate('up');\n }\n };\n\n private handleIncrement = () => {\n if (this.max === undefined || this.value < this.max) {\n // we set animateRunning here to prevent the watch method on value prop from affecting the displayed value\n // before the animation runs.\n this.animateRunning = true; \n this.value += this.step;\n this.notifyChange();\n this.animate('down');\n }\n };\n\n private animate = (direction: 'up' | 'down'): void => {\n // In case someone call animate function, we want ensured that animateRunning is set to true to prevent other \n // method to mutate the displayedValue.\n this.animateRunning = true; \n\n const counterContainer = this.getCounterContainer();\n const outliers = Array.from(counterContainer.children)\n .filter((span: HTMLSpanElement) => span.classList.contains('outliers'));\n\n counterContainer.classList.add('animate-' + direction);\n outliers.forEach((span: HTMLSpanElement) => {\n span.classList.remove('hidden')\n });\n setTimeout(() => {\n counterContainer.classList.remove('animate-' + direction);\n outliers.forEach((span: HTMLSpanElement) => {\n span.classList.add('hidden')\n });\n this.displayedValue = this.value;\n\n this.animateRunning = false;\n }, 1000 * ANIMATION_DURATION - 20);\n }\n\n render() {\n return (\n <Host>\n <wcs-button class=\"wcs-primary\"\n shape=\"round\"\n size=\"s\"\n tabindex={-1}\n onClick={() => this.handleDecrement()}\n onBlur={(event) => this.wcsBlur.emit(event)}\n disabled={this.value === this.min}>\n <wcs-mat-icon icon=\"remove\" size=\"s\"></wcs-mat-icon>\n </wcs-button>\n <div class=\"counter-container\">\n <span id=\"outlier-down\" class=\"outliers hidden\"\n aria-hidden=\"true\">{this.displayedValue - this.step}</span>\n <span tabindex=\"0\"\n role=\"spinbutton\"\n class=\"current-value\"\n onBlur={(event) => this.wcsBlur.emit(event)}\n onKeyDown={(event) => this.onKeyDown(event)}\n aria-valuenow={this.value}\n aria-valuetext={this.value}\n aria-valuemin={this.min}\n aria-valuemax={this.max}\n aria-label={this.label}>{this.displayedValue}</span>\n <span id=\"outlier-up\" class=\"outliers hidden\"\n aria-hidden=\"true\">{this.displayedValue + this.step}</span>\n </div>\n <wcs-button class=\"wcs-primary\"\n shape=\"round\"\n size=\"s\"\n tabindex={-1}\n onClick={() => this.handleIncrement()}\n onBlur={(event) => this.wcsBlur.emit(event)}\n disabled={this.value === this.max}>\n <wcs-mat-icon icon=\"add\" size=\"s\"></wcs-mat-icon>\n </wcs-button>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as t,h as o,H as s,g as i}from"./p-a2df3a49.js";import{S as e}from"./p-d6c3e615.js";import{g as r,d as n,c as a,b as p}from"./p-12ac2547.js";import{c as d}from"./p-314d3097.js";function c(t){return t===document.activeElement}const h=':host{display:flex}wcs-button{--wcs-button-padding:8px 10px 8px 16px !important}:host([no-arrow]) wcs-button{--wcs-button-padding:8px 16px 8px 16px !important}:host([shape=small]) wcs-button{--wcs-button-padding:2px 10px 2px 16px !important}:host([shape=small][no-arrow]) wcs-button{--wcs-button-padding:2px 16px 2px 16px !important}.wcs-button-content-wrapper{display:flex}.popover{display:none;border:1px solid #d7d7d7;border-radius:var(--wcs-border-radius);background-color:var(--wcs-white);z-index:9999}.show{display:block}.container{border-radius:inherit;overflow:hidden;padding:calc(var(--wcs-padding) / 2) 0;background-color:var(--wcs-white)}#arrow,#arrow::before{position:absolute;width:8px;height:8px;background:inherit;border:solid 1px #d7d7d7}#arrow{visibility:hidden;z-index:-1}#arrow::before{visibility:visible;content:"";transform:rotate(45deg)}.popover[data-popper-placement^=top]>#arrow{bottom:-5px}.popover[data-popper-placement^=bottom]>#arrow{top:-6px}.popover[data-popper-placement^=left]>#arrow{right:-4px}.popover[data-popper-placement^=right]>#arrow{left:-6px}';const l=class{constructor(o){t(this,o);this.noArrow=false;this.mode="stroked";this.shape="normal";this.disabled=false;this.placement="bottom-end";this.expanded=false}placementChange(){this.popper.setOptions(Object.assign(Object.assign({},this.popper.state.options),{placement:this.placement})).then((t=>this.popper.update()))}componentDidLoad(){const t=this.el.shadowRoot.querySelector("wcs-button");const o=t.shadowRoot.querySelector("button");this.buttonTextColor=window.getComputedStyle(o).color;const s=this.el.shadowRoot.querySelector(".popover");this.popper=d(t,s,{placement:this.placement,modifiers:[{name:"offset",options:{offset:[0,8]}}]});if(!this.noArrow){this.el.shadowRoot.querySelector(".arrow").style.fill=this.buttonTextColor}this.fixForFirefoxBelow63()}fixForFirefoxBelow63(){const t=this.el.querySelectorAll("wcs-dropdown-item");const o=this.el.querySelector(".container");if(t.length>0&&o){t.forEach((t=>{this.el.removeChild(t);o.appendChild(t)}))}}onButtonClick(t){this.expanded=!this.expanded}onWindowClickEvent(t){const o=r(t,this.el);if(this.expanded&&!o){this.expanded=false}}dropdownItemClick(t){this.expanded=false}onKeyDown(t){if(this.expanded&&(n(t)||a(t))){t.preventDefault();const o=Array.from(this.el.querySelectorAll("wcs-dropdown-item"));const s=o.findIndex((t=>c(t)));if(s===-1&&n(t)){this.focusFirstItemIfPresent(o)}else{this.moveFocusedItemByDirection(o,s,n(t)?"down":"up")}}if(this.expanded&&p(t)){this.closeOverlayAndFocusButton()}}focusFirstItemIfPresent(t){if(t[0]){t[0].focus()}}moveFocusedItemByDirection(t,o,s){const i=t[o+(s==="down"?1:-1)];if(i){i.focus()}}closeOverlayAndFocusButton(){this.expanded=!this.expanded;const t=this.el.shadowRoot.querySelector("wcs-button");t.focus()}componentDidRender(){if(this.popper){this.popper.update()}if(!this.noArrow){this.el.shadowRoot.querySelector(".arrow").style.fill=this.buttonTextColor}}render(){return o(s,null,o("wcs-button",{mode:this.mode,shape:this.shape,disabled:this.disabled,onClick:t=>this.onButtonClick(t)},o("div",{class:"wcs-button-content-wrapper"},o("slot",{name:"placeholder"}),this.noArrow?null:o(e,{up:this.expanded}))),o("div",{class:(this.expanded?"show ":"")+"popover"},o("div",{id:"arrow","data-popper-arrow":true}),o("div",{class:"container"},o("slot",{name:"item"}))))}get el(){return i(this)}static get watchers(){return{placement:["placementChange"]}}};l.style=h;export{l as wcs_dropdown};
2
- //# sourceMappingURL=p-732b2faa.entry.js.map