@iamproperty/components 7.6.3 → 7.6.4--beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/css/components/actionbar.component.css +1 -1
- package/assets/css/components/actionbar.component.css.map +1 -1
- package/assets/css/components/address-lookup.component.css +1 -1
- package/assets/css/components/address-lookup.component.css.map +1 -1
- package/assets/css/components/barchart.component.css +1 -1
- package/assets/css/components/barchart.component.css.map +1 -1
- package/assets/css/components/calendar.component.css +1 -1
- package/assets/css/components/calendar.component.css.map +1 -1
- package/assets/css/components/card.component.css +1 -1
- package/assets/css/components/card.component.css.map +1 -1
- package/assets/css/components/carousel.component.css +1 -1
- package/assets/css/components/carousel.component.css.map +1 -1
- package/assets/css/components/collapsible-side.css +1 -1
- package/assets/css/components/collapsible-side.css.map +1 -1
- package/assets/css/components/content.component.css +1 -1
- package/assets/css/components/content.component.css.map +1 -1
- package/assets/css/components/doughnutchart.component.css +1 -1
- package/assets/css/components/doughnutchart.component.css.map +1 -1
- package/assets/css/components/fileupload.css +1 -1
- package/assets/css/components/fileupload.css.map +1 -1
- package/assets/css/components/modal.component.css +1 -1
- package/assets/css/components/modal.component.css.map +1 -1
- package/assets/css/components/multi-step-modal.component.css +1 -1
- package/assets/css/components/multi-step-modal.component.css.map +1 -1
- package/assets/css/components/multiselect.css +1 -1
- package/assets/css/components/multiselect.css.map +1 -1
- package/assets/css/components/nav.component.css +1 -1
- package/assets/css/components/nav.component.css.map +1 -1
- package/assets/css/components/pagination.css +1 -1
- package/assets/css/components/pagination.css.map +1 -1
- package/assets/css/components/slider.css +1 -1
- package/assets/css/components/slider.css.map +1 -1
- package/assets/css/components/split-button.component.css +1 -1
- package/assets/css/components/split-button.component.css.map +1 -1
- package/assets/css/components/tabs.component.css +1 -1
- package/assets/css/components/tabs.component.css.map +1 -1
- package/assets/css/components/tag.component.css +1 -1
- package/assets/css/components/tag.component.css.map +1 -1
- package/assets/css/components/tooltip.component.css +1 -1
- package/assets/css/components/tooltip.component.css.map +1 -1
- package/assets/css/components/video-modal.component.css +1 -1
- package/assets/css/components/video-modal.component.css.map +1 -1
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/js/components/accordion/accordion.component.min.js +1 -1
- package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
- package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.js +1 -1
- package/assets/js/components/address-lookup/address-lookup.component.min.js +4 -4
- package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
- package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
- package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
- package/assets/js/components/barchart/barchart.component.min.js +4 -4
- package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
- package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
- package/assets/js/components/calendar/calendar.component.min.js +2 -2
- package/assets/js/components/calendar/calendar.component.min.js.map +1 -1
- package/assets/js/components/card/card.component.min.js +2 -2
- package/assets/js/components/carousel/carousel.component.min.js +2 -2
- package/assets/js/components/collapsible-side/collapsible-side.component.min.js +2 -2
- package/assets/js/components/content/content.component.min.js +4 -4
- package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js +2 -2
- package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
- package/assets/js/components/fileupload/fileupload.component.min.js +4 -4
- package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
- package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
- package/assets/js/components/form/form.component.js +68 -0
- package/assets/js/components/form/form.component.min.js +9 -0
- package/assets/js/components/form/form.component.min.js.map +1 -0
- package/assets/js/components/header/header.component.min.js +1 -1
- package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
- package/assets/js/components/input/input.component.js +7 -5
- package/assets/js/components/input/input.component.min.js +2 -2
- package/assets/js/components/input/input.component.min.js.map +1 -1
- package/assets/js/components/input-range/input-range.component.min.js +1 -1
- package/assets/js/components/marketing/marketing.component.min.js +1 -1
- package/assets/js/components/menu/menu.component.min.js +1 -1
- package/assets/js/components/milestone/milestone.component.min.js +1 -1
- package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
- package/assets/js/components/modal/modal.component.min.js +2 -2
- package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
- package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +2 -2
- package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
- package/assets/js/components/nav/nav.component.min.js +2 -2
- package/assets/js/components/notification/notification.component.min.js +1 -1
- package/assets/js/components/pagination/pagination.component.min.js +2 -2
- package/assets/js/components/password/password.component.min.js +1 -1
- package/assets/js/components/popover/popover.component.min.js +1 -1
- package/assets/js/components/rank/rank.component.min.js +1 -1
- package/assets/js/components/rankings/rankings.component.min.js +1 -1
- package/assets/js/components/rating/rating.component.min.js +1 -1
- package/assets/js/components/record-card/record-card.component.min.js +1 -1
- package/assets/js/components/search/search.component.min.js +1 -1
- package/assets/js/components/search/search.component.min.js.map +1 -1
- package/assets/js/components/slider/slider.component.min.js +2 -2
- package/assets/js/components/split-button/split-button.component.min.js +5 -5
- package/assets/js/components/std-address-lookup/std-address-lookup.component.js +20 -0
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +8 -8
- package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
- package/assets/js/components/table/table.component.min.js +1 -1
- package/assets/js/components/table/table.component.min.js.map +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
- package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
- package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
- package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
- package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
- package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
- package/assets/js/components/tabs/tabs.component.min.js +2 -2
- package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
- package/assets/js/components/tag/tag.component.min.js +3 -3
- package/assets/js/components/tooltip/tooltip.component.min.js +2 -2
- package/assets/js/components/video-card/video-card.component.min.js +1 -1
- package/assets/js/components/video-modal/video-modal.component.min.js +2 -2
- package/assets/js/components/word-count/word-count.component.min.js +1 -1
- package/assets/js/modules/helpers.js +26 -22
- package/assets/js/scripts.bundle.js +2 -2
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +2 -2
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/sass/components/tooltip.component.scss +7 -0
- package/assets/sass/elements/button__group.css +4 -1
- package/assets/sass/elements/forms.scss +8 -14
- package/assets/sass/elements/icons.css +4 -4
- package/assets/sass/elements/input.scss +0 -14
- package/assets/sass/elements/textarea.scss +97 -0
- package/assets/sass/templates/form.scss +18 -5
- package/assets/sass/utilities/sizes.scss +4 -0
- package/assets/ts/components/address-lookup/address-lookup.component.ts +1 -1
- package/assets/ts/components/form/form.component.ts +102 -0
- package/assets/ts/components/input/input.component.ts +8 -6
- package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +32 -0
- package/assets/ts/modules/helpers.ts +32 -27
- package/dist/components.es.js +28 -28
- package/dist/components.umd.js +199 -186
- package/package.json +1 -1
- 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":[]}
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
text-underline-offset: 0.2em;
|
|
17
17
|
overflow-anchor: none;
|
|
18
18
|
cursor: pointer;
|
|
19
|
+
display: inline-block;
|
|
20
|
+
width: 1rem;
|
|
21
|
+
height: 1lh;
|
|
22
|
+
min-height: 1rem;
|
|
23
|
+
vertical-align: text-top;
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
.tooltip__anchor {
|
|
@@ -37,6 +42,8 @@
|
|
|
37
42
|
width: 1rem;
|
|
38
43
|
background-color: var(--colour, var(--colour-info));
|
|
39
44
|
border-radius: 50%;
|
|
45
|
+
top: 50%;
|
|
46
|
+
translate: 0% -50%;
|
|
40
47
|
}
|
|
41
48
|
:host(:empty) .tooltip__anchor:after {
|
|
42
49
|
font-family: "Font Awesome 6 Pro";
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
display: flex;
|
|
6
6
|
flex-direction: column;
|
|
7
|
+
row-gap: var(--gap);
|
|
7
8
|
|
|
8
9
|
.btn {
|
|
9
10
|
margin-inline-end: 0;
|
|
@@ -11,9 +12,9 @@
|
|
|
11
12
|
max-width: 100%;
|
|
12
13
|
text-align: center;
|
|
13
14
|
white-space: normal;
|
|
15
|
+
margin: 0;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
|
|
17
18
|
.btn-secondary {
|
|
18
19
|
order: 2;
|
|
19
20
|
}
|
|
@@ -24,7 +25,9 @@
|
|
|
24
25
|
@container (min-width: 36em) {
|
|
25
26
|
.btn__group {
|
|
26
27
|
flex-direction: row;
|
|
28
|
+
row-gap: 0;
|
|
27
29
|
column-gap: var(--gap);
|
|
30
|
+
margin-bottom: 1.5rem;
|
|
28
31
|
|
|
29
32
|
.btn {
|
|
30
33
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
@use './label' as *;
|
|
7
7
|
@use './input' as *;
|
|
8
|
+
@use './textarea' as *;
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
$icon-error: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d='M256 32a224 224 0 1 1 0 448 224 224 0 1 1 0-448zm0 480A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c-8.8 0-16 7.2-16 16V272c0 8.8 7.2 16 16 16s16-7.2 16-16V144c0-8.8-7.2-16-16-16zm24 224a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z' fill='#dc3545'/></svg>");
|
|
@@ -17,8 +18,7 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
17
18
|
|
|
18
19
|
// 1. Remove the margin in Firefox and Safari
|
|
19
20
|
select,
|
|
20
|
-
optgroup
|
|
21
|
-
textarea {
|
|
21
|
+
optgroup {
|
|
22
22
|
margin: 0; // 1
|
|
23
23
|
font-family: inherit;
|
|
24
24
|
font-size: inherit;
|
|
@@ -45,13 +45,6 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.
|
|
50
|
-
|
|
51
|
-
textarea {
|
|
52
|
-
resize: vertical; // 1
|
|
53
|
-
}
|
|
54
|
-
|
|
55
48
|
// 1. Browsers set a default `min-width: min-content;` on fieldsets,
|
|
56
49
|
// unlike e.g. `<div>`s, which have `min-width: 0;` by default.
|
|
57
50
|
// So we reset that to ensure fieldsets behave more like a standard block element.
|
|
@@ -165,6 +158,7 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
165
158
|
// #region legend
|
|
166
159
|
fieldset {
|
|
167
160
|
width: 100%;
|
|
161
|
+
position: relative;
|
|
168
162
|
}
|
|
169
163
|
legend {
|
|
170
164
|
font-family: var(--font-heading);
|
|
@@ -209,7 +203,7 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
209
203
|
width: 100%;
|
|
210
204
|
}
|
|
211
205
|
|
|
212
|
-
:is(input:not([type='checkbox']):not([type='radio']):not([type='file']):not([type='range']),
|
|
206
|
+
:is(input:not([type='checkbox']):not([type='radio']):not([type='file']):not([type='range']), output) {
|
|
213
207
|
flex-shrink: 1;
|
|
214
208
|
flex-grow: 1;
|
|
215
209
|
width: 0;
|
|
@@ -279,14 +273,12 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
279
273
|
input:not([type='checkbox']):not([type='radio']):not([type='file']):not([type='range']):not([type='date']):not(
|
|
280
274
|
[type='time']
|
|
281
275
|
),
|
|
282
|
-
textarea,
|
|
283
276
|
output
|
|
284
277
|
),
|
|
285
278
|
:is(
|
|
286
279
|
input:not([type='checkbox']):not([type='radio']):not([type='file']):not([type='range']):not([type='date']):not(
|
|
287
280
|
[type='time']
|
|
288
281
|
),
|
|
289
|
-
textarea,
|
|
290
282
|
output
|
|
291
283
|
):has(~ .suffix) {
|
|
292
284
|
order: 1;
|
|
@@ -660,7 +652,9 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
660
652
|
|
|
661
653
|
input:checked + .conditional,
|
|
662
654
|
input:checked + label + .conditional,
|
|
663
|
-
label:has(:checked) + .conditional
|
|
655
|
+
label:has(:checked) + .conditional,
|
|
656
|
+
.was-validated .conditional:has(input[required]:invalid),
|
|
657
|
+
.was-validated .conditional:focus-within {
|
|
664
658
|
display: block;
|
|
665
659
|
clear: both;
|
|
666
660
|
}
|
|
@@ -833,7 +827,7 @@ $icon-tick: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' view
|
|
|
833
827
|
margin-bottom: 1.5rem;
|
|
834
828
|
max-width: var(--input-max-width);
|
|
835
829
|
|
|
836
|
-
:is(input:not([type='range']), select
|
|
830
|
+
:is(input:not([type='range']), select) {
|
|
837
831
|
margin-top: 0.5rem;
|
|
838
832
|
margin-bottom: 0 !important;
|
|
839
833
|
}
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
|
|
38
38
|
.icon[class*='fa-'][class*='bg-'] {
|
|
39
39
|
aspect-ratio: 1 / 1;
|
|
40
|
-
width: calc(1lh + 0.
|
|
41
|
-
min-width: calc(1lh + 0.
|
|
42
|
-
max-width: calc(1lh + 0.
|
|
40
|
+
width: calc(1lh + 0.5em);
|
|
41
|
+
min-width: calc(1lh + 0.5em);
|
|
42
|
+
max-width: calc(1lh + 0.5em);
|
|
43
43
|
text-align: center;
|
|
44
|
-
padding: 0.
|
|
44
|
+
padding: 0.25em;
|
|
45
45
|
border-radius: 50% !important;
|
|
46
46
|
display: inline-block;
|
|
47
47
|
}
|
|
@@ -131,7 +131,6 @@
|
|
|
131
131
|
// #region input field
|
|
132
132
|
:is(
|
|
133
133
|
input:not([type='checkbox']):not([type='radio']):not([type='file']):not([type='range']),
|
|
134
|
-
textarea,
|
|
135
134
|
output
|
|
136
135
|
) {
|
|
137
136
|
display: block;
|
|
@@ -182,11 +181,6 @@
|
|
|
182
181
|
}
|
|
183
182
|
}
|
|
184
183
|
|
|
185
|
-
textarea {
|
|
186
|
-
max-height: 100%;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
184
|
input[type='color'] {
|
|
191
185
|
|
|
192
186
|
padding: 0!important;
|
|
@@ -195,7 +189,6 @@
|
|
|
195
189
|
|
|
196
190
|
[disabled] :is(
|
|
197
191
|
input:not([type='checkbox']):not([type='radio']):not([type='file']):not([type='range']),
|
|
198
|
-
textarea,
|
|
199
192
|
output,
|
|
200
193
|
select:not(.select--minimal, .btn)
|
|
201
194
|
) {
|
|
@@ -215,13 +208,6 @@
|
|
|
215
208
|
max-width: var(--input-max-width);
|
|
216
209
|
}
|
|
217
210
|
|
|
218
|
-
textarea {
|
|
219
|
-
--textarea-height-scale: 3;
|
|
220
|
-
min-height: calc(
|
|
221
|
-
var(--input-padding-block, 0.75rem) + var(--input-padding-block, 0.75rem) +
|
|
222
|
-
(var(--input-lh, 1.25rem) * var(--textarea-height-scale)) + 4px
|
|
223
|
-
) !important;
|
|
224
|
-
}
|
|
225
211
|
// #endregion
|
|
226
212
|
|
|
227
213
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
2
|
+
@use 'sass:math';
|
|
3
|
+
|
|
4
|
+
@use '../_func' as *;
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@layer elements {
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
textarea {
|
|
11
|
+
|
|
12
|
+
--textarea-height-scale: 3;
|
|
13
|
+
|
|
14
|
+
margin: 0; // 1
|
|
15
|
+
font-family: inherit;
|
|
16
|
+
|
|
17
|
+
resize: vertical; // 1
|
|
18
|
+
display: block;
|
|
19
|
+
width: 100%;
|
|
20
|
+
display: block;
|
|
21
|
+
width: 100%;
|
|
22
|
+
padding: var(--input-padding-block, 0.75rem) var(--input-padding-inline, 1rem);
|
|
23
|
+
font-size: var(--input-fs, 1rem);
|
|
24
|
+
line-height: var(--input-lh, 1.25rem);
|
|
25
|
+
color: var(--colour-heading);
|
|
26
|
+
background-color: var(--colour-canvas-2);
|
|
27
|
+
background-clip: padding-box;
|
|
28
|
+
border: 2px solid var(--colour-primary);
|
|
29
|
+
appearance: none; // Fix appearance for date inputs in Safari
|
|
30
|
+
border-radius: 0.5rem;
|
|
31
|
+
margin-bottom: 1.5rem;
|
|
32
|
+
max-height: 100%;
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
&:not([rows]){
|
|
36
|
+
|
|
37
|
+
min-height: calc(
|
|
38
|
+
var(--input-padding-block, 0.75rem) + var(--input-padding-block, 0.75rem) +
|
|
39
|
+
(var(--input-lh, 1.25rem) * var(--textarea-height-scale)) + 4px
|
|
40
|
+
) !important;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&[rows="1"] {
|
|
44
|
+
|
|
45
|
+
--textarea-height-scale: 1;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&[rows="2"] {
|
|
49
|
+
|
|
50
|
+
--textarea-height-scale: 2;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&:is([rows="2"],[rows="2"]) {
|
|
54
|
+
min-height: calc(
|
|
55
|
+
var(--input-padding-block, 0.75rem) + var(--input-padding-block, 0.75rem) +
|
|
56
|
+
(var(--input-lh, 1.25rem) * var(--textarea-height-scale)) + 4px
|
|
57
|
+
) !important;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Customize the `:focus` state to imitate native WebKit styles.
|
|
61
|
+
&:is(:focus, .focus):not(:disabled) {
|
|
62
|
+
border-color: var(--colour-info);
|
|
63
|
+
outline: 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
&:is(:focus, .focus):not(:disabled):not(:invalid) {
|
|
67
|
+
box-shadow: 0 0 0 0.1rem rgba(30, 190, 230, 0.25);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
// Disabled inputs
|
|
72
|
+
&:disabled {
|
|
73
|
+
background-color: #ccd6d8;
|
|
74
|
+
opacity: 0.4;
|
|
75
|
+
cursor: not-allowed;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
[disabled] textarea {
|
|
80
|
+
background-color: #ccd6d8;
|
|
81
|
+
opacity: 0.4;
|
|
82
|
+
cursor: not-allowed;
|
|
83
|
+
pointer-events: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
label:not(.tag):has(textarea) {
|
|
87
|
+
display: block;
|
|
88
|
+
margin-bottom: 1.5rem;
|
|
89
|
+
max-width: var(--input-max-width);
|
|
90
|
+
|
|
91
|
+
textarea {
|
|
92
|
+
margin-top: 0.5rem;
|
|
93
|
+
margin-bottom: 0 !important;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
}
|
|
@@ -50,21 +50,30 @@
|
|
|
50
50
|
outline: var(--contrast-outline-width, 0px) solid var(--colour-primary);
|
|
51
51
|
width: 100%;
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
> *:last-child {
|
|
54
|
+
margin-bottom: 0 !important;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@media screen and (min-width: 36em) {
|
|
59
|
+
.form-panel {
|
|
54
60
|
max-width: calc(100% - 5rem); // Guess
|
|
55
61
|
margin-inline: auto;
|
|
56
62
|
}
|
|
63
|
+
}
|
|
57
64
|
|
|
58
|
-
|
|
65
|
+
@media screen and (min-width: 62em) {
|
|
66
|
+
.form-panel {
|
|
59
67
|
max-width: rem(924); // Guess
|
|
60
68
|
border-radius: 0.5rem;
|
|
61
69
|
padding-inline: rem(94);
|
|
62
70
|
padding-block: 2.5rem;
|
|
63
71
|
margin-bottom: 2rem;
|
|
64
72
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
|
|
74
|
+
.form-panel--sm {
|
|
75
|
+
max-width: 40rem; /* 640px */
|
|
76
|
+
padding-inline: 2rem;
|
|
68
77
|
}
|
|
69
78
|
}
|
|
70
79
|
|
|
@@ -73,6 +82,10 @@
|
|
|
73
82
|
padding-inline: 0;
|
|
74
83
|
max-width: rem(924) !important;
|
|
75
84
|
}
|
|
85
|
+
|
|
86
|
+
.form-panel .btn__group {
|
|
87
|
+
margin-bottom: 0;
|
|
88
|
+
}
|
|
76
89
|
}
|
|
77
90
|
|
|
78
91
|
[data-loading] {
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { trackComponent, trackComponentRegistered } from '../_global';
|
|
2
|
+
import { searchAjax, filterList, setTag } from '../../modules/dropdown';
|
|
3
|
+
|
|
4
|
+
trackComponentRegistered('iam-tag');
|
|
5
|
+
|
|
6
|
+
class iamTag extends HTMLElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
this.attachShadow({ mode: 'open' });
|
|
10
|
+
|
|
11
|
+
const template = document.createElement('template');
|
|
12
|
+
template.innerHTML = `
|
|
13
|
+
<div class="wrapper">
|
|
14
|
+
<slot></slot>
|
|
15
|
+
</div>
|
|
16
|
+
`;
|
|
17
|
+
|
|
18
|
+
this.shadowRoot.appendChild(template.content.cloneNode(true));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
isFormValid(form):boolean {
|
|
22
|
+
|
|
23
|
+
if (form.querySelector(':invalid'))
|
|
24
|
+
return false;
|
|
25
|
+
|
|
26
|
+
if (form.querySelector('.pwd-checker[data-strength="1"]') || form.querySelector('.pwd-checker[data-strength="2"]'))
|
|
27
|
+
return false;
|
|
28
|
+
|
|
29
|
+
if (form.querySelector('iam-multiselect[data-is-required][data-error]'))
|
|
30
|
+
return false;
|
|
31
|
+
|
|
32
|
+
return true;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
connectedCallback(): void {
|
|
36
|
+
|
|
37
|
+
const form = this.querySelector('form');
|
|
38
|
+
|
|
39
|
+
if(!form)
|
|
40
|
+
return false;
|
|
41
|
+
|
|
42
|
+
form.setAttribute('novalidate','true');
|
|
43
|
+
|
|
44
|
+
// Form validation
|
|
45
|
+
form.addEventListener('submit', (e) => {
|
|
46
|
+
|
|
47
|
+
form.classList.add('was-validated');
|
|
48
|
+
|
|
49
|
+
if (!this.isFormValid(form)) {
|
|
50
|
+
|
|
51
|
+
console.log('hey2');
|
|
52
|
+
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
form?.querySelector('input:invalid')?.scrollIntoView();
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
// conditional reveal required fields
|
|
60
|
+
Array.from(form.querySelectorAll('.conditional [required]')).forEach((input) => {
|
|
61
|
+
|
|
62
|
+
input.setAttribute('data-conditional-required','true');
|
|
63
|
+
input.removeAttribute('required');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// conditional reveal required fields (for fields inside of components like the address lookup)
|
|
67
|
+
Array.from(form.querySelectorAll('.conditional [data-required]')).forEach((input) => {
|
|
68
|
+
|
|
69
|
+
input.setAttribute('data-conditional-data-required','true');
|
|
70
|
+
input.removeAttribute('data-required');
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
form.addEventListener('change', () => {
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
Array.from(form.querySelectorAll('.conditional [data-conditional-required], .conditional [data-conditional-data-required]')).forEach((input) => {
|
|
77
|
+
|
|
78
|
+
input.removeAttribute('required');
|
|
79
|
+
input.removeAttribute('data-required');
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
Array.from(form.querySelectorAll('.conditional [data-conditional-required]')).forEach((input) => {
|
|
84
|
+
|
|
85
|
+
const conditionalStyles = window.getComputedStyle(input.closest('.conditional'));
|
|
86
|
+
|
|
87
|
+
if(conditionalStyles.getPropertyValue("display") == 'block')
|
|
88
|
+
input.setAttribute('required', 'required');
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
Array.from(form.querySelectorAll('.conditional [data-conditional-data-required]')).forEach((input) => {
|
|
92
|
+
|
|
93
|
+
const conditionalStyles = window.getComputedStyle(input.closest('.conditional'));
|
|
94
|
+
|
|
95
|
+
if(conditionalStyles.getPropertyValue("display") == 'block')
|
|
96
|
+
input.setAttribute('data-required', 'true');
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export default iamTag;
|
|
@@ -66,16 +66,18 @@ class iamInput extends HTMLElement {
|
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
const setCurrencyRules = (): void => {
|
|
69
|
-
|
|
69
|
+
let originalValue = input.value.replace(',','');
|
|
70
|
+
|
|
71
|
+
input?.setAttribute('data-value',originalValue);
|
|
70
72
|
input.setAttribute('type','text');
|
|
71
|
-
|
|
72
|
-
input.value = new Intl.NumberFormat("en-GB", {
|
|
73
|
+
originalValue = new Intl.NumberFormat("en-GB", {
|
|
73
74
|
style: "currency",
|
|
74
75
|
currency: "GBP",
|
|
75
|
-
minimumFractionDigits: Number.isInteger(
|
|
76
|
-
maximumFractionDigits: Number.isInteger(
|
|
76
|
+
minimumFractionDigits: Number.isInteger(originalValue) ? 0 : 2,
|
|
77
|
+
maximumFractionDigits: Number.isInteger(originalValue) ? 0 : 2,
|
|
77
78
|
trailingZeroDisplay: 'stripIfInteger' // Strip zeros if it's an integer
|
|
78
|
-
}).format(
|
|
79
|
+
}).format(originalValue).replace("£", "");
|
|
80
|
+
input.value = originalValue;
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
|