wj-elements 0.1.164 → 0.1.166
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/dist/packages/utils/event.d.ts +4 -4
- package/dist/packages/wje-accordion/accordion.test.d.ts +0 -0
- package/dist/packages/wje-color-picker/color-picker.test.d.ts +1 -0
- package/dist/packages/wje-dialog/dialog.element.d.ts +4 -4
- package/dist/packages/wje-element/element.d.ts +1 -1
- package/dist/packages/wje-icon-picker/icon-picker.element.d.ts +0 -4
- package/dist/packages/wje-input/input.element.d.ts +0 -5
- package/dist/packages/wje-option/option.element.d.ts +1 -0
- package/dist/packages/wje-options/options.element.d.ts +8 -6
- package/dist/packages/wje-radio-group/radio-group.element.d.ts +6 -0
- package/dist/packages/wje-select/select.element.d.ts +3 -1
- package/dist/packages/wje-tab/tab.element.d.ts +2 -0
- package/dist/packages/wje-tab-group/tab-group.element.d.ts +44 -9
- package/dist/wje-checkbox.js +3 -2
- package/dist/wje-checkbox.js.map +1 -1
- package/dist/wje-dialog.js +4 -4
- package/dist/wje-dialog.js.map +1 -1
- package/dist/wje-element.js +17 -16
- package/dist/wje-element.js.map +1 -1
- package/dist/wje-icon-picker.js +10 -16
- package/dist/wje-icon-picker.js.map +1 -1
- package/dist/wje-input.js +7 -11
- package/dist/wje-input.js.map +1 -1
- package/dist/wje-option.js +17 -13
- package/dist/wje-option.js.map +1 -1
- package/dist/wje-options.js +44 -7
- package/dist/wje-options.js.map +1 -1
- package/dist/wje-radio-group.js +22 -12
- package/dist/wje-radio-group.js.map +1 -1
- package/dist/wje-radio.js +6 -7
- package/dist/wje-radio.js.map +1 -1
- package/dist/wje-select.js +65 -28
- package/dist/wje-select.js.map +1 -1
- package/dist/wje-tab-group.js +52 -12
- package/dist/wje-tab-group.js.map +1 -1
- package/dist/wje-tab.js +2 -1
- package/dist/wje-tab.js.map +1 -1
- package/package.json +1 -1
package/dist/wje-element.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-element.js","sources":["../packages/wje-element/service/universal-service.js","../packages/utils/permissions-api.js","../packages/utils/element-utils.js","../packages/utils/event.js","../packages/wje-element/element.js"],"sourcesContent":["export class UniversalService {\n constructor(props = {}) {\n this._store = props.store;\n }\n\n findByKey = (attrName, key, keyValue) => {\n if (this._store.getState()[attrName] instanceof Array) {\n return this._store.getState()[attrName].find((item) => item[key] === keyValue);\n } else {\n console.warn(` Attribute ${attrName} is not array`);\n return null;\n }\n };\n\n findById = (attrName, id) => {\n if (this._store.getState()[attrName] instanceof Array) {\n return this._store.getState()[attrName].find((item) => item.id === id);\n } else {\n console.warn(` Attribute ${attrName} is not array`);\n return null;\n }\n };\n\n findAttributeValue = (attrName) => {\n return this._store.getState()[attrName];\n };\n\n update = (data, action) => {\n this._store.dispatch(action(data));\n };\n\n add = (data, action) => {\n this._store.dispatch(action(data));\n };\n\n _request(url, data, action, dispatchMethod, method, signal) {\n let promise = fetch(url, {\n method: method,\n ...(data ? { body: JSON.stringify(data) } : {}),\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(signal ? { signal } : {}),\n }).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return response.json();\n }\n });\n\n return this.dispatch(promise, dispatchMethod, action);\n }\n\n put(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'PUT', signal);\n }\n\n post(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'POST', signal);\n }\n\n delete(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'DELETE', signal);\n }\n\n //url, action, dispatchMethod, signa\n get(url, action, dispatchMethod = true, signal = null) {\n return this._request(url, null, action, dispatchMethod, 'GET', signal);\n }\n\n patch(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'PATCH', signal);\n }\n\n dispatch(promise, dispatchMethod, action) {\n if (dispatchMethod) {\n return promise\n .then((data) => {\n this._store.dispatch(action(data.data));\n return data;\n })\n .catch((error) => {\n console.error(error);\n });\n }\n return promise;\n }\n\n loadPromise = (\n url,\n action,\n method = 'GET',\n data = '',\n permissionCallBack = () => {\n //\n // No empty function\n }\n ) => {\n return fetch(url, {\n method: method,\n body: data,\n headers: {\n 'Content-Type': 'application/json',\n },\n async: true,\n })\n .then((response, e) => {\n let permissions = response.headers.get('permissions')?.split(',');\n permissionCallBack(permissions);\n\n if (response.ok) {\n return response.json();\n } else {\n throw response.json();\n }\n })\n .then((responseData) => {\n this._store.dispatch(action(responseData));\n return responseData;\n });\n };\n\n loadOnePromise = (url, action) => {\n return fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then((response) => {\n const responseData = response.json();\n if (action) {\n this._store.dispatch(action(responseData));\n }\n return responseData;\n });\n };\n}\n","export class WjePermissionsApi {\n static _permissionKey = 'permissions';\n\n /**\n * Sets the permission key.\n * @param value\n */\n static set permissionKey(value) {\n WjePermissionsApi._permissionKey = value || 'permissions';\n }\n\n /**\n * Returns the permission key.\n * @returns {*|string}\n */\n static get permissionKey() {\n return WjePermissionsApi._permissionKey;\n }\n\n /**\n * Sets the permissions.\n * @param value\n */\n static set permissions(value) {\n window.localStorage.setItem(WjePermissionsApi.permissionKey, JSON.stringify(value));\n }\n\n /**\n * Returns the permissions.\n * @returns {string[]}\n */\n static get permissions() {\n return JSON.parse(window.localStorage.getItem(WjePermissionsApi.permissionKey)) || [];\n }\n\n /**\n * Checks if the permission is included.\n * @param key\n * @returns {boolean}\n */\n static includesKey(key) {\n return WjePermissionsApi.permissions.includes(key);\n }\n\n /**\n * Checks if the permission is fulfilled.\n * @returns {boolean}\n */\n static isPermissionFulfilled(permissions) {\n return permissions.some((perm) => WjePermissionsApi.permissions.includes(perm));\n }\n}\n","export class WjElementUtils {\n /**\n * This function creates an element.\n * @param element : HTMLElement - The element value.\n * @param object : Object - The object value.\n */\n static setAttributesToElement(element, object) {\n Object.entries(object).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n }\n\n /**\n * This function gets the attributes from an element.\n * @param {string|HTMLElement} el The element or selector to retrieve attributes from.\n * @returns {object} - An object containing the element's attributes as key-value pairs.\n */\n static getAttributes(el) {\n if (typeof el === 'string') el = document.querySelector(el);\n\n return Array.from(el.attributes)\n .filter((a) => !a.name.startsWith('@'))\n .map((a) => [\n a.name\n .split('-')\n .map((s, i) => {\n if (i !== 0) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n } else {\n return s;\n }\n })\n .join(''),\n a.value,\n ])\n .reduce((acc, attr) => {\n acc[attr[0]] = attr[1];\n return acc;\n }, {});\n }\n\n /**\n * This function gets the events from an element.\n * @param {string|HTMLElement} el The element or selector to retrieve events from.\n * @returns {Map<any, any>} - The map value.\n */\n static getEvents(el) {\n if (typeof el === 'string') el = document.querySelector(el);\n\n return Array.from(el.attributes)\n .filter((a) => a.name.startsWith('@wje'))\n .map((a) => [a.name.substring(3).split('-').join(''), a.value])\n .reduce((acc, attr) => {\n acc.set(attr[0], attr[1]);\n return acc;\n }, new Map());\n }\n\n /**\n * This function converts an object to a string.\n * @param {object} object The object to convert.\n * @returns {string} - The string value.\n */\n static attributesToString(object) {\n return Object.entries(object)\n .map(([key, value]) => {\n return `${key}=\"${value}\"`;\n })\n .join(' ');\n }\n\n /**\n * This function checks if the slot exists.\n * @param {string|HTMLElement} el The element or selector to check for slots.\n * @param slotName The slot name to check for.\n * @returns {boolean} - The boolean value.\n */\n static hasSlot(el, slotName = null) {\n let selector = slotName ? `[slot=\"${slotName}\"]` : '[slot]';\n\n return el.querySelectorAll(selector).length > 0 ? true : false;\n }\n\n /**\n * This function checks if the slot has content.\n * @param {string|HTMLElement} el The element or selector to check for slot content\n * @param slotName The slot name to check for.\n * @returns {boolean} - The boolean value.\n */\n static hasSlotContent(el, slotName = null) {\n let slotElement = el.querySelector(`slot`);\n if (slotName) {\n slotElement = el.querySelector(`slot[name=\"${slotName}\"]`);\n }\n\n if (slotElement) {\n const assignedElements = slotElement.assignedElements();\n return assignedElements.length > 0;\n }\n\n return false;\n }\n\n /**\n * This function converts a string to a boolean.\n * @param {string | object} value The value to convert to a boolean. If the value is a boolean, it will be returned as is.\n * @returns {boolean} - The boolean value.\n */\n static stringToBoolean(value) {\n if (typeof value === 'boolean') return value;\n\n return !['false', '0', 0].includes(value);\n }\n}\n","var self; // eslint-disable-line no-var\n\nclass Event {\n constructor() {\n this.customEventWeakMap = new WeakMap();\n self = this;\n }\n\n /**\n * Dispatch event to the element and trigger the listener.\n * @param e\n */\n #dispatch(e) {\n let element = this;\n // let record = self.findRecordByElement(element);\n let record = self.customEventWeakMap.get(this);\n\n if (!record) return;\n\n let listeners = record[e.type];\n\n listeners.forEach((listener) => {\n self.dispatchCustomEvent(element, listener.event, {\n originalEvent: e?.type || null,\n context: element,\n event: self,\n });\n\n if (listener.options && listener.options.stopPropagation === true) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n });\n }\n\n /**\n * Dispatch custom event to the element with the specified event name and detail.\n * @param element\n * @param event\n * @param detail\n */\n dispatchCustomEvent(element, event, detail) {\n element.dispatchEvent(\n new CustomEvent(event, {\n detail: detail || {\n context: element,\n event: self,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n );\n }\n\n /**\n * Find record by element in the storage.\n * @param element\n * @returns {*}\n */\n\n findRecordByElement(element) {\n return this.customEventWeakMap.get(element);\n }\n\n /**\n * Add listener to the element. If the element is an array, the listener will be added to all elements in the array.\n * @param element\n * @param originalEvent\n * @param event\n * @param listener\n * @param options\n */\n addListener(element, originalEvent, event, listener, options) {\n if (!element) return;\n\n if (!Array.isArray(element)) element = [element];\n\n element.forEach((el) => {\n this.writeRecord(el, originalEvent, event, listener, options);\n });\n }\n\n /**\n * Write record to the storage.\n * @param element\n * @param originalEvent\n * @param event\n * @param listener\n * @param options\n */\n writeRecord(element, originalEvent, event, listener, options) {\n let recordListeners = this.findRecordByElement(element);\n\n if (!recordListeners) {\n this.customEventWeakMap.set(element, {\n [originalEvent]: [],\n });\n\n recordListeners = this.findRecordByElement(element);\n } else {\n recordListeners[originalEvent] = recordListeners[originalEvent] || [];\n }\n\n listener = listener || this.#dispatch;\n let obj = {\n listener: listener,\n options: options,\n event: event,\n };\n\n // skontrolujeme ci uz tento listener neexistuje\n if (!this.listenerExists(element, originalEvent, obj)) {\n recordListeners[originalEvent].push(obj);\n element.addEventListener(originalEvent, listener, options);\n obj.unbind = () => {\n element.removeEventListener(originalEvent, listener, options);\n };\n } else {\n // in case we want to add the same listener multiple times trigger a warning for a better debugging\n //console.info(\"Listener already exists\", element, originalEvent);\n }\n }\n\n /**\n * Performs a deep equality check between two objects.\n * @param x The first object to compare.\n * @param y The second object to compare.\n * @returns - Returns `true` if the objects are deeply equal, `false` otherwise.\n */\n deepEqual(x, y) {\n return x && y && typeof x === 'object' && typeof x === typeof y\n ? Object.keys(x).length === Object.keys(y).length &&\n Object.keys(x).every((key) => this.deepEqual(x[key], y[key]))\n : x === y;\n }\n\n /**\n * Check if the listener already exists on the element.\n * @param element\n * @param event\n * @param listener\n * @returns\n */\n listenerExists(element, event, listener) {\n let record = this.findRecordByElement(element);\n return record[event].some((e) => this.deepEqual(e, listener));\n }\n\n /**\n * Remove listener from the element and delete the listener from the custom event storage.\n * @param element\n * @param originalEvent\n * @param event\n * @param listener\n * @param options\n */\n removeListener(element, originalEvent, event, listener, options) {\n let records = this.findRecordByElement(element);\n let listeners = records?.[originalEvent];\n listener = listener || this.#dispatch;\n\n if (listeners) {\n let listenerOfWeakMap = listeners.find((e) => e.listener === listener);\n\n if (listenerOfWeakMap) {\n listeners.splice(listeners.indexOf(listenerOfWeakMap), 1);\n }\n\n if (!listeners.length) {\n delete records[originalEvent];\n }\n }\n\n element?.removeEventListener(originalEvent, listener, options);\n }\n\n /**\n * Remove all event listeners from the specified element and delete the element from the custom event storage.\n * @param {HTMLElement} element The element from which all listeners will be removed.\n */\n removeElement(element) {\n // remove all listeners from the element\n let listeners = this.customEventWeakMap.get(element);\n if (listeners) {\n queueMicrotask(() => {\n for (let event in listeners) {\n listeners[event].forEach((e) => {\n element.removeEventListener(event, e.listener, e.options);\n });\n }\n\n this.customEventWeakMap.delete(element);\n });\n }\n }\n\n // TODO\n createPromiseFromEvent(element, event) {\n return new Promise((resolve) => {\n let success = () => {\n element.removeEventListener(event, success);\n resolve();\n };\n\n element.addEventListener(event, success);\n });\n }\n}\n\nlet event = new Event();\nexport { event };\n","import { UniversalService } from './service/universal-service.js';\nimport { defaultStoreActions, store } from '../wje-store/store.js';\nimport { WjePermissionsApi } from '../utils/permissions-api.js';\nimport { WjElementUtils } from '../utils/element-utils.js';\nimport { event } from '../utils/event.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = ``;\nexport default class WJElement extends HTMLElement {\n /**\n * Initializes a new instance of the WJElement class.\n */\n\n constructor() {\n super();\n\n this.isAttached = false;\n this.service = new UniversalService({\n store: store,\n });\n\n // definujeme vsetky zavislosti.\n // Do zavislosti patria len komponenty, ktore su zavisle od ktoreho je zavisly tento komponent\n this.defineDependencies();\n\n this.rendering = false;\n this._dependencies = {};\n\n /**\n * @typedef {CREATED | ATTACHED | BEGINING | START | DRAWING | DONE | DISCONNECTED} DrawingStatus\n * @property {number} CREATED - The component has been created.\n * @property {number} ATTACHED - The component has been attached to the DOM.\n * @property {number} BEGINING - The component is beginning to draw.\n * @property {number} START - The component has started drawing.\n * @property {number} DRAWING - The component is drawing.\n * @property {number} DONE - The component has finished drawing.\n * @property {number} DISCONNECTED - The component has been disconnected from the DOM.\n */\n this.drawingStatuses = {\n CREATED: 0,\n ATTACHED: 1,\n BEGINING: 2,\n START: 3,\n DRAWING: 4,\n DONE: 5,\n DISCONNECTED: 6,\n };\n\n this.drawingStatus = this.drawingStatuses.CREATED;\n\n this._pristine = true;\n this._pristineCauseWeakMap = new WeakMap();\n\n this.isRendering = false;\n this.rafId = null;\n this.originalVisibility = null;\n this.params = {};\n\n this.updateComplete = new Promise((resolve, reject) => {\n this.finisPromise = resolve;\n this.rejectPromise = reject;\n });\n }\n\n /**\n * Sets the value of the 'permission' attribute.\n * @param {string[]} value The value to set for the 'permission' attribute.\n */\n set permission(value) {\n this.setAttribute('permission', value.join(','));\n }\n\n /**\n * Gets the value of the 'permission-check' attribute.\n * @returns {string[]} The value of the 'permission' attribute.\n */\n get permission() {\n return this.getAttribute('permission')?.split(',') || [];\n }\n\n /**\n * Sets the 'permission-check' attribute.\n * @param {boolean} value The value to set for the 'permission-check' attribute.\n */\n set isPermissionCheck(value) {\n if (value) this.setAttribute('permission-check', '');\n else this.removeAttribute('permission-check');\n }\n\n /**\n * Checks if the 'permission-check' attribute is present.\n * @returns {boolean} True if the 'permission-check' attribute is present.\n */\n get isPermissionCheck() {\n return this.hasAttribute('permission-check');\n }\n\n set noShow(value) {\n if (value) this.setAttribute('no-show', '');\n else this.removeAttribute('no-show');\n }\n\n /**\n * Checks if the 'show' attribute is present.\n * @returns {boolean} True if the 'show' attribute is present.\n */\n get noShow() {\n return this.hasAttribute('no-show');\n }\n\n /**\n * Sets the 'shadow' attribute.\n * @param {string} value The value to set for the 'shadow' attribute.\n */\n set isShadowRoot(value) {\n return this.setAttribute('shadow', value);\n }\n\n get isShadowRoot() {\n return this.getAttribute('shadow');\n }\n\n /**\n * Checks if the 'shadow' attribute is present.\n * @returns {boolean} True if the 'shadow' attribute is present.\n */\n get hasShadowRoot() {\n return this.hasAttribute('shadow');\n }\n\n /**\n * Gets the value of the 'shadow' attribute or 'open' if not set.\n * @returns {string} The value of the 'shadow' attribute or 'open'.\n */\n get shadowType() {\n return this.getAttribute('shadow') || 'open';\n }\n\n /**\n * Gets the rendering context, either the shadow root or the component itself.\n * @returns The rendering context.\n */\n get context() {\n if (this.hasShadowRoot) {\n return this.shadowRoot;\n } else {\n return this;\n }\n }\n\n /**\n * Gets the store instance.\n * @returns {object} The store instance.\n */\n get store() {\n return store;\n }\n\n /**\n * @typedef {object} ArrayActions\n * @property {Function} addAction - Adds an item to the array.\n * @property {Function} deleteAction - Deletes an item from the array.\n * @property {Function} loadAction - Loads an array.\n * @property {Function} updateAction - Updates an item in the array.\n * @property {Function} addManyAction - Adds many items to the array.\n */\n\n /**\n * @typedef {object} ObjectActions\n * @property {Function} addAction - Replace old object with new object\n * @property {Function} deleteAction - Delete item based on key\n * @property {Function} updateAction - Update item based on key\n */\n\n /**\n * Gets the default store actions.\n * @returns The default store actions for arrays and objects.\n */\n get defaultStoreActions() {\n return defaultStoreActions;\n }\n\n /**\n * Gets the classes to be removed after the component is connected.\n * @returns An array of class names to remove.\n */\n get removeClassAfterConnect() {\n return this.getAttribute('remove-class-after-connect')?.split(' ');\n }\n\n /**\n * Sets the component dependencies.\n * @param value The dependencies to set.\n */\n set dependencies(value) {\n this._dependencies = value;\n }\n\n /**\n * Gets the component dependencies.\n * @returns The component dependencies.\n */\n get dependencies() {\n return this._dependencies;\n }\n\n /**\n * Processes and combines two templates into one.\n * @param pTemplate The primary template.\n * @param inputTemplate The secondary template.\n * @returns The combined template.\n */\n static processTemplates = (pTemplate, inputTemplate) => {\n const newTemplate = document.createElement('template');\n newTemplate.innerHTML = [inputTemplate.innerHTML, pTemplate?.innerHTML || ''].join('');\n return newTemplate;\n };\n\n /**\n * Defines a custom element if not already defined.\n * @param name The name of the custom element.\n * @param [elementConstructor] The constructor for the custom element.\n * @param [options] Additional options for defining the element.\n */\n static define(name, elementConstructor = this, options = {}) {\n const definedElement = customElements.get(name);\n\n if (!definedElement) {\n customElements.define(name, elementConstructor, options);\n }\n }\n\n /**\n * Defines component dependencies by registering custom elements.\n */\n defineDependencies() {\n if (this.dependencies)\n Object.entries(this.dependencies).forEach((name, component) => WJElement.define(name, component));\n }\n\n /**\n * Hook for extending behavior before drawing the component.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStoreObj The global application store for managing state.\n * @param params Additional parameters or attributes for rendering the component.\n */\n beforeDraw(context, appStoreObj, params) {\n // Hook for extending behavior before drawing\n }\n\n /**\n * Renders the component within the provided context.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStoreObj\n * @param params Additional parameters or attributes for rendering the component.\n * @returns This implementation does not render anything and returns `null`.\n * @description\n * The `draw` method is responsible for rendering the component's content.\n * Override this method in subclasses to define custom rendering logic.\n * @example\n * class MyComponent extends WJElement {\n * draw(context, appStoreObj, params) {\n * const div = document.createElement('div');\n * div.textContent = 'Hello, world!';\n * context.appendChild(div);\n * }\n * }\n */\n draw(context, appStoreObj, params) {\n return null;\n }\n\n /**\n * Hook for extending behavior after drawing the component.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStoreObj The global application store for managing state.\n * @param params Additional parameters or attributes for rendering the component.\n */\n afterDraw(context, appStoreObj, params) {\n // Hook for extending behavior after drawing\n }\n\n /**\n * Lifecycle method invoked when the component is connected to the DOM.\n */\n connectedCallback() {\n if (!this.isRendering) {\n this.originalVisibility = this.originalVisibility ?? this.style.visibility;\n this.style.visibility = 'hidden';\n\n this.setupAttributes?.();\n this.setUpAccessors();\n\n this.drawingStatus = this.drawingStatuses.ATTACHED;\n this._pristine = false;\n this.enqueueUpdate();\n }\n }\n\n /**\n * Initializes the component, setting up attributes and rendering.\n * @param [force] Whether to force initialization.\n * @returns A promise that resolves when initialization is complete.\n */\n initWjElement = (force = false) => {\n return new Promise(async (resolve, reject) => {\n this.drawingStatus = this.drawingStatuses.BEGINING;\n\n this.setupAttributes?.();\n if (this.hasShadowRoot) {\n if (!this.shadowRoot) this.attachShadow({ mode: this.shadowType || 'open' });\n }\n this.setUpAccessors();\n\n this.drawingStatus = this.drawingStatuses.START;\n await this.display(force);\n\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(this.constructor.cssStyleSheet);\n\n this.context.adoptedStyleSheets = [sheet];\n\n resolve();\n });\n };\n\n /**\n * Sets up attributes and event listeners for the component.\n * This method retrieves all custom events defined for the component\n * and adds event listeners for each of them. When an event is triggered,\n * it calls the corresponding method on the host element.\n */\n setupAttributes() {\n // Keď neaký element si zadefinuje funkciu \"setupAttributes\" tak sa obsah tejto funkcie nezavolá\n\n let allEvents = WjElementUtils.getEvents(this);\n allEvents.forEach((customEvent, domEvent) => {\n this.addEventListener(domEvent, (e) => {\n this.getRootNode().host[customEvent]?.();\n });\n });\n }\n\n /**\n * Hook for extending behavior before disconnecting the component.\n */\n beforeDisconnect() {\n // Hook for extending behavior before disconnecting\n }\n\n /**\n * Hook for extending behavior after disconnecting the component.\n */\n afterDisconnect() {\n // Hook for extending behavior after disconnecting\n }\n\n /**\n * Hook for extending behavior before redrawing the component.\n */\n beforeRedraw() {\n // Hook for extending behavior before redrawing\n }\n\n /**\n * Cleans up resources and event listeners for the component.\n */\n componentCleanup() {\n // Hook for cleaning up the component\n }\n\n /**\n * Lifecycle method invoked when the component is disconnected from the DOM.\n */\n disconnectedCallback() {\n if (this.isAttached) {\n this.beforeDisconnect?.();\n this.context.innerHTML = '';\n this.afterDisconnect?.();\n this.isAttached = false;\n this.style.visibility = this.originalVisibility;\n this.originalVisibility = null;\n }\n\n if (this.isRendering) {\n this.stopRenderLoop();\n }\n\n this.drawingStatus = this.drawingStatuses.DISCONNECTED;\n\n this.componentCleanup();\n }\n\n /**\n * Enqueues an update for the component.\n * This method processes the current render promise and then refreshes the component.\n */\n enqueueUpdate() {\n if (!this.rafId) {\n this.rafId = requestAnimationFrame(() => this._refresh());\n }\n }\n\n /**\n * Lifecycle method invoked when an observed attribute changes.\n * @param name The name of the attribute that changed.\n * @param old The old value of the attribute.\n * @param newName The new value of the attribute.\n */\n attributeChangedCallback(name, old, newName) {\n if (old !== newName) {\n this._pristine = false;\n this.enqueueUpdate();\n }\n }\n\n refresh() {\n this.updateComplete = new Promise((resolve, reject) => {\n this.finisPromise = resolve;\n this.rejectPromise = reject;\n });\n\n this._pristine = false;\n this.enqueueUpdate();\n }\n\n /**\n * Refreshes the component by reinitializing it if it is in a drawing state.\n * This method checks if the component's drawing status is at least in the START state.\n * If so, it performs the following steps:\n * 1. Calls the `beforeRedraw` hook if defined.\n * 2. Calls the `beforeDisconnect` hook if defined.\n * 3. Refreshes the update promise to manage the rendering lifecycle.\n * 4. Calls the `afterDisconnect` hook if defined.\n * 5. Reinitializes the component by calling `initWjElement` with `true` to force initialization.\n * If the component is not in a drawing state, it simply returns a resolved promise.\n */\n async _refresh() {\n if (this.isRendering) {\n this.rafId = requestAnimationFrame(() => this._refresh());\n return; // Skip if async render is still processing\n }\n\n if (!this._pristine) {\n this._pristine = true;\n this.isRendering = true;\n\n if (this.isAttached) {\n this.beforeRedraw?.();\n this.beforeDisconnect?.();\n this.afterDisconnect?.();\n } else {\n this.stopRenderLoop();\n }\n\n try {\n await this.initWjElement(true);\n } catch (error) {\n console.error('Render error:', error);\n } finally {\n this.isRendering = false;\n\n if (!this._pristine) {\n this._pristine = false;\n this.enqueueUpdate();\n } else {\n this.finisPromise();\n this.style.visibility = this.originalVisibility;\n }\n }\n }\n\n if (this.isAttached && !this.isRendering) {\n this.rafId = requestAnimationFrame(() => this._refresh());\n }\n }\n\n stopRenderLoop() {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n /**\n * Renders the component within the provided context.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStore The global application store for managing state.\n * @param params Additional parameters or attributes for rendering the component.\n * @returns This implementation does not render anything and returns `null`.\n * @description\n * The `draw` method is responsible for rendering the component's content.\n * Override this method in subclasses to define custom rendering logic.\n * @example\n * class MyComponent extends WJElement {\n * draw(context, appStore, params) {\n * const div = document.createElement('div');\n * div.textContent = 'Hello, world!';\n * context.appendChild(div);\n * }\n * }\n */\n draw(context, appStore, params) {\n return null;\n }\n\n /**\n * Displays the component's content, optionally forcing a re-render.\n * @param [force] Whether to force a re-render.\n * @returns A promise that resolves when the display is complete.\n */\n display(force = false) {\n this.template = this.constructor.customTemplate || document.createElement('template');\n\n if (force) {\n [...this.context.childNodes].forEach(this.context.removeChild.bind(this.context));\n //this.isAttached = false;\n }\n\n this.context.append(this.template.content.cloneNode(true));\n\n if (this.noShow || (this.isPermissionCheck && !WjePermissionsApi.isPermissionFulfilled(this.permission))) {\n this.remove();\n return Promise.resolve();\n }\n\n return this._resolveRender();\n }\n\n /**\n * Renders the component's content.\n */\n async render() {\n this.drawingStatus = this.drawingStatuses.DRAWING;\n\n let _draw = this.draw(this.context, this.store, WjElementUtils.getAttributes(this));\n\n if (_draw instanceof Promise || _draw?.constructor.name === 'Promise') {\n _draw = await _draw;\n }\n\n let rend = _draw;\n let element;\n\n if (rend instanceof HTMLElement || rend instanceof DocumentFragment) {\n element = rend;\n } else {\n let inputTemplate = document.createElement('template');\n inputTemplate.innerHTML = rend;\n element = inputTemplate.content.cloneNode(true);\n }\n\n let rendered = element;\n\n this.context.appendChild(rendered);\n }\n\n /**\n * Sanitizes a given name by converting it from kebab-case to camelCase.\n * @param {string} name The name in kebab-case format (e.g., \"example-name\").\n * @returns {string} The sanitized name in camelCase format (e.g., \"exampleName\").\n * @example\n * // Returns 'exampleName'\n * sanitizeName('example-name');\n * @example\n * // Returns 'myCustomComponent'\n * sanitizeName('my-custom-component');\n */\n sanitizeName(name) {\n let parts = name.split('-');\n return [parts.shift(), ...parts.map((n) => n[0].toUpperCase() + n.slice(1))].join('');\n }\n\n /**\n * Checks if a property on an object has a getter or setter method defined.\n * @param {object} obj The object on which the property is defined.\n * @param {string} property The name of the property to check.\n * @returns {object} An object indicating the presence of getter and setter methods.\n * @property {Function|null} hasGetter The getter function if it exists, otherwise `null`.\n * @property {Function|null} hasSetter The setter function if it exists, otherwise `null`.\n * @example\n * const obj = {\n * get name() { return 'value'; },\n * set name(val) { console.log(val); }\n * };\n * // Returns { hasGetter: [Function: get name], hasSetter: [Function: set name] }\n * checkGetterSetter(obj, 'name');\n * @example\n * const obj = { prop: 42 };\n * // Returns { hasGetter: null, hasSetter: null }\n * checkGetterSetter(obj, 'prop');\n */\n checkGetterSetter(obj, property) {\n let descriptor = Object.getOwnPropertyDescriptor(obj, property);\n\n // Check if the descriptor is found on the object itself\n if (descriptor) {\n return {\n hasGetter: typeof descriptor.get === 'function' ? descriptor.get : null,\n hasSetter: typeof descriptor.set === 'function' ? descriptor.set : null,\n };\n }\n\n // Otherwise, check the prototype chain\n let proto = Object.getPrototypeOf(obj);\n if (proto) {\n return this.checkGetterSetter(proto, property);\n }\n\n // If the property doesn't exist at all\n return { hasGetter: null, hasSetter: null };\n }\n\n /**\n * Sets up property accessors for the component's attributes.\n */\n setUpAccessors() {\n let attrs = this.getAttributeNames();\n attrs.forEach((name) => {\n const sanitizedName = this.sanitizeName(name);\n\n const { hasGetter, hasSetter } = this.checkGetterSetter(this, sanitizedName);\n\n Object.defineProperty(this, sanitizedName, {\n set: hasSetter ?? ((value) => this.setAttribute(name, value)),\n get: hasGetter ?? (() => this.getAttribute(name)),\n });\n });\n }\n\n /**\n * Resolves the rendering process of the component.\n * @returns A promise that resolves when rendering is complete.\n * @private\n */\n _resolveRender() {\n this.params = WjElementUtils.getAttributes(this);\n\n return new Promise(async (resolve, reject) => {\n const __beforeDraw = this.beforeDraw(this.context, this.store, WjElementUtils.getAttributes(this));\n\n if (__beforeDraw instanceof Promise || __beforeDraw?.constructor.name === 'Promise') {\n await __beforeDraw;\n }\n\n await this.render();\n\n const __afterDraw = this.afterDraw?.(this.context, this.store, WjElementUtils.getAttributes(this));\n\n if (__afterDraw instanceof Promise || __afterDraw?.constructor.name === 'Promise') {\n await __afterDraw;\n }\n\n // RHR toto je bicykel pre slickRouter pretože routovanie nieje vykonané pokiaľ sa nezavolá updateComplete promise,\n // toto bude treba rozšíriť aby sme lepšie vedeli kontrolovať vykreslovanie elementov, a flow hookov.\n this.rendering = false;\n this.isAttached = true;\n\n if (this.removeClassAfterConnect) {\n this.classList.remove(...this.removeClassAfterConnect);\n }\n\n this.drawingStatus = this.drawingStatuses.DONE;\n\n resolve();\n }).catch((e) => {\n console.log(e);\n });\n }\n}\n\nlet __esModule = 'true';\nexport { __esModule, WjePermissionsApi, WjElementUtils, event };\n"],"names":["event"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-element.js","sources":["../packages/wje-element/service/universal-service.js","../packages/utils/permissions-api.js","../packages/utils/element-utils.js","../packages/utils/event.js","../packages/wje-element/element.js"],"sourcesContent":["export class UniversalService {\n constructor(props = {}) {\n this._store = props.store;\n }\n\n findByKey = (attrName, key, keyValue) => {\n if (this._store.getState()[attrName] instanceof Array) {\n return this._store.getState()[attrName].find((item) => item[key] === keyValue);\n } else {\n console.warn(` Attribute ${attrName} is not array`);\n return null;\n }\n };\n\n findById = (attrName, id) => {\n if (this._store.getState()[attrName] instanceof Array) {\n return this._store.getState()[attrName].find((item) => item.id === id);\n } else {\n console.warn(` Attribute ${attrName} is not array`);\n return null;\n }\n };\n\n findAttributeValue = (attrName) => {\n return this._store.getState()[attrName];\n };\n\n update = (data, action) => {\n this._store.dispatch(action(data));\n };\n\n add = (data, action) => {\n this._store.dispatch(action(data));\n };\n\n _request(url, data, action, dispatchMethod, method, signal) {\n let promise = fetch(url, {\n method: method,\n ...(data ? { body: JSON.stringify(data) } : {}),\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(signal ? { signal } : {}),\n }).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return response.json();\n }\n });\n\n return this.dispatch(promise, dispatchMethod, action);\n }\n\n put(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'PUT', signal);\n }\n\n post(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'POST', signal);\n }\n\n delete(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'DELETE', signal);\n }\n\n //url, action, dispatchMethod, signa\n get(url, action, dispatchMethod = true, signal = null) {\n return this._request(url, null, action, dispatchMethod, 'GET', signal);\n }\n\n patch(url, data, action, dispatchMethod = true, signal = null) {\n return this._request(url, data, action, dispatchMethod, 'PATCH', signal);\n }\n\n dispatch(promise, dispatchMethod, action) {\n if (dispatchMethod) {\n return promise\n .then((data) => {\n this._store.dispatch(action(data.data));\n return data;\n })\n .catch((error) => {\n console.error(error);\n });\n }\n return promise;\n }\n\n loadPromise = (\n url,\n action,\n method = 'GET',\n data = '',\n permissionCallBack = () => {\n //\n // No empty function\n }\n ) => {\n return fetch(url, {\n method: method,\n body: data,\n headers: {\n 'Content-Type': 'application/json',\n },\n async: true,\n })\n .then((response, e) => {\n let permissions = response.headers.get('permissions')?.split(',');\n permissionCallBack(permissions);\n\n if (response.ok) {\n return response.json();\n } else {\n throw response.json();\n }\n })\n .then((responseData) => {\n this._store.dispatch(action(responseData));\n return responseData;\n });\n };\n\n loadOnePromise = (url, action) => {\n return fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n }).then((response) => {\n const responseData = response.json();\n if (action) {\n this._store.dispatch(action(responseData));\n }\n return responseData;\n });\n };\n}\n","export class WjePermissionsApi {\n static _permissionKey = 'permissions';\n\n /**\n * Sets the permission key.\n * @param value\n */\n static set permissionKey(value) {\n WjePermissionsApi._permissionKey = value || 'permissions';\n }\n\n /**\n * Returns the permission key.\n * @returns {*|string}\n */\n static get permissionKey() {\n return WjePermissionsApi._permissionKey;\n }\n\n /**\n * Sets the permissions.\n * @param value\n */\n static set permissions(value) {\n window.localStorage.setItem(WjePermissionsApi.permissionKey, JSON.stringify(value));\n }\n\n /**\n * Returns the permissions.\n * @returns {string[]}\n */\n static get permissions() {\n return JSON.parse(window.localStorage.getItem(WjePermissionsApi.permissionKey)) || [];\n }\n\n /**\n * Checks if the permission is included.\n * @param key\n * @returns {boolean}\n */\n static includesKey(key) {\n return WjePermissionsApi.permissions.includes(key);\n }\n\n /**\n * Checks if the permission is fulfilled.\n * @returns {boolean}\n */\n static isPermissionFulfilled(permissions) {\n return permissions.some((perm) => WjePermissionsApi.permissions.includes(perm));\n }\n}\n","export class WjElementUtils {\n /**\n * This function creates an element.\n * @param element : HTMLElement - The element value.\n * @param object : Object - The object value.\n */\n static setAttributesToElement(element, object) {\n Object.entries(object).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n }\n\n /**\n * This function gets the attributes from an element.\n * @param {string|HTMLElement} el The element or selector to retrieve attributes from.\n * @returns {object} - An object containing the element's attributes as key-value pairs.\n */\n static getAttributes(el) {\n if (typeof el === 'string') el = document.querySelector(el);\n\n return Array.from(el.attributes)\n .filter((a) => !a.name.startsWith('@'))\n .map((a) => [\n a.name\n .split('-')\n .map((s, i) => {\n if (i !== 0) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n } else {\n return s;\n }\n })\n .join(''),\n a.value,\n ])\n .reduce((acc, attr) => {\n acc[attr[0]] = attr[1];\n return acc;\n }, {});\n }\n\n /**\n * This function gets the events from an element.\n * @param {string|HTMLElement} el The element or selector to retrieve events from.\n * @returns {Map<any, any>} - The map value.\n */\n static getEvents(el) {\n if (typeof el === 'string') el = document.querySelector(el);\n\n return Array.from(el.attributes)\n .filter((a) => a.name.startsWith('@wje'))\n .map((a) => [a.name.substring(3).split('-').join(''), a.value])\n .reduce((acc, attr) => {\n acc.set(attr[0], attr[1]);\n return acc;\n }, new Map());\n }\n\n /**\n * This function converts an object to a string.\n * @param {object} object The object to convert.\n * @returns {string} - The string value.\n */\n static attributesToString(object) {\n return Object.entries(object)\n .map(([key, value]) => {\n return `${key}=\"${value}\"`;\n })\n .join(' ');\n }\n\n /**\n * This function checks if the slot exists.\n * @param {string|HTMLElement} el The element or selector to check for slots.\n * @param slotName The slot name to check for.\n * @returns {boolean} - The boolean value.\n */\n static hasSlot(el, slotName = null) {\n let selector = slotName ? `[slot=\"${slotName}\"]` : '[slot]';\n\n return el.querySelectorAll(selector).length > 0 ? true : false;\n }\n\n /**\n * This function checks if the slot has content.\n * @param {string|HTMLElement} el The element or selector to check for slot content\n * @param slotName The slot name to check for.\n * @returns {boolean} - The boolean value.\n */\n static hasSlotContent(el, slotName = null) {\n let slotElement = el.querySelector(`slot`);\n if (slotName) {\n slotElement = el.querySelector(`slot[name=\"${slotName}\"]`);\n }\n\n if (slotElement) {\n const assignedElements = slotElement.assignedElements();\n return assignedElements.length > 0;\n }\n\n return false;\n }\n\n /**\n * This function converts a string to a boolean.\n * @param {string | object} value The value to convert to a boolean. If the value is a boolean, it will be returned as is.\n * @returns {boolean} - The boolean value.\n */\n static stringToBoolean(value) {\n if (typeof value === 'boolean') return value;\n\n return !['false', '0', 0].includes(value);\n }\n}\n","var self; // eslint-disable-line no-var\n\nclass Event {\n constructor() {\n this.customEventWeakMap = new WeakMap();\n self = this;\n }\n\n /**\n * Dispatch event to the element and trigger the listener.\n * @param e\n */\n #dispatch(e) {\n let element = this;\n // let record = self.findRecordByElement(element);\n let record = self.customEventWeakMap.get(this);\n\n if (!record) return;\n\n let listeners = record[e.type];\n\n listeners.forEach((listener) => {\n self.dispatchCustomEvent(element, listener.event, {\n originalEvent: e?.type || null,\n context: element,\n event: self,\n });\n\n if (listener.options && listener.options.stopPropagation === true) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n });\n }\n\n /**\n * Dispatch custom event to the element with the specified event name and detail.\n * @param element\n * @param event\n * @param detail\n */\n dispatchCustomEvent(element, event, detail) {\n element.dispatchEvent(\n new CustomEvent(event, {\n detail: detail || {\n context: element,\n event: self,\n },\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n );\n }\n\n /**\n * Find record by element in the storage.\n * @param element\n * @returns {*}\n */\n\n findRecordByElement(element) {\n return this.customEventWeakMap.get(element);\n }\n\n /**\n * Add listener to the element. If the element is an array, the listener will be added to all elements in the array.\n * @param element\n * @param originalEvent\n * @param event\n * @param listener\n * @param options\n */\n addListener(element, originalEvent, event, listener, options) {\n if (!element) return;\n\n if (!Array.isArray(element)) element = [element];\n\n element.forEach((el) => {\n this.writeRecord(el, originalEvent, event, listener, options);\n });\n }\n\n /**\n * Write record to the storage.\n * @param element\n * @param originalEvent\n * @param event\n * @param listener\n * @param options\n */\n writeRecord(element, originalEvent, event, listener, options) {\n let recordListeners = this.findRecordByElement(element);\n\n if (!recordListeners) {\n this.customEventWeakMap.set(element, {\n [originalEvent]: [],\n });\n\n recordListeners = this.findRecordByElement(element);\n } else {\n recordListeners[originalEvent] = recordListeners[originalEvent] || [];\n }\n\n listener = listener || this.#dispatch;\n let obj = {\n listener: listener,\n options: options,\n event: event,\n };\n\n // skontrolujeme ci uz tento listener neexistuje\n if (!this.isRecordExists(recordListeners[originalEvent], obj)) {\n if (!this.listenerExists(recordListeners[originalEvent], obj)) {\n element.addEventListener(originalEvent, listener, options);\n obj.unbind = () => {\n element.removeEventListener(originalEvent, listener, options);\n };\n }\n\n recordListeners[originalEvent].push(obj);\n\n } else {\n // in case we want to add the same listener multiple times trigger a warning for a better debugging\n //console.info(\"Listener already exists\", element, originalEvent);\n }\n }\n\n /**\n * Performs a deep equality check between two objects.\n * @param x The first object to compare.\n * @param y The second object to compare.\n * @returns - Returns `true` if the objects are deeply equal, `false` otherwise.\n */\n deepEqual(x, y) {\n return x && y && typeof x === 'object' && typeof x === typeof y\n ? Object.keys(x).length === Object.keys(y).length &&\n Object.keys(x).every((key) => this.deepEqual(x[key], y[key]))\n : x === y;\n }\n\n /**\n * Check if the listener already exists on the element.\n * @param records\n * @param eventObj\n * @returns\n */\n listenerExists(records, eventObj) {\n return records.some((e) => e.listener === eventObj.listener);\n }\n\n isRecordExists(records, eventObj) {\n return records.some((e) => this.deepEqual(e, eventObj))\n }\n\n /**\n * Remove listener from the element and delete the listener from the custom event storage.\n * @param element\n * @param originalEvent\n * @param event\n * @param listener\n * @param options\n */\n removeListener(element, originalEvent, event, listener, options) {\n let records = this.findRecordByElement(element);\n let listeners = records?.[originalEvent];\n listener = listener || this.#dispatch;\n\n if (listeners) {\n let listenerOfWeakMap = listeners.find((e) => e.listener === listener);\n\n if (listenerOfWeakMap) {\n listeners.splice(listeners.indexOf(listenerOfWeakMap), 1);\n }\n\n if (!listeners.length) {\n delete records[originalEvent];\n element?.removeEventListener(originalEvent, listener, options);\n }\n }\n }\n\n /**\n * Remove all event listeners from the specified element and delete the element from the custom event storage.\n * @param {HTMLElement} element The element from which all listeners will be removed.\n */\n removeElement(element) {\n // remove all listeners from the element\n let listeners = this.customEventWeakMap.get(element);\n if (listeners) {\n queueMicrotask(() => {\n for (let event in listeners) {\n listeners[event].forEach((e) => {\n element.removeEventListener(event, e.listener, e.options);\n e.unbind();\n });\n }\n\n this.customEventWeakMap.delete(element);\n });\n }\n }\n\n // TODO\n createPromiseFromEvent(element, event) {\n return new Promise((resolve) => {\n let success = () => {\n element.removeEventListener(event, success);\n resolve();\n };\n\n element.addEventListener(event, success);\n });\n }\n}\n\nlet event = new Event();\nexport { event };\n","import { UniversalService } from './service/universal-service.js';\nimport { defaultStoreActions, store } from '../wje-store/store.js';\nimport { WjePermissionsApi } from '../utils/permissions-api.js';\nimport { WjElementUtils } from '../utils/element-utils.js';\nimport { event } from '../utils/event.js';\n\nconst template = document.createElement('template');\ntemplate.innerHTML = ``;\nexport default class WJElement extends HTMLElement {\n /**\n * Initializes a new instance of the WJElement class.\n */\n\n constructor() {\n super();\n\n this.isAttached = false;\n this.service = new UniversalService({\n store: store,\n });\n\n // definujeme vsetky zavislosti.\n // Do zavislosti patria len komponenty, ktore su zavisle od ktoreho je zavisly tento komponent\n this.defineDependencies();\n\n this.rendering = false;\n this._dependencies = {};\n\n /**\n * @typedef {CREATED | ATTACHED | BEGINING | START | DRAWING | DONE | DISCONNECTED} DrawingStatus\n * @property {number} CREATED - The component has been created.\n * @property {number} ATTACHED - The component has been attached to the DOM.\n * @property {number} BEGINING - The component is beginning to draw.\n * @property {number} START - The component has started drawing.\n * @property {number} DRAWING - The component is drawing.\n * @property {number} DONE - The component has finished drawing.\n * @property {number} DISCONNECTED - The component has been disconnected from the DOM.\n */\n this.drawingStatuses = {\n CREATED: 0,\n ATTACHED: 1,\n BEGINING: 2,\n START: 3,\n DRAWING: 4,\n DONE: 5,\n DISCONNECTED: 6,\n };\n\n this.drawingStatus = this.drawingStatuses.CREATED;\n\n this._pristine = true;\n this._pristineCauseWeakMap = new WeakMap();\n\n this.isRendering = false;\n this.rafId = null;\n this.originalVisibility = null;\n this.params = {};\n\n this.updateComplete = new Promise((resolve, reject) => {\n this.finisPromise = resolve;\n this.rejectPromise = reject;\n });\n }\n\n /**\n * Sets the value of the 'permission' attribute.\n * @param {string[]} value The value to set for the 'permission' attribute.\n */\n set permission(value) {\n this.setAttribute('permission', value.join(','));\n }\n\n /**\n * Gets the value of the 'permission-check' attribute.\n * @returns {string[]} The value of the 'permission' attribute.\n */\n get permission() {\n return this.getAttribute('permission')?.split(',') || [];\n }\n\n /**\n * Sets the 'permission-check' attribute.\n * @param {boolean} value The value to set for the 'permission-check' attribute.\n */\n set isPermissionCheck(value) {\n if (value) this.setAttribute('permission-check', '');\n else this.removeAttribute('permission-check');\n }\n\n /**\n * Checks if the 'permission-check' attribute is present.\n * @returns {boolean} True if the 'permission-check' attribute is present.\n */\n get isPermissionCheck() {\n return this.hasAttribute('permission-check');\n }\n\n set noShow(value) {\n if (value) this.setAttribute('no-show', '');\n else this.removeAttribute('no-show');\n }\n\n /**\n * Checks if the 'show' attribute is present.\n * @returns {boolean} True if the 'show' attribute is present.\n */\n get noShow() {\n return this.hasAttribute('no-show');\n }\n\n /**\n * Sets the 'shadow' attribute.\n * @param {string} value The value to set for the 'shadow' attribute.\n */\n set isShadowRoot(value) {\n return this.setAttribute('shadow', value);\n }\n\n get isShadowRoot() {\n return this.getAttribute('shadow');\n }\n\n /**\n * Checks if the 'shadow' attribute is present.\n * @returns {boolean} True if the 'shadow' attribute is present.\n */\n get hasShadowRoot() {\n return this.hasAttribute('shadow');\n }\n\n /**\n * Gets the value of the 'shadow' attribute or 'open' if not set.\n * @returns {string} The value of the 'shadow' attribute or 'open'.\n */\n get shadowType() {\n return this.getAttribute('shadow') || 'open';\n }\n\n /**\n * Gets the rendering context, either the shadow root or the component itself.\n * @returns The rendering context.\n */\n get context() {\n if (this.hasShadowRoot) {\n return this.shadowRoot;\n } else {\n return this;\n }\n }\n\n /**\n * Gets the store instance.\n * @returns {object} The store instance.\n */\n get store() {\n return store;\n }\n\n /**\n * @typedef {object} ArrayActions\n * @property {Function} addAction - Adds an item to the array.\n * @property {Function} deleteAction - Deletes an item from the array.\n * @property {Function} loadAction - Loads an array.\n * @property {Function} updateAction - Updates an item in the array.\n * @property {Function} addManyAction - Adds many items to the array.\n */\n\n /**\n * @typedef {object} ObjectActions\n * @property {Function} addAction - Replace old object with new object\n * @property {Function} deleteAction - Delete item based on key\n * @property {Function} updateAction - Update item based on key\n */\n\n /**\n * Gets the default store actions.\n * @returns The default store actions for arrays and objects.\n */\n get defaultStoreActions() {\n return defaultStoreActions;\n }\n\n /**\n * Gets the classes to be removed after the component is connected.\n * @returns An array of class names to remove.\n */\n get removeClassAfterConnect() {\n return this.getAttribute('remove-class-after-connect')?.split(' ');\n }\n\n /**\n * Sets the component dependencies.\n * @param value The dependencies to set.\n */\n set dependencies(value) {\n this._dependencies = value;\n }\n\n /**\n * Gets the component dependencies.\n * @returns The component dependencies.\n */\n get dependencies() {\n return this._dependencies;\n }\n\n /**\n * Processes and combines two templates into one.\n * @param pTemplate The primary template.\n * @param inputTemplate The secondary template.\n * @returns The combined template.\n */\n static processTemplates = (pTemplate, inputTemplate) => {\n const newTemplate = document.createElement('template');\n newTemplate.innerHTML = [inputTemplate.innerHTML, pTemplate?.innerHTML || ''].join('');\n return newTemplate;\n };\n\n /**\n * Defines a custom element if not already defined.\n * @param name The name of the custom element.\n * @param [elementConstructor] The constructor for the custom element.\n * @param [options] Additional options for defining the element.\n */\n static define(name, elementConstructor = this, options = {}) {\n const definedElement = customElements.get(name);\n\n if (!definedElement) {\n customElements.define(name, elementConstructor, options);\n }\n }\n\n /**\n * Defines component dependencies by registering custom elements.\n */\n defineDependencies() {\n if (this.dependencies)\n Object.entries(this.dependencies).forEach((name, component) => WJElement.define(name, component));\n }\n\n /**\n * Hook for extending behavior before drawing the component.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStoreObj The global application store for managing state.\n * @param params Additional parameters or attributes for rendering the component.\n */\n beforeDraw(context, appStoreObj, params) {\n // Hook for extending behavior before drawing\n }\n\n /**\n * Renders the component within the provided context.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStoreObj\n * @param params Additional parameters or attributes for rendering the component.\n * @returns This implementation does not render anything and returns `null`.\n * @description\n * The `draw` method is responsible for rendering the component's content.\n * Override this method in subclasses to define custom rendering logic.\n * @example\n * class MyComponent extends WJElement {\n * draw(context, appStoreObj, params) {\n * const div = document.createElement('div');\n * div.textContent = 'Hello, world!';\n * context.appendChild(div);\n * }\n * }\n */\n draw(context, appStoreObj, params) {\n return null;\n }\n\n /**\n * Hook for extending behavior after drawing the component.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStoreObj The global application store for managing state.\n * @param params Additional parameters or attributes for rendering the component.\n */\n afterDraw(context, appStoreObj, params) {\n // Hook for extending behavior after drawing\n }\n\n /**\n * Lifecycle method invoked when the component is connected to the DOM.\n */\n connectedCallback() {\n if (!this.isRendering) {\n this.originalVisibility = this.originalVisibility ?? this.style.visibility;\n this.style.visibility = 'hidden';\n\n this.setupAttributes?.();\n this.setUpAccessors();\n\n this.drawingStatus = this.drawingStatuses.ATTACHED;\n this._pristine = false;\n this.enqueueUpdate();\n }\n }\n\n /**\n * Initializes the component, setting up attributes and rendering.\n * @param [force] Whether to force initialization.\n * @returns A promise that resolves when initialization is complete.\n */\n initWjElement = (force = false) => {\n return new Promise(async (resolve, reject) => {\n this.drawingStatus = this.drawingStatuses.BEGINING;\n\n this.setupAttributes?.();\n if (this.hasShadowRoot) {\n if (!this.shadowRoot) this.attachShadow({ mode: this.shadowType || 'open' });\n }\n this.setUpAccessors();\n\n this.drawingStatus = this.drawingStatuses.START;\n await this.display(force);\n\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(this.constructor.cssStyleSheet);\n\n this.context.adoptedStyleSheets = [sheet];\n\n resolve();\n });\n };\n\n /**\n * Sets up attributes and event listeners for the component.\n * This method retrieves all custom events defined for the component\n * and adds event listeners for each of them. When an event is triggered,\n * it calls the corresponding method on the host element.\n */\n setupAttributes() {\n // Keď neaký element si zadefinuje funkciu \"setupAttributes\" tak sa obsah tejto funkcie nezavolá\n\n let allEvents = WjElementUtils.getEvents(this);\n allEvents.forEach((customEvent, domEvent) => {\n this.addEventListener(domEvent, (e) => {\n this.getRootNode().host[customEvent]?.();\n });\n });\n }\n\n /**\n * Hook for extending behavior before disconnecting the component.\n */\n beforeDisconnect() {\n // Hook for extending behavior before disconnecting\n }\n\n /**\n * Hook for extending behavior after disconnecting the component.\n */\n afterDisconnect() {\n // Hook for extending behavior after disconnecting\n }\n\n /**\n * Hook for extending behavior before redrawing the component.\n */\n beforeRedraw() {\n // Hook for extending behavior before redrawing\n }\n\n /**\n * Cleans up resources and event listeners for the component.\n */\n componentCleanup() {\n // Hook for cleaning up the component\n }\n\n /**\n * Lifecycle method invoked when the component is disconnected from the DOM.\n */\n disconnectedCallback() {\n if (this.isAttached) {\n this.beforeDisconnect?.();\n this.context.innerHTML = '';\n this.afterDisconnect?.();\n this.isAttached = false;\n this.style.visibility = this.originalVisibility;\n this.originalVisibility = null;\n }\n\n if (this.isRendering) {\n this.stopRenderLoop();\n }\n\n this.drawingStatus = this.drawingStatuses.DISCONNECTED;\n\n this.componentCleanup();\n }\n\n /**\n * Enqueues an update for the component.\n * This method processes the current render promise and then refreshes the component.\n */\n enqueueUpdate() {\n if (!this.isRendering) {\n this.rafId = requestAnimationFrame(() => this._refresh());\n }\n }\n\n /**\n * Lifecycle method invoked when an observed attribute changes.\n * @param name The name of the attribute that changed.\n * @param old The old value of the attribute.\n * @param newName The new value of the attribute.\n */\n attributeChangedCallback(name, old, newName) {\n if (old !== newName) {\n this._pristine = false;\n this.enqueueUpdate();\n }\n }\n\n refresh() {\n this.updateComplete = new Promise((resolve, reject) => {\n this.finisPromise = resolve;\n this.rejectPromise = reject;\n });\n\n this._pristine = false;\n this.enqueueUpdate();\n }\n\n /**\n * Refreshes the component by reinitializing it if it is in a drawing state.\n * This method checks if the component's drawing status is at least in the START state.\n * If so, it performs the following steps:\n * 1. Calls the `beforeRedraw` hook if defined.\n * 2. Calls the `beforeDisconnect` hook if defined.\n * 3. Refreshes the update promise to manage the rendering lifecycle.\n * 4. Calls the `afterDisconnect` hook if defined.\n * 5. Reinitializes the component by calling `initWjElement` with `true` to force initialization.\n * If the component is not in a drawing state, it simply returns a resolved promise.\n */\n async _refresh() {\n if (this.isRendering) {\n this.rafId = requestAnimationFrame(() => this._refresh());\n return; // Skip if async render is still processing\n }\n\n if (!this._pristine) {\n this._pristine = true;\n this.isRendering = true;\n\n if (this.isAttached) {\n this.beforeRedraw?.();\n this.beforeDisconnect?.();\n this.afterDisconnect?.();\n } else {\n this.stopRenderLoop();\n }\n\n try {\n await this.initWjElement(true);\n } catch (error) {\n console.error('Render error:', error);\n } finally {\n this.isRendering = false;\n\n if (!this._pristine) {\n this._pristine = false;\n this.enqueueUpdate();\n } else {\n this.finisPromise();\n this.style.visibility = this.originalVisibility;\n }\n }\n }\n }\n\n stopRenderLoop() {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n /**\n * Renders the component within the provided context.\n * @param context The rendering context, usually the element's shadow root or main DOM element.\n * @param appStore The global application store for managing state.\n * @param params Additional parameters or attributes for rendering the component.\n * @returns This implementation does not render anything and returns `null`.\n * @description\n * The `draw` method is responsible for rendering the component's content.\n * Override this method in subclasses to define custom rendering logic.\n * @example\n * class MyComponent extends WJElement {\n * draw(context, appStore, params) {\n * const div = document.createElement('div');\n * div.textContent = 'Hello, world!';\n * context.appendChild(div);\n * }\n * }\n */\n draw(context, appStore, params) {\n return null;\n }\n\n /**\n * Displays the component's content, optionally forcing a re-render.\n * @param [force] Whether to force a re-render.\n * @returns A promise that resolves when the display is complete.\n */\n display(force = false) {\n this.template = this.constructor.customTemplate || document.createElement('template');\n\n if (force) {\n [...this.context.childNodes].forEach(this.context.removeChild.bind(this.context));\n //this.isAttached = false;\n }\n\n this.context.append(this.template.content.cloneNode(true));\n\n if (this.noShow || (this.isPermissionCheck && !WjePermissionsApi.isPermissionFulfilled(this.permission))) {\n this.remove();\n return Promise.resolve();\n }\n\n return this._resolveRender();\n }\n\n /**\n * Renders the component's content.\n */\n async render() {\n this.drawingStatus = this.drawingStatuses.DRAWING;\n\n let _draw = this.draw(this.context, this.store, WjElementUtils.getAttributes(this));\n\n if (_draw instanceof Promise || _draw?.constructor.name === 'Promise') {\n _draw = await _draw;\n }\n\n let rend = _draw;\n let element;\n\n if (rend instanceof HTMLElement || rend instanceof DocumentFragment) {\n element = rend;\n } else {\n let inputTemplate = document.createElement('template');\n inputTemplate.innerHTML = rend;\n element = inputTemplate.content.cloneNode(true);\n }\n\n let rendered = element;\n\n this.context.appendChild(rendered);\n }\n\n /**\n * Sanitizes a given name by converting it from kebab-case to camelCase.\n * @param {string} name The name in kebab-case format (e.g., \"example-name\").\n * @returns {string} The sanitized name in camelCase format (e.g., \"exampleName\").\n * @example\n * // Returns 'exampleName'\n * sanitizeName('example-name');\n * @example\n * // Returns 'myCustomComponent'\n * sanitizeName('my-custom-component');\n */\n sanitizeName(name) {\n let parts = name.split('-');\n return [parts.shift(), ...parts.map((n) => n[0].toUpperCase() + n.slice(1))].join('');\n }\n\n /**\n * Checks if a property on an object has a getter or setter method defined.\n * @param {object} obj The object on which the property is defined.\n * @param {string} property The name of the property to check.\n * @returns {object} An object indicating the presence of getter and setter methods.\n * @property {Function|null} hasGetter The getter function if it exists, otherwise `null`.\n * @property {Function|null} hasSetter The setter function if it exists, otherwise `null`.\n * @example\n * const obj = {\n * get name() { return 'value'; },\n * set name(val) { console.log(val); }\n * };\n * // Returns { hasGetter: [Function: get name], hasSetter: [Function: set name] }\n * checkGetterSetter(obj, 'name');\n * @example\n * const obj = { prop: 42 };\n * // Returns { hasGetter: null, hasSetter: null }\n * checkGetterSetter(obj, 'prop');\n */\n checkGetterSetter(obj, property) {\n let descriptor = Object.getOwnPropertyDescriptor(obj, property);\n\n // Check if the descriptor is found on the object itself\n if (descriptor) {\n return {\n hasGetter: typeof descriptor.get === 'function' ? descriptor.get : null,\n hasSetter: typeof descriptor.set === 'function' ? descriptor.set : null,\n };\n }\n\n // Otherwise, check the prototype chain\n let proto = Object.getPrototypeOf(obj);\n if (proto) {\n return this.checkGetterSetter(proto, property);\n }\n\n // If the property doesn't exist at all\n return { hasGetter: null, hasSetter: null };\n }\n\n /**\n * Sets up property accessors for the component's attributes.\n */\n setUpAccessors() {\n let attrs = this.getAttributeNames();\n attrs.forEach((name) => {\n const sanitizedName = this.sanitizeName(name);\n\n const { hasGetter, hasSetter } = this.checkGetterSetter(this, sanitizedName);\n\n Object.defineProperty(this, sanitizedName, {\n set: hasSetter ?? ((value) => this.setAttribute(name, value)),\n get: hasGetter ?? (() => this.getAttribute(name)),\n });\n });\n }\n\n /**\n * Resolves the rendering process of the component.\n * @returns A promise that resolves when rendering is complete.\n * @private\n */\n _resolveRender() {\n this.params = WjElementUtils.getAttributes(this);\n\n return new Promise(async (resolve, reject) => {\n const __beforeDraw = this.beforeDraw(this.context, this.store, WjElementUtils.getAttributes(this));\n\n if (__beforeDraw instanceof Promise || __beforeDraw?.constructor.name === 'Promise') {\n await __beforeDraw;\n }\n\n await this.render();\n\n const __afterDraw = this.afterDraw?.(this.context, this.store, WjElementUtils.getAttributes(this));\n\n if (__afterDraw instanceof Promise || __afterDraw?.constructor.name === 'Promise') {\n await __afterDraw;\n }\n\n // RHR toto je bicykel pre slickRouter pretože routovanie nieje vykonané pokiaľ sa nezavolá updateComplete promise,\n // toto bude treba rozšíriť aby sme lepšie vedeli kontrolovať vykreslovanie elementov, a flow hookov.\n this.rendering = false;\n this.isAttached = true;\n\n if (this.removeClassAfterConnect) {\n this.classList.remove(...this.removeClassAfterConnect);\n }\n\n this.drawingStatus = this.drawingStatuses.DONE;\n\n resolve();\n }).catch((e) => {\n console.log(e);\n });\n }\n}\n\nlet __esModule = 'true';\nexport { __esModule, WjePermissionsApi, WjElementUtils, event };\n"],"names":["event"],"mappings":"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"}
|
package/dist/wje-icon-picker.js
CHANGED
|
@@ -256,7 +256,16 @@ class IconPicker extends WJElement {
|
|
|
256
256
|
this.anchor = anchor;
|
|
257
257
|
this.picker = picker;
|
|
258
258
|
this.infiniteScroll = infiniteScroll;
|
|
259
|
-
this.
|
|
259
|
+
this.infiniteScroll.dataToHtml = this.dataToHtml;
|
|
260
|
+
this.infiniteScroll.compareFunction = (i, item) => i.name === item.name;
|
|
261
|
+
this.infiniteScroll.setCustomData = (page = 0) => {
|
|
262
|
+
return {
|
|
263
|
+
data: this.transformedObjects.slice(page * this.size, page * this.size + this.size),
|
|
264
|
+
page,
|
|
265
|
+
size: this.size,
|
|
266
|
+
totalPages: Math.round(this.transformedObjects.length / this.size)
|
|
267
|
+
};
|
|
268
|
+
};
|
|
260
269
|
return fragment;
|
|
261
270
|
}
|
|
262
271
|
/**
|
|
@@ -267,7 +276,6 @@ class IconPicker extends WJElement {
|
|
|
267
276
|
this.initial();
|
|
268
277
|
});
|
|
269
278
|
this.addEventListener("wje-input:clear", () => {
|
|
270
|
-
this.setupInfiniteScroll();
|
|
271
279
|
this.clearIconsContainer();
|
|
272
280
|
this.infiniteScroll.scrollEvent();
|
|
273
281
|
this.infiniteScroll.loadPages(0);
|
|
@@ -297,20 +305,6 @@ class IconPicker extends WJElement {
|
|
|
297
305
|
initial() {
|
|
298
306
|
this.infiniteScroll.scrollEvent();
|
|
299
307
|
}
|
|
300
|
-
/**
|
|
301
|
-
* Sets up the infinite scroll for the component.
|
|
302
|
-
*/
|
|
303
|
-
setupInfiniteScroll() {
|
|
304
|
-
this.infiniteScroll.dataToHtml = this.dataToHtml;
|
|
305
|
-
this.infiniteScroll.setCustomData = (page = 0) => {
|
|
306
|
-
return {
|
|
307
|
-
data: this.transformedObjects.slice(page * this.size, page * this.size + this.size),
|
|
308
|
-
page,
|
|
309
|
-
size: this.size,
|
|
310
|
-
totalPages: Math.round(this.transformedObjects.length / this.size)
|
|
311
|
-
};
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
308
|
/**
|
|
315
309
|
* Gets the category of the tags.
|
|
316
310
|
* @param {Array} tags The tags to get the category of.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-icon-picker.js","sources":["../packages/wje-icon-picker/icon-picker.element.js","../packages/wje-icon-picker/icon-picker.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport InfiniteScroll from '../wje-infinite-scroll/infinite-scroll.js';\nimport Input from '../wje-input/input.js';\nimport Popup from '../wje-popup/popup.js';\nimport Tooltip from '../wje-tooltip/tooltip.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This element allows users to pick an icon from a set of available options.\n * `IconPicker` is a custom web component that represents an interactive icon picker. It features\n * search functionality, infinite scrolling, and popup-based selection. The component is highly customizable\n * and integrates seamlessly with other `WJElement` components.\n * @documentation https://elements.webjet.sk/components/icon-picker\n * @status stable\n * @augments {WJElement}\n * @attribute {string} icon - The selected icon's name.\n * @attribute {number} size - The number of icons displayed per page in infinite scroll. Default is 60.\n * @csspart native - The native part of the component.\n * @csspart anchor - The part representing the anchor button displaying the selected icon.\n * @csspart picker - The picker part containing the search and icon selection interface.\n * @csspart input - The input part for searching icons.\n * @cssproperty [--wje-color-picker-value=#ff0000] - The default color value.\n * @cssproperty [--wje-color-picker-area=transparent] - The background color of the color picker area.\n * @cssproperty [--wje-color-picker-swatch=transparent] - The background color of the swatch picker.\n * @cssproperty [--wje-color-picker-size=1rem] - The size of the icons in the picker.\n * @cssproperty [--wje-color-picker-radius=4px] - The border radius of the picker.\n * @tag wje-icon-picker\n */\n\nexport default class IconPicker extends WJElement {\n /**\n * Creates an instance of IconPicker.\n * @class\n */\n constructor() {\n super();\n }\n\n /**\n * Dependencies of the IconPicker component.\n * @property {object} dependencies\n */\n dependencies = {\n 'wje-input': Input,\n 'wje-infinite-scroll': InfiniteScroll,\n 'wje-tooltip': Tooltip,\n 'wje-popup': Popup,\n };\n\n /**\n * Setter for the markerPosition property.\n * @param {any} value The value to set.\n */\n set size(value) {\n this.setAttribute('size', value);\n }\n\n /**\n * Getter for the markerPosition property.\n * @returns {any} size The value of the markerPosition property.\n */\n get size() {\n return this.getAttribute('size') || 60;\n }\n\n /**\n * Setter for the value property.\n * @param value\n */\n set icon(value) {\n this.setAttribute('icon', value);\n }\n\n /**\n * Getter for the value property.\n * @returns {string}\n */\n get icon() {\n return this.getAttribute('icon');\n }\n\n className = 'IconPicker';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Prepares the component before drawing.\n */\n async beforeDraw() {\n this.tags = Object.values(await this.getTags());\n\n this.transformedObjects = this.convertObject(this.tags);\n\n this.index = this.transformedObjects.map((item) => ({\n ...item,\n searchText: `${item.name.toLowerCase()} ${item.tags.join(' ').toLowerCase()}`,\n }));\n }\n\n /**\n * Draws the component.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-color-picker');\n\n // ANCHOR\n let anchor = document.createElement('div');\n anchor.setAttribute('slot', 'anchor');\n anchor.classList.add('anchor');\n\n if (this.hasAttribute('icon') && this.icon) {\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', this.icon);\n\n anchor.appendChild(icon);\n }\n\n // PICKER\n let picker = document.createElement('div');\n picker.classList.add('picker');\n\n let input = document.createElement('wje-input');\n input.classList.add('input');\n input.setAttribute('variant', 'standard');\n input.setAttribute('placeholder', 'type to filter...');\n input.setAttribute('clearable', '');\n input.addEventListener('wje-input:input', this.searchIcon);\n\n let infiniteScroll = new InfiniteScroll();\n\n infiniteScroll.setAttribute('url', this.getTagsUrl('../../tags.json'));\n infiniteScroll.setAttribute('placement', '.icon-items');\n infiniteScroll.setAttribute('size', this.size);\n infiniteScroll.setAttribute('height', '223px');\n infiniteScroll.innerHTML = '<div class=\"icon-items\"></div>';\n\n // APPEND\n picker.appendChild(input);\n\n picker.appendChild(infiniteScroll);\n\n // POPUP\n let popup = document.createElement('wje-popup');\n popup.setAttribute('placement', this.placement || 'bottom-start');\n popup.setAttribute('offset', this.offset);\n popup.setAttribute('manual', '');\n\n popup.appendChild(anchor);\n popup.appendChild(picker);\n\n native.appendChild(popup);\n\n fragment.appendChild(native);\n\n this.popup = popup;\n this.input = input;\n this.anchor = anchor;\n this.picker = picker;\n this.infiniteScroll = infiniteScroll;\n\n this.setupInfiniteScroll();\n\n return fragment;\n }\n\n /**\n * Called after the component has been drawn.\n */\n afterDraw() {\n this.addEventListener('wje-popup:show', () => {\n this.initial();\n });\n\n // udalost po vymazani inputu\n this.addEventListener('wje-input:clear', () => {\n this.setupInfiniteScroll(); // reset infinite scroll\n this.clearIconsContainer(); // clear icons container\n this.infiniteScroll.scrollEvent(); // bind scroll event\n this.infiniteScroll.loadPages(0); // load first page\n });\n\n this.addEventListener('wje-infinite-scroll:click-item', (e) => {\n let icon = e.detail.context.querySelector('wje-icon');\n let name = icon.getAttribute('name');\n let stylesType = icon.hasAttribute('filled') ? 'filled' : 'outline';\n let uniqueObject = this.transformedObjects.find(\n (i) => i.name === name && Object.keys(i.styles)[0] === stylesType\n );\n\n const iconElement = document.createElement('wje-icon');\n iconElement.setAttribute('name', name);\n if (uniqueObject.styles.hasOwnProperty('filled')) iconElement.setAttribute('filled', '');\n\n uniqueObject.icon = iconElement;\n\n this.value = uniqueObject;\n this.icon = uniqueObject.name;\n\n this.anchor.innerHTML = '';\n this.anchor.appendChild(iconElement);\n\n event.dispatchCustomEvent(this, 'wje-icon-picker:select', uniqueObject); // odpalenie custom eventu\n });\n\n this.init = false;\n }\n\n /**\n * Initializes the component.\n */\n initial() {\n this.infiniteScroll.scrollEvent();\n }\n\n /**\n * Converts an object of tags into a transformed array of objects, separating `filled` and `outline` styles.\n * The function processes an input object containing tags, extracts its values,\n * and for each tag that has both `filled` and `outline` styles, splits them into\n * two separate objects. Tags without `filled` styles remain unchanged.\n * @param {object} tags The input object containing tags as properties. Each property is an object with a `styles` key.\n * @param {object} tags[].styles The styles object containing `filled` and/or `outline` styles.\n * @param {object} [tags[].styles.outline] The outline style object, if present.\n * @param {object} [tags[].styles.filled] The filled style object, if present.\n * @returns {Array<object>} An array of transformed objects. Objects with both `filled` and `outline` styles are split into separate objects, each containing only one style.\n * @example\n * const tags = {\n * hourglass: {\n * styles: {\n * outline: { ... },\n * filled: { ... },\n * }\n * },\n * clock: {\n * styles: {\n * outline: { ... },\n * }\n * }\n * };\n * const result = convertObject(tags);\n * console.log(result);\n * // [\n * // { styles: { outline: { ... } } },\n * // { styles: { filled: { ... } } },\n * // { styles: { outline: { ... } } }\n * // ]\n */\n convertObject = (tags = {}) => {\n let originalObjects = Object.values(tags);\n let transformedObjects = [];\n for (let i = 0; i < originalObjects.length; i++) {\n const obj = originalObjects[i];\n if (obj.styles.filled) {\n transformedObjects.push(\n { ...obj, styles: { outline: obj.styles.outline } },\n { ...obj, styles: { filled: obj.styles.filled } }\n );\n } else {\n transformedObjects.push(obj);\n }\n }\n\n return transformedObjects;\n };\n\n /**\n * Converts an icon data object into an HTML element structure.\n * This function creates a styled HTML element that represents an icon with a tooltip.\n * The tooltip displays the name of the icon, and the icon itself is styled based on\n * whether it uses the `filled` style.\n * @param {object} data The icon data object.\n * @returns {HTMLElement} A `div` element containing the icon wrapped in a `wje-tooltip`. The tooltip displays the icon name, and the `wje-icon` element represents the icon with attributes set according to the data.\n * @example\n * const iconData = {\n * name: \"hourglass\",\n * styles: {\n * filled: { ... }\n * }\n * };\n * const htmlElement = dataToHtml(iconData);\n * document.body.appendChild(htmlElement);\n *\n * // The resulting structure:\n * // <div class=\"icon-item\">\n * // <wje-tooltip content=\"hourglass\">\n * // <wje-icon name=\"hourglass\" size=\"large\" filled></wje-icon>\n * // </wje-tooltip>\n * // </div>\n */\n dataToHtml = (data) => {\n let iconItem = document.createElement('div');\n iconItem.classList.add('icon-item');\n\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', data.name);\n\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', data.name);\n icon.setAttribute('size', 'large');\n if (data.styles.hasOwnProperty('filled')) icon.setAttribute('filled', '');\n\n tooltip.appendChild(icon);\n iconItem.appendChild(tooltip);\n\n return iconItem;\n };\n\n /**\n * Sets up the infinite scroll for the component.\n */\n setupInfiniteScroll() {\n this.infiniteScroll.dataToHtml = this.dataToHtml;\n this.infiniteScroll.setCustomData = (page = 0) => {\n return {\n data: this.transformedObjects.slice(page * this.size, page * this.size + this.size),\n page: page,\n size: this.size,\n totalPages: Math.round(this.transformedObjects.length / this.size),\n };\n };\n }\n\n /**\n * Gets the category of the tags.\n * @param {Array} tags The tags to get the category of.\n * @returns {Array} The category of the tags.\n */\n getCategory(tags) {\n return [...new Set(tags.map((obj) => obj.category))];\n }\n\n /**\n * Gets the tags.\n * @returns {Promise<Array>} The tags of the component.\n */\n async getTags() {\n const response = await fetch(this.getTagsUrl('../../tags.json'));\n return response.json();\n }\n\n /**\n * Called when the component is disconnected.\n */\n beforeDisconnect() {\n this.init = false;\n }\n\n /**\n * Searches icons based on user input.\n * This method handles the input event and filters the available icons based on the provided search string.\n * The filtering is performed on an index that combines icon names and their tags.\n * The results are then adjusted for infinite scrolling.\n * @param {Event} e The input event (e.g., `wje-input:input`) containing the search query details.\n */\n searchIcon = (e) => {\n const query = e.detail.value.toLowerCase();\n\n const results = this.index.filter((item) => item.searchText.includes(query));\n\n this.infiniteScroll.unScrollEvent();\n this.infiniteScroll.setCustomData = (page = 0) => {\n const data = results.slice(page * this.size, page * this.size + this.size);\n return {\n data: data,\n page: page,\n size: this.size,\n totalPages: Math.ceil(results.length / this.size),\n };\n };\n\n this.clearIconsContainer();\n this.infiniteScroll.loadPages(0);\n };\n\n /**\n * Clears the icons container.\n */\n clearIconsContainer() {\n this.context.querySelector('.icon-items').innerHTML = '';\n }\n\n /**\n * Closes the component.\n */\n onClose = () => {\n this.popup.handleHide();\n };\n\n /**\n * Gets the URL of the tags.\n * @param {string} path The path to get the URL of.\n * @returns {string} The URL of the tags path.\n */\n getTagsUrl = (path) => {\n return new URL(process.env.VITE_ICON_ASSETS_URL + path).href;\n };\n}\n","import IconPicker from './icon-picker.element.js';\n\nexport default IconPicker;\n\nIconPicker.define('wje-icon-picker', IconPicker);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-icon-picker.js","sources":["../packages/wje-icon-picker/icon-picker.element.js","../packages/wje-icon-picker/icon-picker.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport InfiniteScroll from '../wje-infinite-scroll/infinite-scroll.js';\nimport Input from '../wje-input/input.js';\nimport Popup from '../wje-popup/popup.js';\nimport Tooltip from '../wje-tooltip/tooltip.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This element allows users to pick an icon from a set of available options.\n * `IconPicker` is a custom web component that represents an interactive icon picker. It features\n * search functionality, infinite scrolling, and popup-based selection. The component is highly customizable\n * and integrates seamlessly with other `WJElement` components.\n * @documentation https://elements.webjet.sk/components/icon-picker\n * @status stable\n * @augments {WJElement}\n * @attribute {string} icon - The selected icon's name.\n * @attribute {number} size - The number of icons displayed per page in infinite scroll. Default is 60.\n * @csspart native - The native part of the component.\n * @csspart anchor - The part representing the anchor button displaying the selected icon.\n * @csspart picker - The picker part containing the search and icon selection interface.\n * @csspart input - The input part for searching icons.\n * @cssproperty [--wje-color-picker-value=#ff0000] - The default color value.\n * @cssproperty [--wje-color-picker-area=transparent] - The background color of the color picker area.\n * @cssproperty [--wje-color-picker-swatch=transparent] - The background color of the swatch picker.\n * @cssproperty [--wje-color-picker-size=1rem] - The size of the icons in the picker.\n * @cssproperty [--wje-color-picker-radius=4px] - The border radius of the picker.\n * @tag wje-icon-picker\n */\n\nexport default class IconPicker extends WJElement {\n /**\n * Creates an instance of IconPicker.\n * @class\n */\n constructor() {\n super();\n }\n\n /**\n * Dependencies of the IconPicker component.\n * @property {object} dependencies\n */\n dependencies = {\n 'wje-input': Input,\n 'wje-infinite-scroll': InfiniteScroll,\n 'wje-tooltip': Tooltip,\n 'wje-popup': Popup,\n };\n\n /**\n * Setter for the markerPosition property.\n * @param {any} value The value to set.\n */\n set size(value) {\n this.setAttribute('size', value);\n }\n\n /**\n * Getter for the markerPosition property.\n * @returns {any} size The value of the markerPosition property.\n */\n get size() {\n return this.getAttribute('size') || 60;\n }\n\n /**\n * Setter for the value property.\n * @param value\n */\n set icon(value) {\n this.setAttribute('icon', value);\n }\n\n /**\n * Getter for the value property.\n * @returns {string}\n */\n get icon() {\n return this.getAttribute('icon');\n }\n\n className = 'IconPicker';\n\n /**\n * Returns the CSS styles for the component.\n * @static\n * @returns {CSSStyleSheet}\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Returns the list of attributes to observe for changes.\n * @static\n * @returns {Array<string>}\n */\n static get observedAttributes() {\n return [];\n }\n\n /**\n * Sets up the attributes for the component.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n }\n\n /**\n * Prepares the component before drawing.\n */\n async beforeDraw() {\n this.tags = Object.values(await this.getTags());\n\n this.transformedObjects = this.convertObject(this.tags);\n\n this.index = this.transformedObjects.map((item) => ({\n ...item,\n searchText: `${item.name.toLowerCase()} ${item.tags.join(' ').toLowerCase()}`,\n }));\n }\n\n /**\n * Draws the component.\n * @returns {DocumentFragment}\n */\n draw() {\n let fragment = document.createDocumentFragment();\n\n let native = document.createElement('div');\n native.classList.add('native-color-picker');\n\n // ANCHOR\n let anchor = document.createElement('div');\n anchor.setAttribute('slot', 'anchor');\n anchor.classList.add('anchor');\n\n if (this.hasAttribute('icon') && this.icon) {\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', this.icon);\n\n anchor.appendChild(icon);\n }\n\n // PICKER\n let picker = document.createElement('div');\n picker.classList.add('picker');\n\n let input = document.createElement('wje-input');\n input.classList.add('input');\n input.setAttribute('variant', 'standard');\n input.setAttribute('placeholder', 'type to filter...');\n input.setAttribute('clearable', '');\n input.addEventListener('wje-input:input', this.searchIcon);\n\n let infiniteScroll = new InfiniteScroll();\n\n infiniteScroll.setAttribute('url', this.getTagsUrl('../../tags.json'));\n infiniteScroll.setAttribute('placement', '.icon-items');\n infiniteScroll.setAttribute('size', this.size);\n infiniteScroll.setAttribute('height', '223px');\n infiniteScroll.innerHTML = '<div class=\"icon-items\"></div>';\n\n // APPEND\n picker.appendChild(input);\n\n picker.appendChild(infiniteScroll);\n\n // POPUP\n let popup = document.createElement('wje-popup');\n popup.setAttribute('placement', this.placement || 'bottom-start');\n popup.setAttribute('offset', this.offset);\n popup.setAttribute('manual', '');\n\n popup.appendChild(anchor);\n popup.appendChild(picker);\n\n native.appendChild(popup);\n\n fragment.appendChild(native);\n\n this.popup = popup;\n this.input = input;\n this.anchor = anchor;\n this.picker = picker;\n this.infiniteScroll = infiniteScroll;\n\n this.infiniteScroll.dataToHtml = this.dataToHtml;\n this.infiniteScroll.compareFunction = (i, item) => i.name === item.name;\n this.infiniteScroll.setCustomData = (page = 0) => {\n return {\n data: this.transformedObjects.slice(page * this.size, page * this.size + this.size),\n page: page,\n size: this.size,\n totalPages: Math.round(this.transformedObjects.length / this.size),\n };\n };\n\n return fragment;\n }\n\n /**\n * Called after the component has been drawn.\n */\n afterDraw() {\n this.addEventListener('wje-popup:show', () => {\n this.initial();\n });\n\n // udalost po vymazani inputu\n this.addEventListener('wje-input:clear', () => {\n this.clearIconsContainer(); // clear icons container\n this.infiniteScroll.scrollEvent(); // bind scroll event\n this.infiniteScroll.loadPages(0); // load first page\n });\n\n this.addEventListener('wje-infinite-scroll:click-item', (e) => {\n let icon = e.detail.context.querySelector('wje-icon');\n let name = icon.getAttribute('name');\n let stylesType = icon.hasAttribute('filled') ? 'filled' : 'outline';\n let uniqueObject = this.transformedObjects.find(\n (i) => i.name === name && Object.keys(i.styles)[0] === stylesType\n );\n\n const iconElement = document.createElement('wje-icon');\n iconElement.setAttribute('name', name);\n if (uniqueObject.styles.hasOwnProperty('filled')) iconElement.setAttribute('filled', '');\n\n uniqueObject.icon = iconElement;\n\n this.value = uniqueObject;\n this.icon = uniqueObject.name;\n\n this.anchor.innerHTML = '';\n this.anchor.appendChild(iconElement);\n\n event.dispatchCustomEvent(this, 'wje-icon-picker:select', uniqueObject); // odpalenie custom eventu\n });\n\n this.init = false;\n }\n\n /**\n * Initializes the component.\n */\n initial() {\n this.infiniteScroll.scrollEvent();\n }\n\n /**\n * Converts an object of tags into a transformed array of objects, separating `filled` and `outline` styles.\n * The function processes an input object containing tags, extracts its values,\n * and for each tag that has both `filled` and `outline` styles, splits them into\n * two separate objects. Tags without `filled` styles remain unchanged.\n * @param {object} tags The input object containing tags as properties. Each property is an object with a `styles` key.\n * @param {object} tags[].styles The styles object containing `filled` and/or `outline` styles.\n * @param {object} [tags[].styles.outline] The outline style object, if present.\n * @param {object} [tags[].styles.filled] The filled style object, if present.\n * @returns {Array<object>} An array of transformed objects. Objects with both `filled` and `outline` styles are split into separate objects, each containing only one style.\n * @example\n * const tags = {\n * hourglass: {\n * styles: {\n * outline: { ... },\n * filled: { ... },\n * }\n * },\n * clock: {\n * styles: {\n * outline: { ... },\n * }\n * }\n * };\n * const result = convertObject(tags);\n * console.log(result);\n * // [\n * // { styles: { outline: { ... } } },\n * // { styles: { filled: { ... } } },\n * // { styles: { outline: { ... } } }\n * // ]\n */\n convertObject = (tags = {}) => {\n let originalObjects = Object.values(tags);\n let transformedObjects = [];\n for (let i = 0; i < originalObjects.length; i++) {\n const obj = originalObjects[i];\n if (obj.styles.filled) {\n transformedObjects.push(\n { ...obj, styles: { outline: obj.styles.outline } },\n { ...obj, styles: { filled: obj.styles.filled } }\n );\n } else {\n transformedObjects.push(obj);\n }\n }\n\n return transformedObjects;\n };\n\n /**\n * Converts an icon data object into an HTML element structure.\n * This function creates a styled HTML element that represents an icon with a tooltip.\n * The tooltip displays the name of the icon, and the icon itself is styled based on\n * whether it uses the `filled` style.\n * @param {object} data The icon data object.\n * @returns {HTMLElement} A `div` element containing the icon wrapped in a `wje-tooltip`. The tooltip displays the icon name, and the `wje-icon` element represents the icon with attributes set according to the data.\n * @example\n * const iconData = {\n * name: \"hourglass\",\n * styles: {\n * filled: { ... }\n * }\n * };\n * const htmlElement = dataToHtml(iconData);\n * document.body.appendChild(htmlElement);\n *\n * // The resulting structure:\n * // <div class=\"icon-item\">\n * // <wje-tooltip content=\"hourglass\">\n * // <wje-icon name=\"hourglass\" size=\"large\" filled></wje-icon>\n * // </wje-tooltip>\n * // </div>\n */\n dataToHtml = (data) => {\n let iconItem = document.createElement('div');\n iconItem.classList.add('icon-item');\n\n let tooltip = document.createElement('wje-tooltip');\n tooltip.setAttribute('content', data.name);\n\n let icon = document.createElement('wje-icon');\n icon.setAttribute('name', data.name);\n icon.setAttribute('size', 'large');\n if (data.styles.hasOwnProperty('filled')) icon.setAttribute('filled', '');\n\n tooltip.appendChild(icon);\n iconItem.appendChild(tooltip);\n\n return iconItem;\n };\n\n /**\n * Gets the category of the tags.\n * @param {Array} tags The tags to get the category of.\n * @returns {Array} The category of the tags.\n */\n getCategory(tags) {\n return [...new Set(tags.map((obj) => obj.category))];\n }\n\n /**\n * Gets the tags.\n * @returns {Promise<Array>} The tags of the component.\n */\n async getTags() {\n const response = await fetch(this.getTagsUrl('../../tags.json'));\n return response.json();\n }\n\n /**\n * Called when the component is disconnected.\n */\n beforeDisconnect() {\n this.init = false;\n }\n\n /**\n * Searches icons based on user input.\n * This method handles the input event and filters the available icons based on the provided search string.\n * The filtering is performed on an index that combines icon names and their tags.\n * The results are then adjusted for infinite scrolling.\n * @param {Event} e The input event (e.g., `wje-input:input`) containing the search query details.\n */\n searchIcon = (e) => {\n const query = e.detail.value.toLowerCase();\n\n const results = this.index.filter((item) => item.searchText.includes(query));\n\n this.infiniteScroll.unScrollEvent();\n this.infiniteScroll.setCustomData = (page = 0) => {\n const data = results.slice(page * this.size, page * this.size + this.size);\n return {\n data: data,\n page: page,\n size: this.size,\n totalPages: Math.ceil(results.length / this.size),\n };\n };\n\n this.clearIconsContainer();\n this.infiniteScroll.loadPages(0);\n };\n\n /**\n * Clears the icons container.\n */\n clearIconsContainer() {\n this.context.querySelector('.icon-items').innerHTML = '';\n }\n\n /**\n * Closes the component.\n */\n onClose = () => {\n this.popup.handleHide();\n };\n\n /**\n * Gets the URL of the tags.\n * @param {string} path The path to get the URL of.\n * @returns {string} The URL of the tags path.\n */\n getTagsUrl = (path) => {\n return new URL(process.env.VITE_ICON_ASSETS_URL + path).href;\n };\n}\n","import IconPicker from './icon-picker.element.js';\n\nexport default IconPicker;\n\nIconPicker.define('wje-icon-picker', IconPicker);\n"],"names":[],"mappings":"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"}
|
package/dist/wje-input.js
CHANGED
|
@@ -90,13 +90,6 @@ class Input extends WJElement {
|
|
|
90
90
|
get name() {
|
|
91
91
|
return this.getAttribute("name");
|
|
92
92
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Getter for the type attribute.
|
|
95
|
-
* @returns {string} The type of the input element.
|
|
96
|
-
*/
|
|
97
|
-
get type() {
|
|
98
|
-
return this.localName;
|
|
99
|
-
}
|
|
100
93
|
/**
|
|
101
94
|
* Getter for the validity attribute.
|
|
102
95
|
* @returns {ValidityState} The validity state of the input.
|
|
@@ -387,10 +380,13 @@ class Input extends WJElement {
|
|
|
387
380
|
* @param {HTMLFormElement} form The form the custom element is associated with.
|
|
388
381
|
*/
|
|
389
382
|
formAssociatedCallback(form) {
|
|
390
|
-
|
|
391
|
-
this.
|
|
392
|
-
|
|
393
|
-
|
|
383
|
+
if (form) {
|
|
384
|
+
this.internals.setFormValue(this.value);
|
|
385
|
+
form == null ? void 0 : form.addEventListener("submit", () => {
|
|
386
|
+
this.validateInput();
|
|
387
|
+
this.propagateValidation();
|
|
388
|
+
});
|
|
389
|
+
}
|
|
394
390
|
}
|
|
395
391
|
/**
|
|
396
392
|
* The formResetCallback method is a built-in lifecycle callback that gets called when a form gets reset.
|
package/dist/wje-input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wje-input.js","sources":["../packages/wje-input/input.element.js","../packages/wje-input/input.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This class represents a custom input element. It extends the WJElement class and provides additional functionality for handling input.\n * @documentation https://elements.webjet.sk/components/input\n * @status stable\n * @augments WJElement\n * @csspart native - The native part.\n * @csspart wrapper - The wrapper part.\n * @csspart input - The input part.\n * @csspart clear - The clear part.\n * @slot start - Slot for content at the start of the input.\n * @slot end - Slot for content at the end of the input.\n * @cssproperty [--wje-input-font-family=var(--wje-font-family)] - Defines the font family for the input text.\n * @cssproperty [--wje-input-background-color=var(--wje-background)] - Specifies the background color of the input field.\n * @cssproperty [--wje-input-color=var(--wje-color)] - Sets the text color within the input field.\n * @cssproperty [--wje-input-color-invalid=var(--wje-color-danger)] - Changes the text color when the input value is invalid.\n * @cssproperty [--wje-input-border-color=var(--wje-border-color)] - Defines the border color of the input field.\n * @cssproperty [--wje-input-border-color-focus=var(--wje-color-primary)] - Specifies the border color when the input is focused.\n * @cssproperty [--wje-input-border-width=1px] - Sets the width of the input border.\n * @cssproperty [--wje-input-border-style=solid] - Defines the border style of the input (e.g., solid, dashed).\n * @cssproperty [--wje-input-border-radius=4px] - Specifies the border radius, creating rounded corners.\n * @cssproperty [--wje-input-margin-bottom=.5rem] - Adds spacing below the input field.\n * @cssproperty [--wje-input-line-height=20px] - Sets the line height of the text within the input field.\n * @cssproperty [--wje-input-slot-padding-inline=.5rem] - Controls the padding on the left and right of the input slot content.\n * // @fires wje-input:input - Dispatched when the input value changes.\n * // @fires wje-input:clear - Dispatched when the input is cleared.\n */\nexport default class Input extends WJElement {\n /**\n * Creates an instance of Input.\n */\n constructor() {\n super();\n\n this.invalid = false;\n this.pristine = true;\n this.internals = this.attachInternals();\n\n // Create a mutation observer instance to watch for changes in attributes\n this.observer = new MutationObserver(this.observeFunction);\n }\n\n observeFunction = (mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes') {\n const attributeName = mutation.attributeName;\n const oldValue = mutation.oldValue;\n const newValue = this.getAttribute(attributeName);\n\n console.log(`Attribute ${attributeName} changed from ${oldValue} to ${newValue}`);\n }\n });\n };\n\n /**\n * Setter for the value attribute.\n * @param {string} value The value to set.\n */\n set value(value) {\n this.internals.setFormValue(value);\n\n if (this.input) this.input.value = value;\n\n this.pristine = false;\n this._value = value;\n }\n\n /**\n * Getter for the value attribute.\n * @returns {string} The value of the attribute.\n */\n get value() {\n return this.input?.value ?? this._value ?? '';\n }\n\n /**\n * Getter for the customErrorDisplay attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get customErrorDisplay() {\n return this.hasAttribute('custom-error-display');\n }\n\n /**\n * Getter for the validateOnChange attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get validateOnChange() {\n return this.hasAttribute('validate-on-change');\n }\n\n /**\n * Getter for the invalid attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get invalid() {\n return this.hasAttribute('invalid');\n }\n\n /**\n * Setter for the invalid attribute.\n * @param {boolean} isInvalid Whether the input is invalid.\n */\n set invalid(isInvalid) {\n if (isInvalid) this.setAttribute('invalid', '');\n else this.removeAttribute('invalid');\n }\n\n /**\n * Getter for the form attribute.\n * @returns {HTMLFormElement} The form the input is associated with.\n */\n get form() {\n return this.internals.form;\n }\n\n /**\n * Getter for the name attribute.\n * @returns {string} The name of the input element.\n */\n get name() {\n return this.getAttribute('name');\n }\n\n /**\n * Getter for the type attribute.\n * @returns {string} The type of the input element.\n */\n get type() {\n return this.localName;\n }\n\n /**\n * Getter for the validity attribute.\n * @returns {ValidityState} The validity state of the input.\n */\n get validity() {\n return this.internals.validity;\n }\n\n /**\n * Getter for the validationMessage attribute.\n * @returns {string} The validation message of the input element.\n */\n get validationMessage() {\n return this.internals.validationMessage;\n }\n\n /**\n * Getter for the willValidate attribute.\n * @returns {boolean} Whether the input will be validated.\n */\n get willValidate() {\n return this.internals.willValidate;\n }\n\n /**\n * @summary Getter for the defaultValue attribute.\n * This method retrieves the 'value' attribute of the custom input element.\n * The 'value' attribute represents the default value of the input element.\n * If the 'value' attribute is not set, it returns an empty string.\n * @returns {string} The default value of the input element.\n */\n get defaultValue() {\n return this.getAttribute('value') ?? '';\n }\n\n /**\n * @summary Setter for the defaultValue attribute.\n * This method sets the 'value' attribute of the custom input element to the provided value.\n * The 'value' attribute represents the default value of the input element.\n * @param {string} value The value to set as the default value.\n */\n set defaultValue(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * The class name of the input element.\n * @type {string}\n */\n className = 'Input';\n\n /**\n * Getter for the cssStyleSheet attribute.\n * @returns {CSSStyleSheet} The CSS style sheet of the input element.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observedAttributes attribute of the input element.\n * @returns {Array} The attributes to observe for changes.\n */\n static get observedAttributes() {\n return ['value', 'name', 'disabled', 'placeholder', 'label', 'message', 'error-inline'];\n }\n\n /**\n * Whether the input is associated with a form.\n * @type {boolean}\n */\n static formAssociated = true;\n\n /**\n * Sets up the attributes for the input.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n // if some value was set via value setter then dont use default value\n if (this.pristine) {\n this.value = this.defaultValue;\n this.pristine = false;\n }\n }\n\n beforeDraw() {\n this.observer.disconnect();\n }\n\n /**\n * Draws the input element.\n * @returns {DocumentFragment} The drawn input.\n */\n draw() {\n let hasSlotStart = this.hasSlot(this, 'start');\n let hasSlotEnd = this.hasSlot(this, 'end');\n let hasSlotError = this.hasSlot(this, 'error');\n let fragment = document.createDocumentFragment();\n\n // Wrapper\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-input', this.variant || 'default');\n\n if (this.hasAttribute('invalid')) native.classList.add('has-error');\n\n let wrapper = document.createElement('div');\n wrapper.classList.add('wrapper');\n\n let inputWrapper = document.createElement('div');\n inputWrapper.setAttribute('part', 'wrapper');\n inputWrapper.classList.add('input-wrapper');\n\n // Label\n let label = document.createElement('label');\n label.innerText = this.label;\n if (this.value && !this.hasAttribute('error')) label.classList.add('fade');\n\n // Input\n let input = document.createElement('input');\n input.setAttribute('type', 'text');\n input.setAttribute('part', 'input');\n input.setAttribute('value', this.value || '');\n input.classList.add('form-control');\n\n const attributes = Array.from(this.attributes).map((attr) => attr.name);\n\n attributes.forEach((attr) => {\n if (this.hasAttribute(attr)) {\n input.setAttribute(attr, this[attr] || '');\n }\n });\n\n // Error\n let error = document.createElement('div');\n error.classList.add('error-message');\n error.setAttribute('part', 'error');\n\n let errorSlot = null;\n if (hasSlotError) {\n errorSlot = document.createElement('slot');\n errorSlot.setAttribute('name', 'error');\n\n if (this.hasAttribute('error-inline')) {\n // inline version of error message\n native.appendChild(errorSlot);\n } else {\n // tooltip version of error message\n error.appendChild(errorSlot);\n wrapper.appendChild(error);\n }\n } else {\n wrapper.appendChild(error);\n }\n\n let start = null;\n if (hasSlotStart) {\n start = document.createElement('slot');\n start.setAttribute('name', 'start');\n start.setAttribute('part', 'start');\n }\n\n let end = null;\n if (hasSlotEnd) {\n end = document.createElement('slot');\n end.setAttribute('name', 'end');\n end.setAttribute('part', 'end');\n }\n\n if (hasSlotStart) {\n inputWrapper.appendChild(start);\n native.classList.add('has-start');\n }\n\n if (this.variant === 'standard') {\n if (this.label) native.appendChild(label);\n } else {\n inputWrapper.appendChild(label);\n }\n\n inputWrapper.appendChild(input);\n wrapper.appendChild(inputWrapper);\n\n native.appendChild(wrapper);\n\n if (this.hasAttribute('clearable')) {\n this.clear = document.createElement('wje-button');\n this.clear.classList.add('clear');\n this.clear.setAttribute('fill', 'link');\n this.clear.setAttribute('part', 'clear');\n\n let clearIcon = document.createElement('wje-icon');\n clearIcon.setAttribute('name', 'x');\n this.clear.appendChild(clearIcon);\n inputWrapper.appendChild(this.clear);\n }\n\n if (hasSlotEnd) {\n inputWrapper.appendChild(end);\n native.classList.add('has-end');\n }\n\n fragment.appendChild(native);\n\n this.native = native;\n this.labelElement = label;\n this.input = input;\n this.errorMessage = error;\n\n return fragment;\n }\n\n /**\n * Runs after the input is drawn to the DOM.\n */\n afterDraw() {\n this.input.addEventListener('focus', (e) => {\n this.labelElement.classList.add('fade');\n this.native.classList.add('focused');\n });\n\n this.input.addEventListener('blur', (e) => {\n this.native.classList.remove('focused');\n if (!e.target.value) this.labelElement.classList.remove('fade');\n });\n\n this.input.addEventListener('input', (e) => {\n this.validateInput();\n\n if (this.validateOnChange) {\n this.pristine = false;\n this.propagateValidation();\n }\n\n this.input.classList.remove('pristine');\n this.labelElement.classList.add('fade');\n\n const clone = new e.constructor(e.type, e);\n this.dispatchEvent(clone);\n\n event.dispatchCustomEvent(this, 'wje-input:input', {\n value: this.input.value,\n });\n\n this.value = this.input.value;\n });\n\n this.addEventListener('invalid', (e) => {\n this.invalid = true;\n this.pristine = false;\n\n this.showInvalidMessage();\n\n if (this.customErrorDisplay) {\n e.preventDefault();\n }\n });\n\n this.addEventListener('focus', () => this.input.focus());\n\n if (this.clear) {\n this.clear.addEventListener('wje-button:click', (e) => {\n this.input.value = '';\n event.dispatchCustomEvent(this.clear, 'wje-input:clear');\n });\n }\n\n this.validateInput();\n\n if (this.hasAttribute('invalid')) {\n this.showInvalidMessage();\n }\n\n this.observer.observe(this, {\n attributes: true, // Watch for attribute changes\n attributeOldValue: true, // Keep track of the old value of attributes\n });\n }\n\n componentCleanup() {\n this.observer.disconnect();\n }\n\n /**\n * @summary Displays the validation message for the input.\n * If the input has a slot named 'error', it sets the text content of the element with attribute 'error-message' inside the slot to the validation message.\n * If the input does not have an 'error' slot, it sets the text content of the errorMessage property to the validation message.\n */\n showInvalidMessage() {\n let hasSlotError = this.hasSlot(this, 'error');\n\n if (hasSlotError) {\n const slot = this.querySelector(\"[slot='error']\");\n let errorMessage = slot.querySelector('[error-message]');\n\n if (!errorMessage) {\n const error = document.createElement('div');\n error.setAttribute('error-message', '');\n slot.appendChild(error);\n errorMessage = error;\n }\n\n errorMessage.textContent = this.internals.validationMessage;\n } else {\n this.errorMessage.textContent = this.internals.validationMessage;\n }\n }\n\n /**\n * @summary Validates the input.\n * This method checks the validity state of the input. If the input is not valid, it iterates over the validity state object.\n * For each invalid state, it constructs an attribute name and checks if the input has this attribute.\n * If the input has the attribute, it sets the validation error to the state and the error message to the attribute value.\n * If the input does not have the attribute, it sets the error message to the default validation message of the input.\n * It then sets the validity in the form internals to an object with the validation error as key and true as value, and the error message.\n * If the input is valid, it sets the validity in the form internals to an empty object.\n */\n validateInput() {\n const validState = this.input.validity;\n\n if (!validState.valid) {\n for (let state in validState) {\n const attr = `message-${state.toString()}`;\n\n if (validState[state]) {\n this.validationError = state.toString();\n let errorMessage = this.message;\n\n // TODO this take error messages based on lang from operating system of user should we implement custom translations based on app language ?\n if (!this.hasAttribute('message'))\n errorMessage = this.hasAttribute(attr) ? this.getAttribute(attr) : this.input.validationMessage;\n\n this.internals.setValidity({ [this.validationError]: true }, errorMessage);\n }\n }\n } else {\n this.internals.setValidity({});\n }\n }\n\n /**\n * @summary Propagates the validation state of the input.\n * This method sets the 'invalid' property of the input based on its 'pristine' state and its internal validity state.\n * If the input is invalid and the 'customErrorDisplay' property is true, it dispatches an 'invalid' event.\n */\n propagateValidation() {\n this.invalid = !this.pristine && !this.internals.validity.valid;\n\n if (this.invalid && this.customErrorDisplay) {\n this.dispatchEvent(new Event('invalid'));\n }\n }\n\n /**\n * Checks whether the input has a slot.\n * @param {HTMLElement} el The element to check.\n * @param {string} slotName The name of the slot to check for.\n * @returns {boolean} Whether the input has the slot.\n */\n hasSlot(el, slotName = null) {\n let selector = slotName ? `[slot=\"${slotName}\"]` : '[slot]';\n\n return el.querySelectorAll(selector).length > 0 ? true : false;\n }\n\n /**\n * @summary Callback function that is called when the custom element is associated with a form.\n * This function adds an event listener to the form's submit event, which validates the input and propagates the validation.\n * @param {HTMLFormElement} form The form the custom element is associated with.\n */\n formAssociatedCallback(form) {\n form?.addEventListener('submit', () => {\n this.validateInput();\n this.propagateValidation();\n });\n }\n\n /**\n * The formResetCallback method is a built-in lifecycle callback that gets called when a form gets reset.\n * This method is responsible for resetting the value of the custom input element to its default value.\n * It also resets the form value and validity state in the form internals.\n * @function\n */\n formResetCallback() {\n // Set the value of the custom input element to its default value\n this.value = this.defaultValue;\n // Reset the form value in the form internals to the default value\n this.internals.setFormValue(this.defaultValue);\n // Reset the validity state in the form internals\n this.internals.setValidity({});\n }\n\n /**\n * The formStateRestoreCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is restored.\n * This method is responsible for restoring the value of the custom input element to its saved state.\n * It also restores the form value and validity state in the form internals to their saved states.\n * @param {object} state The saved state of the custom input element.\n * @function\n */\n formStateRestoreCallback(state) {\n // Set the value of the custom input element to its saved value\n this.value = state.value;\n // Restore the form value in the form internals to the saved value\n this.internals.setFormValue(state.value);\n // Restore the validity state in the form internals to the saved state\n this.internals.setValidity({});\n }\n\n /**\n * The formStateSaveCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is saved.\n * This method is responsible for saving the value of the custom input element.\n * @returns {object} The saved state of the custom input element.\n * @function\n */\n formStateSaveCallback() {\n return {\n value: this.value,\n };\n }\n\n /**\n * The formDisabledCallback method is a built-in lifecycle callback that gets called when the disabled state of a form-associated custom element changes.\n * This method is not implemented yet.\n * @param {boolean} disabled The new disabled state of the custom input element.\n * @function\n */\n formDisabledCallback(disabled) {\n console.warn('formDisabledCallback not implemented yet');\n }\n\n // dispatchEvent(e) {\n // return false;\n // }\n}\n","import Input from './input.element.js';\n\nexport default Input;\n\nInput.define('wje-input', Input);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wje-input.js","sources":["../packages/wje-input/input.element.js","../packages/wje-input/input.js"],"sourcesContent":["import { default as WJElement, event } from '../wje-element/element.js';\nimport styles from './styles/styles.css?inline';\n\n/**\n * @summary This class represents a custom input element. It extends the WJElement class and provides additional functionality for handling input.\n * @documentation https://elements.webjet.sk/components/input\n * @status stable\n * @augments WJElement\n * @csspart native - The native part.\n * @csspart wrapper - The wrapper part.\n * @csspart input - The input part.\n * @csspart clear - The clear part.\n * @slot start - Slot for content at the start of the input.\n * @slot end - Slot for content at the end of the input.\n * @cssproperty [--wje-input-font-family=var(--wje-font-family)] - Defines the font family for the input text.\n * @cssproperty [--wje-input-background-color=var(--wje-background)] - Specifies the background color of the input field.\n * @cssproperty [--wje-input-color=var(--wje-color)] - Sets the text color within the input field.\n * @cssproperty [--wje-input-color-invalid=var(--wje-color-danger)] - Changes the text color when the input value is invalid.\n * @cssproperty [--wje-input-border-color=var(--wje-border-color)] - Defines the border color of the input field.\n * @cssproperty [--wje-input-border-color-focus=var(--wje-color-primary)] - Specifies the border color when the input is focused.\n * @cssproperty [--wje-input-border-width=1px] - Sets the width of the input border.\n * @cssproperty [--wje-input-border-style=solid] - Defines the border style of the input (e.g., solid, dashed).\n * @cssproperty [--wje-input-border-radius=4px] - Specifies the border radius, creating rounded corners.\n * @cssproperty [--wje-input-margin-bottom=.5rem] - Adds spacing below the input field.\n * @cssproperty [--wje-input-line-height=20px] - Sets the line height of the text within the input field.\n * @cssproperty [--wje-input-slot-padding-inline=.5rem] - Controls the padding on the left and right of the input slot content.\n * // @fires wje-input:input - Dispatched when the input value changes.\n * // @fires wje-input:clear - Dispatched when the input is cleared.\n */\nexport default class Input extends WJElement {\n /**\n * Creates an instance of Input.\n */\n constructor() {\n super();\n\n this.invalid = false;\n this.pristine = true;\n this.internals = this.attachInternals();\n\n // Create a mutation observer instance to watch for changes in attributes\n this.observer = new MutationObserver(this.observeFunction);\n }\n\n observeFunction = (mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes') {\n const attributeName = mutation.attributeName;\n const oldValue = mutation.oldValue;\n const newValue = this.getAttribute(attributeName);\n\n console.log(`Attribute ${attributeName} changed from ${oldValue} to ${newValue}`);\n }\n });\n };\n\n /**\n * Setter for the value attribute.\n * @param {string} value The value to set.\n */\n set value(value) {\n this.internals.setFormValue(value);\n\n if (this.input) this.input.value = value;\n\n this.pristine = false;\n this._value = value;\n }\n\n /**\n * Getter for the value attribute.\n * @returns {string} The value of the attribute.\n */\n get value() {\n return this.input?.value ?? this._value ?? '';\n }\n\n /**\n * Getter for the customErrorDisplay attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get customErrorDisplay() {\n return this.hasAttribute('custom-error-display');\n }\n\n /**\n * Getter for the validateOnChange attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get validateOnChange() {\n return this.hasAttribute('validate-on-change');\n }\n\n /**\n * Getter for the invalid attribute.\n * @returns {boolean} Whether the attribute is present.\n */\n get invalid() {\n return this.hasAttribute('invalid');\n }\n\n /**\n * Setter for the invalid attribute.\n * @param {boolean} isInvalid Whether the input is invalid.\n */\n set invalid(isInvalid) {\n if (isInvalid) this.setAttribute('invalid', '');\n else this.removeAttribute('invalid');\n }\n\n /**\n * Getter for the form attribute.\n * @returns {HTMLFormElement} The form the input is associated with.\n */\n get form() {\n return this.internals.form;\n }\n\n /**\n * Getter for the name attribute.\n * @returns {string} The name of the input element.\n */\n get name() {\n return this.getAttribute('name');\n }\n\n /**\n * Getter for the validity attribute.\n * @returns {ValidityState} The validity state of the input.\n */\n get validity() {\n return this.internals.validity;\n }\n\n /**\n * Getter for the validationMessage attribute.\n * @returns {string} The validation message of the input element.\n */\n get validationMessage() {\n return this.internals.validationMessage;\n }\n\n /**\n * Getter for the willValidate attribute.\n * @returns {boolean} Whether the input will be validated.\n */\n get willValidate() {\n return this.internals.willValidate;\n }\n\n /**\n * @summary Getter for the defaultValue attribute.\n * This method retrieves the 'value' attribute of the custom input element.\n * The 'value' attribute represents the default value of the input element.\n * If the 'value' attribute is not set, it returns an empty string.\n * @returns {string} The default value of the input element.\n */\n get defaultValue() {\n return this.getAttribute('value') ?? '';\n }\n\n /**\n * @summary Setter for the defaultValue attribute.\n * This method sets the 'value' attribute of the custom input element to the provided value.\n * The 'value' attribute represents the default value of the input element.\n * @param {string} value The value to set as the default value.\n */\n set defaultValue(value) {\n this.setAttribute('value', value);\n }\n\n /**\n * The class name of the input element.\n * @type {string}\n */\n className = 'Input';\n\n /**\n * Getter for the cssStyleSheet attribute.\n * @returns {CSSStyleSheet} The CSS style sheet of the input element.\n */\n static get cssStyleSheet() {\n return styles;\n }\n\n /**\n * Getter for the observedAttributes attribute of the input element.\n * @returns {Array} The attributes to observe for changes.\n */\n static get observedAttributes() {\n return ['value', 'name', 'disabled', 'placeholder', 'label', 'message', 'error-inline'];\n }\n\n /**\n * Whether the input is associated with a form.\n * @type {boolean}\n */\n static formAssociated = true;\n\n /**\n * Sets up the attributes for the input.\n */\n setupAttributes() {\n this.isShadowRoot = 'open';\n // if some value was set via value setter then dont use default value\n if (this.pristine) {\n this.value = this.defaultValue;\n this.pristine = false;\n }\n }\n\n beforeDraw() {\n this.observer.disconnect();\n }\n\n /**\n * Draws the input element.\n * @returns {DocumentFragment} The drawn input.\n */\n draw() {\n let hasSlotStart = this.hasSlot(this, 'start');\n let hasSlotEnd = this.hasSlot(this, 'end');\n let hasSlotError = this.hasSlot(this, 'error');\n let fragment = document.createDocumentFragment();\n\n // Wrapper\n let native = document.createElement('div');\n native.setAttribute('part', 'native');\n native.classList.add('native-input', this.variant || 'default');\n\n if (this.hasAttribute('invalid')) native.classList.add('has-error');\n\n let wrapper = document.createElement('div');\n wrapper.classList.add('wrapper');\n\n let inputWrapper = document.createElement('div');\n inputWrapper.setAttribute('part', 'wrapper');\n inputWrapper.classList.add('input-wrapper');\n\n // Label\n let label = document.createElement('label');\n label.innerText = this.label;\n if (this.value && !this.hasAttribute('error')) label.classList.add('fade');\n\n // Input\n let input = document.createElement('input');\n input.setAttribute('type', 'text');\n input.setAttribute('part', 'input');\n input.setAttribute('value', this.value || '');\n input.classList.add('form-control');\n\n const attributes = Array.from(this.attributes).map((attr) => attr.name);\n\n attributes.forEach((attr) => {\n if (this.hasAttribute(attr)) {\n input.setAttribute(attr, this[attr] || '');\n }\n });\n\n // Error\n let error = document.createElement('div');\n error.classList.add('error-message');\n error.setAttribute('part', 'error');\n\n let errorSlot = null;\n if (hasSlotError) {\n errorSlot = document.createElement('slot');\n errorSlot.setAttribute('name', 'error');\n\n if (this.hasAttribute('error-inline')) {\n // inline version of error message\n native.appendChild(errorSlot);\n } else {\n // tooltip version of error message\n error.appendChild(errorSlot);\n wrapper.appendChild(error);\n }\n } else {\n wrapper.appendChild(error);\n }\n\n let start = null;\n if (hasSlotStart) {\n start = document.createElement('slot');\n start.setAttribute('name', 'start');\n start.setAttribute('part', 'start');\n }\n\n let end = null;\n if (hasSlotEnd) {\n end = document.createElement('slot');\n end.setAttribute('name', 'end');\n end.setAttribute('part', 'end');\n }\n\n if (hasSlotStart) {\n inputWrapper.appendChild(start);\n native.classList.add('has-start');\n }\n\n if (this.variant === 'standard') {\n if (this.label) native.appendChild(label);\n } else {\n inputWrapper.appendChild(label);\n }\n\n inputWrapper.appendChild(input);\n wrapper.appendChild(inputWrapper);\n\n native.appendChild(wrapper);\n\n if (this.hasAttribute('clearable')) {\n this.clear = document.createElement('wje-button');\n this.clear.classList.add('clear');\n this.clear.setAttribute('fill', 'link');\n this.clear.setAttribute('part', 'clear');\n\n let clearIcon = document.createElement('wje-icon');\n clearIcon.setAttribute('name', 'x');\n this.clear.appendChild(clearIcon);\n inputWrapper.appendChild(this.clear);\n }\n\n if (hasSlotEnd) {\n inputWrapper.appendChild(end);\n native.classList.add('has-end');\n }\n\n fragment.appendChild(native);\n\n this.native = native;\n this.labelElement = label;\n this.input = input;\n this.errorMessage = error;\n\n return fragment;\n }\n\n /**\n * Runs after the input is drawn to the DOM.\n */\n afterDraw() {\n this.input.addEventListener('focus', (e) => {\n this.labelElement.classList.add('fade');\n this.native.classList.add('focused');\n });\n\n this.input.addEventListener('blur', (e) => {\n this.native.classList.remove('focused');\n if (!e.target.value) this.labelElement.classList.remove('fade');\n });\n\n this.input.addEventListener('input', (e) => {\n this.validateInput();\n\n if (this.validateOnChange) {\n this.pristine = false;\n this.propagateValidation();\n }\n\n this.input.classList.remove('pristine');\n this.labelElement.classList.add('fade');\n\n const clone = new e.constructor(e.type, e);\n this.dispatchEvent(clone);\n\n event.dispatchCustomEvent(this, 'wje-input:input', {\n value: this.input.value,\n });\n\n this.value = this.input.value;\n });\n\n this.addEventListener('invalid', (e) => {\n this.invalid = true;\n this.pristine = false;\n\n this.showInvalidMessage();\n\n if (this.customErrorDisplay) {\n e.preventDefault();\n }\n });\n\n this.addEventListener('focus', () => this.input.focus());\n\n if (this.clear) {\n this.clear.addEventListener('wje-button:click', (e) => {\n this.input.value = '';\n event.dispatchCustomEvent(this.clear, 'wje-input:clear');\n });\n }\n\n this.validateInput();\n\n if (this.hasAttribute('invalid')) {\n this.showInvalidMessage();\n }\n\n this.observer.observe(this, {\n attributes: true, // Watch for attribute changes\n attributeOldValue: true, // Keep track of the old value of attributes\n });\n }\n\n componentCleanup() {\n this.observer.disconnect();\n }\n\n /**\n * @summary Displays the validation message for the input.\n * If the input has a slot named 'error', it sets the text content of the element with attribute 'error-message' inside the slot to the validation message.\n * If the input does not have an 'error' slot, it sets the text content of the errorMessage property to the validation message.\n */\n showInvalidMessage() {\n let hasSlotError = this.hasSlot(this, 'error');\n\n if (hasSlotError) {\n const slot = this.querySelector(\"[slot='error']\");\n let errorMessage = slot.querySelector('[error-message]');\n\n if (!errorMessage) {\n const error = document.createElement('div');\n error.setAttribute('error-message', '');\n slot.appendChild(error);\n errorMessage = error;\n }\n\n errorMessage.textContent = this.internals.validationMessage;\n } else {\n this.errorMessage.textContent = this.internals.validationMessage;\n }\n }\n\n /**\n * @summary Validates the input.\n * This method checks the validity state of the input. If the input is not valid, it iterates over the validity state object.\n * For each invalid state, it constructs an attribute name and checks if the input has this attribute.\n * If the input has the attribute, it sets the validation error to the state and the error message to the attribute value.\n * If the input does not have the attribute, it sets the error message to the default validation message of the input.\n * It then sets the validity in the form internals to an object with the validation error as key and true as value, and the error message.\n * If the input is valid, it sets the validity in the form internals to an empty object.\n */\n validateInput() {\n const validState = this.input.validity;\n\n if (!validState.valid) {\n for (let state in validState) {\n const attr = `message-${state.toString()}`;\n\n if (validState[state]) {\n this.validationError = state.toString();\n let errorMessage = this.message;\n\n // TODO this take error messages based on lang from operating system of user should we implement custom translations based on app language ?\n if (!this.hasAttribute('message'))\n errorMessage = this.hasAttribute(attr) ? this.getAttribute(attr) : this.input.validationMessage;\n\n this.internals.setValidity({ [this.validationError]: true }, errorMessage);\n }\n }\n } else {\n this.internals.setValidity({});\n }\n }\n\n /**\n * @summary Propagates the validation state of the input.\n * This method sets the 'invalid' property of the input based on its 'pristine' state and its internal validity state.\n * If the input is invalid and the 'customErrorDisplay' property is true, it dispatches an 'invalid' event.\n */\n propagateValidation() {\n this.invalid = !this.pristine && !this.internals.validity.valid;\n\n if (this.invalid && this.customErrorDisplay) {\n this.dispatchEvent(new Event('invalid'));\n }\n }\n\n /**\n * Checks whether the input has a slot.\n * @param {HTMLElement} el The element to check.\n * @param {string} slotName The name of the slot to check for.\n * @returns {boolean} Whether the input has the slot.\n */\n hasSlot(el, slotName = null) {\n let selector = slotName ? `[slot=\"${slotName}\"]` : '[slot]';\n\n return el.querySelectorAll(selector).length > 0 ? true : false;\n }\n\n /**\n * @summary Callback function that is called when the custom element is associated with a form.\n * This function adds an event listener to the form's submit event, which validates the input and propagates the validation.\n * @param {HTMLFormElement} form The form the custom element is associated with.\n */\n formAssociatedCallback(form) {\n if (form) {\n this.internals.setFormValue(this.value);\n form?.addEventListener('submit', () => {\n this.validateInput();\n this.propagateValidation();\n });\n }\n }\n\n /**\n * The formResetCallback method is a built-in lifecycle callback that gets called when a form gets reset.\n * This method is responsible for resetting the value of the custom input element to its default value.\n * It also resets the form value and validity state in the form internals.\n * @function\n */\n formResetCallback() {\n // Set the value of the custom input element to its default value\n this.value = this.defaultValue;\n // Reset the form value in the form internals to the default value\n this.internals.setFormValue(this.defaultValue);\n // Reset the validity state in the form internals\n this.internals.setValidity({});\n }\n\n /**\n * The formStateRestoreCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is restored.\n * This method is responsible for restoring the value of the custom input element to its saved state.\n * It also restores the form value and validity state in the form internals to their saved states.\n * @param {object} state The saved state of the custom input element.\n * @function\n */\n formStateRestoreCallback(state) {\n // Set the value of the custom input element to its saved value\n this.value = state.value;\n // Restore the form value in the form internals to the saved value\n this.internals.setFormValue(state.value);\n // Restore the validity state in the form internals to the saved state\n this.internals.setValidity({});\n }\n\n /**\n * The formStateSaveCallback method is a built-in lifecycle callback that gets called when the state of a form-associated custom element is saved.\n * This method is responsible for saving the value of the custom input element.\n * @returns {object} The saved state of the custom input element.\n * @function\n */\n formStateSaveCallback() {\n return {\n value: this.value,\n };\n }\n\n /**\n * The formDisabledCallback method is a built-in lifecycle callback that gets called when the disabled state of a form-associated custom element changes.\n * This method is not implemented yet.\n * @param {boolean} disabled The new disabled state of the custom input element.\n * @function\n */\n formDisabledCallback(disabled) {\n console.warn('formDisabledCallback not implemented yet');\n }\n\n // dispatchEvent(e) {\n // return false;\n // }\n}\n","import Input from './input.element.js';\n\nexport default Input;\n\nInput.define('wje-input', Input);\n"],"names":[],"mappings":"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"}
|