UNPKG

solid-new-bucket

Version:
1 lines 17.2 kB
{"version":3,"sources":["../src/arrayHelpers.ts","../src/buckets.ts","../src/checks.ts","../src/wrappers.ts","../src/converters.ts","../src/generators.ts","../src/others.ts","../src/conditionals.ts"],"sourcesContent":["import { Func } from \".\";\n\n/**\n * Filter out and remove elements from array.\n * @param arr array\n * @param filter filter\n * @returns new array\n */\nexport function removeElementsFromArray<T>(arr: T[], filter: (t: T) => boolean): T[] {\n const idx: number[] = [];\n arr.forEach((t, i) => {\n if (filter(t)) {\n idx.push(i);\n }\n });\n return idx.map(i => arr.splice(i, 1)[0]);\n}\n\n/**\n * Copy range or array.\n * @param arr array\n * @param start start pos\n * @param end end pos\n * @returns sub range of array\n */\nexport function copyOfRange<T>(arr: T[], start: number, end: number): T[] {\n const r: T[] = [];\n start = Math.max(0, start);\n end = Math.min(arr.length, end);\n for (let i = start; i < end; i++) {\n r.push(arr[i]);\n }\n return r;\n}\n\n/**\n * Find first element in array which passes test.\n * @param arr array\n * @param test test\n * @returns index\n */\nexport function indexOf<T>(arr: T[], test: Func<T, boolean>) {\n for (let i = 0; i < arr.length; i++) {\n if (test(arr[i])) {\n return i;\n }\n }\n return -1;\n}\n","import { createSignal, Accessor, createMemo, SignalOptions, splitProps } from \"solid-js\"\nimport { Bucket, Mapper, ObjectIndex, StampedBucket, StampedData } from \".\";\n\n\n/**\n * Stamped Bucket help to trigger rerendering after updating object without recreate new object.\n * @returns StampedBucket<T>\n */\nexport function stampedBucket<T>(value: T, options?: {\n beforeUpdate?: (value: T) => void;\n afterUpdate?: (value: T) => void;\n localStorageName?: string;\n}): StampedBucket<T> {\n // load from local storage\n if (options?.localStorageName) {\n const raw = localStorage.getItem(options.localStorageName);\n if (raw) {\n value = JSON.parse(raw);\n }\n }\n\n const [timestamp, setTimestamp] = createSignal(new Date().getTime());\n const v: Accessor<StampedData<T>> = createMemo(() => {\n return {\n timestamp: timestamp(),\n data: value,\n markChanged() {\n setTimestamp(new Date().getTime());\n }\n };\n });\n const setV = (newValue: T) => {\n value = newValue;\n setTimestamp(new Date().getTime());\n };\n\n const call = function(updater?: (v: T) => void) {\n if (updater) {\n options?.beforeUpdate?.(value)\n\n updater(value)\n\n // save to local storage\n if (options?.localStorageName) {\n localStorage.setItem(options.localStorageName, value ? JSON.stringify(value) : \"\")\n }\n\n // mark changed\n setTimestamp(new Date().getTime());\n \n options?.afterUpdate?.(value)\n }\n\n return v().data\n }\n\n call.map = <O>(mapper: (v: T) => O) => {\n return mapper(v().data);\n };\n\n call.markChanged = () => {\n setTimestamp(new Date().getTime())\n };\n\n call.reset = (v: T) => {\n setV(v)\n };\n\n return call\n}\n\nfunction getFieldOfObject(o: any, paths: ObjectIndex[]) {\n for (let i = 0; i < paths.length - 1; i++) {\n o = o[paths[i]];\n if (!o) {\n throw new Error(`cannot find ${paths.join('.')} in ${o}`)\n }\n }\n return o[paths[paths.length - 1]]\n}\n\nfunction setFieldOfObject(o: any, newValue: any, paths: ObjectIndex[]) {\n for (let i = 0; i < paths.length - 1; i++) {\n o = o[paths[i]];\n if (!o) {\n throw new Error(`cannot find ${paths.join('.')} in ${o}`)\n }\n }\n o[paths[paths.length - 1]] = newValue\n}\n\nexport function asBucket<O, FieldType, DecadeType>(s: StampedBucket<O>, path: ObjectIndex[], mapper?: Mapper<FieldType, DecadeType>): Bucket<FieldType> {\n const getField = (data: O) => {\n let v = getFieldOfObject(data, path)\n return mapper ? mapper.from?.(v) : v\n }\n const setField = (data: O, v: any) => {\n if (mapper) {\n v = mapper.to?.(v)\n }\n setFieldOfObject(data, v, path)\n }\n return (t) => {\n if (t != undefined) {\n s(data => {\n if (typeof(t) === \"function\") {\n const oldValue = getField(data)\n // @ts-ignore\n setField(data, t(oldValue))\n } else {\n setField(data, t)\n }\n })\n\n }\n return getField(s())\n }\n}\n\nexport function asAccessor<T, K extends (keyof T)>(v: T | Accessor<T>, k: K): Accessor<T[K]> {\n return () => {\n if (typeof(v) === \"function\") {\n return (v as Function)()[k]\n }\n return v[k]\n }\n}\n\n/**\n * Create a bucket to track data.\n * @param value value or Accessor of value\n * @param options options\n * @returns Bucket<T>\n */\nexport function bucket<T>(value: T | Accessor<T>, options?: {\n useValueAsAccessor?: boolean\n beforeUpdate?: (newValue: T) => void\n afterUpdate?: (newValue: T) => void\n localStorageName?: string;\n} & SignalOptions<T>): Bucket<T> {\n if (options?.useValueAsAccessor && typeof(value) === \"function\") {\n const [_, others] = splitProps(options, [\"useValueAsAccessor\"])\n const memo = createMemo(() => bucket<T>((value as any)(), others))\n return (t) => {\n // @ts-ignore\n return memo()(t)\n }\n }\n \n const [local, others] = options && splitProps(options, [\"beforeUpdate\", \"afterUpdate\", \"localStorageName\"]) || [];\n\n // load from local storage\n if (local?.localStorageName) {\n const raw = localStorage.getItem(local.localStorageName);\n if (raw) {\n value = JSON.parse(raw);\n }\n }\n\n // @ts-ignore\n const [v, setV] = createSignal<T>(value, others)\n\n return (t) => {\n if (t !== undefined) {\n const newValue = setV((prev) => {\n local?.beforeUpdate?.(prev);\n if (typeof(t) === \"function\") {\n return (t as Function)(prev);\n } else {\n return t;\n }\n });\n // save to local storage\n if (local?.localStorageName) {\n localStorage.setItem(local.localStorageName, t ? JSON.stringify(t) : \"\");\n }\n local?.afterUpdate?.(newValue);\n return newValue;\n }\n return v()\n };\n}\n","\n/**\n * Check if array or string is not empty.\n * @param v array of any, string or undefined\n * @returns true if target is not empty\n */\nexport function isNotEmpty<T>(v?: T[]): boolean\nexport function isNotEmpty(v?: string): boolean\nexport function isNotEmpty(v: any) {\n if (!v) return false\n if (typeof(v) === \"string\") {\n return v.length > 0\n }\n if (typeof(v) === \"object\") {\n if (Array.isArray(v)) {\n return v.length > 0\n }\n return Object.keys(v).length > 0\n }\n return false\n}\n\n/**\n * Check if value is number.\n * @param v any\n * @returns true if value is number\n */\nexport function isNumber(v: any) {\n return typeof(v) === \"number\";\n}\n\n/**\n * Compare two date string.\n * @param a date 1\n * @param b date 2\n * @returns true if a is later than b\n */\nexport function compareDateString(a: string, b: string): number {\n return Date.parse(a) - Date.parse(b);\n}\n\n/**\n * Check whether there is an element in b exists in a as well.\n * @param a array 1\n * @param b array 2\n * @returns boolean\n */\nexport function containsAny(a: any[], b: any[]) {\n for (let i of a) {\n for (let j of b) {\n if (i === j) {\n return true;\n }\n }\n }\n return false;\n}\n","\n\nexport function wrapDateNumber(v: number, bits: number = 2) {\n if (v == 0) {\n return '0'.repeat(bits);\n }\n \n let n = v;\n while (n > 0) {\n n = Math.floor(n / 10);\n bits--;\n }\n return bits > 0 ? '0'.repeat(bits) + v : v;\n}\n\nexport function wrapString(v: any): string {\n if (typeof(v) === \"string\") {\n return v;\n }\n return v?.toString() || \"\";\n}\n\nexport function wrapNumber(v: any) {\n if (typeof(v) === \"number\") {\n return v;\n }\n return 0;\n}\n","import { wrapDateNumber } from \"./wrappers\";\n\n/**\n * Parse and format timestamp from number to string.\n * @param timestamp time\n * @param showTime show only date if false\n * @param showMilliseconds show ms if true\n * @returns formatted string\n */\nexport function parseTimestamp(timestamp: number, showTime?: boolean, showMilliseconds?: boolean) {\n const date = new Date(timestamp);\n // TODO: toLocaleString\n // return date.toLocaleString(undefined, {\n // });\n let r = `${wrapDateNumber(date.getFullYear())}-${wrapDateNumber(date.getMonth() + 1)}-${wrapDateNumber(date.getDate())}`;\n if (showTime) {\n r += ` ${wrapDateNumber(date.getHours())}:${wrapDateNumber(date.getMinutes())}:${wrapDateNumber(date.getSeconds())}`;\n }\n if (showMilliseconds) {\n r += `.${wrapDateNumber(date.getMilliseconds(), 3)}`;\n };\n return r;\n}\n\nexport function toCapital(v: string) {\n return v.charAt(0).toUpperCase() + v.substring(1);\n}","\n/**\n * Genereate a sequence.\n * @param start start\n * @param end end\n * @param step step\n * @returns array\n */\nexport function sequence(start: number, end: number, step: number = 1) {\n const r = [];\n for (let i = start; i < end; i += step) {\n r.push(i);\n }\n return r;\n}\n\n/**\n * Generate a array of size.\n * @param size size\n * @returns \n */\nexport function iterate(size: number) {\n return Array.from(Array(size).keys())\n}","import { Context, useContext } from \"solid-js\";\n\nexport function useCtx<T>(c: Context<T>): T {\n const context = useContext(c);\n if (!context) {\n throw new Error(\"cannot find a \" + JSON.stringify(c))\n }\n return context;\n}\n\nexport function names(...v: (string | undefined)[]) {\n return v.filter((name) => Boolean(name)).join(' ');\n}\n\nexport function clone(obj: any) {\n const type = typeof(obj);\n switch (type) {\n case 'object': {\n let r: any = Array.isArray(obj) ? [] : {};\n for (let key of Object.keys(obj)) {\n r[key] = clone(obj[key]);\n }\n return r;\n }\n default:\n return obj;\n }\n}\n","import { Supplier } from \".\"\n\n/**\n * Invoke function or return value if condition is true.\n * @param condition any\n * @param value function to be invoked or value to be return\n * @param defaultValue fallback value, optional\n */\nexport function conditional<T>(condition: any, value: () => void): void;\nexport function conditional<T>(condition: any, value: T, defaultValue?: T): T;\nexport function conditional<T>(condition: any, value: Supplier<T>, defaultValue?: T): T;\nexport function conditional(condition: any, value: any, defaultValue?: any) {\n if (typeof(value) === \"function\") {\n if (condition) {\n const r = value()\n if (r) {\n return r\n }\n }\n return defaultValue\n }\n\n if (typeof(value === \"string\")) {\n return condition ? value : (defaultValue || '')\n }\n\n if (typeof(value) === \"number\") {\n return condition ? value : (defaultValue || 0)\n }\n\n if (condition) {\n return value\n } else if (defaultValue !== undefined && defaultValue !== null) {\n return defaultValue\n }\n}\n"],"mappings":";AAQO,SAAS,wBAA2B,KAAU,QAAgC;AACnF,QAAM,MAAgB,CAAC;AACvB,MAAI,QAAQ,CAAC,GAAG,MAAM;AACpB,QAAI,OAAO,CAAC,GAAG;AACb,UAAI,KAAK,CAAC;AAAA,IACZ;AAAA,EACF,CAAC;AACD,SAAO,IAAI,IAAI,OAAK,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;AACzC;AASO,SAAS,YAAe,KAAU,OAAe,KAAkB;AACxE,QAAM,IAAS,CAAC;AAChB,UAAQ,KAAK,IAAI,GAAG,KAAK;AACzB,QAAM,KAAK,IAAI,IAAI,QAAQ,GAAG;AAC9B,WAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,MAAE,KAAK,IAAI,CAAC,CAAC;AAAA,EACf;AACA,SAAO;AACT;AAQO,SAAS,QAAW,KAAU,MAAwB;AAC3D,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAI,KAAK,IAAI,CAAC,CAAC,GAAG;AAChB,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;AChDA,SAAS,cAAwB,YAA2B,kBAAkB;AAQvE,SAAS,cAAiB,OAAU,SAItB;AAEnB,MAAI,SAAS,kBAAkB;AAC7B,UAAM,MAAM,aAAa,QAAQ,QAAQ,gBAAgB;AACzD,QAAI,KAAK;AACP,cAAQ,KAAK,MAAM,GAAG;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,CAAC,WAAW,YAAY,IAAI,cAAa,oBAAI,KAAK,GAAE,QAAQ,CAAC;AACnE,QAAM,IAA8B,WAAW,MAAM;AACnD,WAAO;AAAA,MACL,WAAW,UAAU;AAAA,MACrB,MAAM;AAAA,MACN,cAAc;AACZ,sBAAa,oBAAI,KAAK,GAAE,QAAQ,CAAC;AAAA,MACnC;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,OAAO,CAAC,aAAgB;AAC5B,YAAQ;AACR,kBAAa,oBAAI,KAAK,GAAE,QAAQ,CAAC;AAAA,EACnC;AAEA,QAAM,OAAO,SAAS,SAA0B;AAC9C,QAAI,SAAS;AACX,eAAS,eAAe,KAAK;AAE7B,cAAQ,KAAK;AAGb,UAAI,SAAS,kBAAkB;AAC7B,qBAAa,QAAQ,QAAQ,kBAAkB,QAAQ,KAAK,UAAU,KAAK,IAAI,EAAE;AAAA,MACnF;AAGA,oBAAa,oBAAI,KAAK,GAAE,QAAQ,CAAC;AAEjC,eAAS,cAAc,KAAK;AAAA,IAC9B;AAEA,WAAO,EAAE,EAAE;AAAA,EACb;AAEA,OAAK,MAAM,CAAI,WAAwB;AACrC,WAAO,OAAO,EAAE,EAAE,IAAI;AAAA,EACxB;AAEA,OAAK,cAAc,MAAM;AACvB,kBAAa,oBAAI,KAAK,GAAE,QAAQ,CAAC;AAAA,EACnC;AAEA,OAAK,QAAQ,CAACA,OAAS;AACrB,SAAKA,EAAC;AAAA,EACR;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,GAAQ,OAAsB;AACtD,WAAS,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;AACzC,QAAI,EAAE,MAAM,CAAC,CAAC;AACd,QAAI,CAAC,GAAG;AACN,YAAM,IAAI,MAAM,eAAe,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE;AAAA,IAC1D;AAAA,EACF;AACA,SAAO,EAAE,MAAM,MAAM,SAAS,CAAC,CAAC;AAClC;AAEA,SAAS,iBAAiB,GAAQ,UAAe,OAAsB;AACrE,WAAS,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;AACzC,QAAI,EAAE,MAAM,CAAC,CAAC;AACd,QAAI,CAAC,GAAG;AACN,YAAM,IAAI,MAAM,eAAe,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE;AAAA,IAC1D;AAAA,EACF;AACA,IAAE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;AAC/B;AAEO,SAAS,SAAmC,GAAqB,MAAqB,QAA2D;AACtJ,QAAM,WAAW,CAAC,SAAY;AAC5B,QAAI,IAAI,iBAAiB,MAAM,IAAI;AACnC,WAAO,SAAS,OAAO,OAAO,CAAC,IAAI;AAAA,EACrC;AACA,QAAM,WAAW,CAAC,MAAS,MAAW;AACpC,QAAI,QAAQ;AACV,UAAI,OAAO,KAAK,CAAC;AAAA,IACnB;AACA,qBAAiB,MAAM,GAAG,IAAI;AAAA,EAChC;AACA,SAAO,CAAC,MAAM;AACZ,QAAI,KAAK,QAAW;AAClB,QAAE,UAAQ;AACR,YAAI,OAAO,MAAO,YAAY;AAC5B,gBAAM,WAAW,SAAS,IAAI;AAE9B,mBAAS,MAAM,EAAE,QAAQ,CAAC;AAAA,QAC5B,OAAO;AACL,mBAAS,MAAM,CAAC;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,IAEH;AACA,WAAO,SAAS,EAAE,CAAC;AAAA,EACrB;AACF;AAEO,SAAS,WAAmC,GAAoB,GAAsB;AAC3F,SAAO,MAAM;AACX,QAAI,OAAO,MAAO,YAAY;AAC5B,aAAQ,EAAe,EAAE,CAAC;AAAA,IAC5B;AACA,WAAO,EAAE,CAAC;AAAA,EACZ;AACF;AAQO,SAAS,OAAU,OAAwB,SAKjB;AAC/B,MAAI,SAAS,sBAAsB,OAAO,UAAW,YAAY;AAC/D,UAAM,CAAC,GAAGC,OAAM,IAAI,WAAW,SAAS,CAAC,oBAAoB,CAAC;AAC9D,UAAM,OAAO,WAAW,MAAM,OAAW,MAAc,GAAGA,OAAM,CAAC;AACjE,WAAO,CAAC,MAAM;AAEZ,aAAO,KAAK,EAAE,CAAC;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,CAAC,OAAO,MAAM,IAAI,WAAW,WAAW,SAAS,CAAC,gBAAgB,eAAe,kBAAkB,CAAC,KAAK,CAAC;AAGhH,MAAI,OAAO,kBAAkB;AAC3B,UAAM,MAAM,aAAa,QAAQ,MAAM,gBAAgB;AACvD,QAAI,KAAK;AACP,cAAQ,KAAK,MAAM,GAAG;AAAA,IACxB;AAAA,EACF;AAGA,QAAM,CAAC,GAAG,IAAI,IAAI,aAAgB,OAAO,MAAM;AAE/C,SAAO,CAAC,MAAM;AACZ,QAAI,MAAM,QAAW;AACnB,YAAM,WAAW,KAAK,CAAC,SAAS;AAC9B,eAAO,eAAe,IAAI;AAC1B,YAAI,OAAO,MAAO,YAAY;AAC5B,iBAAQ,EAAe,IAAI;AAAA,QAC7B,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAED,UAAI,OAAO,kBAAkB;AAC3B,qBAAa,QAAQ,MAAM,kBAAkB,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE;AAAA,MACzE;AACA,aAAO,cAAc,QAAQ;AAC7B,aAAO;AAAA,IACT;AACA,WAAO,EAAE;AAAA,EACX;AACF;;;AC7KO,SAAS,WAAW,GAAQ;AACjC,MAAI,CAAC,EAAG,QAAO;AACf,MAAI,OAAO,MAAO,UAAU;AAC1B,WAAO,EAAE,SAAS;AAAA,EACpB;AACA,MAAI,OAAO,MAAO,UAAU;AAC1B,QAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,aAAO,EAAE,SAAS;AAAA,IACpB;AACA,WAAO,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA,EACjC;AACA,SAAO;AACT;AAOO,SAAS,SAAS,GAAQ;AAC/B,SAAO,OAAO,MAAO;AACvB;AAQO,SAAS,kBAAkB,GAAW,GAAmB;AAC9D,SAAO,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;AACrC;AAQO,SAAS,YAAY,GAAU,GAAU;AAC9C,WAAS,KAAK,GAAG;AACf,aAAS,KAAK,GAAG;AACf,UAAI,MAAM,GAAG;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ACtDO,SAAS,eAAe,GAAW,OAAe,GAAG;AAC1D,MAAI,KAAK,GAAG;AACV,WAAO,IAAI,OAAO,IAAI;AAAA,EACxB;AAEA,MAAI,IAAI;AACR,SAAO,IAAI,GAAG;AACZ,QAAI,KAAK,MAAM,IAAI,EAAE;AACrB;AAAA,EACF;AACA,SAAO,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI;AAC3C;AAEO,SAAS,WAAW,GAAgB;AACzC,MAAI,OAAO,MAAO,UAAU;AAC1B,WAAO;AAAA,EACT;AACA,SAAO,GAAG,SAAS,KAAK;AAC1B;AAEO,SAAS,WAAW,GAAQ;AACjC,MAAI,OAAO,MAAO,UAAU;AAC1B,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AClBO,SAAS,eAAe,WAAmB,UAAoB,kBAA4B;AAChG,QAAM,OAAO,IAAI,KAAK,SAAS;AAI/B,MAAI,IAAI,GAAG,eAAe,KAAK,YAAY,CAAC,CAAC,IAAI,eAAe,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,eAAe,KAAK,QAAQ,CAAC,CAAC;AACtH,MAAI,UAAU;AACZ,SAAK,IAAI,eAAe,KAAK,SAAS,CAAC,CAAC,IAAI,eAAe,KAAK,WAAW,CAAC,CAAC,IAAI,eAAe,KAAK,WAAW,CAAC,CAAC;AAAA,EACpH;AACA,MAAI,kBAAkB;AACpB,SAAK,IAAI,eAAe,KAAK,gBAAgB,GAAG,CAAC,CAAC;AAAA,EACpD;AAAC;AACD,SAAO;AACT;AAEO,SAAS,UAAU,GAAW;AACnC,SAAO,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,UAAU,CAAC;AAClD;;;AClBO,SAAS,SAAS,OAAe,KAAa,OAAe,GAAG;AACrE,QAAM,IAAI,CAAC;AACX,WAAS,IAAI,OAAO,IAAI,KAAK,KAAK,MAAM;AACtC,MAAE,KAAK,CAAC;AAAA,EACV;AACA,SAAO;AACT;AAOO,SAAS,QAAQ,MAAc;AACpC,SAAO,MAAM,KAAK,MAAM,IAAI,EAAE,KAAK,CAAC;AACtC;;;ACvBA,SAAkB,kBAAkB;AAE7B,SAAS,OAAU,GAAkB;AAC1C,QAAM,UAAU,WAAW,CAAC;AAC5B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mBAAmB,KAAK,UAAU,CAAC,CAAC;AAAA,EACtD;AACA,SAAO;AACT;AAEO,SAAS,SAAS,GAA2B;AAClD,SAAO,EAAE,OAAO,CAAC,SAAS,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAG;AACnD;AAEO,SAAS,MAAM,KAAU;AAC9B,QAAM,OAAO,OAAO;AACpB,UAAQ,MAAM;AAAA,IACZ,KAAK,UAAU;AACb,UAAI,IAAS,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AACxC,eAAS,OAAO,OAAO,KAAK,GAAG,GAAG;AAChC,UAAE,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;AAAA,MACzB;AACA,aAAO;AAAA,IACT;AAAA,IACA;AACE,aAAO;AAAA,EACX;AACF;;;AChBO,SAAS,YAAY,WAAgB,OAAY,cAAoB;AAC1E,MAAI,OAAO,UAAW,YAAY;AAChC,QAAI,WAAW;AACb,YAAM,IAAI,MAAM;AAChB,UAAI,GAAG;AACL,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,QAAO,UAAU,WAAW;AAC9B,WAAO,YAAY,QAAS,gBAAgB;AAAA,EAC9C;AAEA,MAAI,OAAO,UAAW,UAAU;AAC9B,WAAO,YAAY,QAAS,gBAAgB;AAAA,EAC9C;AAEA,MAAI,WAAW;AACb,WAAO;AAAA,EACT,WAAW,iBAAiB,UAAa,iBAAiB,MAAM;AAC9D,WAAO;AAAA,EACT;AACF;","names":["v","others"]}