@windwalker-io/unicorn-next 0.1.15 → 0.1.17

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.
@@ -1,4 +1,4 @@
1
- import { l as loadAlpine, Q as slideDown, P as slideUp, A as h, _ as __, F as simpleConfirm, ag as deleteConfirm, G as simpleAlert } from "./unicorn.js";
1
+ import { C as delegate, G as simpleAlert, l as loadAlpine, Q as slideDown, P as slideUp, A as h, _ as __, F as simpleConfirm, ag as deleteConfirm } from "./unicorn.js";
2
2
  class UnicornGridElement {
3
3
  constructor(selector, element, form, options = {}) {
4
4
  this.element = element;
@@ -12,9 +12,6 @@ class UnicornGridElement {
12
12
  bindEvents() {
13
13
  const inputs = this.element.querySelectorAll("input[data-role=grid-checkbox]");
14
14
  for (const ch of inputs) {
15
- ch.addEventListener("click", () => {
16
- ch.dispatchEvent(new CustomEvent("change"));
17
- });
18
15
  ch.addEventListener("change", () => {
19
16
  const event = new CustomEvent("unicorn:checked", {
20
17
  detail: { grid: this }
@@ -22,6 +19,52 @@ class UnicornGridElement {
22
19
  this.form.element?.dispatchEvent(event);
23
20
  });
24
21
  }
22
+ if (this.form.element) {
23
+ this.bindMustCheckedEvent(this.form.element);
24
+ }
25
+ }
26
+ bindMustCheckedEvent(form) {
27
+ delegate(document, "[data-must-checked]", "mousedown", (e) => {
28
+ const target = e.currentTarget;
29
+ const selector = target.dataset.mustChecked;
30
+ if (!selector || !form.matches(selector)) {
31
+ return;
32
+ }
33
+ const toggle = target.dataset.bsToggle;
34
+ if (toggle === "modal") {
35
+ const modalTarget = target.dataset.bsTarget;
36
+ if (modalTarget) {
37
+ this.preventBSModal(modalTarget, this.getMustCheckedMessage());
38
+ }
39
+ }
40
+ });
41
+ }
42
+ preventBSModal(selector, msg) {
43
+ let modalElement = null;
44
+ if (typeof selector === "string") {
45
+ modalElement = document.querySelector(selector);
46
+ } else if (selector instanceof HTMLElement) {
47
+ const modalTarget = selector.dataset.bsTarget;
48
+ if (modalTarget) {
49
+ modalElement = document.querySelector(modalTarget);
50
+ } else {
51
+ modalElement = selector;
52
+ }
53
+ }
54
+ if (modalElement) {
55
+ modalElement?.addEventListener("show.bs.modal", (e) => {
56
+ if (!this.hasChecked()) {
57
+ e.preventDefault();
58
+ e.stopPropagation();
59
+ if (msg) {
60
+ if (msg === true) {
61
+ msg = this.getMustCheckedMessage();
62
+ }
63
+ simpleAlert(msg);
64
+ }
65
+ }
66
+ }, { once: true });
67
+ }
25
68
  }
26
69
  initComponent(store = "grid", custom = {}) {
27
70
  this.ordering = this.element?.dataset?.ordering || "";
@@ -307,15 +350,25 @@ class UnicornGridElement {
307
350
  /**
308
351
  * Validate there has one or more checked boxes.
309
352
  */
310
- validateChecked(event, callback, msg) {
311
- msg = msg || __("unicorn.message.grid.checked");
353
+ validateChecked(event, callback, errorMsg = true) {
312
354
  if (!this.hasChecked()) {
313
- if (msg !== "") {
314
- simpleAlert(msg);
355
+ if (errorMsg === true) {
356
+ errorMsg = this.getMustCheckedMessage();
357
+ }
358
+ if (typeof errorMsg === "string" && errorMsg !== "") {
359
+ simpleAlert(errorMsg);
360
+ } else if (typeof errorMsg === "function") {
361
+ errorMsg(this);
315
362
  }
316
363
  if (event) {
317
364
  event.stopPropagation();
318
365
  event.preventDefault();
366
+ const target = event.currentTarget;
367
+ if (target.dataset.bsToggle === "modal") {
368
+ if (target.dataset.bsTarget) {
369
+ this.preventBSModal(target.dataset.bsTarget);
370
+ }
371
+ }
319
372
  }
320
373
  return this;
321
374
  }
@@ -324,6 +377,15 @@ class UnicornGridElement {
324
377
  }
325
378
  return this;
326
379
  }
380
+ async validateCheckedPromise() {
381
+ if (!this.hasChecked()) {
382
+ throw new Error("No items checked.");
383
+ }
384
+ return this;
385
+ }
386
+ getMustCheckedMessage() {
387
+ return __("unicorn.message.grid.checked");
388
+ }
327
389
  hasChecked() {
328
390
  return this.countChecked() > 0;
329
391
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","sources":["../../src/module/grid.ts"],"sourcesContent":["import { __, deleteConfirm, h, loadAlpine, simpleAlert, simpleConfirm, slideDown, slideUp } from '../service';\nimport { Nullable } from '../types';\nimport type { UnicornFormElement } from './form';\n\nexport class UnicornGridElement {\n options: Record<string, any>;\n ordering = '';\n state = {};\n\n constructor(\n selector: string,\n public element: HTMLElement,\n public form: UnicornFormElement,\n options: Record<string, any> = {}\n ) {\n this.options = { ...options };\n\n this.bindEvents();\n }\n\n bindEvents() {\n const inputs = this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox]');\n\n for (const ch of inputs) {\n ch.addEventListener('click', () => {\n ch.dispatchEvent(new CustomEvent('change'));\n });\n ch.addEventListener('change', () => {\n const event = new CustomEvent('unicorn:checked', {\n detail: { grid: this }\n });\n\n this.form.element?.dispatchEvent(event);\n });\n }\n }\n\n initComponent(store = 'grid', custom: Record<string, string> = {}) {\n this.ordering = this.element?.dataset?.ordering || '';\n\n if (this.ordering) {\n if (!this.ordering.toLowerCase().endsWith(' asc')\n && !this.ordering.toLowerCase().endsWith(' desc')) {\n this.ordering += ' ASC';\n }\n }\n\n return loadAlpine((Alpine) => {\n Alpine.store(store, this.useState(custom));\n });\n }\n\n useState(this: any, custom: Record<string, any> = {}) {\n const state: Partial<Record<string, any>> = {\n form: this.form.useState(custom),\n };\n\n Object.getOwnPropertyNames(Object.getPrototypeOf(this))\n .map(item => {\n const prop = this[item];\n\n if (typeof prop === 'function') {\n return state[item] = this[item].bind(this);\n }\n\n return item;\n });\n\n return Object.assign(\n state,\n custom\n );\n }\n\n getElement() {\n return this.element;\n }\n\n sendFilter($event?: Event, method?: string) {\n if ($event) {\n $event.preventDefault();\n }\n\n this.form.submit(null, null, method);\n }\n\n clearFilters(element: HTMLElement, method?: Nullable<string>): void {\n element.querySelectorAll('input, textarea, select').forEach((ele) => {\n (ele as HTMLInputElement).value = '';\n });\n\n this.form.submit(null, null, method);\n }\n\n async toggleFilters(open: boolean, filterForm: HTMLElement) {\n if (open) {\n await slideDown(filterForm);\n } else {\n await slideUp(filterForm);\n }\n }\n\n sort($el: HTMLElement): boolean {\n const dir = this.getDirection($el);\n\n const field = $el.dataset.field;\n let asc = $el.dataset.asc;\n let desc = $el.dataset.desc;\n\n if (field) {\n asc = field + ' ASC';\n desc = field + ' DESC';\n }\n\n if (dir === 'ASC') {\n return this.sortBy(desc);\n }\n\n return this.sortBy(asc);\n }\n\n /**\n * Sort two items.\n */\n sortBy(ordering: Nullable<string>): boolean {\n if (!ordering) {\n return false;\n }\n\n let orderingInput = this.element.querySelector<HTMLInputElement>('input[name=list_ordering]');\n\n if (!orderingInput) {\n orderingInput = h('input', { name: 'list_ordering', type: 'hidden', value: '' });\n\n this.element.appendChild(orderingInput);\n }\n\n orderingInput.value = ordering;\n\n return this.form.put();\n }\n\n isSortActive($el: HTMLElement): boolean {\n return this.getDirection($el) != null;\n }\n\n getDirection($el: HTMLElement): \"ASC\" | \"DESC\" | null {\n const field = $el.dataset.field;\n let asc = $el.dataset.asc;\n let desc = $el.dataset.desc;\n\n if (field) {\n asc = field + ' ASC';\n desc = field + ' DESC';\n }\n\n if (this.orderingEquals(asc, this.ordering)) {\n return 'ASC';\n } else if (this.orderingEquals(desc, this.ordering)) {\n return 'DESC';\n }\n\n return null;\n }\n\n orderingEquals(a: Nullable<string>, b: Nullable<string>): boolean {\n a = a || '';\n b = b || '';\n\n a = a.replace(/\\s+/g, ' ').trim().toLowerCase();\n b = b.replace(/\\s+/g, ' ').trim().toLowerCase();\n\n return a === b;\n }\n\n /**\n * Check a row's checkbox.\n */\n checkRow(row: number, value = true): void {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n throw new Error('Checkbox of row: ' + row + ' not found.');\n }\n\n ch.checked = value;\n ch.dispatchEvent(new Event('input'));\n ch.dispatchEvent(new Event('change'));\n }\n\n getCheckboxByRow(row: number): Nullable<HTMLInputElement> {\n return this.form.element?.querySelector<HTMLInputElement>(\n `input[data-role=grid-checkbox][data-row-number=\"${row}\"]`\n );\n }\n\n /**\n * Update a row.\n */\n updateRow(row: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>) {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.updateItem(ch.value, url, data);\n }\n\n /**\n * Update an item by id.\n */\n updateItem(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n this.toggleAll(false);\n\n this.disableAllCheckboxes();\n\n this.form.injectInput('id[]', id);\n\n return this.form.patch(url, data);\n }\n\n /**\n * Update a item with batch task.\n */\n updateItemByTask(\n task: string,\n id: string | number,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>\n ): boolean {\n data = data || {};\n data.task = task;\n\n return this.updateItem(id, url, data);\n }\n\n /**\n * @deprecated Use updateItemByTask() instead.\n */\n doTask(task: string, id: number | string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.updateItemByTask(task, id, url, data);\n }\n\n /**\n * Update a row with batch task.\n */\n updateRowByTask(task: string, row: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.updateItemByTask(task, ch.value, url, data);\n }\n\n /**\n * Batch update items.\n */\n updateListByTask(task: string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n data = data || {};\n data.task = task;\n\n return this.form.patch(url, data);\n }\n\n /**\n * @deprecated Use updateListByTask() instead.\n */\n batch(task: string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.updateListByTask(task, url, data);\n }\n\n /**\n * @deprecated Use updateListByTask() instead.\n */\n updateByTask(task: string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.updateListByTask(task, url, data);\n }\n\n /**\n * Copy a row.\n */\n copyItem(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n this.toggleAll(false);\n\n this.disableAllCheckboxes();\n\n this.form.injectInput('id[]', id);\n\n return this.form.post(url, data);\n }\n\n /**\n * Copy a row.\n */\n copyRow(row: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.copyItem(ch.value, url, data);\n }\n\n /**\n * Delete checked items.\n */\n deleteList(\n message?: Nullable<string> | false,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>\n ): boolean {\n if (!this.validateChecked()) {\n return false;\n }\n\n message = message == null ? __('unicorn.message.delete.confirm') : message;\n\n if (message !== false) {\n simpleConfirm(message).then(isConfirm => {\n if (isConfirm) {\n this.form.delete(url, data);\n }\n });\n } else {\n this.form.delete(url, data);\n }\n\n return true;\n }\n\n /**\n * Delete an item by row.\n */\n async deleteRow(row: number,\n msg?: Nullable<string>,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>): Promise<boolean> {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.deleteItem(ch.value, msg, url, data);\n }\n\n /**\n * Delete an item.\n */\n async deleteItem(id: string,\n msg?: Nullable<string>,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>): Promise<boolean> {\n msg = msg || __('unicorn.message.delete.confirm');\n\n const isConfirm = await deleteConfirm(msg);\n\n if (isConfirm) {\n // this.toggleAll(false);\n // this.checkRow(row);\n data = data || {};\n\n data.id = id;\n\n this.form.delete(url, data);\n }\n\n return isConfirm;\n }\n\n /**\n * Toggle all checkboxes.\n */\n toggleAll(value: boolean) {\n Array.from(\n this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox][type=checkbox]')\n )\n .forEach((input) => {\n input.checked = value;\n\n input.dispatchEvent(new CustomEvent('input'));\n input.dispatchEvent(new CustomEvent('change'));\n });\n\n return this;\n }\n\n disableAllCheckboxes() {\n Array.from(\n this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox][type=checkbox]')\n )\n .forEach((input) => {\n input.disabled = true;\n });\n }\n\n /**\n * Count checked checkboxes.\n */\n countChecked(): number {\n return this.getChecked().length;\n }\n\n /**\n * Get Checked boxes.\n */\n getChecked(): HTMLInputElement[] {\n return Array.from(\n this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox][type=checkbox]:checked')\n );\n }\n\n getCheckedValues(): string[] {\n return this.getChecked().map(input => input.value);\n }\n\n /**\n * Validate there has one or more checked boxes.\n */\n validateChecked(event?: Event, callback?: (grid: UnicornGridElement) => any, msg?: string): this {\n msg = msg || __('unicorn.message.grid.checked');\n\n if (!this.hasChecked()) {\n if (msg !== '') {\n simpleAlert(msg);\n }\n\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n return this;\n }\n\n if (callback) {\n callback(this);\n }\n\n return this;\n }\n\n hasChecked(): boolean {\n return this.countChecked() > 0;\n }\n\n /**\n * Reorder all.\n */\n reorderAll(url?: Nullable<string>, data?: Nullable<Record<string, any>>) {\n return this.updateListByTask('reorder', url, data);\n }\n\n /**\n * Reorder items.\n */\n moveItem(id: number | string, delta: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n data = data || {};\n data.delta = delta;\n\n return this.updateItemByTask('move', id, url, data);\n }\n\n moveUp(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.moveItem(id, -1, url, data);\n }\n\n moveDown(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.moveItem(id, 1, url, data);\n }\n\n getId(suffix = '') {\n return this.form.element?.id + suffix;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grid.js","sources":["../../src/module/grid.ts"],"sourcesContent":["import { __, delegate, deleteConfirm, h, loadAlpine, simpleAlert, simpleConfirm, slideDown, slideUp } from '../service';\nimport { Nullable } from '../types';\nimport type { UnicornFormElement } from './form';\n\nexport class UnicornGridElement {\n options: Record<string, any>;\n ordering = '';\n state = {};\n\n constructor(\n selector: string,\n public element: HTMLElement,\n public form: UnicornFormElement,\n options: Record<string, any> = {}\n ) {\n this.options = { ...options };\n\n this.bindEvents();\n }\n\n bindEvents() {\n const inputs = this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox]');\n\n for (const ch of inputs) {\n // No-longer need this since browsers will trigger change event when checkbox is checked/unchecked\n // ch.addEventListener('click', () => {\n // ch.dispatchEvent(new CustomEvent('change'));\n // });\n\n ch.addEventListener('change', () => {\n const event = new CustomEvent('unicorn:checked', {\n detail: { grid: this }\n });\n\n this.form.element?.dispatchEvent(event);\n });\n }\n\n if (this.form.element) {\n this.bindMustCheckedEvent(this.form.element);\n }\n }\n\n private bindMustCheckedEvent(form: HTMLFormElement) {\n delegate(document, '[data-must-checked]', 'mousedown', (e) => {\n const target = e.currentTarget as HTMLElement;\n\n const selector = target.dataset.mustChecked!;\n\n if (!selector || !form.matches(selector)) {\n return;\n }\n \n // Prevent modal\n const toggle = target.dataset.bsToggle;\n\n if (toggle === 'modal') {\n const modalTarget = target.dataset.bsTarget;\n\n if (modalTarget) {\n this.preventBSModal(modalTarget, this.getMustCheckedMessage());\n }\n }\n });\n }\n\n preventBSModal(selector?: string | HTMLElement, msg?: string | boolean) {\n let modalElement: HTMLElement | null = null;\n\n if (typeof selector === 'string') {\n modalElement = document.querySelector(selector);\n } else if (selector instanceof HTMLElement) {\n const modalTarget = selector.dataset.bsTarget;\n\n if (modalTarget) {\n modalElement = document.querySelector(modalTarget);\n } else {\n modalElement = selector;\n }\n }\n\n if (modalElement) {\n modalElement?.addEventListener('show.bs.modal', (e) => {\n if (!this.hasChecked()) {\n e.preventDefault();\n e.stopPropagation();\n\n if (msg) {\n if (msg === true) {\n msg = this.getMustCheckedMessage();\n }\n\n simpleAlert(msg);\n }\n }\n }, { once: true });\n }\n }\n\n initComponent(store = 'grid', custom: Record<string, string> = {}) {\n this.ordering = this.element?.dataset?.ordering || '';\n\n if (this.ordering) {\n if (!this.ordering.toLowerCase().endsWith(' asc')\n && !this.ordering.toLowerCase().endsWith(' desc')) {\n this.ordering += ' ASC';\n }\n }\n\n return loadAlpine((Alpine) => {\n Alpine.store(store, this.useState(custom));\n });\n }\n\n useState(this: any, custom: Record<string, any> = {}) {\n const state: Partial<Record<string, any>> = {\n form: this.form.useState(custom),\n };\n\n Object.getOwnPropertyNames(Object.getPrototypeOf(this))\n .map(item => {\n const prop = this[item];\n\n if (typeof prop === 'function') {\n return state[item] = this[item].bind(this);\n }\n\n return item;\n });\n\n return Object.assign(\n state,\n custom\n );\n }\n\n getElement() {\n return this.element;\n }\n\n sendFilter($event?: Event, method?: string) {\n if ($event) {\n $event.preventDefault();\n }\n\n this.form.submit(null, null, method);\n }\n\n clearFilters(element: HTMLElement, method?: Nullable<string>): void {\n element.querySelectorAll('input, textarea, select').forEach((ele) => {\n (ele as HTMLInputElement).value = '';\n });\n\n this.form.submit(null, null, method);\n }\n\n async toggleFilters(open: boolean, filterForm: HTMLElement) {\n if (open) {\n await slideDown(filterForm);\n } else {\n await slideUp(filterForm);\n }\n }\n\n sort($el: HTMLElement): boolean {\n const dir = this.getDirection($el);\n\n const field = $el.dataset.field;\n let asc = $el.dataset.asc;\n let desc = $el.dataset.desc;\n\n if (field) {\n asc = field + ' ASC';\n desc = field + ' DESC';\n }\n\n if (dir === 'ASC') {\n return this.sortBy(desc);\n }\n\n return this.sortBy(asc);\n }\n\n /**\n * Sort two items.\n */\n sortBy(ordering: Nullable<string>): boolean {\n if (!ordering) {\n return false;\n }\n\n let orderingInput = this.element.querySelector<HTMLInputElement>('input[name=list_ordering]');\n\n if (!orderingInput) {\n orderingInput = h('input', { name: 'list_ordering', type: 'hidden', value: '' });\n\n this.element.appendChild(orderingInput);\n }\n\n orderingInput.value = ordering;\n\n return this.form.put();\n }\n\n isSortActive($el: HTMLElement): boolean {\n return this.getDirection($el) != null;\n }\n\n getDirection($el: HTMLElement): \"ASC\" | \"DESC\" | null {\n const field = $el.dataset.field;\n let asc = $el.dataset.asc;\n let desc = $el.dataset.desc;\n\n if (field) {\n asc = field + ' ASC';\n desc = field + ' DESC';\n }\n\n if (this.orderingEquals(asc, this.ordering)) {\n return 'ASC';\n } else if (this.orderingEquals(desc, this.ordering)) {\n return 'DESC';\n }\n\n return null;\n }\n\n orderingEquals(a: Nullable<string>, b: Nullable<string>): boolean {\n a = a || '';\n b = b || '';\n\n a = a.replace(/\\s+/g, ' ').trim().toLowerCase();\n b = b.replace(/\\s+/g, ' ').trim().toLowerCase();\n\n return a === b;\n }\n\n /**\n * Check a row's checkbox.\n */\n checkRow(row: number, value = true): void {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n throw new Error('Checkbox of row: ' + row + ' not found.');\n }\n\n ch.checked = value;\n ch.dispatchEvent(new Event('input'));\n ch.dispatchEvent(new Event('change'));\n }\n\n getCheckboxByRow(row: number): Nullable<HTMLInputElement> {\n return this.form.element?.querySelector<HTMLInputElement>(\n `input[data-role=grid-checkbox][data-row-number=\"${row}\"]`\n );\n }\n\n /**\n * Update a row.\n */\n updateRow(row: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>) {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.updateItem(ch.value, url, data);\n }\n\n /**\n * Update an item by id.\n */\n updateItem(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n this.toggleAll(false);\n\n this.disableAllCheckboxes();\n\n this.form.injectInput('id[]', id);\n\n return this.form.patch(url, data);\n }\n\n /**\n * Update a item with batch task.\n */\n updateItemByTask(\n task: string,\n id: string | number,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>\n ): boolean {\n data = data || {};\n data.task = task;\n\n return this.updateItem(id, url, data);\n }\n\n /**\n * @deprecated Use updateItemByTask() instead.\n */\n doTask(task: string, id: number | string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.updateItemByTask(task, id, url, data);\n }\n\n /**\n * Update a row with batch task.\n */\n updateRowByTask(task: string, row: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.updateItemByTask(task, ch.value, url, data);\n }\n\n /**\n * Batch update items.\n */\n updateListByTask(task: string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n data = data || {};\n data.task = task;\n\n return this.form.patch(url, data);\n }\n\n /**\n * @deprecated Use updateListByTask() instead.\n */\n batch(task: string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.updateListByTask(task, url, data);\n }\n\n /**\n * @deprecated Use updateListByTask() instead.\n */\n updateByTask(task: string, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.updateListByTask(task, url, data);\n }\n\n /**\n * Copy a row.\n */\n copyItem(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n this.toggleAll(false);\n\n this.disableAllCheckboxes();\n\n this.form.injectInput('id[]', id);\n\n return this.form.post(url, data);\n }\n\n /**\n * Copy a row.\n */\n copyRow(row: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.copyItem(ch.value, url, data);\n }\n\n /**\n * Delete checked items.\n */\n deleteList(\n message?: Nullable<string> | false,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>\n ): boolean {\n if (!this.validateChecked()) {\n return false;\n }\n\n message = message == null ? __('unicorn.message.delete.confirm') : message;\n\n if (message !== false) {\n simpleConfirm(message).then(isConfirm => {\n if (isConfirm) {\n this.form.delete(url, data);\n }\n });\n } else {\n this.form.delete(url, data);\n }\n\n return true;\n }\n\n /**\n * Delete an item by row.\n */\n async deleteRow(\n row: number,\n msg?: Nullable<string>,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>\n ): Promise<boolean> {\n const ch = this.getCheckboxByRow(row);\n\n if (!ch) {\n return false;\n }\n\n return this.deleteItem(ch.value, msg, url, data);\n }\n\n /**\n * Delete an item.\n */\n async deleteItem(id: string,\n msg?: Nullable<string>,\n url?: Nullable<string>,\n data?: Nullable<Record<string, any>>): Promise<boolean> {\n msg = msg || __('unicorn.message.delete.confirm');\n\n const isConfirm = await deleteConfirm(msg);\n\n if (isConfirm) {\n // this.toggleAll(false);\n // this.checkRow(row);\n data = data || {};\n\n data.id = id;\n\n this.form.delete(url, data);\n }\n\n return isConfirm;\n }\n\n /**\n * Toggle all checkboxes.\n */\n toggleAll(value: boolean) {\n Array.from(\n this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox][type=checkbox]')\n )\n .forEach((input) => {\n input.checked = value;\n\n input.dispatchEvent(new CustomEvent('input'));\n input.dispatchEvent(new CustomEvent('change'));\n });\n\n return this;\n }\n\n disableAllCheckboxes() {\n Array.from(\n this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox][type=checkbox]')\n )\n .forEach((input) => {\n input.disabled = true;\n });\n }\n\n /**\n * Count checked checkboxes.\n */\n countChecked(): number {\n return this.getChecked().length;\n }\n\n /**\n * Get Checked boxes.\n */\n getChecked(): HTMLInputElement[] {\n return Array.from(\n this.element.querySelectorAll<HTMLInputElement>('input[data-role=grid-checkbox][type=checkbox]:checked')\n );\n }\n\n getCheckedValues(): string[] {\n return this.getChecked().map(input => input.value);\n }\n\n /**\n * Validate there has one or more checked boxes.\n */\n validateChecked(\n event?: Event,\n callback?: (grid: UnicornGridElement) => any,\n errorMsg: string | boolean | null | ((grid: UnicornGridElement) => any) = true\n ): this {\n if (!this.hasChecked()) {\n if (errorMsg === true) {\n errorMsg = this.getMustCheckedMessage();\n }\n\n if (typeof errorMsg === 'string' && errorMsg !== '') {\n simpleAlert(errorMsg);\n } else if (typeof errorMsg === 'function') {\n errorMsg(this);\n }\n\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n\n const target = event.currentTarget as HTMLElement;\n\n if (target.dataset.bsToggle === 'modal') {\n if (target.dataset.bsTarget) {\n this.preventBSModal(target.dataset.bsTarget);\n }\n }\n }\n\n return this;\n }\n\n if (callback) {\n callback(this);\n }\n\n return this;\n }\n\n async validateCheckedPromise() {\n if (!this.hasChecked()) {\n throw new Error('No items checked.');\n }\n\n return this;\n }\n\n getMustCheckedMessage(): string {\n return __('unicorn.message.grid.checked');\n }\n\n hasChecked(): boolean {\n return this.countChecked() > 0;\n }\n\n /**\n * Reorder all.\n */\n reorderAll(url?: Nullable<string>, data?: Nullable<Record<string, any>>) {\n return this.updateListByTask('reorder', url, data);\n }\n\n /**\n * Reorder items.\n */\n moveItem(id: number | string, delta: number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n data = data || {};\n data.delta = delta;\n\n return this.updateItemByTask('move', id, url, data);\n }\n\n moveUp(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.moveItem(id, -1, url, data);\n }\n\n moveDown(id: string | number, url?: Nullable<string>, data?: Nullable<Record<string, any>>): boolean {\n return this.moveItem(id, 1, url, data);\n }\n\n getId(suffix = '') {\n return this.form.element?.id + suffix;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -145,7 +145,7 @@ class ShowOn {
145
145
  if (matched) {
146
146
  setTimeout(() => {
147
147
  fadeIn(this.el, duration, this.initialDisplay);
148
- }, duration + 30);
148
+ }, duration);
149
149
  } else {
150
150
  if (this.input) {
151
151
  this.defaultReadonly ??= this.input.hasAttribute("readonly");
@@ -1 +1 @@
1
- {"version":3,"file":"show-on.js","sources":["../../../../../../node_modules/lodash-es/_baseFindIndex.js","../../../../../../node_modules/lodash-es/_baseIsNaN.js","../../../../../../node_modules/lodash-es/_strictIndexOf.js","../../../../../../node_modules/lodash-es/_baseIndexOf.js","../../../../../../node_modules/lodash-es/_arrayIncludes.js","../../../../../../node_modules/lodash-es/_isFlattenable.js","../../../../../../node_modules/lodash-es/_baseFlatten.js","../../../../../../node_modules/lodash-es/_setCacheAdd.js","../../../../../../node_modules/lodash-es/_setCacheHas.js","../../../../../../node_modules/lodash-es/_SetCache.js","../../../../../../node_modules/lodash-es/_cacheHas.js","../../../../../../node_modules/lodash-es/isArrayLikeObject.js","../../../../../../node_modules/lodash-es/_baseDifference.js","../../../../../../node_modules/lodash-es/difference.js","../../src/module/show-on.ts"],"sourcesContent":["/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n","\nimport { useUniDirective } from '../composable';\nimport { fadeIn, fadeOut, selectAll, selectOne, module } from '../service';\nimport { difference } from 'lodash-es';\n\ntype HTMLInputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\ntype Conditions = Record<string, any>;\n\nexport class ShowOn {\n el!: HTMLElement;\n input!: HTMLInputTypes;\n conditions: Conditions = {};\n targets = {};\n defaultReadonly: boolean | null = null;\n initialDisplay!: string;\n\n constructor(el: HTMLElement, conditions: Conditions) {\n this.el = el;\n this.input = this.el.querySelector<HTMLInputTypes>(\n this.el.dataset.inputSelector || '[data-field-input]'\n )!;\n this.conditions = conditions;\n\n this.init();\n }\n\n init() {\n this.initialDisplay = window.getComputedStyle(this.el).display || 'block';\n\n for (const selector in this.conditions) {\n const value = this.conditions[selector];\n\n const target = selectOne<HTMLElement>(selector)!;\n\n if (this.input) {\n this.defaultReadonly = this.input.hasAttribute('readonly');\n }\n\n let listenTarget: HTMLInputTypes[];\n\n if (target.nodeName === 'DIV') {\n listenTarget = Array.from(target.querySelectorAll<HTMLInputTypes>('input, select, textarea'));\n } else {\n listenTarget = [target as HTMLInputTypes];\n }\n\n selectAll(listenTarget, (ele) => {\n ele.addEventListener('change', () => {\n this.updateShowState(target, value);\n });\n });\n\n this.updateShowState(target, value, 1);\n }\n }\n\n updateShowState(target: HTMLElement, value: any, duration = 300) {\n const matched = this.isValueMatched(target, value);\n\n if (matched) {\n setTimeout(() => {\n fadeIn(this.el, duration, this.initialDisplay);\n }, duration + 30);\n } else {\n if (this.input) {\n this.defaultReadonly ??= this.input.hasAttribute('readonly');\n }\n\n fadeOut(this.el, duration);\n }\n\n if (this.input) {\n if (matched) {\n if (!this.defaultReadonly) {\n this.input.removeAttribute('readonly');\n }\n\n this.defaultReadonly = null;\n } else {\n this.input.setAttribute('readonly', 'readonly');\n }\n }\n }\n\n isValueMatched(target: HTMLElement, value: any) {\n let targetValue: any = null;\n\n const type = this.nodeType(target);\n\n switch (type) {\n case 'input':\n case 'textarea':\n targetValue = (target as HTMLInputElement).value;\n break;\n case 'select':\n if (!(target as HTMLSelectElement).multiple) {\n targetValue = (target as HTMLSelectElement).value;\n } else {\n targetValue = selectAll(target.querySelectorAll('option'))\n .filter(option => option.selected)\n .map(option => option.value);\n }\n break;\n\n case 'checkbox':\n targetValue = (target as HTMLInputElement).checked ? (target as HTMLInputElement).value : [null, false];\n break;\n\n case 'radio':\n targetValue = target.querySelector<HTMLInputElement>('input[type=radio]:checked')?.value;\n break;\n }\n\n if (Array.isArray(value)) {\n if (Array.isArray(targetValue)) {\n return difference(value, targetValue).length === 0;\n }\n\n return value.indexOf(targetValue) !== -1;\n }\n\n if (targetValue && Array.isArray(targetValue)) {\n return targetValue.indexOf(value) !== -1;\n }\n\n return value == targetValue;\n }\n\n /**\n * @see https://github.com/nickjackson/val/blob/master/index.js#L55\n * @param el\n * @returns {string}\n */\n nodeType(el: HTMLElement): \"select\" | \"textarea\" | \"checkbox\" | \"input\" | \"radio\" {\n var node = el.nodeName.toLowerCase();\n var type = (el as HTMLInputElement).type;\n\n if (node === 'select') {\n return 'select';\n }\n\n if (node === 'textarea') {\n return 'textarea';\n }\n\n if (node === 'input') {\n if (type === 'checkbox') {\n return 'checkbox';\n }\n\n return 'input';\n }\n\n if (node === 'div') {\n if (el.querySelector('input[type=radio]')) {\n return 'radio';\n }\n }\n\n return 'input';\n }\n}\n\nexport const ready = useUniDirective('show-on', {\n mounted(el, { value }) {\n module<HTMLElement, HTMLElement>(el, 'show.on', (el) => {\n return new ShowOn(el, JSON.parse(value));\n });\n }\n});\n\nexport interface ShowOnModule {\n ShowOn: typeof ShowOn;\n ready: typeof ready;\n}\n"],"names":["Symbol","module","el"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}
1
+ {"version":3,"file":"show-on.js","sources":["../../../../../../node_modules/lodash-es/_baseFindIndex.js","../../../../../../node_modules/lodash-es/_baseIsNaN.js","../../../../../../node_modules/lodash-es/_strictIndexOf.js","../../../../../../node_modules/lodash-es/_baseIndexOf.js","../../../../../../node_modules/lodash-es/_arrayIncludes.js","../../../../../../node_modules/lodash-es/_isFlattenable.js","../../../../../../node_modules/lodash-es/_baseFlatten.js","../../../../../../node_modules/lodash-es/_setCacheAdd.js","../../../../../../node_modules/lodash-es/_setCacheHas.js","../../../../../../node_modules/lodash-es/_SetCache.js","../../../../../../node_modules/lodash-es/_cacheHas.js","../../../../../../node_modules/lodash-es/isArrayLikeObject.js","../../../../../../node_modules/lodash-es/_baseDifference.js","../../../../../../node_modules/lodash-es/difference.js","../../src/module/show-on.ts"],"sourcesContent":["/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n","\nimport { useUniDirective } from '../composable';\nimport { fadeIn, fadeOut, selectAll, selectOne, module } from '../service';\nimport { difference } from 'lodash-es';\n\ntype HTMLInputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\ntype Conditions = Record<string, any>;\n\nexport class ShowOn {\n el!: HTMLElement;\n input!: HTMLInputTypes;\n conditions: Conditions = {};\n targets = {};\n defaultReadonly: boolean | null = null;\n initialDisplay!: string;\n\n constructor(el: HTMLElement, conditions: Conditions) {\n this.el = el;\n this.input = this.el.querySelector<HTMLInputTypes>(\n this.el.dataset.inputSelector || '[data-field-input]'\n )!;\n this.conditions = conditions;\n\n this.init();\n }\n\n init() {\n this.initialDisplay = window.getComputedStyle(this.el).display || 'block';\n\n for (const selector in this.conditions) {\n const value = this.conditions[selector];\n\n const target = selectOne<HTMLElement>(selector)!;\n\n if (this.input) {\n this.defaultReadonly = this.input.hasAttribute('readonly');\n }\n\n let listenTarget: HTMLInputTypes[];\n\n if (target.nodeName === 'DIV') {\n listenTarget = Array.from(target.querySelectorAll<HTMLInputTypes>('input, select, textarea'));\n } else {\n listenTarget = [target as HTMLInputTypes];\n }\n\n selectAll(listenTarget, (ele) => {\n ele.addEventListener('change', () => {\n this.updateShowState(target, value);\n });\n });\n\n this.updateShowState(target, value, 1);\n }\n }\n\n updateShowState(target: HTMLElement, value: any, duration = 300) {\n const matched = this.isValueMatched(target, value);\n\n if (matched) {\n setTimeout(() => {\n fadeIn(this.el, duration, this.initialDisplay);\n }, duration);\n } else {\n if (this.input) {\n this.defaultReadonly ??= this.input.hasAttribute('readonly');\n }\n\n fadeOut(this.el, duration);\n }\n\n if (this.input) {\n if (matched) {\n if (!this.defaultReadonly) {\n this.input.removeAttribute('readonly');\n }\n\n this.defaultReadonly = null;\n } else {\n this.input.setAttribute('readonly', 'readonly');\n }\n }\n }\n\n isValueMatched(target: HTMLElement, value: any) {\n let targetValue: any = null;\n\n const type = this.nodeType(target);\n\n switch (type) {\n case 'input':\n case 'textarea':\n targetValue = (target as HTMLInputElement).value;\n break;\n case 'select':\n if (!(target as HTMLSelectElement).multiple) {\n targetValue = (target as HTMLSelectElement).value;\n } else {\n targetValue = selectAll(target.querySelectorAll('option'))\n .filter(option => option.selected)\n .map(option => option.value);\n }\n break;\n\n case 'checkbox':\n targetValue = (target as HTMLInputElement).checked ? (target as HTMLInputElement).value : [null, false];\n break;\n\n case 'radio':\n targetValue = target.querySelector<HTMLInputElement>('input[type=radio]:checked')?.value;\n break;\n }\n\n if (Array.isArray(value)) {\n if (Array.isArray(targetValue)) {\n return difference(value, targetValue).length === 0;\n }\n\n return value.indexOf(targetValue) !== -1;\n }\n\n if (targetValue && Array.isArray(targetValue)) {\n return targetValue.indexOf(value) !== -1;\n }\n\n return value == targetValue;\n }\n\n /**\n * @see https://github.com/nickjackson/val/blob/master/index.js#L55\n * @param el\n * @returns {string}\n */\n nodeType(el: HTMLElement): \"select\" | \"textarea\" | \"checkbox\" | \"input\" | \"radio\" {\n var node = el.nodeName.toLowerCase();\n var type = (el as HTMLInputElement).type;\n\n if (node === 'select') {\n return 'select';\n }\n\n if (node === 'textarea') {\n return 'textarea';\n }\n\n if (node === 'input') {\n if (type === 'checkbox') {\n return 'checkbox';\n }\n\n return 'input';\n }\n\n if (node === 'div') {\n if (el.querySelector('input[type=radio]')) {\n return 'radio';\n }\n }\n\n return 'input';\n }\n}\n\nexport const ready = useUniDirective('show-on', {\n mounted(el, { value }) {\n module<HTMLElement, HTMLElement>(el, 'show.on', (el) => {\n return new ShowOn(el, JSON.parse(value));\n });\n }\n});\n\nexport interface ShowOnModule {\n ShowOn: typeof ShowOn;\n ready: typeof ready;\n}\n"],"names":["Symbol","module","el"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}