@iamproperty/components 7.6.4--beta1 → 7.6.4--beta3

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 (137) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/address-lookup.component.css +1 -1
  4. package/assets/css/components/address-lookup.component.css.map +1 -1
  5. package/assets/css/components/calendar.component.css +1 -1
  6. package/assets/css/components/calendar.component.css.map +1 -1
  7. package/assets/css/components/fileupload.css +1 -1
  8. package/assets/css/components/fileupload.css.map +1 -1
  9. package/assets/css/components/multiselect.css +1 -1
  10. package/assets/css/components/multiselect.css.map +1 -1
  11. package/assets/css/components/multiselect.preload.css +1 -1
  12. package/assets/css/components/multiselect.preload.css.map +1 -1
  13. package/assets/css/components/nav.component.css +1 -1
  14. package/assets/css/components/nav.component.css.map +1 -1
  15. package/assets/css/components/pagination.css +1 -1
  16. package/assets/css/components/pagination.css.map +1 -1
  17. package/assets/css/components/slider.css +1 -1
  18. package/assets/css/components/slider.css.map +1 -1
  19. package/assets/css/components/tag.component.css +1 -1
  20. package/assets/css/components/tag.component.css.map +1 -1
  21. package/assets/css/components/tag.preload.css +1 -1
  22. package/assets/css/components/tag.preload.css.map +1 -1
  23. package/assets/css/core.min.css +1 -1
  24. package/assets/css/core.min.css.map +1 -1
  25. package/assets/css/style.min.css +1 -1
  26. package/assets/css/style.min.css.map +1 -1
  27. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  28. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  29. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  30. package/assets/js/components/address-lookup/address-lookup.component.js +11 -5
  31. package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
  32. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  33. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  34. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  35. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  36. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  37. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  38. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  39. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  40. package/assets/js/components/calendar/calendar.component.min.js.map +1 -1
  41. package/assets/js/components/card/card.component.min.js +1 -1
  42. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  43. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  44. package/assets/js/components/content/content.component.min.js +1 -1
  45. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  46. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  47. package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
  48. package/assets/js/components/fileupload/fileupload.component.min.js +2 -2
  49. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  50. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  51. package/assets/js/components/form/form.component.js +68 -0
  52. package/assets/js/components/form/form.component.min.js +9 -0
  53. package/assets/js/components/form/form.component.min.js.map +1 -0
  54. package/assets/js/components/header/header.component.min.js +1 -1
  55. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  56. package/assets/js/components/input/input.component.js +7 -5
  57. package/assets/js/components/input/input.component.min.js +2 -2
  58. package/assets/js/components/input/input.component.min.js.map +1 -1
  59. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  60. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  61. package/assets/js/components/menu/menu.component.min.js +1 -1
  62. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  63. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  64. package/assets/js/components/modal/modal.component.js +1 -1
  65. package/assets/js/components/modal/modal.component.min.js +2 -2
  66. package/assets/js/components/modal/modal.component.min.js.map +1 -1
  67. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  68. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
  69. package/assets/js/components/multiselect/multiselect.component.js +9 -76
  70. package/assets/js/components/multiselect/multiselect.component.min.js +4 -4
  71. package/assets/js/components/multiselect/multiselect.component.min.js.map +1 -1
  72. package/assets/js/components/nav/nav.component.min.js +2 -2
  73. package/assets/js/components/notification/notification.component.min.js +1 -1
  74. package/assets/js/components/pagination/pagination.component.min.js +3 -3
  75. package/assets/js/components/password/password.component.min.js +1 -1
  76. package/assets/js/components/popover/popover.component.min.js +1 -1
  77. package/assets/js/components/rank/rank.component.min.js +1 -1
  78. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  79. package/assets/js/components/rating/rating.component.min.js +1 -1
  80. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  81. package/assets/js/components/search/search.component.min.js +1 -1
  82. package/assets/js/components/search/search.component.min.js.map +1 -1
  83. package/assets/js/components/slider/slider.component.min.js +2 -2
  84. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  85. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +59 -2
  86. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +10 -9
  87. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  88. package/assets/js/components/table/table.component.min.js +1 -1
  89. package/assets/js/components/table/table.component.min.js.map +1 -1
  90. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  91. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  92. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  93. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  94. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  95. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  96. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  97. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  98. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  99. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  100. package/assets/js/components/tag/tag.component.js +6 -1
  101. package/assets/js/components/tag/tag.component.min.js +4 -4
  102. package/assets/js/components/tag/tag.component.min.js.map +1 -1
  103. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  104. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  105. package/assets/js/components/video-modal/video-modal.component.min.js +1 -1
  106. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  107. package/assets/js/modules/dropdown.js +97 -4
  108. package/assets/js/modules/helpers.js +26 -22
  109. package/assets/js/scripts.bundle.js +2 -2
  110. package/assets/js/scripts.bundle.js.map +1 -1
  111. package/assets/js/scripts.bundle.min.js +2 -2
  112. package/assets/js/scripts.bundle.min.js.map +1 -1
  113. package/assets/sass/_components.scss +0 -2
  114. package/assets/sass/_elements.scss +1 -0
  115. package/assets/sass/components/multiselect.preload.scss +0 -55
  116. package/assets/sass/components/multiselect.scss +172 -174
  117. package/assets/sass/components/tag.component.scss +38 -57
  118. package/assets/sass/components/tag.preload.scss +1 -26
  119. package/assets/sass/elements/dropdown.scss +87 -0
  120. package/assets/sass/elements/forms.scss +14 -14
  121. package/assets/sass/elements/icons.css +4 -4
  122. package/assets/sass/elements/input.scss +0 -14
  123. package/assets/sass/elements/textarea.scss +97 -0
  124. package/assets/sass/templates/form.scss +14 -5
  125. package/assets/ts/components/address-lookup/address-lookup.component.ts +12 -5
  126. package/assets/ts/components/form/form.component.ts +102 -0
  127. package/assets/ts/components/input/input.component.ts +8 -6
  128. package/assets/ts/components/modal/modal.component.ts +1 -1
  129. package/assets/ts/components/multiselect/multiselect.component.ts +10 -78
  130. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +83 -2
  131. package/assets/ts/components/tag/tag.component.ts +8 -11
  132. package/assets/ts/modules/dropdown.ts +117 -5
  133. package/assets/ts/modules/helpers.ts +32 -27
  134. package/dist/components.es.js +28 -28
  135. package/dist/components.umd.js +225 -211
  136. package/package.json +2 -2
  137. package/src/components/Form/Form.vue +22 -0
@@ -1 +1 @@
1
- {"version":3,"names":["window","triggerDynamicEvent","element","event","arguments","length","undefined","console","log","hasAttribute","splitEvents","getAttribute","events","parentNode","Array","from","JSON","parse","forEach","checkConditions","matches","value","runEvent","match","document","querySelector","concat","eventType","target","hideElement","classList","add","querySelectorAll","input","removeAttribute","showElement","remove","closest","setAttribute","populateForm","theEvent","Event","dispatchEvent","attribute","focus","changeEvent","submit","location","href","values","form","Object","keys","field","getElementById","tagName","innerHTML","disabled","checked","addEventListener","__awaiter","thisArg","_arguments","generator","body","checkElements","dataLayer","push","pageTitle","title","detailsTitle","textContent","summary","link","button","linkText","class","buttonText","HTMLElement","navigator","userAgent","indexOf","appVersion","hash","label","replace","dialog","detail","click","showModal","addAttribute","state","type","pageInput","page","_a","scrollIntoView","preventDefault","e","key","stopPropagation","progress","P","Promise","resolve","reject","fulfilled","step","next","rejected","throw","result","done","adopt","then","apply"],"sources":["modules/dynamicEvents.js","scripts.js","modules/helpers.js","modules/data-layer.js"],"sourcesContent":["// Create the event listeners\nwindow.triggerDynamicEvent = (element, event = 'change') => {\n console.log('event');\n if (element.hasAttribute('data-change-events') && event == 'change')\n splitEvents(element, element.getAttribute('data-change-events'));\n if (element.hasAttribute('data-click-events') && event == 'click')\n splitEvents(element, element.getAttribute('data-click-events'));\n};\nconst createDynamicEvents = () => {\n // Change event\n document.addEventListener('change', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-change-events]'))\n splitEvents(event.target, event.target.closest('[data-change-events]').getAttribute('data-change-events'));\n });\n document.addEventListener('keyup', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-change-events]'))\n splitEvents(event.target, event.target.closest('[data-change-events]').getAttribute('data-change-events'));\n });\n // Click event\n document.addEventListener('click', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-click-events]'))\n splitEvents(event.target, event.target.closest('[data-click-events]').getAttribute('data-click-events'));\n });\n};\n// Parse the JSON and trigger the events, this may be singular or multiple set of events\nconst splitEvents = (element, events) => {\n // an empty events will trigger looking up the dom chain for\n if (!events) {\n events = element.parentNode.getAttribute('data-change-events');\n }\n // If still empty bail out\n if (!events)\n return false;\n // Split out each event\n Array.from(JSON.parse(events)).forEach((event) => {\n checkConditions(element, event);\n });\n};\nconst checkConditions = (element, event) => {\n if ('matches' in event) {\n if (event['matches'] == 'any')\n runEvent(element, event, 'if');\n else if (element.value == event.matches)\n runEvent(element, event, 'if');\n else\n runEvent(element, event, 'else');\n return false;\n }\n else if ('in-list' in event) {\n // Pass the matched datalist element instead of the triggered element\n const match = document.querySelector(`${event['in-list']} option[value=\"${element.value}\"]`);\n if (document.querySelector(`${event['in-list']} option[value=\"${element.value}\"]`)) {\n runEvent(match, event, 'if');\n }\n else\n runEvent(match, event, 'else');\n return false;\n }\n else if ('event' in event) {\n runEvent(element, event, 'event');\n }\n};\nconst runEvent = (element, event, eventType) => {\n if (eventType in event == false)\n return false;\n switch (event[eventType]) {\n case 'hide':\n if (document.querySelector(event['target'])) {\n const hideElement = document.querySelector(event['target']);\n hideElement.classList.add('js-hide');\n Array.from(hideElement.querySelectorAll('[data-required]')).forEach((input) => {\n input.removeAttribute('required');\n });\n }\n break;\n case 'show':\n if (document.querySelector(event['target'])) {\n const showElement = document.querySelector(event['target']);\n showElement.classList.remove('js-hide');\n Array.from(showElement.querySelectorAll('[data-required]')).forEach((input) => {\n if (!input.closest('.js-hide'))\n input.setAttribute('required', 'true');\n });\n }\n break;\n case 'populate-form':\n populateForm(element, event);\n break;\n case 'dispatchEvent':\n const theEvent = new Event(event['value']);\n document.querySelector(`${event['target']}`).dispatchEvent(theEvent);\n break;\n case 'setAttribute':\n Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element) {\n element.setAttribute(event['attribute'], event['value']);\n });\n break;\n case 'focus':\n document.querySelector(`${event['target']}`).focus();\n break;\n case 'removeAttribute':\n Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element) {\n element.removeAttribute(event['attribute']);\n });\n break;\n case 'updateValue':\n document.querySelector(`${event['target']}`).value = event['value'] ? event['value'] : '';\n const changeEvent = new Event('change');\n document.querySelector(`${event['target']}`).dispatchEvent(changeEvent);\n break;\n case 'submitForm':\n document.querySelector(`${event['target']}`).submit();\n break;\n case 'openLink':\n if (document.querySelector(`${event['target']}`).value)\n window.location.href = document.querySelector(`${event['target']}`).value;\n break;\n default:\n break;\n }\n};\nconst populateForm = function (element, event) {\n const values = JSON.parse(element.getAttribute('data-values'));\n const form = document.querySelector(event['target']);\n if (!values)\n return false;\n Object.keys(values).forEach((field) => {\n if (document.getElementById(field) && document.getElementById(field).tagName == 'SPAN')\n document.getElementById(field).innerHTML = values[field];\n if (form.querySelector(`select[name=\"${field}\"] [value=\"${values[field]}\"]`)) {\n form.querySelector(`select[name=\"${field}\"]`).value = values[field];\n if (element.hasAttribute('data-lock-fields'))\n form.querySelector(`select[name=\"${field}\"]`).disabled = true;\n }\n else if (form.querySelector(`input[name=\"${field}\"][type=\"radio\"][value=\"${values[field]}\"]`)) {\n Array.from(form.querySelectorAll(`input[name=\"${field}\"][type=\"radio\"]`)).forEach(function (input) {\n input.disabled = true;\n });\n form.querySelector(`input[name=\"${field}\"][type=\"radio\"][value=\"${values[field]}\"]`).checked = true;\n form.querySelector(`input[name=\"${field}\"][type=\"radio\"][value=\"${values[field]}\"]`).disabled = false;\n }\n else if (form.querySelector(`input[name=\"${field}\"]`)) {\n form.querySelector(`input[name=\"${field}\"]`).value = values[field];\n if (element.hasAttribute('data-lock-fields'))\n form.querySelector(`input[name=\"${field}\"]`).setAttribute('readonly', 'true');\n }\n });\n};\nexport default createDynamicEvents;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// Modules\nimport * as helpers from './modules/helpers.js';\nimport createDataLayer from './modules/data-layer.js';\nimport createDynamicEvents from './modules/dynamicEvents.js';\nconst components = [\n 'accordion',\n 'header',\n 'table',\n 'table-basic',\n 'table-no-submit',\n 'tabs',\n 'card',\n 'calendar',\n 'content',\n 'filter-card',\n 'video-card',\n 'record-card',\n 'filterlist',\n 'applied-filters',\n 'pagination',\n 'notification',\n 'actionbar',\n 'nav',\n 'collapsible-side',\n 'address-lookup',\n 'fileupload',\n 'search',\n 'inline-edit',\n 'multiselect',\n 'multi-step',\n 'menu',\n 'slider',\n 'carousel',\n 'marketing',\n 'barchart',\n 'doughnutchart',\n 'bento-grid',\n 'milestone-group',\n 'milestone',\n 'darkmode',\n 'password-indicator'\n];\n// Attach classes to dom elements\ndocument.addEventListener('DOMContentLoaded', () => __awaiter(void 0, void 0, void 0, function* () {\n createDataLayer();\n createDynamicEvents();\n // Global stuff\n helpers.addBodyClasses(document.body);\n helpers.addGlobalEvents(document.body);\n //extendDialogs(document.body);\n //videoSupport(document.body);\n /*\n const prefix = 'iam';\n const options = {\n rootMargin: '50px',\n threshold: 0.1,\n };\n const componentExt = '.component.min.js';\n \n // Load components - Each component will load once the first of its type has been loaded\n components.forEach((component) => {\n if (document.getElementsByTagName(`${prefix}-${component}`).length === 0) return;\n \n const callback = (entries: any): void => {\n entries.forEach((entry: any) => {\n if (entry.intersectionRatio > 0) {\n \n import(`../js/components/${component}/${component}${componentExt}`)\n .then((module) => {\n if (!window.customElements.get(`${prefix}-${component}`))\n window.customElements.define(`${prefix}-${component}`, module.default);\n })\n .catch((err) => {\n console.log(err.message);\n });\n \n intObserver.unobserve(entry.target);\n }\n });\n };\n \n const intObserver = new IntersectionObserver(callback, options);\n intObserver.observe(document.getElementsByTagName(`${prefix}-${component}`)[0]);\n });\n */\n}));\n","/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","function createDataLayer() {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'Pageview',\n pageTitle: document.title,\n });\n document.addEventListener('click', (event) => {\n const target = event.target.closest('[open] summary');\n if (target) {\n window.dataLayer.push({\n event: 'closeDetails',\n detailsTitle: target.textContent || '',\n });\n }\n else {\n const summary = event.target.closest('summary');\n const link = event.target.closest('a');\n const button = event.target.closest('button');\n if (summary) {\n window.dataLayer.push({\n event: 'openDetails',\n detailsTitle: summary.textContent || '',\n });\n }\n if (link) {\n window.dataLayer.push({\n event: 'linkClicked',\n linkText: link.hasAttribute('title') ? link.getAttribute('title') || '' : link.textContent || '',\n class: link.hasAttribute('class') ? link.getAttribute('class') || '' : '',\n href: link.getAttribute('href') || '',\n });\n }\n if (button) {\n window.dataLayer.push({\n event: 'buttonClicked',\n buttonText: button.textContent || '',\n class: button.hasAttribute('class') ? button.getAttribute('class') || '' : '',\n });\n }\n }\n });\n}\nexport default createDataLayer;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["window","triggerDynamicEvent","element","event","arguments","length","undefined","console","log","hasAttribute","splitEvents","getAttribute","events","parentNode","Array","from","JSON","parse","forEach","checkConditions","matches","value","runEvent","match","document","querySelector","concat","eventType","target","hideElement","classList","add","querySelectorAll","input","removeAttribute","showElement","remove","closest","setAttribute","populateForm","theEvent","Event","dispatchEvent","attribute","focus","changeEvent","submit","location","href","values","form","Object","keys","field","getElementById","tagName","innerHTML","disabled","checked","addEventListener","__awaiter","thisArg","_arguments","generator","body","checkElements","dataLayer","push","pageTitle","title","detailsTitle","textContent","summary","link","button","linkText","class","buttonText","HTMLElement","navigator","userAgent","indexOf","appVersion","hash","label","replace","dialog","detail","click","showModal","addAttribute","state","type","pageInput","page","_a","scrollIntoView","preventDefault","e","key","stopPropagation","progress","P","Promise","resolve","reject","fulfilled","step","next","rejected","throw","result","done","adopt","then","apply"],"sources":["modules/dynamicEvents.js","scripts.js","modules/helpers.js","modules/data-layer.js"],"sourcesContent":["// Create the event listeners\nwindow.triggerDynamicEvent = (element, event = 'change') => {\n console.log('event');\n if (element.hasAttribute('data-change-events') && event == 'change')\n splitEvents(element, element.getAttribute('data-change-events'));\n if (element.hasAttribute('data-click-events') && event == 'click')\n splitEvents(element, element.getAttribute('data-click-events'));\n};\nconst createDynamicEvents = () => {\n // Change event\n document.addEventListener('change', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-change-events]'))\n splitEvents(event.target, event.target.closest('[data-change-events]').getAttribute('data-change-events'));\n });\n document.addEventListener('keyup', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-change-events]'))\n splitEvents(event.target, event.target.closest('[data-change-events]').getAttribute('data-change-events'));\n });\n // Click event\n document.addEventListener('click', (event) => {\n if (event && event.target instanceof HTMLElement && event.target.closest('[data-click-events]'))\n splitEvents(event.target, event.target.closest('[data-click-events]').getAttribute('data-click-events'));\n });\n};\n// Parse the JSON and trigger the events, this may be singular or multiple set of events\nconst splitEvents = (element, events) => {\n // an empty events will trigger looking up the dom chain for\n if (!events) {\n events = element.parentNode.getAttribute('data-change-events');\n }\n // If still empty bail out\n if (!events)\n return false;\n // Split out each event\n Array.from(JSON.parse(events)).forEach((event) => {\n checkConditions(element, event);\n });\n};\nconst checkConditions = (element, event) => {\n if ('matches' in event) {\n if (event['matches'] == 'any')\n runEvent(element, event, 'if');\n else if (element.value == event.matches)\n runEvent(element, event, 'if');\n else\n runEvent(element, event, 'else');\n return false;\n }\n else if ('in-list' in event) {\n // Pass the matched datalist element instead of the triggered element\n const match = document.querySelector(`${event['in-list']} option[value=\"${element.value}\"]`);\n if (document.querySelector(`${event['in-list']} option[value=\"${element.value}\"]`)) {\n runEvent(match, event, 'if');\n }\n else\n runEvent(match, event, 'else');\n return false;\n }\n else if ('event' in event) {\n runEvent(element, event, 'event');\n }\n};\nconst runEvent = (element, event, eventType) => {\n if (eventType in event == false)\n return false;\n switch (event[eventType]) {\n case 'hide':\n if (document.querySelector(event['target'])) {\n const hideElement = document.querySelector(event['target']);\n hideElement.classList.add('js-hide');\n Array.from(hideElement.querySelectorAll('[data-required]')).forEach((input) => {\n input.removeAttribute('required');\n });\n }\n break;\n case 'show':\n if (document.querySelector(event['target'])) {\n const showElement = document.querySelector(event['target']);\n showElement.classList.remove('js-hide');\n Array.from(showElement.querySelectorAll('[data-required]')).forEach((input) => {\n if (!input.closest('.js-hide'))\n input.setAttribute('required', 'true');\n });\n }\n break;\n case 'populate-form':\n populateForm(element, event);\n break;\n case 'dispatchEvent':\n const theEvent = new Event(event['value']);\n document.querySelector(`${event['target']}`).dispatchEvent(theEvent);\n break;\n case 'setAttribute':\n Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element) {\n element.setAttribute(event['attribute'], event['value']);\n });\n break;\n case 'focus':\n document.querySelector(`${event['target']}`).focus();\n break;\n case 'removeAttribute':\n Array.from(document.querySelectorAll(`${event['target']}`)).forEach(function (element) {\n element.removeAttribute(event['attribute']);\n });\n break;\n case 'updateValue':\n document.querySelector(`${event['target']}`).value = event['value'] ? event['value'] : '';\n const changeEvent = new Event('change');\n document.querySelector(`${event['target']}`).dispatchEvent(changeEvent);\n break;\n case 'submitForm':\n document.querySelector(`${event['target']}`).submit();\n break;\n case 'openLink':\n if (document.querySelector(`${event['target']}`).value)\n window.location.href = document.querySelector(`${event['target']}`).value;\n break;\n default:\n break;\n }\n};\nconst populateForm = function (element, event) {\n const values = JSON.parse(element.getAttribute('data-values'));\n const form = document.querySelector(event['target']);\n if (!values)\n return false;\n Object.keys(values).forEach((field) => {\n if (document.getElementById(field) && document.getElementById(field).tagName == 'SPAN')\n document.getElementById(field).innerHTML = values[field];\n if (form.querySelector(`select[name=\"${field}\"] [value=\"${values[field]}\"]`)) {\n form.querySelector(`select[name=\"${field}\"]`).value = values[field];\n if (element.hasAttribute('data-lock-fields'))\n form.querySelector(`select[name=\"${field}\"]`).disabled = true;\n }\n else if (form.querySelector(`input[name=\"${field}\"][type=\"radio\"][value=\"${values[field]}\"]`)) {\n Array.from(form.querySelectorAll(`input[name=\"${field}\"][type=\"radio\"]`)).forEach(function (input) {\n input.disabled = true;\n });\n form.querySelector(`input[name=\"${field}\"][type=\"radio\"][value=\"${values[field]}\"]`).checked = true;\n form.querySelector(`input[name=\"${field}\"][type=\"radio\"][value=\"${values[field]}\"]`).disabled = false;\n }\n else if (form.querySelector(`input[name=\"${field}\"]`)) {\n form.querySelector(`input[name=\"${field}\"]`).value = values[field];\n if (element.hasAttribute('data-lock-fields'))\n form.querySelector(`input[name=\"${field}\"]`).setAttribute('readonly', 'true');\n }\n });\n};\nexport default createDynamicEvents;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// Modules\nimport * as helpers from './modules/helpers.js';\nimport createDataLayer from './modules/data-layer.js';\nimport createDynamicEvents from './modules/dynamicEvents.js';\nconst components = [\n 'accordion',\n 'header',\n 'table',\n 'table-basic',\n 'table-no-submit',\n 'tabs',\n 'card',\n 'calendar',\n 'content',\n 'filter-card',\n 'video-card',\n 'record-card',\n 'filterlist',\n 'applied-filters',\n 'pagination',\n 'notification',\n 'actionbar',\n 'nav',\n 'collapsible-side',\n 'address-lookup',\n 'fileupload',\n 'search',\n 'inline-edit',\n 'multiselect',\n 'multi-step',\n 'menu',\n 'slider',\n 'carousel',\n 'marketing',\n 'barchart',\n 'doughnutchart',\n 'bento-grid',\n 'milestone-group',\n 'milestone',\n 'darkmode',\n 'password-indicator'\n];\n// Attach classes to dom elements\ndocument.addEventListener('DOMContentLoaded', () => __awaiter(void 0, void 0, void 0, function* () {\n createDataLayer();\n createDynamicEvents();\n // Global stuff\n helpers.addBodyClasses(document.body);\n helpers.addGlobalEvents(document.body);\n //extendDialogs(document.body);\n //videoSupport(document.body);\n /*\n const prefix = 'iam';\n const options = {\n rootMargin: '50px',\n threshold: 0.1,\n };\n const componentExt = '.component.min.js';\n \n // Load components - Each component will load once the first of its type has been loaded\n components.forEach((component) => {\n if (document.getElementsByTagName(`${prefix}-${component}`).length === 0) return;\n \n const callback = (entries: any): void => {\n entries.forEach((entry: any) => {\n if (entry.intersectionRatio > 0) {\n \n import(`../js/components/${component}/${component}${componentExt}`)\n .then((module) => {\n if (!window.customElements.get(`${prefix}-${component}`))\n window.customElements.define(`${prefix}-${component}`, module.default);\n })\n .catch((err) => {\n console.log(err.message);\n });\n \n intObserver.unobserve(entry.target);\n }\n });\n };\n \n const intObserver = new IntersectionObserver(callback, options);\n intObserver.observe(document.getElementsByTagName(`${prefix}-${component}`)[0]);\n });\n */\n}));\n","/**\n * Global helper functions to help maintain and enhance framework elements.\n * @module Helpers\n */\n/**\n * Add global classes used by the CSS and later JavaScript.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addBodyClasses = (body) => {\n body.classList.add('js-enabled');\n if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {\n body.classList.add('ie');\n }\n};\n/**\n * Add global events.\n * @param {HTMLElement} body Dom element, this doesn't have to be the body but it is recommended.\n */\nexport const addGlobalEvents = (body) => {\n const checkElements = function (hash) {\n const label = document.querySelector(`label[for=\"${hash.replace('#', '')}\"]`);\n const summary = document.querySelector(hash + ' summary');\n const dialog = document.querySelector(`dialog${hash}`);\n const detail = document.querySelector(`detail${hash}`);\n if (label instanceof HTMLElement)\n label.click();\n else if (summary instanceof HTMLElement)\n summary.click();\n else if (dialog instanceof HTMLElement)\n dialog.showModal();\n else if (detail instanceof HTMLElement)\n detail.addAttribute('open');\n };\n if (location.hash)\n checkElements(location.hash);\n window.addEventListener('hashchange', function () {\n checkElements(location.hash);\n }, false);\n addEventListener('popstate', (event) => {\n if (event && event.state && event.state.type && event.state.type == 'pagination') {\n const form = document.querySelector(`#${event.state.form}`);\n const pageInput = document.querySelector(`#${event.state.form} [data-pagination]`);\n if (pageInput)\n pageInput.value = event.state.page;\n else\n form.innerHTML += `<input name=\"page\" type=\"hidden\" data-pagination=\"true\" value=\"${event.state.page}\" />`;\n form.dispatchEvent(new Event('submit'));\n }\n });\n Array.from(document.querySelectorAll('form')).forEach((form) => {\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n form.addEventListener('submit', (event) => {\n var _a;\n if (form.querySelector(':invalid')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n });\n }\n });\n document.addEventListener('click', (event) => {\n var _a;\n if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {\n const form = event.target.closest('form');\n if (!(form === null || form === void 0 ? void 0 : form.closest('iam-form'))) {\n // Reset password types\n Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {\n input.setAttribute('type', 'password');\n });\n if (form.querySelector(':invalid') ||\n form.querySelector('.pwd-checker[data-strength=\"1\"]') ||\n form.querySelector('.pwd-checker[data-strength=\"2\"]')) {\n form.classList.add('was-validated');\n (_a = form === null || form === void 0 ? void 0 : form.querySelector('input:invalid')) === null || _a === void 0 ? void 0 : _a.scrollIntoView();\n event.preventDefault();\n }\n if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {\n form.classList.add('was-validated');\n event.preventDefault();\n }\n }\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n if (document.querySelector('.dialog--transactional[open], .dialog--acknowledgement[open]')) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n });\n Array.from(document.querySelectorAll('label progress')).forEach((progress) => {\n const label = progress.closest('label');\n label.setAttribute('data-percent', progress.getAttribute('value'));\n });\n};\nexport const isNumeric = function (str) {\n if (typeof str != 'string')\n return false; // we only process strings!\n return (!isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...\n !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail\n};\nexport const zeroPad = (num, places) => String(num).padStart(places, '0');\nexport const ucfirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);\nexport const ucwords = (str) => str\n .split(' ')\n .map((s) => ucfirst(s))\n .join(' ');\nexport const unsnake = (str) => str.replace(/_/g, ' ');\nexport const snake = (str) => str.replace(/ /g, '_');\nexport const safeID = function (str) {\n str = str.toLowerCase();\n str = snake(str);\n str = str.replace(/\\W/g, '');\n return str;\n};\nexport const numberOfDays = function (startDateString, endDateString) {\n const convertStart = startDateString.split('/');\n const convertEnd = endDateString.split('/');\n const dateStart = new Date(convertStart[1] + '/' + convertStart[0] + '/' + convertStart[2]);\n const dateEnd = new Date(convertEnd[1] + '/' + convertEnd[0] + '/' + convertEnd[2]);\n if (dateStart == 'Invalid Date')\n throw 'Start date is not a valid date';\n if (dateEnd == 'Invalid Date')\n throw 'End date is not a valid date';\n // To calculate the time difference of two dates\n const diffTime = dateEnd.getTime() - dateStart.getTime();\n const numberOfDays = diffTime / (1000 * 3600 * 24) + 1;\n if (numberOfDays < 0)\n throw 'The start date should be before the end date';\n return numberOfDays;\n};\n// Used to get values from nested json objects\nexport const resolvePath = (object, path, defaultValue) => path\n // eslint-disable-next-line no-useless-escape\n .split(/[\\.\\[\\]\\'\\\"]/)\n .filter((p) => p)\n .reduce((o, p) => (o ? o[p] : defaultValue), object);\nexport const isTraversable = (o) => Array.isArray(o) || (o !== null && ['function', 'object'].includes(typeof o));\nexport const getSwipeDirection = (touchstartX, touchstartY, touchendX, touchendY) => {\n const limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n const pageWidth = window.innerWidth || document.body.clientWidth;\n const treshold = Math.max(1, Math.floor(0.01 * pageWidth));\n const x = touchendX - touchstartX;\n const y = touchendY - touchstartY;\n const xy = Math.abs(x / y);\n const yx = Math.abs(y / x);\n if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n if (yx <= limit) {\n if (x < 0) {\n return 'left';\n }\n else {\n return 'right';\n }\n }\n if (xy <= limit) {\n if (y < 0) {\n return 'top';\n }\n else {\n return 'bottom';\n }\n }\n }\n else {\n return 'tap';\n }\n};\nexport const uniqueID = (index = 1) => {\n const ID = Math.floor(Math.random() * Date.now() * (index + 1));\n return ID;\n};\nexport const isValidPostcode = (searchValue) => {\n const regexp = /^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$/gmi;\n return regexp.test(searchValue.trim());\n};\n","function createDataLayer() {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n event: 'Pageview',\n pageTitle: document.title,\n });\n document.addEventListener('click', (event) => {\n const target = event.target.closest('[open] summary');\n if (target) {\n window.dataLayer.push({\n event: 'closeDetails',\n detailsTitle: target.textContent || '',\n });\n }\n else {\n const summary = event.target.closest('summary');\n const link = event.target.closest('a');\n const button = event.target.closest('button');\n if (summary) {\n window.dataLayer.push({\n event: 'openDetails',\n detailsTitle: summary.textContent || '',\n });\n }\n if (link) {\n window.dataLayer.push({\n event: 'linkClicked',\n linkText: link.hasAttribute('title') ? link.getAttribute('title') || '' : link.textContent || '',\n class: link.hasAttribute('class') ? link.getAttribute('class') || '' : '',\n href: link.getAttribute('href') || '',\n });\n }\n if (button) {\n window.dataLayer.push({\n event: 'buttonClicked',\n buttonText: button.textContent || '',\n class: button.hasAttribute('class') ? button.getAttribute('class') || '' : '',\n });\n }\n }\n });\n}\nexport default createDataLayer;\n"],"mappings":"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","ignoreList":[]}
@@ -6,8 +6,6 @@
6
6
 
7
7
  @use 'components/nav.preload';
8
8
  @use 'components/carousel.config';
9
- @use 'components/multiselect.preload';
10
- @use 'components/tag.preload';
11
9
  @use 'components/multi-step-modal.global';
12
10
 
13
11
  @use 'components/inline-edit.preload';
@@ -27,3 +27,4 @@
27
27
  @use 'elements/progress.scss';
28
28
  @use 'elements/code';
29
29
  @use 'elements/highlight';
30
+ @use 'elements/dropdown';
@@ -1,63 +1,8 @@
1
1
  @use '../_func' as *;
2
2
 
3
-
4
-
5
-
6
-
7
3
  @layer components {
8
- iam-multiselect .tag[slot='checked'] {
9
- margin-bottom: 0.5rem;
10
- order: var(--order, 1);
11
- margin-inline: rem(3);
12
-
13
- &:not(:has(i)):after {
14
- content: '\2715';
15
- margin-left: 0.6em;
16
- font-weight: bold;
17
- }
18
- }
19
-
20
- iam-multiselect .tag[slot='checked']:first-child:last-child {
21
-
22
- margin-inline: 0;
23
- }
24
-
25
- iam-multiselect .tag:not([slot='checked']) {
26
- display: block;
27
- width: 100%;
28
- max-width: 100%;
29
- margin: 0;
30
- text-align: left;
31
- border-radius: 0;
32
- padding-inline: 1rem;
33
- outline: none;
34
- padding-block: 0.5rem;
35
-
36
- &:not(:hover, :focus, :active, :focus-within) {
37
- background: none !important;
38
- }
39
-
40
- &::after {
41
- display: none;
42
- }
43
- }
44
4
 
45
- iam-multiselect:has(label:not([slot='checked']):not([slot='notmatched'])) {
46
- --display-panel: block;
47
- }
48
5
 
49
- iam-multiselect:has(label[slot='checked']) {
50
- --display-button: block;
51
- }
52
6
 
53
- @container style(--theme: dark) {
54
- iam-multiselect :is(.tag, .badge):not([slot='checked']) {
55
- color: var(--colour-heading);
56
- }
57
- }
58
7
 
59
- iam-multiselect[data-single] .tag[slot='checked'],
60
- iam-multiselect[data-single] .tag[slot='checked'] * {
61
- pointer-events: none!important;
62
- }
63
8
  }
@@ -5,6 +5,7 @@
5
5
  @use '../elements/admin-panel.scss' as *;
6
6
  @use '../elements/buttons.scss' as *;
7
7
  @use '../elements/buttons--action.scss' as *;
8
+ @use '../elements/dropdown.scss' as *;
8
9
 
9
10
  @use '../utilities/visually-hidden' as *;
10
11
  @use '../utilities/display' as *;
@@ -15,227 +16,224 @@
15
16
  box-sizing: border-box;
16
17
  }
17
18
 
18
- :host {
19
+ @layer components {
20
+ :host {
19
21
 
20
- margin-bottom: 1.5rem;
21
- }
22
-
23
- .outer {
24
- position: relative;
25
- max-width: var(--input-max-width, 50rem);
26
- display: block;
27
- }
28
-
29
- label {
30
- margin-bottom: 0;
31
- padding-bottom: 0.5rem;
32
- }
33
-
34
- .inner-label:empty {
35
- display: none;
36
- }
37
-
38
- .wrapper {
39
- max-width: var(--input-max-width, 50rem);
22
+ margin-bottom: 1.5rem;
23
+ }
40
24
 
41
- &:after {
42
- content: '';
25
+ .outer {
26
+ position: relative;
27
+ max-width: var(--input-max-width, 50rem);
43
28
  display: block;
44
- position: absolute;
45
- top: 100%;
46
- left: 0;
47
- width: 100%;
48
- height: 1rem;
49
29
  }
50
30
 
51
- input {
52
- margin-bottom: 0.5rem;
31
+ label {
32
+ margin-bottom: 0;
33
+ padding-bottom: 0.5rem;
53
34
  }
54
35
 
55
- .feedback {
56
- position: absolute;
57
- right: 0;
58
- bottom: 100%;
59
- padding: 0.85rem;
60
- width: min-content;
61
- white-space: nowrap;
62
- margin-bottom: 0.5rem;
36
+ .inner-label:empty {
63
37
  display: none;
64
38
  }
65
39
 
66
- &.was-validated .feedback {
67
- display: block;
68
- }
69
- }
40
+ .wrapper {
41
+ max-width: var(--input-max-width, 50rem);
42
+
43
+ &:after {
44
+ content: '';
45
+ display: block;
46
+ position: absolute;
47
+ top: 100%;
48
+ left: 0;
49
+ width: 100%;
50
+ height: 1rem;
51
+ }
70
52
 
71
- .wrapper {
53
+ input {
54
+ margin-bottom: 0.5rem;
55
+ }
72
56
 
73
- input {
57
+ .feedback {
58
+ position: absolute;
59
+ right: 0;
60
+ bottom: 100%;
61
+ padding: 0.85rem;
62
+ width: min-content;
63
+ white-space: nowrap;
64
+ margin-bottom: 0.5rem;
65
+ display: none;
66
+ }
74
67
 
75
- margin-top: unset;
76
- }
77
- }
78
- .wrapper.filled {
79
- display: flex;
80
- flex-direction: row;
81
- flex-wrap: wrap;
82
- align-items: flex-start;
83
- min-height: calc(0.75rem + 0.75rem + 1.25rem + 4px);
84
- padding: 0.5rem 2rem 0 #{rem(13)};
85
- font-size: var(--input-fs, 1rem);
86
- line-height: var(--input-lh, 1.25rem);
87
- color: var(--colour-body);
88
- background-color: var(--colour-canvas-2);
89
- border: 2px solid var(--colour-primary);
90
- border-radius: 0.5rem;
91
-
92
- &:is(:focus-within, .focus-within):not(:disabled) {
93
- border-color: var(--colour-info);
94
- outline: 0;
95
- box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
96
- }
97
-
98
- input {
99
- all: unset;
100
- font-size: 1rem;
101
- line-height: rem(26);
102
- display: var(--search-display,inline-block);
103
- width: 0;
104
- flex-grow: 1;
105
- padding: 0 0.5rem 0 0 !important;
106
- margin-inline: rem(3);
107
- order: 999;
108
- margin-bottom: 0.5rem;
68
+ &.was-validated .feedback {
69
+ display: block;
70
+ }
109
71
  }
110
72
 
111
- .feedback {
112
- display: none !important;
113
- }
73
+ .wrapper {
74
+
75
+ input {
114
76
 
115
- &:is(:focus, .focus):not(:disabled) {
116
- border-color: var(--colour-info);
117
- outline: 0;
118
- box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
77
+ margin-top: unset;
78
+ }
119
79
  }
120
- }
80
+ .wrapper.filled {
81
+ display: flex;
82
+ flex-direction: row;
83
+ flex-wrap: wrap;
84
+ align-items: flex-start;
85
+ min-height: calc(0.75rem + 0.75rem + 1.25rem + 4px);
86
+ padding: 0.5rem 2rem 0 #{rem(13)};
87
+ font-size: var(--input-fs, 1rem);
88
+ line-height: var(--input-lh, 1.25rem);
89
+ color: var(--colour-body);
90
+ background-color: var(--colour-canvas-2);
91
+ border: 2px solid var(--colour-primary);
92
+ border-radius: 0.5rem;
93
+
94
+ &:is(:focus-within, .focus-within):not(:disabled) {
95
+ border-color: var(--colour-info);
96
+ outline: 0;
97
+ box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
98
+ }
121
99
 
122
- button {
123
- position: absolute;
124
- right: 0.5rem;
125
- border: none;
126
- padding-inline: 0.5rem;
127
- display: var(--display-button, none);
100
+ input {
101
+ all: unset;
102
+ font-size: 1rem;
103
+ line-height: rem(26);
104
+ display: var(--search-display,inline-block);
105
+ width: 0;
106
+ flex-grow: 1;
107
+ padding: 0 0.5rem 0 0 !important;
108
+ margin-inline: rem(3);
109
+ order: 999;
110
+ margin-bottom: 0.5rem;
111
+ }
128
112
 
129
- &:after {
130
- content: '\2715';
131
- font-weight: bold;
132
- }
133
- }
113
+ .feedback {
114
+ display: none !important;
115
+ }
134
116
 
135
- .dropdown {
136
- position: absolute;
137
- top: calc(100% + 0.5rem);
138
- padding: 0;
139
- left: 0;
140
- width: 100%;
141
- margin: 0;
142
- z-index: 99;
143
- display: none;
144
- max-height: rem(244) !important;
145
- overflow: auto;
146
-
147
- &:before {
148
- display: none;
117
+ &:is(:focus, .focus):not(:disabled) {
118
+ border-color: var(--colour-info);
119
+ outline: 0;
120
+ box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
121
+ }
149
122
  }
150
- }
151
123
 
152
- .wrapper:is(:focus-within) .dropdown {
153
- display: var(--display-panel, none);
154
- }
124
+ button {
125
+ position: absolute;
126
+ right: 0.5rem;
127
+ border: none;
128
+ padding-inline: 0.5rem;
129
+ display: var(--display-button, none);
155
130
 
156
- @media (hover: hover) {
157
- .wrapper .dropdown:hover {
158
- display: var(--display-panel, none);
131
+ &:after {
132
+ content: '\2715';
133
+ font-weight: bold;
134
+ }
159
135
  }
160
- }
161
136
 
162
- @media (hover: none) {
163
- :host(.hover) .wrapper .dropdown {
164
- display: block;
137
+ .wrapper:is(:focus-within) .dropdown {
138
+ display: var(--display-panel, none);
165
139
  }
166
- }
167
140
 
168
- // Inline edit
169
- :host-context(:focus-within) {
170
- input {
171
- background-color: none !important;
141
+ @media (hover: hover) {
142
+ .wrapper .dropdown:hover {
143
+ display: var(--display-panel, none);
144
+ }
172
145
  }
173
- }
174
- :host-context(iam-inline-edit) {
175
- display: block;
176
- --display-btns: none;
177
146
 
178
- label:hover + .outer:not(:focus-within) .wrapper:not([data-mousedown]),
179
- .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover {
180
- background-color: var(--colour-light);
147
+ @media (hover: none) {
148
+ :host(.hover) .wrapper .dropdown {
149
+ display: block;
150
+ }
151
+ }
181
152
 
153
+ // Inline edit
154
+ :host-context(:focus-within) {
182
155
  input {
156
+ background-color: none !important;
157
+ }
158
+ }
159
+ :host-context(iam-inline-edit) {
160
+ display: block;
161
+ --display-btns: none;
162
+
163
+ label:hover + .outer:not(:focus-within) .wrapper:not([data-mousedown]),
164
+ .outer:not(:focus-within) .wrapper:not([data-mousedown]):hover {
183
165
  background-color: var(--colour-light);
166
+
167
+ input {
168
+ background-color: var(--colour-light);
169
+ }
170
+
171
+ .dropdown {
172
+ display: none;
173
+ }
184
174
  }
185
175
 
186
- .dropdown {
187
- display: none;
176
+ .wrapper {
177
+ margin-bottom: 0;
188
178
  }
189
- }
190
179
 
191
- .wrapper {
192
- margin-bottom: 0;
180
+ .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) {
181
+ input {
182
+ border-color: transparent;
183
+ background: none;
184
+ margin-left: var(--input-ms,-1rem);
185
+ width: calc(100% + 1rem);
186
+ max-width: calc(100% + 1rem);
187
+ box-shadow: none;
188
+ }
189
+
190
+ .dropdown {
191
+ display: none;
192
+ }
193
+ }
194
+ .wrapper.filled:not(:focus-within):not([data-mousedown]) {
195
+ background: none;
196
+ border: none;
197
+ padding-left: 0;
198
+ }
193
199
  }
194
200
 
195
- .wrapper:not(.filled):not(:focus-within):not([data-mousedown]) {
196
- input {
197
- border-color: transparent;
198
- background: none;
199
- margin-left: var(--input-ms,-1rem);
200
- width: calc(100% + 1rem);
201
- max-width: calc(100% + 1rem);
202
- box-shadow: none;
201
+ :host([data-single]){
202
+
203
+ .wrapper.filled{
204
+
205
+ slot[name='checked'] {
206
+ pointer-events: none;
207
+ }
203
208
  }
204
209
 
205
- .dropdown {
210
+ #clear {
211
+ display: none;
212
+ }
213
+ ::slotted([slot='checked'])::after {
206
214
  display: none;
207
215
  }
208
216
  }
209
- .wrapper.filled:not(:focus-within):not([data-mousedown]) {
210
- background: none;
211
- border: none;
212
- padding-left: 0;
213
- }
214
- }
215
-
216
- :host([data-single]){
217
+ :host-context(td){
217
218
 
218
- .wrapper.filled{
219
-
220
- slot[name='checked'] {
221
- pointer-events: none;
222
- }
219
+ input,
220
+ textarea,
221
+ select {
222
+ margin-left: 0!important;
223
+ width: 100%!important;
224
+ max-width: 100%!important;
225
+ }
223
226
  }
224
227
 
225
- #clear {
226
- display: none;
228
+ ::slotted([slot='checked']) {
229
+ margin-bottom: 0.5rem;
230
+ order: var(--order, 1);
231
+ margin-inline: rem(3);
227
232
  }
233
+
228
234
  ::slotted([slot='checked'])::after {
229
- display: none;
235
+ content: '\2715';
236
+ margin-left: 0.6em;
237
+ font-weight: bold;
230
238
  }
231
- }
232
- :host-context(td){
233
-
234
- input,
235
- textarea,
236
- select {
237
- margin-left: 0!important;
238
- width: 100%!important;
239
- max-width: 100%!important;
240
- }
241
239
  }