{"version":3,"file":"index.mjs","sources":["../src/lib/utils.ts","../src/lib/select.ts","../src/lib/date-picker.ts","../src/lib/datatable.ts","../src/lib/plugin.ts"],"sourcesContent":["import {\n  PaginationInterface,\n  SortQueryInterface,\n  TableColumnInterface,\n} from './types';\n\n/**\n * Safely gets the value at path of object.\n *\n * @param obj - The object to query.\n * @param path - The path of the property to get.\n * @returns The resolved value.\n */\nexport function get(obj: any, path: string): any {\n  if (obj == null) return undefined;\n\n  // Handle both dot notation and array indexing\n  const pathArray = path.replace(/\\[(\\w+)\\]/g, '.$1').split('.');\n  let result = obj;\n\n  for (const key of pathArray) {\n    if (result == null) return undefined;\n    result = result[key];\n  }\n\n  return result;\n}\n\n/**\n * Checks if value is an empty object, collection, or string.\n * @param value - The value to check.\n * @returns Returns true if value is empty, else false.\n */\nexport function isEmpty(value: any): boolean {\n  if (value == null) return true;\n\n  if (typeof value === 'string' || Array.isArray(value)) {\n    return value.length === 0;\n  }\n\n  if (typeof value === 'object') {\n    return Object.keys(value).length === 0;\n  }\n\n  return false;\n}\n\n/**\n * A function that retrieves an array of rows asynchronously.\n *\n * @returns A promise resolving to an array of rows.\n */\ntype RowsGetter = () => Promise<Array<any>>;\n\n/**\n * Retrieves an array of rows either from a getter function or the provided default rows.\n *\n * @param getter - An optional function to retrieve rows asynchronously.\n * @param defaultRows - An array of default rows (empty by default).\n * @param indexed - If true, adds an 'index' property to each row.\n * @returns An array of rows.\n */\nexport async function getRows(\n  defaultRows: Array<any>,\n  indexed = false,\n  getter?: RowsGetter\n): Promise<Array<any>> {\n  let rows = defaultRows;\n  if (typeof getter === 'function') rows = await getter();\n  return indexed\n    ? rows.map((r: any, i: number) => ({ ...r, index: i + 1 }))\n    : rows;\n}\n\n/**\n * Creates an array of elements, sorted in ascending/descending order by the results of running\n * each element through each iteratee.\n *\n * @param collection - The collection to iterate over.\n * @param iteratees - The iteratees to sort by.\n * @param orders - The sort orders of iteratees.\n * @returns Returns the new sorted array.\n */\nexport function orderBy(\n  collection: any[],\n  iteratees: ((item: any) => any)[],\n  orders: string[]\n): any[] {\n  if (!Array.isArray(collection)) return [];\n  if (collection.length <= 1) return [...collection];\n\n  return [...collection].sort((a, b) => {\n    for (let i = 0; i < iteratees.length; i++) {\n      const iteratee = iteratees[i];\n      const order = orders[i];\n\n      const valueA = iteratee(a);\n      const valueB = iteratee(b);\n\n      if (valueA === valueB) continue;\n\n      if (order === 'asc') {\n        return valueA < valueB ? -1 : 1;\n      } else {\n        return valueA > valueB ? -1 : 1;\n      }\n    }\n\n    return 0;\n  });\n}\n\n/**\n * A function that sort table rows based on specified sort queries\n *\n * @param rows An array of data\n * @param query an array of sort queries\n * @returns sorted array\n */\nexport function sortRows(rows: any[], query: SortQueryInterface[]): any[] {\n  if (isEmpty(query)) return rows;\n  const orders = query.map(({ order }) => order);\n  const iteratees = query.map(({ column }) => (row: any) => {\n    let value = get(row, column.path);\n    if (isEmpty(value)) return '';\n    if (typeof column.preSort === 'function') value = column.preSort(value);\n    if (typeof value === 'number' || column.sortCaseSensitive) return value;\n    return value.toString().toLowerCase();\n  });\n\n  return orderBy(rows.slice(), iteratees, orders);\n}\n\n/**\n * Builds pagination information summary\n *\n * @param paginator The current pagination filter\n * @param totalRows Total filtered rows\n * @returns string\n */\nexport function buildPaginationInfo(\n  paginator: PaginationInterface,\n  totalRows: number\n): string {\n  const { page, pageSize, totalPages } = paginator;\n  const from = page * pageSize - (pageSize - 1);\n  const to = page === totalPages ? totalRows : page * pageSize;\n  return totalRows\n    ? `Showing ${from} to ${to} of ${totalRows} entries`\n    : 'No data available';\n}\n\n/**\n * Calculates the range of visible page numbers for pagination.\n *\n * @param paginator - The pagination settings.\n * @param totalRows - The total number of rows.\n * @param pages - An array of current visible page numbers.\n * @returns The updated pagination settings.\n */\nexport function calculatePageRange(\n  paginator: PaginationInterface,\n  totalRows: number,\n  pages: Array<number>\n): PaginationInterface {\n  // Calculate the total number of pages\n  paginator.totalPages = Math.ceil(totalRows / paginator.pageSize);\n\n  // If total pages are within visibleBtns, show all pages\n  if (paginator.totalPages <= paginator.visibleBtns) {\n    paginator.start = 1;\n    paginator.end = paginator.totalPages;\n    return paginator;\n  }\n\n  // Return if start and end page numbers are already visible\n  if (\n    (pages.includes(paginator.page - 1) || paginator.page === 1) &&\n    (pages.includes(paginator.page + 1) ||\n      paginator.page === paginator.totalPages)\n  ) {\n    return paginator;\n  }\n\n  // Calculate the range of visible page numbers\n  paginator.start = paginator.page === 1 ? 1 : paginator.page - 1;\n  paginator.end = paginator.start + paginator.visibleBtns - 5;\n\n  // Adjust start and end if they go out of bounds\n  if (paginator.start <= 3) {\n    paginator.end += 3 - paginator.start;\n    paginator.start = 1;\n  }\n\n  if (paginator.end >= paginator.totalPages - 2) {\n    paginator.start -= paginator.end - (paginator.totalPages - 2);\n    paginator.end = paginator.totalPages;\n  }\n\n  // Ensure start is within valid range\n  paginator.start = Math.max(paginator.start, 1);\n  return paginator;\n}\n\n/**\n * Paginates an array of rows based on the provided pagination settings.\n *\n * @param rows - The array of rows to be paginated.\n * @param paginator - The pagination settings.\n * @returns The paginated array of rows.\n */\nexport function getActiveRows(\n  rows: Array<any>,\n  paginator: PaginationInterface\n): Array<any> {\n  if (isEmpty(rows)) return rows;\n  const { page, pageSize } = paginator;\n  const start = (page - 1) * pageSize;\n  return rows.slice(start, start + pageSize);\n}\n\n/**\n * Initializes sort queries based on column configurations.\n *\n * @param columns - An array of table columns.\n * @returns An array of initial sort queries.\n */\nexport function initializeSortQueries(\n  columns: Array<TableColumnInterface>\n): Array<SortQueryInterface> {\n  return columns.reduce(\n    (acc: Array<SortQueryInterface>, column: TableColumnInterface) => {\n      if (column.initialSort)\n        acc.push({ column, order: column.initialSortOrder || 'asc' });\n      return acc;\n    },\n    []\n  );\n}\n\n/**\n * Updates the array of sort queries based on a specific column.\n *\n * @param sortQueries - The current array of sort queries.\n * @param column - The column for which to update the sort query.\n * @returns The updated array of sort queries.\n */\nexport function updateSortQueries(\n  sortQueries: Array<SortQueryInterface>,\n  column: TableColumnInterface\n): Array<SortQueryInterface> {\n  const i = sortQueries.findIndex(q => q.column.path === column.path);\n  if (i >= 0)\n    sortQueries[i].order = sortQueries[i].order === 'asc' ? 'desc' : 'asc';\n  else sortQueries = [{ column, order: 'asc' }];\n  return sortQueries;\n}\n\n/**\n * Filters an array of rows based on a query string.\n *\n * @param  rows - The array of rows to be filtered.\n * @param query - The query string for filtering.\n * @returns The filtered array of rows.\n */\nexport function filterRows(rows: Array<any>, query: string): Array<any> {\n  if (!query || isEmpty(rows)) return rows;\n  return rows\n    .slice()\n    .filter(row =>\n      Object.values(row).some(\n        v => v && JSON.stringify(v).toLowerCase().includes(query.toLowerCase())\n      )\n    );\n}\n\n/**\n * Determines if a table column is drillable based on the provided column configuration, value, and row.\n *\n * @param column - The table column configuration object.\n * @param value - The value in the table cell.\n * @param row - The entire row data.\n * @returns A boolean indicating whether the column is drillable.\n */\nexport function isDrillable(\n  column: TableColumnInterface,\n  value: any,\n  row: any\n): boolean {\n  return typeof column.drillable === 'function'\n    ? column.drillable(value, row)\n    : !!column.drillable && !isEmpty(value);\n}\n\n/**\n * Creates an array of numbers progressing from start up to, but not including, end.\n *\n * @param start - The start of the range.\n * @param end - The end of the range.\n * @returns An array of numbers.\n */\nexport function range(start: number, end: number): number[] {\n  const result = [];\n  for (let i = start; i < end; i++) {\n    result.push(i);\n  }\n  return result;\n}\n","import {\n  IonCheckbox,\n  IonChip,\n  IonIcon,\n  IonInput,\n  IonItem,\n  IonLabel,\n  IonList,\n  IonNote,\n} from '@ionic/vue';\nimport {\n  computed,\n  defineComponent,\n  h,\n  onBeforeUnmount,\n  onMounted,\n  PropType,\n  ref,\n  watch,\n} from 'vue';\nimport { Option } from './types';\nimport { chevronDown, chevronUp, close, closeCircle } from 'ionicons/icons';\nimport { isEmpty } from './utils';\n\nexport const SelectInput = defineComponent({\n  name: 'SelectInput',\n  props: {\n    value: {\n      type: Object as PropType<Option | Option[]>,\n      default: () => ({}),\n    },\n    label: {\n      type: String,\n      default: '',\n    },\n    placeholder: {\n      type: String,\n      default: 'Select Option',\n    },\n    options: {\n      type: Array as PropType<Option[]>,\n      default: () => [],\n    },\n    asyncOptions: {\n      type: Function as PropType<(filter: string) => Promise<Option[]>>,\n      required: false,\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    multiple: {\n      type: Boolean,\n      default: false,\n    },\n    required: {\n      type: Boolean,\n      default: false,\n    },\n    validate: {\n      type: Function as PropType<\n        (value: Option | Option[]) => Promise<false | null | string[]>\n      >,\n      required: false,\n    },\n  },\n  emits: ['select'],\n  setup(props, { emit }) {\n    const selectedOption = ref<Option>();\n    const canShowOptions = ref(false);\n    const filter = ref('');\n    const filteredOptions = ref<Option[]>([]);\n    const errs = ref('');\n    const errorClass = computed(() => (errs.value ? 'box-input-error' : ''));\n    const marginTop = computed(() => (props.label ? 'ion-margin-top' : ''));\n\n    const tags = computed<Option[]>(() => {\n      if (props.multiple)\n        return filteredOptions.value.filter(({ isChecked }) => isChecked);\n      return selectedOption.value ? [selectedOption.value] : [];\n    });\n\n    const showPlaceholder = computed(() => {\n      return !filter.value && isEmpty(tags.value) && !canShowOptions.value;\n    });\n\n    const model = computed({\n      get: () => props.value,\n      set: value => emit('select', value),\n    });\n\n    const setDefaults = () => {\n      selectedOption.value = undefined;\n      if (isEmpty(model.value)) return;\n      if (Array.isArray(model.value) && props.multiple) {\n        model.value.forEach(option => {\n          const index = filteredOptions.value.findIndex(\n            ({ value }: Option) => value === option.value\n          );\n          if (index === -1) {\n            filteredOptions.value.push({ ...option, isChecked: true });\n          } else {\n            filteredOptions.value[index].isChecked = true;\n          }\n        });\n      }\n      selectedOption.value = filteredOptions.value.find(option => {\n        if (Array.isArray(model.value))\n          return option.value === model.value[0].value;\n        return option.value === model.value.value;\n      });\n      if (isEmpty(selectedOption.value)) {\n        selectedOption.value = Array.isArray(model.value)\n          ? model.value[0]\n          : model.value;\n      }\n    };\n\n    const filterOptions = async () => {\n      const filtered =\n        typeof props.asyncOptions === 'function'\n          ? await props.asyncOptions(filter.value)\n          : props.options.filter(({ label }) =>\n              label.toLowerCase().includes(filter.value.toLowerCase())\n            );\n\n      tags.value.forEach(tag => {\n        const index = filtered.findIndex(f => f.value === tag.value);\n        if (index === -1) filtered.push(tag);\n        else filtered[index].isChecked = true;\n      });\n\n      filteredOptions.value = filtered;\n    };\n\n    const validate = async () => {\n      if (props.required && isEmpty(model.value)) {\n        return (errs.value = 'This field is required');\n      }\n      if (typeof props.validate === 'function') {\n        const errors = await props.validate(model.value);\n        if (errors && errors.length) {\n          errs.value = errors.join(', ');\n        }\n      }\n      return (errs.value = '');\n    };\n\n    const onCloseOptions = () => {\n      canShowOptions.value = false;\n      model.value = props.multiple\n        ? tags.value\n        : !isEmpty(tags.value)\n          ? tags.value[0]\n          : ({} as Option);\n      filter.value = '';\n      validate();\n    };\n\n    const showOptions = () => {\n      if (props.disabled) return;\n      canShowOptions.value = true;\n      errs.value = '';\n    };\n\n    const selectOption = (item: Option) => {\n      if (!props.multiple) {\n        selectedOption.value = item;\n        return onCloseOptions();\n      }\n      model.value = props.multiple\n        ? tags.value\n        : !isEmpty(tags.value)\n          ? tags.value[0]\n          : ({} as Option);\n      filter.value = '';\n    };\n\n    const diselectOption = (tag: Option) => {\n      if (props.multiple) return (tag.isChecked = false);\n      return (selectedOption.value = undefined);\n    };\n\n    const onReset = () => {\n      filter.value = '';\n      selectedOption.value = undefined;\n      filteredOptions.value.forEach(option => (option.isChecked = false));\n    };\n\n    watch(\n      () => props.value,\n      () => setDefaults()\n    );\n    watch([filter, () => props.options, () => props.asyncOptions], async () => {\n      await filterOptions();\n      setDefaults();\n    });\n\n    onMounted(async () => {\n      await filterOptions();\n      setDefaults();\n      addEventListener('click', (e: any) => {\n        const isClosest = e.target.closest('.inner-input-box');\n        if (!isClosest && canShowOptions.value) {\n          onCloseOptions();\n        }\n      });\n    });\n\n    onBeforeUnmount(() => removeEventListener('click', e => console.log(e)));\n\n    return () => [\n      props.label &&\n        h(IonLabel, { class: 'ion-padding-bottom bold' }, props.label),\n      h(\n        'div',\n        {\n          class: `outer-input-box box-input ${errorClass.value} ${marginTop.value}`,\n        },\n        h('div', { class: 'inner-input-box' }, [\n          h(\n            'div',\n            {\n              style: { display: 'flex', flexWrap: 'wrap', width: '100%' },\n              onClick: showOptions,\n            },\n            [\n              ...tags.value.map(tag =>\n                h(IonChip, [\n                  h(IonLabel, tag.label),\n                  h(IonIcon, {\n                    icon: closeCircle,\n                    color: 'danger',\n                    onClick: () => diselectOption(tag),\n                    style: { zIndex: 90 },\n                  }),\n                ])\n              ),\n              h(IonInput, {\n                disabled: props.disabled,\n                placeholder: showPlaceholder.value ? props.placeholder : '',\n                class: 'search-input',\n                value: filter.value,\n                onIonInput: (e: Event) =>\n                  (filter.value = (e.target as HTMLInputElement).value),\n              }),\n            ]\n          ),\n          canShowOptions.value &&\n            h(\n              'div',\n              { class: 'input-options' },\n              h(\n                IonList,\n                filteredOptions.value.map((option, i) =>\n                  h(\n                    IonItem,\n                    {\n                      lines:\n                        i + 1 === filteredOptions.value.length\n                          ? 'none'\n                          : undefined,\n                      onClick: () => selectOption(option),\n                    },\n                    [\n                      props.multiple &&\n                        h(IonCheckbox, {\n                          class: 'input-option-checkbox',\n                          slot: 'start',\n                          value: option.isChecked,\n                          onIonInput: (e: Event) =>\n                            (option.isChecked = (\n                              e.target as HTMLInputElement\n                            ).checked),\n                        }),\n                      h(IonLabel, option.label),\n                    ]\n                  )\n                )\n              )\n            ),\n          h(\n            'div',\n            { class: 'input-icon' },\n            [\n              (filter.value || tags.value.length) &&\n                h(IonIcon, { icon: close, onClick: onReset }),\n              h(IonIcon, {\n                icon: canShowOptions.value ? chevronUp : chevronDown,\n                onClick: canShowOptions.value ? onCloseOptions : showOptions,\n              }),\n            ].filter(Boolean)\n          ),\n        ])\n      ),\n      errs.value && h(IonNote, { color: 'danger' }, errs.value),\n    ];\n  },\n});\n","import { computed, defineComponent, h, PropType, ref, watch } from 'vue';\nimport { IonGrid, IonInput, IonRow, IonCol, IonIcon } from '@ionic/vue';\nimport { arrowForward } from 'ionicons/icons';\n\nexport const DateRangePicker = defineComponent({\n  props: {\n    range: {\n      type: Object as PropType<{ startDate: string; endDate: string }>,\n      default: () => ({ startDate: '', endDate: '' }),\n    },\n  },\n  emits: ['rangeChange'],\n  setup(props, { emit }) {\n    const start = ref(props.range.startDate);\n    const end = ref(props.range.endDate);\n    const cRange = computed(() => ({\n      startDate: start.value,\n      endDate: end.value,\n    }));\n    watch(cRange, v => emit('rangeChange', v));\n    return () =>\n      h(IonGrid, { class: 'ion-no-padding ion-no-margin' }, () =>\n        h(IonRow, [\n          h(IonCol, { size: '6' }, () =>\n            h(IonInput, {\n              type: 'date',\n              class: 'box-input',\n              value: start.value,\n              onIonInput: (e: Event) =>\n                (start.value = (e.target as HTMLInputElement).value),\n              style: { width: '100%' },\n            })\n          ),\n          h(\n            IonCol,\n            {\n              size: '1',\n              style: { display: 'flex', justifyContent: 'center ' },\n            },\n            () =>\n              h(IonIcon, {\n                icon: arrowForward,\n                style: { fontSize: '24px', padding: '.5rem' },\n              })\n          ),\n          h(IonCol, { size: '5' }, () =>\n            h(IonInput, {\n              type: 'date',\n              class: 'box-input',\n              value: end.value,\n              onIonInput: (e: Event) =>\n                (end.value = (e.target as HTMLInputElement).value),\n              style: { width: '100%' },\n            })\n          ),\n        ])\n      );\n  },\n});\n","import {\n  computed,\n  defineComponent,\n  h,\n  onMounted,\n  PropType,\n  reactive,\n  ref,\n  watch,\n} from 'vue';\nimport {\n  TableColumnInterface,\n  TableFilterInterface,\n  ActionButtonInterface,\n  RowActionButtonInterface,\n  CustomFilterInterface,\n  TableConfigInterface,\n  Option,\n  TextFieldTypes,\n  PaginationButton,\n  PaginationInterface,\n} from './types';\nimport './datatable.css';\nimport {\n  IonButton,\n  IonCol,\n  IonGrid,\n  IonIcon,\n  IonInput,\n  IonItem,\n  IonLabel,\n  IonRow,\n  IonSearchbar,\n  IonSelect,\n  IonSelectOption,\n  IonSkeletonText,\n} from '@ionic/vue';\nimport {\n  arrowDown,\n  arrowUp,\n  swapVertical,\n  caretBack,\n  caretForward,\n} from 'ionicons/icons';\nimport { SelectInput } from './select';\nimport { DateRangePicker } from './date-picker';\nimport * as DT from './utils';\nimport { get, isEmpty, range } from './utils';\n\nexport const DataTable = defineComponent({\n  name: 'DataTable',\n  props: {\n    rows: {\n      type: Array as PropType<any[]>,\n      default: () => [],\n    },\n    asyncRows: {\n      type: Function as PropType<() => Promise<any[]>>,\n      required: false,\n    },\n    columns: {\n      type: Array as PropType<TableColumnInterface[]>,\n      default: () => [],\n    },\n    actionsButtons: {\n      type: Array as PropType<ActionButtonInterface[]>,\n      default: () => [],\n    },\n    rowActionsButtons: {\n      type: Array as PropType<RowActionButtonInterface[]>,\n      default: () => [],\n    },\n    customFilters: {\n      type: Array as PropType<CustomFilterInterface[]>,\n      default: () => [],\n    },\n    color: {\n      type: String as PropType<\n        | 'primary'\n        | 'secondary'\n        | 'tertiary'\n        | 'success'\n        | 'warning'\n        | 'danger'\n        | 'light'\n        | 'dark'\n        | 'medium'\n        | 'custom'\n      >,\n    },\n    config: {\n      type: Object as PropType<TableConfigInterface>,\n      default: () => ({}),\n    },\n    loading: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  emits: ['customFilter', 'queryChange', 'drilldown'],\n  setup(props, { emit, slots }) {\n    const isLoading = ref(false);\n    const tableRows = ref<any[]>([]);\n    const filteredRows = ref<any[]>([]);\n    const totalFilteredRows = computed(() => filteredRows.value.length);\n    const totalColumns = computed(() =>\n      isEmpty(props.rowActionsButtons)\n        ? tableColumns.value.length\n        : tableColumns.value.length + 1\n    );\n    const paginationPages = computed(() =>\n      filters.pagination.enabled\n        ? range(filters.pagination.start, filters.pagination.end + 1)\n        : []\n    );\n    const tableColumns = computed<TableColumnInterface[]>(() =>\n      props.config.showIndices\n        ? [\n            {\n              path: 'index',\n              label: '#',\n              initialSort: true,\n              initialSortOrder: 'asc',\n            },\n            ...props.columns,\n          ]\n        : props.columns\n    );\n\n    const filters = reactive<TableFilterInterface>({\n      search: '',\n      sort: [],\n      pagination: {\n        enabled: props.config?.pagination?.enabled ?? true,\n        page: props.config?.pagination?.page ?? 1,\n        pageSize: props.config?.pagination?.pageSize ?? 10,\n        start: props.config?.pagination?.start ?? 1,\n        end: props.config?.pagination?.end ?? 1,\n        totalPages: props.config?.pagination?.totalPages ?? 1,\n        visibleBtns: props.config?.pagination?.visibleBtns ?? 7,\n        pageSizeOptions: props.config?.pagination?.pageSizeOptions ?? [\n          5, 10, 20, 50, 100,\n        ],\n      },\n    });\n\n    const activeRows = ref([] as Array<any>);\n    const showFilterSection = computed<boolean>(() => {\n      return (\n        props.config.showSearchField !== false ||\n        props.customFilters.length > 0 ||\n        props.actionsButtons.length > 0\n      );\n    });\n\n    const customFiltersValues = reactive<Record<string, any>>(\n      props.customFilters.reduce(\n        (acc, filter) => {\n          acc[filter.id] = filter.value;\n          return acc;\n        },\n        {} as Record<string, any>\n      )\n    );\n\n    const init = async () => {\n      isLoading.value = true;\n      tableRows.value = await DT.getRows(\n        props.rows,\n        props.config.showIndices || false,\n        props.asyncRows\n      );\n      filters.sort = DT.initializeSortQueries(tableColumns.value);\n      handleFilters(filters.pagination);\n      isLoading.value = false;\n    };\n\n    const handleFilters = (\n      paginator: PaginationInterface,\n      search?: string,\n      sortColumn?: TableColumnInterface\n    ) => {\n      filters.search = search ?? '';\n      if (sortColumn)\n        filters.sort = DT.updateSortQueries(filters.sort, sortColumn);\n      const _filteredRows = DT.filterRows(tableRows.value, filters.search);\n      filteredRows.value = DT.sortRows(_filteredRows, filters.sort);\n      if (filters.pagination.enabled) {\n        filters.pagination = DT.calculatePageRange(\n          paginator,\n          totalFilteredRows.value,\n          paginationPages.value\n        );\n        activeRows.value = DT.getActiveRows(\n          filteredRows.value,\n          filters.pagination\n        );\n      } else {\n        activeRows.value = filteredRows.value;\n      }\n    };\n\n    watch(\n      customFiltersValues,\n      () => {\n        if (props.config.showSubmitButton === false) {\n          emit('customFilter', customFiltersValues);\n        }\n      },\n      {\n        immediate: true,\n        deep: true,\n      }\n    );\n\n    watch(\n      () => props.rows,\n      () => init(),\n      { deep: true, immediate: true }\n    );\n    onMounted(() => init());\n\n    const renderSearchbar = () => {\n      if (props.config.showSearchField !== false) {\n        return h(IonCol, { size: '4' }, () => [\n          h(IonSearchbar, {\n            placeholder: 'search here...',\n            class: 'box ion-no-padding',\n            value: filters.search,\n            onIonInput: e =>\n              handleFilters(\n                { ...filters.pagination, page: 1 },\n                e.target.value as string\n              ),\n          }),\n        ]);\n      }\n      return null;\n    };\n\n    const renderSelectFilter = (filter: CustomFilterInterface) =>\n      h(IonCol, { size: `${filter.gridSize}` || '3' }, () =>\n        h(SelectInput, {\n          options: filter.options,\n          placeholder: filter.label || filter.placeholder || 'Select Item',\n          value: filter.value,\n          multiple: filter.multiple,\n          onSelect: (v: Option | Option[]) => {\n            if (typeof filter.onUpdate === 'function') filter.onUpdate(v);\n            customFiltersValues[filter.id] = v;\n          },\n        })\n      );\n\n    const renderDateRangeFilter = (filter: CustomFilterInterface) =>\n      h(IonCol, { size: `${filter.gridSize}` || '6' }, () =>\n        h(DateRangePicker, {\n          range: computed(() => filter.value || { startDate: '', endDate: '' })\n            .value,\n          onRangeChange: async newRange => {\n            if (typeof filter.onUpdate === 'function')\n              filter.onUpdate(newRange);\n            customFiltersValues[filter.id] = newRange;\n          },\n        })\n      );\n\n    const renderDefaultFilter = (filter: CustomFilterInterface) =>\n      h(IonCol, { size: '4' }, () =>\n        h(IonInput, {\n          class: 'box',\n          type: filter.type as TextFieldTypes,\n          placeholder: filter.placeholder,\n          value: computed(() => filter.value || '').value,\n          onIonInput: async e => {\n            const value = e.target.value;\n            if (typeof filter.onUpdate === 'function') filter.onUpdate(value);\n            customFiltersValues[filter.id] = value;\n          },\n        })\n      );\n\n    const renderCustomFilters = () => {\n      return props.customFilters.map(filter => {\n        if (filter.slotName && slots[filter.slotName]) {\n          const slotFn = slots[filter.slotName];\n          return h(\n            IonCol,\n            { size: `${filter.gridSize || '3'}` },\n            () => slotFn && slotFn({ filter })\n          );\n        }\n        if (filter.type === 'dateRange') return renderDateRangeFilter(filter);\n        if (filter.type === 'select') return renderSelectFilter(filter);\n        return renderDefaultFilter(filter);\n      });\n    };\n\n    const renderSubmitButton = () => {\n      if (\n        props.customFilters.length > 0 &&\n        props.config.showSubmitButton !== false\n      ) {\n        return h(IonCol, { size: '2' }, () => [\n          h(\n            IonButton,\n            {\n              color: 'primary',\n              class: 'ion-no-margin',\n              onClick: () => emit('customFilter', customFiltersValues),\n            },\n            'Submit'\n          ),\n        ]);\n      }\n      return null;\n    };\n\n    const renderActionsButtons = () => {\n      return props.actionsButtons.map(btn =>\n        h(\n          IonButton,\n          {\n            class: 'ion-float-right',\n            color: btn.color || 'primary',\n            size: btn.size ?? 'default',\n            onClick: () =>\n              btn.action(\n                activeRows.value,\n                tableRows.value,\n                filters,\n                tableColumns.value\n              ),\n          },\n          btn.icon ? h(IonIcon, { icon: btn.icon }) : btn.label\n        )\n      );\n    };\n\n    const renderFilterSection = () => {\n      return (\n        showFilterSection.value &&\n        h(IonGrid, { style: { width: '100%', fontWeight: 500 } }, () =>\n          h(IonRow, [\n            h(IonCol, { size: '7' }, () =>\n              h(IonRow, [\n                renderSearchbar(),\n                ...renderCustomFilters(),\n                renderSubmitButton(),\n              ])\n            ),\n            h(IonCol, { size: '5', class: 'ion-padding-end' }, () =>\n              renderActionsButtons()\n            ),\n          ])\n        )\n      );\n    };\n\n    const renderPagination = () => {\n      return (\n        filters.pagination.enabled &&\n        filters.pagination.totalPages > 1 &&\n        h(\n          IonGrid,\n          {\n            style: { width: '100%', textAlign: 'left', color: 'black' },\n            class: 'ion-padding',\n          },\n          () =>\n            h(IonRow, [\n              h(IonCol, { size: '4' }, () => renderPaginationControls()),\n              h(IonCol, { size: '5', class: 'text-center' }, () => [\n                renderGoToPageInput(),\n                renderItemsPerPageSelect(),\n              ]),\n              h(IonCol, { size: '3' }, () => renderPaginationInfo()),\n            ])\n        )\n      );\n    };\n\n    const renderPaginationControls = () => {\n      const { page, start, end, totalPages } = filters.pagination;\n      const handleClick = (page: number) => {\n        return handleFilters({ ...filters.pagination, page });\n      };\n\n      const controls = [\n        renderPageControlButton({\n          icon: caretBack,\n          disabled: page === start,\n          onClick: () => handleClick(page - 1),\n        }),\n      ];\n\n      if (start > 3) {\n        controls.push(\n          renderPageControlButton({ label: '1', onClick: () => handleClick(1) })\n        );\n        controls.push(\n          renderPageControlButton({ label: '...', disabled: true })\n        );\n      }\n\n      paginationPages.value.forEach((label: number) => {\n        controls.push(\n          renderPageControlButton({ label, onClick: () => handleClick(label) })\n        );\n      });\n\n      if (end < totalPages - 2) {\n        controls.push(\n          renderPageControlButton({ label: '...', disabled: true })\n        );\n        controls.push(\n          renderPageControlButton({\n            label: totalPages,\n            onClick: () => handleClick(totalPages),\n          })\n        );\n      }\n\n      controls.push(\n        renderPageControlButton({\n          icon: caretForward,\n          disabled: page === end || isEmpty(filteredRows.value),\n          onClick: () => handleClick(page + 1),\n        })\n      );\n\n      return controls;\n    };\n\n    const renderPageControlButton = ({\n      disabled,\n      label,\n      icon,\n      onClick,\n    }: PaginationButton) => {\n      return h(\n        IonButton,\n        {\n          onClick,\n          disabled,\n          size: 'small',\n          color: filters.pagination.page === label ? 'primary' : 'light',\n        },\n        icon ? h(IonIcon, { icon }) : label || 'Button'\n      );\n    };\n\n    const renderGoToPageInput = () => {\n      return h(\n        IonItem,\n        { class: 'box go-to-input ion-hide-xl-down', lines: 'none' },\n        [\n          h(IonLabel, { class: 'ion-margin-end' }, 'Go to page'),\n          h(IonInput, {\n            type: 'number',\n            min: 1,\n            max: filters.pagination.totalPages,\n            value: filters.pagination.page,\n            style: { paddingRight: '15px' },\n            debounce: 500,\n            onIonChange: e => {\n              const page = e.target.value as number;\n              if (page > 0 && page <= filters.pagination.totalPages) {\n                handleFilters({ ...filters.pagination, page });\n              }\n            },\n          }),\n        ]\n      );\n    };\n\n    const renderItemsPerPageSelect = () => {\n      return h(IonItem, { class: 'box per-page-input', lines: 'none' }, [\n        h(IonLabel, 'Items per page'),\n        h(\n          IonSelect,\n          {\n            value: filters.pagination.pageSize,\n            onIonChange: e =>\n              handleFilters({\n                ...filters.pagination,\n                pageSize: e.target.value as number,\n                page: 1,\n              }),\n          },\n          [\n            ...filters.pagination.pageSizeOptions.map(value =>\n              h(IonSelectOption, { value, key: value }, value)\n            ),\n            h(IonSelectOption, { value: totalFilteredRows.value }, 'All'),\n          ]\n        ),\n      ]);\n    };\n\n    const renderPaginationInfo = () => {\n      return h(\n        IonCol,\n        { size: '4', class: 'pagination-info' },\n        computed(() => {\n          return DT.buildPaginationInfo(\n            filters.pagination,\n            totalFilteredRows.value\n          );\n        }).value\n      );\n    };\n\n    const renderTableHeader = () =>\n      h(\n        'thead',\n        { class: props.color || '' },\n        h('tr', [\n          ...tableColumns.value.map(column => renderTableHeaderCell(column)),\n          !isEmpty(props.rowActionsButtons) && h('th', 'Actions'),\n        ])\n      );\n\n    const renderSortIcon = (column: TableColumnInterface) => {\n      const style = { marginRight: '5px', float: 'right', cursor: 'pointer' };\n      const icon = computed(() => {\n        const query = filters.sort.find(s => s.column.path === column.path);\n        return !query\n          ? swapVertical\n          : query.order == 'asc'\n            ? arrowUp\n            : arrowDown;\n      });\n      return h(IonIcon, { icon: icon.value, style });\n    };\n\n    const renderTableHeaderCell = (column: TableColumnInterface) => {\n      const style = {\n        minWidth: /index/i.test(column.path) ? '80px' : '190px',\n        ...column.thStyles,\n      };\n      const onClick = () =>\n        handleFilters(filters.pagination, filters.search, column);\n      return h(\n        'th',\n        {\n          key: column.label,\n          style,\n          class: column.thClasses?.join(' '),\n          onClick,\n        },\n        [\n          h('span', column.label),\n          column.sortable !== false && renderSortIcon(column),\n        ]\n      );\n    };\n\n    const renderTableBody = () => {\n      return h(\n        'tbody',\n        { class: 'table-body' },\n        isLoading.value || props.loading\n          ? renderLoadingRows()\n          : isEmpty(filteredRows.value)\n            ? renderNoDataRow()\n            : renderDataRows()\n      );\n    };\n\n    const renderLoadingRows = () => {\n      return range(0, 9).map((i: number) =>\n        h(\n          'tr',\n          { key: i },\n          h(\n            'td',\n            { colspan: totalColumns.value },\n            h(IonSkeletonText, { animated: true, style: { width: '100%' } })\n          )\n        )\n      );\n    };\n\n    const renderNoDataRow = () => {\n      return h(\n        'tr',\n        h(\n          'td',\n          { colspan: totalColumns.value },\n          h('div', { class: 'no-data-table' }, 'No data available')\n        )\n      );\n    };\n\n    const handleRowClick = async (row: any, rowIndex: number) => {\n      const defaultActionBtn = props.rowActionsButtons.find(btn => btn.default);\n      if (defaultActionBtn) await defaultActionBtn.action(row, rowIndex);\n    };\n\n    const renderDataRows = () => {\n      return activeRows.value.map((row, rowIndex) =>\n        h('tr', { key: row, onClick: () => handleRowClick(row, rowIndex) }, [\n          ...renderDataRowCells(row),\n          renderRowActionCells(row, rowIndex),\n        ])\n      );\n    };\n\n    const renderDataRowCells = (row: any) => {\n      return tableColumns.value.map((column, key) => {\n        const classes = ['data-cell', ...(column.tdClasses ?? [])].join(' ');\n        return h(\n          'td',\n          { key, class: classes, style: column.tdStyles },\n          renderCellContent(row, column)\n        );\n      });\n    };\n\n    const renderCellContent = (row: any, column: TableColumnInterface) => {\n      let value = get(row, column.path);\n      if (typeof column.formatter === 'function' && value)\n        value = column.formatter(value, row);\n      if (DT.isDrillable(column, value, row)) {\n        return h(\n          'a',\n          { onClick: () => emit('drilldown', { column, row }) },\n          renderCellValue(value)\n        );\n      } else {\n        return renderCellValue(value);\n      }\n    };\n\n    const renderCellValue = (value: Array<any> | string | number) => {\n      return Array.isArray(value) ? value.length : value;\n    };\n\n    const renderRowActionCells = (row: any, rowIndex: number) => {\n      if (!isEmpty(props.rowActionsButtons)) {\n        return h(\n          'td',\n          props.rowActionsButtons.map(btn => {\n            const canShowBtn =\n              typeof btn.condition === 'function' ? btn.condition(row) : true;\n            return canShowBtn\n              ? renderRowActionButton(row, rowIndex, btn)\n              : null;\n          })\n        );\n      }\n      return null;\n    };\n\n    const renderRowActionButton = (\n      row: any,\n      rowIndex: number,\n      btn: RowActionButtonInterface\n    ) => {\n      return h(\n        IonButton,\n        {\n          key: btn.icon,\n          size: btn.size ?? 'small',\n          color: btn.color || 'primary',\n          onClick: () => btn.action(row, rowIndex),\n        },\n        btn.icon ? h(IonIcon, { icon: btn.icon }) : btn.label || 'Button'\n      );\n    };\n\n    const renderTable = () => {\n      return h(\n        'div',\n        { class: 'responsive-table ion-padding-horizontal' },\n        h('table', { class: 'table bordered-table striped-table' }, [\n          renderTableHeader(),\n          renderTableBody(),\n        ])\n      );\n    };\n\n    return () => [renderFilterSection(), renderTable(), renderPagination()];\n  },\n});\n","import { App, Plugin } from 'vue';\nimport { DataTable } from './datatable';\nimport { TableGlobalConfig } from './types';\n\n// The Install function used by Vue to register the plugin\nexport const VTable: Plugin = {\n  install(app: App, options?: TableGlobalConfig) {\n    app.config.globalProperties.$globalTableOptions = options;\n    app.provide('globalTableOptions', options);\n    app.component('DataTable', DataTable);\n  },\n};\n"],"names":["DT.getRows","DT.initializeSortQueries","DT.updateSortQueries","DT.filterRows","DT.sortRows","DT.calculatePageRange","DT.getActiveRows","DT.buildPaginationInfo","DT.isDrillable"],"mappings":"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"}