@kizmann/pico-js 2.0.5 → 2.0.7
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/pico-js.browser.js +1 -1
- package/dist/pico-js.browser.js.map +1 -1
- package/dist/pico-js.esm.js +1 -1
- package/dist/pico-js.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/dom/DomAttribute.js +22 -0
- package/src/dom/DomEvent.js +14 -7
- package/src/dom/DomFinder.js +8 -1
- package/src/dom/DomObserver.js +1 -22
- package/src/dom/DomPopover.js +264 -0
- package/src/dom/DomRectangle.js +11 -0
- package/src/format/FormatOption.js +3 -3
- package/src/index.browser.js +7 -1
- package/src/index.esm.js +12 -2
- package/src/now/NowFormat.js +5 -2
- package/src/utils/Array.js +62 -31
- package/src/utils/Dom.js +6 -0
- package/src/utils/Mixed.js +8 -0
- package/src/utils/Runner.js +21 -11
- package/src/utils/{Event.js → Signal.js} +8 -7
- package/types/dom/DomEvent.d.ts +2 -1
- package/types/dom/DomFinder.d.ts +1 -0
- package/types/dom/DomObserver.d.ts +0 -9
- package/types/dom/DomPopover.d.ts +17 -0
- package/types/dom/DomRectangle.d.ts +1 -0
- package/types/index.esm.d.ts +6 -2
- package/types/now/NowFormat.d.ts +3 -0
- package/types/utils/Array.d.ts +20 -2
- package/types/utils/Dom.d.ts +6 -0
- package/types/utils/Runner.d.ts +2 -2
- package/types/utils/{Event.d.ts → Signal.d.ts} +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pico-js.browser.js","mappings":"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","sources":["webpack://@kizmann/pico-js/webpack/bootstrap","webpack://@kizmann/pico-js/webpack/runtime/define property getters","webpack://@kizmann/pico-js/webpack/runtime/global","webpack://@kizmann/pico-js/webpack/runtime/hasOwnProperty shorthand","webpack://@kizmann/pico-js/webpack/runtime/make namespace object","webpack://@kizmann/pico-js/./src/utils/Runner.js","webpack://@kizmann/pico-js/./src/utils/String.js","webpack://@kizmann/pico-js/./src/utils/Number.js","webpack://@kizmann/pico-js/./src/utils/Array.js","webpack://@kizmann/pico-js/./src/utils/Object.js","webpack://@kizmann/pico-js/./src/utils/Mixed.js","webpack://@kizmann/pico-js/./src/utils/Hash.js","webpack://@kizmann/pico-js/./src/utils/Event.js","webpack://@kizmann/pico-js/./src/utils/Locale.js","webpack://@kizmann/pico-js/./src/utils/Cookie.js","webpack://@kizmann/pico-js/./src/dom/DomFinder.js","webpack://@kizmann/pico-js/./src/dom/DomForm.js","webpack://@kizmann/pico-js/./src/dom/DomEvent.js","webpack://@kizmann/pico-js/./src/dom/DomBuilder.js","webpack://@kizmann/pico-js/./src/dom/DomGlobal.js","webpack://@kizmann/pico-js/./src/dom/DomRectangle.js","webpack://@kizmann/pico-js/./src/dom/DomAttribute.js","webpack://@kizmann/pico-js/./src/dom/DomInview.js","webpack://@kizmann/pico-js/./src/dom/DomMeta.js","webpack://@kizmann/pico-js/./src/dom/DomObserver.js","webpack://@kizmann/pico-js/./src/utils/Dom.js","webpack://@kizmann/pico-js/./src/now/NowDefault.js","webpack://@kizmann/pico-js/./src/now/NowFormat.js","webpack://@kizmann/pico-js/./src/now/NowMatch.js","webpack://@kizmann/pico-js/./src/now/NowGrid.js","webpack://@kizmann/pico-js/./src/now/NowWalker.js","webpack://@kizmann/pico-js/./src/now/NowRange.js","webpack://@kizmann/pico-js/./src/now/NowHuman.js","webpack://@kizmann/pico-js/./src/utils/Now.js","webpack://@kizmann/pico-js/./src/format/FormatParser.js","webpack://@kizmann/pico-js/./src/format/FormatParam.js","webpack://@kizmann/pico-js/./src/format/FormatOption.js","webpack://@kizmann/pico-js/./src/format/FormatUrl.js","webpack://@kizmann/pico-js/./src/format/FormatFile.js","webpack://@kizmann/pico-js/./src/utils/Format.js","webpack://@kizmann/pico-js/./src/tool/scope.js","webpack://@kizmann/pico-js/./src/utils/Data.js","webpack://@kizmann/pico-js/./src/utils/Route.js","webpack://@kizmann/pico-js/./src/wip/Map.js","webpack://@kizmann/pico-js/./src/wip/Element.js","webpack://@kizmann/pico-js/./src/index.esm.js","webpack://@kizmann/pico-js/./src/index.browser.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Arr, Hash, Mix, Obj } from \"../index.esm.js\";\n\nexport class PicoRunner\n{\n static $idler = null;\n\n static $timer = 0;\n\n static $buffer = [];\n\n /**\n * Clear timer or call function\n *\n * @example Run.clear(timer)\n *\n * @param {any} timer Timer ID, array of IDs, or function\n * @returns {typeof PicoRunner} Static class\n */\n static clear(timer)\n {\n if ( Mix.isArr(timer) ) {\n return Arr.each(timer, (t) => this.clear(t), this);\n }\n\n if ( Mix.isFunc(timer) ) {\n return (timer(), this);\n }\n\n clearTimeout(timer);\n clearInterval(timer);\n\n return this;\n }\n\n /**\n * Request idle callback with fallback\n *\n * @param {function} cb Callback function\n * @returns {typeof PicoRunner} Static class\n */\n static tryin(cb)\n {\n try {\n requestIdleCallback(cb);\n } catch (e) {\n //\n }\n\n return this;\n }\n\n /**\n * Wait for condition to be true\n *\n * @example Run.wait(() => window.foo, 10, 100)\n *\n * @param {function} fn Condition function\n * @param {number} [intval] Interval ms\n * @param {number} [limit] Max iterations\n * @returns {function} Clear function\n */\n static wait(fn, intval = 0, limit = 500)\n {\n let idler, timer;\n\n timer = setTimeout(() => {\n this.clear([idler, timer]);\n }, intval * limit);\n\n idler = setInterval(() => {\n if ( fn() ) this.clear([timer, idler]);\n }, intval);\n\n return () => clearInterval(idler);\n }\n\n /**\n * Run function in next animation frame\n *\n * @example Run.frame(cb)\n *\n * @param {function} fn Callback function\n * @param {any} [...args] Callback arguments\n * @returns {function} Noop clear function\n */\n static frame(fn, ...args)\n {\n requestAnimationFrame(() => {\n fn(...args)\n });\n\n return () => null;\n }\n\n /**\n * Run function when browser is idle\n *\n * @example Run.idle(cb)\n *\n * @param {function} fn Callback function\n * @param {any} [...args] Callback arguments\n * @returns {function} Noop clear function\n */\n static idle(fn, ...args)\n {\n requestIdleCallback(() => {\n fn(...args)\n });\n\n return () => null;\n }\n\n /**\n * Run function asynchronously\n *\n * @example Run.async(cb)\n *\n * @param {function} fn Callback function\n * @param {any} [...args] Callback arguments\n * @returns {function} Noop clear function\n */\n static async(fn, ...args)\n {\n setTimeout(() => {\n fn(...args)\n });\n\n return () => null;\n }\n\n /**\n * Run function after delay\n *\n * @example Run.delay(cb, 100)\n *\n * @param {function} fn Callback function\n * @param {number} [delay] Delay ms\n * @param {any} [...args] Callback arguments\n * @returns {function} Clear function\n */\n static delay(fn, delay = 0, ...args)\n {\n let idler = setTimeout(() => {\n fn(...args);\n }, delay);\n\n return () => clearTimeout(idler);\n }\n\n /**\n * Create debounced callback\n *\n * @example const fn = Run.debounce(cb, 100)\n *\n * @param {function} cb Callback to run\n * @param {number} [timeout] Wait ms\n * @returns {function} Debounced fn\n */\n static debounce(cb, timeout = 100)\n {\n let idler = null;\n\n return (...args) => {\n\n if ( idler ) {\n clearTimeout(idler);\n }\n\n idler = setTimeout(() => {\n this.frame(cb, ...args);\n }, timeout);\n };\n }\n\n /**\n * Create throttled callback\n *\n * @example const fn = Run.throttle(cb, 100)\n *\n * @param {function} cb Callback to run\n * @param {number} [timeout] Wait ms\n * @returns {function} Throttled fn\n */\n static throttle(cb, timeout = 100)\n {\n let queued, idler = null;\n\n return (...args) => {\n\n if ( idler ) {\n clearTimeout(idler);\n }\n\n idler = setTimeout(() => {\n queued = false;\n }, timeout);\n\n if ( queued ) {\n return;\n }\n\n (this.frame(cb, ...args), queued = true);\n };\n }\n\n /**\n * Create framerate-limited callback\n *\n * @example const fn = Run.framerate(cb, 30)\n *\n * @param {function} cb Callback to run\n * @param {number} [fps] Max frames per sec\n * @returns {function} Rate-limited fn\n */\n static framerate(cb, fps = 30)\n {\n let last = 0;\n\n return (...args) => {\n\n if ( Date.now() - last <= (1000 / fps) ) {\n return;\n }\n\n (this.frame(cb, ...args), last = Date.now());\n };\n }\n\n /**\n * Buffer events into single frame\n *\n * @example el.onwheel = Run.framebuffer(cb,\"wheel\")\n *\n * @param {function} cb Callback to run\n * @param {string} key Buffer key\n * @param {number} [order] Sort order\n * @returns {function} Buffered handler\n */\n static framebuffer(cb, key, order = 1000)\n {\n return (e, ...args) => {\n\n Arr.replace(PicoRunner.$buffer, {\n key, cb, order, args: [e, ...args], active: true\n }, { key });\n\n (e.preventDefault(), PicoRunner.runFramebuffer());\n };\n }\n\n /**\n * Flush buffered frame events\n *\n * @example Run.runFramebuffer() // flush\n *\n * @returns {void} No return value\n */\n static runFramebuffer()\n {\n if ( this.$idler ) {\n clearTimeout(this.$idler);\n }\n\n this.$idler = setTimeout(() => {\n this.runFramebuffer();\n }, 50);\n\n if ( Date.now() - this.$timer <= 50 ) {\n return;\n }\n\n if ( this.$idler ) {\n clearTimeout(this.$idler);\n }\n\n this.$timer = Date.now();\n\n let buffer = Arr.filter(this.$buffer, {\n active: true\n });\n\n if ( buffer.length === 0 ) {\n return;\n }\n\n this.frame(() => {\n Arr.each(Arr.sort(buffer, 'order'), (item) => {\n item.cb(...item.args); item.active = false;\n });\n });\n }\n\n}\n\nexport default PicoRunner;","import { Arr, For, Locale, Mix, Now, Str } from \"../index.esm.js\";\n\nexport class PicoString\n{\n /**\n * Get character at index\n *\n * @example Str.get(\"abc\", 1) // => \"b\"\n *\n * @param {any} value Input string\n * @param {any} index Char index\n * @returns {string} Single char\n */\n static get(value, index)\n {\n if ( ! Mix.isStr(value) ) {\n value = Mix.str(value);\n }\n\n if ( Mix.isInt(index) ) {\n index = Mix.int(index);\n }\n\n return value.charAt(index);\n }\n\n /**\n * Replace substring at index\n *\n * @example Str.set(\"abc\", 1, \"X\") // => \"aXc\"\n *\n * @param {any} value Input string\n * @param {any} index Start index\n * @param {string} [replace] Replace value\n * @returns {string} Updated string\n */\n static set(value, index, replace = '')\n {\n if ( ! Mix.isStr(value) ) {\n value = Mix.str(value);\n }\n\n if ( Mix.isInt(index) ) {\n index = Mix.int(index);\n }\n\n return value.substring(0, index) + replace +\n value.substring(index + replace.length);\n }\n\n /**\n * Replace first occurrence\n *\n * @example Str.replace(\"abc\", \"X\", \"b\") // => \"aXc\"\n *\n * @param {any} value Input string\n * @param {string} replace Replace value\n * @param {any} [search] Search value\n * @returns {string} Updated string\n */\n static replace(value, replace, search = null)\n {\n if ( Mix.isNull(search) ) {\n search = value;\n }\n\n let index = search.indexOf(replace);\n\n if ( index === -1 ) {\n return value;\n }\n\n return this.set(value, index, replace);\n }\n\n /**\n * Extract substring by range\n *\n * @example Str.extract(\"abc\", \"b\") // => \"b\"\n *\n * @param {any} value Input string\n * @param {string} replace Search value\n * @param {any} [search] Match source\n * @returns {string|null} Extracted string\n */\n static extract(value, replace, search = null)\n {\n if ( Mix.isNull(search) ) {\n search = value;\n }\n\n let index = this.range(search, replace);\n\n if ( index === null ) {\n return null;\n }\n\n return this.slice(value, ...index);\n }\n\n /**\n * Match pattern in string\n *\n * @example Str.match(\"abc\", /b/) // => [\"b\"]\n *\n * @param {any} value Input string\n * @param {RegExp|string} pattern Match pattern\n * @param {any} [cb] Callback fn\n * @returns {any} Match result\n */\n static match(value, pattern, cb = null)\n {\n let result = Mix.str(value).match(pattern);\n\n if ( Mix.isEmpty(result) ) {\n return [];\n }\n\n return Mix.isFunc(cb) ? cb(result) : result;\n }\n\n /**\n * Escape regex characters\n *\n * @example Str.regex(\"a.b\") // => \"a\\\\.b\"\n *\n * @param {any} val Input string\n * @returns {string} Escaped string\n */\n static regex(val)\n {\n return Mix.str(val).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n /**\n * Convert to uppercase\n *\n * @example Str.uc(\"abc\") // => \"ABC\"\n *\n * @param {any} value Input string\n * @returns {string} Uppercase string\n */\n static uc(value)\n {\n return Mix.str(value).toUpperCase();\n }\n\n /**\n * @see PicoString.uc\n */\n static upper = PicoString.uc;\n\n /**\n * Uppercase first character\n *\n * @example Str.ucfirst(\"abc\") // => \"Abc\"\n *\n * @param {string} value Input string\n * @returns {string} Updated string\n */\n static ucfirst(value)\n {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n /**\n * Convert to lowercase\n *\n * @example Str.lc(\"ABC\") // => \"abc\"\n *\n * @param {any} value Input string\n * @returns {string} Lowercase string\n */\n static lc(value)\n {\n return Mix.str(value).toLowerCase();\n }\n\n /**\n * @see PicoString.lc\n */\n static lower = PicoString.lc;\n\n /**\n * Lowercase first character\n *\n * @example Str.lcfirst(\"ABC\") // => \"aBC\"\n *\n * @param {string} value Input string\n * @returns {string} Updated string\n */\n static lcfirst(value)\n {\n return value.charAt(0).toLowerCase() + value.slice(1);\n }\n\n /**\n * Convert to camelCase\n *\n * @example Str.cc(\"hello-world\") // => \"helloWorld\"\n *\n * @param {string} value Input string\n * @returns {string} camelCase string\n */\n static cc(value)\n {\n let splits = Arr.each(For.slugify(value).split('-'), (v, i) => {\n return i ? this.ucfirst(v) : v;\n });\n\n return splits.join('');\n }\n\n /**\n * @see PicoString.cc\n */\n static camelcase = PicoString.cc;\n\n /**\n * Convert to kebab-case\n *\n * @example Str.kc(\"helloWorld\") // => \"hello-world\"\n *\n * @param {string} value Input string\n * @returns {string} kebab-case string\n */\n static kc(value)\n {\n return For.slugify(value);\n }\n\n /**\n * @see PicoString.kc\n */\n static kebabcase = PicoString.kc;\n\n /**\n * Convert to snake_case\n *\n * @example Str.sc(\"helloWorld\") // => \"hello_world\"\n *\n * @param {string} value Input string\n * @returns {string} snake_case string\n */\n static sc(value)\n {\n return For.slugify(value).replace('-', '_');\n }\n\n /**\n * @see PicoString.sc\n */\n static snakecase = PicoString.sc;\n\n /**\n * Convert to PascalCase\n *\n * @example Str.pc(\"hello-world\") // => \"HelloWorld\"\n *\n * @param {string} value Input string\n * @returns {string} PascalCase string\n */\n static pc(value)\n {\n let splits = Arr.each(For.slugify(value).split('-'), (v) => {\n return this.ucfirst(v);\n });\n\n return splits.join('');\n }\n\n /**\n * @see PicoString.pc\n */\n static pascalcase = PicoString.pc;\n\n /**\n * Check if string contains value\n *\n * @example Str.has(\"abc\", \"b\") // => true\n *\n * @param {string} value Input string\n * @param {string} search Search string\n * @returns {boolean} True if found\n */\n static has(value, search)\n {\n return this.lc(value).indexOf(this.lc(search)) !== -1;\n }\n\n /**\n * Get index range of search\n *\n * @example Str.range(\"abc\", \"b\") // => [1, 2]\n *\n * @param {any} value Input string\n * @param {string} search Search string\n * @param {any} [fallback] Fallback value\n * @returns {Array<number>|any} Index range\n */\n static range(value, search, fallback = null)\n {\n let index = Mix.str(value).indexOf(search);\n\n if ( index === -1 ) {\n return fallback;\n }\n\n return [index, index + search.length];\n }\n\n /**\n * Extract substring by range\n *\n * @example Str.slice(\"abc\", 1, 2) // => \"b\"\n *\n * @param {any} value Input string\n * @param {number} start Start index\n * @param {number} limit End index\n * @returns {string} Sliced string\n */\n static slice(value, start, limit)\n {\n return Mix.str(value).slice(start, limit);\n }\n\n /**\n * Get string representation\n *\n * @example Str.string(\"<b>a</b>\") // => \"a\"\n *\n * @param {any} value Input value\n * @param {any} [empty] Empty fallback\n * @param {boolean} [html] Keep HTML\n * @returns {string} String value\n */\n static string(value, empty = '-', html = false)\n {\n if ( Mix.isEmpty(value) ) {\n return empty;\n }\n\n value = Mix.str(value);\n\n if ( html ) {\n return value;\n }\n\n return value.replace(/<[^>]*>?/gm, '');\n }\n\n /**\n * Get boolean representation\n *\n * @example Str.boolean(true) // => \"Yes\"\n *\n * @param {any} value Input value\n * @param {string} [yes] True string\n * @param {string} [no] False string\n * @param {any} [empty] Empty fallback\n * @returns {string|any} Boolean string\n */\n static boolean(value, yes = 'Yes', no = 'No', empty = '-')\n {\n if ( Mix.isEmpty(value) ) {\n return empty;\n }\n\n return Mix.bool(value) ? yes : no;\n }\n\n /**\n * Get formatted number\n *\n * @example Str.number(1234.56, 1) // => \"1,234.6\"\n *\n * @param {any} value Input value\n * @param {number} [fixed] Decimal points\n * @param {string} [locale] Locale code\n * @param {any} [config] Format config\n * @returns {string|any} Formatted string\n */\n static number(value, fixed = null, locale = null, config = {})\n {\n if ( ! Mix.isNum(value) ) {\n return value;\n }\n\n if ( locale == null ) {\n locale = Locale.code();\n }\n\n config = {\n maximumFractionDigits: 12, ...config\n };\n\n if ( fixed != null ) {\n config.minimumFractionDigits = fixed;\n config.maximumFractionDigits = fixed;\n }\n\n return Mix.num(value).toLocaleString(locale, config);\n }\n\n /**\n * Get formatted integer\n *\n * @example Str.integer(1, 2) // => \"01\"\n *\n * @param {any} value Input value\n * @param {number} [leading] Leading zeros\n * @param {string} [padding] Padding char\n * @returns {string|any} Formatted string\n */\n static integer(value, leading = 0, padding = '0')\n {\n if ( ! Mix.isNum(value) ) {\n return value;\n }\n\n if ( ! Mix.isInt(value) ) {\n value = Mix.int(value);\n }\n\n value = Mix.int(value);\n\n if ( ! leading ) {\n return Mix.str(value);\n }\n\n return Mix.str(value).padStart(leading, padding);\n }\n\n /**\n * Get formatted datetime\n *\n * @example Str.datetime(\"2026-01-01\", \"DD.MM.YYYY\")\n *\n * @param {any} value Input value\n * @param {string} [format] Output format\n * @param {any} [empty] Empty fallback\n * @returns {string} Formatted string\n */\n static datetime(value, format = 'YYYY-MM-DD HH:mm:ss', empty = '-')\n {\n if ( ! Mix.isDate(value) ) {\n value = Now.make(value);\n }\n\n if ( ! value.valid() ) {\n return empty;\n }\n\n return value.format(format);\n }\n\n /**\n * Get formatted date\n *\n * @example Str.date(\"2026-01-01\", \"DD.MM.YYYY\")\n *\n * @param {any} value Input value\n * @param {string} [format] Output format\n * @param {any} [empty] Empty fallback\n * @returns {string} Formatted string\n */\n static date(value, format = 'YYYY-MM-DD', empty = '-')\n {\n return this.datetime(value, format, empty);\n }\n\n /**\n * Get formatted time\n *\n * @example Str.time(\"12:00:00\", \"HH:mm\")\n *\n * @param {any} value Input value\n * @param {string} [format] Output format\n * @param {any} [empty] Empty fallback\n * @returns {string} Formatted string\n */\n static time(value, format = 'HH:mm:ss', empty = '-')\n {\n return this.datetime(value, format, empty);\n }\n\n /**\n * Parse string to object\n *\n * @example Str.objectify(\"a: 1;\") // => { a: 1 }\n *\n * @param {any} value Input string\n * @param {string} [mode] Parse mode\n * @param {boolean} [toarray] Return array\n * @returns {any} Parsed value\n */\n static objectify(value, mode = 'options', toarray = false)\n {\n if ( Mix.isRef(value) ) {\n return value;\n }\n\n if ( mode === 'params' ) {\n value = For.parseParams(value);\n }\n\n if ( mode === 'options' ) {\n value = For.parseOptions(value);\n }\n\n if ( ! Mix.isRef(value) ) {\n value = JSON.parse(value)\n }\n\n return toarray ? Mix.vals(value) : value;\n }\n\n /**\n * Cast object to string\n *\n * @example Str.stringify({ a: 1 }) // => \"a: 1;\"\n *\n * @param {any} value Input value\n * @param {string} [mode] Cast mode\n * @returns {string} Casted string\n */\n static stringify(value, mode = 'options')\n {\n if ( Mix.isStr(value) ) {\n return value;\n }\n\n if ( mode === 'params' ) {\n return For.castParams(value);\n }\n\n if ( mode === 'options' ) {\n return For.castOptions(value);\n }\n\n return JSON.stringify(value);\n }\n\n}\n\n/**\n * @see PicoStr.regex\n */\nPicoString.regexEscape = (...args) => {\n console.warn('Str.regexEscape() is deprecated, use Str.regex() instead.');\n return Str.regex(...args);\n};\n\n/**\n * @see PicoStr.pascalcase\n */\nPicoString.humancase = (...args) => {\n console.warn('Str.humancase() is deprecated, use Str.pascalcase() instead.');\n return Str.pascalcase(...args);\n};\n\n/**\n * @see PicoFormat.slugify\n */\nPicoString.slugify = (...args) => {\n console.warn('Str.slugify() is deprecated, use For.slugify() instead.');\n return For.slugify(...args);\n};\n\n/**\n * @see PicoFormat.castOptions\n */\nPicoString.options = (...args) => {\n console.warn('Str.options() is deprecated, use For.castOptions() instead.');\n return For.castOptions(...args);\n};\n\n/**\n * @see PicoFormat.parseOptions\n */\nPicoString.fromOptions = (...args) => {\n console.warn('Str.fromOptions() is deprecated, use For.parseOptions() instead.');\n return For.parseOptions(...args);\n};\n\n/**\n * @see PicoFormat.castParams\n */\nPicoString.params = (...args) => {\n console.warn('Str.params() is deprecated, use For.castParams() instead.');\n return For.castParams(...args);\n};\n\n/**\n * @see PicoFormat.parseParams\n */\nPicoString.fromParams = (...args) => {\n console.warn('Str.fromParams() is deprecated, use For.parseParams() instead.');\n return For.parseParams(...args);\n};\n\n/**\n * @see PicoFormat.filesize\n */\nPicoString.filesize = (...args) => {\n console.warn('Str.filesize() is deprecated, use For.filesize() instead.');\n return For.filesize(...args);\n};\n\nPicoString.real = () => {\n console.error('Str.real() is not implemented anymore.');\n};\n\nPicoString.array = () => {\n console.error('Str.array() is not implemented anymore.');\n};\n\nexport default PicoString;","import { Mix, Num, Arr, Hash, Str, Obj } from \"../index.esm.js\";\n\nexport class PicoNumber\n{\n\n /**\n * Format number with decimals\n *\n * @example Num.fixed(1.234, 2) // => \"1.23\"\n * @example Num.fixed(\"2.4\", 0) // => \"2\"\n *\n * @param {any} value Number value\n * @param {number} decimals Decimals count\n * @returns {string} Fixed string\n */\n static fixed(value, decimals = 2)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return value.toFixed(decimals);\n }\n\n /**\n * Parse value as float\n *\n * @example Num.float(\"2.2\") // => 2.2\n * @example Num.float(3) // => 3\n *\n * @param {any} value Numeric value\n * @returns {number} Parsed float\n */\n static float(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return parseFloat(value);\n }\n\n /**\n * Parse value as int\n *\n * @example Num.int(\"12\") // => 12\n * @example Num.int(12.9) // => 12\n *\n * @param {any} value Numeric value\n * @returns {number} Parsed int\n */\n static int(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return parseInt(value);\n }\n\n /**\n * Round up to integer\n *\n * @example Num.ceil(1.1) // => 2\n * @example Num.ceil(\"2.0\") // => 2\n *\n * @param {any} value Numeric value\n * @returns {number} Ceil value\n */\n static ceil(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.ceil(value);\n }\n\n /**\n * Round down to integer\n *\n * @example Num.floor(1.9) // => 1\n * @example Num.floor(\"2.0\") // => 2\n *\n * @param {any} value Numeric value\n * @returns {number} Floor value\n */\n static floor(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.floor(value);\n }\n\n /**\n * Round to nearest integer\n *\n * @example Num.round(1.5) // => 2\n * @example Num.round(\"2.2\") // => 2\n *\n * @param {any} value Numeric value\n * @returns {number} Rounded value\n */\n static round(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.round(value);\n }\n\n /**\n * Sum numbers in list\n *\n * @example Num.combine([1, 2]) // => 3\n * @example Num.combine([5, -2]) // => 3\n *\n * @param {Array<number>} value Number list\n * @returns {number} Sum value\n */\n static combine(value)\n {\n return Arr.reduce(value, (acc, val) => acc + val, 0);\n }\n\n /**\n * Subtract numbers in list\n *\n * @example Num.subtract([5, 2]) // => 3\n * @example Num.subtract([10, 3]) // => 7\n *\n * @param {Array<number>} value Number list\n * @returns {number} Result value\n */\n static subtract(value)\n {\n return Arr.reduce(value, (acc, val) => acc - val, 0);\n }\n\n /**\n * Get decade base (10s)\n *\n * @example Num.decade(27) // => 20\n * @example Num.decade(\"99\") // => 90\n *\n * @param {any} value Numeric value\n * @returns {number} Decade value\n */\n static decade(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.floor(value / 10) * 10;\n }\n\n /**\n * Convert number to power-of-2 list\n *\n * @example Num.matrix(5) // => [4, 1]\n * @example Num.matrix(8) // => [8]\n *\n * @param {number} num Input number\n * @param {number} [limit] Unused (legacy)\n * @param {Array<number>} [base] Result base\n * @returns {Array<number>} Power list\n */\n static matrix(num, limit = 10, base = [])\n {\n let value = 0;\n\n for ( let i = 20; i >= 0; i -- ) {\n if ( num >= (value = Math.pow(2, i)) ) {\n (base.push(value), num -= value);\n }\n }\n\n return base;\n }\n\n /**\n * Calculate distance between coords\n *\n * @example Num.distance({lat:0,lng:0},{lat:0,lng:1}) // => number\n *\n * @param {any} cord1 First coord\n * @param {any} cord2 Second coord\n * @param {boolean} [miles] Return miles if true\n * @returns {number} Distance value\n */\n static distance(cord1, cord2, miles = false)\n {\n let cord = { lat: 0, lng: 0 };\n\n [cord1, cord2] = [\n { ...cord, ...cord1 }, { ...cord, ...cord2 }\n ];\n\n let radlat1 = (Math.PI * this.float(cord1.lat)) / 180;\n let radlat2 = (Math.PI * this.float(cord2.lat)) / 180;\n\n let theta = this.float(cord1.lng) - this.float(cord2.lng);\n let radtheta = (theta) / 180;\n\n let dist = this.combine([\n Math.sin(radlat1) * Math.sin(radlat2),\n Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta)\n ]);\n\n dist = (Math.acos(dist > 1 ? 1 : dist) * 180) /\n Math.PI * 60 * 1.1515;\n\n return miles ? dist * 1.609344 : dist;\n }\n\n}\n\n/**\n * @see PicoStr.number\n */\nPicoNumber.format = (value, ...args) => {\n console.warn('Num.format() is deprecated, use Str.number() instead.');\n return Str.number(value, args[2] || null);\n};\n\n/**\n * @see PicoHash.number\n */\nPicoNumber.random = (...args) => {\n console.warn('Num.random() is deprecated, use Hash.number() instead.');\n return Hash.number(...args);\n};\n\nexport default PicoNumber;","import { Obj, Mix } from \"../index.esm.js\";\n\nexport class PicoArray\n{\n\n /**\n * Wrap value into an array\n *\n * @example Arr.all(1) // => [1]\n * @example Arr.all([1]) // => [1]\n *\n * @param {any} value Value to wrap\n * @returns {Array<any>} Wrapped array\n */\n static all(value)\n {\n return Mix.isArr(value) ? value : [value];\n }\n\n /**\n * Get item at index or fallback\n *\n * @example Arr.get([\"a\"], 0) // => \"a\"\n * @example Arr.get([\"a\"], 9, null) // => null\n *\n * @param {any} value Array-like value\n * @param {number} index Index to read\n * @param {any} [fallback] Fallback value\n * @returns {any} Item or fallback\n */\n static get(value, index, fallback = null)\n {\n if ( ! Mix.isArr(value) ) {\n return value;\n }\n\n if ( value && value[index] ) {\n return value[index];\n }\n\n return fallback;\n }\n\n /**\n * Set item at index (mutates)\n *\n * @example Arr.set([1,2], 0, 9) // => [9,2]\n *\n * @param {Array<any>} target Target array\n * @param {number} index Index to set\n * @param {any} value Value to set\n * @returns {any} Splice result\n */\n static set(target, index, value)\n {\n return this.splice(target, index, 1, value);\n }\n\n /**\n * Remove item at index (mutates)\n *\n * @example Arr.unset([1,2], 0) // => [1]\n *\n * @param {Array<any>} target Target array\n * @param {number} index Index to remove\n * @returns {any} Splice result\n */\n static unset(target, index)\n {\n return this.splice(target, index, 1);\n }\n\n /**\n * Create array with callback values\n *\n * @example Arr.make(3) // => [0,1,2]\n * @example Arr.make(2, \"x\") // => [\"x\",\"x\"]\n *\n * @param {number} length Array length\n * @param {any} [cb] Value or mapper\n * @returns {Array<any>} Generated array\n */\n static make(length, cb = null)\n {\n let result = new Array(length);\n\n if ( cb == null ) {\n cb = (i) => i;\n }\n\n for ( let i = 0; i < length; i ++ ) {\n result[i] = typeof cb === 'function' ? cb(i) : cb;\n }\n\n return result;\n }\n\n /**\n * Check if array has value\n *\n * @example Arr.has([1,2], 2) // => true\n * @example Arr.has([{id:1}], {id:1}) // => true\n *\n * @param {any} value List to search\n * @param {any} search Search value\n * @returns {boolean} True if found\n */\n static has(value, search)\n {\n if ( !Mix.isPrim(search) ) {\n return this.findIndex(value, search) !== - 1;\n }\n\n if ( ! Mix.isArr(value) ) {\n value = [value];\n }\n\n let index = value.findIndex((val) => {\n return val == search;\n });\n\n return index !== - 1;\n }\n\n /**\n * Get unique values as strings\n *\n * @example Arr.unique([\"a\",\"a\"]) // => [\"a\"]\n *\n * @param {Array<any>} value Input list\n * @returns {Array<any>} Unique list\n */\n static unique(value)\n {\n let buffer = {};\n\n for ( const val of value ) {\n buffer[val] = true;\n }\n\n return Mix.keys(buffer);\n }\n\n /**\n * Check equal lengths for arrays\n *\n * @example Arr.lengths([1],[2]) // => true\n *\n * @param {Array<any>} value Base array\n * @param {...Array<any>} args Other arrays\n * @returns {boolean} True if equal\n */\n static lengths(value, ...args)\n {\n let length = value.length;\n\n for ( let i = 0; i < args.length; i ++ ) {\n if ( args[i].length !== length ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get first item or fallback\n *\n * @example Arr.first([1,2]) // => 1\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} First item\n */\n static first(value, fallback = null)\n {\n return this.get(value, 0, fallback);\n }\n\n /**\n * Get second item or fallback\n *\n * @example Arr.second([1,2]) // => 2\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} Second item\n */\n static second(value, fallback = null)\n {\n return this.get(value, 2, fallback);\n }\n\n /**\n * Get third item or fallback\n *\n * @example Arr.third([1,2,3]) // => 3\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} Third item\n */\n static third(value, fallback = null)\n {\n return this.get(value, 2, fallback);\n }\n\n /**\n * Get last item or fallback\n *\n * @example Arr.last([1,2]) // => 2\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} Last item\n */\n static last(value, fallback = null)\n {\n return this.get(value, value.length - 1, fallback);\n }\n\n /**\n * Map values to new array\n *\n * @example Arr.each([1], v => v+1) // => [2]\n *\n * @param {any} value Input list\n * @param {function} cb Map callback\n * @param {any} [retval] Forced return\n * @returns {any} Mapped array\n */\n static each(value, cb, retval = null)\n {\n if ( Mix.isObj(value) ) {\n return this.eachObj(value, cb, retval);\n }\n\n if ( value == null ) {\n value = [];\n }\n\n let result = new Array(value.length);\n\n for (let i = 0; i < value.length; i++) {\n result[i] = cb(value[i], i);\n }\n\n return retval != null ? retval : result;\n }\n\n static eachObj(value, cb, retval = null)\n {\n if ( Mix.isArr(value) ) {\n return this.each(value, cb, retval);\n }\n\n if ( value == null ) {\n value = {};\n }\n\n let result = Mix.keys(value).map((key) => {\n return cb(value[key], key);\n });\n\n return retval != null ? retval : result;\n }\n\n /**\n * Map values in place (mutates)\n *\n * @example Arr.map([1], v => v+1) // => [2]\n *\n * @param {any} value Input list\n * @param {function} cb Map callback\n * @returns {any} Mutated input\n */\n static map(value, cb)\n {\n let [isArr, keys] = [\n Mix.isArr(value), Mix.keys(value)\n ];\n\n let fn = (key) => {\n return isArr ? parseInt(key) : key;\n };\n\n for ( let key of keys ) {\n value[key] = cb(value[key], fn(key));\n }\n\n return value;\n }\n\n /**\n * Recursively map nested arrays\n *\n * @example Arr.recursive([{c:[]}], \"c\", () => 1) // => list\n *\n * @param {any} value Input list\n * @param {string} key Child key\n * @param {function} cb Node callback\n * @param {Array<any>} [cascade] Parent chain\n * @returns {any} Mapped tree\n */\n static recursive(value, key, cb, cascade = [])\n {\n if ( value == null ) {\n return value;\n }\n\n if ( Mix.isObj(value) ) {\n return this.recursiveObj(value, key, cb, cascade);\n }\n\n return this.each(value, (item) => {\n return (this.recursive(item[key], key, cb, [\n ...cascade, value\n ]), cb(item, this.clone(cascade)));\n });\n\n // [{childs: [{ childs: [] } ] }, { childs: [] } ] }]\n }\n\n static recursiveObj(value, key, cb, cascade = [])\n {\n if ( value == null ) {\n return value;\n }\n\n return this.recursive(value[key], key, cb, [\n ...cascade, value\n ]), cb(item, this.clone(cascade))\n }\n\n /**\n * Get matching indexes by filter\n *\n * @example Arr.filterIndex([0,1], v => v) // => [\"1\"]\n *\n * @param {any} value Input list\n * @param {any} [filter] Filter spec\n * @returns {Array<string>} Matching keys\n */\n static filterIndex(value, filter = null)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( filter == null ) {\n filter = (val) => !Mix.isEmpty(val);\n }\n\n return Mix.keys(value).filter((key) => {\n\n if ( Mix.isFunc(filter) ) {\n return filter.call({}, value[key], key);\n }\n\n if ( Mix.isRef(filter) ) {\n return this.includes(value[key], filter);\n }\n\n return filter === value[key];\n });\n }\n\n static filterRemove(value, filter = null)\n {\n if ( value == null ) {\n return value;\n }\n\n let indexes = this.filterIndex(value, filter);\n\n if ( indexes.length === 0 ) {\n return value;\n }\n\n return this.splices(value, indexes);\n }\n\n /**\n * Filter values by filter\n *\n * @example Arr.filter([0,1], v => v) // => [1]\n *\n * @param {any} value Input list\n * @param {any} [filter] Filter spec\n * @returns {Array<any>} Filtered values\n */\n static filter(value, filter = null)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( filter == null ) {\n filter = (val) => !Mix.isEmpty(val);\n }\n\n return Mix.vals(value).filter((val, key) => {\n\n if ( Mix.isFunc(filter) ) {\n return filter.call({}, val, key);\n }\n\n if ( Mix.isRef(filter) ) {\n return this.includes(val, filter);\n }\n\n return filter === value[key];\n });\n }\n\n /**\n * Find index matching filter\n *\n * @example Arr.findIndex([1,2], 2) // => 1\n *\n * @param {Array<any>} value Input array\n * @param {any} [filter] Filter spec\n * @param {number} [fallback] Fallback index\n * @returns {number} Found index\n */\n static findIndex(value, filter = null, fallback = - 1)\n {\n if ( value == null ) {\n return fallback;\n }\n\n if ( filter == null ) {\n filter = (val) => !Mix.isEmpty(val);\n }\n\n for ( let i = 0; i < value.length; i ++ ) {\n\n if ( Mix.isFunc(filter) ) {\n if ( filter.call({}, value[i], i) ) {\n return i;\n }\n }\n\n if ( Mix.isRef(filter) ) {\n if ( this.includes(value[i], filter) ) {\n return i;\n }\n }\n\n if ( filter === value[i] ) return i;\n }\n\n return fallback;\n }\n\n /**\n * Find value matching filter\n *\n * @example Arr.find([1,2], 2) // => 2\n *\n * @param {Array<any>} value Input array\n * @param {any} [filter] Filter spec\n * @param {any} [fallback] Fallback value\n * @returns {any} Found value\n */\n static find(value, filter = null, fallback = null)\n {\n let index = this.findIndex(value, filter);\n\n if ( index === - 1 ) {\n return fallback;\n }\n\n return value[index];\n }\n\n /**\n * Sort array by key or callback\n *\n * @example Arr.sort([{n:2},{n:1}], \"n\") // => list\n *\n * @param {any} value Input list\n * @param {any} [key] Key or compare fn\n * @returns {Array<any>} Sorted list\n */\n static sort(value, key = null)\n {\n if ( Mix.isFunc(key) ) {\n return this.sortFunc(value, key);\n }\n\n if ( key != null ) {\n return this.sortDeep(value, key);\n }\n\n return this.sortPrim(value)\n }\n\n /**\n * Sort by compare callback\n *\n * @example Arr.sortFunc([2,1], (a,b)=>a-b) // => [1,2]\n *\n * @param {any} value Input list\n * @param {function} cb Compare callback\n * @returns {Array<any>} Sorted list\n */\n static sortFunc(value, cb)\n {\n let keys = Mix.keys(value).sort((a, b) => {\n return cb.call({}, value[a], value[b]);\n });\n\n let result = [];\n\n for ( const key of keys ) {\n result.push(value[key]);\n }\n\n return result;\n }\n\n /**\n * Sort by nested key value\n *\n * @example Arr.sortDeep([{a:{n:2}},{a:{n:1}}], \"a.n\") // => list\n *\n * @param {any} value Input list\n * @param {any} key Key path\n * @returns {Array<any>} Sorted list\n */\n static sortDeep(value, key)\n {\n let keys = Mix.keys(value).sort((a, b) => {\n return Mix.compare(Obj.get(a, key), Obj.get(b, key));\n });\n\n let result = [];\n\n for ( const key of keys ) {\n result.push(value[key]);\n }\n\n return result;\n }\n\n /**\n * Sort by primitive key order\n *\n * @example Arr.sortPrim([\"b\",\"a\"]) // => [\"a\",\"b\"]\n *\n * @param {any} value Input list\n * @returns {Array<any>} Sorted list\n */\n static sortPrim(value)\n {\n let keys = Mix.keys(value).sort((a, b) => {\n return Mix.compare(a, b);\n });\n\n let result = [];\n\n for ( const key of keys ) {\n result.push(value[key]);\n }\n\n return result;\n }\n\n /**\n * Merge arrays (concat)\n *\n * @example Arr.merge([1],[2]) // => [1,2]\n *\n * @param {Array<any>} value Base array\n * @param {...any} args Arrays to add\n * @returns {Array<any>} Merged array\n */\n static merge(value, ...args)\n {\n return value.concat(...args);\n }\n\n /**\n * Prepend items (mutates)\n *\n * @example Arr.prepend([2], 1) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {...any} args Items to add\n * @returns {Array<any>} Mutated array\n */\n static prepend(value, ...args)\n {\n return (value.unshift(...args), value);\n }\n\n /**\n * Append items (mutates)\n *\n * @example Arr.append([1], 2) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {...any} args Items to add\n * @returns {Array<any>} Mutated array\n */\n static append(value, ...args)\n {\n return (value.push(...args), value);\n }\n\n /**\n * Add item if not present\n *\n * @example Arr.add([1], 2) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to add\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static add(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n if ( this.findIndex(value, finder) !== -1 ) {\n return value;\n }\n\n return (value.push(target), value);\n }\n\n /**\n * Replace existing item or add\n *\n * @example Arr.replace([1], 2) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to add\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static replace(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n let index = this.findIndex(value, finder);\n\n if ( index !== -1 ) {\n this.splice(value, index, 1);\n }\n\n return (value.push(target), value);\n }\n\n /**\n * Remove item if present\n *\n * @example Arr.remove([1,2], 1) // => [2]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to remove\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static remove(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n let index = this.findIndex(value, finder);\n\n if ( index === -1 ) {\n return value;\n }\n\n return (this.splice(value, index, 1), value);\n }\n\n /**\n * Toggle item in array\n *\n * @example Arr.toggle([1], 1) // => []\n * @example Arr.toggle([], 1) // => [1]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to toggle\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static toggle(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n let index = this.findIndex(value, finder);\n\n if ( index === -1 ) {\n return (value.push(target), value);\n }\n\n return (this.splice(value, index, 1), value);\n }\n\n /**\n * Insert item at index (mutates)\n *\n * @example Arr.insert([1,3], 1, 2) // => [1,2,3]\n *\n * @param {Array<any>} value Target array\n * @param {number} index Insert index\n * @param {any} target Item to insert\n * @returns {Array<any>} Mutated array\n */\n static insert(value, index, target)\n {\n return (this.splice(value, index, 0, target), value);\n }\n\n /**\n * Slice array from index\n *\n * @example Arr.slice([1,2,3], 1, 2) // => [2,3]\n *\n * @param {Array<any>} value Source array\n * @param {number} index Start index\n * @param {number} [length] Slice length\n * @returns {Array<any>} Sliced array\n */\n static slice(value, index, length = 1)\n {\n return value.slice(parseInt(index), length);\n }\n\n /**\n * Splice array (mutates)\n *\n * @example Arr.splice([1,2], 0, 1) // => [1]\n *\n * @param {Array<any>} value Target array\n * @param {number} index Start index\n * @param {number} [length] Remove count\n * @param {...any} args Items to add\n * @returns {any} Splice result\n */\n static splice(value, index, length = 1, ...args)\n {\n return value.splice(parseInt(index), length, ...args);\n }\n\n /**\n * Splice multiple indexes\n *\n * @example Arr.splices([1,2,3],[0,2]) // => [2]\n *\n * @param {Array<any>} value Target array\n * @param {Array<number>} indexies Index list\n * @param {number} [length] Remove count\n * @returns {Array<any>} Mutated array\n */\n static splices(value, indexies, length = 1)\n {\n this.each(indexies, (index) => {\n this.splice(value, index, length);\n });\n\n return value;\n }\n\n /**\n * Deep clone array/object\n *\n * @example Arr.clone([1,{a:1}]) // => new array\n *\n * @param {any} value Value to clone\n * @returns {any} Cloned value\n */\n static clone(value)\n {\n if ( Mix.isPrim(value) ) {\n return value;\n }\n\n if ( Mix.isObj(value) ) {\n return Obj.clone(value);\n }\n\n if ( ! Mix.isArr(value) ) {\n return value;\n }\n\n let result = new Array(value.length);\n\n for ( let i = 0; i < value.length; i ++ ) {\n result[i] = this.clone(value[i]);\n }\n\n return result;\n }\n\n /**\n * Get items not in others\n *\n * @example Arr.diff([1,2],[2]) // => [1]\n *\n * @param {...Array<any>} args Arrays to diff\n * @returns {Array<any>} Difference list\n */\n static diff(...args)\n {\n return args.reduce((a, c) => {\n return a.filter(i => !c.includes(i))\n });\n }\n\n /**\n * Get intersecting items\n *\n * @example Arr.isect([1,2],[2,3]) // => [2]\n *\n * @param {...Array<any>} args Arrays to intersect\n * @returns {Array<any>} Intersection list\n */\n static isect(...args)\n {\n return args.reduce((a, c) => {\n return a.filter(i => c.includes(i))\n });\n }\n\n /**\n * Extract property values from list\n *\n * @example Arr.extract([{id:1}], \"id\") // => [1]\n *\n * @param {Array<any>} value Input list\n * @param {any} key Key path\n * @returns {Array<any>} Extracted list\n */\n static extract(value, key)\n {\n let result = new Array(value.length);\n\n for ( let i = 0; i < value.length; i ++ ) {\n result[i] = Obj.get(value[i], key);\n }\n\n return result;\n }\n\n /**\n * Reduce list values\n *\n * @example Arr.reduce([1,2], (a,c)=>a+c, 0) // => 3\n *\n * @param {any} value Input list\n * @param {function} callback Reducer callback\n * @param {any} accumulator Start value\n * @returns {any} Reduced value\n */\n static reduce(value, callback, accumulator)\n {\n return Mix.vals(value).reduce(callback, accumulator);\n }\n\n /**\n * Split array into chunks\n *\n * @example Arr.chunk([1,2,3], 2) // => [[1,2],[3]]\n *\n * @param {Array<any>} value Source array\n * @param {number} [chunk] Chunk size\n * @returns {Array<Array<any>>} Chunked list\n */\n static chunk(value, chunk = 10)\n {\n let res = [];\n\n for ( let i = 0; i < value.length; i += chunk ) {\n res.push(value.slice(i, i + chunk));\n }\n\n return res;\n }\n\n /**\n * Check if value includes search\n *\n * @example Arr.includes([1,2], 2) // => true\n * @example Arr.includes([{a:1}], {a:1}) // => true\n *\n * @param {any} value Target value\n * @param {any} search Search spec\n * @returns {boolean} True if includes\n */\n static includes(value, search)\n {\n if ( Mix.isObj(search) ) {\n return Obj.includes(value, search);\n }\n\n if ( ! Mix.isArr(search) ) {\n return value === search;\n }\n\n let [result, length] = [\n false, search.length,\n ];\n\n if ( length === 0 ) {\n return true;\n }\n\n for ( let i = 0; result === false && i < length; i++) {\n result ||= this.has(value, search[i]);\n }\n\n return result;\n }\n\n /**\n * Check array contains all values\n *\n * @example Arr.contains([1,2], [2]) // => true\n *\n * @param {any} arr Target array\n * @param {any} val Required values\n * @returns {boolean} True if contains\n */\n static contains(arr, val)\n {\n let result = true;\n\n for ( let key of Mix.vals(val) ) {\n result &&= Mix.vals(arr).indexOf(key) !== -1;\n }\n\n return result;\n }\n\n /**\n * Check arrays match (set-like)\n *\n * @example Arr.matches([1,2], [2,1]) // => true\n *\n * @param {any} value Target list\n * @param {any} search Search spec\n * @returns {boolean} True if matches\n */\n static matches(value, search)\n {\n if ( Mix.isObj(search) ) {\n return Obj.matches(value, search);\n }\n\n if ( ! Mix.isArr(value) ) {\n return value === search;\n }\n\n search = this.unique(search);\n\n let [result, length] = [\n true, search.length,\n ];\n\n if ( value.length !== search.length ) {\n return false;\n }\n\n for ( let i = 0; result === true && i < length; i++) {\n result &&= this.has(value, search[i]);\n }\n\n return result;\n }\n\n}\n\n/**\n * @see PicoArray.unset\n */\nPicoArray.removeIndex = function (...args) {\n console.warn('Arr.removeIndex() is deprecated, use Arr.unset() instead.');\n return this.unset(...args);\n};\n\n/**\n * @see PicoArray.sortPrim\n */\nPicoArray.sortString = function (...args) {\n console.warn('Arr.sortString() is deprecated, use Arr.sortPrim() instead.');\n return this.sortPrim(...args);\n};\n\n/**\n * @see PicoArray.append\n */\nPicoArray.push = function (...args) {\n console.warn('Arr.push() is deprecated, use Arr.append() instead.');\n return this.append(...args);\n};\n\n/**\n * @see PicoArray.merge\n */\nPicoArray.concat = function (...args) {\n console.warn('Arr.concat() is deprecated, use Arr.merge() instead.');\n return this.merge(...args);\n};\n\n/**\n * @see PicoArray.matches\n */\nPicoArray.equal = function (...args) {\n console.warn('Arr.equal() is deprecated, use Arr.matches() instead.');\n return this.matches(...args);\n};\n\n/**\n * @see PicoArray.diff\n */\nPicoArray.diffrence = function (...args) {\n console.warn('Arr.diffrence() is deprecated, use Arr.diff() instead.');\n return this.diff(...args);\n};\n\n/**\n * @see PicoArray.isect\n */\nPicoArray.intersect = function (...args) {\n console.warn('Arr.intersect() is deprecated, use Arr.isect() instead.');\n return this.isect(...args);\n};\n\nexport default PicoArray;","import { go, Mix, Arr } from \"../index.esm.js\";\n\nexport class PicoObject\n{\n /**\n * Normalize key path to array\n *\n * @example Obj.keyoptim(\"a.b\") // => [\"a\",\"b\"]\n * @example Obj.keyoptim([\"a\",\"b\"]) // => [\"a\",\"b\"]\n *\n * @param {any} keys Key path\n * @param {boolean} [flatten] Flatten keys\n * @param {boolean|null} [isstr] Is string flag\n * @returns {Array<any>} Key segments\n */\n static keyoptim(keys, flatten = false, isstr = null)\n {\n if ( isstr === null ) {\n isstr = Mix.isStr(keys);\n }\n\n if ( !isstr && flatten ) {\n keys = keys.join('.');\n }\n\n return isstr || flatten ? keys.split('.') : keys;\n }\n\n /**\n * Check if nested key exists\n *\n * @example Obj.has({a:{b:1}}, \"a.b\") // => true\n * @example Obj.has({a:{}}, \"a.b\") // => false\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {boolean} [flatten] Flatten keys\n * @returns {boolean} True if exists\n */\n static has(target, keys, flatten = false)\n {\n if ( target == null || keys == null ) {\n return false;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return target[keys] !== undefined;\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n let [list, index, length] = [\n keys.pop(), 0, keys.length\n ];\n\n if ( length === 0 ) {\n return target[list] !== undefined;\n }\n\n while ( target != null && index < length ) {\n target = target[keys[index ++]];\n }\n\n if ( target == null ) {\n return false;\n }\n\n return target[list] !== undefined;\n\n }\n\n /**\n * Get nested value or fallback\n *\n * @example Obj.get({a:{b:1}}, \"a.b\") // => 1\n * @example Obj.get({}, \"a.b\", null) // => null\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {any} [fallback] Fallback value\n * @param {boolean} [flatten] Flatten keys\n * @returns {any} Nested value\n */\n static get(target, keys, fallback = null, flatten = false)\n {\n if ( target == null || keys == null ) {\n return fallback;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return target[keys];\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n let index = 0, length = keys.length;\n\n if ( length === 0 ) {\n return fallback;\n }\n\n while ( target != null && index < length ) {\n target = target[keys[index ++]];\n }\n\n if ( target == null ) {\n return fallback;\n }\n\n return target;\n }\n\n /**\n * Set nested value (mutates)\n *\n * @example Obj.set({}, \"a.b\", 1) // => object\n * @example Obj.set({}, [\"a\",\"b\"], 1) // => object\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {any} value Value to set\n * @param {boolean} [flatten] Flatten keys\n * @returns {any} Mutated target\n */\n static set(target, keys, value, flatten = false)\n {\n if ( keys == null ) {\n return target;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return (target[keys] = value, target);\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n if ( keys.length === 0 ) {\n return target;\n }\n\n let nested = target;\n\n for ( let mod, src, i = 0; i < keys.length; i++) {\n\n mod = src = String(keys[i]);\n\n if ( src.indexOf('[]') !== -1 ) {\n mod = src.replace('[]', '');\n }\n\n if ( nested[mod] == null ) {\n nested[mod] = mod === src ? {} : [];\n }\n\n if ( mod !== src ) {\n Arr.insert(keys, i + 1, nested[mod].length);\n }\n\n if ( keys.length - 1 === i ) {\n nested[mod] = value;\n }\n\n nested = nested[mod];\n }\n\n return target;\n }\n\n /**\n * Unset nested value (mutates)\n *\n * @example Obj.unset({a:{b:1}}, \"a.b\")\n * @example Obj.unset({a:{b:1}}, [\"a\",\"b\"])\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {boolean} [flatten] Flatten keys\n * @returns {any} Mutated target\n */\n static unset(target, keys, flatten = false)\n {\n if ( keys == null ) {\n return target;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return (delete target[keys], target);\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n let [list, index, length, nested] = [\n keys.pop(), 0, keys.length, target\n ];\n\n if ( length === 0 ) {\n return target;\n }\n\n while ( nested != null && index < length ) {\n nested = nested[keys[index ++]];\n }\n\n if ( nested == null ) {\n return target;\n }\n\n return (delete nested[list], target);\n }\n\n /**\n * Check if nested value is empty\n *\n * @example Obj.empty({a:null}, \"a\") // => true\n * @example Obj.empty({a:1}, \"a\") // => false\n *\n * @param {any} target Target object\n * @param {any} key Key path\n * @returns {boolean} True if empty\n */\n static empty(target, key)\n {\n return Mix.isEmpty(this.get(target, key));\n }\n\n /**\n * Unset multiple keys (mutates)\n *\n * @example Obj.remove({a:1,b:2}, [\"a\"]) // => object\n *\n * @param {any} target Target object\n * @param {any} keys Keys list\n * @returns {any} Mutated target\n */\n static remove(target, keys)\n {\n if ( ! Mix.isArr(keys) ) {\n return target;\n }\n\n for ( let key of keys ) {\n this.unset(target, key);\n }\n\n return target;\n }\n\n /**\n * Map object values to object\n *\n * @example Obj.each({a:1}, v => v+1) // => {a:2}\n *\n * @param {any} value Source object\n * @param {function} cb Map callback\n * @param {any} [retval] Forced return\n * @returns {any} Mapped object\n */\n static each(value, cb, retval = null)\n {\n let result = {};\n\n for ( let key of Mix.keys(value) ) {\n result[key] = cb(value[key], key);\n }\n\n if ( retval != null ) {\n return retval;\n }\n\n return result;\n }\n\n /**\n * Map object values to object\n *\n * @example Obj.map({a:1}, v => v+1) // => {a:2}\n *\n * @param {any} value Source object\n * @param {function} cb Map callback\n * @returns {Record<string, any>} Mapped object\n */\n static map(value, cb)\n {\n for ( let key of Mix.keys(value) ) {\n value[key] = cb(value[key], key);\n }\n\n return value;\n }\n\n /**\n * Get filtered key indexes\n *\n * @example Obj.filterIndex({a:1,b:null}) // => [\"a\"]\n *\n * @param {any} value Source object\n * @param {any} [filter] Filter spec\n * @returns {Array<any>} Key list\n */\n static filterIndex(value, filter = null)\n {\n return Arr.filterIndex(value, filter);\n }\n\n /**\n * Filter object by key filter\n *\n * @example Obj.filter({a:1,b:null}) // => {a:1}\n *\n * @param {any} value Source object\n * @param {any} [filter] Filter spec\n * @returns {Record<string, any>} Filtered object\n */\n static filter(value, filter = null)\n {\n let result = {};\n\n for (let key of this.filterIndex(value, filter)) {\n result[key] = value[key];\n }\n\n return result;\n }\n\n /**\n * Flatten object into dot keys\n *\n * @example Obj.flatten({a:{b:1}}) // => {\"a.b\":1}\n *\n * @param {any} value Source object\n * @param {string} [prefix] Key prefix\n * @param {Record<string, any>} [result] Result map\n * @returns {Record<string, any>} Flat map\n */\n static flatten(value, prefix = '', result = {})\n {\n if ( typeof value !== 'object' ) {\n return result[prefix] = value;\n }\n\n if ( prefix !== '' ) {\n prefix += '.';\n }\n\n for ( let key of Mix.keys(value) ) {\n this.flatten(value[key], prefix + key, result);\n }\n\n return result;\n }\n\n /**\n * Flatten object into form keys\n *\n * @example Obj.flattenForm({a:{b:1}}) // => {\"a[b]\":1}\n *\n * @param {any} value Source object\n * @param {string} [prefix] Key prefix\n * @param {Record<string, any>} [result] Result map\n * @returns {Record<string, any>} Flat map\n */\n static flattenForm(value, prefix = '', result = {})\n {\n if ( typeof value !== 'object' ) {\n return result[prefix] = value;\n }\n\n let fn = (key) => {\n return prefix ? `${prefix}[${key}]` : key;\n };\n\n for ( let key of Mix.keys(value) ) {\n this.flattenForm(value[key], fn(key), result);\n }\n\n return result;\n }\n\n /**\n * Unpack dotted keys into object\n *\n * @example Obj.unpack({\"a.b\":1}) // => {a:{b:1}}\n *\n * @param {any} value Flat key map\n * @param {Record<string, any>} [result] Result object\n * @returns {Record<string, any>} Unpacked object\n */\n static unpack(value, result = {})\n {\n Arr.each(Mix.keys(value), (key) => {\n this.set(result, key, value[key]);\n });\n\n return result;\n }\n\n /**\n * Assign objects (Object.assign)\n *\n * @example Obj.assign({}, {a:1}) // => {a:1}\n *\n * @param {...any} args Assign args\n * @returns {any} Assigned object\n */\n static assign(...args)\n {\n return Object.assign(...args);\n }\n\n /**\n * Deep clone primitive/array/object\n *\n * @example Obj.clone({a:{b:1}}) // => new object\n *\n * @param {any} value Value to clone\n * @param {any} [merge] Merge values\n * @returns {any} Cloned value\n */\n static clone(value, merge = null)\n {\n if ( Mix.isPrim(value) ) {\n return value;\n }\n\n if ( Mix.isArr(value) ) {\n return Arr.clone(value);\n }\n\n if ( ! Mix.isObj(value) ) {\n return value;\n }\n\n let result = {};\n\n for ( let key of Mix.keys(value) ) {\n result[key] = this.clone(value[key]);\n }\n\n if ( merge != null ) {\n return this.assign(result, merge);\n }\n\n return result;\n }\n\n /**\n * Get and remove nested value\n *\n * @example Obj.pluck({a:1}, \"a\") // => 1\n *\n * @param {any} value Source object\n * @param {any} key Key path\n * @param {any} [fallback] Fallback value\n * @returns {any} Plucked value\n */\n static pluck(value, key, fallback = null)\n {\n let result = this.get(value, key, fallback);\n\n this.unset(value, key);\n\n return result;\n }\n\n /**\n * Pick only given keys\n *\n * @example Obj.only({a:1,b:2}, [\"a\"]) // => {a:1}\n *\n * @param {any} value Source object\n * @param {Array<any>} keys Allowed keys\n * @param {any} [merge] Merge values\n * @returns {Record<string, any>} Picked object\n */\n static only(value, keys, merge = null)\n {\n let result = {};\n\n this.each(value, (val, key) => {\n if ( Arr.has(keys, key) ) result[key] = val;\n });\n\n if ( merge == null ) {\n return result;\n }\n\n return this.assign(result, merge);\n }\n\n /**\n * Pick all keys except given\n *\n * @example Obj.except({a:1,b:2}, [\"a\"]) // => {b:2}\n *\n * @param {any} value Source object\n * @param {Array<any>} keys Excluded keys\n * @param {any} [merge] Merge values\n * @returns {Record<string, any>} Picked object\n */\n static except(value, keys, merge = null)\n {\n let result = {};\n\n this.each(value, (val, key) => {\n if ( ! Arr.has(keys, key) ) result[key] = val;\n });\n\n if ( merge == null ) {\n return result;\n }\n\n return this.assign(result, merge);\n }\n\n /**\n * Check if value includes search\n *\n * @example Obj.includes({a:1}, {a:1}) // => true\n * @example Obj.includes({a:1}, {a:2}) // => false\n *\n * @param {any} value Source value\n * @param {any} search Search spec\n * @returns {boolean} True if includes\n */\n static includes(value, search)\n {\n if ( Mix.isArr(search) ) {\n return Arr.includes(value, search);\n }\n\n if ( ! Mix.isObj(search) ) {\n return value === search;\n }\n\n let keys = Mix.keys(search);\n\n let [result, length] = [\n true, keys.length,\n ];\n\n for ( let i = 0; result === true && i < length; i++) {\n result = this.includes(...[\n value[keys[i]], search[keys[i]]\n ]);\n }\n\n return result;\n }\n\n /**\n * Check if value matches search\n *\n * @example Obj.matches({a:1}, {a:1}) // => true\n * @example Obj.matches({a:1}, {b:1}) // => false\n *\n * @param {any} value Source value\n * @param {any} search Search spec\n * @returns {boolean} True if matches\n */\n static matches(value, search)\n {\n if ( Mix.isArr(search) ) {\n return Arr.matches(value, search);\n }\n\n if ( ! Mix.isObj(value) ) {\n return value === search;\n }\n\n let keys = Arr.unique([\n ...Mix.keys(search), ...Mix.keys(value)\n ]);\n\n let [result, length] = [\n true, keys.length,\n ];\n\n for ( let i = 0; result === true && i < length; i++) {\n result &&= this.matches(...[\n value[keys[i]], search[keys[i]]\n ]);\n }\n\n return result;\n }\n\n static sort(obj, key)\n {\n let keys = Mix.keys(obj);\n\n if ( Mix.isFunction(key) ) {\n keys = keys.sort((a, b) => {\n return key.call({}, obj[a], obj[b]);\n });\n }\n\n if ( !Mix.isFunction(key) ) {\n keys = keys.sort((a, b) => {\n return Mix.integer(this.get(obj[a], key)) - Mix.integer(this.get(obj[b], key));\n })\n }\n\n let result = [];\n\n Arr.each(keys, (key, index) => {\n obj[key]['_key'] = key;\n result[index] = obj[key];\n });\n\n return result;\n }\n\n static sortString(obj, key)\n {\n let keys = Mix.keys(obj);\n\n if ( !Mix.isFunction(key) ) {\n keys = keys.sort((a, b) => {\n\n let va = Mix.string(this.get(obj[a], key)).toLowerCase();\n let vb = Mix.string(this.get(obj[b], key)).toLowerCase();\n\n return (va < vb) ? - 1 : (va > vb) ? 1 : 0;\n })\n }\n\n let result = [];\n\n Arr.each(keys, (key, index) => {\n obj[key]['_key'] = key;\n result[index] = obj[key];\n });\n\n return result;\n }\n\n}\n\n/**\n * @see PicoMixed.vals\n */\nPicoObject.values = (...args) => {\n console.warn('Obj.values() is deprecated, use Mix.vals() instead.');\n return Mix.vals(...args);\n};\n\n/**\n * @see PicoArray.find\n */\nPicoObject.find = (...args) => {\n console.warn('Obj.find() is deprecated, use Arr.find() instead.');\n return Arr.find(...args);\n};\n\n/**\n * @see PicoArray.findIndex\n */\nPicoObject.findIndex = (...args) => {\n console.warn('Obj.findIndex() is deprecated, use Arr.findIndex() instead.');\n return Arr.findIndex(...args);\n};\n\n// /**\n// * @see PicoArray.sort\n// */\n// PicoObject.sort = (...args) => {\n// console.warn('Obj.sort() is deprecated, use Arr.sort() instead.');\n// return Arr.sort(...args);\n// };\n//\n// /**\n// * @see PicoArray.sortDeep\n// */\n// PicoObject.sortString = (...args) => {\n// console.warn('Obj.sortString() is deprecated, use Arr.sortDeep() instead.');\n// return Arr.sortDeep(...args);\n// };\n\nexport default PicoObject","import { go, Arr, Mix, Run, Now, Locale, Str, Obj } from \"../index.esm.js\";\n\nexport const MIX_REGEX = {\n 'iso': /^\\d{4}-\\d{2}-\\d{2}[T\\s]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/,\n};\n\nexport class PicoMixed\n{\n /**\n * Check if the value is empty\n *\n * @example Mix.isEmpty('') // => true\n * @example Mix.isEmpty(null) // => true\n * @example Mix.isEmpty([]) // => true\n * @example Mix.isEmpty({}) // => true\n * @example Mix.isEmpty(false) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Returns true if value is not empty\n */\n static isEmpty(value)\n {\n if ( value == null ) {\n return true;\n }\n\n if ( typeof value === 'string' ) {\n return value === '';\n }\n\n if ( typeof value === 'number' ) {\n return false;\n }\n\n if ( typeof value === 'boolean' ) {\n return false;\n }\n\n if ( this.isArr(value) ) {\n return value.length === 0;\n }\n\n return this.len(value) === 0;\n }\n\n /**\n * Check if the value is null\n *\n * @example Mix.isNull(null) // => true\n * @example Mix.isNull(undefined) // => false\n * @example Mix.isNull(0) // => false\n * @example Mix.isNull('') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if null\n */\n static isNull(value)\n {\n return value === null;\n }\n\n /**\n * Check if the value is undefined\n *\n * @example Mix.isUndef(undefined) // => true\n * @example Mix.isUndef(null) // => false\n * @example Mix.isUndef(0) // => false\n * @example Mix.isUndef('') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if undefined\n */\n static isUndef(value)\n {\n return value === undefined;\n }\n\n /**\n * Check if the value is null or undefined\n *\n * @example Mix.isNix(null) // => true\n * @example Mix.isNix(undefined) // => true\n * @example Mix.isNix(0) // => false\n * @example Mix.isNix('') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if null or undefined\n */\n static isNix(value)\n {\n return value === undefined || value === null;\n }\n\n /**\n * Check if the value is string or number\n *\n * @example Mix.isPrim('foo') // => true\n * @example Mix.isPrim(2.2) // => true\n * @example Mix.isPrim([]) // => false\n * @example Mix.isPrim(null) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if typeof string or number\n */\n static isPrim(value)\n {\n return typeof value === 'string' || typeof value === 'number';\n }\n\n /**\n * @see PicoMixed.isPrim\n */\n static isPrimitive = PicoMixed.isPrim;\n\n /**\n * Check if the value is a string\n *\n * @example Mix.isStr('foo') // => true\n * @example Mix.isStr(1) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is string\n */\n static isStr(value)\n {\n return typeof value === 'string';\n }\n\n /**\n * @see PicoMixed.isStr\n */\n static isString = PicoMixed.isStr;\n\n /**\n * Check if the value is a number\n *\n * @example Mix.isNum(12.2) // => true\n * @example Mix.isNum('-4.3') // => true\n * @example Mix.isNum('13f') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is number\n */\n static isNum(value)\n {\n if ( typeof value === 'number' ) {\n return true;\n }\n\n if ( this.isStr(value) ) {\n return /^-?[0-9]+(\\.[0-9]+)?$/.test(value);\n }\n\n return false;\n }\n\n /**\n * @see PicoMixed.isNum\n */\n static isNumber = PicoMixed.isNum;\n\n /**\n * Check if the value is an integer\n *\n * @example Mix.isInt(12) // => true\n * @example Mix.isInt('4') // => true\n * @example Mix.isInt('-4.3') // => false\n * @example Mix.isInt(3.4) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is integer\n */\n static isInt(value)\n {\n if ( !this.isNum(value) ) {\n return false;\n }\n\n if ( this.isStr(value) ) {\n return /^-?[0-9]+$/.test(value);\n }\n\n return parseInt(value) === parseFloat(value);\n }\n\n /**\n * @see PicoMixed.isInt\n */\n static isInteger = PicoMixed.isInt;\n\n /**\n * Check if the value is a boolean\n *\n * @example Mix.isBool(false) // => true\n * @example Mix.isBool('true') // => true\n * @example Mix.isBool(1) // => false\n * @example Mix.isBool('1') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is boolean\n */\n static isBool(value)\n {\n if ( typeof value === 'boolean' ) {\n return true;\n }\n\n if ( this.isStr(value) ) {\n return /^(true|false)$/.test(value);\n }\n\n return false;\n }\n\n /**\n * @see PicoMixed.isBool\n */\n static isBoolean = PicoMixed.isBool;\n\n /**\n * Check if the value is a function\n *\n * @example Mix.isFunc(() => {}) // => true\n * @example Mix.isFunc(Mix.isFunc) // => true\n * @example Mix.isFunc({}) // => false\n * @example Mix.isFunc('1') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is function\n */\n static isFunc(value)\n {\n return typeof value === 'function';\n }\n\n /**\n * @see PicoMixed.isFunc\n */\n static isFunction = PicoMixed.isFunc;\n\n /**\n * Check if the value is object\n *\n * @example Mix.isRef({}) // => true\n * @example Mix.isRef([]) // => true\n * @example Mix.isRef(() => {}) // => false\n * @example Mix.isRef(null) // => false\n * @example Mix.isRef(undefined) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Returns true if is an object\n */\n static isRef(value)\n {\n if ( value == null ) {\n return false;\n }\n\n return typeof value === 'object';\n }\n\n /**\n * @see PicoMixed.isRef\n */\n static isReference = PicoMixed.isRef;\n\n /**\n * Check if the value is plain object\n *\n * @example Mix.isObj({}) // => true\n * @example Mix.isObj([]) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Returns true if is plain object\n */\n static isObj(value)\n {\n if ( value == null ) {\n return false;\n }\n\n return typeof value === 'object' && value.constructor === Object;\n }\n\n /**\n * @see PicoMixed.isObj\n */\n static isObject = PicoMixed.isObj;\n\n /**\n * Check if the value is array object\n *\n * @example Mix.isArr([]) // => true\n * @example Mix.isArr({}) // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is array object\n */\n static isArr(value)\n {\n if ( value == null ) {\n return false;\n }\n\n return typeof value === 'object' && value.constructor === Array;\n }\n\n /**\n * @see PicoMixed.isArr\n */\n static isArray = PicoMixed.isArr;\n\n /**\n * Check if the value is iterable object\n *\n * @example Mix.isIter(new FormData()) // => true\n * @example Mix.isIter({}) // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is iterable object\n */\n static isIter(value)\n {\n if ( this.isArr(value) ) {\n return false;\n }\n\n if ( !this.isRef(value) ) {\n return false;\n }\n\n return this.isFunc(value.entries);\n }\n\n /**\n * @see PicoMixed.isIter\n */\n static isIterable = PicoMixed.isIter;\n\n /**\n * Check if the value is iso date\n *\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate('2023-01-01 00:00:00') // => true\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is iso date\n */\n static isIsoDate(value)\n {\n if ( value instanceof Date ) {\n return true;\n }\n\n return MIX_REGEX.iso.test(value);\n }\n\n /**\n * Check if the value is valid date\n *\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate('2023-01-01') // => true\n * @example Mix.isIsoDate('2023-01-01 00:00:00') // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is valid date\n */\n static isDate(value)\n {\n if ( value instanceof Date ) {\n return true;\n }\n\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n }\n\n /**\n * Check if the value is valid time\n *\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate('00:00:00') // => true\n * @example Mix.isIsoDate('2023-01-01 00:00:00') // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is valid time\n */\n static isTime(value)\n {\n if ( value instanceof Date ) {\n return true;\n }\n\n return /^\\d{2}:\\d{2}:\\d{2}$/.test(value);\n }\n\n /**\n * Check if value is equal\n *\n * @example Mix.isEqual(el, el) // => true\n *\n * @param {any} obj Source value\n * @param {any} val Compare value\n * @returns {boolean} True if equal\n */\n static isEqual(obj, val)\n {\n if ( obj instanceof Node ) {\n return obj.isEqualNode(val);\n }\n\n if ( this.isRef(obj) ) {\n return Object.is(obj, val)\n }\n\n return obj === val;\n }\n\n /**\n * Convert iterable object to a regular object\n *\n * @example Mix.iter(new FormData()) // => {}\n *\n * @param {any} value Value to convert\n * @returns {Record<string, any>} Converted object\n */\n static iter(value)\n {\n if ( value == null ) {\n return {};\n }\n\n let result = {};\n\n for ( const [key, val] of value.entries() ) {\n result[key] = val;\n }\n\n return result;\n }\n\n /**\n * Get keys of an object\n *\n * @example Mix.keys({a: 'v1', b: 'v2'}) // => ['a', 'b']\n * @example Mix.keys(['v1', 'v2']) // => ['0', '1']\n *\n * @param {any} value Object to iterate\n * @returns {Array<any>} Returns array with keys\n */\n static keys(value)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( this.isIter(value) ) {\n value = this.iter(value);\n }\n\n return Object.keys(value);\n }\n\n /**\n * Get values of an object\n *\n * @example Mix.vals({a: 'v1', b: 'v2'}) // => ['v1', 'v2']\n * @example Mix.vals(['v1', 'v2']) // => ['v1', 'v2']\n *\n * @param {any} value Object to iterate\n * @returns {Array<any>} Returns array with values\n */\n static vals(value)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( this.isIter(value) ) {\n value = this.iter(value);\n }\n\n if ( this.isArr(value) || !go().chrome ) {\n return Object.values(value);\n }\n\n let keys = this.keys(value);\n\n for ( let i = 0; i < keys.length; i ++ ) {\n keys[i] = value[keys[i]];\n }\n\n return keys;\n }\n\n /**\n * Cast to array\n *\n * @example Mix.nodes(nodeList) // => []\n *\n * @param {any} value Source value\n * @returns {Array<any>} Array result\n */\n static nodes(value)\n {\n return Array.prototype.slice.call(value);\n }\n\n /**\n * Get own props excluding keys\n *\n * @example Mix.props(Math, [\"PI\"]) // => {}\n *\n * @param {any} value Source object\n * @param {Array<any>} [exclude] Exclude keys\n * @returns {Record<string, any>} Props map\n */\n static props(value, exclude = [])\n {\n let result = {};\n\n for ( const key of Object.getOwnPropertyNames(value) ) {\n if ( exclude.length && ! Arr.has(exclude, key) ) {\n result[key] = value[key];\n }\n }\n\n return result;\n }\n\n /**\n * Get static class props\n *\n * @example Mix.class(MyClass) // => {}\n *\n * @param {any} value Source class\n * @param {Array<any>} [exclude] Exclude keys\n * @returns {Record<string, any>} Props map\n */\n static class(value, exclude = [])\n {\n exclude = Arr.merge(exclude, [\n 'length', 'name', 'prototype', 'constructor'\n ]);\n\n return this.props(value, exclude);\n }\n\n /**\n * Get prototype props\n *\n * @example Mix.proto(MyClass) // => {}\n *\n * @param {any} value Source class\n * @param {Array<any>} [exclude] Exclude keys\n * @returns {Record<string, any>} Props map\n */\n static proto(value, exclude = [])\n {\n exclude = Arr.merge(exclude, [\n 'constructor'\n ]);\n\n return this.props(value.prototype, exclude);\n }\n\n /**\n * Create form data\n *\n * @example Mix.form({ a: 1 }) // => FormData\n *\n * @param {any} value Source object\n * @returns {FormData} Form instance\n */\n static form(value)\n {\n let form = new FormData();\n\n Obj.each(Obj.flattenForm(value), (val, key) => {\n form.append(key, val);\n });\n\n return form;\n }\n\n /**\n * Loop over items\n *\n * @example Mix.vals(FormData, (val, key) => null) // => Mix\n * @example Mix.vals(NodeList, (val, key) => null) // => Mix\n *\n * @param {any} value Value to loop\n * @param {function} cb Callback for each loop\n * @returns {PicoMixed} Returns Mix instance\n */\n static each(value, cb)\n {\n if ( !this.isRef(value) ) {\n throw new Error('Iterate non object');\n }\n\n for ( let key of Mix.keys(value) ) {\n cb(value[key], key);\n }\n\n return this;\n }\n\n /**\n * Get length of value\n *\n * @example Mix.len({a: 'v1', b: 'v2'}) // => 2\n * @example Mix.len(['v1', 'v2']) // => 2\n * @example Mix.len('foobar') // => 6\n * @example Mix.len(12) // => 2\n *\n * @param {any} value The value to count\n * @returns {number} Returns length of value\n */\n static len(value)\n {\n if ( this.isArr(value) ) {\n return value.length;\n }\n\n if ( ! this.isRef(value) ) {\n return this.string(value).length;\n }\n\n return this.keys(value).length;\n }\n\n /**\n * @see PicoMixed.length\n */\n static length = PicoMixed.len;\n\n /**\n * Compare two objects (used for natural array sort)\n *\n * @param {any} value First compare value\n * @param {any} compare Second compare value\n * @returns {number} Returns sort position\n */\n static compare(value, compare)\n {\n return Locale.collator().compare(value, compare);\n }\n\n /**\n * Get value as null\n *\n * @example Mix.null(\"null\") // => null\n *\n * @param {any} value Input value\n * @param {any} [fallback] Fallback value\n * @returns {any} Null or fallback\n */\n static null(value, fallback = null)\n {\n if ( value === 'null' ) {\n return null;\n }\n\n if ( this.isEmpty(value) ) {\n return null;\n }\n\n return fallback;\n }\n\n /**\n * Cast to array\n *\n * @example Mix.arr(\"a,b\") // => [\"a\", \"b\"]\n *\n * @param {any} value Source value\n * @returns {Array<any>} Array result\n */\n static arr(value)\n {\n if ( this.isArr(value) ) {\n return value;\n }\n\n if ( ! this.isStr(value) ) {\n return [value];\n }\n\n value = value.replace(/^@?\\[?(.*?)]$/g, '$1');\n\n return Arr.each(value.split(','), (val) => {\n return val.replace(/(^\"|^'|'$|\"$)/g, '');\n });\n }\n\n /**\n * @see PicoMixed.arr\n */\n static array = PicoMixed.arr;\n\n /**\n * Convert value to string\n *\n * @example Mix.str('foobar') // => 'foobar'\n * @example Mix.str(12) // => '12'\n * @example Mix.str(true) // => 'true'\n * @example Mix.str(null) // => 'null'\n * @example Mix.str(undefined) // => 'undefined'\n *\n * @param {any} value The value to convert\n * @returns {string} Return value as string\n */\n static str(value)\n {\n if ( this.isNix(value) ) {\n return String(value);\n }\n\n if ( value.toString === undefined ) {\n return String(value);\n }\n\n return value.toString();\n }\n\n /**\n * @see PicoMixed.str\n */\n static string = PicoMixed.str;\n\n /**\n * Convert value to number\n *\n * @example Mix.num('-2.2') // => -2.2\n * @example Mix.num(12) // => 12\n * @example Mix.num('foobar') // => NaN\n * @example Mix.num(true) // => NaN\n *\n * @param {any} value The value to convert\n * @param {any} fallback Fallback incase it is not primitive\n * @returns {number|any} Return value as number\n */\n static num(value, fallback = NaN)\n {\n if ( !this.isPrim(value) ) {\n return fallback;\n }\n\n if ( this.isStr(value) ) {\n value = parseFloat(value);\n }\n\n return value;\n }\n\n /**\n * @see PicoMixed.num\n */\n static number = PicoMixed.num;\n\n /**\n * Convert value to integer\n *\n * @example Mix.int('-2.2') // => -2\n * @example Mix.int(12) // => 12\n * @example Mix.int('foobar') // => NaN\n * @example Mix.int(true) // => NaN\n *\n * @param {any} value The value to convert\n * @param {any} fallback Fallback incase it is not primitive\n * @returns {number|any} Return value as integer\n */\n static int(value, fallback = NaN)\n {\n if ( !this.isPrim(value) ) {\n return fallback;\n }\n\n if ( this.isStr(value) ) {\n value = parseFloat(value);\n }\n\n return Math.round(value);\n }\n\n /**\n * @see PicoMixed.int\n */\n static integer = PicoMixed.int;\n\n /**\n * Convert value to boolean\n *\n * @example Mix.int(true) // => true\n * @example Mix.int(12) // => true\n * @example Mix.int(0) // => false\n * @example Mix.int('yes') // => true\n * @example Mix.int('foobar') // => false\n * @example Mix.int(['v1']) // => true\n * @example Mix.int({}) // => false\n *\n * @param {any} value The value to convert\n * @returns {boolean} Return value as boolean\n */\n static bool(value)\n {\n if ( this.isRef(value) ) {\n return !!this.vals(value).length;\n }\n\n if ( this.isNum(value) ) {\n return this.num(value) !== 0;\n }\n\n return /^(true|yes)$/i.test(value);\n }\n\n /**\n * @see PicoMixed.bool\n */\n static boolean = PicoMixed.bool;\n}\n\nPicoMixed.global = function (...args) {\n console.warn('Mix.global() is deprecated, use go() instead.');\n return go(...args);\n};\n\nPicoMixed.isPlain = function (...args) {\n console.warn('Mix.isPlain() is deprecated, use Mix.isObj() instead.');\n return Mix.isObj(...args);\n};\n\nPicoMixed.float = function (...args) {\n console.warn('Mix.float() is deprecated, use Mix.num() instead.');\n return Mix.num(...args);\n};\n\nPicoMixed.delay = function (...args) {\n console.warn('Mix.delay() is deprecated, use Run.delay() instead.');\n return Run.delay(...args);\n};\n\nPicoMixed.async = function (...args) {\n console.warn('Mix.async() is deprecated, use Run.async() instead.');\n return Run.async(...args);\n};\n\nPicoMixed.debounce = function (...args) {\n console.warn('Mix.debounce() is deprecated, use Run.debounce() instead.');\n return Run.debounce(...args);\n};\n\nPicoMixed.throttle = function (...args) {\n console.warn('Mix.throttle() is deprecated, use Run.throttle() instead.');\n return Run.throttle(...args);\n};\n\nPicoMixed.framerate = function (...args) {\n console.warn('Mix.framerate() is deprecated, use Run.framerate() instead.');\n return Run.framerate(...args);\n};\n\nPicoMixed.convertString = function (...args) {\n console.warn('Mix.convertString() is deprecated, use Str.string() instead.');\n return Str.string(...args);\n};\n\nPicoMixed.convertDatetime = function (...args) {\n console.warn('Mix.convertDatetime() is deprecated, use Str.date() instead.');\n return Str.date(...args);\n};\n\nPicoMixed.convertBool = function (...args) {\n console.warn('Mix.convertBool() is deprecated, use Str.boolean() instead.');\n return Str.boolean(...args);\n};\n\nPicoMixed.convertBoolean = function (...args) {\n console.warn('Mix.convertBoolean() is deprecated, use Str.boolean() instead.');\n return Str.boolean(...args);\n};\n\n\n\nexport default PicoMixed;","import { Str } from \"../index.esm.js\";\n\n/**\n * @var {Array<string>} RADIX_NUMBER Radix from 0 to 9\n */\nexport const RADIX_NUMBER = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'\n];\n\n/**\n * @var {Array<string>} RADIX_LETTER_LC Radix from a to z\n */\nexport const RADIX_LETTER_LC = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\n];\n\n/**\n * @var {Array<string>} RADIX_LETTER_UC Radix from A to Z\n */\nexport const RADIX_LETTER_UC = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n];\n\n/**\n * @var {Array<string>} RADIX_UUID Radix from 0-9, a-f and A-F\n */\nexport const RADIX_UUID = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F',\n];\n\n\n/**\n * @var {Array<string>} RADIX_UP19 Radix with 8, 9, a and b\n */\nexport const RADIX_UP19 = [\n '8', '9', 'a', 'b',\n];\n\n/**\n * @var {Array<string>} radix_symbol_pass Radix for passwords\n */\nexport const radix_symbol_pass = [\n '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '-', '=', '[', ']', '{', '}', ';', ':', ',', '.', '/', '<', '>', '?'\n];\n\nexport class PicoHash\n{\n\n /**\n * @var {Array<string>} RADIX\n */\n static RADIX = [\n ...RADIX_NUMBER, ...RADIX_LETTER_LC, ...RADIX_LETTER_UC\n ];\n\n /**\n * Get random char from radix\n *\n * @example Hash.radix(2, ['R', 'f']) // => 'R' or 'f'\n *\n * @param {number} [limit=60] Maximum radix char index\n * @param {Array<string>} [radix=null] A defined radix or null for default\n * @returns {string} Returns random char from radix\n */\n static radix(limit = 60, radix = null)\n {\n return (radix || this.RADIX)[this.number(limit - 1)];\n }\n\n /**\n * Get random number\n *\n * @example Hash.number(20, 18) // => 18, 19 or 20\n *\n * @param {number} [limit=1024] Maximum value\n * @param {number} [start=0] Minimum value\n * @returns {number} Returns a random number between start and limit\n */\n static number(limit = 1024, start = 0)\n {\n return Math.floor(Math.random() * (limit - start + 1)) + start;\n }\n\n /**\n * Get a random hash with given options\n *\n * @example Hash.make(4, 32, { 0: '?' }) // => '?8Wj'\n *\n * @param {number} [length] Length of generated hash\n * @param {number} [radix] Maximum radix char index (10 for 0-9, 36 incl. a-z, 62 incl. A-Z)\n * @param {Record<number, string>} [map] Remap for generated string\n * @returns {string} Returns a random hash with fixed length\n */\n static make(length = 6, radix = 62, map = {})\n {\n let hash = '';\n\n for ( let i = 0; i < length; i ++ ) {\n hash += this.radix(radix);\n }\n\n for ( const k of Object.keys(map) ) {\n hash = Str.set(hash, k, map[k]);\n }\n\n return hash;\n }\n\n /**\n * Get a valid v4 UUID\n *\n * @example Hash.uuid() // => 'FBbA001F-0a01-4bE8-b29C-A9c47fA090f'\n *\n * @param {string|number} [version] UUID version number\n * @returns {string} Returns a valid UUID\n */\n static uuid(version = 4)\n {\n let hash = '';\n\n // Use only selected chars from the radix store\n for ( let i = 0; i < 31; i ++ ) {\n if ( i === 15 ) {\n hash += this.radix(RADIX_UP19.length, RADIX_UP19);\n } else {\n hash += this.radix(RADIX_UUID.length, RADIX_UUID);\n }\n }\n\n // For higher performance use substring\n return hash.substring(0, 8)\n + '-' + hash.substring(8, 12)\n + '-' + version + hash.substring(12, 15)\n + '-' + hash.substring(15, 19)\n + '-' + hash.substring(19, 31);\n }\n\n /**\n * Generate a password with or without symbols\n *\n * @example Hash.password(12, ['%', '&']) // => '0unJ%VDi2RJX'\n *\n * @param {number} [length=24] Length of password\n * @param {Array<string>} [symbols=null] Defined symbols or null for default\n * @returns {string} A random password with fixed length\n */\n static password(length = 24, symbols = null)\n {\n let radix = [\n ...this.RADIX, ...(symbols || radix_symbol_pass)\n ];\n\n let hash = '';\n\n for ( let i = 0; i < length; i ++ ) {\n hash += this.radix(radix.length, radix);\n }\n\n return hash;\n }\n\n}\n\nexport default PicoHash;","import { Str, Event, For, Mix, Arr } from \"../index.esm.js\";\nexport class PicoEvent\n{\n static $events = [];\n\n /**\n * Bind callback to event name\n *\n * @example Event.bind(\"x\", cb) // => Event\n * @example Event.bind([\"a\",\"b\"], cb) // => Event\n *\n * @param {any} event Event name(s)\n * @param {function} cb Event callback\n * @param {any} [options] Listener options\n * @param {boolean} [paused] Start paused\n * @returns {typeof PicoEvent} Event class\n */\n static bind(event, cb, options = {}, paused = false)\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.bind(e, ...arguments), this);\n }\n\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n this.$events = Arr.append(this.$events, {\n event, cb, options, paused\n });\n\n return this;\n }\n\n /**\n * Unbind callback(s) from event\n *\n * @example Event.unbind(\"x\") // => Event\n * @example Event.unbind([\"a\",\"b\"]) // => Event\n *\n * @param {any} event Event name(s)\n * @param {any} [options] Listener options\n * @returns {typeof PicoEvent} Event class\n */\n static unbind(event, options = {})\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.unbind(e, ...arguments), this);\n }\n\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n Arr.remove(this.$events, {\n event, options\n });\n\n return this;\n }\n\n /**\n * Fire event with arguments\n *\n * @example Event.fire(\"x\", 1) // => Event\n *\n * @param {string} event Event name\n * @param {...any} args Event args\n * @returns {typeof PicoEvent} Event class\n */\n static fire(event, ...args)\n {\n let events = this.$events.filter((item) => {\n return item.event === event;\n });\n\n Arr.each(events, (e) => {\n if ( ! e.paused ) {\n e.cb.call({}, ...args);\n }\n });\n\n return this;\n }\n\n /**\n * Pause listeners for event\n *\n * @example Event.pause(\"x\") // => Event\n *\n * @param {any} event Event name(s)\n * @param {any} [options] Listener options\n * @returns {typeof PicoEvent} Event class\n */\n static pause(event, options = {})\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.pause(e, ...arguments), this);\n }\n\n let value = Arr.find(this.$events, {\n event, options\n });\n\n if ( value != null ) {\n value.paused = true;\n }\n\n return this;\n }\n\n /**\n * Unpause listeners for event\n *\n * @example Event.unpause(\"x\") // => Event\n *\n * @param {any} event Event name(s)\n * @param {any} [options] Listener options\n * @returns {typeof PicoEvent} Event class\n */\n static unpause(event, options = {})\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.pause(e, ...arguments), this);\n }\n\n let value = Arr.find(this.$events, {\n event, options\n });\n\n if ( value != null ) {\n value.paused = false;\n }\n\n return this;\n }\n\n}\n\nexport default PicoEvent;","import { Mix, Obj, Locale } from \"../index.esm.js\";\n\nexport class PicoLocale\n{\n /**\n * Translation dictionary\n *\n * @type {Record<any, any>}\n */\n static $text = {};\n\n /**\n * Cached collator instance\n *\n * @type {Intl.Collator|null}\n */\n static $sort = null;\n\n /**\n * Active locale code\n *\n * @type {string}\n */\n static $code = 'en';\n\n /**\n * Check if translation key exists\n *\n * @example Locale.has(\"known.key\") // => true\n * @example Locale.has(\"unknown.key\") // => false\n *\n * @param {any} [key] Translation key\n * @returns {boolean} True if exists\n */\n static has(key = undefined)\n {\n if ( key === undefined ) {\n return true;\n }\n\n return Mix.has(PicoLocale.$text, key);\n }\n\n /**\n * Get translation value or map\n *\n * @example Locale.get(\"known.key\") // => \"value\"\n * @example Locale.get() // => object\n *\n * @param {any} [key] Translation key\n * @param {any} [fallback] Fallback value\n * @returns {any} Translation value\n */\n static get(key = undefined, fallback = null)\n {\n if ( key === undefined ) {\n return PicoLocale.$text;\n }\n\n return Obj.get(PicoLocale.$text, key, fallback);\n }\n\n /**\n * Set translation key or map\n *\n * @example Locale.set({foo:\"bar\"})\n * @example Locale.set(\"unknown\", \"nix\")\n *\n * @param {any} [key] Key or map\n * @param {any} [value] Value to set\n * @returns {any} Updated map\n */\n static set(key = undefined, value = undefined)\n {\n if ( value === undefined ) {\n return PicoLocale.$text = key;\n }\n\n return Obj.set(PicoLocale.$text, key, value);\n }\n\n /**\n * Get or set locale code\n *\n * @example Locale.code() // => \"en\"\n * @example Locale.code(\"de\") // => \"de\"\n *\n * @param {string|null} [code] Locale code\n * @returns {string} Active code\n */\n static code(code = null)\n {\n if ( ! Mix.isNull(code) ) {\n return Locale.$code = code;\n }\n\n if ( ! Mix.isNull(Locale.$code) ) {\n return Locale.$code;\n }\n\n Locale.$code = (navigator.language || 'en-US')\n .replace(/-[A-Z]+$/, '');\n\n return Locale.$code;\n }\n\n /**\n * Get Intl.Collator for sorting\n *\n * @example Locale.collator().compare(\"a\",\"b\")\n *\n * @returns {Intl.Collator} Collator instance\n */\n static collator()\n {\n if ( ! Mix.isNull(Locale.$sort) ) {\n return Locale.$sort;\n }\n\n Locale.$sort = new Intl.Collator(Locale.code(), {\n numeric: true, sensitivity: 'base'\n });\n\n return Locale.$sort;\n }\n\n /**\n * Replace :tokens in text\n *\n * @example Locale.replace(\"Hi :x\", {x:\"Bob\"}) // => \"Hi Bob\"\n * @example Locale.replace(\"Hi\", null) // => \"Hi\"\n *\n * @param {string} text Input text\n * @param {any} [replace] Replace map\n * @returns {string} Replaced text\n */\n static replace(text, replace = null)\n {\n if ( replace == null ) {\n return text;\n }\n\n Obj.each(replace, (val, key) => {\n text = text.replace(new RegExp(':' + key, 'g'), val);\n });\n\n return text;\n }\n\n /**\n * Translate key with replace map\n *\n * @example Locale.trans(\"known.key\") // => \"...\"\n * @example Locale.trans(\"Hi :x\", {x:\"Bob\"}) // => \"Hi Bob\"\n *\n * @param {string} text Key or text\n * @param {any} [replace] Replace map\n * @returns {string} Translated text\n */\n static trans(text, replace = null)\n {\n text = Obj.get(PicoLocale.$text, text, text);\n\n return Locale.replace(text, replace);\n }\n\n /**\n * Translate plural choice by count\n *\n * @example Locale.choice(\"items\", 2) // => \"...\"\n * @example Locale.choice(\"items\", 1, {x:\"y\"}) // => \"...\"\n *\n * @param {string} text Key or text\n * @param {number} [count] Choice count\n * @param {any} [replace] Replace map\n * @returns {string} Chosen text\n */\n static choice(text, count = 0, replace = {})\n {\n text = Obj.get(PicoLocale.$text, text, text);\n\n if ( typeof replace.count === 'undefined' ) {\n replace.count = count;\n }\n\n text = Locale.countpick(text.split('|'), count);\n\n return Locale.replace(text, replace);\n }\n\n /**\n * Pick plural variant from list\n *\n * @example Locale.countpick([\"a\",\"b\"], 2) // => \"b\"\n *\n * @param {Array<string>} splits Variant list\n * @param {number} count Choice count\n * @returns {string} Picked text\n */\n static countpick(splits, count)\n {\n let length = splits.length;\n\n if ( length === 3 && count === 0 ) {\n return splits[0];\n }\n\n if ( length === 3 && count === 1 ) {\n return splits[1];\n }\n\n if ( length === 3 && count >= 2 ) {\n return splits[2];\n }\n\n if ( length === 2 && count === 1 ) {\n return splits[0];\n }\n\n if ( length === 2 && count !== 1 ) {\n return splits[1];\n }\n\n return splits[0];\n }\n\n}\n\nexport default PicoLocale","import { For, Arr, Now, Mix } from \"../index.esm.js\";\n\nexport const COOKIE_REGEX = {\n entry: /(?<=^|;)\\s*(?<key>.*?)\\s*=\\s*(?<value>[^;$]+)/g\n};\n\nexport class PicoCookie\n{\n static $cookie = null;\n\n /**\n * Read raw document.cookie\n *\n * @example Cookie.global() // => \"a=b; c=d\"\n *\n * @returns {string} Cookie string\n */\n static global()\n {\n if ( globalThis.document == null ) {\n return '';\n }\n\n return globalThis.document.cookie || '';\n }\n\n /**\n * Parse cookies into object\n *\n * @example Cookie.parse() // => {a:\"b\"}\n * @example Cookie.parse(true) // force parse\n *\n * @param {boolean} [fresh] Force refresh\n * @returns {Record<string, any>} Cookie map\n */\n static parse(fresh = false)\n {\n if ( !fresh && this.$cookie ) {\n return this.$cookie;\n }\n\n this.$cookie = {};\n\n let matches = this.global().matchAll(...[\n COOKIE_REGEX.entry\n ]);\n\n if ( matches == null ) {\n return this.$cookie;\n }\n\n let fn = (value) => {\n return value.replaceAll('{:}', ';');\n }\n\n Arr.each(Array.from(matches), ({ groups }) => {\n this.$cookie[groups.key] = fn(groups.value);\n });\n\n return this.$cookie;\n }\n\n /**\n * Get cookie value by key\n *\n * @example Cookie.get(\"foo\") // => \"bar\"\n * @example Cookie.get(\"x\", null, \"bool\") // => true\n *\n * @param {string} key Cookie key\n * @param {any} [fallback] Fallback value\n * @param {string} [decode] Decode mode\n * @returns {any} Cookie value\n */\n static get(key, fallback = null, decode = 'string')\n {\n if ( !this.$cookie ) {\n this.parse();\n }\n\n if ( this.$cookie[key] == null ) {\n return fallback;\n }\n\n if ( /^bool(ean)?$/.test(decode) ) {\n return Mix.bool(this.$cookie[key]);\n }\n\n if ( /^num(ber)?$/.test(decode) ) {\n return Mix.bool(this.$cookie[key]);\n }\n\n if ( /^int(eger)?$/.test(decode) ) {\n return Mix.bool(this.$cookie[key]);\n }\n\n if ( /^obj(ext)?$/.test(decode) ) {\n return For.parseOptions(this.$cookie[key]);\n }\n\n return Mix.str(this.$cookie[key]);\n }\n\n /**\n * Set cookie value with options\n *\n * @example Cookie.set(\"a\", \"b\") // => Cookie\n * @example Cookie.set(\"a\", {x:1}) // => Cookie\n *\n * @param {string} key Cookie key\n * @param {any} value Cookie value\n * @param {any} [expire] Expire date spec\n * @param {any} [options] Cookie options\n * @returns {typeof PicoCookie} Cookie class\n */\n static set(key, value, expire = null, options = {})\n {\n if ( !this.$cookie ) {\n this.parse();\n }\n\n if ( !(expire instanceof Now) ) {\n expire = Now.make(expire || '+7 days');\n }\n\n options = {\n expires: expire.toUTC(), path: '/', ...options\n };\n\n if ( Mix.isRef(value) ) {\n value = For.castOptions(value, false);\n }\n\n if ( value != null ) {\n this.$cookie[key] = value;\n }\n\n let plain = key + '=' + Mix.str(value).replaceAll(...[\n ';', '{:}'\n ]);\n\n Arr.each(options, (value, key) => {\n plain += `;${key}=${value}`;\n });\n\n globalThis.document.cookie = plain;\n\n return this;\n }\n\n /**\n * Remove cookie by key\n *\n * @example Cookie.forget(\"a\") // => Cookie\n *\n * @param {string} key Cookie key\n * @param {any} [options] Cookie options\n * @returns {typeof PicoCookie} Cookie class\n */\n static forget(key, options = {})\n {\n let expires = 'Thu, 01 Jan 1970 00:00:01 GMT';\n\n options = {\n expires, path: '/', ...options\n };\n\n if ( this.$cookie[key] ) {\n delete this.$cookie[key];\n }\n\n let plain = `${key}=null`;\n\n Arr.each(options, (value, key) => {\n plain += `;${key}=${value}`;\n });\n\n globalThis.document.cookie = plain;\n\n return this;\n }\n\n}\n\nexport default PicoCookie;","import { Arr, Mix, Obj, Dom } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomFinderStatic\n{\n\n /**\n * Filter nodes by type\n *\n * @example Dom.filterNodes(nodes, 1)\n *\n * @param {any} nodes Source nodes\n * @param {number} [filter] Node type\n * @returns {Array<Element>} Filtered nodes\n */\n static filterNodes(nodes, filter = 1)\n {\n return Arr.filter(Mix.nodes(nodes), (el) => {\n return el.nodeType === filter;\n });\n }\n\n /**\n * Get nodes at point\n *\n * @example Dom.getNodePoint(100, 100)\n *\n * @param {number} posx X position\n * @param {number} posy Y position\n * @returns {Array<Element>} Nodes at point\n */\n static getNodePoint(posx, posy)\n {\n let el = null;\n\n if ( Dom.doc().elementsFromPoint != null ) {\n el = document.elementsFromPoint(posx, posy);\n }\n\n if ( Dom.doc().msElementsFromPoint != null ) {\n el = document.msElementsFromPoint(posx, posy);\n }\n\n return el;\n }\n\n /**\n * Get target by selector\n *\n * @example Dom.getNodeEvent(\".item\", event)\n *\n * @param {string} selector Node selector\n * @param {any} [event] Event object\n * @returns {Element} Found element\n */\n static getNodeEvent(selector, event = {})\n {\n let target = event.srcElement;\n\n if ( target == null ) {\n target = event.target;\n }\n\n let { type, clientX, clientY } = event;\n\n if ( /^(drag[a-z]*|drop$)/.test(type) ) {\n target = Dom.getNodePoint(clientX, clientY);\n }\n\n if ( Mix.isArr(target) ) {\n target = Arr.first(target);\n }\n\n if ( target == null ) {\n target = event.target;\n }\n\n return target.closest(selector);\n }\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomFinderInstance\n{\n /**\n * Resolve input elements\n *\n * @example Dom._constructFinder(\".item\")\n *\n * @param {any} el Input value\n * @returns {any} Resolved elements\n */\n static _constructFinder(el)\n {\n if ( typeof el === 'string' ) {\n el = document.querySelectorAll(el);\n }\n\n if ( el instanceof NodeList ) {\n el = Mix.nodes(el);\n }\n\n return el;\n }\n\n /**\n * Get node type\n *\n * @example Dom.find(\"div\").getNodeType() // => 1\n *\n * @param {number} [fallback] Fallback value\n * @returns {number} Node type\n */\n getNodeType(fallback = -1)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return this.el.nodeType;\n }\n\n /**\n * Get parent node\n *\n * @example Dom.find(\"div\").getNodeParent() // => PicoDom\n *\n * @param {any} [fallback] Fallback value\n * @returns {PicoDom} Parent instance\n */\n getNodeParent(fallback = null)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return Dom.find(this.el.parentNode);\n }\n\n /**\n * Get previous node\n *\n * @example Dom.find(\"div\").getNodePrev() // => PicoDom\n *\n * @param {any} [fallback] Fallback value\n * @returns {PicoDom} Prev instance\n */\n getNodePrev(fallback = null)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return Dom.find(this.el.previousSibling);\n }\n\n /**\n * Get next node\n *\n * @example Dom.find(\"div\").getNodeNext() // => PicoDom\n *\n * @param {any} [fallback] Fallback value\n * @returns {PicoDom} Next instance\n */\n getNodeNext(fallback = null)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return Dom.find(this.el.nextSibling);\n }\n\n /**\n * Get child nodes\n *\n * @example Dom.find(\"div\").getNodeChilds(1)\n *\n * @param {number} [type] Node type\n * @param {any} [fallback] Fallback value\n * @returns {Array<Element>} Child nodes\n */\n getNodeChilds(type = -1, fallback = [])\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n let childs = Mix.nodes(this.el.childNodes);\n\n if ( type === -1 ) {\n return childs;\n }\n\n return Arr.filter(childs, (el) => {\n return el.nodeType === type;\n });\n }\n\n /**\n * Filter instances nodes\n *\n * @example Dom.find(\"div\").sanatize(1)\n *\n * @param {number} [filter] Node type\n * @returns {PicoDom} Current instance\n */\n sanatize(filter = 1)\n {\n this.els = Dom.filterNodes(this.els, filter);\n\n return this;\n }\n\n /**\n * Filter elements by selector\n *\n * @example Dom.find(\"div\").filter(\".active\")\n *\n * @param {any} selector Filter selector\n * @returns {Array<Element>} Filtered nodes\n */\n filter(selector)\n {\n if ( typeof selector !== 'function' ) {\n selector = (el) => Dom.find(el).is(selector);\n }\n\n return Arr.filter(this.els, selector);\n }\n\n /**\n * Exclude elements by selector\n *\n * @example Dom.find(\"div\").except(\".active\")\n *\n * @param {any} selector Exclude selector\n * @returns {Array<Element>} Filtered nodes\n */\n except(selector)\n {\n if ( typeof selector !== 'function' ) {\n selector = (el) => ! Dom.find(el).is(selector);\n }\n\n return Arr.filter(this.els, selector);\n }\n\n /**\n * Find elements in instance\n *\n * @example Dom.find(\"div\").find(\".item\")\n *\n * @param {any} selector Search selector\n * @returns {PicoDom} Dom instance\n */\n find(selector)\n {\n if ( this.el == null ) {\n return Dom.find(null);\n }\n\n let el = this.el;\n\n if ( el instanceof Window ) {\n el = document.body;\n }\n\n let nodes = selector;\n\n if ( Mix.isStr(nodes) ) {\n nodes = el.querySelectorAll(selector);\n }\n\n return Dom.find(nodes);\n }\n\n /**\n * Get element by index\n *\n * @example Dom.find(\"div\").get(0) // => Element\n *\n * @param {number} [index] Node index\n * @returns {any} Found element\n */\n get(index = - 1)\n {\n let nodes = this.els;\n\n if ( index === - 1 ) {\n return nodes;\n }\n\n return Arr.get(nodes, index);\n }\n\n /**\n * Get first element\n *\n * @example Dom.find(\"div\").first() // => Element\n *\n * @param {number} [offset] Node offset\n * @returns {any} Found element\n */\n first(offset = 0)\n {\n return this.get(offset);\n }\n\n /**\n * Get last element\n *\n * @example Dom.find(\"div\").last() // => Element\n *\n * @param {number} [offset] Node offset\n * @returns {any} Found element\n */\n last(offset = 1)\n {\n return Arr.get(this.els, this.els.length - offset);\n }\n\n /**\n * Iterate over elements\n *\n * @example Dom.find(\"div\").each((el) => console.log(el))\n *\n * @param {function} cb Callback fn\n * @returns {PicoDom} Current instance\n */\n each(cb)\n {\n return (this, Arr.each(this.els, cb));\n }\n\n /**\n * Loop through parent nodes\n *\n * @example Dom.find(\"div\").loopParent((el) => console.log(el))\n *\n * @param {function} cb Callback fn\n * @param {any} [boundry] Loop limit\n * @returns {PicoDom} Current instance\n */\n loopParent(cb, boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.win();\n }\n\n for ( let el = this.el; el && el !== boundry; el = el.parentNode ) {\n cb.call({}, el);\n }\n\n return this;\n }\n\n /**\n * Get parent instance\n *\n * @example Dom.find(\"div\").parent() // => PicoDom\n *\n * @returns {PicoDom} Parent instance\n */\n parent()\n {\n let parent = this.getNodeParent();\n\n if ( parent == null ) {\n return Dom.find(null);\n }\n\n return parent;\n }\n\n /**\n * Get first child match\n *\n * @example Dom.find(\"div\").child(\".item\")\n *\n * @param {any} selector Child selector\n * @param {number} [filter] Node type\n * @returns {PicoDom} Child instance\n */\n child(selector, filter = 1)\n {\n for ( let el of this.els ) {\n if ( el.nodeType === filter ) {\n return Dom.find(el);\n }\n }\n\n return Dom.find(null);\n }\n\n /**\n * Get child elements\n *\n * @example Dom.find(\"div\").childs(\".item\")\n *\n * @param {any} [selector] Child selector\n * @param {number} [filter] Node type\n * @returns {Array<Element>} Child elements\n */\n childs(selector = null, filter = 1)\n {\n let childs = this.getNodeChilds(filter);\n\n if ( selector == null ) {\n return childs;\n }\n\n return Arr.filter(childs, (el) => {\n return Dom.find(el).is(selector);\n });\n }\n\n /**\n * Get closest element\n *\n * @example Dom.find(\"div\").closest(\".container\")\n *\n * @param {any} selector Target selector\n * @returns {Element} Found element\n */\n closest(selector)\n {\n if ( this.el === selector ) {\n return this.el;\n }\n\n for ( let el = this; el.el != null; el = el.getNodeParent() ) {\n if ( el.is(selector) ) return el.el;\n }\n\n return null;\n }\n\n /**\n * Get previous element\n *\n * @example Dom.find(\"div\").prev() // => PicoDom\n *\n * @param {number} [type] Node type\n * @returns {PicoDom} Prev instance\n */\n prev(type = 1)\n {\n let el = this.getNodePrev();\n\n for ( el; el != null; el = el.getNodePrev() ) {\n if ( el.getNodeType() === type ) return Dom.find(el);\n }\n\n return Dom.find(null);\n }\n\n /**\n * Get next element\n *\n * @example Dom.find(\"div\").next() // => PicoDom\n *\n * @param {number} [type] Node type\n * @returns {PicoDom} Next instance\n */\n next(type = 1)\n {\n let el = this.getNodeNext();\n\n for ( el; el != null; el = el.getNodeNext() ) {\n if ( el.getNodeType() === type ) return Dom.find(el);\n }\n\n return Dom.find(null);\n }\n\n /**\n * Get number of elements\n *\n * @example Dom.find(\"div\").length() // => 1\n *\n * @returns {number} Count value\n */\n length()\n {\n return this.els.length;\n }\n\n /**\n * Check if element matches\n *\n * @example Dom.find(\"div\").is(\".active\") // => true\n *\n * @param {any} selector Test selector\n * @returns {boolean} True if matches\n */\n is(selector)\n {\n if ( this.el === selector ) {\n return true;\n }\n\n if ( this.el == null ) {\n return false;\n }\n\n for ( let el of this.parent().find(selector).get() ) {\n if ( el === this.el ) return true;\n }\n\n return false;\n }\n\n /**\n * Check if contains match\n *\n * @example Dom.find(\"div\").matches(\".active\")\n *\n * @param {any} selector Test selector\n * @returns {boolean} True if matches\n */\n matches(selector)\n {\n if ( this.el === selector ) {\n return true;\n }\n\n if ( this.el == null ) {\n return false;\n }\n\n for ( let el of this.find(selector).get() ) {\n if ( el === this.el ) return true;\n }\n\n return false;\n }\n\n /**\n * Check if instance is empty\n *\n * @example Dom.find(\".none\").empty() // => true\n *\n * @returns {boolean} True if empty\n */\n empty()\n {\n return this.length() < 1 || this.el == null;\n }\n\n /**\n * Check if element is visible\n *\n * @example Dom.find(\"div\").visible() // => true\n *\n * @returns {boolean} True if visible\n */\n visible()\n {\n if ( this.el == null ) {\n return false;\n }\n\n return this.el.is(':visible');\n }\n\n /**\n * Check if parent matches\n *\n * @example Dom.find(\"div\").above(\".container\")\n *\n * @param {any} selector Parent selector\n * @returns {boolean} True if matches\n */\n above(selector)\n {\n // Parent is exacly selector\n return this.parent().is(selector);\n }\n\n /**\n * Check if inside match\n *\n * @example Dom.find(\"div\").inside(\".container\")\n *\n * @param {any} selector Target selector\n * @returns {boolean} True if inside\n */\n inside(selector)\n {\n // Has parent of selector\n return this.closest(selector) != null;\n }\n\n /**\n * Check if contains match\n *\n * @example Dom.find(\"div\").contains(\".item\")\n *\n * @param {any} selector Target selector\n * @returns {boolean} True if contains\n */\n contains(selector)\n {\n // Has child of selector\n return this.find(selector) != null;\n }\n\n}\n\n/**\n * @see PicoDom.above\n */\nPicoDomFinderInstance.prototype.isParent = function (...args) {\n console.warn('Dom.isParent() is deprecated, use Dom.above() instead.');\n return this.above(...args);\n};\n\n/**\n * @see PicoDom.prev\n */\nPicoDomFinderInstance.prototype.previous = function () {\n console.warn('Dom.previous() is deprecated, use Dom.prev() instead.');\n return this.prev();\n};\n\n/**\n * @see PicoDom.filter\n */\nPicoDomFinderInstance.prototype.where = function (...args) {\n console.warn('Dom.where() is deprecated, use Dom.filter() instead.');\n return this.filter(...args);\n};\n\n/**\n * @see PicoDom.except\n */\nPicoDomFinderInstance.prototype.not = function (...args) {\n console.warn('Dom.not() is deprecated, use Dom.except() instead.');\n return this.except(...args);\n};\n\nPicoDomFinderInstance.prototype.getNot = () => {\n console.error('Dom.getNot() is not implemented anymore.');\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomFinderPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomFinderStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomFinderInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n self.init.push(PicoDomFinderInstance._constructFinder);\n\n return self;\n}","import { Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomFormStatic\n{\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomFormInstance\n{\n\n /**\n * Get or set input value\n *\n * @example Dom.find(\"input\").value(\"hello\")\n *\n * @param {any} [value] Input value\n * @returns {any|PicoDom} Value or instance\n */\n value(value = undefined)\n {\n if ( value === undefined ) {\n return this.el.value;\n }\n\n this.each((el) => {\n el.value = value;\n });\n\n return this;\n }\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomFormPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomFormStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomFormInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomFormInstance.constructor);\n\n return self;\n}","import { Arr, Hash, Mix, Obj, Dom, Run } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomEventStatic\n{\n static $events = [];\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomEventInstance\n{\n\n /**\n * Bind event listener\n *\n * @example Dom.bind(el, \"click\", cb)\n *\n * @param {Element} el Target element\n * @param {string} event Event name\n * @param {function} cb Callback fn\n * @param {string} [selector] Event selector\n * @param {boolean} [pause] Pause listener\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n bind(el, event, cb, selector = null, pause = false, options = {})\n {\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n Dom.$events = Arr.append(Dom.$events, {\n el, event, cb, selector, pause, options\n });\n\n el.addEventListener(event, cb, options);\n\n return this;\n }\n\n /**\n * Unbind event listener\n *\n * @example Dom.unbind(el, \"click\")\n *\n * @param {Element} el Target element\n * @param {string} event Event name\n * @param {string} [selector] Event selector\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n unbind(el, event, selector = null, options = {})\n {\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n let indexes = Arr.filterIndex(Dom.$events, {\n el, event, selector, options\n });\n\n if ( indexes.length === 0 ) {\n return;\n }\n\n let args = (val) => {\n return [event, val.cb, val.options];\n };\n\n Arr.each(indexes.reverse(), (index) => {\n el.removeEventListener(...args(Dom.$events[index]));\n });\n\n Arr.splices(Dom.$events, indexes);\n\n return this;\n }\n\n /**\n * Listen to event\n *\n * @example Dom.find(\"div\").on(\"click\", cb)\n *\n * @param {any} event Event name\n * @param {function} cb Callback fn\n * @param {any} [options] Listener options\n * @param {boolean} [pause] Pause listener\n * @param {string} [selector] Event selector\n * @returns {PicoDom} Current instance\n */\n on(event, cb, options = {}, pause = false, selector = null)\n {\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n if ( Mix.isArr(event) ) {\n return (Arr.each(event, (e) => this.on(e, ...arguments)), this);\n }\n\n let fn = (e) => {\n cb.call(e.target, e, e.target);\n };\n\n this.each((el) => {\n this.bind(el, event, fn, selector, pause, options);\n });\n\n return this;\n }\n\n /**\n * Stop listening to event\n *\n * @example Dom.find(\"div\").off(\"click\")\n *\n * @param {any} event Event name\n * @param {string} [selector] Event selector\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n off(event, selector = null, options = {})\n {\n if ( Mix.isArr(event) ) {\n return (Arr.each(event, (e) => this.off(e, ...arguments)), this);\n }\n\n if ( Mix.isObj(selector) ) {\n (options = selector, selector = null);\n }\n\n this.each((el) => {\n this.unbind(el, event, selector, options);\n });\n\n return this;\n }\n\n /**\n * Stop listening to event with specific options\n *\n * @example Dom.find(\"div\").optoff({ id: \"my-id\" })\n *\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n optoff(options = {})\n {\n Run.idle(() => {\n Arr.filterRemove(Dom.$events, { options });\n });\n\n this.each((el) => {\n el && el.removeAllListeners();\n });\n\n return this;\n }\n\n /**\n * Listen to event once\n *\n * @example Dom.find(\"div\").once(\"click\", cb)\n *\n * @param {any} event Event name\n * @param {function} cb Callback fn\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n once(event, cb, options = {})\n {\n options.id = Hash.make(24);\n\n this.on(event, (e) => {\n cb(e); this.off(event, options);\n }, options);\n\n return this;\n }\n\n /**\n * Listen to live event\n *\n * @example Dom.find(\"div\").live(\"click\", \"span\", cb)\n *\n * @param {any} event Event name\n * @param {string} selector Event selector\n * @param {function} cb Callback fn\n * @param {any} [options] Listener options\n * @param {boolean} [pause] Pause listener\n * @returns {PicoDom} Current instance\n */\n live(event, selector, cb, options = {}, pause = false)\n {\n let fn = function (event) {\n\n let target = Dom.getNodeEvent(selector, event);\n\n if ( target == null ) {\n return;\n }\n\n cb.call({}, event, target);\n };\n\n this.on(event, fn, options, pause, selector);\n\n return this;\n }\n\n /**\n * Fire event on element\n *\n * @example Dom.find(\"div\").fire(\"click\")\n *\n * @param {string} event Event name\n * @returns {PicoDom} Current instance\n */\n fire(event)\n {\n let callback = new Event(event);\n\n this.each((el) => {\n el.dispatchEvent(callback);\n });\n\n return this;\n }\n\n}\n\n/**\n * @see PicoDom.once\n */\nPicoDomEventInstance.prototype.one = function (...args) {\n console.warn('Dom.one() is deprecated, use Dom.once() instead.');\n return this.once(...args);\n};\n\n\nPicoDomEventInstance.prototype.delayed = function () {\n console.error('Dom.delayed() is not implemented anymore.');\n};\n\nPicoDomEventInstance.prototype.pause = function () {\n console.error('Dom.pause() is not implemented anymore.');\n};\n\nPicoDomEventInstance.prototype.unpause = function () {\n console.error('Dom.unpause() is not implemented anymore.');\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomEventPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomEventStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomEventInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomEventInstance.constructor);\n\n return self;\n}","import { Arr, Dom, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomBuilderStatic\n{\n /**\n * Create element from tag\n *\n * @example Dom.make(\"div\", { class: \"active\" })\n *\n * @param {any} el Tag or element\n * @param {any} [options] Attr options\n * @returns {PicoDom} Dom instance\n */\n static make(el, options = {})\n {\n if ( el instanceof Dom ) {\n el = el.el;\n }\n\n if ( Mix.isStr(el) ) {\n el = document.createElement(el);\n }\n\n el = Obj.assign(el, options);\n\n let ini = new Dom(el);\n\n if ( options.class ) {\n ini.class(options.class);\n }\n\n if ( options.html ) {\n ini.html(options.html);\n }\n\n return ini;\n }\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomBuilderInstance\n{\n /**\n * Prepend value to element\n *\n * @example Dom.find(\"div\").prepend(\"<span></span>\")\n *\n * @param {any} value Prepend value\n * @returns {PicoDom} Current instance\n */\n prepend(value)\n {\n this.each((el) => {\n if ( el.prepend != null ) el.prepend(value);\n });\n\n return this;\n }\n\n /**\n * Prepend element to value\n *\n * @example Dom.find(\"span\").prependTo(\"div\")\n *\n * @param {any} value Target element\n * @returns {PicoDom} Current instance\n */\n prependTo(value)\n {\n Dom.find(value).each((el) => {\n if ( el.prepend != null ) el.prepend(this.el);\n });\n\n return this;\n }\n\n /**\n * Append value to element\n *\n * @example Dom.find(\"div\").append(\"<span></span>\")\n *\n * @param {any} value Append value\n * @returns {PicoDom} Current instance\n */\n append(value)\n {\n this.each((el) => {\n if ( el.append != null ) el.append(value);\n });\n\n return this;\n }\n\n /**\n * Append element to value\n *\n * @example Dom.find(\"span\").appendTo(\"div\")\n *\n * @param {any} value Target element\n * @returns {PicoDom} Current instance\n */\n appendTo(value)\n {\n Dom.find(value).each((el) => {\n if ( el.append != null ) el.append(this.el);\n });\n\n return this;\n }\n\n /**\n * Replace element with value\n *\n * @example Dom.find(\"div\").replace(\"<span></span>\")\n *\n * @param {any} value Replacement value\n * @returns {PicoDom} Current instance\n */\n replace(value)\n {\n this.parent().each(el, (el) => {\n (el.insertBefore(value, el), el.removeChild(el));\n });\n\n return this;\n }\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomBuilderPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomBuilderStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomBuilderInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomBuilderInstance.constructor);\n\n return self;\n}","import { Run, Mix, Obj, Dom, Hash } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomGlobalStatic\n{\n /**\n * Get document ready state\n *\n * @example Dom.getDomState() // => \"complete\"\n *\n * @returns {string} State string\n */\n static getDomState()\n {\n return document.readyState;\n }\n\n /**\n * Check if DOM is ready\n *\n * @example Dom.isDomReady() // => true\n *\n * @returns {boolean} True if ready\n */\n static isDomReady()\n {\n return Dom.getDomState() === 'complete';\n }\n\n /**\n * Check if DOM is complete\n *\n * @example Dom.isDomComplete() // => true\n *\n * @returns {boolean} True if complete\n */\n static isDomComplete()\n {\n let state = Dom.getDomState();\n\n if ( state === 'complete' ) {\n return true;\n }\n\n return state === 'interactive';\n }\n\n /**\n * Run callback when ready\n *\n * @example Dom.ready(cb)\n *\n * @param {function} cb Callback fn\n * @param {number} [delay] Execution delay\n * @param {number} [limit] Wait limit\n * @returns {PicoDom} Static class\n */\n static ready(cb, delay = 0, limit = 6000)\n {\n let [id, el, event] = [\n Hash.make(), Dom.find(document), 'DOMContentLoaded'\n ];\n\n let fn = () => {\n (Run.delay(cb, delay), el.off(event, null, { id }));\n };\n\n let ready = Dom.isDomReady;\n\n if ( ! ready() ) {\n return (el.on(event, fn, { id }), this);\n }\n\n Run.wait(() => {\n if ( ready() ) return (fn(), true);\n }, 10, limit);\n\n return this;\n }\n\n /**\n * Run callback when complete\n *\n * @example Dom.complete(cb)\n *\n * @param {function} cb Callback fn\n * @param {number} [delay] Execution delay\n * @param {number} [limit] Wait limit\n * @returns {PicoDom} Static class\n */\n static complete(cb, delay = 0, limit = 6000)\n {\n let fn = () => {\n Run.delay(cb, delay);\n };\n\n let [el, event] = [\n Dom.find(document), 'load'\n ];\n\n let ready = Dom.isDomComplete;\n\n if ( ! ready() ) {\n return (el.on(event, fn), this);\n }\n\n Run.wait(() => {\n if ( ready() ) return (fn(), true);\n }, 10, limit);\n\n return this;\n }\n\n}\n\nPicoDomGlobalStatic.required = () => {\n console.error('Dom.required() is not implemented anymore.');\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomGlobalInstance\n{\n /**\n * Check if node is complete\n *\n * @example Dom.find(\"img\").isNodeComplete() // => true\n *\n * @returns {boolean} True if complete\n */\n isNodeComplete()\n {\n if ( this.el == null ) {\n return false;\n }\n\n if ( this.el.naturalWidth ) {\n return true;\n }\n\n if ( this.el.naturalHeight ) {\n return true;\n }\n\n return !! this.el.complete;\n }\n\n /**\n * Run callback when loaded\n *\n * @example Dom.find(\"img\").loaded(cb)\n *\n * @param {function} cb Callback fn\n * @param {number} [limit] Wait limit\n * @returns {PicoDom} Current instance\n */\n loaded(cb, limit = 6000)\n {\n if ( ! this.el ) {\n return this;\n }\n\n let ready = this.isNodeComplete;\n\n Run.wait(() => {\n if ( ready.call(this) ) return (cb(), true);\n }, 10, limit);\n\n return this;\n }\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomGlobalPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomGlobalStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomGlobalInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomGlobalInstance.constructor);\n\n return self;\n}","import { Arr, Dom, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomRectangleStatic\n{\n /**\n * Cast value to number\n *\n * @example Dom.num(\"10px\") // => 10\n *\n * @param {any} value Input value\n * @returns {number} Number value\n */\n static num(value)\n {\n if ( typeof value === 'string' ) {\n value = value.replace(/(^\\s+|\\s$|px)/g, '');\n }\n\n return Mix.num(value, 0);\n }\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomRectangleInstance\n{\n /**\n * Get margin values\n *\n * @example Dom.find(\"div\").margin()\n *\n * @param {string} [key] Margin key\n * @param {number} [fallback] Fallback value\n * @returns {any} Margin values\n */\n margin(key = null, fallback = 0)\n {\n let computed = this.computed();\n\n let result = {\n top: Dom.num(computed.marginTop),\n right: Dom.num(computed.marginRight),\n bottom: Dom.num(computed.marginBottom),\n left: Dom.num(computed.marginLeft)\n };\n\n if ( key == null ) {\n return result;\n }\n\n return Obj.get(result, key, fallback);\n }\n\n /**\n * Get padding values\n *\n * @example Dom.find(\"div\").padding()\n *\n * @param {string} [key] Padding key\n * @param {number} [fallback] Fallback value\n * @returns {any} Padding values\n */\n padding(key = null, fallback = 0)\n {\n let computed = this.computed();\n\n let result = {\n top: Dom.num(computed.paddingTop),\n right: Dom.num(computed.paddingRight),\n bottom: Dom.num(computed.paddingBottom),\n left: Dom.num(computed.paddingLeft)\n };\n\n if ( key == null ) {\n return result;\n }\n\n return Obj.get(result, key, fallback);\n }\n\n /**\n * Get element height\n *\n * @example Dom.find(\"div\").height() // => 100\n *\n * @returns {number} Height value\n */\n height()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerHeight;\n }\n\n return this.el.offsetHeight;\n }\n\n /**\n * Get client height\n *\n * @example Dom.find(\"div\").clientHeight()\n *\n * @returns {number} Height value\n */\n clientHeight()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return Dom.num(this.computed('height', 0));\n }\n\n /**\n * Get scroll height\n *\n * @example Dom.find(\"div\").scrollHeight()\n *\n * @returns {number} Height value\n */\n scrollHeight()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return this.el.scrollHeight;\n }\n\n /**\n * Get inner height\n *\n * @example Dom.find(\"div\").innerHeight()\n *\n * @returns {number} Height value\n */\n innerHeight()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerHeight;\n }\n\n let pad = this.padding();\n\n return this.el.offsetHeight - pad.top - pad.bottom;\n }\n\n /**\n * Get real height\n *\n * @example Dom.find(\"div\").realHeight({ display: \"block\" })\n *\n * @param {any} [style] Temp style\n * @returns {number} Height value\n */\n realHeight(style = {})\n {\n let height = 'auto';\n\n this.actual(() => {\n return height = this.height();\n }, style);\n\n return height;\n }\n\n /**\n * Evaluate target height\n *\n * @example Dom.find(\"div\").evaluateHeight(\".container\")\n *\n * @param {any} [target] Target element\n * @param {boolean} [apply] Apply style\n * @returns {number} Height value\n */\n evaluateHeight(target = null, apply = true)\n {\n target = Dom.find(target);\n\n if ( target === null ) {\n target = this.parent();\n }\n\n let height = 'auto';\n\n this.actual(() => {\n height = target.innerHeight();\n }, { display: 'none' });\n\n if ( apply === true ) {\n this.style({ height: height + 'px' });\n }\n\n return height;\n }\n\n /**\n * Get element width\n *\n * @example Dom.find(\"div\").width() // => 100\n *\n * @returns {number} Width value\n */\n width()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerWidth;\n }\n\n return this.el.offsetWidth;\n }\n\n /**\n * Get client width\n *\n * @example Dom.find(\"div\").clientWidth()\n *\n * @returns {number} Width value\n */\n clientWidth()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return Dom.num(this.computed('width', 0));\n }\n\n /**\n * Get scroll width\n *\n * @example Dom.find(\"div\").scrollWidth()\n *\n * @returns {number} Width value\n */\n scrollWidth()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return this.el.scrollWidth;\n }\n\n /**\n * Get inner width\n *\n * @example Dom.find(\"div\").innerWidth()\n *\n * @returns {number} Width value\n */\n innerWidth()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerWidth;\n }\n\n let pad = this.padding();\n\n return this.el.offsetWidth - pad.left - pad.right;\n }\n\n /**\n * Get real width\n *\n * @example Dom.find(\"div\").realWidth({ display: \"block\" })\n *\n * @param {any} [style] Temp style\n * @returns {number} Width value\n */\n realWidth(style = {})\n {\n let width = 'auto';\n\n this.actual(() => {\n return width = this.width();\n }, style);\n\n return width;\n }\n\n /**\n * Evaluate target width\n *\n * @example Dom.find(\"div\").evaluateWidth(\".container\")\n *\n * @param {any} [target] Target element\n * @param {boolean} [apply] Apply style\n * @returns {number} Width value\n */\n evaluateWidth(target = null, apply = true)\n {\n target = Dom.find(target);\n\n if ( target === null ) {\n target = this.parent();\n }\n\n let width = 'auto';\n\n this.actual(() => {\n width = target.innerWidth();\n }, { display: 'none' });\n\n if ( apply === true ) {\n this.style({ width: width + 'px' });\n }\n\n return width;\n }\n\n /**\n * Get element offset\n *\n * @example Dom.find(\"div\").offset()\n *\n * @param {string} [key] Offset key\n * @param {any} [boundry] View boundry\n * @returns {any} Offset values\n */\n offset(key = null, boundry = null)\n {\n let offset = this.getOffset(boundry);\n\n if ( key == null ) {\n return offset;\n }\n\n return Obj.get(offset, key, 0);\n }\n\n /**\n * Get top offset\n *\n * @example Dom.find(\"div\").offsetTop()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Top offset\n */\n offsetTop(boundry = null)\n {\n return this.offset('top', boundry);\n }\n\n /**\n * Get bottom offset\n *\n * @example Dom.find(\"div\").offsetBottom()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Bottom offset\n */\n offsetBottom(boundry = null)\n {\n return this.offset('bottom', boundry);\n }\n\n /**\n * Get left offset\n *\n * @example Dom.find(\"div\").offsetLeft()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Left offset\n */\n offsetLeft(boundry = null)\n {\n return this.offset('left', boundry);\n }\n\n /**\n * Get right offset\n *\n * @example Dom.find(\"div\").offsetRight()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Right offset\n */\n offsetRight(boundry = null)\n {\n return this.offset('right', boundry);\n }\n\n /**\n * Loop through offset parents\n *\n * @example Dom.find(\"div\").loopOffset((el) => console.log(el))\n *\n * @param {function} cb Callback fn\n * @param {any} [boundry] Loop limit\n * @returns {PicoDom} Current instance\n */\n loopOffset(cb, boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.body();\n }\n\n for ( let el = this.el; el && el !== boundry; el = el.offsetParent ) {\n cb.call({}, el);\n }\n\n return this;\n }\n\n /**\n * Calculate relative offset\n *\n * @example Dom.calcOffset(offset, 100, 100)\n *\n * @param {any} offset Base offset\n * @param {number} width Element width\n * @param {number} height Element height\n * @returns {any} Calculated offset\n */\n calcOffset(offset, width, height)\n {\n let size = {\n right: Dom.body().scrollWidth - offset.left - width,\n bottom: Dom.body().scrollHeight - offset.top - height,\n };\n\n return { ...offset, ...size };\n }\n\n /**\n * Get relative offset\n *\n * @example Dom.find(\"div\").getOffset()\n *\n * @param {any} [boundry] View boundry\n * @returns {any} Offset values\n */\n getOffset(boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.body();\n }\n\n let cb, source = {\n top: 0, left: 0, bottom: 0, right: 0\n };\n\n if ( this.el == null ) {\n return source;\n }\n\n cb = (el) => {\n source.top += Dom.num(el.offsetTop, 0);\n source.left += Dom.num(el.offsetLeft, 0);\n };\n\n this.loopOffset(cb);\n\n source = this.calcOffset(...[\n source, this.width(), this.height()\n ]);\n\n let body = Dom.find(boundry);\n\n let target = {\n top: 0, left: 0, bottom: 0, right: 0\n };\n\n cb = (el) => {\n target.top += Dom.num(el.offsetTop, 0);\n target.left += Dom.num(el.offsetLeft, 0);\n };\n\n body.loopOffset(cb);\n\n target = this.calcOffset(...[\n target, body.scrollWidth(), body.scrollHeight()\n ]);\n\n return {\n top: source.top - target.top,\n bottom: source.bottom - target.bottom,\n left: source.left - target.left,\n right: source.right - target.right\n };\n }\n\n /**\n * Get element scroll\n *\n * @example Dom.find(\"div\").scroll()\n *\n * @param {any} [key] Scroll key\n * @param {any} [boundry] View boundry\n * @returns {any} Scroll values\n */\n scroll(key = null, boundry = null)\n {\n let scroll = this.getScroll(boundry);\n\n if ( key == null ) {\n return scroll;\n }\n\n return Obj.get(scroll, key, 0);\n }\n\n /**\n * Get or set scroll top\n *\n * @example Dom.find(\"div\").scrollTop(100)\n *\n * @param {any} [value] Scroll value\n * @param {any} [boundry] View boundry\n * @returns {number|PicoDom} Value or instance\n */\n scrollTop(value = null, boundry = null)\n {\n if ( value == null ) {\n return this.scroll('top', boundry);\n }\n\n this.each((el) => {\n el.scrollTop = value;\n });\n\n return this;\n }\n\n /**\n * Get or set scroll left\n *\n * @example Dom.find(\"div\").scrollLeft(100)\n *\n * @param {any} [value] Scroll value\n * @param {any} [boundry] View boundry\n * @returns {number|PicoDom} Value or instance\n */\n scrollLeft(value = null, boundry = null)\n {\n if ( value == null ) {\n return this.scroll('left', boundry);\n }\n\n this.each((el) => {\n el.scrollLeft = value;\n });\n\n return this.scroll('left', boundry);\n }\n\n /**\n * Get relative scroll\n *\n * @example Dom.find(\"div\").getScroll()\n *\n * @param {any} [boundry] View boundry\n * @returns {any} Scroll values\n */\n getScroll(boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.win();\n }\n\n let cb, source = {\n top: 0, left: 0\n };\n\n if ( this.el == null ) {\n return source;\n }\n\n cb = (el) => {\n source.top += Dom.num(el.scrollTop || el.pageYOffset || 0);\n source.left += Dom.num(el.scrollLeft || el.pageXOffset || 0);\n }\n\n this.loopParent(cb);\n\n let target = {\n top: 0, left: 0\n };\n\n cb = (el) => {\n target.top += Dom.num(el.scrollTop || el.pageYOffset || 0);\n target.left += Dom.num(el.scrollLeft || el.pageXOffset || 0);\n };\n\n Dom.find(boundry).loopParent(cb);\n\n return {\n top: source.top - target.top,\n left: source.left - target.left\n };\n }\n\n}\n\n/**\n * @see PicoDom.loopOffsetParent\n */\nPicoDomRectangleInstance.prototype.loopOffsetParent = function (...args) {\n console.warn('Dom.loopOffsetParent() is deprecated, use Dom.loopOffset() instead.');\n return this.loopOffset(...args);\n};\n\n/**\n * @see PicoDom.scrollTopGlobal\n */\nPicoDomRectangleInstance.prototype.scrollTopGlobal = function () {\n console.warn('Dom.scrollTopGlobal() is deprecated, use Dom.scroll(\\'top\\') instead.');\n return this.scroll('top', null);\n};\n\n/**\n * @see PicoDom.scrollLeftGlobal\n */\nPicoDomRectangleInstance.prototype.scrollLeftGlobal = function () {\n console.warn('Dom.scrollLeftGlobal() is deprecated, use Dom.scroll(\\'left\\') instead.');\n return this.scroll('left', null);\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomRectanglePlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomRectangleStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomRectangleInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomRectangleInstance.constructor);\n\n return self;\n}","import { Arr, Dom, For, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomAttributeStatic\n{\n //\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomAttributeInstance\n{\n /**\n * Get or set attribute\n *\n * @example Dom.find(\"div\").attr(\"id\")\n *\n * @param {string} key Attr key\n * @param {any} [value] Attr value\n * @param {any} [fallback] Fallback value\n * @returns {any|PicoDom} Attr value or instance\n */\n attr(key, value = undefined, fallback = null)\n {\n if ( this.el == null ) {\n return value ? this : fallback;\n }\n\n let attr = this.el.getAttribute(key);\n\n if ( Mix.isUndef(value) ) {\n return attr || fallback;\n }\n\n if ( value === null ) {\n return (this.el.removeAttribute(key), attr);\n }\n\n if ( Mix.isArr(value) ) {\n value = value.join(' ');\n }\n\n if ( Mix.isObj(value) ) {\n value = For.castOptions(value);\n }\n\n this.el.setAttribute(key, value);\n\n return this;\n }\n\n /**\n * Get or set data attribute\n *\n * @example Dom.find(\"div\").data(\"id\")\n *\n * @param {string} key Data key\n * @param {any} [value] Data value\n * @param {any} [fallback] Fallback value\n * @returns {any|PicoDom} Data value or instance\n */\n data(key, value = undefined, fallback = null)\n {\n return this.attr('data-' + key, value, fallback);\n }\n\n /**\n * Get computed style\n *\n * @example Dom.find(\"div\").computed(\"width\")\n *\n * @param {any} [key] Style key\n * @param {any} [fallback] Fallback value\n * @returns {any} Computed style\n */\n computed(key = null, fallback = null)\n {\n if ( this.el == null ) {\n return fallback;\n }\n\n if ( this.getNodeType() !== 1 ) {\n return fallback;\n }\n\n let computed = getComputedStyle(this.el);\n\n if ( key == null ) {\n return computed;\n }\n\n return Obj.get(computed, key, fallback);\n }\n\n /**\n * Get or set style\n *\n * @example Dom.find(\"div\").style({ color: \"red\" })\n *\n * @param {any} [value] Style value\n * @param {boolean} [combine] Combine style\n * @returns {any|PicoDom} Style or instance\n */\n style(value = undefined, combine = true)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( value === null ) {\n return this.attr('style', null);\n }\n\n let styles = this.attr('style', undefined, {});\n\n if ( Mix.isStr(styles) ) {\n styles = For.parseOptions(styles);\n }\n\n if ( Mix.isUndef(value) ) {\n return styles;\n }\n\n if ( combine ) {\n value = { ...styles, ...value };\n }\n\n this.attr('style', value);\n\n return this;\n }\n\n /**\n * Get or set classes\n *\n * @example Dom.find(\"div\").class([\"active\"])\n *\n * @param {any} [value] Class value\n * @param {boolean} [combine] Combine classes\n * @returns {any|PicoDom} Classes or instance\n */\n class(value = undefined, combine = false)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( value === null ) {\n return this.attr('class', '');\n }\n\n let classes = this.attr('class', undefined, []);\n\n if ( Mix.isStr(classes) ) {\n classes = classes.split(' ');\n }\n\n if ( Mix.isUndef(value) ) {\n return classes;\n }\n\n if ( combine ) {\n value = [...classes, ...value];\n }\n\n this.attr('class', value);\n\n return this;\n }\n\n /**\n * Get or set inner HTML\n *\n * @example Dom.find(\"div\").html(\"<span></span>\")\n *\n * @param {any} [html] HTML content\n * @returns {string|PicoDom} HTML or instance\n */\n html(html = undefined)\n {\n if ( html === undefined ) {\n return this.el.innerHTML;\n }\n\n this.each((el) => {\n el.innerHTML = html;\n });\n\n return this;\n }\n\n /**\n * Get actual style value\n *\n * @example Dom.find(\"div\").actual((el) => el.offsetWidth, { display: \"block\" })\n *\n * @param {function} cb Callback fn\n * @param {any} [style] Temp style\n * @returns {any} Callback result\n */\n actual(cb, style = null)\n {\n let backup = this.attr('style');\n\n this.style(style);\n\n let result = cb(this.el, this.el);\n\n this.attr('style', backup);\n\n return result;\n }\n\n /**\n * Check if has class\n *\n * @example Dom.find(\"div\").hasClass(\"active\") // => true\n *\n * @param {any} cls Class name\n * @returns {boolean} True if has class\n */\n hasClass(cls)\n {\n if ( ! Mix.isArr(cls) ) {\n cls = [cls];\n }\n\n return Arr.isect(this.class(), cls).length > 0;\n }\n\n /**\n * Add class to element\n *\n * @example Dom.find(\"div\").addClass(\"active\")\n *\n * @param {any} cls Class name\n * @returns {PicoDom} Current instance\n */\n addClass(cls)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).addClass(cls));\n }\n\n let result = this.el.className.split(' ');\n\n if ( Mix.isStr(cls) ) {\n cls = cls.split(' ');\n }\n\n result = Arr.append(result, ...cls);\n\n this.el.className = Arr.unique(result).join(' ');\n\n return this;\n }\n\n /**\n * Remove class from element\n *\n * @example Dom.find(\"div\").remClass(\"active\")\n *\n * @param {any} cls Class name\n * @returns {PicoDom} Current instance\n */\n remClass(cls)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).remClass(cls));\n }\n\n let result = this.el.className.split(' ');\n\n if ( Mix.isStr(cls) ) {\n cls = cls.split(' ');\n }\n\n result = Arr.diff(result, cls);\n\n this.el.className = Arr.unique(result).join(' ');\n\n return this;\n }\n\n /**\n * Toggle class on element\n *\n * @example Dom.find(\"div\").toggleClass(\"active\")\n *\n * @param {any} cls Class name\n * @returns {PicoDom} Current instance\n */\n toggleClass(cls)\n {\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).toggleClass(cls));\n }\n\n if ( this.hasClass(cls) ) {\n return this.remClass(cls);\n }\n\n return this.addClass(cls);\n }\n\n /**\n * Set class by state\n *\n * @example Dom.find(\"div\").stateClass(\"active\", true)\n *\n * @param {any} cls Class name\n * @param {boolean} [state] Target state\n * @returns {PicoDom} Current instance\n */\n stateClass(cls, state = true)\n {\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).stateClass(cls));\n }\n\n if ( ! state ) {\n return this.remClass(cls);\n }\n\n return this.addClass(cls);\n }\n\n}\n\n/**\n * @see PicoDom.style\n */\nPicoDomAttributeInstance.prototype.css = function (...args) {\n console.warn('Dom.css() is deprecated, use Dom.style() instead.');\n return this.style(...args);\n};\n\n/**\n * @see PicoDom.remClass\n */\nPicoDomAttributeInstance.prototype.removeClass = function (...args) {\n console.warn('Dom.removeClass() is deprecated, use Dom.remClass() instead.');\n return this.remClass(...args);\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomAttributePlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomAttributeStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomAttributeInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomAttributeInstance.constructor);\n\n return self;\n}","import { Arr, Dom, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomInviewStatic\n{\n\n /**\n * Get first inview element Y\n *\n * @example Dom.inviewMaxY(\".item\")\n *\n * @param {any} options Find options\n * @param {function} [cb] Success callback\n * @returns {any} Found element\n */\n static inviewMaxY(options, cb = null)\n {\n let defaults = {\n boundry: null, multiple: false, threshold: 0, mode: 'ratio'\n };\n\n if ( Mix.isString(options) ) {\n options = { el: options };\n }\n\n options = {\n ...defaults, ...options\n };\n\n if ( ! options.el ) {\n throw new Error('Dom.inviewY() requires an element.');\n }\n\n let args = [\n options.threshold, options.mode, options.boundry\n ];\n\n let fn = (el) => {\n return Dom.find(el).isInviewY(...args);\n };\n\n let els = [];\n\n Dom.find(options.el).each((el) => {\n if ( fn(el) ) (cb ? cb(el) : null, els.push(el));\n });\n\n if ( options.multiple ) {\n return els;\n }\n\n return Arr.first(els);\n }\n\n /**\n * Get first inview element X\n *\n * @example Dom.inviewMaxX(\".item\")\n *\n * @param {any} options Find options\n * @param {function} [cb] Success callback\n * @returns {any} Found element\n */\n static inviewMaxX(options, cb = null)\n {\n let defaults = {\n boundry: null, multiple: false, threshold: 0, mode: 'ratio'\n };\n\n if ( Mix.isString(options) ) {\n options = { el: options };\n }\n\n options = {\n ...defaults, ...options\n };\n\n if ( ! options.el ) {\n throw new Error('Dom.inviewX() requires an element.');\n }\n\n let args = [\n options.threshold, options.mode, options.boundry\n ];\n\n let fn = (el) => {\n return Dom.find(el).isInviewX(...args);\n };\n\n let els = [];\n\n Dom.find(options.el).each((el) => {\n if ( fn(el) ) (cb ? cb(el) : null, els.push(el));\n });\n\n if ( options.multiple ) {\n return els;\n }\n\n return Arr.first(els);\n }\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomInviewInstance\n{\n /**\n * Get X view offset\n *\n * @example Dom.find(\"div\").viewoffX()\n *\n * @returns {any} Offset object\n */\n viewoffX()\n {\n if ( this.el == null ) {\n return { top: 0, bot: 0 };\n }\n\n let [viewport, width] = [\n Dom.win().innerWidth, this.width()\n ];\n\n let [offset, scroll] = [\n this.offset('left'), this.parent().scroll('left')\n ];\n\n let left = Math.max(...[\n 0, offset - scroll\n ]);\n\n let right = Math.max(...[\n 0, viewport - (offset + width - scroll)\n ]);\n\n return { left, right };\n }\n\n /**\n * Get X inview pixels\n *\n * @example Dom.find(\"div\").inviewX()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview pixels\n */\n inviewX(boundry = null)\n {\n let { left, right } = Dom.find(boundry).viewoffY();\n\n let [viewport, height] = [\n Dom.win().innerHeight - right - left, this.height()\n ];\n\n let [offset, scroll] = [\n this.offset('left') + left, this.scroll('left') + left\n ];\n\n let inview = Math.max(0, scroll + viewport - offset + left);\n\n if ( inview > height ) {\n inview = Math.min(height, viewport + height - inview);\n }\n\n return Math.max(0, inview);\n }\n\n /**\n * Get X inview ratio\n *\n * @example Dom.find(\"div\").inratioX()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview ratio\n */\n inratioX(boundry = null)\n {\n return 1 / this.width() * this.inviewX(boundry);\n }\n\n /**\n * Check if is inview X\n *\n * @example Dom.find(\"div\").isInviewX(0.5)\n *\n * @param {number} [threshold] View threshold\n * @param {string} [mode] View mode\n * @param {any} [boundry] View boundry\n * @returns {boolean} True if inview\n */\n isInviewX(threshold = 0.1, mode = 'ratio', boundry = null)\n {\n if ( mode === 'pixel' ) {\n return this.inviewX(boundry) > threshold;\n }\n\n return this.inratioX(boundry) > threshold;\n }\n\n /**\n * Get Y view offset\n *\n * @example Dom.find(\"div\").viewoffY()\n *\n * @returns {any} Offset object\n */\n viewoffY()\n {\n if ( this.el == null ) {\n return { top: 0, bottom: 0 };\n }\n\n let [viewport, height] = [\n Dom.win().innerHeight, this.height()\n ];\n\n let [offset, scroll] = [\n this.offset('top'), this.parent().scroll('top')\n ];\n\n let top = Math.max(...[\n 0, offset - scroll\n ]);\n\n let bottom = Math.max(...[\n 0, viewport - (offset + height - scroll)\n ]);\n\n return { top, bottom };\n }\n\n /**\n * Get Y inview pixels\n *\n * @example Dom.find(\"div\").inviewY()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview pixels\n */\n inviewY(boundry = null)\n {\n let { top, bottom } = Dom.find(boundry).viewoffY();\n\n let [viewport, height] = [\n Dom.win().innerHeight - bottom - top, this.height()\n ];\n\n let [offset, scroll] = [\n this.offset('top') + top, this.scroll('top') + top\n ];\n\n let inview = Math.max(0, scroll + viewport - offset + top);\n\n if ( inview > height ) {\n inview = Math.min(height, viewport + height - inview);\n }\n\n return Math.min(Math.max(0, inview), viewport);\n }\n\n /**\n * Get Y inview ratio\n *\n * @example Dom.find(\"div\").inratioY()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview ratio\n */\n inratioY(boundry = null)\n {\n return 1 / this.height() * this.inviewY(boundry);\n }\n\n /**\n * Check if is inview Y\n *\n * @example Dom.find(\"div\").isInviewY(0.5)\n *\n * @param {number} [threshold] View threshold\n * @param {string} [mode] View mode\n * @param {any} [boundry] View boundry\n * @returns {boolean} True if inview\n */\n isInviewY(threshold = 0.1, mode = 'ratio', boundry = null)\n {\n if ( mode === 'pixel' ) {\n return this.inviewY(boundry) > threshold;\n }\n\n return this.inratioY(boundry) > threshold;\n }\n}\n\n/**\n * @see PicoDom.inviewY\n */\nPicoDomInviewInstance.prototype.inviewHeight = function (...args) {\n console.warn('Dom.inviewHeight() is deprecated, use Dom.inviewY() instead.');\n return this.inviewY(...args);\n}\n\n/**\n * @see PicoDom.inviewX\n */\nPicoDomInviewInstance.prototype.inviewWidth = function (...args) {\n console.warn('Dom.inviewWidth() is deprecated, use Dom.inviewX() instead.');\n return this.inviewX(...args);\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomInviewPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomInviewStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomInviewInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomInviewInstance.constructor);\n\n return self;\n}","import { Arr, Mix, Obj, Dom, Locale } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomMetaStatic\n{\n static $meta = {};\n\n /**\n * Set document title\n *\n * @example Dom.setMetaTitle(\"Home\")\n *\n * @param {string} value New title\n * @param {string} [glue] Title glue\n * @returns {PicoDom} Static class\n */\n static setMetaTitle(value, glue = ':value - :title')\n {\n if ( ! this.$meta.title ) {\n this.$meta.title = Dom.doc().title;\n }\n\n document.title = Locale.replace(glue, {\n value, title: this.$meta.title\n });\n\n return this;\n }\n}\n\n/**\n * @see PicoDom.setMetaTitle\n */\nPicoDomMetaStatic.title = (value) => {\n console.warn('Dom.title() is deprecated, use Dom.setMetaTitle() instead.');\n return Dom.setMetaTitle(value);\n};\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomMetaInstance\n{\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomMetaPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomMetaStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomMetaInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomMetaInstance.constructor);\n\n return self;\n}","import { Arr, Mix, Obj, Dom } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomObserverStatic\n{\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomObserverInstance\n{\n\n /**\n * Get or set element value\n *\n * @example Dom.find(\"input\").value(\"hello\")\n *\n * @param {any} [value] New value\n * @returns {any|PicoDom} Value or instance\n */\n value(value = undefined)\n {\n if ( value === undefined ) {\n return this.el.value;\n }\n\n this.each((el) => {\n el.value = value;\n });\n\n return this;\n }\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomObserverPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomObserverStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomObserverInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomObserverInstance.constructor);\n\n return self;\n}","import { Arr, Mix, Dom } from \"../index.esm.js\";\nimport { PicoDomFinderPlugin } from \"../dom/DomFinder.js\";\nimport { PicoDomFormPlugin } from \"../dom/DomForm.js\";\nimport { PicoDomEventPlugin } from \"../dom/DomEvent.js\";\nimport { PicoDomBuilderPlugin } from \"../dom/DomBuilder.js\";\nimport { PicoDomGlobalPlugin } from \"../dom/DomGlobal.js\";\nimport { PicoDomRectanglePlugin } from \"../dom/DomRectangle.js\";\nimport { PicoDomAttributePlugin } from \"../dom/DomAttribute.js\";\nimport { PicoDomInviewPlugin } from \"../dom/DomInview.js\";\nimport { PicoDomMetaPlugin } from \"../dom/DomMeta.js\";\nimport { PicoDomObserverPlugin } from \"../dom/DomObserver.js\";\n\nexport const PicoDomPlugins = [\n PicoDomFinderPlugin,\n PicoDomGlobalPlugin,\n PicoDomFormPlugin,\n PicoDomEventPlugin,\n PicoDomBuilderPlugin,\n PicoDomRectanglePlugin,\n PicoDomAttributePlugin,\n PicoDomInviewPlugin,\n PicoDomMetaPlugin,\n PicoDomObserverPlugin,\n];\n\n/**\n * @class PicoDom\n *\n * @typedef {import('../dom/DomFinder.js').PicoDomFinderInstance} PicoDomFinderInstance\n * @typedef {import('../dom/DomGlobal.js').PicoDomGlobalStatic} PicoDomGlobalStatic\n * @typedef {import('../dom/DomGlobal.js').PicoDomGlobalInstance} PicoDomGlobalInstance\n * @typedef {import('../dom/DomEvent.js').PicoDomEventStatic} PicoDomEventStatic\n * @typedef {import('../dom/DomEvent.js').PicoDomEventInstance} PicoDomEventInstance\n * @typedef {import('../dom/DomBuilder.js').PicoDomBuilderStatic} PicoDomBuilderStatic\n * @typedef {import('../dom/DomBuilder.js').PicoDomBuilderInstance} PicoDomBuilderInstance\n * @typedef {import('../dom/DomRectangle.js').PicoDomRectangleStatic} PicoDomRectangleStatic\n * @typedef {import('../dom/DomRectangle.js').PicoDomRectangleInstance} PicoDomRectangleInstance\n * @typedef {import('../dom/DomAttribute.js').PicoDomAttributeStatic} PicoDomAttributeStatic\n * @typedef {import('../dom/DomAttribute.js').PicoDomAttributeInstance} PicoDomAttributeInstance\n * @typedef {import('../dom/DomInview.js').PicoDomInviewStatic} PicoDomInviewStatic\n * @typedef {import('../dom/DomInview.js').PicoDomInviewInstance} PicoDomInviewInstance\n * @typedef {import('../dom/DomMeta.js').PicoDomMetaStatic} PicoDomMetaStatic\n * @typedef {import('../dom/DomMeta.js').PicoDomMetaInstance} PicoDomMetaInstance\n * @typedef {import('../dom/DomObserver.js').PicoDomObserverStatic} PicoDomObserverStatic\n * @typedef {import('../dom/DomObserver.js').PicoDomObserverInstance} PicoDomObserverInstance\n *\n * @mixes PicoDomFinderStatic\n * @mixes PicoDomGlobalStatic\n * @mixes PicoDomFormStatic\n * @mixes PicoDomEventStatic\n * @mixes PicoDomBuilderStatic\n * @mixes PicoDomRectangleStatic\n * @mixes PicoDomAttributeStatic\n * @mixes PicoDomInviewStatic\n * @mixes PicoDomMetaStatic\n * @mixes PicoDomObserverStatic\n *\n * @extends PicoDomFinderInstance\n * @extends PicoDomGlobalInstance\n * @extends PicoDomFormInstance\n * @extends PicoDomEventInstance\n * @extends PicoDomBuilderInstance\n * @extends PicoDomRectangleInstance\n * @extends PicoDomAttributeInstance\n * @extends PicoDomInviewInstance\n * @extends PicoDomMetaInstance\n * @extends PicoDomObserverInstance\n */\nexport class PicoDom {\n\n /**\n * Init hooks for constructor\n *\n * @type {Array<function>}\n */\n static init = [];\n\n /**\n * First selected element\n *\n * @type {HTMLElement}\n */\n el = null;\n\n /**\n * All selected elements\n *\n * @type {Array<HTMLElement>}\n */\n els = [];\n\n /**\n * Create Dom wrapper from input\n *\n * @example new Dom(\"body\").get(0) // => HTMLElement\n *\n * @param {any} el Element or selector\n * @param {...any} args Plugin args\n */\n constructor(el, ...args)\n {\n Arr.each(Dom.init, (fn) => {\n el = fn.call(this, el, ...args);\n });\n\n if ( el instanceof Dom ) {\n el = el.el;\n }\n\n if ( ! Mix.isArr(el) ) {\n el = [el];\n }\n\n (this.el = el[0], this.els = el);\n }\n\n /**\n * Create new Dom wrapper\n *\n * @example Dom.find(\"body\") // => Dom\n *\n * @param {any} el Element or selector\n * @param {...any} args Plugin args\n * @returns {PicoDom} Dom wrapper\n */\n static find(el, ...args)\n {\n return new Dom(el, ...args);\n }\n\n /**\n * Extend Dom with a plugin\n *\n * @example Dom.extend(fn)\n *\n * @param {function} plugin Plugin function\n * @returns {void} No return value\n */\n static extend(plugin)\n {\n plugin.call({}, this);\n }\n\n /**\n * Get window or empty object\n *\n * @example Dom.win().innerWidth // => number|undefined\n *\n * @returns {any} Window or {}\n */\n static win()\n {\n if ( globalThis.window == null ) {\n return {};\n }\n\n return window;\n }\n\n /**\n * Get document or empty object\n *\n * @example Dom.doc().body // => HTMLElement|undefined\n *\n * @returns {any} Document or {}\n */\n static doc()\n {\n if ( globalThis.document == null ) {\n return {};\n }\n\n return document;\n }\n\n /**\n * Get document.body or empty\n *\n * @example Dom.body().nodeType // => 1|undefined\n *\n * @returns {any} Body or {}\n */\n static body()\n {\n if ( ! this.doc().body ) {\n return {};\n }\n\n return this.doc().body;\n }\n\n}\n\n/**\n * @returns {typeof PicoDom}\n */\nexport function PicoDomBuilder() {\n\n let cls = PicoDom;\n\n for ( const plugin of PicoDomPlugins ) {\n cls = plugin.call(cls, cls);\n }\n\n return cls;\n}\n\nexport default PicoDomBuilder;","import { Arr, Mix, Now, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\nexport const NOW_MODIFY = {\n 'second': /([+-])([0-9]+)\\s?seconds?/i,\n 'minute': /([+-])([0-9]+)\\s?minutes?/i,\n 'hour': /([+-])([0-9]+)\\s?hours?/i,\n 'date': /([+-])([0-9]+)\\s?days?/i,\n 'month': /([+-])([0-9]+)\\s?months?/i,\n 'year': /([+-])([0-9]+)\\s?years?/i\n};\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowDefaultInstance\n{\n\n /**\n * Get value by scope\n *\n * @example Now.get(\"year\") // => 2026\n *\n * @param {string} scope Value scope\n * @returns {number|PicoNow} Scope value\n */\n get(scope)\n {\n if ( scope === 'time' ) {\n return this.value.getTime();\n }\n\n if ( /^seconds?$/i.test(scope) ) {\n return this.value.getSeconds();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.value.getMinutes();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.value.getHours();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.value.getDay();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.value.getDate();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.value.getMonth() + 1;\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.value.getFullYear();\n }\n\n return this;\n }\n\n /**\n * Set value by scope\n *\n * @example Now.set(2026, \"year\")\n *\n * @param {any} value New value\n * @param {string} scope Value scope\n * @returns {PicoNow} Current instance\n */\n set(value, scope)\n {\n if ( !Mix.isNum(value) ) {\n value = Mix.int(value);\n }\n\n let day = this.value.getDay();\n\n if ( scope === 'day' ) {\n value = value + 1 - (day || 7);\n }\n\n if ( scope === 'time' ) {\n this.value.setTime(value);\n }\n\n if ( /^seconds?$/i.test(scope) ) {\n this.value.setSeconds(value);\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n this.value.setMinutes(value);\n }\n\n if ( /^hours?$/i.test(scope) ) {\n this.value.setHours(value);\n }\n\n if ( /^days?$/i.test(scope) ) {\n this.add(value, 'date');\n }\n\n if ( /^dates?$/i.test(scope) ) {\n this.value.setDate(value);\n }\n\n if ( /^months?$/i.test(scope) ) {\n this.value.setMonth(value - 1);\n }\n\n if ( /^years?$/i.test(scope) ) {\n this.value.setFullYear(value);\n }\n\n return this;\n }\n\n /**\n * Get or set timestamp\n *\n * @example Now.time() // => 1739334660000\n *\n * @param {any} [value] New timestamp\n * @returns {number|PicoNow} Timestamp or instance\n */\n time(value = null)\n {\n if ( value == null ) {\n return this.get('time');\n }\n\n return this.set(value, 'time');\n }\n\n /**\n * Get or set seconds\n *\n * @example Now.second() // => 45\n *\n * @param {any} [value] New seconds\n * @returns {number|PicoNow} Seconds or instance\n */\n second(value = null)\n {\n if ( value == null ) {\n return this.get('second');\n }\n\n return this.set(value, 'second');\n }\n\n /**\n * Get or set minutes\n *\n * @example Now.minute() // => 30\n *\n * @param {any} [value] New minutes\n * @returns {number|PicoNow} Minutes or instance\n */\n minute(value = null)\n {\n if ( value == null ) {\n return this.get('minute');\n }\n\n return this.set(value, 'minute');\n }\n\n /**\n * Get or set hours\n *\n * @example Now.hour() // => 12\n *\n * @param {any} [value] New hours\n * @returns {number|PicoNow} Hours or instance\n */\n hour(value = null)\n {\n if ( value == null ) {\n return this.get('hour');\n }\n\n return this.set(value, 'hour');\n }\n\n /**\n * Get or set day of week\n *\n * @example Now.day() // => 1\n *\n * @param {any} [value] New day\n * @returns {number|PicoNow} Day or instance\n */\n day(value = null)\n {\n if ( value == null ) {\n return this.get('day');\n }\n\n return this.set(value, 'day');\n }\n\n /**\n * Get or set date of month\n *\n * @example Now.date() // => 12\n *\n * @param {any} [value] New date\n * @returns {number|PicoNow} Date or instance\n */\n date(value = null)\n {\n if ( value == null ) {\n return this.get('date');\n }\n\n return this.set(value, 'date');\n }\n\n /**\n * Get or set month\n *\n * @example Now.month() // => 2\n *\n * @param {any} [value] New month\n * @returns {number|PicoNow} Month or instance\n */\n month(value = null)\n {\n if ( value == null ) {\n return this.get('month');\n }\n\n return this.set(value, 'month');\n }\n\n /**\n * Get or set year\n *\n * @example Now.year() // => 2026\n *\n * @param {any} [value] New year\n * @returns {number|PicoNow} Year or instance\n */\n year(value = null)\n {\n if ( value == null ) {\n return this.get('year');\n }\n\n return this.set(value, 'year');\n }\n\n /**\n * Get short year\n *\n * @example Now.shortyear() // => \"26\"\n *\n * @returns {string} Short year\n */\n shortyear()\n {\n return this.get('year').toString().slice(- 2);\n }\n\n /**\n * Add value to scope\n *\n * @example Now.add(1, \"day\")\n *\n * @param {number} value Add value\n * @param {string} [scope] Target scope\n * @returns {PicoNow} Current instance\n */\n add(value, scope = 'day')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n this.set(this.get(scope) + Mix.int(value), scope);\n\n return this;\n }\n\n /**\n * Subtract value from scope\n *\n * @example Now.sub(1, \"day\")\n *\n * @param {number} value Sub value\n * @param {string} [scope] Target scope\n * @returns {PicoNow} Current instance\n */\n sub(value, scope = 'day')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n this.set(this.get(scope) - Mix.int(value), scope);\n\n return this;\n }\n\n /**\n * Check if string is modifiable\n *\n * @example Now.isModifible(\"+1 day\") // => true\n *\n * @param {string} value Test value\n * @returns {boolean} Is modifiable\n */\n isModifible(value)\n {\n return /^(\\s*[+-][0-9]+\\s?[a-z]+\\s*)+$/i.test(value);\n }\n\n /**\n * Modify date by string\n *\n * @example Now.modify(\"+1 day\")\n *\n * @param {string} value Modify string\n * @returns {PicoNow} Current instance\n */\n modify(value)\n {\n if ( Mix.isEmpty(value) ) {\n return this;\n }\n\n Obj.each(NOW_MODIFY, (val, key) => {\n Str.match(value, val, ([f, o, c]) => {\n o === '+' ? this.add(c, key) : this.sub(c, key);\n });\n });\n\n return this;\n }\n\n /**\n * Apply values from other date\n *\n * @example Now.apply(\"2026-01-01\", \"YYYY-MM-DD\", [\"year\"])\n *\n * @param {any} value Source value\n * @param {string} [format] Source format\n * @param {Array<string>} [keys] Scope keys\n * @returns {PicoNow} Current instance\n */\n apply(value, format = 'YYYY-MM-DD HH:mm:ss', keys = [])\n {\n value = Now.make(value, format);\n\n for ( const key of keys ) {\n this.set(value.get(key), key);\n }\n\n return this;\n }\n\n /**\n * Apply date from other value\n *\n * @example Now.applyDate(\"2026-01-01\")\n *\n * @param {any} value Source value\n * @param {string} [format] Source format\n * @returns {PicoNow} Current instance\n */\n applyDate(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n return this.apply(value, format, ['date', 'month', 'year']);\n }\n\n /**\n * Apply time from other value\n *\n * @example Now.applyTime(\"12:00:00\")\n *\n * @param {any} value Source value\n * @param {string} [format] Source format\n * @returns {PicoNow} Current instance\n */\n applyTime(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n return this.apply(value, format, ['hour', 'minute', 'second']);\n }\n\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addSecond = function (value) {\n console.warn('Now.addSecond() is deprecated, use Now.add(value, \\'second\\') instead.');\n return this.add(value, 'second');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subSecond = function (value) {\n console.warn('Now.subSecond() is deprecated, use Now.sub(value, \\'second\\') instead.');\n return this.sub(value, 'second');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addMinute = function (value) {\n console.warn('Now.addMinute() is deprecated, use Now.add(value, \\'minute\\') instead.');\n return this.add(value, 'minute');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subMinute = function (value) {\n console.warn('Now.subMinute() is deprecated, use Now.sub(value, \\'minute\\') instead.');\n return this.sub(value, 'minute');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addHour = function (value) {\n console.warn('Now.addHour() is deprecated, use Now.add(value, \\'hour\\') instead.');\n return this.add(value, 'hour');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subHour = function (value) {\n console.warn('Now.subHour() is deprecated, use Now.sub(value, \\'hour\\') instead.');\n return this.sub(value, 'hour');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addDates = function (value) {\n console.warn('Now.addDates() is deprecated, use Now.add(value, \\'date\\') instead.');\n return this.add(value, 'date');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subDates = function (value) {\n console.warn('Now.subDates() is deprecated, use Now.sub(value, \\'date\\') instead.');\n return this.sub(value, 'date');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addMonths = function (value) {\n console.warn('Now.addMonths() is deprecated, use Now.add(value, \\'month\\') instead.');\n return this.add(value, 'month');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subMonths = function (value) {\n console.warn('Now.subMonths() is deprecated, use Now.sub(value, \\'month\\') instead.');\n return this.sub(value, 'month');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addYears = function (value) {\n console.warn('Now.addYears() is deprecated, use Now.add(value, \\'year\\') instead.');\n return this.add(value, 'year');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subYears = function (value) {\n console.warn('Now.subYears() is deprecated, use Now.sub(value, \\'year\\') instead.');\n return this.sub(value, 'year');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addDecades = function (value) {\n console.warn('Now.addDecades() is deprecated, use Now.grid(10 * value, \\'year\\') instead.');\n return this.add(10 * value, 'year');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subDecades = function (value) {\n console.warn('Now.subDecades() is deprecated, use Now.grid(10 * value, \\'year\\') instead.');\n return this.sub(10 * value, 'year');\n}\n\n/**\n * @see PicoNow.day\n */\nPicoNowDefaultInstance.prototype.humanDay = function () {\n console.warn('Now.humanDay() is deprecated, use Now.day() instead.');\n return this.day();\n}\n\n/**\n * @see PicoNow.month\n */\nPicoNowDefaultInstance.prototype.humanMonth = function () {\n console.warn('Now.humanMonth() is deprecated, use Now.month() instead.');\n return this.month();\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowDefaultPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowDefaultInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Locale, Mix, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\nexport const NOW_FORMAT = {\n 'L': 'DD/MM/YYYY',\n 'LL': 'MMMM DD, YYYY',\n 'LLL': 'MMMM DD, YYYY HH:mm',\n 'LLLL': 'dddd, MMMM DD, YYYY HH:mm'\n}\n\nexport const NOW_PARSE = {\n 'second': 'ss',\n 'minute': 'mm',\n 'hour': 'HH',\n 'date': 'DD',\n 'month': 'MM',\n 'year': 'YYYY'\n};\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowFormatInstance\n{\n\n /**\n * Check if value matches format\n *\n * @example Now.isParsable(\"2026-01-01\") // => true\n *\n * @param {string} value Test value\n * @param {string} [format] Date format\n * @returns {boolean} Is parsable\n */\n isParsable(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n for ( const key in NOW_PARSE ) {\n value = Str.replace(value, NOW_PARSE[key], format);\n }\n\n return value === format;\n }\n\n /**\n * Parse date from string\n *\n * @example Now.parse(\"2026-01-01\") // => Now\n *\n * @param {any} value Input value\n * @param {string} [format] Input format\n * @returns {PicoNow} Current instance\n */\n parse(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n if ( Mix.isTime(value) ) {\n format = 'HH:mm:ss';\n }\n\n if ( Mix.isDate(value) ) {\n format = 'YYYY-MM-DD';\n }\n\n if ( this.isModifible(value) ) {\n return this.modify(value);\n }\n\n if ( ! Mix.isIsoDate(value) ) {\n return this.parseFormat(value, format);\n }\n\n this.value = new Date(value);\n\n return this;\n }\n\n /**\n * Parse date using format\n *\n * @example Now.parseFormat(\"01/01/2026\", \"DD/MM/YYYY\")\n *\n * @param {string} value Input value\n * @param {string} format Input format\n * @returns {PicoNow} Current instance\n */\n parseFormat(value, format)\n {\n if ( !this.isParsable(value, format) ) {\n return (this.value = new Date(NaN), this);\n }\n\n for ( const key in NOW_PARSE ) {\n this.set(Str.extract(value, NOW_PARSE[key], format), key);\n }\n\n return this;\n }\n\n /**\n * Format date to string\n *\n * @example Now.format(\"YYYY-MM-DD\") // => \"2026-02-12\"\n *\n * @param {string} [format] Output format\n * @returns {string} Formatted string\n */\n format(format = 'YYYY-MM-DD HH:mm:ss')\n {\n if ( Obj.has(NOW_FORMAT, format) ) {\n format = Locale.trans(NOW_FORMAT[format]);\n }\n\n format = format.replace('dddd', () => {\n return this.human('day');\n });\n\n format = format.replace('ddd', () => {\n return this.human('day', 3);\n });\n\n format = format.replace('dd', () => {\n return this.human('day', 2);\n });\n\n format = format.replace('MMMM', () => {\n return this.human('month');\n });\n\n format = format.replace('MMM', () => {\n return this.human('month', 3);\n });\n\n format = format.replace('YYYY', () => {\n return Str.integer(this.year(), 4);\n });\n\n format = format.replace('MM', () => {\n return Str.integer(this.month(), 2);\n });\n\n format = format.replace('DD', () => {\n return Str.integer(this.date(), 2);\n });\n\n format = format.replace('HH', () => {\n return Str.integer(this.hour(), 2);\n });\n\n format = format.replace('mm', () => {\n return Str.integer(this.minute(), 2);\n });\n\n format = format.replace('ss', () => {\n return Str.integer(this.second(), 2);\n });\n\n format = format.replace('YY', () => {\n return Str.integer(this.shortyear(), 2);\n });\n\n format = format.replace('X', () => {\n return Str.integer(this.time());\n });\n\n format = format.replace('x', () => {\n return Str.integer(this.time() / 1000);\n });\n\n return format;\n }\n\n /**\n * Format date as integer\n *\n * @example Now.code(\"YYYYMMDD\") // => 20260212\n *\n * @param {string} [format] Output format\n * @returns {number} Formatted integer\n */\n code(format = 'X')\n {\n return Mix.int(this.format(format));\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowFormatPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowFormatInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Mix, Now, Obj } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowMatchInstance\n{\n\n /**\n * Check if date is before value\n *\n * @example Now.make(\"2026-01-01\").before(\"2026-02-12\") // => true\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if before\n */\n before(value = null, format = 'x')\n {\n return this.code(format) < Now.make(value).code(format);\n }\n\n /**\n * Check if date is before value date\n *\n * @example Now.make(\"2026-01-01\").beforeDate(\"2026-02-12\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if before\n */\n beforeDate(value = null, format = 'YYYYMMDD')\n {\n return this.before(value, format);\n }\n\n /**\n * Check if date is before value time\n *\n * @example Now.make(\"10:00:00\").beforeTime(\"12:00:00\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if before\n */\n beforeTime(value = null, format = 'HHmmss')\n {\n return this.before(value, format);\n }\n\n /**\n * Check if date is after value\n *\n * @example Now.make(\"2026-02-12\").after(\"2026-01-01\") // => true\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if after\n */\n after(value = null, format = 'x')\n {\n return this.code(format) > Now.make(value).code(format);\n }\n\n /**\n * Check if date is after value date\n *\n * @example Now.make(\"2026-02-12\").afterDate(\"2026-01-01\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if after\n */\n afterDate(value = null, format = 'YYYYMMDD')\n {\n return this.after(value, format);\n }\n\n /**\n * Check if date is after value time\n *\n * @example Now.make(\"12:00:00\").afterTime(\"10:00:00\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if after\n */\n afterTime(value = null, format = 'HHmmss')\n {\n return this.after(value, format);\n }\n\n /**\n * Check if date equals value\n *\n * @example Now.make(\"2026-01-01\").equal(\"2026-01-01\") // => true\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if equal\n */\n equal(value = null, format = 'x')\n {\n if ( ! (value instanceof Now) ) {\n value = Now.make(value);\n }\n\n return this.code(format) === value.clone().code(format);\n }\n\n /**\n * Check if date equals value date\n *\n * @example Now.make(\"2026-01-01\").equalDate(\"2026-01-01\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if equal\n */\n equalDate(value = null, format = 'YYYYMMDD')\n {\n return this.equal(value, format);\n }\n\n /**\n * Check if date equals value time\n *\n * @example Now.make(\"12:00:00\").equalTime(\"12:00:00\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if equal\n */\n equalTime(value = null, format = 'HHmmss')\n {\n return this.equal(value, format);\n }\n\n /**\n * Check if date is between values\n *\n * @example Now.make(\"2026-01-15\").between(\"2026-01-01\", \"2026-01-31\")\n *\n * @param {any} [start] Start value\n * @param {any} [end] End value\n * @param {string} [format] Compare format\n * @returns {boolean} True if between\n */\n between(start = null, end = null, format = 'YYYYMMDD')\n {\n let dates = [\n Now.make(start), Now.make(end)\n ];\n\n if ( dates[0].after(dates[1], format) ) {\n dates = dates.reverse();\n }\n\n return this.after(dates[0], format) && this.before(dates[1], format);\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowMatchPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowMatchInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Mix, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowGridInstance\n{\n /**\n * Get grid of dates by scope\n *\n * @example Now.grid(\"month\") // => [Now, Now, ...]\n *\n * @param {string} [scope] Grid scope\n * @returns {Array<PicoNow>} Array of dates\n */\n grid(scope = 'day')\n {\n if ( /^seconds?$/i.test(scope) ) {\n return this.getSecondsGrid();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.getMinutesGrid();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.getHoursGrid();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.getDaysGrid();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.getDatesGrid();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.getMonthsGrid();\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.getYearsGrid();\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.getDecadesGrid();\n }\n\n throw new Error(`Invalid grid scope type \"${scope}\".`);\n }\n\n /**\n * Get seconds grid\n *\n * @example Now.getSecondsGrid(10)\n *\n * @param {number} [interval] Step interval\n * @returns {Array<PicoNow>} Array of dates\n */\n getSecondsGrid(interval = 1)\n {\n if ( interval == null ) {\n interval = 1;\n }\n\n return Arr.make(60 / interval, (i) => {\n return this.clone().second(i * interval);\n });\n }\n\n /**\n * Get minutes grid\n *\n * @example Now.getMinutesGrid(10)\n *\n * @param {number} [interval] Step interval\n * @returns {Array<PicoNow>} Array of dates\n */\n getMinutesGrid(interval = 1)\n {\n if ( interval == null ) {\n interval = 1;\n }\n\n return Arr.make(60 / interval, (i) => {\n return this.clone().minute(i * interval);\n });\n }\n\n /**\n * Get hours grid\n *\n * @example Now.getHoursGrid(2)\n *\n * @param {number} [interval] Step interval\n * @returns {Array<PicoNow>} Array of dates\n */\n getHoursGrid(interval = 1)\n {\n if ( interval == null ) {\n interval = 1;\n }\n\n return Arr.make(24 / interval, (i) => {\n return this.clone().hour(i * interval);\n });\n }\n\n /**\n * Get days grid\n *\n * @example Now.getDaysGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getDaysGrid()\n {\n let dates = [\n this.first('date').first('day'), this.last('date').last('day')\n ];\n\n return dates[0].range(dates[1], 'date');\n }\n\n /**\n * Get dates grid\n *\n * @example Now.getDatesGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getDatesGrid()\n {\n let dates = [\n this.first('date'), this.last('date')\n ];\n\n return dates[0].range(dates[1], 'date');\n }\n\n /**\n * Get months grid\n *\n * @example Now.getMonthsGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getMonthsGrid()\n {\n let dates = [\n this.first('month'), this.last('month')\n ];\n\n return dates[0].range(dates[1], 'month');\n }\n\n /**\n * Get years grid\n *\n * @example Now.getYearsGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getYearsGrid()\n {\n let dates = [\n this.first('year'), this.clone().last('year')\n ];\n\n return dates[0].range(dates[1], 'year');\n }\n\n /**\n * Get decades grid\n *\n * @example Now.getDecadesGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getDecadesGrid()\n {\n let dates = [\n this.first('decade'), this.clone().last('decade')\n ];\n\n return dates[0].range(dates[1], 'decade');\n }\n\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getYears = function () {\n console.warn('Now.getYears() is deprecated, use Now.grid(\\'years\\') instead.');\n return this.grid('years');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getMonths = function () {\n console.warn('Now.getMonths() is deprecated, use Now.grid(\\'months\\') instead.');\n return this.grid('months');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getDates = function () {\n console.warn('Now.getDates() is deprecated, use Now.grid(\\'dates\\') instead.');\n return this.grid('dates');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getHours = function () {\n console.warn('Now.getHours() is deprecated, use Now.grid(\\'hours\\') instead.');\n return this.grid('hours');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getMinutes = function () {\n console.warn('Now.getMinutes() is deprecated, use Now.grid(\\'minutes\\') instead.');\n return this.grid('minutes');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getSeconds = function () {\n console.warn('Now.getSeconds() is deprecated, use Now.grid(\\'seconds\\') instead.');\n return this.grid('seconds');\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowGridPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowGridInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Mix, Now, Obj } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowWalkerInstance\n{\n\n /**\n * Get previous date by scope\n *\n * @example Now.prev(\"day\") // => Now\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n prev(scope = 'date')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.clone().sub(10, 'year');\n }\n\n return this.clone().sub(1, scope);\n }\n\n /**\n * Get next date by scope\n *\n * @example Now.next(\"day\") // => Now\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n next(scope = 'day')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.clone().add(10, 'year');\n }\n\n return this.clone().add(1, scope);\n }\n\n /**\n * Get previous second\n *\n * @example Now.prevSecond()\n *\n * @returns {PicoNow} New instance\n */\n prevSecond()\n {\n return this.prev('second');\n }\n\n /**\n * Get next second\n *\n * @example Now.nextSecond()\n *\n * @returns {PicoNow} New instance\n */\n nextSecond()\n {\n return this.next('second');\n }\n\n /**\n * Get previous minute\n *\n * @example Now.prevMinute()\n *\n * @returns {PicoNow} New instance\n */\n prevMinute()\n {\n return this.prev('minute');\n }\n\n /**\n * Get next minute\n *\n * @example Now.nextMinute()\n *\n * @returns {PicoNow} New instance\n */\n nextMinute()\n {\n return this.next('minute');\n }\n\n /**\n * Get previous hour\n *\n * @example Now.prevHour()\n *\n * @returns {PicoNow} New instance\n */\n prevHour()\n {\n return this.prev('hour');\n }\n\n /**\n * Get next hour\n *\n * @example Now.nextHour()\n *\n * @returns {PicoNow} New instance\n */\n nextHour()\n {\n return this.next('hour');\n }\n\n /**\n * Get previous date\n *\n * @example Now.prevDate()\n *\n * @returns {PicoNow} New instance\n */\n prevDate()\n {\n return this.prev('date');\n }\n\n /**\n * Get next date\n *\n * @example Now.nextDate()\n *\n * @returns {PicoNow} New instance\n */\n nextDate()\n {\n return this.next('date');\n }\n\n /**\n * Get previous month\n *\n * @example Now.prevMonth()\n *\n * @returns {PicoNow} New instance\n */\n prevMonth()\n {\n return this.prev('month');\n }\n\n /**\n * Get next month\n *\n * @example Now.nextMonth()\n *\n * @returns {PicoNow} New instance\n */\n nextMonth()\n {\n return this.next('month');\n }\n\n /**\n * Get previous year\n *\n * @example Now.prevYear()\n *\n * @returns {PicoNow} New instance\n */\n prevYear()\n {\n return this.prev('year');\n }\n\n /**\n * Get next year\n *\n * @example Now.nextYear()\n *\n * @returns {PicoNow} New instance\n */\n nextYear()\n {\n return this.next('year');\n }\n\n /**\n * Get previous decade\n *\n * @example Now.prevDecade()\n *\n * @returns {PicoNow} New instance\n */\n prevDecade()\n {\n return this.prev('decade');\n }\n\n /**\n * Get next decade\n *\n * @example Now.nextDecade()\n *\n * @returns {PicoNow} New instance\n */\n nextDecade()\n {\n return this.next('decade');\n }\n\n /**\n * Get start of scope\n *\n * @example Now.first(\"month\")\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n first(scope = 'date')\n {\n if ( /^seconds?$/i.test(scope) ) {\n return this.firstSecond();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.firstMinute();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.firstHour();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.firstDay();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.firstDate();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.firstMonth();\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.firstYear();\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.firstDecade();\n }\n\n throw new Error(`Invalid first scope type \"${scope}\".`);\n }\n\n /**\n * Get end of scope\n *\n * @example Now.last(\"month\")\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n last(scope = 'date')\n {\n if ( /^seconds?$/i.test(scope) ) {\n return this.lastSecond();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.lastMinute();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.lastHour();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.lastDay();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.lastDate();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.lastMonth();\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.lastYear();\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.lastDecade();\n }\n\n throw new Error(`Invalid last scope type \"${scope}\".`);\n }\n\n /**\n * Get start of second\n *\n * @example Now.firstSecond()\n *\n * @returns {PicoNow} New instance\n */\n firstSecond()\n {\n return this.clone().set(0, 'second');\n }\n\n /**\n * Get end of second\n *\n * @example Now.lastSecond()\n *\n * @returns {PicoNow} New instance\n */\n lastSecond()\n {\n return this.clone().set(59, 'second');\n }\n\n /**\n * Get start of minute\n *\n * @example Now.firstMinute()\n *\n * @returns {PicoNow} New instance\n */\n firstMinute()\n {\n return this.clone().set(0, 'minute');\n }\n\n /**\n * Get end of minute\n *\n * @example Now.lastMinute()\n *\n * @returns {PicoNow} New instance\n */\n lastMinute()\n {\n return this.clone().set(59, 'minute');\n }\n\n /**\n * Get start of hour\n *\n * @example Now.firstHour()\n *\n * @returns {PicoNow} New instance\n */\n firstHour()\n {\n return this.clone().set(0, 'hour');\n }\n\n /**\n * Get end of hour\n *\n * @example Now.lastHour()\n *\n * @returns {PicoNow} New instance\n */\n lastHour()\n {\n return this.clone().set(23, 'hour');\n }\n\n /**\n * Get start of day\n *\n * @example Now.firstDay()\n *\n * @returns {PicoNow} New instance\n */\n firstDay()\n {\n return this.clone().set(0, 'day');\n }\n\n /**\n * Get end of day\n *\n * @example Now.lastDay()\n *\n * @returns {PicoNow} New instance\n */\n lastDay()\n {\n return this.clone().set(6, 'day');\n }\n\n /**\n * Get start of month date\n *\n * @example Now.firstDate()\n *\n * @returns {PicoNow} New instance\n */\n firstDate()\n {\n return this.clone().set(1, 'date');\n }\n\n /**\n * Get end of month date\n *\n * @example Now.lastDate()\n *\n * @returns {PicoNow} New instance\n */\n lastDate()\n {\n return this.clone().next('month').set(0, 'date');\n }\n\n /**\n * Get start of year month\n *\n * @example Now.firstMonth()\n *\n * @returns {PicoNow} New instance\n */\n firstMonth()\n {\n return this.clone().set(1, 'month');\n }\n\n /**\n * Get end of year month\n *\n * @example Now.lastMonth()\n *\n * @returns {PicoNow} New instance\n */\n lastMonth()\n {\n return this.clone().set(12, 'month');\n }\n\n /**\n * Get nth year of decade\n *\n * @example Now.nthYear(5)\n *\n * @param {number} [n] Year index\n * @returns {PicoNow} New instance\n */\n nthYear(n = 0)\n {\n let year = Math.floor(this.year() / 10) * 10;\n\n return this.clone().set(year + n, 'year');\n }\n\n /**\n * Get first year of decade\n *\n * @example Now.firstYear()\n *\n * @returns {PicoNow} New instance\n */\n firstYear()\n {\n return this.nthYear(0);\n }\n\n /**\n * Get last year of decade\n *\n * @example Now.lastYear()\n *\n * @returns {PicoNow} New instance\n */\n lastYear()\n {\n return this.nthYear(9);\n }\n\n /**\n * Get nth decade of century\n *\n * @example Now.nthDecade(5)\n *\n * @param {number} [n] Decade index\n * @returns {PicoNow} New instance\n */\n nthDecade(n = 0)\n {\n let year = Math.floor(this.year() / 100) * 100;\n\n return this.clone().set(year + (n * 10), 'year');\n }\n\n /**\n * Get first decade of century\n *\n * @example Now.firstDecade()\n *\n * @returns {PicoNow} New instance\n */\n firstDecade()\n {\n return this.nthDecade(0);\n }\n\n /**\n * Get last decade of century\n *\n * @example Now.lastDecade()\n *\n * @returns {PicoNow} New instance\n */\n lastDecade()\n {\n return this.nthDecade(9);\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowWalkerPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowWalkerInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Mix, Now, Obj, Arr } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowRangeInstance\n{\n\n /**\n * Get range of dates\n *\n * @example Now.range(\"2026-01-31\", \"day\") // => [Now, Now, ...]\n *\n * @param {any} [value] End date\n * @param {string} [scope] Range scope\n * @returns {Array<PicoNow>} Array of dates\n */\n range(value = null, scope = 'date')\n {\n let format = 'YYYYMMDD';\n\n if ( /^months?$/.test(scope) ) {\n format = 'YYYYMM';\n }\n\n if ( /^years?$/.test(scope) ) {\n format = 'YYYY';\n }\n\n let range = [];\n\n let dates = [\n this.clone(), Now.make(value)\n ];\n\n if ( dates[0].afterDate(dates[1]) ) {\n dates = dates.reverse();\n }\n\n dates[1].add(1, scope);\n\n for ( let day = dates[0]; ! day.equal(dates[1], format); day = day.next(scope) ) {\n Arr.append(range, day);\n }\n\n return range;\n }\n\n}\n\n/**\n * @see PicoNow.range\n */\nPicoNowRangeInstance.prototype.getDatesRange = function (...args) {\n console.warn('NowRange.getDatesRange() is deprecated, use NowRange.range() instead.');\n return this.range(...args);\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowRangePlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowRangeInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Locale, Mix, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\nexport const NOW_HUMAN_DAYS = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n];\n\nexport const NOW_HUMAN_MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n];\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowHumanInstance\n{\n /**\n * Get human readable value\n *\n * @example Now.human(\"day\") // => \"Monday\"\n *\n * @param {string} [scope] Value scope\n * @param {number} [substr] Substring length\n * @returns {string|number} Human value\n */\n human(scope = 'day', substr = null)\n {\n if ( /^days?$/i.test(scope) ) {\n return this.getHumanDay(substr);\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.getHumanMonth(substr);\n }\n\n return this.get(scope);\n }\n\n /**\n * Get human readable day\n *\n * @example Now.getHumanDay(3) // => \"Mon\"\n *\n * @param {number} [substr] Substring length\n * @returns {string} Day name\n */\n getHumanDay(substr = null)\n {\n let day = this.day() - 1;\n\n if ( ! NOW_HUMAN_DAYS[day] ) {\n throw new Error(`Invalid day number \"${day}\".`);\n }\n\n let value = Locale.trans(NOW_HUMAN_DAYS[day]);\n\n if ( substr != null ) {\n value = value.substring(0, substr);\n }\n\n return value;\n }\n\n /**\n * Get human readable month\n *\n * @example Now.getHumanMonth(3) // => \"Jan\"\n *\n * @param {number} [substr] Substring length\n * @returns {string} Month name\n */\n getHumanMonth(substr = null)\n {\n let month = this.day() - 1;\n\n if ( ! NOW_HUMAN_MONTHS[month] ) {\n throw new Error(`Invalid month number \"${month}\".`);\n }\n\n let value = Locale.trans(NOW_HUMAN_MONTHS[month]);\n\n if ( substr != null ) {\n value = value.substring(0, substr);\n }\n\n return value;\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowHumanPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowHumanInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Dom, Mix, Now, Num } from \"../index.esm.js\";\nimport { PicoNowDefaultPlugin } from \"../now/NowDefault.js\";\nimport { PicoNowFormatPlugin } from \"../now/NowFormat.js\";\nimport { PicoNowMatchPlugin } from \"../now/NowMatch.js\";\nimport { PicoNowGridPlugin } from \"../now/NowGrid.js\";\nimport { PicoNowWalkerPlugin } from \"../now/NowWalker.js\";\nimport { PicoNowRangePlugin } from \"../now/NowRange.js\";\nimport { PicoNowHumanPlugin } from \"../now/NowHuman.js\";\n\nexport const PicoNowPlugins = [\n PicoNowDefaultPlugin,\n PicoNowFormatPlugin,\n PicoNowMatchPlugin,\n PicoNowGridPlugin,\n PicoNowWalkerPlugin,\n PicoNowRangePlugin,\n PicoNowHumanPlugin,\n];\n\n/**\n * @class PicoNow\n *\n * @typedef {import('../now/NowMatch.js').PicoNowMatchInstance} PicoNowMatchInstance\n * @typedef {import('../now/NowFormat.js').PicoNowFormatInstance} PicoNowFormatInstance\n * @typedef {import('../now/NowMatch.js').PicoNowMatchInstance} PicoNowMatchInstance\n * @typedef {import('../now/NowGrid.js').PicoNowGridInstance} PicoNowGridInstance\n * @typedef {import('../now/NowWalker.js').PicoNowWalkerInstance} PicoNowWalkerInstance\n * @typedef {import('../now/NowRange.js').PicoNowRangeInstance} PicoNowRangeInstance\n * @typedef {import('../now/NowHuman.js').PicoNowHumanInstance} PicoNowHumanInstance\n *\n * @extends PicoNowDefaultInstance\n * @extends PicoNowFormatInstance\n * @extends PicoNowMatchInstance\n * @extends PicoNowGridInstance\n * @extends PicoNowWalkerInstance\n * @extends PicoNowRangeInstance\n * @extends PicoNowHumanInstance\n */\nexport class PicoNow\n{\n /**\n * Init hooks for instance\n *\n * @type {Array<function>}\n */\n static init = [];\n\n /**\n * Original input value\n *\n * @type {any}\n */\n input = null;\n\n /**\n * Current Date instance\n *\n * @type {Date}\n */\n value = null;\n\n /**\n * Create Now instance from input\n *\n * @example new Now().toUTC() // => string\n *\n * @param {any} [value] Date input\n * @param {string} [format] Input format\n */\n constructor(value = null, format = 'YYYY-MM-DD HH:mm:ss')\n {\n if ( value === 'now' ) {\n value = null;\n }\n\n let input = value;\n\n if ( value && value.toDate ) {\n value = value.toDate();\n }\n\n if ( ! (value instanceof Date) ) {\n value = new Date();\n }\n\n this.input = value;\n\n if ( Mix.isNix(input) ) {\n this.input = input;\n }\n\n this.value = value;\n\n if ( Mix.isStr(input) ) {\n this.parse(input, format);\n }\n\n Arr.each(Now.init, (fn) => {\n el = fn.call(this, el, format);\n });\n\n return this;\n }\n\n /**\n * Extend Now with a plugin\n *\n * @example Now.extend(fn)\n *\n * @param {function} plugin Plugin function\n * @returns {void} No return value\n */\n static extend(plugin)\n {\n plugin.call({}, this);\n }\n\n /**\n * Create Now instance helper\n *\n * @example Now.make(\"now\") // => Now\n *\n * @param {any} [value] Date input\n * @param {string} [format] Input format\n * @returns {PicoNow} Now instance\n */\n static make(value = null, format = 'YYYY-MM-DD HH:mm:ss')\n {\n return new Now(value, format);\n }\n\n /**\n * Reset date parts to start\n *\n * @example Now.make().reset() // => Now\n *\n * @param {any} [config] Reset flags\n * @returns {PicoNow} Now instance\n */\n reset(config = null)\n {\n if ( config == null ) {\n config = { month: true, day: true, time: true };\n }\n\n if ( config.month ) {\n this.value.setMonth(0);\n }\n\n if ( config.day ) {\n this.value.setDate(1);\n }\n\n if ( config.time ) {\n this.value.setHours(0, 0, 0);\n }\n\n return this;\n }\n\n /**\n * Clone Now instance\n *\n * @example Now.make().clone() // => Now\n *\n * @param {boolean} [reset] Reset clone\n * @returns {PicoNow} New instance\n */\n clone(reset = false)\n {\n return new Now(new Date(this.value), null, reset);\n }\n\n /**\n * Check if input is valid date\n *\n * @example Now.make(\"x\").valid() // => false\n *\n * @returns {boolean} True if valid\n */\n valid()\n {\n return ! isNaN(this.input);\n }\n\n /**\n * Get Date instance\n *\n * @example Now.make().toDate() // => Date\n *\n * @returns {Date} Date instance\n */\n toDate()\n {\n return this.value;\n }\n\n /**\n * Get UTC string\n *\n * @example Now.make().toUTC() // => string\n *\n * @returns {string} UTC string\n */\n toUTC()\n {\n return this.value.toUTCString();\n }\n\n}\n\n/**\n * @see PicoNow.reset\n */\nPicoNow.prototype.resetTime = function () {\n console.warn('Now.resetTime() is deprecated, use Now.reset({ time: true }) instead.');\n return this.reset({ time: true });\n}\n\n/**\n * @returns {typeof PicoNow}\n */\nexport function PicoNowBuilder() {\n\n let cls = PicoNow;\n\n for ( const plugin of PicoNowPlugins ) {\n cls = plugin.call(cls, cls);\n }\n\n return cls;\n}\n\nexport default PicoNowBuilder;","import { Mix, Obj } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const TYPE_PARSERS = [\n { // null\n match: (val) => {\n return /^(null|undefined)$/i.test(val);\n },\n parse: (val) => {\n return Mix.null(val);\n }\n },\n { // boolean\n match: (val) => {\n return /^(true|false|yes|no)$/i.test(val);\n },\n parse: (val) => {\n return Mix.bool(val);\n }\n },\n { // integer\n match: (val) => {\n return /^-?[0-9]+$/.test(val);\n },\n parse: (val) => {\n return Mix.int(val);\n }\n },\n { // number\n match: (val) => {\n return /^-?[0-9]+\\.[0-9]+$/.test(val);\n },\n parse: (val) => {\n return Mix.num(val);\n }\n },\n { // array\n match: (val) => {\n return /^[{\\[].*?[}\\]]$/.test(val);\n },\n parse: (val) => {\n return JSON.parse(val);\n }\n },\n];\n\nexport const TYPE_CASTERS = [\n { // array\n match: (val) => {\n return Mix.isArr(val);\n },\n parse: (val) => {\n return JSON.stringify(val);\n }\n }\n];\n\n/**\n * @memberof PicoFormat\n */\nexport class PicoFormatParserStatic\n{\n\n /**\n * Convert key path format\n *\n * @example Format.keyed(\"a[b]\") // => \"a.b\"\n *\n * @param {any} value Input key\n * @param {any} [fallback] Fallback value\n * @returns {string} Keyed string\n */\n static keyed(value, fallback = null)\n {\n if ( ! Mix.isStr(value) ) {\n return fallback;\n }\n\n if ( value.indexOf('[') === -1 ) {\n return value;\n }\n\n return value.replace(/\\[([^\\]]+)\\]/g, '.$1');\n }\n\n /**\n * Parse value by type\n *\n * @example Format.parsed(\"true\") // => true\n *\n * @param {any} value Input value\n * @param {any} [fallback] Fallback value\n * @param {Array<any>} [parsers] Custom parsers\n * @returns {any} Parsed value\n */\n static parsed(value, fallback = null, parsers = [])\n {\n if ( ! Mix.isStr(value) ) {\n return fallback;\n }\n\n value = value.replace(/(^\"|^'|'$|\"$)/g, '');\n\n for ( let type of parsers ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n for ( let type of TYPE_PARSERS ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n return value;\n }\n\n /**\n * Cast value to string\n *\n * @example Format.casted(true) // => \"true\"\n *\n * @param {any} value Input value\n * @param {boolean} [encode] Encode value\n * @param {Array<any>} [casters] Custom casters\n * @returns {string} Casted string\n */\n static casted(value, encode = false, casters = [])\n {\n if ( encode ) {\n value = encodeURI(value);\n }\n\n if ( Mix.isStr(value) ) {\n return value;\n }\n\n for ( let type of casters ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n for ( let type of TYPE_CASTERS ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n return Mix.str(value);\n }\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatParserPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatParserStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Arr, Mix, Obj, For } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const PARAM_REGEX = {\n entry: /(?<=^|&|\\?)(\\s*(?<key>.*?)\\s*=\\s*(?<val>\".*?\"|'.*?'|.*?)\\s*)(?=&|$)/g\n};\n\n/**\n * @memberof PicoFormat\n * @extends {PicoFormat}\n */\nexport class PicoFormatParamStatic\n{\n\n /**\n * Cast object to params string\n *\n * @example Format.castParams({ a: 1 }) // => \"a=1\"\n *\n * @param {any} [params] Input params\n * @returns {string} Params string\n */\n static castParams(params = {})\n {\n if ( Mix.isEmpty(params) ) {\n return '';\n }\n\n let result = Arr.each(params, (val, key) => {\n return this.castParam(key, val);\n });\n\n return result.join('&');\n }\n\n /**\n * Cast single param to string\n *\n * @example Format.castParam(\"a\", 1) // => \"a=1\"\n *\n * @param {string} key Param key\n * @param {any} value Param value\n * @param {string} [path] Key path\n * @returns {string} Param string\n */\n static castParam(key, value, path = null)\n {\n if ( path != null ) {\n key = path + '[' + key + ']';\n }\n\n if ( !Mix.isRef(value) ) {\n return Mix.str(key) + '=' + For.casted(value, true);\n }\n\n let result = Arr.each(value, (v, k) => {\n return this.castParam(Mix.isArr(value) ? '' : k, v, key);\n });\n\n return result.join('&');\n }\n\n /**\n * Parse params string\n *\n * @example Format.parseParams(\"a=1\") // => { a: 1 }\n *\n * @param {string} value Params string\n * @returns {any} Params object\n */\n static parseParams(value)\n {\n if ( Mix.isEmpty(value) ) {\n return {};\n }\n\n value = decodeURIComponent(value);\n\n let matches = value.matchAll(...[\n PARAM_REGEX.entry\n ]);\n\n if ( matches == null ) {\n return {};\n }\n\n const [key, val] = [\n For.keyed, For.parsed\n ];\n\n return Arr.reduce(Array.from(matches), (result, { groups }) => {\n return Obj.set(result, key(groups.key), val(groups.val));\n }, {});\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatParamPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatParamStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Arr, For, Mix, Obj } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const OPTION_REGEX = {\n entry: /(^|;)(\\s*(?<key>.*?)\\s*:\\s*(?<val>\".*?\"|'.*?'|.*?)\\s*)(?=;|$)/g\n};\n\n/**\n * @memberof PicoFormat\n */\nexport class PicoFormatOptionStatic\n{\n\n /**\n * Cast object to options string\n *\n * @example Format.castOptions({ a: 1 }) // => \"a: 1;\"\n *\n * @param {any} [options] Input options\n * @param {boolean} [space] Add space\n * @returns {string} Options string\n */\n static castOptions(options = {}, space = true)\n {\n if ( Mix.isEmpty(options) ) {\n return '';\n }\n\n let result = Arr.each(options, (val, key) => {\n return this.castOption(key, val, null, space);\n });\n\n return result.join(';') + ';';\n }\n\n /**\n * Cast single option to string\n *\n * @example Format.castOption(\"a\", 1) // => \"a: 1\"\n *\n * @param {string} key Option key\n * @param {any} value Option value\n * @param {string} [path] Key path\n * @param {boolean} [space] Add space\n * @returns {string} Option string\n */\n static castOption(key, value, path = null, space = true)\n {\n if ( path != null ) {\n key = path + '.' + key;\n }\n\n let div = space ? ': ' : ':';\n\n if ( !Mix.isObj(value) ) {\n return Mix.str(key) + div + For.casted(value, false);\n }\n\n let result = Arr.map(value, (v, k) => {\n return this.castOption(k, v, key);\n });\n\n return result.join(';');\n }\n\n /**\n * Parse options string\n *\n * @example Format.parseOptions(\"a: 1;\") // => { a: 1 }\n *\n * @param {string} value Options string\n * @returns {any} Options object\n */\n static parseOptions(value)\n {\n if ( Mix.isEmpty(value) ) {\n return {};\n }\n\n let matches = value.matchAll(...[\n OPTION_REGEX.entry\n ]);\n\n if ( matches == null ) {\n return {};\n }\n\n const [key, val] = [\n For.keyed, For.parsed\n ];\n\n return Arr.reduce(Array.from(matches), (result, { groups }) => {\n return Obj.set(result, key(groups.key), val(groups.val));\n }, {});\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatOptionPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatOptionStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Arr, Mix, Obj } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const SLUG_CONVERT = [\n ['à', 'a'],\n ['á', 'a'],\n ['â', 'a'],\n ['è', 'e'],\n ['é', 'e'],\n ['ê', 'e'],\n ['ì', 'i'],\n ['í', 'i'],\n ['ï', 'i'],\n ['î', 'i'],\n ['ò', 'o'],\n ['ó', 'o'],\n ['ô', 'o'],\n ['ù', 'u'],\n ['ú', 'u'],\n ['û', 'u'],\n ['ñ', 'n'],\n ['ç', 'c'],\n ['.', '-'],\n ['·', '-'],\n ['/', '-'],\n ['_', '-'],\n [',', '-'],\n [':', '-'],\n [';', '-'],\n ['ä', 'ae'],\n ['ö', 'oe'],\n ['ü', 'ue'],\n ['ß', 'ss'],\n];\n\n/**\n * @memberof PicoFormat\n * @extends {PicoFormat}\n */\nexport class PicoFormatUrlStatic\n{\n\n /**\n * Create slug from string\n *\n * @example Format.slugify(\"Hello World\") // => \"hello-world\"\n *\n * @param {any} value Input string\n * @returns {string} Slug string\n */\n static slugify(value)\n {\n value = String(value).replace(/(^\\s+|\\s+$)/g, '')\n .toLowerCase();\n\n Arr.each(SLUG_CONVERT, (v) => {\n value = value.replaceAll(v[0], v[1]);\n });\n\n return value.replace(/[^a-z0-9-\\s]+/g, '')\n .replace(/\\s+/g, '-').replace(/-+/g, '-');\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatUrlPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatUrlStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Mix, Obj, Num } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const FILE_UNITS = [\n 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'\n];\n\n/**\n * @memberof PicoFormat\n * @extends {PicoFormat}\n */\nexport class PicoFormatFileStatic\n{\n\n /**\n * Format file size\n *\n * @example Format.filesize(1000) // => \"1.0 KB\"\n *\n * @param {any} value Bytes value\n * @param {number} [decimals] Decimal points\n * @returns {string} Formatted size\n */\n static filesize(value, decimals = 1)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value, 0);\n }\n\n let fn = (i) => {\n return Num.fixed(value / Math.pow(1000, i), decimals);\n }\n\n for ( let i = 0; i < FILE_UNITS.length; i++ ) {\n if ( value <= Math.pow(1000, i+1) ) {\n return fn(i) + ' ' + FILE_UNITS[i]\n }\n }\n\n return fn(FILE_UNITS.length);\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatFilePlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatFileStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { PicoFormatParserPlugin } from \"../format/FormatParser.js\";\nimport { PicoFormatParamPlugin } from \"../format/FormatParam.js\";\nimport { PicoFormatOptionPlugin } from \"../format/FormatOption.js\";\nimport { PicoFormatUrlPlugin } from \"../format/FormatUrl.js\";\nimport { PicoFormatFilePlugin } from \"../format/FormatFile.js\";\n\nexport const PicoFormatPlugins = [\n PicoFormatParserPlugin,\n PicoFormatParamPlugin,\n PicoFormatOptionPlugin,\n PicoFormatUrlPlugin,\n PicoFormatFilePlugin,\n];\n\n/**\n * @class PicoFormat\n *\n * @typedef {import('../format/FormatParser.js').PicoFormatParserStatic} PicoFormatParserStatic\n * @typedef {import('../format/FormatParam.js').PicoFormatParamStatic} PicoFormatParamStatic\n * @typedef {import('../format/FormatOption.js').PicoFormatOptionStatic} PicoFormatOptionStatic\n * @typedef {import('../format/FormatUrl.js').PicoFormatUrlStatic} PicoFormatUrlStatic\n * @typedef {import('../format/FormatFile.js').PicoFormatFileStatic} PicoFormatFileStatic\n *\n * @mixes PicoFormatParserStatic\n * @mixes PicoFormatParamStatic\n * @mixes PicoFormatOptionStatic\n * @mixes PicoFormatUrlStatic\n * @mixes PicoFormatFileStatic\n */\nexport class PicoFormat\n{\n\n /**\n * Extend format with a plugin\n *\n * @example For.extend(fn)\n *\n * @param {function} plugin Plugin function\n * @returns {void} No return value\n */\n static extend(plugin)\n {\n plugin.call({}, this);\n }\n\n}\n\n/**\n * @returns {typeof PicoFormat}\n */\nexport function PicoFormatBuilder() {\n\n let cls = PicoFormat;\n\n for ( const plugin of PicoFormatPlugins ) {\n cls = plugin.call(cls, cls);\n }\n\n return cls;\n}\n\nexport default PicoFormatBuilder;","/**\n * Get global runtime scope\n *\n * @example go().Math // => Math\n *\n * @returns {any} Global scope obj\n */\nexport function go() {\n\n if ( typeof globalThis !== 'undefined' ) {\n return globalThis;\n }\n\n if ( typeof window !== 'undefined' ) {\n return window;\n }\n\n if ( typeof global !== 'undefined' ) {\n return global;\n }\n\n return {};\n}\n\n/**\n * Detect browser from userAgent\n *\n * @example browser() // sets global flags\n *\n * @returns {void} No return value\n */\nexport function browser() {\n\n const scope = go();\n\n if ( ! scope.navigator ) {\n return;\n }\n\n let [agent, result] = [\n scope.navigator.userAgent, {}\n ]\n\n if ( result.safari == null ) {\n result.safari = /Safari\\//.test(agent);\n }\n\n if ( result.firefox == null ) {\n result.firefox = /Firefox\\//.test(agent);\n }\n\n if ( result.edge == null ) {\n result.edge = /Edge\\//.test(agent);\n }\n\n if ( result.chrome == null ) {\n result.chrome = /Chrome\\//.test(agent);\n }\n\n scope.piuag = result;\n}\n\n/**\n * Detect device OS from userAgent\n *\n * @example device() // sets global flags\n *\n * @returns {void} No return value\n */\nexport function device() {\n\n const scope = go();\n\n if ( ! scope.navigator ) {\n return;\n }\n\n let [agent, result] = [\n scope.navigator.userAgent, {}\n ]\n\n if ( result.win == null ) {\n result.win = /Windows/.test(agent);\n }\n\n if ( result.osx == null ) {\n result.osx = /Macintosh|Mac OS X/.test(agent);\n }\n\n if ( result.gnu == null ) {\n result.gnu = /Linux/.test(agent);\n }\n\n if ( result.ios == null ) {\n result.ios = /iPhone|iPad|iPod/.test(agent);\n }\n\n if ( result.oid == null ) {\n result.oid = /Android/.test(agent);\n }\n\n scope.piudv = result;\n}","import { Arr, Num, Event, Mix, Obj } from \"../index.esm.js\";\n\nexport class PicoData\n{\n /**\n * In-memory data store\n *\n * @type {Record<string, any>}\n */\n static $data = {};\n\n /**\n * Check if store key exists\n *\n * @example Data.has([\"x\"]) // => true|false\n *\n * @param {any} input Store key input\n * @returns {boolean} True if exists\n */\n static has(input)\n {\n return Obj.has(this.$data, ...[\n Arr.first(input)\n ]);\n }\n\n /**\n * Set store key and fire event\n *\n * @example Data.set([\"x\"], 1)\n * @example Data.set([\"x\"], {a:1})\n *\n * @param {any} input Store key input\n * @param {any} value Value to set\n * @returns {void} No return value\n */\n static set(input, value)\n {\n let [stored, key] = [\n null, Arr.first(input)\n ];\n\n if ( Obj.has(this.$data, key) ) {\n stored = Obj.get(this.$data, key);\n }\n\n if ( Mix.isEqual(stored, value) ) {\n return;\n }\n\n Obj.set(...[\n this.$data, key, value\n ]);\n\n Event.fire('store:' + key, value, key);\n }\n\n /**\n * Remove store key\n *\n * @example Data.unset([\"x\"])\n *\n * @param {any} input Store key input\n * @returns {void} No return value\n */\n static unset(input)\n {\n Obj.unset(this.$data, [\n ...Arr.first(input)\n ]);\n }\n\n /**\n * Get stored value (cloned)\n *\n * @example Data.get([\"x\"], null) // => value\n * @example Data.get([\"x\"], 1, true) // set+get\n *\n * @param {any} input Store key input\n * @param {any} [fallback] Fallback value\n * @param {boolean} [forceSet] Set if missing\n * @returns {any} Stored value\n */\n static get(input, fallback = null, forceSet = false)\n {\n let key = Arr.first(input);\n\n if ( !Obj.has(this.$data, key) && !forceSet ) {\n return fallback;\n }\n\n if ( Obj.has(this.$data, key) && forceSet ) {\n Obj.set(this.$data, key, fallback);\n }\n\n let value = Obj.get(this.$data, key, fallback);\n\n if ( !Mix.isObj(value) ) {\n return value;\n }\n\n return Obj.clone(value);\n }\n\n /**\n * Find item by id in array store\n *\n * @example Data.find([\"list\"], {id:1})\n *\n * @param {any} input Store key input\n * @param {any} value Search value\n * @param {any} [fallback] Fallback value\n * @returns {any} Found item\n */\n static find(input, value, fallback = null)\n {\n let key = Arr.first(input);\n\n if ( Obj.has(this.$data, key) === false ) {\n return fallback;\n }\n\n if ( Obj.has(value, 'id') === false ) {\n return fallback;\n }\n\n let index = Arr.findIndex(this.get(key), {\n id: value.id\n });\n\n if ( index === - 1 ) {\n return fallback;\n }\n\n return this.get(key + '.' + index);\n }\n\n /**\n * Replace item by id in array store\n *\n * @example Data.replace([\"list\"], {id:1})\n *\n * @param {any} input Store key input\n * @param {any} value Item to replace\n * @returns {void} No return value\n */\n static replace(input, value)\n {\n let key = Arr.first(input);\n\n if ( Obj.has(this.$data, key) === false ) {\n return;\n }\n\n if ( Obj.has(value, 'id') === false ) {\n return;\n }\n\n let index = Arr.findIndex(this.get(key), {\n id: Num.int(value.id)\n });\n\n if ( index === - 1 ) {\n return;\n }\n\n this.set(key + '.' + index, value);\n }\n\n /**\n * Add items to array store\n *\n * @example Data.add([\"list\"], 1, 2)\n *\n * @param {any} input Store key input\n * @param {...any} args Items to add\n * @returns {void} No return value\n */\n static add(input, ...args)\n {\n this.set(input, Arr.concat(this.get(input, []), args));\n }\n\n /**\n * Remove items from array store\n *\n * @example Data.remove([\"list\"], 1)\n *\n * @param {any} input Store key input\n * @param {...any} args Items to remove\n * @returns {void} No return value\n */\n static remove(input, ...args)\n {\n this.set(input, Arr.diff(this.get(input, []), args));\n }\n\n}\n\nexport default PicoData;","import { Arr, For, Locale, Mix, Obj } from \"../index.esm.js\";\n\nexport class PicoRoute\n{\n\n static $routes = {};\n\n /**\n * Store route template by key\n *\n * @example Route.set(\"home\", \"/\") // stores\n *\n * @param {string} key Route key\n * @param {string} value Route template\n * @returns {void} No return value\n */\n static set(key, value)\n {\n this.$routes[key] = value;\n }\n\n /**\n * Build route URL from template\n *\n * @example Route.get(\"home\") // => \"/\"\n * @example Route.get(\"/u/:id\", {id:1}) // => \"/u/1\"\n *\n * @param {string} key Route key or url\n * @param {any} [values] Token values\n * @param {any} [query] Query params\n * @returns {string} Built url\n */\n static get(key, values = null, query = null)\n {\n let route = key;\n\n if ( ! /^https?:\\/\\//.test(route) ) {\n route = this.$routes[key] || key\n }\n\n Obj.each(values, (val, key) => {\n route = route.replace(new RegExp('{' + key + '}', 'g'), val);\n });\n\n if ( ! Mix.isEmpty(query) ) {\n route += '?' + For.castParams(query);\n }\n\n return route;\n }\n\n /**\n * Navigate to built route URL\n *\n * @example Route.goto(\"home\")\n *\n * @param {string} key Route key or url\n * @param {any} [values] Token values\n * @param {any} [params] Query params\n * @returns {void} No return value\n */\n static goto(key, values = null, params = null)\n {\n window.location.href = this.get(key, values, params);\n }\n\n}\n\nexport default PicoRoute;","import { go, Obj, Arr, Mix, Dom, Event, Hash } from \"#src/index.esm.js\";\n\n/**\n * @const {object} google\n */\n\nexport class PicoMap\n{\n map = null;\n\n static mapStyle = [];\n\n markers = {};\n\n static markerStyles = {};\n\n cluster = null;\n\n clusterFilter = null;\n\n clusterOptions = {};\n\n static hideMarkers = true;\n\n static closeInfoWindows = true;\n\n /**\n * Create map instance\n *\n * @example new Map(\"#map\", { lat: 0, lng: 0 })\n *\n * @param {any} el Target element\n * @param {any} [options] Map options\n */\n constructor(el, options = {})\n {\n if ( ! globalThis.google ) {\n throw new Error('Google Maps is required for pi.Map');\n }\n\n let center = Obj.only(options, ['lat', 'lng']);\n\n if ( ! Obj.has(options, 'styles') ) {\n options.styles = Map.mapStyle;\n }\n\n options = Obj.assign({ gestureHandling: 'cooperative', scrollwheel: null, zoom: 12, center },\n Obj.except(options, ['lat', 'lng']));\n\n this.map = new globalThis.google.maps.Map(Dom.find(el).get(0), options)\n }\n\n /**\n * Set global map style\n *\n * @example Map.setMapStyle(style)\n *\n * @param {Array<any>} [style] Style array\n * @returns {PicoMap} Current class\n */\n static setMapStyle(style = [])\n {\n Map.mapStyle = style;\n\n return this;\n }\n\n /**\n * Set marker style\n *\n * @example Map.setMarkerStyle(\"default\", { default: \"icon.png\" })\n *\n * @param {string} key Style key\n * @param {any} [style] Style options\n * @param {any} [extra] Extra options\n * @returns {PicoMap} Current class\n */\n static setMarkerStyle(key, style = {}, extra = {})\n {\n if ( ! globalThis.google ) {\n throw new Error('Google Maps is required for pi.Map');\n }\n\n if ( ! Obj.has(style, 'default') ) {\n return console.error('Marker style requires default property')\n }\n\n if ( ! Obj.has(style, 'width') ) {\n style.width = 45;\n }\n\n if ( ! Obj.has(style, 'height') ) {\n style.height = 45;\n }\n\n let final = {};\n\n // Marker size\n let size = new globalThis.google.maps.Size(style.width, style.height);\n\n // Point position\n let origin = new globalThis.google.maps.Point(0, 0);\n\n // Point position\n let anchor = new globalThis.google.maps.Point(style.width / 2, style.height);\n\n final.default = {\n url: style.default, size: size, origin: origin, anchor: anchor, scaledSize: size\n };\n\n if ( Obj.has(style, 'hover') ) {\n final.hover = Obj.assign({}, final.default, { url: style.hover });\n }\n\n if ( ! Obj.has(final, 'hover') ) {\n final.hover = final.default;\n }\n\n if ( Obj.has(style, 'active') ) {\n final.active = Obj.assign({}, final.default, { url: style.active });\n }\n\n if ( ! Obj.has(final, 'active') ) {\n final.active = final.default;\n }\n\n Obj.each(extra, (value, prop) => {\n final[prop] = Obj.assign({}, final.default, { url: value });\n });\n\n Obj.set(Map.markerStyles, key, final);\n\n return this;\n }\n\n /**\n * Cluster map markers\n *\n * @example map.clusterMarkers()\n *\n * @param {any} [options] Cluster options\n * @param {any} [filter] Marker filter\n * @param {boolean} [allowCreate] Create cluster\n * @returns {void} No return value\n */\n clusterMarkers(options = {}, filter = null, allowCreate = true)\n {\n if ( ! this.cluster && ! allowCreate ) {\n return;\n }\n\n if ( typeof globalThis.MarkerClusterer === \"undefined\" ) {\n return console.error('Google Maps Cluster library not laoded!');\n }\n\n if ( ! Obj.has(options, 'imagePath') && ! Obj.has(options, 'styles') ) {\n options.imagePath = '//developers.google.com/maps/documentation/javascript/examples/markerclusterer/m';\n }\n\n if ( this.cluster ) {\n this.cluster.clearMarkers();\n }\n\n if ( Mix.isFunction(filter) ) {\n this.clusterFilter = filter;\n }\n\n let markers = Arr.filter(this.markers, (item) => {\n\n let visible = this.getMarkerVisibility(item.key);\n\n if ( ! Mix.isFunction(this.clusterFilter) ) {\n return visible;\n }\n\n return visible && this.clusterFilter.call(this, item);\n });\n\n this.cluster = new globalThis.MarkerClusterer(this.map, Arr.each(markers, (item) => item.marker),\n this.clusterOptions = options);\n }\n\n /**\n * Apply style to marker\n *\n * @example map.styleMarker(\"m1\", \"hover\")\n *\n * @param {string} key Marker key\n * @param {any} [type] Style type\n * @returns {void} No return value\n */\n styleMarker(key, type = null)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n if ( Mix.isEmpty(type) ) {\n type = this.getInfoVisibility(key) ? 'active' : 'default';\n }\n\n if ( ! Obj.has(Map.markerStyles, [item.style, type]) ) {\n return;\n }\n\n item.marker.setIcon(Obj.get(Map.markerStyles, [item.style, type]));\n }\n\n /**\n * Get marker by key\n *\n * @example map.getMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {any} Marker object\n */\n getMarker(key)\n {\n return Obj.get(this.markers, key);\n }\n\n /**\n * Check if marker is visible\n *\n * @example map.getMarkerVisibility(\"m1\") // => true\n *\n * @param {string} key Marker key\n * @param {boolean} [fallback] Fallback value\n * @returns {boolean} Visibility state\n */\n getMarkerVisibility(key, fallback = false)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return fallback;\n }\n\n return item.marker.getVisible();\n }\n\n /**\n * Get marker position\n *\n * @example map.getMarkerPositon(\"m1\") // => LatLng\n *\n * @param {string} key Marker key\n * @param {any} [fallback] Fallback value\n * @returns {any} Position object\n */\n getMarkerPositon(key, fallback = null)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return fallback;\n }\n\n return item.marker.getPosition();\n }\n\n /**\n * Toggle marker visibility\n *\n * @example map.toggleMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Visibility state\n */\n toggleMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n if ( item.marker.getVisible() ) {\n return this.hideMarker(key);\n }\n\n return this.showMarker(key);\n }\n\n /**\n * Show marker on map\n *\n * @example map.showMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n showMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let hidden = ! item.marker.getVisible();\n\n if ( hidden ) {\n item.marker.setVisible(true);\n }\n\n return hidden;\n }\n\n /**\n * Hide marker on map\n *\n * @example map.hideMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n hideMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let visible = !! item.marker.getVisible();\n\n if ( visible ) {\n item.marker.setVisible(false);\n }\n\n this.closeInfo(key);\n\n return visible;\n }\n\n /**\n * Marker hover enter\n *\n * @example map.enterMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {this|void} Current instance\n */\n enterMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let type = 'hover';\n\n if ( this.getInfoVisibility(key) ) {\n type = 'active';\n }\n\n this.styleMarker(key, type);\n\n return this;\n }\n\n /**\n * Marker hover leave\n *\n * @example map.leaveMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {this|void} Current instance\n */\n leaveMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let type = 'default';\n\n if ( this.getInfoVisibility(key) ) {\n type = 'active';\n }\n\n this.styleMarker(key, type);\n\n return this;\n }\n\n /**\n * Check if info is open\n *\n * @example map.getInfoVisibility(\"m1\") // => true\n *\n * @param {string} key Marker key\n * @param {boolean} [fallback] Fallback value\n * @returns {boolean} Visibility state\n */\n getInfoVisibility(key, fallback = false)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) || ! Obj.has(item, 'info') ) {\n return fallback;\n }\n\n return !! item.info.getMap();\n }\n\n /**\n * Toggle info window\n *\n * @example map.toggleInfo(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Visibility state\n */\n toggleInfo(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n if ( item.info.getMap() ) {\n return this.closeInfo(key);\n }\n\n return this.openInfo(key);\n }\n\n /**\n * Open info window\n *\n * @example map.openInfo(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n openInfo(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`InfoWindow \"${key}\" not found`);\n }\n\n if ( ! Obj.has(item, 'info') ) {\n return true;\n }\n\n let hidden = ! item.info.getMap();\n\n if ( Map.closeInfoWindows ) {\n Obj.each(Mix.keys(this.markers), this.closeInfo.bind(this));\n }\n\n if ( hidden ) {\n item.info.open(this.map, item.marker);\n }\n\n if ( Mix.isFunction(item.onOpen) ) {\n item.onOpen(item);\n }\n\n this.styleMarker(key, 'active');\n\n return hidden;\n }\n\n /**\n * Close info window\n *\n * @example map.closeInfo(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n closeInfo(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`InfoWindow \"${key}\" not found`);\n }\n\n if ( ! Obj.has(item, 'info') ) {\n return false;\n }\n\n let visible = !! item.info.getMap();\n\n if ( visible ) {\n item.info.close();\n }\n\n if ( Mix.isFunction(item.onClose) ) {\n item.onClose(item);\n }\n\n this.styleMarker(key, 'default');\n\n return visible;\n }\n\n /**\n * Create map marker\n *\n * @example map.createMarker(\"m1\", { lat: 0, lng: 0 })\n *\n * @param {any} [key] Marker key\n * @param {any} [options] Marker options\n * @returns {any} Marker object\n */\n createMarker(key = null, options = {})\n {\n if ( Mix.isEmpty(key) ) {\n key = Hash.uuid();\n }\n\n let item = { key };\n\n if ( ! Obj.has(options, 'visible') ) {\n options.visible = true;\n }\n\n item.extras = Obj.except(options, [\n 'map', 'position', 'lat', 'lng', 'html', 'style', 'visible', 'onOpen', 'onClose'\n ]);\n\n if ( ! Obj.has(options, 'map') ) {\n options.map = this.map;\n }\n\n if ( ! Obj.has(options, 'position') ) {\n options.position = Obj.only(options, ['lat', 'lng']);\n }\n\n if ( Obj.has(options, 'style') ) {\n item.style = options.style;\n }\n\n item.marker = new globalThis.google.maps.Marker(options);\n\n if ( !options.visible ) {\n item.marker.setVisible(false);\n }\n\n Obj.assign(item, {\n onOpen: Obj.get(options, 'onOpen'), onClose: Obj.get(options, 'onClose'),\n })\n\n Obj.set(this.markers, key, item);\n\n this.clusterMarkers(this.clusterOptions, null, false);\n\n if ( ! Obj.has(options, 'html') ) {\n return Obj.get(this.markers, key);\n }\n\n if ( ! Obj.has(item, 'style') ) {\n item.style = 'default';\n }\n\n // Style marker\n this.styleMarker(key);\n\n // Add marker hover style\n item.marker.addListener('mouseover', () => this.enterMarker(key));\n\n // Add marker default style\n item.marker.addListener('mouseout', () => this.leaveMarker(key));\n\n item.info = new globalThis.google.maps.InfoWindow({\n content: '<div class=\"gw-i-html\">' + Obj.get(options, 'html') + '</div>'\n });\n\n item.marker.addListener('click', () => this.toggleInfo(key));\n item.info.addListener('closeclick', () => this.closeInfo(key));\n\n // Dom change event\n item.info.addListener('domready', () => Event.fire('MapsDomReady'));\n\n Obj.set(this.markers, key, item);\n\n return Obj.get(this.markers, key);\n }\n\n /**\n * Set marker position\n *\n * @example map.setMarkerPosition(\"m1\", { lat: 0, lng: 0 })\n *\n * @param {string} key Marker key\n * @param {any} [options] Position options\n * @returns {void} No return value\n */\n setMarkerPosition(key, options = {})\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n item.marker.setPosition(options);\n }\n\n /**\n * Set marker by address\n *\n * @example map.setMarkerByAddress(\"m1\", \"Address\")\n *\n * @param {string} key Marker key\n * @param {any} address Search address\n * @returns {Promise<any>} Response promise\n */\n setMarkerByAddress(key, address)\n {\n return this.getLocationByAddress(address, (res) => {\n this.setMarkerPosition(key, Obj.get(res, '0.geometry.location', {}));\n });\n }\n\n /**\n * Get location by address\n *\n * @example map.getLocationByAddress(\"Address\")\n *\n * @param {any} address Search address\n * @param {function} [callback] Success callback\n * @returns {Promise<any>} Response promise\n */\n getLocationByAddress(address, callback = null)\n {\n let geocoderService = new globalThis.google.maps.Geocoder();\n\n let geocoderPromise = (resolve, reject) => {\n\n let geocoderResult = (response, status) => {\n\n if ( status === 'OK' ) {\n callback(response);\n resolve(response);\n }\n\n if ( status !== 'OK' ) {\n reject(response);\n }\n\n };\n\n geocoderService.geocode({ address }, geocoderResult);\n };\n\n return new Promise(geocoderPromise);\n }\n\n /**\n * Show markers on map\n *\n * @example map.showMarkers()\n *\n * @param {any} [filter] Marker filter\n * @returns {PicoMap} Current instance\n */\n showMarkers(filter = null)\n {\n let markers = this.markers;\n\n if ( ! Mix.isEmpty(filter) ) {\n markers = Obj.filter(this.markers, filter);\n }\n\n if ( Map.hideMarkers ) {\n Obj.each(Mix.keys(this.markers), this.hideMarker.bind(this));\n }\n\n Obj.each(markers, (item) => this.showMarker(item.key));\n\n this.clusterMarkers(this.clusterOptions, null, false);\n\n return this;\n }\n\n /**\n * Get marker boundary\n *\n * @example map.getMarkerBoundry() // => LatLngBounds\n *\n * @param {any} [filter] Marker filter\n * @returns {any} Boundary object\n */\n getMarkerBoundry(filter = null)\n {\n let markers = this.markers;\n\n if ( ! Mix.isEmpty(filter) ) {\n markers = Obj.filter(this.markers, filter);\n }\n\n let boundry = new globalThis.google.maps.LatLngBounds();\n\n Obj.each(markers, (item) => {\n if ( item.marker.getVisible() ) {\n boundry.extend(item.marker.getPosition());\n }\n });\n\n return boundry;\n }\n\n /**\n * Focus markers on map\n *\n * @example map.focusMarkers()\n *\n * @param {any} [filter] Marker filter\n * @param {number} [maxZoom] Max zoom level\n * @param {number} [boundSpace] Viewport space\n * @returns {PicoMap} Current instance\n */\n focusMarkers(filter = null, maxZoom = 14, boundSpace = 15)\n {\n let boundry = this.getMarkerBoundry(filter);\n\n // Center map to boundry\n this.map.setCenter(boundry.getCenter());\n\n // Adapt viewport to boundry\n this.map.fitBounds(boundry, boundSpace);\n\n if ( this.map.getZoom() > maxZoom ) {\n this.map.setZoom(maxZoom);\n }\n\n return this;\n }\n\n /**\n * Render directions on map\n *\n * @example map.renderDirections({ origin: \"A\", destination: \"B\" })\n *\n * @param {any} options Render options\n * @returns {Promise<any>} Response promise\n */\n renderDirections(options)\n {\n // Get directions service\n let directionsService = new globalThis.google.maps.DirectionsService();\n\n // Get directions renderer\n let directionsRenderer = new globalThis.google.maps.DirectionsRenderer();\n\n if ( ! Obj.has(options, 'map') ) {\n options.map = this.map;\n }\n\n if ( ! Obj.has(options, 'travelMode') ) {\n options.travelMode = 'DRIVING';\n }\n\n // Set directions map\n directionsRenderer.setMap(options.map);\n\n if ( Obj.has(options, 'panel') && ! Dom.find(options.panel).empty() ) {\n directionsRenderer.setPanel(Dom.find(options.panel).get(0));\n }\n\n options = Obj.only(options, ['origin', 'destination', 'travelMode']);\n\n let directionsPromise = (resolve, reject) => {\n\n let directionsResult = (response, status) => {\n\n if ( status === 'OK' ) {\n directionsRenderer.setDirections(response);\n resolve(response);\n }\n\n if ( status !== 'OK' ) {\n reject(response);\n }\n\n };\n\n directionsService.route(options, directionsResult);\n };\n\n return new Promise(directionsPromise);\n }\n\n}\n\nexport default PicoMap;\n","import { Str, Obj, Dom, Mix, Arr } from \"#src/index.esm.js\";\n\nexport class PicoElement\n{\n /**\n * Prefix for attribute selector.\n */\n static prefix = 'js';\n\n /**\n * Mounted identifier.\n */\n static mount = 'mount';\n\n /**\n * Instance storage.\n */\n static inis = {};\n\n /**\n * Runtime storage.\n */\n static runs = [];\n\n /**\n * Instance storage.\n */\n static invi = [];\n\n /**\n * Listen to scroll events\n *\n * @example PicoElement.listen()\n *\n * @returns {void} No return value\n */\n static listen()\n {\n // Apply dom scroll event\n document.addEventListener(\"scroll\", PicoElement.scroll);\n\n // Apply initial scroll event\n PicoElement.scroll();\n }\n\n /**\n * Handle scroll visibility\n *\n * @example PicoElement.scroll()\n *\n * @returns {void} No return value\n */\n static scroll()\n {\n Arr.each(this.invi, (item, index) => {\n\n if ( ! Dom.find(item.el).inviewY() ) {\n return;\n }\n\n Arr.removeIndex(this.invi, index);\n\n item.cb();\n });\n }\n\n /**\n * Register element alias\n *\n * @example PicoElement.alias(\"tab\", Tab)\n *\n * @param {string} key Alias key\n * @param {any} instance Class instance\n * @returns {PicoElement} Current class\n */\n static alias(key, instance)\n {\n Obj.set(this.inis, key, instance);\n\n return this;\n }\n\n /**\n * Bind element to selector\n *\n * @example PicoElement.bind(\"tab\", \".tabs\")\n *\n * @param {string} key Alias key\n * @param {any} selector Dom selector\n * @param {any} [options] Init options\n * @returns {PicoElement} Current class\n */\n static bind(key, selector, options = {})\n {\n let el = Dom.find(selector), prefix = this.getPrefix(key);\n\n // Add mounted class\n el.addClass(prefix);\n\n let instance = Obj.get(this.inis,\n key, null);\n\n if ( Mix.isEmpty(instance) ) {\n return console.error(`Element \"${key}\" is not defined.`);\n }\n\n let callback = (el, options) => {\n\n let cb = new instance(\n el.get(0), options\n );\n\n PicoElement.runs.push({\n el: el.get(0), prefix: prefix, deamon: cb\n });\n\n\n el.data(prefix, cb);\n\n return cb.bind !== undefined ?\n cb.bind(el.get(0), options) : cb;\n };\n\n // Bind option\n Dom.ready(() => callback.call({}, el, options));\n\n return this;\n }\n\n /**\n * Unbind element from selector\n *\n * @example PicoElement.unbind(\"tab\", \".tabs\")\n *\n * @param {string} key Alias key\n * @param {any} selector Dom selector\n * @param {any} [options] Init options\n * @returns {PicoElement} Current class\n */\n static unbind(key, selector, options = {})\n {\n let el = Dom.find(selector), prefix = this.getPrefix(key);\n\n let instance = Obj.get(this.inis,\n key, null);\n\n if ( Mix.isEmpty(instance) ) {\n return console.error(`Element \"${key}\" is not defined.`);\n }\n\n let callback = (el, options) => {\n\n let cb = el.data(prefix);\n\n if ( cb.unbind === undefined ) {\n return;\n }\n\n return cb.unbind(el.get(0), options);\n };\n\n // Unbind option\n callback.call({}, el, options);\n\n Arr.remove(PicoElement.runs, { el: el.get(0) });\n\n return this;\n }\n\n\n /**\n * Observe DOM changes\n *\n * @example PicoElement.observe(\"tab\")\n *\n * @param {string} key Alias key\n * @param {boolean} [plain] Plain options\n * @returns {PicoElement} Current class\n */\n static observe(key, plain = false)\n {\n let selector = this.getPrefix(key);\n\n let options = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [selector]\n };\n\n let callback = () => {\n\n let mounted = PicoElement.getPrefix(key);\n\n let deamons = Arr.filter(this.runs,\n { prefix: selector });\n\n Arr.each(deamons, ({ el }) => {\n\n let options = Str.objectify(\n Dom.find(el).attr(selector)\n );\n\n if ( plain && Mix.isEmpty(options) ) {\n options = { _plain: Dom.find(el).attr(selector) };\n }\n\n let inview = Obj.pluck(options, 'inview', false);\n\n if ( inview ) {\n Arr.remove(this.invi, { el });\n }\n\n if ( document.body.contains(el) ) {\n return;\n }\n\n return this.unbind(key, el, options)\n });\n\n Dom.find(`[${selector}]:not(.${mounted})`).each((el) => {\n\n let options = Str.objectify(\n Dom.find(el).attr(selector)\n );\n\n if ( plain && Mix.isEmpty(options) ) {\n options = { _plain: Dom.find(el).attr(selector) };\n }\n\n let inview = Obj.pluck(options, 'inview', false);\n\n let bindCb = () => {\n this.bind(key, el, options);\n };\n\n inview ? this.bindInview(el, bindCb) : bindCb();\n });\n\n };\n\n Dom.find(document.body).observer(callback)\n (document.body, options);\n\n Dom.find(document.body).on('dom.change', callback);\n\n return this;\n }\n\n /**\n * Bind element on inview\n *\n * @example PicoElement.bindInview(el, cb)\n *\n * @param {Element} el Target element\n * @param {function} cb Callback fn\n * @returns {void} No return value\n */\n static bindInview(el, cb)\n {\n Arr.add(this.invi, { el, cb }, { el });\n }\n\n /**\n * Unbind element on inview\n *\n * @example PicoElement.unbindInview(el, cb)\n *\n * @param {Element} el Target element\n * @param {function} cb Callback fn\n * @returns {void} No return value\n */\n static unbindInview(el, cb)\n {\n Arr.remove(this.invi, { el, cb }, { el });\n }\n\n\n\n /**\n * Get attribute prefix\n *\n * @example PicoElement.getPrefix(\"tab\") // => \"js-tab\"\n *\n * @param {string} [key] Alias key\n * @returns {string} Attribute prefix\n */\n static getPrefix(key)\n {\n return key ? this.prefix + '-' + key : this.prefix;\n }\n\n /**\n * Set attribute prefix\n *\n * @example PicoElement.setPrefix(\"pi\")\n *\n * @param {string} prefix New prefix\n * @returns {void} No return value\n */\n static setPrefix(prefix)\n {\n this.prefix = prefix;\n }\n\n}\n\nexport default PicoElement;\n","import { PicoRunner, default as Run } from \"./utils/Runner.js\";\nimport { PicoString, default as Str } from \"./utils/String.js\";\nimport { PicoNumber, default as Num } from \"./utils/Number.js\";\nimport { PicoArray, default as Arr } from \"./utils/Array.js\";\nimport { PicoObject, default as Obj } from \"./utils/Object.js\";\nimport { PicoMixed, default as Mix } from \"./utils/Mixed.js\";\nimport { PicoHash, default as Hash } from \"./utils/Hash.js\";\nimport { PicoEvent, default as Event } from \"./utils/Event.js\";\nimport { PicoLocale, default as Locale } from \"./utils/Locale.js\";\nimport { PicoCookie, default as Cookie } from \"./utils/Cookie.js\";\n\n/**\n * @type {typeof PicoDom}\n */\nconst Dom = DomBuilder();\n\n/**\n * @type {typeof PicoNow}\n */\nconst Now = NowBuilder();\n\n/**\n * @type {typeof PicoFormat}\n */\nconst For = ForBuilder();\n\nexport {\n Dom, Now, For, Run, Str, Num, Arr, Obj, Mix, Hash, Event, Locale, Cookie\n}\n\nimport { PicoDom, default as DomBuilder } from \"./utils/Dom.js\";\nimport { PicoNow, default as NowBuilder } from \"./utils/Now.js\";\nimport { PicoFormat, default as ForBuilder } from \"./utils/Format.js\";\n\nimport { go, browser, device } from \"./tool/scope.js\";\nexport { go, browser, device };\n\n// You will be removed soon\nimport { default as Data } from \"./utils/Data.js\";\nimport { default as Route } from \"./utils/Route.js\";\n\nexport {\n Map, Data\n}\n\n// Work in progress (not started yet)\nimport { default as Map } from \"./wip/Map.js\";\nimport { default as Element } from \"./wip/Element.js\";\n\nexport {\n Route, Element\n}\n\n/**\n * @type {typeof PicoMixed}\n */\nexport const Any = new Proxy({}, {\n get: function (target, prop) {\n console.warn(`Any.${prop} is deprecated, use Mix.${prop}() instead.`);\n return (...args) => Mix[prop](...args);\n }\n});\n\n/**\n * @returns {string}\n */\nexport const UUID = function () {\n console.warn('UUID() is deprecated, use Hash.make() instead.');\n return Hash.make();\n};","import * as pi from \"./index.esm.js\";\n\n/**\n * @typedef {Object} PicoLibrary\n * @property {function(): *} [go]\n * @property {function(): void} [browser]\n * @property {function(): void} [device]\n * @property {PicoDom} [Dom]\n * @property {PicoNow} [Now]\n * @property {PicoFormat} [For]\n * @property {PicoArray} [Arr]\n * @property {PicoMixed} [Mix]\n * @property {PicoNumber} [Num]\n * @property {PicoObject} [Obj]\n * @property {PicoRunner} [Run]\n * @property {PicoString} [Str]\n * @property {PicoHash} [Hash]\n * @property {PicoEvent} [Event]\n * @property {PicoLocale} [Locale]\n * @property {PicoCookie} [Cookie]\n * @property {PicoData} [Data]\n * @property {PicoRoute} [Route]\n * @property {PicoMap} [Map]\n * @property {PicoElement} [Element]\n */\n\n/**\n * @type {PicoLibrary}\n */\nglobalThis.pi = pi;"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","PicoRunner","clear","timer","Mix","isArr","Arr","each","t","isFunc","clearTimeout","clearInterval","tryin","cb","requestIdleCallback","wait","fn","intval","limit","idler","setTimeout","setInterval","frame","args","requestAnimationFrame","idle","async","delay","debounce","timeout","throttle","queued","framerate","fps","last","Date","now","framebuffer","order","replace","$buffer","active","preventDefault","runFramebuffer","$idler","$timer","buffer","filter","length","sort","item","_defineProperty","PicoString","index","isStr","str","isInt","int","charAt","set","substring","search","isNull","indexOf","extract","range","slice","match","pattern","result","isEmpty","regex","val","uc","toUpperCase","ucfirst","lc","toLowerCase","lcfirst","cc","For","slugify","split","v","i","join","kc","sc","pc","has","fallback","start","string","empty","html","boolean","yes","no","bool","number","fixed","locale","config","isNum","Locale","code","_objectSpread","maximumFractionDigits","minimumFractionDigits","num","toLocaleString","integer","leading","padding","padStart","datetime","format","isDate","Now","make","valid","date","time","objectify","mode","toarray","isRef","parseParams","parseOptions","JSON","parse","vals","stringify","castParams","castOptions","_PicoString","regexEscape","console","warn","Str","humancase","pascalcase","options","fromOptions","params","fromParams","filesize","real","error","array","PicoNumber","decimals","toFixed","float","parseFloat","parseInt","ceil","Math","floor","round","combine","reduce","acc","subtract","decade","matrix","base","pow","push","distance","cord1","cord2","miles","cord","lat","lng","radlat1","PI","radlat2","radtheta","dist","sin","cos","acos","random","Hash","PicoArray","all","target","splice","unset","Array","isPrim","findIndex","unique","keys","lengths","first","second","third","retval","isObj","eachObj","map","recursive","cascade","recursiveObj","clone","filterIndex","includes","filterRemove","indexes","splices","find","sortFunc","sortDeep","sortPrim","a","b","compare","Obj","merge","concat","prepend","unshift","append","add","finder","remove","toggle","insert","indexies","diff","c","isect","callback","accumulator","chunk","res","contains","arr","matches","removeIndex","sortString","equal","diffrence","intersect","PicoObject","keyoptim","flatten","isstr","undefined","list","pop","nested","mod","src","String","prefix","flattenForm","unpack","assign","pluck","only","except","isFunction","va","vb","values","MIX_REGEX","PicoMixed","len","isUndef","isNix","test","isBool","constructor","isIter","entries","isIsoDate","iso","isTime","isEqual","Node","isEqualNode","is","iter","go","chrome","nodes","props","exclude","getOwnPropertyNames","class","proto","form","FormData","Error","collator","null","toString","NaN","_PicoMixed","global","isPlain","Run","convertString","convertDatetime","convertBool","convertBoolean","RADIX_UUID","RADIX_UP19","radix_symbol_pass","PicoHash","radix","RADIX","hash","k","uuid","version","password","symbols","PicoEvent","bind","event","paused","arguments","id","$events","unbind","fire","events","pause","unpause","PicoLocale","$text","$code","navigator","language","$sort","Intl","Collator","numeric","sensitivity","text","RegExp","trans","choice","count","countpick","splits","COOKIE_REGEX","entry","PicoCookie","document","cookie","fresh","$cookie","matchAll","from","groups","replaceAll","decode","expire","expires","toUTC","path","plain","forget","PicoDomFinderStatic","filterNodes","el","nodeType","getNodePoint","posx","posy","Dom","doc","elementsFromPoint","msElementsFromPoint","getNodeEvent","selector","srcElement","type","clientX","clientY","closest","PicoDomFinderInstance","_constructFinder","querySelectorAll","NodeList","getNodeType","getNodeParent","parentNode","getNodePrev","previousSibling","getNodeNext","nextSibling","getNodeChilds","childs","childNodes","sanatize","els","Window","body","offset","loopParent","boundry","win","parent","child","prev","next","visible","above","inside","isParent","previous","where","not","getNot","PicoDomFormStatic","PicoDomFormInstance","PicoDomEventStatic","PicoDomEventInstance","addEventListener","reverse","removeEventListener","on","off","optoff","removeAllListeners","once","live","Event","dispatchEvent","one","delayed","PicoDomBuilderStatic","createElement","ini","PicoDomBuilderInstance","prependTo","appendTo","insertBefore","removeChild","PicoDomGlobalStatic","getDomState","readyState","isDomReady","isDomComplete","state","ready","complete","required","PicoDomGlobalInstance","isNodeComplete","naturalWidth","naturalHeight","loaded","PicoDomRectangleStatic","PicoDomRectangleInstance","margin","computed","top","marginTop","right","marginRight","bottom","marginBottom","left","marginLeft","paddingTop","paddingRight","paddingBottom","paddingLeft","height","innerHeight","offsetHeight","clientHeight","scrollHeight","pad","realHeight","style","actual","evaluateHeight","apply","display","width","innerWidth","offsetWidth","clientWidth","scrollWidth","realWidth","evaluateWidth","getOffset","offsetTop","offsetBottom","offsetLeft","offsetRight","loopOffset","offsetParent","calcOffset","size","source","scroll","getScroll","scrollTop","scrollLeft","pageYOffset","pageXOffset","loopOffsetParent","scrollTopGlobal","scrollLeftGlobal","PicoDomAttributeStatic","PicoDomAttributeInstance","attr","getAttribute","removeAttribute","setAttribute","data","getComputedStyle","styles","classes","innerHTML","backup","hasClass","cls","addClass","className","remClass","toggleClass","stateClass","css","removeClass","PicoDomInviewStatic","inviewMaxY","isString","multiple","threshold","isInviewY","inviewMaxX","isInviewX","PicoDomInviewInstance","viewoffX","bot","viewport","max","inviewX","viewoffY","inview","min","inratioX","inviewY","inratioY","inviewHeight","inviewWidth","PicoDomMetaStatic","setMetaTitle","glue","$meta","title","PicoDomMetaInstance","PicoDomObserverStatic","PicoDomObserverInstance","PicoDomPlugins","self","init","PicoDom","extend","plugin","NOW_MODIFY","PicoNowDefaultInstance","scope","getTime","getSeconds","getMinutes","getHours","getDay","getDate","getMonth","getFullYear","day","setTime","setSeconds","setMinutes","setHours","setDate","setMonth","setFullYear","minute","hour","month","year","shortyear","sub","isModifible","modify","f","applyDate","applyTime","addSecond","subSecond","addMinute","subMinute","addHour","subHour","addDates","subDates","addMonths","subMonths","addYears","subYears","addDecades","subDecades","humanDay","humanMonth","NOW_FORMAT","NOW_PARSE","PicoNowFormatInstance","isParsable","parseFormat","human","PicoNowMatchInstance","before","beforeDate","beforeTime","after","afterDate","afterTime","equalDate","equalTime","between","end","dates","PicoNowGridInstance","grid","getSecondsGrid","getMinutesGrid","getHoursGrid","getDaysGrid","getDatesGrid","getMonthsGrid","getYearsGrid","getDecadesGrid","interval","getYears","getMonths","getDates","PicoNowWalkerInstance","prevSecond","nextSecond","prevMinute","nextMinute","prevHour","nextHour","prevDate","nextDate","prevMonth","nextMonth","prevYear","nextYear","prevDecade","nextDecade","firstSecond","firstMinute","firstHour","firstDay","firstDate","firstMonth","firstYear","firstDecade","lastSecond","lastMinute","lastHour","lastDay","lastDate","lastMonth","lastYear","lastDecade","nthYear","n","nthDecade","PicoNowRangeInstance","getDatesRange","NOW_HUMAN_DAYS","NOW_HUMAN_MONTHS","PicoNowHumanInstance","substr","getHumanDay","getHumanMonth","PicoNowPlugins","PicoNow","input","toDate","reset","isNaN","toUTCString","resetTime","TYPE_PARSERS","TYPE_CASTERS","PicoFormatParserStatic","keyed","parsed","parsers","casted","encode","casters","encodeURI","PARAM_REGEX","PicoFormatParamStatic","castParam","decodeURIComponent","OPTION_REGEX","PicoFormatOptionStatic","space","castOption","div","SLUG_CONVERT","PicoFormatUrlStatic","FILE_UNITS","PicoFormatFileStatic","Num","PicoFormatPlugins","PicoFormat","browser","agent","userAgent","safari","firefox","edge","piuag","device","osx","gnu","ios","oid","piudv","PicoData","$data","stored","forceSet","PicoRoute","$routes","query","route","goto","location","href","PicoMap","google","center","Map","mapStyle","gestureHandling","scrollwheel","zoom","maps","setMapStyle","setMarkerStyle","extra","final","Size","origin","Point","anchor","default","url","scaledSize","hover","markerStyles","clusterMarkers","allowCreate","cluster","MarkerClusterer","imagePath","clearMarkers","clusterFilter","markers","getMarkerVisibility","marker","clusterOptions","styleMarker","getInfoVisibility","setIcon","getMarker","getVisible","getMarkerPositon","getPosition","toggleMarker","hideMarker","showMarker","hidden","setVisible","closeInfo","enterMarker","leaveMarker","info","getMap","toggleInfo","openInfo","closeInfoWindows","open","onOpen","close","onClose","createMarker","extras","position","Marker","addListener","InfoWindow","content","setMarkerPosition","setPosition","setMarkerByAddress","address","getLocationByAddress","geocoderService","Geocoder","Promise","geocoderPromise","resolve","reject","geocode","geocoderResult","response","status","showMarkers","hideMarkers","getMarkerBoundry","LatLngBounds","focusMarkers","maxZoom","boundSpace","setCenter","getCenter","fitBounds","getZoom","setZoom","renderDirections","directionsService","DirectionsService","directionsRenderer","DirectionsRenderer","travelMode","setMap","panel","setPanel","directionsPromise","directionsResult","setDirections","PicoElement","listen","invi","alias","instance","inis","getPrefix","runs","deamon","observe","childList","subtree","attributes","attributeFilter","mounted","deamons","_plain","bindCb","bindInview","observer","unbindInview","setPrefix","DomBuilder","NowBuilder","ForBuilder","Any","Proxy","UUID","pi"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"pico-js.browser.js","mappings":"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","sources":["webpack://@kizmann/pico-js/webpack/bootstrap","webpack://@kizmann/pico-js/webpack/runtime/define property getters","webpack://@kizmann/pico-js/webpack/runtime/global","webpack://@kizmann/pico-js/webpack/runtime/hasOwnProperty shorthand","webpack://@kizmann/pico-js/webpack/runtime/make namespace object","webpack://@kizmann/pico-js/./src/utils/Runner.js","webpack://@kizmann/pico-js/./src/utils/String.js","webpack://@kizmann/pico-js/./src/utils/Number.js","webpack://@kizmann/pico-js/./src/utils/Array.js","webpack://@kizmann/pico-js/./src/utils/Object.js","webpack://@kizmann/pico-js/./src/utils/Mixed.js","webpack://@kizmann/pico-js/./src/utils/Hash.js","webpack://@kizmann/pico-js/./src/utils/Signal.js","webpack://@kizmann/pico-js/./src/utils/Locale.js","webpack://@kizmann/pico-js/./src/utils/Cookie.js","webpack://@kizmann/pico-js/./src/dom/DomFinder.js","webpack://@kizmann/pico-js/./src/dom/DomForm.js","webpack://@kizmann/pico-js/./src/dom/DomEvent.js","webpack://@kizmann/pico-js/./src/dom/DomBuilder.js","webpack://@kizmann/pico-js/./src/dom/DomGlobal.js","webpack://@kizmann/pico-js/./src/dom/DomRectangle.js","webpack://@kizmann/pico-js/./src/dom/DomAttribute.js","webpack://@kizmann/pico-js/./src/dom/DomInview.js","webpack://@kizmann/pico-js/./src/dom/DomMeta.js","webpack://@kizmann/pico-js/./src/dom/DomObserver.js","webpack://@kizmann/pico-js/./src/dom/DomPopover.js","webpack://@kizmann/pico-js/./src/utils/Dom.js","webpack://@kizmann/pico-js/./src/now/NowDefault.js","webpack://@kizmann/pico-js/./src/now/NowFormat.js","webpack://@kizmann/pico-js/./src/now/NowMatch.js","webpack://@kizmann/pico-js/./src/now/NowGrid.js","webpack://@kizmann/pico-js/./src/now/NowWalker.js","webpack://@kizmann/pico-js/./src/now/NowRange.js","webpack://@kizmann/pico-js/./src/now/NowHuman.js","webpack://@kizmann/pico-js/./src/utils/Now.js","webpack://@kizmann/pico-js/./src/format/FormatParser.js","webpack://@kizmann/pico-js/./src/format/FormatParam.js","webpack://@kizmann/pico-js/./src/format/FormatOption.js","webpack://@kizmann/pico-js/./src/format/FormatUrl.js","webpack://@kizmann/pico-js/./src/format/FormatFile.js","webpack://@kizmann/pico-js/./src/utils/Format.js","webpack://@kizmann/pico-js/./src/tool/scope.js","webpack://@kizmann/pico-js/./src/utils/Data.js","webpack://@kizmann/pico-js/./src/utils/Route.js","webpack://@kizmann/pico-js/./src/wip/Map.js","webpack://@kizmann/pico-js/./src/wip/Element.js","webpack://@kizmann/pico-js/./src/index.esm.js","webpack://@kizmann/pico-js/./src/index.browser.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Arr, Hash, Mix, Obj } from \"../index.esm.js\";\n\nexport class PicoRunner\n{\n static $idler = null;\n\n static $timer = 0;\n\n static $buffer = [];\n\n /**\n * Clear timer or call function\n *\n * @example Run.clear(timer)\n *\n * @param {any} timer Timer ID, array of IDs, or function\n * @returns {typeof PicoRunner} Static class\n */\n static clear(timer)\n {\n if ( Mix.isArr(timer) ) {\n return Arr.each(timer, (t) => this.clear(t), this);\n }\n\n if ( Mix.isFunc(timer) ) {\n return (timer(), this);\n }\n\n clearTimeout(timer);\n clearInterval(timer);\n\n return this;\n }\n\n /**\n * Request idle callback with fallback\n *\n * @param {function} cb Callback function\n * @returns {typeof PicoRunner} Static class\n */\n static tryin(cb)\n {\n try {\n requestIdleCallback(cb);\n } catch (e) {\n //\n }\n\n return this;\n }\n\n /**\n * Wait for condition to be true\n *\n * @example Run.wait(() => window.foo, 10, 100)\n *\n * @param {function} fn Condition function\n * @param {number} [intval] Interval ms\n * @param {number} [limit] Max iterations\n * @returns {function} Clear function\n */\n static wait(fn, intval = 0, limit = 500)\n {\n let idler, timer;\n\n timer = setTimeout(() => {\n this.clear([idler, timer]);\n }, intval * limit);\n\n idler = setInterval(() => {\n if ( fn() ) this.clear([timer, idler]);\n }, intval);\n\n return () => clearInterval(idler);\n }\n\n /**\n * Run function in next animation frame\n *\n * @example Run.frame(cb)\n *\n * @param {function} fn Callback function\n * @param {any} [...args] Callback arguments\n * @returns {function} Noop clear function\n */\n static frame(fn, ...args)\n {\n requestAnimationFrame(() => {\n fn(...args)\n });\n\n return () => null;\n }\n\n /**\n * Run function when browser is idle\n *\n * @example Run.idle(cb)\n *\n * @param {function} fn Callback function\n * @param {any} [...args] Callback arguments\n * @returns {function} Noop clear function\n */\n static idle(fn, ...args)\n {\n requestIdleCallback(() => {\n fn(...args)\n });\n\n return () => null;\n }\n\n /**\n * Run function asynchronously\n *\n * @example Run.async(cb)\n *\n * @param {function} fn Callback function\n * @param {any} [...args] Callback arguments\n * @returns {function} Noop clear function\n */\n static async(fn, ...args)\n {\n setTimeout(() => {\n fn(...args)\n });\n\n return () => null;\n }\n\n /**\n * Run function after delay\n *\n * @example Run.delay(cb, 100)\n *\n * @param {function} fn Callback function\n * @param {number} [delay] Delay ms\n * @param {any} [...args] Callback arguments\n * @returns {function} Clear function\n */\n static delay(fn, delay = 0, ...args)\n {\n let idler = setTimeout(() => {\n fn(...args);\n }, delay);\n\n return () => clearTimeout(idler);\n }\n\n /**\n * Create debounced callback\n *\n * @example const fn = Run.debounce(cb, 100)\n *\n * @param {function} cb Callback to run\n * @param {number} [timeout] Wait ms\n * @returns {function} Debounced fn\n */\n static debounce(cb, timeout = 100)\n {\n let idler = null;\n\n return (...args) => {\n\n if ( idler ) {\n clearTimeout(idler);\n }\n\n idler = setTimeout(() => {\n this.frame(cb, ...args);\n }, timeout);\n };\n }\n\n /**\n * Create throttled callback\n *\n * @example const fn = Run.throttle(cb, 100)\n *\n * @param {function} cb Callback to run\n * @param {number} [timeout] Wait ms\n * @returns {function} Throttled fn\n */\n static throttle(cb, timeout = 100)\n {\n let queued, idler = null;\n\n return (...args) => {\n\n if ( idler ) {\n clearTimeout(idler);\n }\n\n idler = setTimeout(() => {\n queued = false;\n }, timeout);\n\n if ( queued ) {\n return;\n }\n\n (this.frame(cb, ...args), queued = true);\n };\n }\n\n /**\n * Create framerate-limited callback\n *\n * @example const fn = Run.framerate(cb, 30)\n *\n * @param {function} cb Callback to run\n * @param {number} [fps] Max frames per sec\n * @returns {function} Rate-limited fn\n */\n static framerate(cb, fps = 30)\n {\n let last = 0;\n\n return (...args) => {\n\n if ( Date.now() - last <= (1000 / fps) ) {\n return;\n }\n\n (this.frame(cb, ...args), last = Date.now());\n };\n }\n\n /**\n * Buffer events into single frame\n *\n * @example el.onwheel = Run.framebuffer(cb,\"wheel\")\n *\n * @param {function} cb Callback to run\n * @param {string} key Buffer key\n * @param {number} [priority] Sort priority\n * @returns {function} Buffered handler\n */\n static framebuffer(cb, key, priority = 1000)\n {\n const item = {\n key, cb, priority, args: [], active: false\n };\n\n Arr.add(this.$buffer, item);\n\n return (e, ...args) => {\n\n if ( /^drag/.test(e.type) ) {\n e.preventDefault();\n }\n\n Obj.assign(item, {\n args: [e, ...args], active: true\n });\n\n this.runFramebuffer();\n };\n }\n\n /**\n * Flush buffered frame events\n *\n * @example Run.runFramebuffer() // flush\n *\n * @returns {void} No return value\n */\n static runFramebuffer()\n {\n if ( this.$idler ) {\n clearTimeout(this.$idler);\n }\n\n this.$idler = setTimeout(() => {\n this.runFramebuffer();\n }, 50);\n\n if ( Date.now() - this.$timer < 50 ) {\n return;\n }\n\n if ( this.$idler ) {\n clearTimeout(this.$idler);\n }\n\n this.$timer = Date.now();\n\n let buffer = Arr.filter(this.$buffer, {\n active: true\n });\n\n if ( buffer.length === 0 ) {\n return;\n }\n\n buffer = Arr.sort(buffer, 'priority');\n\n Arr.each(buffer.reverse(), (item) => {\n item.cb(...item.args); item.active = false;\n });\n }\n\n}\n\nexport default PicoRunner;","import { Arr, For, Locale, Mix, Now, Str } from \"../index.esm.js\";\n\nexport class PicoString\n{\n /**\n * Get character at index\n *\n * @example Str.get(\"abc\", 1) // => \"b\"\n *\n * @param {any} value Input string\n * @param {any} index Char index\n * @returns {string} Single char\n */\n static get(value, index)\n {\n if ( ! Mix.isStr(value) ) {\n value = Mix.str(value);\n }\n\n if ( Mix.isInt(index) ) {\n index = Mix.int(index);\n }\n\n return value.charAt(index);\n }\n\n /**\n * Replace substring at index\n *\n * @example Str.set(\"abc\", 1, \"X\") // => \"aXc\"\n *\n * @param {any} value Input string\n * @param {any} index Start index\n * @param {string} [replace] Replace value\n * @returns {string} Updated string\n */\n static set(value, index, replace = '')\n {\n if ( ! Mix.isStr(value) ) {\n value = Mix.str(value);\n }\n\n if ( Mix.isInt(index) ) {\n index = Mix.int(index);\n }\n\n return value.substring(0, index) + replace +\n value.substring(index + replace.length);\n }\n\n /**\n * Replace first occurrence\n *\n * @example Str.replace(\"abc\", \"X\", \"b\") // => \"aXc\"\n *\n * @param {any} value Input string\n * @param {string} replace Replace value\n * @param {any} [search] Search value\n * @returns {string} Updated string\n */\n static replace(value, replace, search = null)\n {\n if ( Mix.isNull(search) ) {\n search = value;\n }\n\n let index = search.indexOf(replace);\n\n if ( index === -1 ) {\n return value;\n }\n\n return this.set(value, index, replace);\n }\n\n /**\n * Extract substring by range\n *\n * @example Str.extract(\"abc\", \"b\") // => \"b\"\n *\n * @param {any} value Input string\n * @param {string} replace Search value\n * @param {any} [search] Match source\n * @returns {string|null} Extracted string\n */\n static extract(value, replace, search = null)\n {\n if ( Mix.isNull(search) ) {\n search = value;\n }\n\n let index = this.range(search, replace);\n\n if ( index === null ) {\n return null;\n }\n\n return this.slice(value, ...index);\n }\n\n /**\n * Match pattern in string\n *\n * @example Str.match(\"abc\", /b/) // => [\"b\"]\n *\n * @param {any} value Input string\n * @param {RegExp|string} pattern Match pattern\n * @param {any} [cb] Callback fn\n * @returns {any} Match result\n */\n static match(value, pattern, cb = null)\n {\n let result = Mix.str(value).match(pattern);\n\n if ( Mix.isEmpty(result) ) {\n return [];\n }\n\n return Mix.isFunc(cb) ? cb(result) : result;\n }\n\n /**\n * Escape regex characters\n *\n * @example Str.regex(\"a.b\") // => \"a\\\\.b\"\n *\n * @param {any} val Input string\n * @returns {string} Escaped string\n */\n static regex(val)\n {\n return Mix.str(val).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n /**\n * Convert to uppercase\n *\n * @example Str.uc(\"abc\") // => \"ABC\"\n *\n * @param {any} value Input string\n * @returns {string} Uppercase string\n */\n static uc(value)\n {\n return Mix.str(value).toUpperCase();\n }\n\n /**\n * @see PicoString.uc\n */\n static upper = PicoString.uc;\n\n /**\n * Uppercase first character\n *\n * @example Str.ucfirst(\"abc\") // => \"Abc\"\n *\n * @param {string} value Input string\n * @returns {string} Updated string\n */\n static ucfirst(value)\n {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n /**\n * Convert to lowercase\n *\n * @example Str.lc(\"ABC\") // => \"abc\"\n *\n * @param {any} value Input string\n * @returns {string} Lowercase string\n */\n static lc(value)\n {\n return Mix.str(value).toLowerCase();\n }\n\n /**\n * @see PicoString.lc\n */\n static lower = PicoString.lc;\n\n /**\n * Lowercase first character\n *\n * @example Str.lcfirst(\"ABC\") // => \"aBC\"\n *\n * @param {string} value Input string\n * @returns {string} Updated string\n */\n static lcfirst(value)\n {\n return value.charAt(0).toLowerCase() + value.slice(1);\n }\n\n /**\n * Convert to camelCase\n *\n * @example Str.cc(\"hello-world\") // => \"helloWorld\"\n *\n * @param {string} value Input string\n * @returns {string} camelCase string\n */\n static cc(value)\n {\n let splits = Arr.each(For.slugify(value).split('-'), (v, i) => {\n return i ? this.ucfirst(v) : v;\n });\n\n return splits.join('');\n }\n\n /**\n * @see PicoString.cc\n */\n static camelcase = PicoString.cc;\n\n /**\n * Convert to kebab-case\n *\n * @example Str.kc(\"helloWorld\") // => \"hello-world\"\n *\n * @param {string} value Input string\n * @returns {string} kebab-case string\n */\n static kc(value)\n {\n return For.slugify(value);\n }\n\n /**\n * @see PicoString.kc\n */\n static kebabcase = PicoString.kc;\n\n /**\n * Convert to snake_case\n *\n * @example Str.sc(\"helloWorld\") // => \"hello_world\"\n *\n * @param {string} value Input string\n * @returns {string} snake_case string\n */\n static sc(value)\n {\n return For.slugify(value).replace('-', '_');\n }\n\n /**\n * @see PicoString.sc\n */\n static snakecase = PicoString.sc;\n\n /**\n * Convert to PascalCase\n *\n * @example Str.pc(\"hello-world\") // => \"HelloWorld\"\n *\n * @param {string} value Input string\n * @returns {string} PascalCase string\n */\n static pc(value)\n {\n let splits = Arr.each(For.slugify(value).split('-'), (v) => {\n return this.ucfirst(v);\n });\n\n return splits.join('');\n }\n\n /**\n * @see PicoString.pc\n */\n static pascalcase = PicoString.pc;\n\n /**\n * Check if string contains value\n *\n * @example Str.has(\"abc\", \"b\") // => true\n *\n * @param {string} value Input string\n * @param {string} search Search string\n * @returns {boolean} True if found\n */\n static has(value, search)\n {\n return this.lc(value).indexOf(this.lc(search)) !== -1;\n }\n\n /**\n * Get index range of search\n *\n * @example Str.range(\"abc\", \"b\") // => [1, 2]\n *\n * @param {any} value Input string\n * @param {string} search Search string\n * @param {any} [fallback] Fallback value\n * @returns {Array<number>|any} Index range\n */\n static range(value, search, fallback = null)\n {\n let index = Mix.str(value).indexOf(search);\n\n if ( index === -1 ) {\n return fallback;\n }\n\n return [index, index + search.length];\n }\n\n /**\n * Extract substring by range\n *\n * @example Str.slice(\"abc\", 1, 2) // => \"b\"\n *\n * @param {any} value Input string\n * @param {number} start Start index\n * @param {number} limit End index\n * @returns {string} Sliced string\n */\n static slice(value, start, limit)\n {\n return Mix.str(value).slice(start, limit);\n }\n\n /**\n * Get string representation\n *\n * @example Str.string(\"<b>a</b>\") // => \"a\"\n *\n * @param {any} value Input value\n * @param {any} [empty] Empty fallback\n * @param {boolean} [html] Keep HTML\n * @returns {string} String value\n */\n static string(value, empty = '-', html = false)\n {\n if ( Mix.isEmpty(value) ) {\n return empty;\n }\n\n value = Mix.str(value);\n\n if ( html ) {\n return value;\n }\n\n return value.replace(/<[^>]*>?/gm, '');\n }\n\n /**\n * Get boolean representation\n *\n * @example Str.boolean(true) // => \"Yes\"\n *\n * @param {any} value Input value\n * @param {string} [yes] True string\n * @param {string} [no] False string\n * @param {any} [empty] Empty fallback\n * @returns {string|any} Boolean string\n */\n static boolean(value, yes = 'Yes', no = 'No', empty = '-')\n {\n if ( Mix.isEmpty(value) ) {\n return empty;\n }\n\n return Mix.bool(value) ? yes : no;\n }\n\n /**\n * Get formatted number\n *\n * @example Str.number(1234.56, 1) // => \"1,234.6\"\n *\n * @param {any} value Input value\n * @param {number} [fixed] Decimal points\n * @param {string} [locale] Locale code\n * @param {any} [config] Format config\n * @returns {string|any} Formatted string\n */\n static number(value, fixed = null, locale = null, config = {})\n {\n if ( ! Mix.isNum(value) ) {\n return value;\n }\n\n if ( locale == null ) {\n locale = Locale.code();\n }\n\n config = {\n maximumFractionDigits: 12, ...config\n };\n\n if ( fixed != null ) {\n config.minimumFractionDigits = fixed;\n config.maximumFractionDigits = fixed;\n }\n\n return Mix.num(value).toLocaleString(locale, config);\n }\n\n /**\n * Get formatted integer\n *\n * @example Str.integer(1, 2) // => \"01\"\n *\n * @param {any} value Input value\n * @param {number} [leading] Leading zeros\n * @param {string} [padding] Padding char\n * @returns {string|any} Formatted string\n */\n static integer(value, leading = 0, padding = '0')\n {\n if ( ! Mix.isNum(value) ) {\n return value;\n }\n\n if ( ! Mix.isInt(value) ) {\n value = Mix.int(value);\n }\n\n value = Mix.int(value);\n\n if ( ! leading ) {\n return Mix.str(value);\n }\n\n return Mix.str(value).padStart(leading, padding);\n }\n\n /**\n * Get formatted datetime\n *\n * @example Str.datetime(\"2026-01-01\", \"DD.MM.YYYY\")\n *\n * @param {any} value Input value\n * @param {string} [format] Output format\n * @param {any} [empty] Empty fallback\n * @returns {string} Formatted string\n */\n static datetime(value, format = 'YYYY-MM-DD HH:mm:ss', empty = '-')\n {\n if ( ! Mix.isDate(value) ) {\n value = Now.make(value);\n }\n\n if ( ! value.valid() ) {\n return empty;\n }\n\n return value.format(format);\n }\n\n /**\n * Get formatted date\n *\n * @example Str.date(\"2026-01-01\", \"DD.MM.YYYY\")\n *\n * @param {any} value Input value\n * @param {string} [format] Output format\n * @param {any} [empty] Empty fallback\n * @returns {string} Formatted string\n */\n static date(value, format = 'YYYY-MM-DD', empty = '-')\n {\n return this.datetime(value, format, empty);\n }\n\n /**\n * Get formatted time\n *\n * @example Str.time(\"12:00:00\", \"HH:mm\")\n *\n * @param {any} value Input value\n * @param {string} [format] Output format\n * @param {any} [empty] Empty fallback\n * @returns {string} Formatted string\n */\n static time(value, format = 'HH:mm:ss', empty = '-')\n {\n return this.datetime(value, format, empty);\n }\n\n /**\n * Parse string to object\n *\n * @example Str.objectify(\"a: 1;\") // => { a: 1 }\n *\n * @param {any} value Input string\n * @param {string} [mode] Parse mode\n * @param {boolean} [toarray] Return array\n * @returns {any} Parsed value\n */\n static objectify(value, mode = 'options', toarray = false)\n {\n if ( Mix.isRef(value) ) {\n return value;\n }\n\n if ( mode === 'params' ) {\n value = For.parseParams(value);\n }\n\n if ( mode === 'options' ) {\n value = For.parseOptions(value);\n }\n\n if ( ! Mix.isRef(value) ) {\n value = JSON.parse(value)\n }\n\n return toarray ? Mix.vals(value) : value;\n }\n\n /**\n * Cast object to string\n *\n * @example Str.stringify({ a: 1 }) // => \"a: 1;\"\n *\n * @param {any} value Input value\n * @param {string} [mode] Cast mode\n * @returns {string} Casted string\n */\n static stringify(value, mode = 'options')\n {\n if ( Mix.isStr(value) ) {\n return value;\n }\n\n if ( mode === 'params' ) {\n return For.castParams(value);\n }\n\n if ( mode === 'options' ) {\n return For.castOptions(value);\n }\n\n return JSON.stringify(value);\n }\n\n}\n\n/**\n * @see PicoStr.regex\n */\nPicoString.regexEscape = (...args) => {\n console.warn('Str.regexEscape() is deprecated, use Str.regex() instead.');\n return Str.regex(...args);\n};\n\n/**\n * @see PicoStr.pascalcase\n */\nPicoString.humancase = (...args) => {\n console.warn('Str.humancase() is deprecated, use Str.pascalcase() instead.');\n return Str.pascalcase(...args);\n};\n\n/**\n * @see PicoFormat.slugify\n */\nPicoString.slugify = (...args) => {\n console.warn('Str.slugify() is deprecated, use For.slugify() instead.');\n return For.slugify(...args);\n};\n\n/**\n * @see PicoFormat.castOptions\n */\nPicoString.options = (...args) => {\n console.warn('Str.options() is deprecated, use For.castOptions() instead.');\n return For.castOptions(...args);\n};\n\n/**\n * @see PicoFormat.parseOptions\n */\nPicoString.fromOptions = (...args) => {\n console.warn('Str.fromOptions() is deprecated, use For.parseOptions() instead.');\n return For.parseOptions(...args);\n};\n\n/**\n * @see PicoFormat.castParams\n */\nPicoString.params = (...args) => {\n console.warn('Str.params() is deprecated, use For.castParams() instead.');\n return For.castParams(...args);\n};\n\n/**\n * @see PicoFormat.parseParams\n */\nPicoString.fromParams = (...args) => {\n console.warn('Str.fromParams() is deprecated, use For.parseParams() instead.');\n return For.parseParams(...args);\n};\n\n/**\n * @see PicoFormat.filesize\n */\nPicoString.filesize = (...args) => {\n console.warn('Str.filesize() is deprecated, use For.filesize() instead.');\n return For.filesize(...args);\n};\n\nPicoString.real = () => {\n console.error('Str.real() is not implemented anymore.');\n};\n\nPicoString.array = () => {\n console.error('Str.array() is not implemented anymore.');\n};\n\nexport default PicoString;","import { Mix, Num, Arr, Hash, Str, Obj } from \"../index.esm.js\";\n\nexport class PicoNumber\n{\n\n /**\n * Format number with decimals\n *\n * @example Num.fixed(1.234, 2) // => \"1.23\"\n * @example Num.fixed(\"2.4\", 0) // => \"2\"\n *\n * @param {any} value Number value\n * @param {number} decimals Decimals count\n * @returns {string} Fixed string\n */\n static fixed(value, decimals = 2)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return value.toFixed(decimals);\n }\n\n /**\n * Parse value as float\n *\n * @example Num.float(\"2.2\") // => 2.2\n * @example Num.float(3) // => 3\n *\n * @param {any} value Numeric value\n * @returns {number} Parsed float\n */\n static float(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return parseFloat(value);\n }\n\n /**\n * Parse value as int\n *\n * @example Num.int(\"12\") // => 12\n * @example Num.int(12.9) // => 12\n *\n * @param {any} value Numeric value\n * @returns {number} Parsed int\n */\n static int(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return parseInt(value);\n }\n\n /**\n * Round up to integer\n *\n * @example Num.ceil(1.1) // => 2\n * @example Num.ceil(\"2.0\") // => 2\n *\n * @param {any} value Numeric value\n * @returns {number} Ceil value\n */\n static ceil(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.ceil(value);\n }\n\n /**\n * Round down to integer\n *\n * @example Num.floor(1.9) // => 1\n * @example Num.floor(\"2.0\") // => 2\n *\n * @param {any} value Numeric value\n * @returns {number} Floor value\n */\n static floor(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.floor(value);\n }\n\n /**\n * Round to nearest integer\n *\n * @example Num.round(1.5) // => 2\n * @example Num.round(\"2.2\") // => 2\n *\n * @param {any} value Numeric value\n * @returns {number} Rounded value\n */\n static round(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.round(value);\n }\n\n /**\n * Sum numbers in list\n *\n * @example Num.combine([1, 2]) // => 3\n * @example Num.combine([5, -2]) // => 3\n *\n * @param {Array<number>} value Number list\n * @returns {number} Sum value\n */\n static combine(value)\n {\n return Arr.reduce(value, (acc, val) => acc + val, 0);\n }\n\n /**\n * Subtract numbers in list\n *\n * @example Num.subtract([5, 2]) // => 3\n * @example Num.subtract([10, 3]) // => 7\n *\n * @param {Array<number>} value Number list\n * @returns {number} Result value\n */\n static subtract(value)\n {\n return Arr.reduce(value, (acc, val) => acc - val, 0);\n }\n\n /**\n * Get decade base (10s)\n *\n * @example Num.decade(27) // => 20\n * @example Num.decade(\"99\") // => 90\n *\n * @param {any} value Numeric value\n * @returns {number} Decade value\n */\n static decade(value)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value);\n }\n\n return Math.floor(value / 10) * 10;\n }\n\n /**\n * Convert number to power-of-2 list\n *\n * @example Num.matrix(5) // => [4, 1]\n * @example Num.matrix(8) // => [8]\n *\n * @param {number} num Input number\n * @param {number} [limit] Unused (legacy)\n * @param {Array<number>} [base] Result base\n * @returns {Array<number>} Power list\n */\n static matrix(num, limit = 10, base = [])\n {\n let value = 0;\n\n for ( let i = 20; i >= 0; i -- ) {\n if ( num >= (value = Math.pow(2, i)) ) {\n (base.push(value), num -= value);\n }\n }\n\n return base;\n }\n\n /**\n * Calculate distance between coords\n *\n * @example Num.distance({lat:0,lng:0},{lat:0,lng:1}) // => number\n *\n * @param {any} cord1 First coord\n * @param {any} cord2 Second coord\n * @param {boolean} [miles] Return miles if true\n * @returns {number} Distance value\n */\n static distance(cord1, cord2, miles = false)\n {\n let cord = { lat: 0, lng: 0 };\n\n [cord1, cord2] = [\n { ...cord, ...cord1 }, { ...cord, ...cord2 }\n ];\n\n let radlat1 = (Math.PI * this.float(cord1.lat)) / 180;\n let radlat2 = (Math.PI * this.float(cord2.lat)) / 180;\n\n let theta = this.float(cord1.lng) - this.float(cord2.lng);\n let radtheta = (theta) / 180;\n\n let dist = this.combine([\n Math.sin(radlat1) * Math.sin(radlat2),\n Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta)\n ]);\n\n dist = (Math.acos(dist > 1 ? 1 : dist) * 180) /\n Math.PI * 60 * 1.1515;\n\n return miles ? dist * 1.609344 : dist;\n }\n\n}\n\n/**\n * @see PicoStr.number\n */\nPicoNumber.format = (value, ...args) => {\n console.warn('Num.format() is deprecated, use Str.number() instead.');\n return Str.number(value, args[2] || null);\n};\n\n/**\n * @see PicoHash.number\n */\nPicoNumber.random = (...args) => {\n console.warn('Num.random() is deprecated, use Hash.number() instead.');\n return Hash.number(...args);\n};\n\nexport default PicoNumber;","import { Obj, Mix, Any } from \"../index.esm.js\";\n\nexport class PicoArray\n{\n\n /**\n * Wrap value into an array\n *\n * @example Arr.all(1) // => [1]\n * @example Arr.all([1]) // => [1]\n *\n * @param {any} value Value to wrap\n * @returns {Array<any>} Wrapped array\n */\n static all(value)\n {\n return Mix.isArr(value) ? value : [value];\n }\n\n /**\n * Get item at index or fallback\n *\n * @example Arr.get([\"a\"], 0) // => \"a\"\n * @example Arr.get([\"a\"], 9, null) // => null\n *\n * @param {any} value Array-like value\n * @param {number} index Index to read\n * @param {any} [fallback] Fallback value\n * @returns {any} Item or fallback\n */\n static get(value, index, fallback = null)\n {\n if ( !Mix.isArr(value) ) {\n return value;\n }\n\n if ( value && value[index] ) {\n return value[index];\n }\n\n return fallback;\n }\n\n /**\n * Set item at index (mutates)\n *\n * @example Arr.set([1,2], 0, 9) // => [9,2]\n *\n * @param {Array<any>} target Target array\n * @param {number} index Index to set\n * @param {any} value Value to set\n * @returns {any} Splice result\n */\n static set(target, index, value)\n {\n return this.splice(target, index, 1, value);\n }\n\n /**\n * Remove item at index (mutates)\n *\n * @example Arr.unset([1,2], 0) // => [1]\n *\n * @param {Array<any>} target Target array\n * @param {number} index Index to remove\n * @returns {any} Splice result\n */\n static unset(target, index)\n {\n return this.splice(target, index, 1);\n }\n\n /**\n * Create array with callback values\n *\n * @example Arr.make(3) // => [0,1,2]\n * @example Arr.make(2, \"x\") // => [\"x\",\"x\"]\n *\n * @param {number} length Array length\n * @param {any} [cb] Value or mapper\n * @returns {Array<any>} Generated array\n */\n static make(length, cb = null)\n {\n let result = new Array(length);\n\n if ( cb == null ) {\n cb = (i) => i;\n }\n\n for ( let i = 0; i < length; i ++ ) {\n result[i] = typeof cb === 'function' ? cb(i) : cb;\n }\n\n return result;\n }\n\n /**\n * Check if array has value\n *\n * @example Arr.has([1,2], 2) // => true\n * @example Arr.has([{id:1}], {id:1}) // => true\n *\n * @param {any} value List to search\n * @param {any} search Search value\n * @returns {boolean} True if found\n */\n static has(value, search)\n {\n if ( !Mix.isPrim(search) ) {\n return this.findIndex(value, search) !== - 1;\n }\n\n if ( !Mix.isRef(value) ) {\n value = [value];\n }\n\n if ( !Mix.isArr(value) ) {\n value = Mix.vals(value);\n }\n\n let index = value.findIndex((val) => {\n return val == search;\n });\n\n return index !== - 1;\n }\n\n /**\n * Get unique values as strings\n *\n * @example Arr.unique([\"a\",\"a\"]) // => [\"a\"]\n *\n * @param {Array<any>} value Input list\n * @returns {Array<any>} Unique list\n */\n static unique(value)\n {\n let buffer = {};\n\n for ( const val of value ) {\n buffer[val] = true;\n }\n\n return Mix.keys(buffer);\n }\n\n /**\n * Check equal lengths for arrays\n *\n * @example Arr.lengths([1],[2]) // => true\n *\n * @param {Array<any>} value Base array\n * @param {...Array<any>} args Other arrays\n * @returns {boolean} True if equal\n */\n static lengths(value, ...args)\n {\n let length = value.length;\n\n for ( let i = 0; i < args.length; i ++ ) {\n if ( args[i].length !== length ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get first item or fallback\n *\n * @example Arr.first([1,2]) // => 1\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} First item\n */\n static first(value, fallback = null)\n {\n return this.get(value, 0, fallback);\n }\n\n /**\n * Get second item or fallback\n *\n * @example Arr.second([1,2]) // => 2\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} Second item\n */\n static second(value, fallback = null)\n {\n return this.get(value, 2, fallback);\n }\n\n /**\n * Get third item or fallback\n *\n * @example Arr.third([1,2,3]) // => 3\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} Third item\n */\n static third(value, fallback = null)\n {\n return this.get(value, 2, fallback);\n }\n\n /**\n * Get last item or fallback\n *\n * @example Arr.last([1,2]) // => 2\n *\n * @param {Array<any>} value Input array\n * @param {any} [fallback] Fallback value\n * @returns {any} Last item\n */\n static last(value, fallback = null)\n {\n return this.get(value, value.length - 1, fallback);\n }\n\n /**\n * Map values to new array\n *\n * @example Arr.each([1], v => v+1) // => [2]\n *\n * @param {any} value Input list\n * @param {function} cb Map callback\n * @param {any} [retval] Forced return\n * @returns {any} Mapped array\n */\n static each(value, cb, retval = null)\n {\n if ( Mix.isObj(value) ) {\n return this.eachObj(value, cb, retval);\n }\n\n if ( value == null ) {\n value = [];\n }\n\n let result = new Array(value.length);\n\n for ( let i = 0; i < value.length; i ++ ) {\n result[i] = cb(value[i], i);\n }\n\n return retval != null ? retval : result;\n }\n\n /**\n * Iterate over object keys\n *\n * @example Arr.eachObj({a:1}, (v,k) => v+1) // => [2]\n *\n * @param {any} value Input object\n * @param {function} cb Iterate callback\n * @param {any} [retval] Return value override\n * @returns {any} Mapped values or retval\n */\n static eachObj(value, cb, retval = null)\n {\n if ( Mix.isArr(value) ) {\n return this.each(value, cb, retval);\n }\n\n if ( value == null ) {\n value = {};\n }\n\n let result = Mix.keys(value).map((key) => {\n return cb(value[key], key);\n });\n\n return retval != null ? retval : result;\n }\n\n /**\n * Map values in place (mutates)\n *\n * @example Arr.map([1], v => v+1) // => [2]\n *\n * @param {any} value Input list\n * @param {function} cb Map callback\n * @returns {any} Mutated input\n */\n static map(value, cb)\n {\n let [isArr, keys] = [\n Mix.isArr(value), Mix.keys(value)\n ];\n\n let fn = (key) => {\n return isArr ? parseInt(key) : key;\n };\n\n for ( let key of keys ) {\n value[key] = cb(value[key], fn(key));\n }\n\n return value;\n }\n\n /**\n * Recursively map nested arrays\n *\n * @example Arr.recursive([{c:[]}], \"c\", () => 1) // => list\n *\n * @param {any} value Input list\n * @param {string} key Child key\n * @param {function} cb Node callback\n * @param {Array<any>} [cascade] Parent chain\n * @returns {any} Mapped tree\n */\n static recursive(value, key, cb, cascade = [])\n {\n // NIE WIEDER ANFASSEN !!!\n let fn = (cas) => (val) => {\n return this.recursive(val, key, cb, cas);\n };\n\n if ( Mix.isArr(value) ) {\n return this.map(value, fn(cascade));\n }\n\n if ( Mix.isObj(value) ) {\n value = cb(value, cascade) ?? value;\n }\n\n cascade = [\n ...this.clone(cascade), value\n ];\n\n if ( value == null ) {\n return value;\n }\n\n if ( Mix.isObj(value[key]) ) {\n value[key] = fn(cascade)(value[key]);\n }\n\n if ( Mix.isArr(value[key]) ) {\n value[key] = this.map(value[key], fn(cascade));\n }\n\n return value;\n }\n\n /**\n * Get matching indexes by filter\n *\n * @example Arr.filterIndex([0,1], v => v) // => [\"1\"]\n *\n * @param {any} value Input list\n * @param {any} [filter] Filter spec\n * @returns {Array<string>} Matching keys\n */\n static filterIndex(value, filter = null)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( filter == null ) {\n filter = (val) => !Mix.isEmpty(val);\n }\n\n return Mix.keys(value).filter((key) => {\n\n if ( Mix.isFunc(filter) ) {\n return filter.call({}, value[key], key);\n }\n\n if ( Mix.isRef(filter) ) {\n return this.includes(value[key], filter);\n }\n\n return filter === value[key];\n });\n }\n\n /**\n * Remove values matching filter (mutates)\n *\n * @example Arr.filterRemove([1,2], 2) // => [1]\n *\n * @param {any} value Input list\n * @param {any} [filter] Filter spec\n * @returns {any} Mutated list\n */\n static filterRemove(value, filter = null)\n {\n if ( value == null ) {\n return value;\n }\n\n let indexes = this.filterIndex(value, filter);\n\n if ( indexes.length === 0 ) {\n return value;\n }\n\n return this.splices(value, indexes);\n }\n\n /**\n * Filter values by filter\n *\n * @example Arr.filter([0,1], v => v) // => [1]\n *\n * @param {any} value Input list\n * @param {any} [filter] Filter spec\n * @returns {Array<any>} Filtered values\n */\n static filter(value, filter = null)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( filter == null ) {\n filter = (val) => !Mix.isEmpty(val);\n }\n\n return Mix.vals(value).filter((val, key) => {\n\n if ( Mix.isFunc(filter) ) {\n return filter.call({}, val, key);\n }\n\n if ( Mix.isRef(filter) ) {\n return this.includes(val, filter);\n }\n\n return filter === value[key];\n });\n }\n\n /**\n * Find index matching filter\n *\n * @example Arr.findIndex([1,2], 2) // => 1\n *\n * @param {Array<any>} value Input array\n * @param {any} [filter] Filter spec\n * @param {number} [fallback] Fallback index\n * @returns {number} Found index\n */\n static findIndex(value, filter = null, fallback = - 1)\n {\n if ( value == null ) {\n return fallback;\n }\n\n if ( filter == null ) {\n filter = (val) => !Mix.isEmpty(val);\n }\n\n for ( let i = 0; i < value.length; i ++ ) {\n\n if ( Mix.isFunc(filter) ) {\n if ( filter.call({}, value[i], i) ) {\n return i;\n }\n }\n\n if ( Mix.isRef(filter) ) {\n if ( this.includes(value[i], filter) ) {\n return i;\n }\n }\n\n if ( filter === value[i] ) return i;\n }\n\n return fallback;\n }\n\n /**\n * Find value matching filter\n *\n * @example Arr.find([1,2], 2) // => 2\n *\n * @param {Array<any>} value Input array\n * @param {any} [filter] Filter spec\n * @param {any} [fallback] Fallback value\n * @returns {any} Found value\n */\n static find(value, filter = null, fallback = null)\n {\n let index = this.findIndex(value, filter);\n\n if ( index === - 1 ) {\n return fallback;\n }\n\n return value[index];\n }\n\n /**\n * Sort array by key or callback\n *\n * @example Arr.sort([{n:2},{n:1}], \"n\") // => list\n *\n * @param {any} value Input list\n * @param {any} [key] Key or compare fn\n * @returns {Array<any>} Sorted list\n */\n static sort(value, key = null)\n {\n if ( Mix.isFunc(key) ) {\n return this.sortFunc(value, key);\n }\n\n if ( key != null ) {\n return this.sortDeep(value, key);\n }\n\n return this.sortPrim(value)\n }\n\n /**\n * Sort by compare callback\n *\n * @example Arr.sortFunc([2,1], (a,b)=>a-b) // => [1,2]\n *\n * @param {any} value Input list\n * @param {function} cb Compare callback\n * @returns {Array<any>} Sorted list\n */\n static sortFunc(value, cb)\n {\n let keys = Mix.keys(value).sort((a, b) => {\n return cb.call({}, value[a], value[b]);\n });\n\n let result = [];\n\n for ( const key of keys ) {\n result.push(value[key]);\n }\n\n return result;\n }\n\n /**\n * Sort by nested key value\n *\n * @example Arr.sortDeep([{a:{n:2}},{a:{n:1}}], \"a.n\") // => list\n *\n * @param {any} value Input list\n * @param {any} key Key path\n * @returns {Array<any>} Sorted list\n */\n static sortDeep(value, key)\n {\n let fn = (val) => {\n return Obj.get(val, key);\n }\n\n let keys = Mix.keys(value).sort((a, b) => {\n return Mix.compare(fn(value[a]), fn(value[b]));\n });\n\n let result = [];\n\n for ( const key of keys ) {\n result.push(value[key]);\n }\n\n return result;\n }\n\n /**\n * Sort by primitive key order\n *\n * @example Arr.sortPrim([\"b\",\"a\"]) // => [\"a\",\"b\"]\n *\n * @param {any} value Input list\n * @returns {Array<any>} Sorted list\n */\n static sortPrim(value)\n {\n let keys = Mix.keys(value).sort((a, b) => {\n return Mix.compare(a, b);\n });\n\n let result = [];\n\n for ( const key of keys ) {\n result.push(value[key]);\n }\n\n return result;\n }\n\n /**\n * Merge arrays (concat)\n *\n * @example Arr.merge([1],[2]) // => [1,2]\n *\n * @param {Array<any>} value Base array\n * @param {...any} args Arrays to add\n * @returns {Array<any>} Merged array\n */\n static merge(value, ...args)\n {\n return value.concat(...args);\n }\n\n /**\n * Prepend items (mutates)\n *\n * @example Arr.prepend([2], 1) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {...any} args Items to add\n * @returns {Array<any>} Mutated array\n */\n static prepend(value, ...args)\n {\n return (value.unshift(...args), value);\n }\n\n /**\n * Append items (mutates)\n *\n * @example Arr.append([1], 2) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {...any} args Items to add\n * @returns {Array<any>} Mutated array\n */\n static append(value, ...args)\n {\n return (value.push(...args), value);\n }\n\n /**\n * Add item if not present\n *\n * @example Arr.add([1], 2) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to add\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static add(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n if ( this.findIndex(value, finder) !== - 1 ) {\n return value;\n }\n\n return (value.push(target), value);\n }\n\n /**\n * Replace existing item or add\n *\n * @example Arr.replace([1], 2) // => [1,2]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to add\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static replace(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n let index = this.findIndex(value, finder);\n\n if ( index !== - 1 ) {\n this.splice(value, index, 1);\n }\n\n return (value.push(target), value);\n }\n\n /**\n * Remove item if present\n *\n * @example Arr.remove([1,2], 1) // => [2]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to remove\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static remove(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n let index = this.findIndex(value, finder);\n\n if ( index === - 1 ) {\n return value;\n }\n\n return (this.splice(value, index, 1), value);\n }\n\n /**\n * Toggle item in array\n *\n * @example Arr.toggle([1], 1) // => []\n * @example Arr.toggle([], 1) // => [1]\n *\n * @param {Array<any>} value Target array\n * @param {any} target Item to toggle\n * @param {any} [finder] Finder value\n * @returns {Array<any>} Mutated array\n */\n static toggle(value, target, finder = null)\n {\n if ( finder == null ) {\n finder = target;\n }\n\n let index = this.findIndex(value, finder);\n\n if ( index === - 1 ) {\n return (value.push(target), value);\n }\n\n return (this.splice(value, index, 1), value);\n }\n\n /**\n * Insert item at index (mutates)\n *\n * @example Arr.insert([1,3], 1, 2) // => [1,2,3]\n *\n * @param {Array<any>} value Target array\n * @param {number} index Insert index\n * @param {any} target Item to insert\n * @returns {Array<any>} Mutated array\n */\n static insert(value, index, target)\n {\n return (this.splice(value, index, 0, target), value);\n }\n\n /**\n * Slice array from index\n *\n * @example Arr.slice([1,2,3], 1, 2) // => [2,3]\n *\n * @param {Array<any>} value Source array\n * @param {number} index Start index\n * @param {number} [length] Slice length\n * @returns {Array<any>} Sliced array\n */\n static slice(value, index, length = 1)\n {\n return value.slice(parseInt(index), length);\n }\n\n /**\n * Splice array (mutates)\n *\n * @example Arr.splice([1,2], 0, 1) // => [1]\n *\n * @param {Array<any>} value Target array\n * @param {number} index Start index\n * @param {number} [length] Remove count\n * @param {...any} args Items to add\n * @returns {any} Splice result\n */\n static splice(value, index, length = 1, ...args)\n {\n return value.splice(parseInt(index), length, ...args);\n }\n\n /**\n * Splice multiple indexes\n *\n * @example Arr.splices([1,2,3],[0,2]) // => [2]\n *\n * @param {Array<any>} value Target array\n * @param {Array<number>} indexies Index list\n * @param {number} [length] Remove count\n * @returns {Array<any>} Mutated array\n */\n static splices(value, indexies, length = 1)\n {\n this.each(indexies, (index) => {\n this.splice(value, index, length);\n });\n\n return value;\n }\n\n /**\n * Deep clone array/object\n *\n * @example Arr.clone([1,{a:1}]) // => new array\n *\n * @param {any} value Value to clone\n * @returns {any} Cloned value\n */\n static clone(value)\n {\n if ( Mix.isPrim(value) ) {\n return value;\n }\n\n if ( Mix.isObj(value) ) {\n return Obj.clone(value);\n }\n\n if ( !Mix.isArr(value) ) {\n return value;\n }\n\n let result = new Array(value.length);\n\n for ( let i = 0; i < value.length; i ++ ) {\n result[i] = this.clone(value[i]);\n }\n\n return result;\n }\n\n /**\n * Get items not in others\n *\n * @example Arr.diff([1,2],[2]) // => [1]\n *\n * @param {...Array<any>} args Arrays to diff\n * @returns {Array<any>} Difference list\n */\n static diff(...args)\n {\n return args.reduce((a, c) => {\n return a.filter(i => !c.includes(i))\n });\n }\n\n /**\n * Get intersecting items\n *\n * @example Arr.isect([1,2],[2,3]) // => [2]\n *\n * @param {...Array<any>} args Arrays to intersect\n * @returns {Array<any>} Intersection list\n */\n static isect(...args)\n {\n return args.reduce((a, c) => {\n return a.filter(i => c.includes(i))\n });\n }\n\n /**\n * Extract property values from list\n *\n * @example Arr.extract([{id:1}], \"id\") // => [1]\n *\n * @param {Array<any>} value Input list\n * @param {any} key Key path\n * @returns {Array<any>} Extracted list\n */\n static extract(value, key)\n {\n let result = new Array(value.length);\n\n for ( let i = 0; i < value.length; i ++ ) {\n result[i] = Obj.get(value[i], key);\n }\n\n return result;\n }\n\n /**\n * Reduce list values\n *\n * @example Arr.reduce([1,2], (a,c)=>a+c, 0) // => 3\n *\n * @param {any} value Input list\n * @param {function} callback Reducer callback\n * @param {any} accumulator Start value\n * @returns {any} Reduced value\n */\n static reduce(value, callback, accumulator)\n {\n return Mix.vals(value).reduce(callback, accumulator);\n }\n\n /**\n * Split array into chunks\n *\n * @example Arr.chunk([1,2,3], 2) // => [[1,2],[3]]\n *\n * @param {Array<any>} value Source array\n * @param {number} [chunk] Chunk size\n * @returns {Array<Array<any>>} Chunked list\n */\n static chunk(value, chunk = 10)\n {\n let res = [];\n\n for ( let i = 0; i < value.length; i += chunk ) {\n res.push(value.slice(i, i + chunk));\n }\n\n return res;\n }\n\n /**\n * Check if value includes search\n *\n * @example Arr.includes([1,2], 2) // => true\n * @example Arr.includes([{a:1}], {a:1}) // => true\n *\n * @param {any} value Target value\n * @param {any} search Search spec\n * @returns {boolean} True if includes\n */\n static includes(value, search)\n {\n if ( Mix.isObj(search) ) {\n return Obj.includes(value, search);\n }\n\n if ( !Mix.isArr(search) ) {\n return value === search;\n }\n\n let [result, length] = [\n false, search.length,\n ];\n\n if ( length === 0 ) {\n return true;\n }\n\n for ( let i = 0; result === false && i < length; i ++ ) {\n result ||= this.has(value, search[i]);\n }\n\n return result;\n }\n\n /**\n * Check array contains all values\n *\n * @example Arr.contains([1,2], [2]) // => true\n *\n * @param {any} arr Target array\n * @param {any} val Required values\n * @returns {boolean} True if contains\n */\n static contains(arr, val)\n {\n let result = true;\n\n for ( let key of Mix.vals(val) ) {\n result &&= Mix.vals(arr).indexOf(key) !== - 1;\n }\n\n return result;\n }\n\n /**\n * Check arrays match (set-like)\n *\n * @example Arr.matches([1,2], [2,1]) // => true\n *\n * @param {any} value Target list\n * @param {any} search Search spec\n * @returns {boolean} True if matches\n */\n static matches(value, search)\n {\n if ( Mix.isObj(search) ) {\n return Obj.matches(value, search);\n }\n\n if ( !Mix.isArr(value) ) {\n return value === search;\n }\n\n search = this.unique(search);\n\n let [result, length] = [\n true, search.length,\n ];\n\n if ( value.length !== search.length ) {\n return false;\n }\n\n for ( let i = 0; result === true && i < length; i ++ ) {\n result &&= this.has(value, search[i]);\n }\n\n return result;\n }\n\n}\n\n/**\n * @see PicoArray.unset\n */\nPicoArray.removeIndex = function (...args) {\n console.warn('Arr.removeIndex() is deprecated, use Arr.unset() instead.');\n return this.unset(...args);\n};\n\n/**\n * @see PicoArray.sortPrim\n */\nPicoArray.sortString = function (...args) {\n console.warn('Arr.sortString() is deprecated, use Arr.sortPrim() instead.');\n return this.sortPrim(...args);\n};\n\n/**\n * @see PicoArray.append\n */\nPicoArray.push = function (...args) {\n console.warn('Arr.push() is deprecated, use Arr.append() instead.');\n return this.append(...args);\n};\n\n/**\n * @see PicoArray.merge\n */\nPicoArray.concat = function (...args) {\n console.warn('Arr.concat() is deprecated, use Arr.merge() instead.');\n return this.merge(...args);\n};\n\n/**\n * @see PicoArray.matches\n */\nPicoArray.equal = function (...args) {\n console.warn('Arr.equal() is deprecated, use Arr.matches() instead.');\n return this.matches(...args);\n};\n\n/**\n * @see PicoArray.diff\n */\nPicoArray.diffrence = function (...args) {\n console.warn('Arr.diffrence() is deprecated, use Arr.diff() instead.');\n return this.diff(...args);\n};\n\n/**\n * @see PicoArray.isect\n */\nPicoArray.intersect = function (...args) {\n console.warn('Arr.intersect() is deprecated, use Arr.isect() instead.');\n return this.isect(...args);\n};\n\nexport default PicoArray;","import { go, Mix, Arr } from \"../index.esm.js\";\n\nexport class PicoObject\n{\n /**\n * Normalize key path to array\n *\n * @example Obj.keyoptim(\"a.b\") // => [\"a\",\"b\"]\n * @example Obj.keyoptim([\"a\",\"b\"]) // => [\"a\",\"b\"]\n *\n * @param {any} keys Key path\n * @param {boolean} [flatten] Flatten keys\n * @param {boolean|null} [isstr] Is string flag\n * @returns {Array<any>} Key segments\n */\n static keyoptim(keys, flatten = false, isstr = null)\n {\n if ( isstr === null ) {\n isstr = Mix.isStr(keys);\n }\n\n if ( !isstr && flatten ) {\n keys = keys.join('.');\n }\n\n return isstr || flatten ? keys.split('.') : keys;\n }\n\n /**\n * Check if nested key exists\n *\n * @example Obj.has({a:{b:1}}, \"a.b\") // => true\n * @example Obj.has({a:{}}, \"a.b\") // => false\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {boolean} [flatten] Flatten keys\n * @returns {boolean} True if exists\n */\n static has(target, keys, flatten = false)\n {\n if ( target == null || keys == null ) {\n return false;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return target[keys] !== undefined;\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n let [list, index, length] = [\n keys.pop(), 0, keys.length\n ];\n\n if ( length === 0 ) {\n return target[list] !== undefined;\n }\n\n while ( target != null && index < length ) {\n target = target[keys[index ++]];\n }\n\n if ( target == null ) {\n return false;\n }\n\n return target[list] !== undefined;\n\n }\n\n /**\n * Get nested value or fallback\n *\n * @example Obj.get({a:{b:1}}, \"a.b\") // => 1\n * @example Obj.get({}, \"a.b\", null) // => null\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {any} [fallback] Fallback value\n * @param {boolean} [flatten] Flatten keys\n * @returns {any} Nested value\n */\n static get(target, keys, fallback = null, flatten = false)\n {\n if ( target == null || keys == null ) {\n return fallback;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return target[keys];\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n let index = 0, length = keys.length;\n\n if ( length === 0 ) {\n return fallback;\n }\n\n while ( target != null && index < length ) {\n target = target[keys[index ++]];\n }\n\n if ( target == null ) {\n return fallback;\n }\n\n return target;\n }\n\n /**\n * Set nested value (mutates)\n *\n * @example Obj.set({}, \"a.b\", 1) // => object\n * @example Obj.set({}, [\"a\",\"b\"], 1) // => object\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {any} value Value to set\n * @param {boolean} [flatten] Flatten keys\n * @returns {any} Mutated target\n */\n static set(target, keys, value, flatten = false)\n {\n if ( keys == null ) {\n return target;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return (target[keys] = value, target);\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n if ( keys.length === 0 ) {\n return target;\n }\n\n let nested = target;\n\n for ( let mod, src, i = 0; i < keys.length; i++) {\n\n mod = src = String(keys[i]);\n\n if ( src.indexOf('[]') !== -1 ) {\n mod = src.replace('[]', '');\n }\n\n if ( nested[mod] == null ) {\n nested[mod] = mod === src ? {} : [];\n }\n\n if ( mod !== src ) {\n Arr.insert(keys, i + 1, nested[mod].length);\n }\n\n if ( keys.length - 1 === i ) {\n nested[mod] = value;\n }\n\n nested = nested[mod];\n }\n\n return target;\n }\n\n /**\n * Unset nested value (mutates)\n *\n * @example Obj.unset({a:{b:1}}, \"a.b\")\n * @example Obj.unset({a:{b:1}}, [\"a\",\"b\"])\n *\n * @param {any} target Target object\n * @param {any} keys Key path\n * @param {boolean} [flatten] Flatten keys\n * @returns {any} Mutated target\n */\n static unset(target, keys, flatten = false)\n {\n if ( keys == null ) {\n return target;\n }\n\n if ( typeof keys === 'number' ) {\n keys = Mix.str(keys);\n }\n\n const isstr = typeof keys === 'string';\n\n if ( isstr && target && target[keys] !== undefined ) {\n return (delete target[keys], target);\n }\n\n keys = this.keyoptim(keys, flatten, isstr);\n\n let [list, index, length, nested] = [\n keys.pop(), 0, keys.length, target\n ];\n\n if ( length === 0 ) {\n return target;\n }\n\n while ( nested != null && index < length ) {\n nested = nested[keys[index ++]];\n }\n\n if ( nested == null ) {\n return target;\n }\n\n return (delete nested[list], target);\n }\n\n /**\n * Check if nested value is empty\n *\n * @example Obj.empty({a:null}, \"a\") // => true\n * @example Obj.empty({a:1}, \"a\") // => false\n *\n * @param {any} target Target object\n * @param {any} key Key path\n * @returns {boolean} True if empty\n */\n static empty(target, key)\n {\n return Mix.isEmpty(this.get(target, key));\n }\n\n /**\n * Unset multiple keys (mutates)\n *\n * @example Obj.remove({a:1,b:2}, [\"a\"]) // => object\n *\n * @param {any} target Target object\n * @param {any} keys Keys list\n * @returns {any} Mutated target\n */\n static remove(target, keys)\n {\n if ( ! Mix.isArr(keys) ) {\n return target;\n }\n\n for ( let key of keys ) {\n this.unset(target, key);\n }\n\n return target;\n }\n\n /**\n * Map object values to object\n *\n * @example Obj.each({a:1}, v => v+1) // => {a:2}\n *\n * @param {any} value Source object\n * @param {function} cb Map callback\n * @param {any} [retval] Forced return\n * @returns {any} Mapped object\n */\n static each(value, cb, retval = null)\n {\n let result = {};\n\n for ( let key of Mix.keys(value) ) {\n result[key] = cb(value[key], key);\n }\n\n if ( retval != null ) {\n return retval;\n }\n\n return result;\n }\n\n /**\n * Map object values to object\n *\n * @example Obj.map({a:1}, v => v+1) // => {a:2}\n *\n * @param {any} value Source object\n * @param {function} cb Map callback\n * @returns {Record<string, any>} Mapped object\n */\n static map(value, cb)\n {\n for ( let key of Mix.keys(value) ) {\n value[key] = cb(value[key], key);\n }\n\n return value;\n }\n\n /**\n * Get filtered key indexes\n *\n * @example Obj.filterIndex({a:1,b:null}) // => [\"a\"]\n *\n * @param {any} value Source object\n * @param {any} [filter] Filter spec\n * @returns {Array<any>} Key list\n */\n static filterIndex(value, filter = null)\n {\n return Arr.filterIndex(value, filter);\n }\n\n /**\n * Filter object by key filter\n *\n * @example Obj.filter({a:1,b:null}) // => {a:1}\n *\n * @param {any} value Source object\n * @param {any} [filter] Filter spec\n * @returns {Record<string, any>} Filtered object\n */\n static filter(value, filter = null)\n {\n let result = {};\n\n for (let key of this.filterIndex(value, filter)) {\n result[key] = value[key];\n }\n\n return result;\n }\n\n /**\n * Flatten object into dot keys\n *\n * @example Obj.flatten({a:{b:1}}) // => {\"a.b\":1}\n *\n * @param {any} value Source object\n * @param {string} [prefix] Key prefix\n * @param {Record<string, any>} [result] Result map\n * @returns {Record<string, any>} Flat map\n */\n static flatten(value, prefix = '', result = {})\n {\n if ( typeof value !== 'object' ) {\n return result[prefix] = value;\n }\n\n if ( prefix !== '' ) {\n prefix += '.';\n }\n\n for ( let key of Mix.keys(value) ) {\n this.flatten(value[key], prefix + key, result);\n }\n\n return result;\n }\n\n /**\n * Flatten object into form keys\n *\n * @example Obj.flattenForm({a:{b:1}}) // => {\"a[b]\":1}\n *\n * @param {any} value Source object\n * @param {string} [prefix] Key prefix\n * @param {Record<string, any>} [result] Result map\n * @returns {Record<string, any>} Flat map\n */\n static flattenForm(value, prefix = '', result = {})\n {\n if ( typeof value !== 'object' ) {\n return result[prefix] = value;\n }\n\n let fn = (key) => {\n return prefix ? `${prefix}[${key}]` : key;\n };\n\n for ( let key of Mix.keys(value) ) {\n this.flattenForm(value[key], fn(key), result);\n }\n\n return result;\n }\n\n /**\n * Unpack dotted keys into object\n *\n * @example Obj.unpack({\"a.b\":1}) // => {a:{b:1}}\n *\n * @param {any} value Flat key map\n * @param {Record<string, any>} [result] Result object\n * @returns {Record<string, any>} Unpacked object\n */\n static unpack(value, result = {})\n {\n Arr.each(Mix.keys(value), (key) => {\n this.set(result, key, value[key]);\n });\n\n return result;\n }\n\n /**\n * Assign objects (Object.assign)\n *\n * @example Obj.assign({}, {a:1}) // => {a:1}\n *\n * @param {...any} args Assign args\n * @returns {any} Assigned object\n */\n static assign(...args)\n {\n return Object.assign(...args);\n }\n\n /**\n * Deep clone primitive/array/object\n *\n * @example Obj.clone({a:{b:1}}) // => new object\n *\n * @param {any} value Value to clone\n * @param {any} [merge] Merge values\n * @returns {any} Cloned value\n */\n static clone(value, merge = null)\n {\n if ( Mix.isPrim(value) ) {\n return value;\n }\n\n if ( Mix.isArr(value) ) {\n return Arr.clone(value);\n }\n\n if ( ! Mix.isObj(value) ) {\n return value;\n }\n\n let result = {};\n\n for ( let key of Mix.keys(value) ) {\n result[key] = this.clone(value[key]);\n }\n\n if ( merge != null ) {\n return this.assign(result, merge);\n }\n\n return result;\n }\n\n /**\n * Get and remove nested value\n *\n * @example Obj.pluck({a:1}, \"a\") // => 1\n *\n * @param {any} value Source object\n * @param {any} key Key path\n * @param {any} [fallback] Fallback value\n * @returns {any} Plucked value\n */\n static pluck(value, key, fallback = null)\n {\n let result = this.get(value, key, fallback);\n\n this.unset(value, key);\n\n return result;\n }\n\n /**\n * Pick only given keys\n *\n * @example Obj.only({a:1,b:2}, [\"a\"]) // => {a:1}\n *\n * @param {any} value Source object\n * @param {Array<any>} keys Allowed keys\n * @param {any} [merge] Merge values\n * @returns {Record<string, any>} Picked object\n */\n static only(value, keys, merge = null)\n {\n let result = {};\n\n this.each(value, (val, key) => {\n if ( Arr.has(keys, key) ) result[key] = val;\n });\n\n if ( merge == null ) {\n return result;\n }\n\n return this.assign(result, merge);\n }\n\n /**\n * Pick all keys except given\n *\n * @example Obj.except({a:1,b:2}, [\"a\"]) // => {b:2}\n *\n * @param {any} value Source object\n * @param {Array<any>} keys Excluded keys\n * @param {any} [merge] Merge values\n * @returns {Record<string, any>} Picked object\n */\n static except(value, keys, merge = null)\n {\n let result = {};\n\n this.each(value, (val, key) => {\n if ( ! Arr.has(keys, key) ) result[key] = val;\n });\n\n if ( merge == null ) {\n return result;\n }\n\n return this.assign(result, merge);\n }\n\n /**\n * Check if value includes search\n *\n * @example Obj.includes({a:1}, {a:1}) // => true\n * @example Obj.includes({a:1}, {a:2}) // => false\n *\n * @param {any} value Source value\n * @param {any} search Search spec\n * @returns {boolean} True if includes\n */\n static includes(value, search)\n {\n if ( Mix.isArr(search) ) {\n return Arr.includes(value, search);\n }\n\n if ( ! Mix.isObj(search) ) {\n return value === search;\n }\n\n let keys = Mix.keys(search);\n\n let [result, length] = [\n true, keys.length,\n ];\n\n for ( let i = 0; result === true && i < length; i++) {\n result = this.includes(...[\n value[keys[i]], search[keys[i]]\n ]);\n }\n\n return result;\n }\n\n /**\n * Check if value matches search\n *\n * @example Obj.matches({a:1}, {a:1}) // => true\n * @example Obj.matches({a:1}, {b:1}) // => false\n *\n * @param {any} value Source value\n * @param {any} search Search spec\n * @returns {boolean} True if matches\n */\n static matches(value, search)\n {\n if ( Mix.isArr(search) ) {\n return Arr.matches(value, search);\n }\n\n if ( ! Mix.isObj(value) ) {\n return value === search;\n }\n\n let keys = Arr.unique([\n ...Mix.keys(search), ...Mix.keys(value)\n ]);\n\n let [result, length] = [\n true, keys.length,\n ];\n\n for ( let i = 0; result === true && i < length; i++) {\n result &&= this.matches(...[\n value[keys[i]], search[keys[i]]\n ]);\n }\n\n return result;\n }\n\n static sort(obj, key)\n {\n let keys = Mix.keys(obj);\n\n if ( Mix.isFunction(key) ) {\n keys = keys.sort((a, b) => {\n return key.call({}, obj[a], obj[b]);\n });\n }\n\n if ( !Mix.isFunction(key) ) {\n keys = keys.sort((a, b) => {\n return Mix.integer(this.get(obj[a], key)) - Mix.integer(this.get(obj[b], key));\n })\n }\n\n let result = [];\n\n Arr.each(keys, (key, index) => {\n obj[key]['_key'] = key;\n result[index] = obj[key];\n });\n\n return result;\n }\n\n static sortString(obj, key)\n {\n let keys = Mix.keys(obj);\n\n if ( !Mix.isFunction(key) ) {\n keys = keys.sort((a, b) => {\n\n let va = Mix.string(this.get(obj[a], key)).toLowerCase();\n let vb = Mix.string(this.get(obj[b], key)).toLowerCase();\n\n return (va < vb) ? - 1 : (va > vb) ? 1 : 0;\n })\n }\n\n let result = [];\n\n Arr.each(keys, (key, index) => {\n obj[key]['_key'] = key;\n result[index] = obj[key];\n });\n\n return result;\n }\n\n}\n\n/**\n * @see PicoMixed.vals\n */\nPicoObject.values = (...args) => {\n console.warn('Obj.values() is deprecated, use Mix.vals() instead.');\n return Mix.vals(...args);\n};\n\n/**\n * @see PicoArray.find\n */\nPicoObject.find = (...args) => {\n console.warn('Obj.find() is deprecated, use Arr.find() instead.');\n return Arr.find(...args);\n};\n\n/**\n * @see PicoArray.findIndex\n */\nPicoObject.findIndex = (...args) => {\n console.warn('Obj.findIndex() is deprecated, use Arr.findIndex() instead.');\n return Arr.findIndex(...args);\n};\n\n// /**\n// * @see PicoArray.sort\n// */\n// PicoObject.sort = (...args) => {\n// console.warn('Obj.sort() is deprecated, use Arr.sort() instead.');\n// return Arr.sort(...args);\n// };\n//\n// /**\n// * @see PicoArray.sortDeep\n// */\n// PicoObject.sortString = (...args) => {\n// console.warn('Obj.sortString() is deprecated, use Arr.sortDeep() instead.');\n// return Arr.sortDeep(...args);\n// };\n\nexport default PicoObject","import { go, Arr, Mix, Run, Now, Locale, Str, Obj } from \"../index.esm.js\";\n\nexport const MIX_REGEX = {\n 'iso': /^\\d{4}-\\d{2}-\\d{2}[T\\s]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/,\n};\n\nexport class PicoMixed\n{\n /**\n * Check if the value is empty\n *\n * @example Mix.isEmpty('') // => true\n * @example Mix.isEmpty(null) // => true\n * @example Mix.isEmpty([]) // => true\n * @example Mix.isEmpty({}) // => true\n * @example Mix.isEmpty(false) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Returns true if value is not empty\n */\n static isEmpty(value)\n {\n if ( value == null ) {\n return true;\n }\n\n if ( typeof value === 'string' ) {\n return value === '';\n }\n\n if ( typeof value === 'number' ) {\n return false;\n }\n\n if ( typeof value === 'boolean' ) {\n return false;\n }\n\n if ( this.isArr(value) ) {\n return value.length === 0;\n }\n\n return this.len(value) === 0;\n }\n\n /**\n * Check if the value is null\n *\n * @example Mix.isNull(null) // => true\n * @example Mix.isNull(undefined) // => false\n * @example Mix.isNull(0) // => false\n * @example Mix.isNull('') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if null\n */\n static isNull(value)\n {\n return value === null;\n }\n\n /**\n * Check if the value is undefined\n *\n * @example Mix.isUndef(undefined) // => true\n * @example Mix.isUndef(null) // => false\n * @example Mix.isUndef(0) // => false\n * @example Mix.isUndef('') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if undefined\n */\n static isUndef(value)\n {\n return value === undefined;\n }\n\n /**\n * Check if the value is null or undefined\n *\n * @example Mix.isNix(null) // => true\n * @example Mix.isNix(undefined) // => true\n * @example Mix.isNix(0) // => false\n * @example Mix.isNix('') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if null or undefined\n */\n static isNix(value)\n {\n return value === undefined || value === null;\n }\n\n /**\n * Check if the value is string or number\n *\n * @example Mix.isPrim('foo') // => true\n * @example Mix.isPrim(2.2) // => true\n * @example Mix.isPrim([]) // => false\n * @example Mix.isPrim(null) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if typeof string or number\n */\n static isPrim(value)\n {\n return typeof value === 'string' || typeof value === 'number';\n }\n\n /**\n * @see PicoMixed.isPrim\n */\n static isPrimitive = PicoMixed.isPrim;\n\n /**\n * Check if the value is a string\n *\n * @example Mix.isStr('foo') // => true\n * @example Mix.isStr(1) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is string\n */\n static isStr(value)\n {\n return typeof value === 'string';\n }\n\n /**\n * @see PicoMixed.isStr\n */\n static isString = PicoMixed.isStr;\n\n /**\n * Check if the value is a number\n *\n * @example Mix.isNum(12.2) // => true\n * @example Mix.isNum('-4.3') // => true\n * @example Mix.isNum('13f') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is number\n */\n static isNum(value)\n {\n if ( typeof value === 'number' ) {\n return true;\n }\n\n if ( this.isStr(value) ) {\n return /^-?[0-9]+(\\.[0-9]+)?$/.test(value);\n }\n\n return false;\n }\n\n /**\n * @see PicoMixed.isNum\n */\n static isNumber = PicoMixed.isNum;\n\n /**\n * Check if the value is an integer\n *\n * @example Mix.isInt(12) // => true\n * @example Mix.isInt('4') // => true\n * @example Mix.isInt('-4.3') // => false\n * @example Mix.isInt(3.4) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is integer\n */\n static isInt(value)\n {\n if ( !this.isNum(value) ) {\n return false;\n }\n\n if ( this.isStr(value) ) {\n return /^-?[0-9]+$/.test(value);\n }\n\n return parseInt(value) === parseFloat(value);\n }\n\n /**\n * @see PicoMixed.isInt\n */\n static isInteger = PicoMixed.isInt;\n\n /**\n * Check if the value is a boolean\n *\n * @example Mix.isBool(false) // => true\n * @example Mix.isBool('true') // => true\n * @example Mix.isBool(1) // => false\n * @example Mix.isBool('1') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is boolean\n */\n static isBool(value)\n {\n if ( typeof value === 'boolean' ) {\n return true;\n }\n\n if ( this.isStr(value) ) {\n return /^(true|false)$/.test(value);\n }\n\n return false;\n }\n\n /**\n * @see PicoMixed.isBool\n */\n static isBoolean = PicoMixed.isBool;\n\n /**\n * Check if the value is a function\n *\n * @example Mix.isFunc(() => {}) // => true\n * @example Mix.isFunc(Mix.isFunc) // => true\n * @example Mix.isFunc({}) // => false\n * @example Mix.isFunc('1') // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Return true if is function\n */\n static isFunc(value)\n {\n return typeof value === 'function';\n }\n\n /**\n * @see PicoMixed.isFunc\n */\n static isFunction = PicoMixed.isFunc;\n\n /**\n * Check if the value is object\n *\n * @example Mix.isRef({}) // => true\n * @example Mix.isRef([]) // => true\n * @example Mix.isRef(() => {}) // => false\n * @example Mix.isRef(null) // => false\n * @example Mix.isRef(undefined) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Returns true if is an object\n */\n static isRef(value)\n {\n if ( value == null ) {\n return false;\n }\n\n return typeof value === 'object';\n }\n\n /**\n * @see PicoMixed.isRef\n */\n static isReference = PicoMixed.isRef;\n\n /**\n * Check if the value is plain object\n *\n * @example Mix.isObj({}) // => true\n * @example Mix.isObj([]) // => false\n *\n * @param {any} value The value to test\n * @returns {boolean} Returns true if is plain object\n */\n static isObj(value)\n {\n if ( value == null ) {\n return false;\n }\n\n return typeof value === 'object' && value.constructor === Object;\n }\n\n /**\n * @see PicoMixed.isObj\n */\n static isObject = PicoMixed.isObj;\n\n /**\n * Check if the value is array object\n *\n * @example Mix.isArr([]) // => true\n * @example Mix.isArr({}) // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is array object\n */\n static isArr(value)\n {\n if ( value == null ) {\n return false;\n }\n\n return typeof value === 'object' && value.constructor === Array;\n }\n\n /**\n * @see PicoMixed.isArr\n */\n static isArray = PicoMixed.isArr;\n\n /**\n * Check if the value is iterable object\n *\n * @example Mix.isIter(new FormData()) // => true\n * @example Mix.isIter({}) // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is iterable object\n */\n static isIter(value)\n {\n if ( this.isArr(value) ) {\n return false;\n }\n\n if ( !this.isRef(value) ) {\n return false;\n }\n\n return this.isFunc(value.entries);\n }\n\n /**\n * @see PicoMixed.isIter\n */\n static isIterable = PicoMixed.isIter;\n\n /**\n * Check if the value is iso date\n *\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate('2023-01-01 00:00:00') // => true\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is iso date\n */\n static isIsoDate(value)\n {\n if ( value instanceof Date ) {\n return true;\n }\n\n return MIX_REGEX.iso.test(value);\n }\n\n /**\n * Check if the value is valid date\n *\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate('2023-01-01') // => true\n * @example Mix.isIsoDate('2023-01-01 00:00:00') // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is valid date\n */\n static isDate(value)\n {\n if ( value instanceof Date ) {\n return true;\n }\n\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n }\n\n /**\n * Check if the value is valid time\n *\n * @example Mix.isIsoDate(new Date()) // => true\n * @example Mix.isIsoDate('00:00:00') // => true\n * @example Mix.isIsoDate('2023-01-01 00:00:00') // => false\n *\n * @param {any} value The Value to test\n * @returns {boolean} Returns true if is valid time\n */\n static isTime(value)\n {\n if ( value instanceof Date ) {\n return true;\n }\n\n return /^\\d{2}:\\d{2}:\\d{2}$/.test(value);\n }\n\n /**\n * Check if value is equal\n *\n * @example Mix.isEqual(el, el) // => true\n *\n * @param {any} obj Source value\n * @param {any} val Compare value\n * @returns {boolean} True if equal\n */\n static isEqual(obj, val)\n {\n if ( obj instanceof Node ) {\n return obj.isEqualNode(val);\n }\n\n if ( this.isRef(obj) ) {\n return Object.is(obj, val)\n }\n\n return obj === val;\n }\n\n /**\n * Convert iterable object to a regular object\n *\n * @example Mix.iter(new FormData()) // => {}\n *\n * @param {any} value Value to convert\n * @returns {Record<string, any>} Converted object\n */\n static iter(value)\n {\n if ( value == null ) {\n return {};\n }\n\n let result = {};\n\n for ( const [key, val] of value.entries() ) {\n result[key] = val;\n }\n\n return result;\n }\n\n /**\n * Get keys of an object\n *\n * @example Mix.keys({a: 'v1', b: 'v2'}) // => ['a', 'b']\n * @example Mix.keys(['v1', 'v2']) // => ['0', '1']\n *\n * @param {any} value Object to iterate\n * @returns {Array<any>} Returns array with keys\n */\n static keys(value)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( this.isFunc(value.toJSON) ) {\n value = value.toJSON();\n }\n\n if ( this.isIter(value) ) {\n value = this.iter(value);\n }\n\n return Object.keys(value);\n }\n\n /**\n * Get values of an object\n *\n * @example Mix.vals({a: 'v1', b: 'v2'}) // => ['v1', 'v2']\n * @example Mix.vals(['v1', 'v2']) // => ['v1', 'v2']\n *\n * @param {any} value Object to iterate\n * @returns {Array<any>} Returns array with values\n */\n static vals(value)\n {\n if ( value == null ) {\n return [];\n }\n\n if ( this.isFunc(value.toJSON) ) {\n value = value.toJSON();\n }\n\n if ( this.isIter(value) ) {\n value = this.iter(value);\n }\n\n if ( this.isArr(value) || !go().chrome ) {\n return Object.values(value);\n }\n\n let keys = this.keys(value);\n\n for ( let i = 0; i < keys.length; i ++ ) {\n keys[i] = value[keys[i]];\n }\n\n return keys;\n }\n\n /**\n * Cast to array\n *\n * @example Mix.nodes(nodeList) // => []\n *\n * @param {any} value Source value\n * @returns {Array<any>} Array result\n */\n static nodes(value)\n {\n return Array.prototype.slice.call(value);\n }\n\n /**\n * Get own props excluding keys\n *\n * @example Mix.props(Math, [\"PI\"]) // => {}\n *\n * @param {any} value Source object\n * @param {Array<any>} [exclude] Exclude keys\n * @returns {Record<string, any>} Props map\n */\n static props(value, exclude = [])\n {\n let result = {};\n\n for ( const key of Object.getOwnPropertyNames(value) ) {\n if ( exclude.length && ! Arr.has(exclude, key) ) {\n result[key] = value[key];\n }\n }\n\n return result;\n }\n\n /**\n * Get static class props\n *\n * @example Mix.class(MyClass) // => {}\n *\n * @param {any} value Source class\n * @param {Array<any>} [exclude] Exclude keys\n * @returns {Record<string, any>} Props map\n */\n static class(value, exclude = [])\n {\n exclude = Arr.merge(exclude, [\n 'length', 'name', 'prototype', 'constructor'\n ]);\n\n return this.props(value, exclude);\n }\n\n /**\n * Get prototype props\n *\n * @example Mix.proto(MyClass) // => {}\n *\n * @param {any} value Source class\n * @param {Array<any>} [exclude] Exclude keys\n * @returns {Record<string, any>} Props map\n */\n static proto(value, exclude = [])\n {\n exclude = Arr.merge(exclude, [\n 'constructor'\n ]);\n\n return this.props(value.prototype, exclude);\n }\n\n /**\n * Create form data\n *\n * @example Mix.form({ a: 1 }) // => FormData\n *\n * @param {any} value Source object\n * @returns {FormData} Form instance\n */\n static form(value)\n {\n let form = new FormData();\n\n Obj.each(Obj.flattenForm(value), (val, key) => {\n form.append(key, val);\n });\n\n return form;\n }\n\n /**\n * Loop over items\n *\n * @example Mix.vals(FormData, (val, key) => null) // => Mix\n * @example Mix.vals(NodeList, (val, key) => null) // => Mix\n *\n * @param {any} value Value to loop\n * @param {function} cb Callback for each loop\n * @returns {PicoMixed} Returns Mix instance\n */\n static each(value, cb)\n {\n if ( !this.isRef(value) ) {\n throw new Error('Iterate non object');\n }\n\n for ( let key of Mix.keys(value) ) {\n cb(value[key], key);\n }\n\n return this;\n }\n\n /**\n * Get length of value\n *\n * @example Mix.len({a: 'v1', b: 'v2'}) // => 2\n * @example Mix.len(['v1', 'v2']) // => 2\n * @example Mix.len('foobar') // => 6\n * @example Mix.len(12) // => 2\n *\n * @param {any} value The value to count\n * @returns {number} Returns length of value\n */\n static len(value)\n {\n if ( this.isArr(value) ) {\n return value.length;\n }\n\n if ( ! this.isRef(value) ) {\n return this.string(value).length;\n }\n\n return this.keys(value).length;\n }\n\n /**\n * @see PicoMixed.length\n */\n static length = PicoMixed.len;\n\n /**\n * Compare two objects (used for natural array sort)\n *\n * @param {any} value First compare value\n * @param {any} compare Second compare value\n * @returns {number} Returns sort position\n */\n static compare(value, compare)\n {\n return Locale.collator().compare(value, compare);\n }\n\n /**\n * Get value as null\n *\n * @example Mix.null(\"null\") // => null\n *\n * @param {any} value Input value\n * @param {any} [fallback] Fallback value\n * @returns {any} Null or fallback\n */\n static null(value, fallback = null)\n {\n if ( value === 'null' ) {\n return null;\n }\n\n if ( this.isEmpty(value) ) {\n return null;\n }\n\n return fallback;\n }\n\n /**\n * Cast to array\n *\n * @example Mix.arr(\"a,b\") // => [\"a\", \"b\"]\n *\n * @param {any} value Source value\n * @returns {Array<any>} Array result\n */\n static arr(value)\n {\n if ( this.isArr(value) ) {\n return value;\n }\n\n if ( ! this.isStr(value) ) {\n return [value];\n }\n\n value = value.replace(/^@?\\[?(.*?)]$/g, '$1');\n\n return Arr.each(value.split(','), (val) => {\n return val.replace(/(^\"|^'|'$|\"$)/g, '');\n });\n }\n\n /**\n * @see PicoMixed.arr\n */\n static array = PicoMixed.arr;\n\n /**\n * Convert value to string\n *\n * @example Mix.str('foobar') // => 'foobar'\n * @example Mix.str(12) // => '12'\n * @example Mix.str(true) // => 'true'\n * @example Mix.str(null) // => 'null'\n * @example Mix.str(undefined) // => 'undefined'\n *\n * @param {any} value The value to convert\n * @returns {string} Return value as string\n */\n static str(value)\n {\n if ( this.isNix(value) ) {\n return String(value);\n }\n\n if ( value.toString === undefined ) {\n return String(value);\n }\n\n return value.toString();\n }\n\n /**\n * @see PicoMixed.str\n */\n static string = PicoMixed.str;\n\n /**\n * Convert value to number\n *\n * @example Mix.num('-2.2') // => -2.2\n * @example Mix.num(12) // => 12\n * @example Mix.num('foobar') // => NaN\n * @example Mix.num(true) // => NaN\n *\n * @param {any} value The value to convert\n * @param {any} fallback Fallback incase it is not primitive\n * @returns {number|any} Return value as number\n */\n static num(value, fallback = NaN)\n {\n if ( !this.isPrim(value) ) {\n return fallback;\n }\n\n if ( this.isStr(value) ) {\n value = parseFloat(value);\n }\n\n return value;\n }\n\n /**\n * @see PicoMixed.num\n */\n static number = PicoMixed.num;\n\n /**\n * Convert value to integer\n *\n * @example Mix.int('-2.2') // => -2\n * @example Mix.int(12) // => 12\n * @example Mix.int('foobar') // => NaN\n * @example Mix.int(true) // => NaN\n *\n * @param {any} value The value to convert\n * @param {any} fallback Fallback incase it is not primitive\n * @returns {number|any} Return value as integer\n */\n static int(value, fallback = NaN)\n {\n if ( !this.isPrim(value) ) {\n return fallback;\n }\n\n if ( this.isStr(value) ) {\n value = parseFloat(value);\n }\n\n return Math.round(value);\n }\n\n /**\n * @see PicoMixed.int\n */\n static integer = PicoMixed.int;\n\n /**\n * Convert value to boolean\n *\n * @example Mix.int(true) // => true\n * @example Mix.int(12) // => true\n * @example Mix.int(0) // => false\n * @example Mix.int('yes') // => true\n * @example Mix.int('foobar') // => false\n * @example Mix.int(['v1']) // => true\n * @example Mix.int({}) // => false\n *\n * @param {any} value The value to convert\n * @returns {boolean} Return value as boolean\n */\n static bool(value)\n {\n if ( this.isRef(value) ) {\n return !!this.vals(value).length;\n }\n\n if ( this.isNum(value) ) {\n return this.num(value) !== 0;\n }\n\n return /^(true|yes)$/i.test(value);\n }\n\n /**\n * @see PicoMixed.bool\n */\n static boolean = PicoMixed.bool;\n}\n\nPicoMixed.global = function (...args) {\n console.warn('Mix.global() is deprecated, use go() instead.');\n return go(...args);\n};\n\nPicoMixed.isPlain = function (...args) {\n console.warn('Mix.isPlain() is deprecated, use Mix.isObj() instead.');\n return Mix.isObj(...args);\n};\n\nPicoMixed.float = function (...args) {\n console.warn('Mix.float() is deprecated, use Mix.num() instead.');\n return Mix.num(...args);\n};\n\nPicoMixed.delay = function (...args) {\n console.warn('Mix.delay() is deprecated, use Run.delay() instead.');\n return Run.delay(...args);\n};\n\nPicoMixed.async = function (...args) {\n console.warn('Mix.async() is deprecated, use Run.async() instead.');\n return Run.async(...args);\n};\n\nPicoMixed.debounce = function (...args) {\n console.warn('Mix.debounce() is deprecated, use Run.debounce() instead.');\n return Run.debounce(...args);\n};\n\nPicoMixed.throttle = function (...args) {\n console.warn('Mix.throttle() is deprecated, use Run.throttle() instead.');\n return Run.throttle(...args);\n};\n\nPicoMixed.framerate = function (...args) {\n console.warn('Mix.framerate() is deprecated, use Run.framerate() instead.');\n return Run.framerate(...args);\n};\n\nPicoMixed.convertString = function (...args) {\n console.warn('Mix.convertString() is deprecated, use Str.string() instead.');\n return Str.string(...args);\n};\n\nPicoMixed.convertDatetime = function (...args) {\n console.warn('Mix.convertDatetime() is deprecated, use Str.date() instead.');\n return Str.date(...args);\n};\n\nPicoMixed.convertBool = function (...args) {\n console.warn('Mix.convertBool() is deprecated, use Str.boolean() instead.');\n return Str.boolean(...args);\n};\n\nPicoMixed.convertBoolean = function (...args) {\n console.warn('Mix.convertBoolean() is deprecated, use Str.boolean() instead.');\n return Str.boolean(...args);\n};\n\n\n\nexport default PicoMixed;","import { Str } from \"../index.esm.js\";\n\n/**\n * @var {Array<string>} RADIX_NUMBER Radix from 0 to 9\n */\nexport const RADIX_NUMBER = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'\n];\n\n/**\n * @var {Array<string>} RADIX_LETTER_LC Radix from a to z\n */\nexport const RADIX_LETTER_LC = [\n 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\n];\n\n/**\n * @var {Array<string>} RADIX_LETTER_UC Radix from A to Z\n */\nexport const RADIX_LETTER_UC = [\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n];\n\n/**\n * @var {Array<string>} RADIX_UUID Radix from 0-9, a-f and A-F\n */\nexport const RADIX_UUID = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F',\n];\n\n\n/**\n * @var {Array<string>} RADIX_UP19 Radix with 8, 9, a and b\n */\nexport const RADIX_UP19 = [\n '8', '9', 'a', 'b',\n];\n\n/**\n * @var {Array<string>} radix_symbol_pass Radix for passwords\n */\nexport const radix_symbol_pass = [\n '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '-', '=', '[', ']', '{', '}', ';', ':', ',', '.', '/', '<', '>', '?'\n];\n\nexport class PicoHash\n{\n\n /**\n * @var {Array<string>} RADIX\n */\n static RADIX = [\n ...RADIX_NUMBER, ...RADIX_LETTER_LC, ...RADIX_LETTER_UC\n ];\n\n /**\n * Get random char from radix\n *\n * @example Hash.radix(2, ['R', 'f']) // => 'R' or 'f'\n *\n * @param {number} [limit=60] Maximum radix char index\n * @param {Array<string>} [radix=null] A defined radix or null for default\n * @returns {string} Returns random char from radix\n */\n static radix(limit = 60, radix = null)\n {\n return (radix || this.RADIX)[this.number(limit - 1)];\n }\n\n /**\n * Get random number\n *\n * @example Hash.number(20, 18) // => 18, 19 or 20\n *\n * @param {number} [limit=1024] Maximum value\n * @param {number} [start=0] Minimum value\n * @returns {number} Returns a random number between start and limit\n */\n static number(limit = 1024, start = 0)\n {\n return Math.floor(Math.random() * (limit - start + 1)) + start;\n }\n\n /**\n * Get a random hash with given options\n *\n * @example Hash.make(4, 32, { 0: '?' }) // => '?8Wj'\n *\n * @param {number} [length] Length of generated hash\n * @param {number} [radix] Maximum radix char index (10 for 0-9, 36 incl. a-z, 62 incl. A-Z)\n * @param {Record<number, string>} [map] Remap for generated string\n * @returns {string} Returns a random hash with fixed length\n */\n static make(length = 6, radix = 62, map = {})\n {\n let hash = '';\n\n for ( let i = 0; i < length; i ++ ) {\n hash += this.radix(radix);\n }\n\n for ( const k of Object.keys(map) ) {\n hash = Str.set(hash, k, map[k]);\n }\n\n return hash;\n }\n\n /**\n * Get a valid v4 UUID\n *\n * @example Hash.uuid() // => 'FBbA001F-0a01-4bE8-b29C-A9c47fA090f'\n *\n * @param {string|number} [version] UUID version number\n * @returns {string} Returns a valid UUID\n */\n static uuid(version = 4)\n {\n let hash = '';\n\n // Use only selected chars from the radix store\n for ( let i = 0; i < 31; i ++ ) {\n if ( i === 15 ) {\n hash += this.radix(RADIX_UP19.length, RADIX_UP19);\n } else {\n hash += this.radix(RADIX_UUID.length, RADIX_UUID);\n }\n }\n\n // For higher performance use substring\n return hash.substring(0, 8)\n + '-' + hash.substring(8, 12)\n + '-' + version + hash.substring(12, 15)\n + '-' + hash.substring(15, 19)\n + '-' + hash.substring(19, 31);\n }\n\n /**\n * Generate a password with or without symbols\n *\n * @example Hash.password(12, ['%', '&']) // => '0unJ%VDi2RJX'\n *\n * @param {number} [length=24] Length of password\n * @param {Array<string>} [symbols=null] Defined symbols or null for default\n * @returns {string} A random password with fixed length\n */\n static password(length = 24, symbols = null)\n {\n let radix = [\n ...this.RADIX, ...(symbols || radix_symbol_pass)\n ];\n\n let hash = '';\n\n for ( let i = 0; i < length; i ++ ) {\n hash += this.radix(radix.length, radix);\n }\n\n return hash;\n }\n\n}\n\nexport default PicoHash;","import { Str, Event, For, Mix, Arr } from \"../index.esm.js\";\n\nexport class PicoSignal\n{\n static $events = [];\n\n /**\n * Bind callback to event name\n *\n * @example Event.bind(\"x\", cb) // => Event\n * @example Event.bind([\"a\",\"b\"], cb) // => Event\n *\n * @param {any} event Event name(s)\n * @param {function} cb Event callback\n * @param {any} [options] Listener options\n * @param {boolean} [paused] Start paused\n * @returns {typeof PicoSignal} Event class\n */\n static bind(event, cb, options = {}, paused = false)\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.bind(e, ...arguments), this);\n }\n\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n this.$events = Arr.append(this.$events, {\n event, cb, options, paused\n });\n\n return this;\n }\n\n /**\n * Unbind callback(s) from event\n *\n * @example Event.unbind(\"x\") // => Event\n * @example Event.unbind([\"a\",\"b\"]) // => Event\n *\n * @param {any} event Event name(s)\n * @param {any} [options] Listener options\n * @returns {typeof PicoSignal} Event class\n */\n static unbind(event, options = {})\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.unbind(e, ...arguments), this);\n }\n\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n Arr.remove(this.$events, {\n event, options\n });\n\n return this;\n }\n\n /**\n * Fire event with arguments\n *\n * @example Event.fire(\"x\", 1) // => Event\n *\n * @param {string} event Event name\n * @param {...any} args Event args\n * @returns {typeof PicoSignal} Event class\n */\n static fire(event, ...args)\n {\n let events = this.$events.filter((item) => {\n return item.event === event;\n });\n\n Arr.each(events, (e) => {\n if ( ! e.paused ) {\n e.cb.call({}, ...args);\n }\n });\n\n return this;\n }\n\n /**\n * Pause listeners for event\n *\n * @example Event.pause(\"x\") // => Event\n *\n * @param {any} event Event name(s)\n * @param {any} [options] Listener options\n * @returns {typeof PicoSignal} Event class\n */\n static pause(event, options = {})\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.pause(e, ...arguments), this);\n }\n\n let value = Arr.find(this.$events, {\n event, options\n });\n\n if ( value != null ) {\n value.paused = true;\n }\n\n return this;\n }\n\n /**\n * Unpause listeners for event\n *\n * @example Event.unpause(\"x\") // => Event\n *\n * @param {any} event Event name(s)\n * @param {any} [options] Listener options\n * @returns {typeof PicoSignal} Event class\n */\n static unpause(event, options = {})\n {\n if ( Mix.isArr(event) ) {\n return Arr.each(event, (e) => this.pause(e, ...arguments), this);\n }\n\n let value = Arr.find(this.$events, {\n event, options\n });\n\n if ( value != null ) {\n value.paused = false;\n }\n\n return this;\n }\n\n}\n\nexport default PicoSignal;","import { Mix, Obj, Locale } from \"../index.esm.js\";\n\nexport class PicoLocale\n{\n /**\n * Translation dictionary\n *\n * @type {Record<any, any>}\n */\n static $text = {};\n\n /**\n * Cached collator instance\n *\n * @type {Intl.Collator|null}\n */\n static $sort = null;\n\n /**\n * Active locale code\n *\n * @type {string}\n */\n static $code = 'en';\n\n /**\n * Check if translation key exists\n *\n * @example Locale.has(\"known.key\") // => true\n * @example Locale.has(\"unknown.key\") // => false\n *\n * @param {any} [key] Translation key\n * @returns {boolean} True if exists\n */\n static has(key = undefined)\n {\n if ( key === undefined ) {\n return true;\n }\n\n return Mix.has(PicoLocale.$text, key);\n }\n\n /**\n * Get translation value or map\n *\n * @example Locale.get(\"known.key\") // => \"value\"\n * @example Locale.get() // => object\n *\n * @param {any} [key] Translation key\n * @param {any} [fallback] Fallback value\n * @returns {any} Translation value\n */\n static get(key = undefined, fallback = null)\n {\n if ( key === undefined ) {\n return PicoLocale.$text;\n }\n\n return Obj.get(PicoLocale.$text, key, fallback);\n }\n\n /**\n * Set translation key or map\n *\n * @example Locale.set({foo:\"bar\"})\n * @example Locale.set(\"unknown\", \"nix\")\n *\n * @param {any} [key] Key or map\n * @param {any} [value] Value to set\n * @returns {any} Updated map\n */\n static set(key = undefined, value = undefined)\n {\n if ( value === undefined ) {\n return PicoLocale.$text = key;\n }\n\n return Obj.set(PicoLocale.$text, key, value);\n }\n\n /**\n * Get or set locale code\n *\n * @example Locale.code() // => \"en\"\n * @example Locale.code(\"de\") // => \"de\"\n *\n * @param {string|null} [code] Locale code\n * @returns {string} Active code\n */\n static code(code = null)\n {\n if ( ! Mix.isNull(code) ) {\n return Locale.$code = code;\n }\n\n if ( ! Mix.isNull(Locale.$code) ) {\n return Locale.$code;\n }\n\n Locale.$code = (navigator.language || 'en-US')\n .replace(/-[A-Z]+$/, '');\n\n return Locale.$code;\n }\n\n /**\n * Get Intl.Collator for sorting\n *\n * @example Locale.collator().compare(\"a\",\"b\")\n *\n * @returns {Intl.Collator} Collator instance\n */\n static collator()\n {\n if ( ! Mix.isNull(Locale.$sort) ) {\n return Locale.$sort;\n }\n\n Locale.$sort = new Intl.Collator(Locale.code(), {\n numeric: true, sensitivity: 'base'\n });\n\n return Locale.$sort;\n }\n\n /**\n * Replace :tokens in text\n *\n * @example Locale.replace(\"Hi :x\", {x:\"Bob\"}) // => \"Hi Bob\"\n * @example Locale.replace(\"Hi\", null) // => \"Hi\"\n *\n * @param {string} text Input text\n * @param {any} [replace] Replace map\n * @returns {string} Replaced text\n */\n static replace(text, replace = null)\n {\n if ( replace == null ) {\n return text;\n }\n\n Obj.each(replace, (val, key) => {\n text = text.replace(new RegExp(':' + key, 'g'), val);\n });\n\n return text;\n }\n\n /**\n * Translate key with replace map\n *\n * @example Locale.trans(\"known.key\") // => \"...\"\n * @example Locale.trans(\"Hi :x\", {x:\"Bob\"}) // => \"Hi Bob\"\n *\n * @param {string} text Key or text\n * @param {any} [replace] Replace map\n * @returns {string} Translated text\n */\n static trans(text, replace = null)\n {\n text = Obj.get(PicoLocale.$text, text, text);\n\n return Locale.replace(text, replace);\n }\n\n /**\n * Translate plural choice by count\n *\n * @example Locale.choice(\"items\", 2) // => \"...\"\n * @example Locale.choice(\"items\", 1, {x:\"y\"}) // => \"...\"\n *\n * @param {string} text Key or text\n * @param {number} [count] Choice count\n * @param {any} [replace] Replace map\n * @returns {string} Chosen text\n */\n static choice(text, count = 0, replace = {})\n {\n text = Obj.get(PicoLocale.$text, text, text);\n\n if ( typeof replace.count === 'undefined' ) {\n replace.count = count;\n }\n\n text = Locale.countpick(text.split('|'), count);\n\n return Locale.replace(text, replace);\n }\n\n /**\n * Pick plural variant from list\n *\n * @example Locale.countpick([\"a\",\"b\"], 2) // => \"b\"\n *\n * @param {Array<string>} splits Variant list\n * @param {number} count Choice count\n * @returns {string} Picked text\n */\n static countpick(splits, count)\n {\n let length = splits.length;\n\n if ( length === 3 && count === 0 ) {\n return splits[0];\n }\n\n if ( length === 3 && count === 1 ) {\n return splits[1];\n }\n\n if ( length === 3 && count >= 2 ) {\n return splits[2];\n }\n\n if ( length === 2 && count === 1 ) {\n return splits[0];\n }\n\n if ( length === 2 && count !== 1 ) {\n return splits[1];\n }\n\n return splits[0];\n }\n\n}\n\nexport default PicoLocale","import { For, Arr, Now, Mix } from \"../index.esm.js\";\n\nexport const COOKIE_REGEX = {\n entry: /(?<=^|;)\\s*(?<key>.*?)\\s*=\\s*(?<value>[^;$]+)/g\n};\n\nexport class PicoCookie\n{\n static $cookie = null;\n\n /**\n * Read raw document.cookie\n *\n * @example Cookie.global() // => \"a=b; c=d\"\n *\n * @returns {string} Cookie string\n */\n static global()\n {\n if ( globalThis.document == null ) {\n return '';\n }\n\n return globalThis.document.cookie || '';\n }\n\n /**\n * Parse cookies into object\n *\n * @example Cookie.parse() // => {a:\"b\"}\n * @example Cookie.parse(true) // force parse\n *\n * @param {boolean} [fresh] Force refresh\n * @returns {Record<string, any>} Cookie map\n */\n static parse(fresh = false)\n {\n if ( !fresh && this.$cookie ) {\n return this.$cookie;\n }\n\n this.$cookie = {};\n\n let matches = this.global().matchAll(...[\n COOKIE_REGEX.entry\n ]);\n\n if ( matches == null ) {\n return this.$cookie;\n }\n\n let fn = (value) => {\n return value.replaceAll('{:}', ';');\n }\n\n Arr.each(Array.from(matches), ({ groups }) => {\n this.$cookie[groups.key] = fn(groups.value);\n });\n\n return this.$cookie;\n }\n\n /**\n * Get cookie value by key\n *\n * @example Cookie.get(\"foo\") // => \"bar\"\n * @example Cookie.get(\"x\", null, \"bool\") // => true\n *\n * @param {string} key Cookie key\n * @param {any} [fallback] Fallback value\n * @param {string} [decode] Decode mode\n * @returns {any} Cookie value\n */\n static get(key, fallback = null, decode = 'string')\n {\n if ( !this.$cookie ) {\n this.parse();\n }\n\n if ( this.$cookie[key] == null ) {\n return fallback;\n }\n\n if ( /^bool(ean)?$/.test(decode) ) {\n return Mix.bool(this.$cookie[key]);\n }\n\n if ( /^num(ber)?$/.test(decode) ) {\n return Mix.bool(this.$cookie[key]);\n }\n\n if ( /^int(eger)?$/.test(decode) ) {\n return Mix.bool(this.$cookie[key]);\n }\n\n if ( /^obj(ext)?$/.test(decode) ) {\n return For.parseOptions(this.$cookie[key]);\n }\n\n return Mix.str(this.$cookie[key]);\n }\n\n /**\n * Set cookie value with options\n *\n * @example Cookie.set(\"a\", \"b\") // => Cookie\n * @example Cookie.set(\"a\", {x:1}) // => Cookie\n *\n * @param {string} key Cookie key\n * @param {any} value Cookie value\n * @param {any} [expire] Expire date spec\n * @param {any} [options] Cookie options\n * @returns {typeof PicoCookie} Cookie class\n */\n static set(key, value, expire = null, options = {})\n {\n if ( !this.$cookie ) {\n this.parse();\n }\n\n if ( !(expire instanceof Now) ) {\n expire = Now.make(expire || '+7 days');\n }\n\n options = {\n expires: expire.toUTC(), path: '/', ...options\n };\n\n if ( Mix.isRef(value) ) {\n value = For.castOptions(value, false);\n }\n\n if ( value != null ) {\n this.$cookie[key] = value;\n }\n\n let plain = key + '=' + Mix.str(value).replaceAll(...[\n ';', '{:}'\n ]);\n\n Arr.each(options, (value, key) => {\n plain += `;${key}=${value}`;\n });\n\n globalThis.document.cookie = plain;\n\n return this;\n }\n\n /**\n * Remove cookie by key\n *\n * @example Cookie.forget(\"a\") // => Cookie\n *\n * @param {string} key Cookie key\n * @param {any} [options] Cookie options\n * @returns {typeof PicoCookie} Cookie class\n */\n static forget(key, options = {})\n {\n let expires = 'Thu, 01 Jan 1970 00:00:01 GMT';\n\n options = {\n expires, path: '/', ...options\n };\n\n if ( this.$cookie[key] ) {\n delete this.$cookie[key];\n }\n\n let plain = `${key}=null`;\n\n Arr.each(options, (value, key) => {\n plain += `;${key}=${value}`;\n });\n\n globalThis.document.cookie = plain;\n\n return this;\n }\n\n}\n\nexport default PicoCookie;","import { Arr, Mix, Obj, Dom } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomFinderStatic\n{\n\n /**\n * Filter nodes by type\n *\n * @example Dom.filterNodes(nodes, 1)\n *\n * @param {any} nodes Source nodes\n * @param {number} [filter] Node type\n * @returns {Array<Element>} Filtered nodes\n */\n static filterNodes(nodes, filter = 1)\n {\n return Arr.filter(Mix.nodes(nodes), (el) => {\n return el.nodeType === filter;\n });\n }\n\n /**\n * Get nodes at point\n *\n * @example Dom.getNodePoint(100, 100)\n *\n * @param {number} posx X position\n * @param {number} posy Y position\n * @returns {Array<Element>} Nodes at point\n */\n static getNodePoint(posx, posy)\n {\n let el = null;\n\n if ( Dom.doc().elementsFromPoint != null ) {\n el = document.elementsFromPoint(posx, posy);\n }\n\n if ( Dom.doc().msElementsFromPoint != null ) {\n el = document.msElementsFromPoint(posx, posy);\n }\n\n return el;\n }\n\n /**\n * Get target by selector\n *\n * @example Dom.getNodeEvent(\".item\", event)\n *\n * @param {string} selector Node selector\n * @param {any} [event] Event object\n * @returns {Element} Found element\n */\n static getNodeEvent(selector, event = {})\n {\n let target = event.srcElement;\n\n if ( target == null ) {\n target = event.target;\n }\n\n let { type, clientX, clientY } = event;\n\n if ( /^(drag[a-z]*|drop$)/.test(type) ) {\n target = Dom.getNodePoint(clientX, clientY);\n }\n\n if ( Mix.isArr(target) ) {\n target = Arr.first(target);\n }\n\n if ( target == null ) {\n target = event.target;\n }\n\n return target.closest(selector);\n }\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomFinderInstance\n{\n /**\n * Resolve input elements\n *\n * @example Dom._constructFinder(\".item\")\n *\n * @param {any} el Input value\n * @returns {any} Resolved elements\n */\n static _constructFinder(el)\n {\n if ( typeof el === 'string' ) {\n el = document.querySelectorAll(el);\n }\n\n if ( el instanceof NodeList ) {\n el = Mix.nodes(el);\n }\n\n return el;\n }\n\n /**\n * Get node type\n *\n * @example Dom.find(\"div\").getNodeType() // => 1\n *\n * @param {number} [fallback] Fallback value\n * @returns {number} Node type\n */\n getNodeType(fallback = -1)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return this.el.nodeType;\n }\n\n /**\n * Get parent node\n *\n * @example Dom.find(\"div\").getNodeParent() // => PicoDom\n *\n * @param {any} [fallback] Fallback value\n * @returns {PicoDom} Parent instance\n */\n getNodeParent(fallback = null)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return Dom.find(this.el.parentNode);\n }\n\n /**\n * Get previous node\n *\n * @example Dom.find(\"div\").getNodePrev() // => PicoDom\n *\n * @param {any} [fallback] Fallback value\n * @returns {PicoDom} Prev instance\n */\n getNodePrev(fallback = null)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return Dom.find(this.el.previousSibling);\n }\n\n /**\n * Get next node\n *\n * @example Dom.find(\"div\").getNodeNext() // => PicoDom\n *\n * @param {any} [fallback] Fallback value\n * @returns {PicoDom} Next instance\n */\n getNodeNext(fallback = null)\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n return Dom.find(this.el.nextSibling);\n }\n\n /**\n * Get child nodes\n *\n * @example Dom.find(\"div\").getNodeChilds(1)\n *\n * @param {number} [type] Node type\n * @param {any} [fallback] Fallback value\n * @returns {Array<Element>} Child nodes\n */\n getNodeChilds(type = -1, fallback = [])\n {\n if ( ! this.el ) {\n return fallback;\n }\n\n let childs = Mix.nodes(this.el.childNodes);\n\n if ( type === -1 ) {\n return childs;\n }\n\n return Arr.filter(childs, (el) => {\n return el.nodeType === type;\n });\n }\n\n /**\n * Filter instances nodes\n *\n * @example Dom.find(\"div\").sanatize(1)\n *\n * @param {number} [filter] Node type\n * @returns {PicoDom} Current instance\n */\n sanatize(filter = 1)\n {\n this.els = Dom.filterNodes(this.els, filter);\n\n return this;\n }\n\n /**\n * Filter elements by selector\n *\n * @example Dom.find(\"div\").filter(\".active\")\n *\n * @param {any} selector Filter selector\n * @returns {Array<Element>} Filtered nodes\n */\n filter(selector)\n {\n if ( typeof selector !== 'function' ) {\n selector = (el) => Dom.find(el).is(selector);\n }\n\n return Arr.filter(this.els, selector);\n }\n\n /**\n * Exclude elements by selector\n *\n * @example Dom.find(\"div\").except(\".active\")\n *\n * @param {any} selector Exclude selector\n * @returns {Array<Element>} Filtered nodes\n */\n except(selector)\n {\n if ( typeof selector !== 'function' ) {\n selector = (el) => ! Dom.find(el).is(selector);\n }\n\n return Arr.filter(this.els, selector);\n }\n\n /**\n * Find elements in instance\n *\n * @example Dom.find(\"div\").find(\".item\")\n *\n * @param {any} selector Search selector\n * @returns {PicoDom} Dom instance\n */\n find(selector)\n {\n if ( this.el == null ) {\n return Dom.find(null);\n }\n\n let el = this.el;\n\n if ( el instanceof Window ) {\n el = document.body;\n }\n\n let nodes = selector;\n\n if ( Mix.isStr(nodes) ) {\n nodes = el.querySelectorAll(selector);\n }\n\n return Dom.find(nodes);\n }\n\n /**\n * Get element by index\n *\n * @example Dom.find(\"div\").get(0) // => Element\n *\n * @param {number} [index] Node index\n * @returns {any} Found element\n */\n get(index = - 1)\n {\n let nodes = this.els;\n\n if ( index === - 1 ) {\n return nodes;\n }\n\n return Arr.get(nodes, index);\n }\n\n /**\n * Get first element\n *\n * @example Dom.find(\"div\").first() // => Element\n *\n * @param {number} [offset] Node offset\n * @returns {any} Found element\n */\n first(offset = 0)\n {\n return this.get(offset);\n }\n\n /**\n * Get last element\n *\n * @example Dom.find(\"div\").last() // => Element\n *\n * @param {number} [offset] Node offset\n * @returns {any} Found element\n */\n last(offset = 1)\n {\n return Arr.get(this.els, this.els.length - offset);\n }\n\n /**\n * Iterate over elements\n *\n * @example Dom.find(\"div\").each((el) => console.log(el))\n *\n * @param {function} cb Callback fn\n * @returns {PicoDom} Current instance\n */\n each(cb)\n {\n return (this, Arr.each(this.els, cb));\n }\n\n /**\n * Loop through parent nodes\n *\n * @example Dom.find(\"div\").loopParent((el) => console.log(el))\n *\n * @param {function} cb Callback fn\n * @param {any} [boundry] Loop limit\n * @returns {PicoDom} Current instance\n */\n loopParent(cb, boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.win();\n }\n\n for ( let el = this.el; el && el !== boundry; el = el.parentNode ) {\n cb.call({}, el);\n }\n\n return this;\n }\n\n /**\n * Get parent instance\n *\n * @example Dom.find(\"div\").parent() // => PicoDom\n *\n * @returns {PicoDom} Parent instance\n */\n parent()\n {\n let parent = this.getNodeParent();\n\n if ( parent == null ) {\n return Dom.find(null);\n }\n\n return parent;\n }\n\n /**\n * Get first child match\n *\n * @example Dom.find(\"div\").child(\".item\")\n *\n * @param {any} selector Child selector\n * @param {number} [filter] Node type\n * @returns {PicoDom} Child instance\n */\n child(selector, filter = 1)\n {\n for ( let el of this.els ) {\n if ( el.nodeType === filter ) {\n return Dom.find(el);\n }\n }\n\n return Dom.find(null);\n }\n\n /**\n * Get child elements\n *\n * @example Dom.find(\"div\").childs(\".item\")\n *\n * @param {any} [selector] Child selector\n * @param {number} [filter] Node type\n * @returns {Array<Element>} Child elements\n */\n childs(selector = null, filter = 1)\n {\n let childs = this.getNodeChilds(filter);\n\n if ( selector == null ) {\n return childs;\n }\n\n return Arr.filter(childs, (el) => {\n return Dom.find(el).is(selector);\n });\n }\n\n /**\n * Get closest element\n *\n * @example Dom.find(\"div\").closest(\".container\")\n *\n * @param {any} selector Target selector\n * @returns {Element} Found element\n */\n closest(selector)\n {\n if ( this.el === selector ) {\n return this.el;\n }\n\n for ( let el = this; el.el != null; el = el.getNodeParent() ) {\n if ( el.is(selector) ) return el.el;\n }\n\n return null;\n }\n\n upnode(selector)\n {\n return Dom.find(...[\n this.closest(selector)\n ]);\n }\n\n /**\n * Get previous element\n *\n * @example Dom.find(\"div\").prev() // => PicoDom\n *\n * @param {number} [type] Node type\n * @returns {PicoDom} Prev instance\n */\n prev(type = 1)\n {\n let el = this.getNodePrev();\n\n for ( el; el != null; el = el.getNodePrev() ) {\n if ( el.getNodeType() === type ) return Dom.find(el);\n }\n\n return Dom.find(null);\n }\n\n /**\n * Get next element\n *\n * @example Dom.find(\"div\").next() // => PicoDom\n *\n * @param {number} [type] Node type\n * @returns {PicoDom} Next instance\n */\n next(type = 1)\n {\n let el = this.getNodeNext();\n\n for ( el; el != null; el = el.getNodeNext() ) {\n if ( el.getNodeType() === type ) return Dom.find(el);\n }\n\n return Dom.find(null);\n }\n\n /**\n * Get number of elements\n *\n * @example Dom.find(\"div\").length() // => 1\n *\n * @returns {number} Count value\n */\n length()\n {\n return this.els.length;\n }\n\n /**\n * Check if element matches\n *\n * @example Dom.find(\"div\").is(\".active\") // => true\n *\n * @param {any} selector Test selector\n * @returns {boolean} True if matches\n */\n is(selector)\n {\n if ( this.el === selector ) {\n return true;\n }\n\n if ( this.el == null ) {\n return false;\n }\n\n for ( let el of this.parent().find(selector).get() ) {\n if ( el === this.el ) return true;\n }\n\n return false;\n }\n\n /**\n * Check if contains match\n *\n * @example Dom.find(\"div\").matches(\".active\")\n *\n * @param {any} selector Test selector\n * @returns {boolean} True if matches\n */\n matches(selector)\n {\n if ( this.el === selector ) {\n return true;\n }\n\n if ( this.el == null ) {\n return false;\n }\n\n for ( let el of this.find(selector).get() ) {\n if ( el === this.el ) return true;\n }\n\n return false;\n }\n\n /**\n * Check if instance is empty\n *\n * @example Dom.find(\".none\").empty() // => true\n *\n * @returns {boolean} True if empty\n */\n empty()\n {\n return this.length() < 1 || this.el == null;\n }\n\n /**\n * Check if element is visible\n *\n * @example Dom.find(\"div\").visible() // => true\n *\n * @returns {boolean} True if visible\n */\n visible()\n {\n if ( this.el == null ) {\n return false;\n }\n\n return this.el.is(':visible');\n }\n\n /**\n * Check if parent matches\n *\n * @example Dom.find(\"div\").above(\".container\")\n *\n * @param {any} selector Parent selector\n * @returns {boolean} True if matches\n */\n above(selector)\n {\n // Parent is exacly selector\n return this.parent().is(selector);\n }\n\n /**\n * Check if inside match\n *\n * @example Dom.find(\"div\").inside(\".container\")\n *\n * @param {any} selector Target selector\n * @returns {boolean} True if inside\n */\n inside(selector)\n {\n // Has parent of selector\n return this.closest(selector) != null;\n }\n\n /**\n * Check if contains match\n *\n * @example Dom.find(\"div\").contains(\".item\")\n *\n * @param {any} selector Target selector\n * @returns {boolean} True if contains\n */\n contains(selector)\n {\n // Has child of selector\n return this.el.contains(selector);\n }\n\n}\n\n/**\n * @see PicoDom.above\n */\nPicoDomFinderInstance.prototype.isParent = function (...args) {\n console.warn('Dom.isParent() is deprecated, use Dom.above() instead.');\n return this.above(...args);\n};\n\n/**\n * @see PicoDom.prev\n */\nPicoDomFinderInstance.prototype.previous = function () {\n console.warn('Dom.previous() is deprecated, use Dom.prev() instead.');\n return this.prev();\n};\n\n/**\n * @see PicoDom.filter\n */\nPicoDomFinderInstance.prototype.where = function (...args) {\n console.warn('Dom.where() is deprecated, use Dom.filter() instead.');\n return this.filter(...args);\n};\n\n/**\n * @see PicoDom.except\n */\nPicoDomFinderInstance.prototype.not = function (...args) {\n console.warn('Dom.not() is deprecated, use Dom.except() instead.');\n return this.except(...args);\n};\n\nPicoDomFinderInstance.prototype.getNot = () => {\n console.error('Dom.getNot() is not implemented anymore.');\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomFinderPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomFinderStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomFinderInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n self.init.push(PicoDomFinderInstance._constructFinder);\n\n return self;\n}","import { Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomFormStatic\n{\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomFormInstance\n{\n\n /**\n * Get or set input value\n *\n * @example Dom.find(\"input\").value(\"hello\")\n *\n * @param {any} [value] Input value\n * @returns {any|PicoDom} Value or instance\n */\n value(value = undefined)\n {\n if ( value === undefined ) {\n return this.el.value;\n }\n\n this.each((el) => {\n el.value = value;\n });\n\n return this;\n }\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomFormPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomFormStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomFormInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomFormInstance.constructor);\n\n return self;\n}","import { Arr, Hash, Mix, Obj, Dom, Run } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomEventStatic\n{\n static $events = [];\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomEventInstance\n{\n\n /**\n * Bind event listener\n *\n * @example Dom.bind(el, \"click\", cb)\n *\n * @param {Element} el Target element\n * @param {string} event Event name\n * @param {function} cb Callback fn\n * @param {string} [selector] Event selector\n * @param {boolean} [pause] Pause listener\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n bind(el, event, cb, selector = null, pause = false, options = {})\n {\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n Dom.$events = Arr.append(Dom.$events, {\n el, event, cb, selector, pause, options\n });\n\n el.addEventListener(event, cb, options);\n\n return this;\n }\n\n /**\n * Unbind event listener\n *\n * @example Dom.unbind(el, \"click\")\n *\n * @param {Element} el Target element\n * @param {string} event Event name\n * @param {string} [selector] Event selector\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n unbind(el, event, selector = null, options = {})\n {\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n let indexes = Arr.filterIndex(Dom.$events, {\n el, event, selector, options\n });\n\n if ( indexes.length === 0 ) {\n return;\n }\n\n let args = (val) => {\n return [event, val.cb, val.options];\n };\n\n Arr.each(indexes.reverse(), (index) => {\n el.removeEventListener(...args(Dom.$events[index]));\n });\n\n Arr.splices(Dom.$events, indexes);\n\n return this;\n }\n\n /**\n * Listen to event\n *\n * @example Dom.find(\"div\").on(\"click\", cb)\n *\n * @param {any} event Event name\n * @param {function} cb Callback fn\n * @param {any} [options] Listener options\n * @param {boolean} [pause] Pause listener\n * @param {string} [selector] Event selector\n * @returns {PicoDom} Current instance\n */\n on(event, cb, options = {}, pause = false, selector = null)\n {\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n // geht so nicht\n // if ( Mix.isArr(event) ) {\n // return (Arr.each(event, (e) => this.on(e, cb, options, pause, selector)), this);\n // }\n\n let fn = (e) => {\n cb.call(e.target, e, e.target);\n };\n\n this.each((el) => {\n this.bind(el, event, fn, selector, pause, options);\n });\n\n return this;\n }\n\n /**\n * Stop listening to event\n *\n * @example Dom.find(\"div\").off(\"click\")\n *\n * @param {any} event Event name\n * @param {string} [selector] Event selector\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n off(event, selector = null, options = {})\n {\n if ( Mix.isPrim(options) ) {\n options = { id: options };\n }\n\n // geht so nicht\n // if ( Mix.isArr(event) ) {\n // return (Arr.each(event, (e) => this.off(e, ...arguments)), this);\n // }\n\n if ( Mix.isObj(selector) ) {\n (options = selector, selector = null);\n }\n\n this.each((el) => {\n this.unbind(el, event, selector, options);\n });\n\n return this;\n }\n\n /**\n * Stop listening to event with specific options\n *\n * @example Dom.find(\"div\").optoff({ id: \"my-id\" })\n *\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n optoff(options = {})\n {\n Run.idle(() => {\n Arr.filterRemove(Dom.$events, { options });\n });\n\n this.each((el) => {\n el && el.removeAllListeners();\n });\n\n return this;\n }\n\n /**\n * Listen to event once\n *\n * @example Dom.find(\"div\").once(\"click\", cb)\n *\n * @param {any} event Event name\n * @param {function} cb Callback fn\n * @param {any} [options] Listener options\n * @returns {PicoDom} Current instance\n */\n once(event, cb, options = {})\n {\n options.id = Hash.make(24);\n\n this.on(event, (e) => {\n cb(e); this.off(event, options);\n }, options);\n\n return this;\n }\n\n /**\n * Listen to live event\n *\n * @example Dom.find(\"div\").live(\"click\", \"span\", cb)\n *\n * @param {any} event Event name\n * @param {string} selector Event selector\n * @param {function} cb Callback fn\n * @param {any} [options] Listener options\n * @param {boolean} [pause] Pause listener\n * @returns {PicoDom} Current instance\n */\n live(event, selector, cb, options = {}, pause = false)\n {\n let fn = function (event) {\n\n let target = Dom.getNodeEvent(selector, event);\n\n if ( target == null ) {\n return;\n }\n\n cb.call({}, event, target);\n };\n\n this.on(event, fn, options, pause, selector);\n\n return this;\n }\n\n /**\n * Fire event on element\n *\n * @example Dom.find(\"div\").fire(\"click\")\n *\n * @param {string} event Event name\n * @param {object} [detail] Event detail\n * @returns {PicoDom} Current instance\n */\n fire(event, detail = {})\n {\n let callback = new CustomEvent(event, { detail });\n\n this.each((el) => {\n el.dispatchEvent(callback);\n });\n\n return this;\n }\n\n}\n\n/**\n * @see PicoDom.once\n */\nPicoDomEventInstance.prototype.one = function (...args) {\n console.warn('Dom.one() is deprecated, use Dom.once() instead.');\n return this.once(...args);\n};\n\n\nPicoDomEventInstance.prototype.delayed = function () {\n console.error('Dom.delayed() is not implemented anymore.');\n};\n\nPicoDomEventInstance.prototype.pause = function () {\n console.error('Dom.pause() is not implemented anymore.');\n};\n\nPicoDomEventInstance.prototype.unpause = function () {\n console.error('Dom.unpause() is not implemented anymore.');\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomEventPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomEventStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomEventInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomEventInstance.constructor);\n\n return self;\n}","import { Arr, Dom, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomBuilderStatic\n{\n /**\n * Create element from tag\n *\n * @example Dom.make(\"div\", { class: \"active\" })\n *\n * @param {any} el Tag or element\n * @param {any} [options] Attr options\n * @returns {PicoDom} Dom instance\n */\n static make(el, options = {})\n {\n if ( el instanceof Dom ) {\n el = el.el;\n }\n\n if ( Mix.isStr(el) ) {\n el = document.createElement(el);\n }\n\n el = Obj.assign(el, options);\n\n let ini = new Dom(el);\n\n if ( options.class ) {\n ini.class(options.class);\n }\n\n if ( options.html ) {\n ini.html(options.html);\n }\n\n return ini;\n }\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomBuilderInstance\n{\n /**\n * Prepend value to element\n *\n * @example Dom.find(\"div\").prepend(\"<span></span>\")\n *\n * @param {any} value Prepend value\n * @returns {PicoDom} Current instance\n */\n prepend(value)\n {\n this.each((el) => {\n if ( el.prepend != null ) el.prepend(value);\n });\n\n return this;\n }\n\n /**\n * Prepend element to value\n *\n * @example Dom.find(\"span\").prependTo(\"div\")\n *\n * @param {any} value Target element\n * @returns {PicoDom} Current instance\n */\n prependTo(value)\n {\n Dom.find(value).each((el) => {\n if ( el.prepend != null ) el.prepend(this.el);\n });\n\n return this;\n }\n\n /**\n * Append value to element\n *\n * @example Dom.find(\"div\").append(\"<span></span>\")\n *\n * @param {any} value Append value\n * @returns {PicoDom} Current instance\n */\n append(value)\n {\n this.each((el) => {\n if ( el.append != null ) el.append(value);\n });\n\n return this;\n }\n\n /**\n * Append element to value\n *\n * @example Dom.find(\"span\").appendTo(\"div\")\n *\n * @param {any} value Target element\n * @returns {PicoDom} Current instance\n */\n appendTo(value)\n {\n Dom.find(value).each((el) => {\n if ( el.append != null ) el.append(this.el);\n });\n\n return this;\n }\n\n /**\n * Replace element with value\n *\n * @example Dom.find(\"div\").replace(\"<span></span>\")\n *\n * @param {any} value Replacement value\n * @returns {PicoDom} Current instance\n */\n replace(value)\n {\n this.parent().each(el, (el) => {\n (el.insertBefore(value, el), el.removeChild(el));\n });\n\n return this;\n }\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomBuilderPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomBuilderStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomBuilderInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomBuilderInstance.constructor);\n\n return self;\n}","import { Run, Mix, Obj, Dom, Hash } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomGlobalStatic\n{\n /**\n * Get document ready state\n *\n * @example Dom.getDomState() // => \"complete\"\n *\n * @returns {string} State string\n */\n static getDomState()\n {\n return document.readyState;\n }\n\n /**\n * Check if DOM is ready\n *\n * @example Dom.isDomReady() // => true\n *\n * @returns {boolean} True if ready\n */\n static isDomReady()\n {\n return Dom.getDomState() === 'complete';\n }\n\n /**\n * Check if DOM is complete\n *\n * @example Dom.isDomComplete() // => true\n *\n * @returns {boolean} True if complete\n */\n static isDomComplete()\n {\n let state = Dom.getDomState();\n\n if ( state === 'complete' ) {\n return true;\n }\n\n return state === 'interactive';\n }\n\n /**\n * Run callback when ready\n *\n * @example Dom.ready(cb)\n *\n * @param {function} cb Callback fn\n * @param {number} [delay] Execution delay\n * @param {number} [limit] Wait limit\n * @returns {PicoDom} Static class\n */\n static ready(cb, delay = 0, limit = 6000)\n {\n let [id, el, event] = [\n Hash.make(), Dom.find(document), 'DOMContentLoaded'\n ];\n\n let fn = () => {\n (Run.delay(cb, delay), el.off(event, null, { id }));\n };\n\n let ready = Dom.isDomReady;\n\n if ( ! ready() ) {\n return (el.on(event, fn, { id }), this);\n }\n\n Run.wait(() => {\n if ( ready() ) return (fn(), true);\n }, 10, limit);\n\n return this;\n }\n\n /**\n * Run callback when complete\n *\n * @example Dom.complete(cb)\n *\n * @param {function} cb Callback fn\n * @param {number} [delay] Execution delay\n * @param {number} [limit] Wait limit\n * @returns {PicoDom} Static class\n */\n static complete(cb, delay = 0, limit = 6000)\n {\n let fn = () => {\n Run.delay(cb, delay);\n };\n\n let [el, event] = [\n Dom.find(document), 'load'\n ];\n\n let ready = Dom.isDomComplete;\n\n if ( ! ready() ) {\n return (el.on(event, fn), this);\n }\n\n Run.wait(() => {\n if ( ready() ) return (fn(), true);\n }, 10, limit);\n\n return this;\n }\n\n}\n\nPicoDomGlobalStatic.required = () => {\n console.error('Dom.required() is not implemented anymore.');\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomGlobalInstance\n{\n /**\n * Check if node is complete\n *\n * @example Dom.find(\"img\").isNodeComplete() // => true\n *\n * @returns {boolean} True if complete\n */\n isNodeComplete()\n {\n if ( this.el == null ) {\n return false;\n }\n\n if ( this.el.naturalWidth ) {\n return true;\n }\n\n if ( this.el.naturalHeight ) {\n return true;\n }\n\n return !! this.el.complete;\n }\n\n /**\n * Run callback when loaded\n *\n * @example Dom.find(\"img\").loaded(cb)\n *\n * @param {function} cb Callback fn\n * @param {number} [limit] Wait limit\n * @returns {PicoDom} Current instance\n */\n loaded(cb, limit = 6000)\n {\n if ( ! this.el ) {\n return this;\n }\n\n let ready = this.isNodeComplete;\n\n Run.wait(() => {\n if ( ready.call(this) ) return (cb(), true);\n }, 10, limit);\n\n return this;\n }\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomGlobalPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomGlobalStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomGlobalInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomGlobalInstance.constructor);\n\n return self;\n}","import { Arr, Dom, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomRectangleStatic\n{\n /**\n * Cast value to number\n *\n * @example Dom.num(\"10px\") // => 10\n *\n * @param {any} value Input value\n * @returns {number} Number value\n */\n static num(value)\n {\n if ( typeof value === 'string' ) {\n value = value.replace(/(^\\s+|\\s$|px)/g, '');\n }\n\n return Mix.num(value, 0);\n }\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomRectangleInstance\n{\n rect(fallback = {})\n {\n const rect = this.el.getBoundingClientRect();\n\n if ( rect == null ) {\n return fallback;\n }\n \n return rect.toJSON();\n }\n\n /**\n * Get margin values\n *\n * @example Dom.find(\"div\").margin()\n *\n * @param {string} [key] Margin key\n * @param {number} [fallback] Fallback value\n * @returns {any} Margin values\n */\n margin(key = null, fallback = 0)\n {\n let computed = this.computed();\n\n let result = {\n top: Dom.num(computed.marginTop),\n right: Dom.num(computed.marginRight),\n bottom: Dom.num(computed.marginBottom),\n left: Dom.num(computed.marginLeft)\n };\n\n if ( key == null ) {\n return result;\n }\n\n return Obj.get(result, key, fallback);\n }\n\n /**\n * Get padding values\n *\n * @example Dom.find(\"div\").padding()\n *\n * @param {string} [key] Padding key\n * @param {number} [fallback] Fallback value\n * @returns {any} Padding values\n */\n padding(key = null, fallback = 0)\n {\n let computed = this.computed();\n\n let result = {\n top: Dom.num(computed.paddingTop),\n right: Dom.num(computed.paddingRight),\n bottom: Dom.num(computed.paddingBottom),\n left: Dom.num(computed.paddingLeft)\n };\n\n if ( key == null ) {\n return result;\n }\n\n return Obj.get(result, key, fallback);\n }\n\n /**\n * Get element height\n *\n * @example Dom.find(\"div\").height() // => 100\n *\n * @returns {number} Height value\n */\n height()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerHeight;\n }\n\n return this.el.offsetHeight;\n }\n\n /**\n * Get client height\n *\n * @example Dom.find(\"div\").clientHeight()\n *\n * @returns {number} Height value\n */\n clientHeight()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return Dom.num(this.computed('height', 0));\n }\n\n /**\n * Get scroll height\n *\n * @example Dom.find(\"div\").scrollHeight()\n *\n * @returns {number} Height value\n */\n scrollHeight()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return this.el.scrollHeight;\n }\n\n /**\n * Get inner height\n *\n * @example Dom.find(\"div\").innerHeight()\n *\n * @returns {number} Height value\n */\n innerHeight()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerHeight;\n }\n\n let pad = this.padding();\n\n return this.el.offsetHeight - pad.top - pad.bottom;\n }\n\n /**\n * Get real height\n *\n * @example Dom.find(\"div\").realHeight({ display: \"block\" })\n *\n * @param {any} [style] Temp style\n * @returns {number} Height value\n */\n realHeight(style = {})\n {\n let height = 'auto';\n\n this.actual(() => {\n return height = this.height();\n }, style);\n\n return height;\n }\n\n /**\n * Evaluate target height\n *\n * @example Dom.find(\"div\").evaluateHeight(\".container\")\n *\n * @param {any} [target] Target element\n * @param {boolean} [apply] Apply style\n * @returns {number} Height value\n */\n evaluateHeight(target = null, apply = true)\n {\n target = Dom.find(target);\n\n if ( target === null ) {\n target = this.parent();\n }\n\n let height = 'auto';\n\n this.actual(() => {\n height = target.innerHeight();\n }, { display: 'none' });\n\n if ( apply === true ) {\n this.style({ height: height + 'px' });\n }\n\n return height;\n }\n\n /**\n * Get element width\n *\n * @example Dom.find(\"div\").width() // => 100\n *\n * @returns {number} Width value\n */\n width()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerWidth;\n }\n\n return this.el.offsetWidth;\n }\n\n /**\n * Get client width\n *\n * @example Dom.find(\"div\").clientWidth()\n *\n * @returns {number} Width value\n */\n clientWidth()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return Dom.num(this.computed('width', 0));\n }\n\n /**\n * Get scroll width\n *\n * @example Dom.find(\"div\").scrollWidth()\n *\n * @returns {number} Width value\n */\n scrollWidth()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n return this.el.scrollWidth;\n }\n\n /**\n * Get inner width\n *\n * @example Dom.find(\"div\").innerWidth()\n *\n * @returns {number} Width value\n */\n innerWidth()\n {\n if ( this.el == null ) {\n return 0;\n }\n\n if ( this.el instanceof Window ) {\n return this.el.innerWidth;\n }\n\n let pad = this.padding();\n\n return this.el.offsetWidth - pad.left - pad.right;\n }\n\n /**\n * Get real width\n *\n * @example Dom.find(\"div\").realWidth({ display: \"block\" })\n *\n * @param {any} [style] Temp style\n * @returns {number} Width value\n */\n realWidth(style = {})\n {\n let width = 'auto';\n\n this.actual(() => {\n return width = this.width();\n }, style);\n\n return width;\n }\n\n /**\n * Evaluate target width\n *\n * @example Dom.find(\"div\").evaluateWidth(\".container\")\n *\n * @param {any} [target] Target element\n * @param {boolean} [apply] Apply style\n * @returns {number} Width value\n */\n evaluateWidth(target = null, apply = true)\n {\n target = Dom.find(target);\n\n if ( target === null ) {\n target = this.parent();\n }\n\n let width = 'auto';\n\n this.actual(() => {\n width = target.innerWidth();\n }, { display: 'none' });\n\n if ( apply === true ) {\n this.style({ width: width + 'px' });\n }\n\n return width;\n }\n\n /**\n * Get element offset\n *\n * @example Dom.find(\"div\").offset()\n *\n * @param {string} [key] Offset key\n * @param {any} [boundry] View boundry\n * @returns {any} Offset values\n */\n offset(key = null, boundry = null)\n {\n let offset = this.getOffset(boundry);\n\n if ( key == null ) {\n return offset;\n }\n\n return Obj.get(offset, key, 0);\n }\n\n /**\n * Get top offset\n *\n * @example Dom.find(\"div\").offsetTop()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Top offset\n */\n offsetTop(boundry = null)\n {\n return this.offset('top', boundry);\n }\n\n /**\n * Get bottom offset\n *\n * @example Dom.find(\"div\").offsetBottom()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Bottom offset\n */\n offsetBottom(boundry = null)\n {\n return this.offset('bottom', boundry);\n }\n\n /**\n * Get left offset\n *\n * @example Dom.find(\"div\").offsetLeft()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Left offset\n */\n offsetLeft(boundry = null)\n {\n return this.offset('left', boundry);\n }\n\n /**\n * Get right offset\n *\n * @example Dom.find(\"div\").offsetRight()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Right offset\n */\n offsetRight(boundry = null)\n {\n return this.offset('right', boundry);\n }\n\n /**\n * Loop through offset parents\n *\n * @example Dom.find(\"div\").loopOffset((el) => console.log(el))\n *\n * @param {function} cb Callback fn\n * @param {any} [boundry] Loop limit\n * @returns {PicoDom} Current instance\n */\n loopOffset(cb, boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.body();\n }\n\n for ( let el = this.el; el && el !== boundry; el = el.offsetParent ) {\n cb.call({}, el);\n }\n\n return this;\n }\n\n /**\n * Calculate relative offset\n *\n * @example Dom.calcOffset(offset, 100, 100)\n *\n * @param {any} offset Base offset\n * @param {number} width Element width\n * @param {number} height Element height\n * @returns {any} Calculated offset\n */\n calcOffset(offset, width, height)\n {\n let size = {\n right: Dom.body().scrollWidth - offset.left - width,\n bottom: Dom.body().scrollHeight - offset.top - height,\n };\n\n return { ...offset, ...size };\n }\n\n /**\n * Get relative offset\n *\n * @example Dom.find(\"div\").getOffset()\n *\n * @param {any} [boundry] View boundry\n * @returns {any} Offset values\n */\n getOffset(boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.body();\n }\n\n let cb, source = {\n top: 0, left: 0, bottom: 0, right: 0\n };\n\n if ( this.el == null ) {\n return source;\n }\n\n cb = (el) => {\n source.top += Dom.num(el.offsetTop, 0);\n source.left += Dom.num(el.offsetLeft, 0);\n };\n\n this.loopOffset(cb);\n\n source = this.calcOffset(...[\n source, this.width(), this.height()\n ]);\n\n let body = Dom.find(boundry);\n\n let target = {\n top: 0, left: 0, bottom: 0, right: 0\n };\n\n cb = (el) => {\n target.top += Dom.num(el.offsetTop, 0);\n target.left += Dom.num(el.offsetLeft, 0);\n };\n\n body.loopOffset(cb);\n\n target = this.calcOffset(...[\n target, body.scrollWidth(), body.scrollHeight()\n ]);\n\n return {\n top: source.top - target.top,\n bottom: source.bottom - target.bottom,\n left: source.left - target.left,\n right: source.right - target.right\n };\n }\n\n /**\n * Get element scroll\n *\n * @example Dom.find(\"div\").scroll()\n *\n * @param {any} [key] Scroll key\n * @param {any} [boundry] View boundry\n * @returns {any} Scroll values\n */\n scroll(key = null, boundry = null)\n {\n let scroll = this.getScroll(boundry);\n\n if ( key == null ) {\n return scroll;\n }\n\n return Obj.get(scroll, key, 0);\n }\n\n /**\n * Get or set scroll top\n *\n * @example Dom.find(\"div\").scrollTop(100)\n *\n * @param {any} [value] Scroll value\n * @param {any} [boundry] View boundry\n * @returns {number|PicoDom} Value or instance\n */\n scrollTop(value = null, boundry = null)\n {\n if ( value == null ) {\n return this.scroll('top', boundry);\n }\n\n this.each((el) => {\n el.scrollTop = value;\n });\n\n return this;\n }\n\n /**\n * Get or set scroll left\n *\n * @example Dom.find(\"div\").scrollLeft(100)\n *\n * @param {any} [value] Scroll value\n * @param {any} [boundry] View boundry\n * @returns {number|PicoDom} Value or instance\n */\n scrollLeft(value = null, boundry = null)\n {\n if ( value == null ) {\n return this.scroll('left', boundry);\n }\n\n this.each((el) => {\n el.scrollLeft = value;\n });\n\n return this.scroll('left', boundry);\n }\n\n /**\n * Get relative scroll\n *\n * @example Dom.find(\"div\").getScroll()\n *\n * @param {any} [boundry] View boundry\n * @returns {any} Scroll values\n */\n getScroll(boundry = null)\n {\n if ( boundry == null ) {\n boundry = Dom.win();\n }\n\n let cb, source = {\n top: 0, left: 0\n };\n\n if ( this.el == null ) {\n return source;\n }\n\n cb = (el) => {\n source.top += Dom.num(el.scrollTop || el.pageYOffset || 0);\n source.left += Dom.num(el.scrollLeft || el.pageXOffset || 0);\n }\n\n this.loopParent(cb);\n\n let target = {\n top: 0, left: 0\n };\n\n cb = (el) => {\n target.top += Dom.num(el.scrollTop || el.pageYOffset || 0);\n target.left += Dom.num(el.scrollLeft || el.pageXOffset || 0);\n };\n\n Dom.find(boundry).loopParent(cb);\n\n return {\n top: source.top - target.top,\n left: source.left - target.left\n };\n }\n\n}\n\n/**\n * @see PicoDom.loopOffsetParent\n */\nPicoDomRectangleInstance.prototype.loopOffsetParent = function (...args) {\n console.warn('Dom.loopOffsetParent() is deprecated, use Dom.loopOffset() instead.');\n return this.loopOffset(...args);\n};\n\n/**\n * @see PicoDom.scrollTopGlobal\n */\nPicoDomRectangleInstance.prototype.scrollTopGlobal = function () {\n console.warn('Dom.scrollTopGlobal() is deprecated, use Dom.scroll(\\'top\\') instead.');\n return this.scroll('top', null);\n};\n\n/**\n * @see PicoDom.scrollLeftGlobal\n */\nPicoDomRectangleInstance.prototype.scrollLeftGlobal = function () {\n console.warn('Dom.scrollLeftGlobal() is deprecated, use Dom.scroll(\\'left\\') instead.');\n return this.scroll('left', null);\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomRectanglePlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomRectangleStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomRectangleInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomRectangleInstance.constructor);\n\n return self;\n}","import { Arr, Dom, For, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomAttributeStatic\n{\n //\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomAttributeInstance\n{\n /**\n * Get or set attribute\n *\n * @example Dom.find(\"div\").attr(\"id\")\n *\n * @param {string} key Attr key\n * @param {any} [value] Attr value\n * @param {any} [fallback] Fallback value\n * @returns {any|PicoDom} Attr value or instance\n */\n attr(key, value = undefined, fallback = null)\n {\n if ( this.el == null ) {\n return value ? this : fallback;\n }\n\n let attr = this.el.getAttribute(key);\n\n if ( Mix.isUndef(value) ) {\n return attr || fallback;\n }\n\n if ( value === null ) {\n return (this.el.removeAttribute(key), attr);\n }\n\n if ( Mix.isArr(value) ) {\n value = value.join(' ');\n }\n\n if ( Mix.isObj(value) ) {\n value = For.castOptions(value);\n }\n\n this.el.setAttribute(key, value);\n\n return this;\n }\n\n /**\n * Get or set data attribute\n *\n * @example Dom.find(\"div\").data(\"id\")\n *\n * @param {string} key Data key\n * @param {any} [value] Data value\n * @param {any} [fallback] Fallback value\n * @returns {any|PicoDom} Data value or instance\n */\n data(key, value = undefined, fallback = null)\n {\n return this.attr('data-' + key, value, fallback);\n }\n\n /**\n * Get computed style\n *\n * @example Dom.find(\"div\").computed(\"width\")\n *\n * @param {any} [key] Style key\n * @param {any} [fallback] Fallback value\n * @returns {any} Computed style\n */\n computed(key = null, fallback = null)\n {\n if ( this.el == null ) {\n return fallback;\n }\n\n if ( this.getNodeType() !== 1 ) {\n return fallback;\n }\n\n let computed = getComputedStyle(this.el);\n\n if ( key == null ) {\n return computed;\n }\n\n return Obj.get(computed, key, fallback);\n }\n\n /**\n * Get or set style\n *\n * @example Dom.find(\"div\").style({ color: \"red\" })\n *\n * @param {any} [value] Style value\n * @param {boolean} [combine] Combine style\n * @returns {any|PicoDom} Style or instance\n */\n style(value = undefined, combine = true)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( value === null ) {\n return this.attr('style', null);\n }\n\n let styles = this.attr('style', undefined, {});\n\n if ( Mix.isStr(styles) ) {\n styles = For.parseOptions(styles);\n }\n\n if ( Mix.isUndef(value) ) {\n return styles;\n }\n\n if ( combine ) {\n value = { ...styles, ...value };\n }\n\n if ( value.translate ) {\n value.transform = `translate3d(${value.translate.join(',')}, 0)`;\n }\n\n delete value.translate;\n\n if ( Mix.isNum(value.top) ) {\n value.top += 'px';\n }\n\n if ( Mix.isNum(value.left) ) {\n value.left += 'px';\n }\n\n if ( Mix.isNum(value.width) ) {\n value.width += 'px';\n }\n\n if ( Mix.isNum(value.height) ) {\n value.height += 'px';\n }\n\n this.attr('style', value);\n\n return this;\n }\n\n /**\n * Get or set classes\n *\n * @example Dom.find(\"div\").class([\"active\"])\n *\n * @param {any} [value] Class value\n * @param {boolean} [combine] Combine classes\n * @returns {any|PicoDom} Classes or instance\n */\n class(value = undefined, combine = false)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( value === null ) {\n return this.attr('class', '');\n }\n\n let classes = this.attr('class', undefined, []);\n\n if ( Mix.isStr(classes) ) {\n classes = classes.split(' ');\n }\n\n if ( Mix.isUndef(value) ) {\n return classes;\n }\n\n if ( combine ) {\n value = [...classes, ...value];\n }\n\n this.attr('class', value);\n\n return this;\n }\n\n /**\n * Get or set inner HTML\n *\n * @example Dom.find(\"div\").html(\"<span></span>\")\n *\n * @param {any} [html] HTML content\n * @returns {string|PicoDom} HTML or instance\n */\n html(html = undefined)\n {\n if ( html === undefined ) {\n return this.el.innerHTML;\n }\n\n this.each((el) => {\n el.innerHTML = html;\n });\n\n return this;\n }\n\n /**\n * Get actual style value\n *\n * @example Dom.find(\"div\").actual((el) => el.offsetWidth, { display: \"block\" })\n *\n * @param {function} cb Callback fn\n * @param {any} [style] Temp style\n * @returns {any} Callback result\n */\n actual(cb, style = null)\n {\n let backup = this.attr('style');\n\n this.style(style);\n\n let result = cb(this.el, this.el);\n\n this.attr('style', backup);\n\n return result;\n }\n\n /**\n * Check if has class\n *\n * @example Dom.find(\"div\").hasClass(\"active\") // => true\n *\n * @param {any} cls Class name\n * @returns {boolean} True if has class\n */\n hasClass(cls)\n {\n if ( ! Mix.isArr(cls) ) {\n cls = [cls];\n }\n\n return Arr.isect(this.class(), cls).length > 0;\n }\n\n /**\n * Add class to element\n *\n * @example Dom.find(\"div\").addClass(\"active\")\n *\n * @param {any} cls Class name\n * @returns {PicoDom} Current instance\n */\n addClass(cls)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).addClass(cls));\n }\n\n let result = this.el.className.split(' ');\n\n if ( Mix.isStr(cls) ) {\n cls = cls.split(' ');\n }\n\n result = Arr.append(result, ...cls);\n\n this.el.className = Arr.unique(result).join(' ');\n\n return this;\n }\n\n /**\n * Remove class from element\n *\n * @example Dom.find(\"div\").remClass(\"active\")\n *\n * @param {any} cls Class name\n * @returns {PicoDom} Current instance\n */\n remClass(cls)\n {\n if ( this.el == null ) {\n return this;\n }\n\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).remClass(cls));\n }\n\n let result = this.el.className.split(' ');\n\n if ( Mix.isStr(cls) ) {\n cls = cls.split(' ');\n }\n\n result = Arr.diff(result, cls);\n\n this.el.className = Arr.unique(result).join(' ');\n\n return this;\n }\n\n /**\n * Toggle class on element\n *\n * @example Dom.find(\"div\").toggleClass(\"active\")\n *\n * @param {any} cls Class name\n * @returns {PicoDom} Current instance\n */\n toggleClass(cls)\n {\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).toggleClass(cls));\n }\n\n if ( this.hasClass(cls) ) {\n return this.remClass(cls);\n }\n\n return this.addClass(cls);\n }\n\n /**\n * Set class by state\n *\n * @example Dom.find(\"div\").stateClass(\"active\", true)\n *\n * @param {any} cls Class name\n * @param {boolean} [state] Target state\n * @returns {PicoDom} Current instance\n */\n stateClass(cls, state = true)\n {\n if ( this.els.length > 1 ) {\n return this.each((el) => Dom.find(el).stateClass(cls));\n }\n\n if ( ! state ) {\n return this.remClass(cls);\n }\n\n return this.addClass(cls);\n }\n\n}\n\n/**\n * @see PicoDom.style\n */\nPicoDomAttributeInstance.prototype.css = function (...args) {\n console.warn('Dom.css() is deprecated, use Dom.style() instead.');\n return this.style(...args);\n};\n\n/**\n * @see PicoDom.remClass\n */\nPicoDomAttributeInstance.prototype.removeClass = function (...args) {\n console.warn('Dom.removeClass() is deprecated, use Dom.remClass() instead.');\n return this.remClass(...args);\n};\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomAttributePlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomAttributeStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomAttributeInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomAttributeInstance.constructor);\n\n return self;\n}","import { Arr, Dom, Mix, Obj } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomInviewStatic\n{\n\n /**\n * Get first inview element Y\n *\n * @example Dom.inviewMaxY(\".item\")\n *\n * @param {any} options Find options\n * @param {function} [cb] Success callback\n * @returns {any} Found element\n */\n static inviewMaxY(options, cb = null)\n {\n let defaults = {\n boundry: null, multiple: false, threshold: 0, mode: 'ratio'\n };\n\n if ( Mix.isString(options) ) {\n options = { el: options };\n }\n\n options = {\n ...defaults, ...options\n };\n\n if ( ! options.el ) {\n throw new Error('Dom.inviewY() requires an element.');\n }\n\n let args = [\n options.threshold, options.mode, options.boundry\n ];\n\n let fn = (el) => {\n return Dom.find(el).isInviewY(...args);\n };\n\n let els = [];\n\n Dom.find(options.el).each((el) => {\n if ( fn(el) ) (cb ? cb(el) : null, els.push(el));\n });\n\n if ( options.multiple ) {\n return els;\n }\n\n return Arr.first(els);\n }\n\n /**\n * Get first inview element X\n *\n * @example Dom.inviewMaxX(\".item\")\n *\n * @param {any} options Find options\n * @param {function} [cb] Success callback\n * @returns {any} Found element\n */\n static inviewMaxX(options, cb = null)\n {\n let defaults = {\n boundry: null, multiple: false, threshold: 0, mode: 'ratio'\n };\n\n if ( Mix.isString(options) ) {\n options = { el: options };\n }\n\n options = {\n ...defaults, ...options\n };\n\n if ( ! options.el ) {\n throw new Error('Dom.inviewX() requires an element.');\n }\n\n let args = [\n options.threshold, options.mode, options.boundry\n ];\n\n let fn = (el) => {\n return Dom.find(el).isInviewX(...args);\n };\n\n let els = [];\n\n Dom.find(options.el).each((el) => {\n if ( fn(el) ) (cb ? cb(el) : null, els.push(el));\n });\n\n if ( options.multiple ) {\n return els;\n }\n\n return Arr.first(els);\n }\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomInviewInstance\n{\n /**\n * Get X view offset\n *\n * @example Dom.find(\"div\").viewoffX()\n *\n * @returns {any} Offset object\n */\n viewoffX()\n {\n if ( this.el == null ) {\n return { top: 0, bot: 0 };\n }\n\n let [viewport, width] = [\n Dom.win().innerWidth, this.width()\n ];\n\n let [offset, scroll] = [\n this.offset('left'), this.parent().scroll('left')\n ];\n\n let left = Math.max(...[\n 0, offset - scroll\n ]);\n\n let right = Math.max(...[\n 0, viewport - (offset + width - scroll)\n ]);\n\n return { left, right };\n }\n\n /**\n * Get X inview pixels\n *\n * @example Dom.find(\"div\").inviewX()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview pixels\n */\n inviewX(boundry = null)\n {\n let { left, right } = Dom.find(boundry).viewoffY();\n\n let [viewport, height] = [\n Dom.win().innerHeight - right - left, this.height()\n ];\n\n let [offset, scroll] = [\n this.offset('left') + left, this.scroll('left') + left\n ];\n\n let inview = Math.max(0, scroll + viewport - offset + left);\n\n if ( inview > height ) {\n inview = Math.min(height, viewport + height - inview);\n }\n\n return Math.max(0, inview);\n }\n\n /**\n * Get X inview ratio\n *\n * @example Dom.find(\"div\").inratioX()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview ratio\n */\n inratioX(boundry = null)\n {\n return 1 / this.width() * this.inviewX(boundry);\n }\n\n /**\n * Check if is inview X\n *\n * @example Dom.find(\"div\").isInviewX(0.5)\n *\n * @param {number} [threshold] View threshold\n * @param {string} [mode] View mode\n * @param {any} [boundry] View boundry\n * @returns {boolean} True if inview\n */\n isInviewX(threshold = 0.1, mode = 'ratio', boundry = null)\n {\n if ( mode === 'pixel' ) {\n return this.inviewX(boundry) > threshold;\n }\n\n return this.inratioX(boundry) > threshold;\n }\n\n /**\n * Get Y view offset\n *\n * @example Dom.find(\"div\").viewoffY()\n *\n * @returns {any} Offset object\n */\n viewoffY()\n {\n if ( this.el == null ) {\n return { top: 0, bottom: 0 };\n }\n\n let [viewport, height] = [\n Dom.win().innerHeight, this.height()\n ];\n\n let [offset, scroll] = [\n this.offset('top'), this.parent().scroll('top')\n ];\n\n let top = Math.max(...[\n 0, offset - scroll\n ]);\n\n let bottom = Math.max(...[\n 0, viewport - (offset + height - scroll)\n ]);\n\n return { top, bottom };\n }\n\n /**\n * Get Y inview pixels\n *\n * @example Dom.find(\"div\").inviewY()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview pixels\n */\n inviewY(boundry = null)\n {\n let { top, bottom } = Dom.find(boundry).viewoffY();\n\n let [viewport, height] = [\n Dom.win().innerHeight - bottom - top, this.height()\n ];\n\n let [offset, scroll] = [\n this.offset('top') + top, this.scroll('top') + top\n ];\n\n let inview = Math.max(0, scroll + viewport - offset + top);\n\n if ( inview > height ) {\n inview = Math.min(height, viewport + height - inview);\n }\n\n return Math.min(Math.max(0, inview), viewport);\n }\n\n /**\n * Get Y inview ratio\n *\n * @example Dom.find(\"div\").inratioY()\n *\n * @param {any} [boundry] View boundry\n * @returns {number} Inview ratio\n */\n inratioY(boundry = null)\n {\n return 1 / this.height() * this.inviewY(boundry);\n }\n\n /**\n * Check if is inview Y\n *\n * @example Dom.find(\"div\").isInviewY(0.5)\n *\n * @param {number} [threshold] View threshold\n * @param {string} [mode] View mode\n * @param {any} [boundry] View boundry\n * @returns {boolean} True if inview\n */\n isInviewY(threshold = 0.1, mode = 'ratio', boundry = null)\n {\n if ( mode === 'pixel' ) {\n return this.inviewY(boundry) > threshold;\n }\n\n return this.inratioY(boundry) > threshold;\n }\n}\n\n/**\n * @see PicoDom.inviewY\n */\nPicoDomInviewInstance.prototype.inviewHeight = function (...args) {\n console.warn('Dom.inviewHeight() is deprecated, use Dom.inviewY() instead.');\n return this.inviewY(...args);\n}\n\n/**\n * @see PicoDom.inviewX\n */\nPicoDomInviewInstance.prototype.inviewWidth = function (...args) {\n console.warn('Dom.inviewWidth() is deprecated, use Dom.inviewX() instead.');\n return this.inviewX(...args);\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomInviewPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomInviewStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomInviewInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomInviewInstance.constructor);\n\n return self;\n}","import { Arr, Mix, Obj, Dom, Locale } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomMetaStatic\n{\n static $meta = {};\n\n /**\n * Set document title\n *\n * @example Dom.setMetaTitle(\"Home\")\n *\n * @param {string} value New title\n * @param {string} [glue] Title glue\n * @returns {PicoDom} Static class\n */\n static setMetaTitle(value, glue = ':value - :title')\n {\n if ( ! this.$meta.title ) {\n this.$meta.title = Dom.doc().title;\n }\n\n document.title = Locale.replace(glue, {\n value, title: this.$meta.title\n });\n\n return this;\n }\n}\n\n/**\n * @see PicoDom.setMetaTitle\n */\nPicoDomMetaStatic.title = (value) => {\n console.warn('Dom.title() is deprecated, use Dom.setMetaTitle() instead.');\n return Dom.setMetaTitle(value);\n};\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomMetaInstance\n{\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomMetaPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomMetaStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomMetaInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomMetaInstance.constructor);\n\n return self;\n}","import { Arr, Mix, Obj, Dom } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomObserverStatic\n{\n\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomObserverInstance\n{\n //\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomObserverPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomObserverStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomObserverInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomObserverInstance.constructor);\n\n return self;\n}","import { Arr, Mix, Obj, Dom } from \"../index.esm.js\";\nimport { PicoDom } from \"../utils/Dom.js\";\n\n/**\n * @memberof PicoDom\n */\nexport class PicoDomPopoverStatic\n{\n //\n}\n\n/**\n * @memberof PicoDom\n * @extends {PicoDom}\n */\nexport class PicoDomPopoverInstance\n{\n\n popover(target, position = 'botttom-center', options = {})\n {\n if ( /^(top|bottom)-/.test(position) ) {\n return this.popoverY(target, position, options);\n }\n\n if ( /^(left|right)-/.test(position) ) {\n return this.popoverX(target, position, options);\n }\n }\n\n popoverY(target, position = 'bottom-center', options = {})\n {\n target = Dom.find(target);\n\n let [rect, self] = [\n target.rect(), this.rect()\n ];\n\n if ( options.x ) {\n rect = {...rect, left: options.x, width: 1 };\n }\n\n if ( options.y ) {\n rect = {...rect, top: options.y, height: 1 };\n }\n\n if ( ! options.width ) {\n // self.width = rect.width;\n }\n\n let [offset, recto] = [\n { x: 0, y: 0 }, rect.width - self.width\n ];\n\n if ( /^top-/.test(position) ) {\n offset.y = rect.top - self.height;\n }\n\n if ( /^bottom-/.test(position) ) {\n offset.y = rect.top + rect.height;\n }\n\n if ( /-start$/.test(position) ) {\n offset.x = rect.left;\n }\n\n if ( /-center$/.test(position) ) {\n offset.x = rect.left + (recto * 0.5);\n }\n\n if ( /-end$/.test(position) ) {\n offset.x = rect.left + recto;\n }\n\n let inverse = position;\n\n if ( /^top-/.test(position) ) {\n inverse = inverse.replace(/^top-/, 'bottom-');\n }\n\n if ( /^bottom-/.test(position) ) {\n inverse = inverse.replace(/^bottom-/, 'top-');\n }\n\n let win = {\n x: window.innerWidth, y: window.innerHeight\n };\n\n let broken = offset.y + self.height > win.y || offset.y < 0;\n\n if ( offset.y < 0 ) {\n broken = true;\n }\n\n const rebound = {\n ...options, offset\n };\n\n if ( broken && ! options.offset ) {\n return this.popoverY(target, inverse, rebound);\n }\n\n if ( broken && options.offset ) {\n offset = options.offset;\n }\n\n if ( offset.y < 0 ) {\n offset.y = 0;\n }\n\n if ( offset.y + self.height > win.height ) {\n offset.y = win.height - self.height;\n }\n\n let result = this.popoverNormalize(...[\n offset, self, rect, win\n ]);\n\n if ( broken ) {\n position = 'auto';\n }\n\n return { ...result, position };\n }\n\n popoverX(target, position = 'left-center', options = {})\n {\n target = Dom.find(target);\n\n let [rect, self] = [\n target.rect(), this.rect()\n ];\n\n if ( ! options.height ) {\n // self.height = rect.height;\n }\n\n let [offset, recto] = [\n { x: 0, y: 0 }, rect.height - self.height\n ];\n\n if ( /^left-/.test(position) ) {\n offset.x = rect.left - self.width;\n }\n\n if ( /^right-/.test(position) ) {\n offset.x = rect.left + rect.width;\n }\n\n if ( /-start$/.test(position) ) {\n offset.y = rect.top;\n }\n\n if ( /-center/.test(position) ) {\n offset.y = rect.top + (recto * 0.5);\n }\n\n if ( /-end/.test(position) ) {\n offset.y = rect.top + recto;\n }\n\n let inverse = position;\n\n if ( /^left-/.test(position) ) {\n inverse = inverse.replace(/^left-/, 'right-');\n }\n\n if ( /^right-/.test(position) ) {\n inverse = inverse.replace(/^right-/, 'left-');\n }\n\n let win = {\n x: window.innerWidth, y: window.innerHeight\n };\n\n let broken = offset.y + self.height > win.y;\n\n if ( offset.y < 0 ) {\n broken = true;\n }\n\n const rebound = {\n ...options, offset\n };\n\n if ( broken && ! options.offset ) {\n return this.popoverX(target, inverse, rebound);\n }\n\n if ( broken && options.offset ) {\n offset = options.offset;\n }\n\n let result = this.popoverNormalize(...[\n offset, self, rect, win\n ]);\n\n if ( broken ) {\n position = 'auto';\n }\n\n return { ...result, position };\n }\n\n popoverNormalize(offset, self, rect, win)\n {\n const scroll = Dom.find(document.body).scroll();\n\n if ( offset.y < 0 ) {\n offset.y = 0;\n }\n\n if ( offset.y + self.height > win.y ) {\n offset.y = win.y - self.height;\n }\n\n if ( offset.x < 0 ) {\n offset.x = 0;\n }\n\n const dw = document.body.clientWidth;\n\n if ( offset.x + self.width > win.x ) {\n offset.x = win.x - self.width - (win.x - dw);\n }\n\n offset = {\n x: offset.x + scroll.left, y: offset.y + scroll.top\n }\n\n Obj.each(offset, (v, k) => {\n offset[k] = Math.round(v);\n });\n\n offset.self = {\n width: self.width, height: self.height\n };\n\n offset.rect = {\n width: rect.width, height: rect.height\n };\n\n return offset;\n }\n\n}\n\n/**\n * @param {typeof PicoDom} self\n * @returns {typeof PicoDom}\n */\nexport const PicoDomPopoverPlugin = function (self) {\n\n Obj.each(Mix.class(PicoDomPopoverStatic), (fn, id) => {\n self[id] = fn;\n });\n\n Obj.each(Mix.proto(PicoDomPopoverInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n // self.init.push(PicoDomPopoverInstance.constructor);\n\n return self;\n}","import { Arr, Mix, Dom } from \"../index.esm.js\";\nimport { PicoDomFinderPlugin } from \"../dom/DomFinder.js\";\nimport { PicoDomFormPlugin } from \"../dom/DomForm.js\";\nimport { PicoDomEventPlugin } from \"../dom/DomEvent.js\";\nimport { PicoDomBuilderPlugin } from \"../dom/DomBuilder.js\";\nimport { PicoDomGlobalPlugin } from \"../dom/DomGlobal.js\";\nimport { PicoDomRectanglePlugin } from \"../dom/DomRectangle.js\";\nimport { PicoDomAttributePlugin } from \"../dom/DomAttribute.js\";\nimport { PicoDomInviewPlugin } from \"../dom/DomInview.js\";\nimport { PicoDomMetaPlugin } from \"../dom/DomMeta.js\";\nimport { PicoDomObserverPlugin } from \"../dom/DomObserver.js\";\nimport { PicoDomPopoverPlugin } from \"../dom/DomPopover.js\";\n\nexport const PicoDomPlugins = [\n PicoDomFinderPlugin,\n PicoDomGlobalPlugin,\n PicoDomFormPlugin,\n PicoDomEventPlugin,\n PicoDomBuilderPlugin,\n PicoDomRectanglePlugin,\n PicoDomAttributePlugin,\n PicoDomInviewPlugin,\n PicoDomMetaPlugin,\n PicoDomObserverPlugin,\n PicoDomPopoverPlugin,\n];\n\n/**\n * @class PicoDom\n *\n * @typedef {import('../dom/DomFinder.js').PicoDomFinderInstance} PicoDomFinderInstance\n * @typedef {import('../dom/DomGlobal.js').PicoDomGlobalStatic} PicoDomGlobalStatic\n * @typedef {import('../dom/DomGlobal.js').PicoDomGlobalInstance} PicoDomGlobalInstance\n * @typedef {import('../dom/DomEvent.js').PicoDomEventStatic} PicoDomEventStatic\n * @typedef {import('../dom/DomEvent.js').PicoDomEventInstance} PicoDomEventInstance\n * @typedef {import('../dom/DomBuilder.js').PicoDomBuilderStatic} PicoDomBuilderStatic\n * @typedef {import('../dom/DomBuilder.js').PicoDomBuilderInstance} PicoDomBuilderInstance\n * @typedef {import('../dom/DomRectangle.js').PicoDomRectangleStatic} PicoDomRectangleStatic\n * @typedef {import('../dom/DomRectangle.js').PicoDomRectangleInstance} PicoDomRectangleInstance\n * @typedef {import('../dom/DomAttribute.js').PicoDomAttributeStatic} PicoDomAttributeStatic\n * @typedef {import('../dom/DomAttribute.js').PicoDomAttributeInstance} PicoDomAttributeInstance\n * @typedef {import('../dom/DomInview.js').PicoDomInviewStatic} PicoDomInviewStatic\n * @typedef {import('../dom/DomInview.js').PicoDomInviewInstance} PicoDomInviewInstance\n * @typedef {import('../dom/DomMeta.js').PicoDomMetaStatic} PicoDomMetaStatic\n * @typedef {import('../dom/DomMeta.js').PicoDomMetaInstance} PicoDomMetaInstance\n * @typedef {import('../dom/DomObserver.js').PicoDomObserverStatic} PicoDomObserverStatic\n * @typedef {import('../dom/DomObserver.js').PicoDomObserverInstance} PicoDomObserverInstance\n * @typedef {import('../dom/DomPopover.js').PicoDomPopoverStatic} PicoDomPopoverStatic\n * @typedef {import('../dom/DomPopover.js').PicoDomPopoverInstance} PicoDomPopoverInstance\n *\n * @mixes PicoDomFinderStatic\n * @mixes PicoDomGlobalStatic\n * @mixes PicoDomFormStatic\n * @mixes PicoDomEventStatic\n * @mixes PicoDomBuilderStatic\n * @mixes PicoDomRectangleStatic\n * @mixes PicoDomAttributeStatic\n * @mixes PicoDomInviewStatic\n * @mixes PicoDomMetaStatic\n * @mixes PicoDomObserverStatic\n * @mixes PicoDomPopoverStatic\n *\n * @extends PicoDomFinderInstance\n * @extends PicoDomGlobalInstance\n * @extends PicoDomFormInstance\n * @extends PicoDomEventInstance\n * @extends PicoDomBuilderInstance\n * @extends PicoDomRectangleInstance\n * @extends PicoDomAttributeInstance\n * @extends PicoDomInviewInstance\n * @extends PicoDomMetaInstance\n * @extends PicoDomObserverInstance\n * @extends PicoDomPopoverInstance\n */\nexport class PicoDom {\n\n /**\n * Init hooks for constructor\n *\n * @type {Array<function>}\n */\n static init = [];\n\n /**\n * First selected element\n *\n * @type {HTMLElement}\n */\n el = null;\n\n /**\n * All selected elements\n *\n * @type {Array<HTMLElement>}\n */\n els = [];\n\n /**\n * Create Dom wrapper from input\n *\n * @example new Dom(\"body\").get(0) // => HTMLElement\n *\n * @param {any} el Element or selector\n * @param {...any} args Plugin args\n */\n constructor(el, ...args)\n {\n Arr.each(Dom.init, (fn) => {\n el = fn.call(this, el, ...args);\n });\n\n if ( el instanceof Dom ) {\n el = el.el;\n }\n\n if ( ! Mix.isArr(el) ) {\n el = [el];\n }\n\n (this.el = el[0], this.els = el);\n }\n\n /**\n * Create new Dom wrapper\n *\n * @example Dom.find(\"body\") // => Dom\n *\n * @param {any} el Element or selector\n * @param {...any} args Plugin args\n * @returns {PicoDom} Dom wrapper\n */\n static find(el, ...args)\n {\n return new Dom(el, ...args);\n }\n\n /**\n * Extend Dom with a plugin\n *\n * @example Dom.extend(fn)\n *\n * @param {function} plugin Plugin function\n * @returns {void} No return value\n */\n static extend(plugin)\n {\n plugin.call({}, this);\n }\n\n /**\n * Get window or empty object\n *\n * @example Dom.win().innerWidth // => number|undefined\n *\n * @returns {any} Window or {}\n */\n static win()\n {\n if ( globalThis.window == null ) {\n return {};\n }\n\n return window;\n }\n\n /**\n * Get document or empty object\n *\n * @example Dom.doc().body // => HTMLElement|undefined\n *\n * @returns {any} Document or {}\n */\n static doc()\n {\n if ( globalThis.document == null ) {\n return {};\n }\n\n return document;\n }\n\n /**\n * Get document.body or empty\n *\n * @example Dom.body().nodeType // => 1|undefined\n *\n * @returns {any} Body or {}\n */\n static body()\n {\n if ( ! this.doc().body ) {\n return {};\n }\n\n return this.doc().body;\n }\n\n}\n\n/**\n * @returns {typeof PicoDom}\n */\nexport function PicoDomBuilder() {\n\n let cls = PicoDom;\n\n for ( const plugin of PicoDomPlugins ) {\n cls = plugin.call(cls, cls);\n }\n\n return cls;\n}\n\nexport default PicoDomBuilder;","import { Arr, Mix, Now, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\nexport const NOW_MODIFY = {\n 'second': /([+-])([0-9]+)\\s?seconds?/i,\n 'minute': /([+-])([0-9]+)\\s?minutes?/i,\n 'hour': /([+-])([0-9]+)\\s?hours?/i,\n 'date': /([+-])([0-9]+)\\s?days?/i,\n 'month': /([+-])([0-9]+)\\s?months?/i,\n 'year': /([+-])([0-9]+)\\s?years?/i\n};\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowDefaultInstance\n{\n\n /**\n * Get value by scope\n *\n * @example Now.get(\"year\") // => 2026\n *\n * @param {string} scope Value scope\n * @returns {number|PicoNow} Scope value\n */\n get(scope)\n {\n if ( scope === 'time' ) {\n return this.value.getTime();\n }\n\n if ( /^seconds?$/i.test(scope) ) {\n return this.value.getSeconds();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.value.getMinutes();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.value.getHours();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.value.getDay();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.value.getDate();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.value.getMonth() + 1;\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.value.getFullYear();\n }\n\n return this;\n }\n\n /**\n * Set value by scope\n *\n * @example Now.set(2026, \"year\")\n *\n * @param {any} value New value\n * @param {string} scope Value scope\n * @returns {PicoNow} Current instance\n */\n set(value, scope)\n {\n if ( !Mix.isNum(value) ) {\n value = Mix.int(value);\n }\n\n let day = this.value.getDay();\n\n if ( scope === 'day' ) {\n value = value + 1 - (day || 7);\n }\n\n if ( scope === 'time' ) {\n this.value.setTime(value);\n }\n\n if ( /^seconds?$/i.test(scope) ) {\n this.value.setSeconds(value);\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n this.value.setMinutes(value);\n }\n\n if ( /^hours?$/i.test(scope) ) {\n this.value.setHours(value);\n }\n\n if ( /^days?$/i.test(scope) ) {\n this.add(value, 'date');\n }\n\n if ( /^dates?$/i.test(scope) ) {\n this.value.setDate(value);\n }\n\n if ( /^months?$/i.test(scope) ) {\n this.value.setMonth(value - 1);\n }\n\n if ( /^years?$/i.test(scope) ) {\n this.value.setFullYear(value);\n }\n\n return this;\n }\n\n /**\n * Get or set timestamp\n *\n * @example Now.time() // => 1739334660000\n *\n * @param {any} [value] New timestamp\n * @returns {number|PicoNow} Timestamp or instance\n */\n time(value = null)\n {\n if ( value == null ) {\n return this.get('time');\n }\n\n return this.set(value, 'time');\n }\n\n /**\n * Get or set seconds\n *\n * @example Now.second() // => 45\n *\n * @param {any} [value] New seconds\n * @returns {number|PicoNow} Seconds or instance\n */\n second(value = null)\n {\n if ( value == null ) {\n return this.get('second');\n }\n\n return this.set(value, 'second');\n }\n\n /**\n * Get or set minutes\n *\n * @example Now.minute() // => 30\n *\n * @param {any} [value] New minutes\n * @returns {number|PicoNow} Minutes or instance\n */\n minute(value = null)\n {\n if ( value == null ) {\n return this.get('minute');\n }\n\n return this.set(value, 'minute');\n }\n\n /**\n * Get or set hours\n *\n * @example Now.hour() // => 12\n *\n * @param {any} [value] New hours\n * @returns {number|PicoNow} Hours or instance\n */\n hour(value = null)\n {\n if ( value == null ) {\n return this.get('hour');\n }\n\n return this.set(value, 'hour');\n }\n\n /**\n * Get or set day of week\n *\n * @example Now.day() // => 1\n *\n * @param {any} [value] New day\n * @returns {number|PicoNow} Day or instance\n */\n day(value = null)\n {\n if ( value == null ) {\n return this.get('day');\n }\n\n return this.set(value, 'day');\n }\n\n /**\n * Get or set date of month\n *\n * @example Now.date() // => 12\n *\n * @param {any} [value] New date\n * @returns {number|PicoNow} Date or instance\n */\n date(value = null)\n {\n if ( value == null ) {\n return this.get('date');\n }\n\n return this.set(value, 'date');\n }\n\n /**\n * Get or set month\n *\n * @example Now.month() // => 2\n *\n * @param {any} [value] New month\n * @returns {number|PicoNow} Month or instance\n */\n month(value = null)\n {\n if ( value == null ) {\n return this.get('month');\n }\n\n return this.set(value, 'month');\n }\n\n /**\n * Get or set year\n *\n * @example Now.year() // => 2026\n *\n * @param {any} [value] New year\n * @returns {number|PicoNow} Year or instance\n */\n year(value = null)\n {\n if ( value == null ) {\n return this.get('year');\n }\n\n return this.set(value, 'year');\n }\n\n /**\n * Get short year\n *\n * @example Now.shortyear() // => \"26\"\n *\n * @returns {string} Short year\n */\n shortyear()\n {\n return this.get('year').toString().slice(- 2);\n }\n\n /**\n * Add value to scope\n *\n * @example Now.add(1, \"day\")\n *\n * @param {number} value Add value\n * @param {string} [scope] Target scope\n * @returns {PicoNow} Current instance\n */\n add(value, scope = 'day')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n this.set(this.get(scope) + Mix.int(value), scope);\n\n return this;\n }\n\n /**\n * Subtract value from scope\n *\n * @example Now.sub(1, \"day\")\n *\n * @param {number} value Sub value\n * @param {string} [scope] Target scope\n * @returns {PicoNow} Current instance\n */\n sub(value, scope = 'day')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n this.set(this.get(scope) - Mix.int(value), scope);\n\n return this;\n }\n\n /**\n * Check if string is modifiable\n *\n * @example Now.isModifible(\"+1 day\") // => true\n *\n * @param {string} value Test value\n * @returns {boolean} Is modifiable\n */\n isModifible(value)\n {\n return /^(\\s*[+-][0-9]+\\s?[a-z]+\\s*)+$/i.test(value);\n }\n\n /**\n * Modify date by string\n *\n * @example Now.modify(\"+1 day\")\n *\n * @param {string} value Modify string\n * @returns {PicoNow} Current instance\n */\n modify(value)\n {\n if ( Mix.isEmpty(value) ) {\n return this;\n }\n\n Obj.each(NOW_MODIFY, (val, key) => {\n Str.match(value, val, ([f, o, c]) => {\n o === '+' ? this.add(c, key) : this.sub(c, key);\n });\n });\n\n return this;\n }\n\n /**\n * Apply values from other date\n *\n * @example Now.apply(\"2026-01-01\", \"YYYY-MM-DD\", [\"year\"])\n *\n * @param {any} value Source value\n * @param {string} [format] Source format\n * @param {Array<string>} [keys] Scope keys\n * @returns {PicoNow} Current instance\n */\n apply(value, format = 'YYYY-MM-DD HH:mm:ss', keys = [])\n {\n value = Now.make(value, format);\n\n for ( const key of keys ) {\n this.set(value.get(key), key);\n }\n\n return this;\n }\n\n /**\n * Apply date from other value\n *\n * @example Now.applyDate(\"2026-01-01\")\n *\n * @param {any} value Source value\n * @param {string} [format] Source format\n * @returns {PicoNow} Current instance\n */\n applyDate(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n return this.apply(value, format, ['date', 'month', 'year']);\n }\n\n /**\n * Apply time from other value\n *\n * @example Now.applyTime(\"12:00:00\")\n *\n * @param {any} value Source value\n * @param {string} [format] Source format\n * @returns {PicoNow} Current instance\n */\n applyTime(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n return this.apply(value, format, ['hour', 'minute', 'second']);\n }\n\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addSecond = function (value) {\n console.warn('Now.addSecond() is deprecated, use Now.add(value, \\'second\\') instead.');\n return this.add(value, 'second');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subSecond = function (value) {\n console.warn('Now.subSecond() is deprecated, use Now.sub(value, \\'second\\') instead.');\n return this.sub(value, 'second');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addMinute = function (value) {\n console.warn('Now.addMinute() is deprecated, use Now.add(value, \\'minute\\') instead.');\n return this.add(value, 'minute');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subMinute = function (value) {\n console.warn('Now.subMinute() is deprecated, use Now.sub(value, \\'minute\\') instead.');\n return this.sub(value, 'minute');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addHour = function (value) {\n console.warn('Now.addHour() is deprecated, use Now.add(value, \\'hour\\') instead.');\n return this.add(value, 'hour');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subHour = function (value) {\n console.warn('Now.subHour() is deprecated, use Now.sub(value, \\'hour\\') instead.');\n return this.sub(value, 'hour');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addDates = function (value) {\n console.warn('Now.addDates() is deprecated, use Now.add(value, \\'date\\') instead.');\n return this.add(value, 'date');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subDates = function (value) {\n console.warn('Now.subDates() is deprecated, use Now.sub(value, \\'date\\') instead.');\n return this.sub(value, 'date');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addMonths = function (value) {\n console.warn('Now.addMonths() is deprecated, use Now.add(value, \\'month\\') instead.');\n return this.add(value, 'month');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subMonths = function (value) {\n console.warn('Now.subMonths() is deprecated, use Now.sub(value, \\'month\\') instead.');\n return this.sub(value, 'month');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addYears = function (value) {\n console.warn('Now.addYears() is deprecated, use Now.add(value, \\'year\\') instead.');\n return this.add(value, 'year');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subYears = function (value) {\n console.warn('Now.subYears() is deprecated, use Now.sub(value, \\'year\\') instead.');\n return this.sub(value, 'year');\n}\n\n/**\n * @see PicoNow.add\n */\nPicoNowDefaultInstance.prototype.addDecades = function (value) {\n console.warn('Now.addDecades() is deprecated, use Now.grid(10 * value, \\'year\\') instead.');\n return this.add(10 * value, 'year');\n}\n\n/**\n * @see PicoNow.sub\n */\nPicoNowDefaultInstance.prototype.subDecades = function (value) {\n console.warn('Now.subDecades() is deprecated, use Now.grid(10 * value, \\'year\\') instead.');\n return this.sub(10 * value, 'year');\n}\n\n/**\n * @see PicoNow.day\n */\nPicoNowDefaultInstance.prototype.humanDay = function () {\n console.warn('Now.humanDay() is deprecated, use Now.day() instead.');\n return this.day();\n}\n\n/**\n * @see PicoNow.month\n */\nPicoNowDefaultInstance.prototype.humanMonth = function () {\n console.warn('Now.humanMonth() is deprecated, use Now.month() instead.');\n return this.month();\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowDefaultPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowDefaultInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Locale, Mix, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\nexport const NOW_FORMAT = {\n 'L': 'DD/MM/YYYY',\n 'LL': 'MMMM DD, YYYY',\n 'LLL': 'MMMM DD, YYYY HH:mm',\n 'LLLL': 'dddd, MMMM DD, YYYY HH:mm',\n 'LT': 'HH:mm',\n 'LTS': 'HH:mm:ss',\n 'LTSD': 'DD/MM/YYYY HH:mm:ss',\n}\n\nexport const NOW_PARSE = {\n 'second': 'ss',\n 'minute': 'mm',\n 'hour': 'HH',\n 'date': 'DD',\n 'month': 'MM',\n 'year': 'YYYY'\n};\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowFormatInstance\n{\n\n /**\n * Check if value matches format\n *\n * @example Now.isParsable(\"2026-01-01\") // => true\n *\n * @param {string} value Test value\n * @param {string} [format] Date format\n * @returns {boolean} Is parsable\n */\n isParsable(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n for ( const key in NOW_PARSE ) {\n value = Str.replace(value, NOW_PARSE[key], format);\n }\n\n return value === format;\n }\n\n /**\n * Parse date from string\n *\n * @example Now.parse(\"2026-01-01\") // => Now\n *\n * @param {any} value Input value\n * @param {string} [format] Input format\n * @returns {PicoNow} Current instance\n */\n parse(value, format = 'YYYY-MM-DD HH:mm:ss')\n {\n if ( Mix.isTime(value) ) {\n format = 'HH:mm:ss';\n }\n\n if ( Mix.isDate(value) ) {\n format = 'YYYY-MM-DD';\n }\n\n if ( this.isModifible(value) ) {\n return this.modify(value);\n }\n\n if ( ! Mix.isIsoDate(value) ) {\n return this.parseFormat(value, format);\n }\n\n this.value = new Date(value);\n\n return this;\n }\n\n /**\n * Parse date using format\n *\n * @example Now.parseFormat(\"01/01/2026\", \"DD/MM/YYYY\")\n *\n * @param {string} value Input value\n * @param {string} format Input format\n * @returns {PicoNow} Current instance\n */\n parseFormat(value, format)\n {\n if ( !this.isParsable(value, format) ) {\n return (this.value = new Date(NaN), this);\n }\n\n for ( const key in NOW_PARSE ) {\n this.set(Str.extract(value, NOW_PARSE[key], format), key);\n }\n\n return this;\n }\n\n /**\n * Format date to string\n *\n * @example Now.format(\"YYYY-MM-DD\") // => \"2026-02-12\"\n *\n * @param {string} [format] Output format\n * @returns {string} Formatted string\n */\n format(format = 'YYYY-MM-DD HH:mm:ss')\n {\n if ( Obj.has(NOW_FORMAT, format) ) {\n format = Locale.$text[format] ?? NOW_FORMAT[format];\n }\n\n format = format.replace('dddd', () => {\n return this.human('day');\n });\n\n format = format.replace('ddd', () => {\n return this.human('day', 3);\n });\n\n format = format.replace('dd', () => {\n return this.human('day', 2);\n });\n\n format = format.replace('MMMM', () => {\n return this.human('month');\n });\n\n format = format.replace('MMM', () => {\n return this.human('month', 3);\n });\n\n format = format.replace('YYYY', () => {\n return Str.integer(this.year(), 4);\n });\n\n format = format.replace('MM', () => {\n return Str.integer(this.month(), 2);\n });\n\n format = format.replace('DD', () => {\n return Str.integer(this.date(), 2);\n });\n\n format = format.replace('HH', () => {\n return Str.integer(this.hour(), 2);\n });\n\n format = format.replace('mm', () => {\n return Str.integer(this.minute(), 2);\n });\n\n format = format.replace('ss', () => {\n return Str.integer(this.second(), 2);\n });\n\n format = format.replace('YY', () => {\n return Str.integer(this.shortyear(), 2);\n });\n\n format = format.replace('X', () => {\n return Str.integer(this.time());\n });\n\n format = format.replace('x', () => {\n return Str.integer(this.time() / 1000);\n });\n\n return format;\n }\n\n /**\n * Format date as integer\n *\n * @example Now.code(\"YYYYMMDD\") // => 20260212\n *\n * @param {string} [format] Output format\n * @returns {number} Formatted integer\n */\n code(format = 'X')\n {\n return Mix.int(this.format(format));\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowFormatPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowFormatInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Mix, Now, Obj } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowMatchInstance\n{\n\n /**\n * Check if date is before value\n *\n * @example Now.make(\"2026-01-01\").before(\"2026-02-12\") // => true\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if before\n */\n before(value = null, format = 'x')\n {\n return this.code(format) < Now.make(value).code(format);\n }\n\n /**\n * Check if date is before value date\n *\n * @example Now.make(\"2026-01-01\").beforeDate(\"2026-02-12\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if before\n */\n beforeDate(value = null, format = 'YYYYMMDD')\n {\n return this.before(value, format);\n }\n\n /**\n * Check if date is before value time\n *\n * @example Now.make(\"10:00:00\").beforeTime(\"12:00:00\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if before\n */\n beforeTime(value = null, format = 'HHmmss')\n {\n return this.before(value, format);\n }\n\n /**\n * Check if date is after value\n *\n * @example Now.make(\"2026-02-12\").after(\"2026-01-01\") // => true\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if after\n */\n after(value = null, format = 'x')\n {\n return this.code(format) > Now.make(value).code(format);\n }\n\n /**\n * Check if date is after value date\n *\n * @example Now.make(\"2026-02-12\").afterDate(\"2026-01-01\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if after\n */\n afterDate(value = null, format = 'YYYYMMDD')\n {\n return this.after(value, format);\n }\n\n /**\n * Check if date is after value time\n *\n * @example Now.make(\"12:00:00\").afterTime(\"10:00:00\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if after\n */\n afterTime(value = null, format = 'HHmmss')\n {\n return this.after(value, format);\n }\n\n /**\n * Check if date equals value\n *\n * @example Now.make(\"2026-01-01\").equal(\"2026-01-01\") // => true\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if equal\n */\n equal(value = null, format = 'x')\n {\n if ( ! (value instanceof Now) ) {\n value = Now.make(value);\n }\n\n return this.code(format) === value.clone().code(format);\n }\n\n /**\n * Check if date equals value date\n *\n * @example Now.make(\"2026-01-01\").equalDate(\"2026-01-01\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if equal\n */\n equalDate(value = null, format = 'YYYYMMDD')\n {\n return this.equal(value, format);\n }\n\n /**\n * Check if date equals value time\n *\n * @example Now.make(\"12:00:00\").equalTime(\"12:00:00\")\n *\n * @param {any} [value] Compare value\n * @param {string} [format] Compare format\n * @returns {boolean} True if equal\n */\n equalTime(value = null, format = 'HHmmss')\n {\n return this.equal(value, format);\n }\n\n /**\n * Check if date is between values\n *\n * @example Now.make(\"2026-01-15\").between(\"2026-01-01\", \"2026-01-31\")\n *\n * @param {any} [start] Start value\n * @param {any} [end] End value\n * @param {string} [format] Compare format\n * @returns {boolean} True if between\n */\n between(start = null, end = null, format = 'YYYYMMDD')\n {\n let dates = [\n Now.make(start), Now.make(end)\n ];\n\n if ( dates[0].after(dates[1], format) ) {\n dates = dates.reverse();\n }\n\n return this.after(dates[0], format) && this.before(dates[1], format);\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowMatchPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowMatchInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Mix, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowGridInstance\n{\n /**\n * Get grid of dates by scope\n *\n * @example Now.grid(\"month\") // => [Now, Now, ...]\n *\n * @param {string} [scope] Grid scope\n * @returns {Array<PicoNow>} Array of dates\n */\n grid(scope = 'day')\n {\n if ( /^seconds?$/i.test(scope) ) {\n return this.getSecondsGrid();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.getMinutesGrid();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.getHoursGrid();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.getDaysGrid();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.getDatesGrid();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.getMonthsGrid();\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.getYearsGrid();\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.getDecadesGrid();\n }\n\n throw new Error(`Invalid grid scope type \"${scope}\".`);\n }\n\n /**\n * Get seconds grid\n *\n * @example Now.getSecondsGrid(10)\n *\n * @param {number} [interval] Step interval\n * @returns {Array<PicoNow>} Array of dates\n */\n getSecondsGrid(interval = 1)\n {\n if ( interval == null ) {\n interval = 1;\n }\n\n return Arr.make(60 / interval, (i) => {\n return this.clone().second(i * interval);\n });\n }\n\n /**\n * Get minutes grid\n *\n * @example Now.getMinutesGrid(10)\n *\n * @param {number} [interval] Step interval\n * @returns {Array<PicoNow>} Array of dates\n */\n getMinutesGrid(interval = 1)\n {\n if ( interval == null ) {\n interval = 1;\n }\n\n return Arr.make(60 / interval, (i) => {\n return this.clone().minute(i * interval);\n });\n }\n\n /**\n * Get hours grid\n *\n * @example Now.getHoursGrid(2)\n *\n * @param {number} [interval] Step interval\n * @returns {Array<PicoNow>} Array of dates\n */\n getHoursGrid(interval = 1)\n {\n if ( interval == null ) {\n interval = 1;\n }\n\n return Arr.make(24 / interval, (i) => {\n return this.clone().hour(i * interval);\n });\n }\n\n /**\n * Get days grid\n *\n * @example Now.getDaysGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getDaysGrid()\n {\n let dates = [\n this.first('date').first('day'), this.last('date').last('day')\n ];\n\n return dates[0].range(dates[1], 'date');\n }\n\n /**\n * Get dates grid\n *\n * @example Now.getDatesGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getDatesGrid()\n {\n let dates = [\n this.first('date'), this.last('date')\n ];\n\n return dates[0].range(dates[1], 'date');\n }\n\n /**\n * Get months grid\n *\n * @example Now.getMonthsGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getMonthsGrid()\n {\n let dates = [\n this.first('month'), this.last('month')\n ];\n\n return dates[0].range(dates[1], 'month');\n }\n\n /**\n * Get years grid\n *\n * @example Now.getYearsGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getYearsGrid()\n {\n let dates = [\n this.first('year'), this.clone().last('year')\n ];\n\n return dates[0].range(dates[1], 'year');\n }\n\n /**\n * Get decades grid\n *\n * @example Now.getDecadesGrid()\n *\n * @returns {Array<PicoNow>} Array of dates\n */\n getDecadesGrid()\n {\n let dates = [\n this.first('decade'), this.clone().last('decade')\n ];\n\n return dates[0].range(dates[1], 'decade');\n }\n\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getYears = function () {\n console.warn('Now.getYears() is deprecated, use Now.grid(\\'years\\') instead.');\n return this.grid('years');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getMonths = function () {\n console.warn('Now.getMonths() is deprecated, use Now.grid(\\'months\\') instead.');\n return this.grid('months');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getDates = function () {\n console.warn('Now.getDates() is deprecated, use Now.grid(\\'dates\\') instead.');\n return this.grid('dates');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getHours = function () {\n console.warn('Now.getHours() is deprecated, use Now.grid(\\'hours\\') instead.');\n return this.grid('hours');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getMinutes = function () {\n console.warn('Now.getMinutes() is deprecated, use Now.grid(\\'minutes\\') instead.');\n return this.grid('minutes');\n}\n\n/**\n * @see PicoNow.grid\n */\nPicoNowGridInstance.prototype.getSeconds = function () {\n console.warn('Now.getSeconds() is deprecated, use Now.grid(\\'seconds\\') instead.');\n return this.grid('seconds');\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowGridPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowGridInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Mix, Now, Obj } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowWalkerInstance\n{\n\n /**\n * Get previous date by scope\n *\n * @example Now.prev(\"day\") // => Now\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n prev(scope = 'date')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.clone().sub(10, 'year');\n }\n\n return this.clone().sub(1, scope);\n }\n\n /**\n * Get next date by scope\n *\n * @example Now.next(\"day\") // => Now\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n next(scope = 'day')\n {\n if ( /^days?$/i.test(scope) ) {\n scope = 'date';\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.clone().add(10, 'year');\n }\n\n return this.clone().add(1, scope);\n }\n\n /**\n * Get previous second\n *\n * @example Now.prevSecond()\n *\n * @returns {PicoNow} New instance\n */\n prevSecond()\n {\n return this.prev('second');\n }\n\n /**\n * Get next second\n *\n * @example Now.nextSecond()\n *\n * @returns {PicoNow} New instance\n */\n nextSecond()\n {\n return this.next('second');\n }\n\n /**\n * Get previous minute\n *\n * @example Now.prevMinute()\n *\n * @returns {PicoNow} New instance\n */\n prevMinute()\n {\n return this.prev('minute');\n }\n\n /**\n * Get next minute\n *\n * @example Now.nextMinute()\n *\n * @returns {PicoNow} New instance\n */\n nextMinute()\n {\n return this.next('minute');\n }\n\n /**\n * Get previous hour\n *\n * @example Now.prevHour()\n *\n * @returns {PicoNow} New instance\n */\n prevHour()\n {\n return this.prev('hour');\n }\n\n /**\n * Get next hour\n *\n * @example Now.nextHour()\n *\n * @returns {PicoNow} New instance\n */\n nextHour()\n {\n return this.next('hour');\n }\n\n /**\n * Get previous date\n *\n * @example Now.prevDate()\n *\n * @returns {PicoNow} New instance\n */\n prevDate()\n {\n return this.prev('date');\n }\n\n /**\n * Get next date\n *\n * @example Now.nextDate()\n *\n * @returns {PicoNow} New instance\n */\n nextDate()\n {\n return this.next('date');\n }\n\n /**\n * Get previous month\n *\n * @example Now.prevMonth()\n *\n * @returns {PicoNow} New instance\n */\n prevMonth()\n {\n return this.prev('month');\n }\n\n /**\n * Get next month\n *\n * @example Now.nextMonth()\n *\n * @returns {PicoNow} New instance\n */\n nextMonth()\n {\n return this.next('month');\n }\n\n /**\n * Get previous year\n *\n * @example Now.prevYear()\n *\n * @returns {PicoNow} New instance\n */\n prevYear()\n {\n return this.prev('year');\n }\n\n /**\n * Get next year\n *\n * @example Now.nextYear()\n *\n * @returns {PicoNow} New instance\n */\n nextYear()\n {\n return this.next('year');\n }\n\n /**\n * Get previous decade\n *\n * @example Now.prevDecade()\n *\n * @returns {PicoNow} New instance\n */\n prevDecade()\n {\n return this.prev('decade');\n }\n\n /**\n * Get next decade\n *\n * @example Now.nextDecade()\n *\n * @returns {PicoNow} New instance\n */\n nextDecade()\n {\n return this.next('decade');\n }\n\n /**\n * Get start of scope\n *\n * @example Now.first(\"month\")\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n first(scope = 'date')\n {\n if ( /^seconds?$/i.test(scope) ) {\n return this.firstSecond();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.firstMinute();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.firstHour();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.firstDay();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.firstDate();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.firstMonth();\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.firstYear();\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.firstDecade();\n }\n\n throw new Error(`Invalid first scope type \"${scope}\".`);\n }\n\n /**\n * Get end of scope\n *\n * @example Now.last(\"month\")\n *\n * @param {string} [scope] Target scope\n * @returns {PicoNow} New instance\n */\n last(scope = 'date')\n {\n if ( /^seconds?$/i.test(scope) ) {\n return this.lastSecond();\n }\n\n if ( /^minutes?$/i.test(scope) ) {\n return this.lastMinute();\n }\n\n if ( /^hours?$/i.test(scope) ) {\n return this.lastHour();\n }\n\n if ( /^days?$/i.test(scope) ) {\n return this.lastDay();\n }\n\n if ( /^dates?$/i.test(scope) ) {\n return this.lastDate();\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.lastMonth();\n }\n\n if ( /^years?$/i.test(scope) ) {\n return this.lastYear();\n }\n\n if ( /^decades?$/i.test(scope) ) {\n return this.lastDecade();\n }\n\n throw new Error(`Invalid last scope type \"${scope}\".`);\n }\n\n /**\n * Get start of second\n *\n * @example Now.firstSecond()\n *\n * @returns {PicoNow} New instance\n */\n firstSecond()\n {\n return this.clone().set(0, 'second');\n }\n\n /**\n * Get end of second\n *\n * @example Now.lastSecond()\n *\n * @returns {PicoNow} New instance\n */\n lastSecond()\n {\n return this.clone().set(59, 'second');\n }\n\n /**\n * Get start of minute\n *\n * @example Now.firstMinute()\n *\n * @returns {PicoNow} New instance\n */\n firstMinute()\n {\n return this.clone().set(0, 'minute');\n }\n\n /**\n * Get end of minute\n *\n * @example Now.lastMinute()\n *\n * @returns {PicoNow} New instance\n */\n lastMinute()\n {\n return this.clone().set(59, 'minute');\n }\n\n /**\n * Get start of hour\n *\n * @example Now.firstHour()\n *\n * @returns {PicoNow} New instance\n */\n firstHour()\n {\n return this.clone().set(0, 'hour');\n }\n\n /**\n * Get end of hour\n *\n * @example Now.lastHour()\n *\n * @returns {PicoNow} New instance\n */\n lastHour()\n {\n return this.clone().set(23, 'hour');\n }\n\n /**\n * Get start of day\n *\n * @example Now.firstDay()\n *\n * @returns {PicoNow} New instance\n */\n firstDay()\n {\n return this.clone().set(0, 'day');\n }\n\n /**\n * Get end of day\n *\n * @example Now.lastDay()\n *\n * @returns {PicoNow} New instance\n */\n lastDay()\n {\n return this.clone().set(6, 'day');\n }\n\n /**\n * Get start of month date\n *\n * @example Now.firstDate()\n *\n * @returns {PicoNow} New instance\n */\n firstDate()\n {\n return this.clone().set(1, 'date');\n }\n\n /**\n * Get end of month date\n *\n * @example Now.lastDate()\n *\n * @returns {PicoNow} New instance\n */\n lastDate()\n {\n return this.clone().next('month').set(0, 'date');\n }\n\n /**\n * Get start of year month\n *\n * @example Now.firstMonth()\n *\n * @returns {PicoNow} New instance\n */\n firstMonth()\n {\n return this.clone().set(1, 'month');\n }\n\n /**\n * Get end of year month\n *\n * @example Now.lastMonth()\n *\n * @returns {PicoNow} New instance\n */\n lastMonth()\n {\n return this.clone().set(12, 'month');\n }\n\n /**\n * Get nth year of decade\n *\n * @example Now.nthYear(5)\n *\n * @param {number} [n] Year index\n * @returns {PicoNow} New instance\n */\n nthYear(n = 0)\n {\n let year = Math.floor(this.year() / 10) * 10;\n\n return this.clone().set(year + n, 'year');\n }\n\n /**\n * Get first year of decade\n *\n * @example Now.firstYear()\n *\n * @returns {PicoNow} New instance\n */\n firstYear()\n {\n return this.nthYear(0);\n }\n\n /**\n * Get last year of decade\n *\n * @example Now.lastYear()\n *\n * @returns {PicoNow} New instance\n */\n lastYear()\n {\n return this.nthYear(9);\n }\n\n /**\n * Get nth decade of century\n *\n * @example Now.nthDecade(5)\n *\n * @param {number} [n] Decade index\n * @returns {PicoNow} New instance\n */\n nthDecade(n = 0)\n {\n let year = Math.floor(this.year() / 100) * 100;\n\n return this.clone().set(year + (n * 10), 'year');\n }\n\n /**\n * Get first decade of century\n *\n * @example Now.firstDecade()\n *\n * @returns {PicoNow} New instance\n */\n firstDecade()\n {\n return this.nthDecade(0);\n }\n\n /**\n * Get last decade of century\n *\n * @example Now.lastDecade()\n *\n * @returns {PicoNow} New instance\n */\n lastDecade()\n {\n return this.nthDecade(9);\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowWalkerPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowWalkerInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Mix, Now, Obj, Arr } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowRangeInstance\n{\n\n /**\n * Get range of dates\n *\n * @example Now.range(\"2026-01-31\", \"day\") // => [Now, Now, ...]\n *\n * @param {any} [value] End date\n * @param {string} [scope] Range scope\n * @returns {Array<PicoNow>} Array of dates\n */\n range(value = null, scope = 'date')\n {\n let format = 'YYYYMMDD';\n\n if ( /^months?$/.test(scope) ) {\n format = 'YYYYMM';\n }\n\n if ( /^years?$/.test(scope) ) {\n format = 'YYYY';\n }\n\n let range = [];\n\n let dates = [\n this.clone(), Now.make(value)\n ];\n\n if ( dates[0].afterDate(dates[1]) ) {\n dates = dates.reverse();\n }\n\n dates[1].add(1, scope);\n\n for ( let day = dates[0]; ! day.equal(dates[1], format); day = day.next(scope) ) {\n Arr.append(range, day);\n }\n\n return range;\n }\n\n}\n\n/**\n * @see PicoNow.range\n */\nPicoNowRangeInstance.prototype.getDatesRange = function (...args) {\n console.warn('NowRange.getDatesRange() is deprecated, use NowRange.range() instead.');\n return this.range(...args);\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowRangePlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowRangeInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Locale, Mix, Num, Obj, Str } from \"../index.esm.js\";\nimport { PicoNow } from \"../utils/Now.js\";\n\nexport const NOW_HUMAN_DAYS = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n];\n\nexport const NOW_HUMAN_MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n];\n\n/**\n * @memberof PicoNow\n * @extends {PicoNow}\n */\nexport class PicoNowHumanInstance\n{\n /**\n * Get human readable value\n *\n * @example Now.human(\"day\") // => \"Monday\"\n *\n * @param {string} [scope] Value scope\n * @param {number} [substr] Substring length\n * @returns {string|number} Human value\n */\n human(scope = 'day', substr = null)\n {\n if ( /^days?$/i.test(scope) ) {\n return this.getHumanDay(substr);\n }\n\n if ( /^months?$/i.test(scope) ) {\n return this.getHumanMonth(substr);\n }\n\n return this.get(scope);\n }\n\n /**\n * Get human readable day\n *\n * @example Now.getHumanDay(3) // => \"Mon\"\n *\n * @param {number} [substr] Substring length\n * @returns {string} Day name\n */\n getHumanDay(substr = null)\n {\n let day = this.day() - 1;\n\n if ( ! NOW_HUMAN_DAYS[day] ) {\n throw new Error(`Invalid day number \"${day}\".`);\n }\n\n let value = Locale.trans(NOW_HUMAN_DAYS[day]);\n\n if ( substr != null ) {\n value = value.substring(0, substr);\n }\n\n return value;\n }\n\n /**\n * Get human readable month\n *\n * @example Now.getHumanMonth(3) // => \"Jan\"\n *\n * @param {number} [substr] Substring length\n * @returns {string} Month name\n */\n getHumanMonth(substr = null)\n {\n let month = this.day() - 1;\n\n if ( ! NOW_HUMAN_MONTHS[month] ) {\n throw new Error(`Invalid month number \"${month}\".`);\n }\n\n let value = Locale.trans(NOW_HUMAN_MONTHS[month]);\n\n if ( substr != null ) {\n value = value.substring(0, substr);\n }\n\n return value;\n }\n\n}\n\n/**\n * @param {typeof PicoNow} self\n * @returns {typeof PicoNow}\n */\nexport const PicoNowHumanPlugin = function (self) {\n\n Obj.each(Mix.proto(PicoNowHumanInstance), (fn, id) => {\n self.prototype[id] = fn;\n });\n\n return self;\n}","import { Arr, Dom, Mix, Now, Num } from \"../index.esm.js\";\nimport { PicoNowDefaultPlugin } from \"../now/NowDefault.js\";\nimport { PicoNowFormatPlugin } from \"../now/NowFormat.js\";\nimport { PicoNowMatchPlugin } from \"../now/NowMatch.js\";\nimport { PicoNowGridPlugin } from \"../now/NowGrid.js\";\nimport { PicoNowWalkerPlugin } from \"../now/NowWalker.js\";\nimport { PicoNowRangePlugin } from \"../now/NowRange.js\";\nimport { PicoNowHumanPlugin } from \"../now/NowHuman.js\";\n\nexport const PicoNowPlugins = [\n PicoNowDefaultPlugin,\n PicoNowFormatPlugin,\n PicoNowMatchPlugin,\n PicoNowGridPlugin,\n PicoNowWalkerPlugin,\n PicoNowRangePlugin,\n PicoNowHumanPlugin,\n];\n\n/**\n * @class PicoNow\n *\n * @typedef {import('../now/NowMatch.js').PicoNowMatchInstance} PicoNowMatchInstance\n * @typedef {import('../now/NowFormat.js').PicoNowFormatInstance} PicoNowFormatInstance\n * @typedef {import('../now/NowMatch.js').PicoNowMatchInstance} PicoNowMatchInstance\n * @typedef {import('../now/NowGrid.js').PicoNowGridInstance} PicoNowGridInstance\n * @typedef {import('../now/NowWalker.js').PicoNowWalkerInstance} PicoNowWalkerInstance\n * @typedef {import('../now/NowRange.js').PicoNowRangeInstance} PicoNowRangeInstance\n * @typedef {import('../now/NowHuman.js').PicoNowHumanInstance} PicoNowHumanInstance\n *\n * @extends PicoNowDefaultInstance\n * @extends PicoNowFormatInstance\n * @extends PicoNowMatchInstance\n * @extends PicoNowGridInstance\n * @extends PicoNowWalkerInstance\n * @extends PicoNowRangeInstance\n * @extends PicoNowHumanInstance\n */\nexport class PicoNow\n{\n /**\n * Init hooks for instance\n *\n * @type {Array<function>}\n */\n static init = [];\n\n /**\n * Original input value\n *\n * @type {any}\n */\n input = null;\n\n /**\n * Current Date instance\n *\n * @type {Date}\n */\n value = null;\n\n /**\n * Create Now instance from input\n *\n * @example new Now().toUTC() // => string\n *\n * @param {any} [value] Date input\n * @param {string} [format] Input format\n */\n constructor(value = null, format = 'YYYY-MM-DD HH:mm:ss')\n {\n if ( value === 'now' ) {\n value = null;\n }\n\n let input = value;\n\n if ( value && value.toDate ) {\n value = value.toDate();\n }\n\n if ( ! (value instanceof Date) ) {\n value = new Date();\n }\n\n this.input = value;\n\n if ( Mix.isNix(input) ) {\n this.input = input;\n }\n\n this.value = value;\n\n if ( Mix.isStr(input) ) {\n this.parse(input, format);\n }\n\n Arr.each(Now.init, (fn) => {\n el = fn.call(this, el, format);\n });\n\n return this;\n }\n\n /**\n * Extend Now with a plugin\n *\n * @example Now.extend(fn)\n *\n * @param {function} plugin Plugin function\n * @returns {void} No return value\n */\n static extend(plugin)\n {\n plugin.call({}, this);\n }\n\n /**\n * Create Now instance helper\n *\n * @example Now.make(\"now\") // => Now\n *\n * @param {any} [value] Date input\n * @param {string} [format] Input format\n * @returns {PicoNow} Now instance\n */\n static make(value = null, format = 'YYYY-MM-DD HH:mm:ss')\n {\n return new Now(value, format);\n }\n\n /**\n * Reset date parts to start\n *\n * @example Now.make().reset() // => Now\n *\n * @param {any} [config] Reset flags\n * @returns {PicoNow} Now instance\n */\n reset(config = null)\n {\n if ( config == null ) {\n config = { month: true, day: true, time: true };\n }\n\n if ( config.month ) {\n this.value.setMonth(0);\n }\n\n if ( config.day ) {\n this.value.setDate(1);\n }\n\n if ( config.time ) {\n this.value.setHours(0, 0, 0);\n }\n\n return this;\n }\n\n /**\n * Clone Now instance\n *\n * @example Now.make().clone() // => Now\n *\n * @param {boolean} [reset] Reset clone\n * @returns {PicoNow} New instance\n */\n clone(reset = false)\n {\n return new Now(new Date(this.value), null, reset);\n }\n\n /**\n * Check if input is valid date\n *\n * @example Now.make(\"x\").valid() // => false\n *\n * @returns {boolean} True if valid\n */\n valid()\n {\n return ! isNaN(this.input);\n }\n\n /**\n * Get Date instance\n *\n * @example Now.make().toDate() // => Date\n *\n * @returns {Date} Date instance\n */\n toDate()\n {\n return this.value;\n }\n\n /**\n * Get UTC string\n *\n * @example Now.make().toUTC() // => string\n *\n * @returns {string} UTC string\n */\n toUTC()\n {\n return this.value.toUTCString();\n }\n\n}\n\n/**\n * @see PicoNow.reset\n */\nPicoNow.prototype.resetTime = function () {\n console.warn('Now.resetTime() is deprecated, use Now.reset({ time: true }) instead.');\n return this.reset({ time: true });\n}\n\n/**\n * @returns {typeof PicoNow}\n */\nexport function PicoNowBuilder() {\n\n let cls = PicoNow;\n\n for ( const plugin of PicoNowPlugins ) {\n cls = plugin.call(cls, cls);\n }\n\n return cls;\n}\n\nexport default PicoNowBuilder;","import { Mix, Obj } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const TYPE_PARSERS = [\n { // null\n match: (val) => {\n return /^(null|undefined)$/i.test(val);\n },\n parse: (val) => {\n return Mix.null(val);\n }\n },\n { // boolean\n match: (val) => {\n return /^(true|false|yes|no)$/i.test(val);\n },\n parse: (val) => {\n return Mix.bool(val);\n }\n },\n { // integer\n match: (val) => {\n return /^-?[0-9]+$/.test(val);\n },\n parse: (val) => {\n return Mix.int(val);\n }\n },\n { // number\n match: (val) => {\n return /^-?[0-9]+\\.[0-9]+$/.test(val);\n },\n parse: (val) => {\n return Mix.num(val);\n }\n },\n { // array\n match: (val) => {\n return /^[{\\[].*?[}\\]]$/.test(val);\n },\n parse: (val) => {\n return JSON.parse(val);\n }\n },\n];\n\nexport const TYPE_CASTERS = [\n { // array\n match: (val) => {\n return Mix.isArr(val);\n },\n parse: (val) => {\n return JSON.stringify(val);\n }\n }\n];\n\n/**\n * @memberof PicoFormat\n */\nexport class PicoFormatParserStatic\n{\n\n /**\n * Convert key path format\n *\n * @example Format.keyed(\"a[b]\") // => \"a.b\"\n *\n * @param {any} value Input key\n * @param {any} [fallback] Fallback value\n * @returns {string} Keyed string\n */\n static keyed(value, fallback = null)\n {\n if ( ! Mix.isStr(value) ) {\n return fallback;\n }\n\n if ( value.indexOf('[') === -1 ) {\n return value;\n }\n\n return value.replace(/\\[([^\\]]+)\\]/g, '.$1');\n }\n\n /**\n * Parse value by type\n *\n * @example Format.parsed(\"true\") // => true\n *\n * @param {any} value Input value\n * @param {any} [fallback] Fallback value\n * @param {Array<any>} [parsers] Custom parsers\n * @returns {any} Parsed value\n */\n static parsed(value, fallback = null, parsers = [])\n {\n if ( ! Mix.isStr(value) ) {\n return fallback;\n }\n\n value = value.replace(/(^\"|^'|'$|\"$)/g, '');\n\n for ( let type of parsers ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n for ( let type of TYPE_PARSERS ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n return value;\n }\n\n /**\n * Cast value to string\n *\n * @example Format.casted(true) // => \"true\"\n *\n * @param {any} value Input value\n * @param {boolean} [encode] Encode value\n * @param {Array<any>} [casters] Custom casters\n * @returns {string} Casted string\n */\n static casted(value, encode = false, casters = [])\n {\n if ( encode ) {\n value = encodeURI(value);\n }\n\n if ( Mix.isStr(value) ) {\n return value;\n }\n\n for ( let type of casters ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n for ( let type of TYPE_CASTERS ) {\n if ( type.match(value) ) return type.parse(value);\n }\n\n return Mix.str(value);\n }\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatParserPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatParserStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Arr, Mix, Obj, For } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const PARAM_REGEX = {\n entry: /(?<=^|&|\\?)(\\s*(?<key>.*?)\\s*=\\s*(?<val>\".*?\"|'.*?'|.*?)\\s*)(?=&|$)/g\n};\n\n/**\n * @memberof PicoFormat\n * @extends {PicoFormat}\n */\nexport class PicoFormatParamStatic\n{\n\n /**\n * Cast object to params string\n *\n * @example Format.castParams({ a: 1 }) // => \"a=1\"\n *\n * @param {any} [params] Input params\n * @returns {string} Params string\n */\n static castParams(params = {})\n {\n if ( Mix.isEmpty(params) ) {\n return '';\n }\n\n let result = Arr.each(params, (val, key) => {\n return this.castParam(key, val);\n });\n\n return result.join('&');\n }\n\n /**\n * Cast single param to string\n *\n * @example Format.castParam(\"a\", 1) // => \"a=1\"\n *\n * @param {string} key Param key\n * @param {any} value Param value\n * @param {string} [path] Key path\n * @returns {string} Param string\n */\n static castParam(key, value, path = null)\n {\n if ( path != null ) {\n key = path + '[' + key + ']';\n }\n\n if ( !Mix.isRef(value) ) {\n return Mix.str(key) + '=' + For.casted(value, true);\n }\n\n let result = Arr.each(value, (v, k) => {\n return this.castParam(Mix.isArr(value) ? '' : k, v, key);\n });\n\n return result.join('&');\n }\n\n /**\n * Parse params string\n *\n * @example Format.parseParams(\"a=1\") // => { a: 1 }\n *\n * @param {string} value Params string\n * @returns {any} Params object\n */\n static parseParams(value)\n {\n if ( Mix.isEmpty(value) ) {\n return {};\n }\n\n value = decodeURIComponent(value);\n\n let matches = value.matchAll(...[\n PARAM_REGEX.entry\n ]);\n\n if ( matches == null ) {\n return {};\n }\n\n const [key, val] = [\n For.keyed, For.parsed\n ];\n\n return Arr.reduce(Array.from(matches), (result, { groups }) => {\n return Obj.set(result, key(groups.key), val(groups.val));\n }, {});\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatParamPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatParamStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Arr, For, Mix, Obj } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const OPTION_REGEX = {\n entry: /(^|;)(\\s*(?<key>.*?)\\s*:\\s*(?<val>\".*?\"|'.*?'|.*?)\\s*)(?=;|$)/g\n};\n\n/**\n * @memberof PicoFormat\n */\nexport class PicoFormatOptionStatic\n{\n\n /**\n * Cast object to options string\n *\n * @example Format.castOptions({ a: 1 }) // => \"a: 1;\"\n *\n * @param {any} [options] Input options\n * @param {boolean} [space] Add space\n * @returns {string} Options string\n */\n static castOptions(options = {}, space = true)\n {\n if ( Mix.isEmpty(options) ) {\n return '';\n }\n\n let result = Arr.each(options, (val, key) => {\n return this.castOption(key, val, null, space);\n });\n\n return result.join(space ? '; ' : ';') + ';';\n }\n\n /**\n * Cast single option to string\n *\n * @example Format.castOption(\"a\", 1) // => \"a: 1\"\n *\n * @param {string} key Option key\n * @param {any} value Option value\n * @param {string} [path] Key path\n * @param {boolean} [space] Add space\n * @returns {string} Option string\n */\n static castOption(key, value, path = null, space = true)\n {\n if ( path != null ) {\n key = path + '.' + key;\n }\n\n let div = space ? ': ' : ':';\n\n if ( !Mix.isObj(value) ) {\n return Mix.str(key) + div + For.casted(value, false);\n }\n\n let result = Arr.map(value, (v, k) => {\n return this.castOption(k, v, key, space);\n });\n\n return result.join(space ? '; ' : ';');\n }\n\n /**\n * Parse options string\n *\n * @example Format.parseOptions(\"a: 1;\") // => { a: 1 }\n *\n * @param {string} value Options string\n * @returns {any} Options object\n */\n static parseOptions(value)\n {\n if ( Mix.isEmpty(value) ) {\n return {};\n }\n\n let matches = value.matchAll(...[\n OPTION_REGEX.entry\n ]);\n\n if ( matches == null ) {\n return {};\n }\n\n const [key, val] = [\n For.keyed, For.parsed\n ];\n\n return Arr.reduce(Array.from(matches), (result, { groups }) => {\n return Obj.set(result, key(groups.key), val(groups.val));\n }, {});\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatOptionPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatOptionStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Arr, Mix, Obj } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const SLUG_CONVERT = [\n ['à', 'a'],\n ['á', 'a'],\n ['â', 'a'],\n ['è', 'e'],\n ['é', 'e'],\n ['ê', 'e'],\n ['ì', 'i'],\n ['í', 'i'],\n ['ï', 'i'],\n ['î', 'i'],\n ['ò', 'o'],\n ['ó', 'o'],\n ['ô', 'o'],\n ['ù', 'u'],\n ['ú', 'u'],\n ['û', 'u'],\n ['ñ', 'n'],\n ['ç', 'c'],\n ['.', '-'],\n ['·', '-'],\n ['/', '-'],\n ['_', '-'],\n [',', '-'],\n [':', '-'],\n [';', '-'],\n ['ä', 'ae'],\n ['ö', 'oe'],\n ['ü', 'ue'],\n ['ß', 'ss'],\n];\n\n/**\n * @memberof PicoFormat\n * @extends {PicoFormat}\n */\nexport class PicoFormatUrlStatic\n{\n\n /**\n * Create slug from string\n *\n * @example Format.slugify(\"Hello World\") // => \"hello-world\"\n *\n * @param {any} value Input string\n * @returns {string} Slug string\n */\n static slugify(value)\n {\n value = String(value).replace(/(^\\s+|\\s+$)/g, '')\n .toLowerCase();\n\n Arr.each(SLUG_CONVERT, (v) => {\n value = value.replaceAll(v[0], v[1]);\n });\n\n return value.replace(/[^a-z0-9-\\s]+/g, '')\n .replace(/\\s+/g, '-').replace(/-+/g, '-');\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatUrlPlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatUrlStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { Mix, Obj, Num } from \"../index.esm.js\";\nimport { PicoFormat } from \"../utils/Format.js\";\n\nexport const FILE_UNITS = [\n 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'\n];\n\n/**\n * @memberof PicoFormat\n * @extends {PicoFormat}\n */\nexport class PicoFormatFileStatic\n{\n\n /**\n * Format file size\n *\n * @example Format.filesize(1000) // => \"1.0 KB\"\n *\n * @param {any} value Bytes value\n * @param {number} [decimals] Decimal points\n * @returns {string} Formatted size\n */\n static filesize(value, decimals = 1)\n {\n if ( ! Mix.isNum(value) ) {\n value = Mix.num(value, 0);\n }\n\n let fn = (i) => {\n return Num.fixed(value / Math.pow(1000, i), decimals);\n }\n\n for ( let i = 0; i < FILE_UNITS.length; i++ ) {\n if ( value <= Math.pow(1000, i+1) ) {\n return fn(i) + ' ' + FILE_UNITS[i]\n }\n }\n\n return fn(FILE_UNITS.length);\n }\n\n}\n\n/**\n * @param {typeof PicoFormat} self\n * @returns {typeof PicoFormat}\n */\nexport const PicoFormatFilePlugin = function (self) {\n\n Obj.each(Mix.class(PicoFormatFileStatic), (fn, id) => {\n self[id] = fn;\n });\n\n return self;\n}","import { PicoFormatParserPlugin } from \"../format/FormatParser.js\";\nimport { PicoFormatParamPlugin } from \"../format/FormatParam.js\";\nimport { PicoFormatOptionPlugin } from \"../format/FormatOption.js\";\nimport { PicoFormatUrlPlugin } from \"../format/FormatUrl.js\";\nimport { PicoFormatFilePlugin } from \"../format/FormatFile.js\";\n\nexport const PicoFormatPlugins = [\n PicoFormatParserPlugin,\n PicoFormatParamPlugin,\n PicoFormatOptionPlugin,\n PicoFormatUrlPlugin,\n PicoFormatFilePlugin,\n];\n\n/**\n * @class PicoFormat\n *\n * @typedef {import('../format/FormatParser.js').PicoFormatParserStatic} PicoFormatParserStatic\n * @typedef {import('../format/FormatParam.js').PicoFormatParamStatic} PicoFormatParamStatic\n * @typedef {import('../format/FormatOption.js').PicoFormatOptionStatic} PicoFormatOptionStatic\n * @typedef {import('../format/FormatUrl.js').PicoFormatUrlStatic} PicoFormatUrlStatic\n * @typedef {import('../format/FormatFile.js').PicoFormatFileStatic} PicoFormatFileStatic\n *\n * @mixes PicoFormatParserStatic\n * @mixes PicoFormatParamStatic\n * @mixes PicoFormatOptionStatic\n * @mixes PicoFormatUrlStatic\n * @mixes PicoFormatFileStatic\n */\nexport class PicoFormat\n{\n\n /**\n * Extend format with a plugin\n *\n * @example For.extend(fn)\n *\n * @param {function} plugin Plugin function\n * @returns {void} No return value\n */\n static extend(plugin)\n {\n plugin.call({}, this);\n }\n\n}\n\n/**\n * @returns {typeof PicoFormat}\n */\nexport function PicoFormatBuilder() {\n\n let cls = PicoFormat;\n\n for ( const plugin of PicoFormatPlugins ) {\n cls = plugin.call(cls, cls);\n }\n\n return cls;\n}\n\nexport default PicoFormatBuilder;","/**\n * Get global runtime scope\n *\n * @example go().Math // => Math\n *\n * @returns {any} Global scope obj\n */\nexport function go() {\n\n if ( typeof globalThis !== 'undefined' ) {\n return globalThis;\n }\n\n if ( typeof window !== 'undefined' ) {\n return window;\n }\n\n if ( typeof global !== 'undefined' ) {\n return global;\n }\n\n return {};\n}\n\n/**\n * Detect browser from userAgent\n *\n * @example browser() // sets global flags\n *\n * @returns {void} No return value\n */\nexport function browser() {\n\n const scope = go();\n\n if ( ! scope.navigator ) {\n return;\n }\n\n let [agent, result] = [\n scope.navigator.userAgent, {}\n ]\n\n if ( result.safari == null ) {\n result.safari = /Safari\\//.test(agent);\n }\n\n if ( result.firefox == null ) {\n result.firefox = /Firefox\\//.test(agent);\n }\n\n if ( result.edge == null ) {\n result.edge = /Edge\\//.test(agent);\n }\n\n if ( result.chrome == null ) {\n result.chrome = /Chrome\\//.test(agent);\n }\n\n scope.piuag = result;\n}\n\n/**\n * Detect device OS from userAgent\n *\n * @example device() // sets global flags\n *\n * @returns {void} No return value\n */\nexport function device() {\n\n const scope = go();\n\n if ( ! scope.navigator ) {\n return;\n }\n\n let [agent, result] = [\n scope.navigator.userAgent, {}\n ]\n\n if ( result.win == null ) {\n result.win = /Windows/.test(agent);\n }\n\n if ( result.osx == null ) {\n result.osx = /Macintosh|Mac OS X/.test(agent);\n }\n\n if ( result.gnu == null ) {\n result.gnu = /Linux/.test(agent);\n }\n\n if ( result.ios == null ) {\n result.ios = /iPhone|iPad|iPod/.test(agent);\n }\n\n if ( result.oid == null ) {\n result.oid = /Android/.test(agent);\n }\n\n scope.piudv = result;\n}","import { Arr, Num, Event, Mix, Obj } from \"../index.esm.js\";\n\nexport class PicoData\n{\n /**\n * In-memory data store\n *\n * @type {Record<string, any>}\n */\n static $data = {};\n\n /**\n * Check if store key exists\n *\n * @example Data.has([\"x\"]) // => true|false\n *\n * @param {any} input Store key input\n * @returns {boolean} True if exists\n */\n static has(input)\n {\n return Obj.has(this.$data, ...[\n Arr.first(input)\n ]);\n }\n\n /**\n * Set store key and fire event\n *\n * @example Data.set([\"x\"], 1)\n * @example Data.set([\"x\"], {a:1})\n *\n * @param {any} input Store key input\n * @param {any} value Value to set\n * @returns {void} No return value\n */\n static set(input, value)\n {\n let [stored, key] = [\n null, Arr.first(input)\n ];\n\n if ( Obj.has(this.$data, key) ) {\n stored = Obj.get(this.$data, key);\n }\n\n if ( Mix.isEqual(stored, value) ) {\n return;\n }\n\n Obj.set(...[\n this.$data, key, value\n ]);\n\n Event.fire('store:' + key, value, key);\n }\n\n /**\n * Remove store key\n *\n * @example Data.unset([\"x\"])\n *\n * @param {any} input Store key input\n * @returns {void} No return value\n */\n static unset(input)\n {\n Obj.unset(this.$data, [\n ...Arr.first(input)\n ]);\n }\n\n /**\n * Get stored value (cloned)\n *\n * @example Data.get([\"x\"], null) // => value\n * @example Data.get([\"x\"], 1, true) // set+get\n *\n * @param {any} input Store key input\n * @param {any} [fallback] Fallback value\n * @param {boolean} [forceSet] Set if missing\n * @returns {any} Stored value\n */\n static get(input, fallback = null, forceSet = false)\n {\n let key = Arr.first(input);\n\n if ( !Obj.has(this.$data, key) && !forceSet ) {\n return fallback;\n }\n\n if ( Obj.has(this.$data, key) && forceSet ) {\n Obj.set(this.$data, key, fallback);\n }\n\n let value = Obj.get(this.$data, key, fallback);\n\n if ( !Mix.isObj(value) ) {\n return value;\n }\n\n return Obj.clone(value);\n }\n\n /**\n * Find item by id in array store\n *\n * @example Data.find([\"list\"], {id:1})\n *\n * @param {any} input Store key input\n * @param {any} value Search value\n * @param {any} [fallback] Fallback value\n * @returns {any} Found item\n */\n static find(input, value, fallback = null)\n {\n let key = Arr.first(input);\n\n if ( Obj.has(this.$data, key) === false ) {\n return fallback;\n }\n\n if ( Obj.has(value, 'id') === false ) {\n return fallback;\n }\n\n let index = Arr.findIndex(this.get(key), {\n id: value.id\n });\n\n if ( index === - 1 ) {\n return fallback;\n }\n\n return this.get(key + '.' + index);\n }\n\n /**\n * Replace item by id in array store\n *\n * @example Data.replace([\"list\"], {id:1})\n *\n * @param {any} input Store key input\n * @param {any} value Item to replace\n * @returns {void} No return value\n */\n static replace(input, value)\n {\n let key = Arr.first(input);\n\n if ( Obj.has(this.$data, key) === false ) {\n return;\n }\n\n if ( Obj.has(value, 'id') === false ) {\n return;\n }\n\n let index = Arr.findIndex(this.get(key), {\n id: Num.int(value.id)\n });\n\n if ( index === - 1 ) {\n return;\n }\n\n this.set(key + '.' + index, value);\n }\n\n /**\n * Add items to array store\n *\n * @example Data.add([\"list\"], 1, 2)\n *\n * @param {any} input Store key input\n * @param {...any} args Items to add\n * @returns {void} No return value\n */\n static add(input, ...args)\n {\n this.set(input, Arr.concat(this.get(input, []), args));\n }\n\n /**\n * Remove items from array store\n *\n * @example Data.remove([\"list\"], 1)\n *\n * @param {any} input Store key input\n * @param {...any} args Items to remove\n * @returns {void} No return value\n */\n static remove(input, ...args)\n {\n this.set(input, Arr.diff(this.get(input, []), args));\n }\n\n}\n\nexport default PicoData;","import { Arr, For, Locale, Mix, Obj } from \"../index.esm.js\";\n\nexport class PicoRoute\n{\n\n static $routes = {};\n\n /**\n * Store route template by key\n *\n * @example Route.set(\"home\", \"/\") // stores\n *\n * @param {string} key Route key\n * @param {string} value Route template\n * @returns {void} No return value\n */\n static set(key, value)\n {\n this.$routes[key] = value;\n }\n\n /**\n * Build route URL from template\n *\n * @example Route.get(\"home\") // => \"/\"\n * @example Route.get(\"/u/:id\", {id:1}) // => \"/u/1\"\n *\n * @param {string} key Route key or url\n * @param {any} [values] Token values\n * @param {any} [query] Query params\n * @returns {string} Built url\n */\n static get(key, values = null, query = null)\n {\n let route = key;\n\n if ( ! /^https?:\\/\\//.test(route) ) {\n route = this.$routes[key] || key\n }\n\n Obj.each(values, (val, key) => {\n route = route.replace(new RegExp('{' + key + '}', 'g'), val);\n });\n\n if ( ! Mix.isEmpty(query) ) {\n route += '?' + For.castParams(query);\n }\n\n return route;\n }\n\n /**\n * Navigate to built route URL\n *\n * @example Route.goto(\"home\")\n *\n * @param {string} key Route key or url\n * @param {any} [values] Token values\n * @param {any} [params] Query params\n * @returns {void} No return value\n */\n static goto(key, values = null, params = null)\n {\n window.location.href = this.get(key, values, params);\n }\n\n}\n\nexport default PicoRoute;","import { go, Obj, Arr, Mix, Dom, Event, Hash } from \"#src/index.esm.js\";\n\n/**\n * @const {object} google\n */\n\nexport class PicoMap\n{\n map = null;\n\n static mapStyle = [];\n\n markers = {};\n\n static markerStyles = {};\n\n cluster = null;\n\n clusterFilter = null;\n\n clusterOptions = {};\n\n static hideMarkers = true;\n\n static closeInfoWindows = true;\n\n /**\n * Create map instance\n *\n * @example new Map(\"#map\", { lat: 0, lng: 0 })\n *\n * @param {any} el Target element\n * @param {any} [options] Map options\n */\n constructor(el, options = {})\n {\n if ( ! globalThis.google ) {\n throw new Error('Google Maps is required for pi.Map');\n }\n\n let center = Obj.only(options, ['lat', 'lng']);\n\n if ( ! Obj.has(options, 'styles') ) {\n options.styles = Map.mapStyle;\n }\n\n options = Obj.assign({ gestureHandling: 'cooperative', scrollwheel: null, zoom: 12, center },\n Obj.except(options, ['lat', 'lng']));\n\n this.map = new globalThis.google.maps.Map(Dom.find(el).get(0), options)\n }\n\n /**\n * Set global map style\n *\n * @example Map.setMapStyle(style)\n *\n * @param {Array<any>} [style] Style array\n * @returns {PicoMap} Current class\n */\n static setMapStyle(style = [])\n {\n Map.mapStyle = style;\n\n return this;\n }\n\n /**\n * Set marker style\n *\n * @example Map.setMarkerStyle(\"default\", { default: \"icon.png\" })\n *\n * @param {string} key Style key\n * @param {any} [style] Style options\n * @param {any} [extra] Extra options\n * @returns {PicoMap} Current class\n */\n static setMarkerStyle(key, style = {}, extra = {})\n {\n if ( ! globalThis.google ) {\n throw new Error('Google Maps is required for pi.Map');\n }\n\n if ( ! Obj.has(style, 'default') ) {\n return console.error('Marker style requires default property')\n }\n\n if ( ! Obj.has(style, 'width') ) {\n style.width = 45;\n }\n\n if ( ! Obj.has(style, 'height') ) {\n style.height = 45;\n }\n\n let final = {};\n\n // Marker size\n let size = new globalThis.google.maps.Size(style.width, style.height);\n\n // Point position\n let origin = new globalThis.google.maps.Point(0, 0);\n\n // Point position\n let anchor = new globalThis.google.maps.Point(style.width / 2, style.height);\n\n final.default = {\n url: style.default, size: size, origin: origin, anchor: anchor, scaledSize: size\n };\n\n if ( Obj.has(style, 'hover') ) {\n final.hover = Obj.assign({}, final.default, { url: style.hover });\n }\n\n if ( ! Obj.has(final, 'hover') ) {\n final.hover = final.default;\n }\n\n if ( Obj.has(style, 'active') ) {\n final.active = Obj.assign({}, final.default, { url: style.active });\n }\n\n if ( ! Obj.has(final, 'active') ) {\n final.active = final.default;\n }\n\n Obj.each(extra, (value, prop) => {\n final[prop] = Obj.assign({}, final.default, { url: value });\n });\n\n Obj.set(Map.markerStyles, key, final);\n\n return this;\n }\n\n /**\n * Cluster map markers\n *\n * @example map.clusterMarkers()\n *\n * @param {any} [options] Cluster options\n * @param {any} [filter] Marker filter\n * @param {boolean} [allowCreate] Create cluster\n * @returns {void} No return value\n */\n clusterMarkers(options = {}, filter = null, allowCreate = true)\n {\n if ( ! this.cluster && ! allowCreate ) {\n return;\n }\n\n if ( typeof globalThis.MarkerClusterer === \"undefined\" ) {\n return console.error('Google Maps Cluster library not laoded!');\n }\n\n if ( ! Obj.has(options, 'imagePath') && ! Obj.has(options, 'styles') ) {\n options.imagePath = '//developers.google.com/maps/documentation/javascript/examples/markerclusterer/m';\n }\n\n if ( this.cluster ) {\n this.cluster.clearMarkers();\n }\n\n if ( Mix.isFunction(filter) ) {\n this.clusterFilter = filter;\n }\n\n let markers = Arr.filter(this.markers, (item) => {\n\n let visible = this.getMarkerVisibility(item.key);\n\n if ( ! Mix.isFunction(this.clusterFilter) ) {\n return visible;\n }\n\n return visible && this.clusterFilter.call(this, item);\n });\n\n this.cluster = new globalThis.MarkerClusterer(this.map, Arr.each(markers, (item) => item.marker),\n this.clusterOptions = options);\n }\n\n /**\n * Apply style to marker\n *\n * @example map.styleMarker(\"m1\", \"hover\")\n *\n * @param {string} key Marker key\n * @param {any} [type] Style type\n * @returns {void} No return value\n */\n styleMarker(key, type = null)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n if ( Mix.isEmpty(type) ) {\n type = this.getInfoVisibility(key) ? 'active' : 'default';\n }\n\n if ( ! Obj.has(Map.markerStyles, [item.style, type]) ) {\n return;\n }\n\n item.marker.setIcon(Obj.get(Map.markerStyles, [item.style, type]));\n }\n\n /**\n * Get marker by key\n *\n * @example map.getMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {any} Marker object\n */\n getMarker(key)\n {\n return Obj.get(this.markers, key);\n }\n\n /**\n * Check if marker is visible\n *\n * @example map.getMarkerVisibility(\"m1\") // => true\n *\n * @param {string} key Marker key\n * @param {boolean} [fallback] Fallback value\n * @returns {boolean} Visibility state\n */\n getMarkerVisibility(key, fallback = false)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return fallback;\n }\n\n return item.marker.getVisible();\n }\n\n /**\n * Get marker position\n *\n * @example map.getMarkerPositon(\"m1\") // => LatLng\n *\n * @param {string} key Marker key\n * @param {any} [fallback] Fallback value\n * @returns {any} Position object\n */\n getMarkerPositon(key, fallback = null)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return fallback;\n }\n\n return item.marker.getPosition();\n }\n\n /**\n * Toggle marker visibility\n *\n * @example map.toggleMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Visibility state\n */\n toggleMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n if ( item.marker.getVisible() ) {\n return this.hideMarker(key);\n }\n\n return this.showMarker(key);\n }\n\n /**\n * Show marker on map\n *\n * @example map.showMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n showMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let hidden = ! item.marker.getVisible();\n\n if ( hidden ) {\n item.marker.setVisible(true);\n }\n\n return hidden;\n }\n\n /**\n * Hide marker on map\n *\n * @example map.hideMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n hideMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let visible = !! item.marker.getVisible();\n\n if ( visible ) {\n item.marker.setVisible(false);\n }\n\n this.closeInfo(key);\n\n return visible;\n }\n\n /**\n * Marker hover enter\n *\n * @example map.enterMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {this|void} Current instance\n */\n enterMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let type = 'hover';\n\n if ( this.getInfoVisibility(key) ) {\n type = 'active';\n }\n\n this.styleMarker(key, type);\n\n return this;\n }\n\n /**\n * Marker hover leave\n *\n * @example map.leaveMarker(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {this|void} Current instance\n */\n leaveMarker(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n let type = 'default';\n\n if ( this.getInfoVisibility(key) ) {\n type = 'active';\n }\n\n this.styleMarker(key, type);\n\n return this;\n }\n\n /**\n * Check if info is open\n *\n * @example map.getInfoVisibility(\"m1\") // => true\n *\n * @param {string} key Marker key\n * @param {boolean} [fallback] Fallback value\n * @returns {boolean} Visibility state\n */\n getInfoVisibility(key, fallback = false)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) || ! Obj.has(item, 'info') ) {\n return fallback;\n }\n\n return !! item.info.getMap();\n }\n\n /**\n * Toggle info window\n *\n * @example map.toggleInfo(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Visibility state\n */\n toggleInfo(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n if ( item.info.getMap() ) {\n return this.closeInfo(key);\n }\n\n return this.openInfo(key);\n }\n\n /**\n * Open info window\n *\n * @example map.openInfo(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n openInfo(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`InfoWindow \"${key}\" not found`);\n }\n\n if ( ! Obj.has(item, 'info') ) {\n return true;\n }\n\n let hidden = ! item.info.getMap();\n\n if ( Map.closeInfoWindows ) {\n Obj.each(Mix.keys(this.markers), this.closeInfo.bind(this));\n }\n\n if ( hidden ) {\n item.info.open(this.map, item.marker);\n }\n\n if ( Mix.isFunction(item.onOpen) ) {\n item.onOpen(item);\n }\n\n this.styleMarker(key, 'active');\n\n return hidden;\n }\n\n /**\n * Close info window\n *\n * @example map.closeInfo(\"m1\")\n *\n * @param {string} key Marker key\n * @returns {boolean|void} Previous state\n */\n closeInfo(key)\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`InfoWindow \"${key}\" not found`);\n }\n\n if ( ! Obj.has(item, 'info') ) {\n return false;\n }\n\n let visible = !! item.info.getMap();\n\n if ( visible ) {\n item.info.close();\n }\n\n if ( Mix.isFunction(item.onClose) ) {\n item.onClose(item);\n }\n\n this.styleMarker(key, 'default');\n\n return visible;\n }\n\n /**\n * Create map marker\n *\n * @example map.createMarker(\"m1\", { lat: 0, lng: 0 })\n *\n * @param {any} [key] Marker key\n * @param {any} [options] Marker options\n * @returns {any} Marker object\n */\n createMarker(key = null, options = {})\n {\n if ( Mix.isEmpty(key) ) {\n key = Hash.uuid();\n }\n\n let item = { key };\n\n if ( ! Obj.has(options, 'visible') ) {\n options.visible = true;\n }\n\n item.extras = Obj.except(options, [\n 'map', 'position', 'lat', 'lng', 'html', 'style', 'visible', 'onOpen', 'onClose'\n ]);\n\n if ( ! Obj.has(options, 'map') ) {\n options.map = this.map;\n }\n\n if ( ! Obj.has(options, 'position') ) {\n options.position = Obj.only(options, ['lat', 'lng']);\n }\n\n if ( Obj.has(options, 'style') ) {\n item.style = options.style;\n }\n\n item.marker = new globalThis.google.maps.Marker(options);\n\n if ( !options.visible ) {\n item.marker.setVisible(false);\n }\n\n Obj.assign(item, {\n onOpen: Obj.get(options, 'onOpen'), onClose: Obj.get(options, 'onClose'),\n })\n\n Obj.set(this.markers, key, item);\n\n this.clusterMarkers(this.clusterOptions, null, false);\n\n if ( ! Obj.has(options, 'html') ) {\n return Obj.get(this.markers, key);\n }\n\n if ( ! Obj.has(item, 'style') ) {\n item.style = 'default';\n }\n\n // Style marker\n this.styleMarker(key);\n\n // Add marker hover style\n item.marker.addListener('mouseover', () => this.enterMarker(key));\n\n // Add marker default style\n item.marker.addListener('mouseout', () => this.leaveMarker(key));\n\n item.info = new globalThis.google.maps.InfoWindow({\n content: '<div class=\"gw-i-html\">' + Obj.get(options, 'html') + '</div>'\n });\n\n item.marker.addListener('click', () => this.toggleInfo(key));\n item.info.addListener('closeclick', () => this.closeInfo(key));\n\n // Dom change event\n item.info.addListener('domready', () => Event.fire('MapsDomReady'));\n\n Obj.set(this.markers, key, item);\n\n return Obj.get(this.markers, key);\n }\n\n /**\n * Set marker position\n *\n * @example map.setMarkerPosition(\"m1\", { lat: 0, lng: 0 })\n *\n * @param {string} key Marker key\n * @param {any} [options] Position options\n * @returns {void} No return value\n */\n setMarkerPosition(key, options = {})\n {\n let item = Obj.get(this.markers, key);\n\n if ( Mix.isEmpty(item) ) {\n return console.error(`Marker \"${key}\" not found`);\n }\n\n item.marker.setPosition(options);\n }\n\n /**\n * Set marker by address\n *\n * @example map.setMarkerByAddress(\"m1\", \"Address\")\n *\n * @param {string} key Marker key\n * @param {any} address Search address\n * @returns {Promise<any>} Response promise\n */\n setMarkerByAddress(key, address)\n {\n return this.getLocationByAddress(address, (res) => {\n this.setMarkerPosition(key, Obj.get(res, '0.geometry.location', {}));\n });\n }\n\n /**\n * Get location by address\n *\n * @example map.getLocationByAddress(\"Address\")\n *\n * @param {any} address Search address\n * @param {function} [callback] Success callback\n * @returns {Promise<any>} Response promise\n */\n getLocationByAddress(address, callback = null)\n {\n let geocoderService = new globalThis.google.maps.Geocoder();\n\n let geocoderPromise = (resolve, reject) => {\n\n let geocoderResult = (response, status) => {\n\n if ( status === 'OK' ) {\n callback(response);\n resolve(response);\n }\n\n if ( status !== 'OK' ) {\n reject(response);\n }\n\n };\n\n geocoderService.geocode({ address }, geocoderResult);\n };\n\n return new Promise(geocoderPromise);\n }\n\n /**\n * Show markers on map\n *\n * @example map.showMarkers()\n *\n * @param {any} [filter] Marker filter\n * @returns {PicoMap} Current instance\n */\n showMarkers(filter = null)\n {\n let markers = this.markers;\n\n if ( ! Mix.isEmpty(filter) ) {\n markers = Obj.filter(this.markers, filter);\n }\n\n if ( Map.hideMarkers ) {\n Obj.each(Mix.keys(this.markers), this.hideMarker.bind(this));\n }\n\n Obj.each(markers, (item) => this.showMarker(item.key));\n\n this.clusterMarkers(this.clusterOptions, null, false);\n\n return this;\n }\n\n /**\n * Get marker boundary\n *\n * @example map.getMarkerBoundry() // => LatLngBounds\n *\n * @param {any} [filter] Marker filter\n * @returns {any} Boundary object\n */\n getMarkerBoundry(filter = null)\n {\n let markers = this.markers;\n\n if ( ! Mix.isEmpty(filter) ) {\n markers = Obj.filter(this.markers, filter);\n }\n\n let boundry = new globalThis.google.maps.LatLngBounds();\n\n Obj.each(markers, (item) => {\n if ( item.marker.getVisible() ) {\n boundry.extend(item.marker.getPosition());\n }\n });\n\n return boundry;\n }\n\n /**\n * Focus markers on map\n *\n * @example map.focusMarkers()\n *\n * @param {any} [filter] Marker filter\n * @param {number} [maxZoom] Max zoom level\n * @param {number} [boundSpace] Viewport space\n * @returns {PicoMap} Current instance\n */\n focusMarkers(filter = null, maxZoom = 14, boundSpace = 15)\n {\n let boundry = this.getMarkerBoundry(filter);\n\n // Center map to boundry\n this.map.setCenter(boundry.getCenter());\n\n // Adapt viewport to boundry\n this.map.fitBounds(boundry, boundSpace);\n\n if ( this.map.getZoom() > maxZoom ) {\n this.map.setZoom(maxZoom);\n }\n\n return this;\n }\n\n /**\n * Render directions on map\n *\n * @example map.renderDirections({ origin: \"A\", destination: \"B\" })\n *\n * @param {any} options Render options\n * @returns {Promise<any>} Response promise\n */\n renderDirections(options)\n {\n // Get directions service\n let directionsService = new globalThis.google.maps.DirectionsService();\n\n // Get directions renderer\n let directionsRenderer = new globalThis.google.maps.DirectionsRenderer();\n\n if ( ! Obj.has(options, 'map') ) {\n options.map = this.map;\n }\n\n if ( ! Obj.has(options, 'travelMode') ) {\n options.travelMode = 'DRIVING';\n }\n\n // Set directions map\n directionsRenderer.setMap(options.map);\n\n if ( Obj.has(options, 'panel') && ! Dom.find(options.panel).empty() ) {\n directionsRenderer.setPanel(Dom.find(options.panel).get(0));\n }\n\n options = Obj.only(options, ['origin', 'destination', 'travelMode']);\n\n let directionsPromise = (resolve, reject) => {\n\n let directionsResult = (response, status) => {\n\n if ( status === 'OK' ) {\n directionsRenderer.setDirections(response);\n resolve(response);\n }\n\n if ( status !== 'OK' ) {\n reject(response);\n }\n\n };\n\n directionsService.route(options, directionsResult);\n };\n\n return new Promise(directionsPromise);\n }\n\n}\n\nexport default PicoMap;\n","import { Str, Obj, Dom, Mix, Arr } from \"#src/index.esm.js\";\n\nexport class PicoElement\n{\n /**\n * Prefix for attribute selector.\n */\n static prefix = 'js';\n\n /**\n * Mounted identifier.\n */\n static mount = 'mount';\n\n /**\n * Instance storage.\n */\n static inis = {};\n\n /**\n * Runtime storage.\n */\n static runs = [];\n\n /**\n * Instance storage.\n */\n static invi = [];\n\n /**\n * Listen to scroll events\n *\n * @example PicoElement.listen()\n *\n * @returns {void} No return value\n */\n static listen()\n {\n // Apply dom scroll event\n document.addEventListener(\"scroll\", PicoElement.scroll);\n\n // Apply initial scroll event\n PicoElement.scroll();\n }\n\n /**\n * Handle scroll visibility\n *\n * @example PicoElement.scroll()\n *\n * @returns {void} No return value\n */\n static scroll()\n {\n Arr.each(this.invi, (item, index) => {\n\n if ( ! Dom.find(item.el).inviewY() ) {\n return;\n }\n\n Arr.removeIndex(this.invi, index);\n\n item.cb();\n });\n }\n\n /**\n * Register element alias\n *\n * @example PicoElement.alias(\"tab\", Tab)\n *\n * @param {string} key Alias key\n * @param {any} instance Class instance\n * @returns {PicoElement} Current class\n */\n static alias(key, instance)\n {\n Obj.set(this.inis, key, instance);\n\n return this;\n }\n\n /**\n * Bind element to selector\n *\n * @example PicoElement.bind(\"tab\", \".tabs\")\n *\n * @param {string} key Alias key\n * @param {any} selector Dom selector\n * @param {any} [options] Init options\n * @returns {PicoElement} Current class\n */\n static bind(key, selector, options = {})\n {\n let el = Dom.find(selector), prefix = this.getPrefix(key);\n\n // Add mounted class\n el.addClass(prefix);\n\n let instance = Obj.get(this.inis,\n key, null);\n\n if ( Mix.isEmpty(instance) ) {\n return console.error(`Element \"${key}\" is not defined.`);\n }\n\n let callback = (el, options) => {\n\n let cb = new instance(\n el.get(0), options\n );\n\n PicoElement.runs.push({\n el: el.get(0), prefix: prefix, deamon: cb\n });\n\n\n el.data(prefix, cb);\n\n return cb.bind !== undefined ?\n cb.bind(el.get(0), options) : cb;\n };\n\n // Bind option\n Dom.ready(() => callback.call({}, el, options));\n\n return this;\n }\n\n /**\n * Unbind element from selector\n *\n * @example PicoElement.unbind(\"tab\", \".tabs\")\n *\n * @param {string} key Alias key\n * @param {any} selector Dom selector\n * @param {any} [options] Init options\n * @returns {PicoElement} Current class\n */\n static unbind(key, selector, options = {})\n {\n let el = Dom.find(selector), prefix = this.getPrefix(key);\n\n let instance = Obj.get(this.inis,\n key, null);\n\n if ( Mix.isEmpty(instance) ) {\n return console.error(`Element \"${key}\" is not defined.`);\n }\n\n let callback = (el, options) => {\n\n let cb = el.data(prefix);\n\n if ( cb.unbind === undefined ) {\n return;\n }\n\n return cb.unbind(el.get(0), options);\n };\n\n // Unbind option\n callback.call({}, el, options);\n\n Arr.remove(PicoElement.runs, { el: el.get(0) });\n\n return this;\n }\n\n\n /**\n * Observe DOM changes\n *\n * @example PicoElement.observe(\"tab\")\n *\n * @param {string} key Alias key\n * @param {boolean} [plain] Plain options\n * @returns {PicoElement} Current class\n */\n static observe(key, plain = false)\n {\n let selector = this.getPrefix(key);\n\n let options = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [selector]\n };\n\n let callback = () => {\n\n let mounted = PicoElement.getPrefix(key);\n\n let deamons = Arr.filter(this.runs,\n { prefix: selector });\n\n Arr.each(deamons, ({ el }) => {\n\n let options = Str.objectify(\n Dom.find(el).attr(selector)\n );\n\n if ( plain && Mix.isEmpty(options) ) {\n options = { _plain: Dom.find(el).attr(selector) };\n }\n\n let inview = Obj.pluck(options, 'inview', false);\n\n if ( inview ) {\n Arr.remove(this.invi, { el });\n }\n\n if ( document.body.contains(el) ) {\n return;\n }\n\n return this.unbind(key, el, options)\n });\n\n Dom.find(`[${selector}]:not(.${mounted})`).each((el) => {\n\n let options = Str.objectify(\n Dom.find(el).attr(selector)\n );\n\n if ( plain && Mix.isEmpty(options) ) {\n options = { _plain: Dom.find(el).attr(selector) };\n }\n\n let inview = Obj.pluck(options, 'inview', false);\n\n let bindCb = () => {\n this.bind(key, el, options);\n };\n\n inview ? this.bindInview(el, bindCb) : bindCb();\n });\n\n };\n\n Dom.find(document.body).observer(callback)\n (document.body, options);\n\n Dom.find(document.body).on('dom.change', callback);\n\n return this;\n }\n\n /**\n * Bind element on inview\n *\n * @example PicoElement.bindInview(el, cb)\n *\n * @param {Element} el Target element\n * @param {function} cb Callback fn\n * @returns {void} No return value\n */\n static bindInview(el, cb)\n {\n Arr.add(this.invi, { el, cb }, { el });\n }\n\n /**\n * Unbind element on inview\n *\n * @example PicoElement.unbindInview(el, cb)\n *\n * @param {Element} el Target element\n * @param {function} cb Callback fn\n * @returns {void} No return value\n */\n static unbindInview(el, cb)\n {\n Arr.remove(this.invi, { el, cb }, { el });\n }\n\n\n\n /**\n * Get attribute prefix\n *\n * @example PicoElement.getPrefix(\"tab\") // => \"js-tab\"\n *\n * @param {string} [key] Alias key\n * @returns {string} Attribute prefix\n */\n static getPrefix(key)\n {\n return key ? this.prefix + '-' + key : this.prefix;\n }\n\n /**\n * Set attribute prefix\n *\n * @example PicoElement.setPrefix(\"pi\")\n *\n * @param {string} prefix New prefix\n * @returns {void} No return value\n */\n static setPrefix(prefix)\n {\n this.prefix = prefix;\n }\n\n}\n\nexport default PicoElement;\n","import { PicoRunner, default as Run } from \"./utils/Runner.js\";\nimport { PicoString, default as Str } from \"./utils/String.js\";\nimport { PicoNumber, default as Num } from \"./utils/Number.js\";\nimport { PicoArray, default as Arr } from \"./utils/Array.js\";\nimport { PicoObject, default as Obj } from \"./utils/Object.js\";\nimport { PicoMixed, default as Mix } from \"./utils/Mixed.js\";\nimport { PicoHash, default as Hash } from \"./utils/Hash.js\";\nimport { PicoSignal, default as Signal } from \"./utils/Signal.js\";\nimport { PicoLocale, default as Locale } from \"./utils/Locale.js\";\nimport { PicoCookie, default as Cookie } from \"./utils/Cookie.js\";\n\n/**\n * @type {typeof PicoDom}\n */\nconst Dom = DomBuilder();\n\n/**\n * @type {typeof PicoNow}\n */\nconst Now = NowBuilder();\n\n/**\n * @type {typeof PicoFormat}\n */\nconst For = ForBuilder();\n\nexport {\n Dom, Now, For, Run, Str, Num, Arr, Obj, Mix, Hash, Signal, Locale, Cookie\n}\n\nimport { PicoDom, default as DomBuilder } from \"./utils/Dom.js\";\nimport { PicoNow, default as NowBuilder } from \"./utils/Now.js\";\nimport { PicoFormat, default as ForBuilder } from \"./utils/Format.js\";\n\nimport { go, browser, device } from \"./tool/scope.js\";\nexport { go, browser, device };\n\n// You will be removed soon\nimport { default as Data } from \"./utils/Data.js\";\nimport { default as Route } from \"./utils/Route.js\";\n\nexport {\n Map, Data\n}\n\n// Work in progress (not started yet)\nimport { default as Map } from \"./wip/Map.js\";\nimport { default as Element } from \"./wip/Element.js\";\n\nexport {\n Route, Element\n}\n\n/**\n * @type {typeof PicoMixed}\n */\nexport const Any = new Proxy({}, {\n get: function (target, prop) {\n console.warn(`Any.${prop} is deprecated, use Mix.${prop}() instead.`);\n return (...args) => Mix[prop](...args);\n }\n});\n\n/**\n * @type {typeof PicoMixed}\n */\nexport const Event = new Proxy({}, {\n get: function (target, prop) {\n console.warn(`Event.${prop} is deprecated, use Signal.${prop}() instead.`);\n return (...args) => Signal[prop](...args);\n }\n});\n\n/**\n * @returns {string}\n */\nexport const UUID = function () {\n console.warn('UUID() is deprecated, use Hash.make() instead.');\n return Hash.make();\n};","import * as pi from \"./index.esm.js\";\n\n/**\n * @typedef {Object} PicoLibrary\n * @property {function(): *} [go]\n * @property {function(): void} [browser]\n * @property {function(): void} [device]\n * @property {PicoDom} [Dom]\n * @property {PicoNow} [Now]\n * @property {PicoFormat} [For]\n * @property {PicoArray} [Arr]\n * @property {PicoMixed} [Mix]\n * @property {PicoNumber} [Num]\n * @property {PicoObject} [Obj]\n * @property {PicoRunner} [Run]\n * @property {PicoString} [Str]\n * @property {PicoHash} [Hash]\n * @property {PicoEvent} [Event]\n * @property {PicoLocale} [Locale]\n * @property {PicoCookie} [Cookie]\n * @property {PicoData} [Data]\n * @property {PicoRoute} [Route]\n * @property {PicoMap} [Map]\n * @property {PicoElement} [Element]\n */\n\n/**\n * @type {PicoLibrary}\n */\nglobalThis.pi = pi;\n\nglobalThis.addEventListener && globalThis.addEventListener('beforeunload', (e) => {\n pi.Arr.map(pi.Dom.$events, ({ el, cb, event }) => {\n return (el.removeEventListener(event, cb), null);\n });\n});"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","PicoRunner","clear","timer","Mix","isArr","Arr","each","t","isFunc","clearTimeout","clearInterval","tryin","cb","requestIdleCallback","wait","fn","intval","limit","idler","setTimeout","setInterval","frame","args","requestAnimationFrame","idle","async","delay","debounce","timeout","throttle","queued","framerate","fps","last","Date","now","framebuffer","priority","item","active","add","$buffer","test","type","preventDefault","Obj","assign","runFramebuffer","$idler","$timer","buffer","filter","length","sort","reverse","_defineProperty","PicoString","index","isStr","str","isInt","int","charAt","set","replace","substring","search","isNull","indexOf","extract","range","slice","match","pattern","result","isEmpty","regex","val","uc","toUpperCase","ucfirst","lc","toLowerCase","lcfirst","cc","For","slugify","split","v","i","join","kc","sc","pc","has","fallback","start","string","empty","html","boolean","yes","no","bool","number","fixed","locale","config","isNum","Locale","code","_objectSpread","maximumFractionDigits","minimumFractionDigits","num","toLocaleString","integer","leading","padding","padStart","datetime","format","isDate","Now","make","valid","date","time","objectify","mode","toarray","isRef","parseParams","parseOptions","JSON","parse","vals","stringify","castParams","castOptions","_PicoString","regexEscape","console","warn","Str","humancase","pascalcase","options","fromOptions","params","fromParams","filesize","real","error","array","PicoNumber","decimals","toFixed","float","parseFloat","parseInt","ceil","Math","floor","round","combine","reduce","acc","subtract","decade","matrix","base","pow","push","distance","cord1","cord2","miles","cord","lat","lng","radlat1","PI","radlat2","radtheta","dist","sin","cos","acos","random","Hash","PicoArray","all","target","splice","unset","Array","isPrim","findIndex","unique","keys","lengths","first","second","third","retval","isObj","eachObj","map","recursive","cascade","cas","clone","filterIndex","includes","filterRemove","indexes","splices","find","sortFunc","sortDeep","sortPrim","a","b","compare","merge","concat","prepend","unshift","append","finder","remove","toggle","insert","indexies","diff","c","isect","callback","accumulator","chunk","res","contains","arr","matches","removeIndex","sortString","equal","diffrence","intersect","PicoObject","keyoptim","flatten","isstr","undefined","list","pop","nested","mod","src","String","prefix","flattenForm","unpack","pluck","only","except","isFunction","va","vb","values","MIX_REGEX","PicoMixed","len","isUndef","isNix","isBool","constructor","isIter","entries","isIsoDate","iso","isTime","isEqual","Node","isEqualNode","is","iter","toJSON","go","chrome","nodes","props","exclude","getOwnPropertyNames","class","proto","form","FormData","Error","collator","null","toString","NaN","_PicoMixed","global","isPlain","Run","convertString","convertDatetime","convertBool","convertBoolean","RADIX_UUID","RADIX_UP19","radix_symbol_pass","PicoHash","radix","RADIX","hash","k","uuid","version","password","symbols","PicoSignal","bind","event","paused","arguments","id","$events","unbind","fire","events","pause","unpause","PicoLocale","$text","$code","navigator","language","$sort","Intl","Collator","numeric","sensitivity","text","RegExp","trans","choice","count","countpick","splits","COOKIE_REGEX","entry","PicoCookie","document","cookie","fresh","$cookie","matchAll","from","groups","replaceAll","decode","expire","expires","toUTC","path","plain","forget","PicoDomFinderStatic","filterNodes","el","nodeType","getNodePoint","posx","posy","Dom","doc","elementsFromPoint","msElementsFromPoint","getNodeEvent","selector","srcElement","clientX","clientY","closest","PicoDomFinderInstance","_constructFinder","querySelectorAll","NodeList","getNodeType","getNodeParent","parentNode","getNodePrev","previousSibling","getNodeNext","nextSibling","getNodeChilds","childs","childNodes","sanatize","els","Window","body","offset","loopParent","boundry","win","parent","child","upnode","prev","next","visible","above","inside","isParent","previous","where","not","getNot","PicoDomFormStatic","PicoDomFormInstance","PicoDomEventStatic","PicoDomEventInstance","addEventListener","removeEventListener","on","off","optoff","removeAllListeners","once","live","detail","CustomEvent","dispatchEvent","one","delayed","PicoDomBuilderStatic","createElement","ini","PicoDomBuilderInstance","prependTo","appendTo","insertBefore","removeChild","PicoDomGlobalStatic","getDomState","readyState","isDomReady","isDomComplete","state","ready","complete","required","PicoDomGlobalInstance","isNodeComplete","naturalWidth","naturalHeight","loaded","PicoDomRectangleStatic","PicoDomRectangleInstance","rect","getBoundingClientRect","margin","computed","top","marginTop","right","marginRight","bottom","marginBottom","left","marginLeft","paddingTop","paddingRight","paddingBottom","paddingLeft","height","innerHeight","offsetHeight","clientHeight","scrollHeight","pad","realHeight","style","actual","evaluateHeight","apply","display","width","innerWidth","offsetWidth","clientWidth","scrollWidth","realWidth","evaluateWidth","getOffset","offsetTop","offsetBottom","offsetLeft","offsetRight","loopOffset","offsetParent","calcOffset","size","source","scroll","getScroll","scrollTop","scrollLeft","pageYOffset","pageXOffset","loopOffsetParent","scrollTopGlobal","scrollLeftGlobal","PicoDomAttributeStatic","PicoDomAttributeInstance","attr","getAttribute","removeAttribute","setAttribute","data","getComputedStyle","styles","translate","transform","classes","innerHTML","backup","hasClass","cls","addClass","className","remClass","toggleClass","stateClass","css","removeClass","PicoDomInviewStatic","inviewMaxY","isString","multiple","threshold","isInviewY","inviewMaxX","isInviewX","PicoDomInviewInstance","viewoffX","bot","viewport","max","inviewX","viewoffY","inview","min","inratioX","inviewY","inratioY","inviewHeight","inviewWidth","PicoDomMetaStatic","setMetaTitle","glue","$meta","title","PicoDomMetaInstance","PicoDomObserverStatic","PicoDomObserverInstance","PicoDomPopoverStatic","PicoDomPopoverInstance","popover","position","popoverY","popoverX","self","x","y","recto","inverse","broken","rebound","popoverNormalize","dw","PicoDomPlugins","init","PicoDom","extend","plugin","NOW_MODIFY","PicoNowDefaultInstance","scope","getTime","getSeconds","getMinutes","getHours","getDay","getDate","getMonth","getFullYear","day","setTime","setSeconds","setMinutes","setHours","setDate","setMonth","setFullYear","minute","hour","month","year","shortyear","sub","isModifible","modify","f","applyDate","applyTime","addSecond","subSecond","addMinute","subMinute","addHour","subHour","addDates","subDates","addMonths","subMonths","addYears","subYears","addDecades","subDecades","humanDay","humanMonth","NOW_FORMAT","NOW_PARSE","PicoNowFormatInstance","isParsable","parseFormat","human","PicoNowMatchInstance","before","beforeDate","beforeTime","after","afterDate","afterTime","equalDate","equalTime","between","end","dates","PicoNowGridInstance","grid","getSecondsGrid","getMinutesGrid","getHoursGrid","getDaysGrid","getDatesGrid","getMonthsGrid","getYearsGrid","getDecadesGrid","interval","getYears","getMonths","getDates","PicoNowWalkerInstance","prevSecond","nextSecond","prevMinute","nextMinute","prevHour","nextHour","prevDate","nextDate","prevMonth","nextMonth","prevYear","nextYear","prevDecade","nextDecade","firstSecond","firstMinute","firstHour","firstDay","firstDate","firstMonth","firstYear","firstDecade","lastSecond","lastMinute","lastHour","lastDay","lastDate","lastMonth","lastYear","lastDecade","nthYear","n","nthDecade","PicoNowRangeInstance","getDatesRange","NOW_HUMAN_DAYS","NOW_HUMAN_MONTHS","PicoNowHumanInstance","substr","getHumanDay","getHumanMonth","PicoNowPlugins","PicoNow","input","toDate","reset","isNaN","toUTCString","resetTime","TYPE_PARSERS","TYPE_CASTERS","PicoFormatParserStatic","keyed","parsed","parsers","casted","encode","casters","encodeURI","PARAM_REGEX","PicoFormatParamStatic","castParam","decodeURIComponent","OPTION_REGEX","PicoFormatOptionStatic","space","castOption","div","SLUG_CONVERT","PicoFormatUrlStatic","FILE_UNITS","PicoFormatFileStatic","Num","PicoFormatPlugins","PicoFormat","browser","agent","userAgent","safari","firefox","edge","piuag","device","osx","gnu","ios","oid","piudv","PicoData","$data","stored","Event","forceSet","PicoRoute","$routes","query","route","goto","location","href","PicoMap","google","center","Map","mapStyle","gestureHandling","scrollwheel","zoom","maps","setMapStyle","setMarkerStyle","extra","final","Size","origin","Point","anchor","default","url","scaledSize","hover","markerStyles","clusterMarkers","allowCreate","cluster","MarkerClusterer","imagePath","clearMarkers","clusterFilter","markers","getMarkerVisibility","marker","clusterOptions","styleMarker","getInfoVisibility","setIcon","getMarker","getVisible","getMarkerPositon","getPosition","toggleMarker","hideMarker","showMarker","hidden","setVisible","closeInfo","enterMarker","leaveMarker","info","getMap","toggleInfo","openInfo","closeInfoWindows","open","onOpen","close","onClose","createMarker","extras","Marker","addListener","InfoWindow","content","setMarkerPosition","setPosition","setMarkerByAddress","address","getLocationByAddress","geocoderService","Geocoder","Promise","geocoderPromise","resolve","reject","geocode","geocoderResult","response","status","showMarkers","hideMarkers","getMarkerBoundry","LatLngBounds","focusMarkers","maxZoom","boundSpace","setCenter","getCenter","fitBounds","getZoom","setZoom","renderDirections","directionsService","DirectionsService","directionsRenderer","DirectionsRenderer","travelMode","setMap","panel","setPanel","directionsPromise","directionsResult","setDirections","PicoElement","listen","invi","alias","instance","inis","getPrefix","runs","deamon","observe","childList","subtree","attributes","attributeFilter","mounted","deamons","_plain","bindCb","bindInview","observer","unbindInview","setPrefix","DomBuilder","NowBuilder","ForBuilder","Any","Proxy","Signal","UUID","pi"],"sourceRoot":""}
|