@bagelink/vue 1.2.124 → 1.2.128

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.
Files changed (33) hide show
  1. package/dist/components/DragOver.vue.d.ts +1 -0
  2. package/dist/components/DragOver.vue.d.ts.map +1 -1
  3. package/dist/components/ImportData.vue.d.ts.map +1 -1
  4. package/dist/components/Loading.vue.d.ts +1 -0
  5. package/dist/components/Loading.vue.d.ts.map +1 -1
  6. package/dist/components/Modal.vue.d.ts +10 -5
  7. package/dist/components/Modal.vue.d.ts.map +1 -1
  8. package/dist/components/dataTable/DataTable.vue.d.ts.map +1 -1
  9. package/dist/components/dataTable/useTableData.d.ts +10 -10
  10. package/dist/components/dataTable/useTableData.d.ts.map +1 -1
  11. package/dist/components/form/inputs/DatePicker.vue.d.ts +2 -1
  12. package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
  13. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  14. package/dist/index.cjs +324 -262
  15. package/dist/index.mjs +324 -262
  16. package/dist/style.css +136 -137
  17. package/dist/types/BagelForm.d.ts.map +1 -1
  18. package/dist/types/TableSchema.d.ts +1 -1
  19. package/dist/types/TableSchema.d.ts.map +1 -1
  20. package/dist/utils/BagelFormUtils.d.ts +2 -2
  21. package/dist/utils/BagelFormUtils.d.ts.map +1 -1
  22. package/package.json +1 -1
  23. package/src/components/DragOver.vue +21 -0
  24. package/src/components/ImportData.vue +34 -33
  25. package/src/components/Loading.vue +58 -50
  26. package/src/components/Modal.vue +10 -4
  27. package/src/components/dataTable/DataTable.vue +5 -11
  28. package/src/components/dataTable/useTableData.ts +11 -10
  29. package/src/components/form/inputs/DatePicker.vue +9 -6
  30. package/src/components/form/inputs/SelectInput.vue +1 -1
  31. package/src/types/BagelForm.ts +2 -0
  32. package/src/types/TableSchema.ts +1 -1
  33. package/src/utils/BagelFormUtils.ts +2 -2
@@ -37,8 +37,8 @@ interface NumFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
37
37
  type RichTextOptions<T, P extends Path<T>> = InputOptions<T, P>;
38
38
  export declare function getBaseField<T, P extends Path<T>>(id?: P, labelOrRest?: string | Partial<BaseBagelField<T, P>>, rest?: Partial<BaseBagelField<T, P>>): BaseBagelField<T, P>;
39
39
  export declare function richText<T, P extends Path<T>>(id: P, label?: string, options?: RichTextOptions<T, P>): BaseBagelField<T, P>;
40
- export declare function txtField<T, P extends Path<T>>(id: P, label?: string, options?: TextInputOptions<T, P>): BaseBagelField<T, P> | InputBagelField<T, P>;
41
- export declare function selectField<T, P extends Path<T>>(id: P, label?: string, options?: Option[] | (() => Option[]), config?: SlctInputOptions<T, P>): BaseBagelField<T, P> | SelectBagelField<T, P>;
40
+ export declare function txtField<T, P extends Path<T>>(id: P, label?: string, options?: TextInputOptions<T, P>): InputBagelField<T, P>;
41
+ export declare function selectField<T, P extends Path<T>>(id: P, label?: string, options?: Option[] | (() => Option[]), config?: SlctInputOptions<T, P>): SelectBagelField<T, P>;
42
42
  export declare const slctField: typeof selectField;
43
43
  interface CheckInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
44
44
  value?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"BagelFormUtils.d.ts","sourceRoot":"","sources":["../../src/utils/BagelFormUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BagelFormUtils.d.ts","sourceRoot":"","sources":["../../src/utils/BagelFormUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "1.2.124",
4
+ "version": "1.2.128",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Neveh Allon",
@@ -5,6 +5,7 @@ const props = defineProps<{
5
5
  multiple?: boolean
6
6
  accept?: string
7
7
  disabled?: boolean
8
+ browse?: boolean
8
9
  }>()
9
10
 
10
11
  const emit = defineEmits<{
@@ -38,6 +39,25 @@ function handleDragLeave(e: DragEvent) {
38
39
  }
39
40
  }
40
41
 
42
+ function handleClick(e: MouseEvent) {
43
+ if (!props.browse || props.disabled) {
44
+ return
45
+ }
46
+ e.preventDefault()
47
+ e.stopPropagation()
48
+ const input = document.createElement('input')
49
+ input.type = 'file'
50
+ input.multiple = !!props.multiple
51
+ input.accept = props.accept || '*'
52
+ input.onchange = (e: Event) => {
53
+ const { files } = e.target as HTMLInputElement
54
+ if (files) {
55
+ emit('addFiles', files)
56
+ }
57
+ }
58
+ input.click()
59
+ }
60
+
41
61
  function handleDrop(e: DragEvent) {
42
62
  if (props.disabled) return
43
63
  e.preventDefault()
@@ -61,6 +81,7 @@ function handleDrop(e: DragEvent) {
61
81
  @dragover="handleDragOver"
62
82
  @dragleave="handleDragLeave"
63
83
  @drop="handleDrop"
84
+ @click="handleClick"
64
85
  >
65
86
  <slot />
66
87
  <div v-if="isDragging && !disabled" class="drag-overlay">
@@ -10,13 +10,13 @@ import {
10
10
  Pill,
11
11
  SelectInput,
12
12
  Spreadsheet,
13
- useFileUpload,
14
13
  useExcel,
15
14
  DragOver,
16
15
  } from '@bagelink/vue'
17
16
  import { computed, reactive, ref, watch, watchEffect } from 'vue'
18
17
 
19
18
  import { useSchemaField } from '../composables/useSchemaField'
19
+ import { formatString } from '../utils/strings'
20
20
  import TextInput from './form/inputs/TextInput.vue'
21
21
 
22
22
  // Add interface for schema items
@@ -173,28 +173,21 @@ function getUniqueSourceValues(fieldId: string): any[] {
173
173
  const allValues = fileData.value
174
174
  .map(row => row[fieldMapping[fieldId]])
175
175
  .filter(value => value !== undefined && value !== null && value !== '')
176
-
177
- // Create a unique set of values
178
176
  const uniqueValues = [...new Set(allValues)]
179
177
 
180
- // Filter out values that already have transformations
181
178
  return uniqueValues.filter((value) => {
182
179
  if (!transformations[fieldId] || transformations[fieldId].length === 0) {
183
180
  return true
184
181
  }
185
-
186
- // Return false if this value already has a transformation
187
182
  return !transformations[fieldId].some(t => t.sourceValue == value || t.sourceValue === value.toString()
188
183
  )
189
184
  })
190
185
  }
191
186
 
192
- // Computed for available source values
193
187
  const availableSourceValues = computed(() => {
194
188
  if (!selectedTransformField.value || !selectedTransformField.value.id) {
195
189
  return []
196
190
  }
197
-
198
191
  return getUniqueSourceValues(selectedTransformField.value.id)
199
192
  })
200
193
 
@@ -217,8 +210,7 @@ function findMatchingTargetValue(sourceValue: string, options: Option[]): string
217
210
  const exactMatch = options.find((option) => {
218
211
  const optionObj = typeof option === 'object' && option !== null ? option : { value: String(option), label: String(option) }
219
212
  // Make sure option and label exist and is a string
220
- if (!optionObj || typeof optionObj.label !== 'string') return false
221
-
213
+ if (!optionObj) return false
222
214
  const optionLabel = `${optionObj.label}`.toLowerCase().trim()
223
215
  return optionLabel === lowerSourceValue
224
216
  })
@@ -283,8 +275,6 @@ function addTransformation(fieldId: string) {
283
275
  targetValue: selectedTargetValue.value
284
276
  })
285
277
  }
286
-
287
- // Reset selection
288
278
  selectedSourceValue.value = ''
289
279
  selectedTargetValue.value = ''
290
280
  }
@@ -400,12 +390,10 @@ function getFieldDescription(field: any): { description: string, isConditional:
400
390
  }
401
391
  }
402
392
 
403
- // Replace parseFile function with simplified version
404
393
  async function parseFile(file: File) {
405
394
  isLoading.value = true
406
395
 
407
396
  try {
408
- // Get sheet names using the composable
409
397
  sheetNames.value = await getSheetNames(file)
410
398
  selectedSheet.value = sheetNames.value[0]
411
399
 
@@ -420,9 +408,7 @@ async function parseFile(file: File) {
420
408
  // Replace loadSheetData function with simplified version
421
409
  async function loadSheetData() {
422
410
  if (!file.value || !selectedSheet.value) return
423
-
424
411
  isLoading.value = true
425
-
426
412
  try {
427
413
  // Use the readSheetData utility from our composable
428
414
  const { headers, data } = await readSheetData(file.value, selectedSheet.value, hasHeaders.value)
@@ -498,10 +484,22 @@ function resetMapping() {
498
484
  // Try to auto-map fields based on similar names
499
485
  if (fileHeaders.value.length > 0) {
500
486
  schemaFields.value.forEach((field: any) => {
487
+ // Format variations of field id and label for comparison
488
+ const fieldIdCamel = formatString(field.id, 'camel')
489
+ const fieldIdPascal = formatString(field.id, 'pascal')
490
+ const fieldLabelCamel = formatString(field.label.replace(/\s+/g, '_'), 'camel')
491
+ const fieldLabelPascal = formatString(field.label.replace(/\s+/g, '_'), 'pascal')
492
+
501
493
  // Look for exact match
502
494
  const exactMatch = fileHeaders.value.find(
503
495
  header => header.toLowerCase() === field.id.toLowerCase()
504
496
  || header.toLowerCase() === field.label.toLowerCase()
497
+ || header.toLowerCase() === fieldIdCamel.toLowerCase()
498
+ || header.toLowerCase() === fieldIdPascal.toLowerCase()
499
+ || header.toLowerCase() === fieldLabelCamel.toLowerCase()
500
+ || header.toLowerCase() === fieldLabelPascal.toLowerCase()
501
+ || formatString(header.replace(/\s+/g, '_'), 'camel').toLowerCase() === fieldIdCamel.toLowerCase()
502
+ || formatString(header.replace(/\s+/g, '_'), 'camel').toLowerCase() === fieldLabelCamel.toLowerCase()
505
503
  )
506
504
 
507
505
  if (exactMatch && !field.disabled) {
@@ -511,6 +509,10 @@ function resetMapping() {
511
509
  const partialMatch = fileHeaders.value.find(
512
510
  header => header.toLowerCase().includes(field.id.toLowerCase())
513
511
  || header.toLowerCase().includes(field.label.toLowerCase())
512
+ || header.toLowerCase().includes(fieldIdCamel.toLowerCase())
513
+ || header.toLowerCase().includes(fieldLabelCamel.toLowerCase())
514
+ || field.id.toLowerCase().includes(header.toLowerCase())
515
+ || field.label.toLowerCase().includes(header.toLowerCase())
514
516
  )
515
517
 
516
518
  if (partialMatch && !field.disabled) {
@@ -547,7 +549,7 @@ function checkMappingComplete() {
547
549
  // If no strictly required fields, we just need at least one mapping or default value
548
550
  if (requiredFields.length === 0) {
549
551
  mappingComplete.value = Object.keys(fieldMapping).some(key => !!fieldMapping[key])
550
- || Object.keys(defaultValues).length > 0
552
+ || Object.keys(defaultValues).length > 0
551
553
  return
552
554
  }
553
555
 
@@ -870,10 +872,8 @@ function handleSelectChange(event: Event, fieldId: string) {
870
872
  }
871
873
  }
872
874
 
873
- const { addFile, browse, fileQueue } = useFileUpload()
874
-
875
- async function handleFilesUploaded() {
876
- file.value = fileQueue.value[0].file
875
+ async function handleFilesUploaded(files: FileList) {
876
+ file.value = files[0]
877
877
  if (!file.value) return
878
878
  isLoading.value = true
879
879
 
@@ -885,9 +885,6 @@ async function handleFilesUploaded() {
885
885
  isLoading.value = false
886
886
  }
887
887
  }
888
-
889
- watch(fileQueue.value, handleFilesUploaded)
890
-
891
888
  // Watch for changes in the selected sheet
892
889
  watchEffect(() => {
893
890
  if (selectedSheet.value) {
@@ -937,16 +934,19 @@ function openRelatedDialog(field: SchemaItem) {
937
934
  }
938
935
 
939
936
  // Function to process related file
940
- async function processRelatedFile(fieldId: string, file: File) {
941
- if (!file) return
937
+ async function processRelatedFile(fieldId: string, files: File[] | FileList) {
938
+ if (!files) return
939
+ const file = files[0]
942
940
 
943
941
  relatedFiles[fieldId] = file
944
942
 
945
943
  try {
946
- // Use the readSheetData utility from our composable
947
- const { data } = await readSheetData(file, '', true)
944
+ // First get sheet names
945
+ const sheets = await getSheetNames(file)
946
+ const selectedSheet = sheets.length > 0 ? sheets[0] : ''
948
947
 
949
- // Store the related file data
948
+ // Use the first sheet instead of an empty string
949
+ const { headers, data } = await readSheetData(file, selectedSheet, true)
950
950
  relatedFileData[fieldId] = data
951
951
 
952
952
  // Initialize mapping if not exists
@@ -999,7 +999,6 @@ function autoPopulateTransformations(fieldId: string) {
999
999
  // For each unique value, try to find a matching target
1000
1000
  uniqueValues.forEach((sourceValue) => {
1001
1001
  const strSourceValue = String(sourceValue)
1002
-
1003
1002
  const matchedValue = findMatchingTargetValue(strSourceValue, fieldOptions)
1004
1003
 
1005
1004
  if (matchedValue) {
@@ -1517,8 +1516,8 @@ function getRelatedFieldWithDefaults(parentId: string, field: any) {
1517
1516
  <DragOver
1518
1517
  accept=".csv,.xls,.xlsx"
1519
1518
  class="max-h300px w-500px"
1520
- @addFiles="addFile"
1521
- @click="browse(false)"
1519
+ browse
1520
+ @addFiles="handleFilesUploaded"
1522
1521
  >
1523
1522
  <Card class="flex flex-column items-center justify-center outline-dashed outline-3 bg-input hover h-100p justify-content-center txt-center">
1524
1523
  <Icon name="upload" size="5" />
@@ -1596,6 +1595,7 @@ function getRelatedFieldWithDefaults(parentId: string, field: any) {
1596
1595
  v-model="fieldMapping[field.id]"
1597
1596
  icon="table_chart"
1598
1597
  :options="fileHeaders"
1598
+ searchable
1599
1599
  :required="isFieldRequired(field)"
1600
1600
  :disabled="field.disabled"
1601
1601
  @change="handleSelectChange($event, field.id)"
@@ -1729,7 +1729,8 @@ function getRelatedFieldWithDefaults(parentId: string, field: any) {
1729
1729
  <div v-if="!relatedFiles[selectedRelationField.id]" class="mb-05">
1730
1730
  <DragOver
1731
1731
  accept=".csv,.xls,.xlsx"
1732
- @addFiles="(files) => { if (files[0]) processRelatedFile(selectedRelationField!.id, files[0]) }"
1732
+ browse
1733
+ @addFiles="(files) => processRelatedFile(selectedRelationField!.id, files)"
1733
1734
  >
1734
1735
  <Card class="flex flex-column items-center justify-center outline-dashed outline-3 hover bg-input">
1735
1736
  <Icon name="upload" size="5" />
@@ -1,12 +1,13 @@
1
1
  <script setup lang="ts">
2
2
  type LoadingType = 'ring' | 'ellipsis' | 'bar'
3
3
 
4
- const { type: theme = 'ring', size = 50, thickness, duration = 1.2, color } = defineProps<{
4
+ const { type: theme = 'ring', size = 50, thickness, duration = 1.2, color, progress } = defineProps<{
5
5
  size?: number | string
6
6
  thickness?: number | string
7
7
  duration?: number | string
8
8
  type?: LoadingType
9
9
  color?: string
10
+ progress?: number
10
11
  }>()
11
12
 
12
13
  // Ensure size and units are correctly formatted
@@ -18,16 +19,23 @@ function standardSize(value: number | string | undefined, unit = 'px') {
18
19
  // Computed Values
19
20
  const computedSize = $computed(() => standardSize(size))
20
21
  const animationDuration = $computed(() => `${duration}s`)
21
-
22
- // Border size for ring theme (defaults to 1/8th of the size)
23
22
  const computedBorder = $computed(() => {
24
23
  const borderValue = thickness ?? Math.max(Number.parseInt(computedSize) / 9, 2)
25
24
  return standardSize(borderValue)
26
25
  })
26
+
27
+ // SVG progress calculations
28
+ const svgStrokeWidth = $computed(() => {
29
+ const borderNumeric = Number.parseFloat(computedBorder)
30
+ const sizeNumeric = Number.parseFloat(computedSize)
31
+ return Math.round((borderNumeric / sizeNumeric) * 100) * 0.9
32
+ })
33
+ const svgRadius = $computed(() => 50 - (svgStrokeWidth / 2))
34
+ const svgCircumference = $computed(() => Math.PI * 2 * svgRadius)
27
35
  </script>
28
36
 
29
37
  <template>
30
- <div class="flex-center">
38
+ <div class="flex-center" :style="{ '--progress': progress }" :class="{ progress: progress !== undefined }">
31
39
  <!-- Bar Theme -->
32
40
  <div v-if="theme === 'bar'" class="lds-bar" :style="{ animationDuration, color }" />
33
41
 
@@ -38,12 +46,24 @@ const computedBorder = $computed(() => {
38
46
 
39
47
  <!-- Ring Theme -->
40
48
  <div v-if="theme === 'ring'" class="lds-ring" :style="{ '--size': computedSize, '--thickness': computedBorder }">
49
+ <template v-if="progress !== undefined">
50
+ <svg :width="computedSize" :height="computedSize" viewBox="0 0 100 100">
51
+ <circle
52
+ cx="50" cy="50" :r="svgRadius" fill="none" :stroke="color || 'currentColor'"
53
+ :stroke-width="svgStrokeWidth" stroke-opacity="0.2"
54
+ />
55
+ <circle
56
+ cx="50" cy="50" :r="svgRadius" fill="none" :stroke="color || 'currentColor'"
57
+ :stroke-width="svgStrokeWidth" stroke-linecap="round"
58
+ :stroke-dasharray="`${(progress / 100) * svgCircumference} ${svgCircumference}`"
59
+ transform="rotate(-90 50 50)"
60
+ />
61
+ </svg>
62
+ </template>
41
63
  <div
42
- v-for="n in 4" :key="n"
43
- :style="{
64
+ v-for="n in 4" v-else :key="n" :style="{
44
65
  color,
45
- 'width':
46
- computedSize,
66
+ 'width': computedSize,
47
67
  'height': computedSize,
48
68
  'borderWidth': computedBorder,
49
69
  '--animation-duration': animationDuration,
@@ -58,7 +78,7 @@ const computedBorder = $computed(() => {
58
78
  <style scoped>
59
79
  /* Bar Theme */
60
80
  .lds-bar {
61
- height: 4px;
81
+ height: var(--thickness);
62
82
  width: 100%;
63
83
  max-width: 130px;
64
84
  --c: no-repeat linear-gradient(currentColor 0 0);
@@ -67,14 +87,21 @@ const computedBorder = $computed(() => {
67
87
  animation: bar-animation 3s infinite ease-in-out;
68
88
  }
69
89
 
90
+ .progress .lds-bar {
91
+ background-size: calc(var(--progress) * 1%) 100%;
92
+ transition: background-size 0.2s ease;
93
+ background-position: 0 0;
94
+ animation: none;
95
+ }
96
+
70
97
  @keyframes bar-animation {
71
98
  0% { background-position: -150% 0, -150% 0 }
72
99
  66% { background-position: 250% 0, -150% 0 }
73
100
  100% { background-position: 250% 0, 250% 0 }
74
101
  }
75
102
 
76
- .lds-ring,
77
- .lds-ring div {
103
+ /* Ring Theme */
104
+ .lds-ring, .lds-ring div {
78
105
  box-sizing: border-box;
79
106
  }
80
107
  .lds-ring {
@@ -84,8 +111,12 @@ const computedBorder = $computed(() => {
84
111
  transform: translate(calc(var(--thickness) * -1), calc(var(--thickness) * -1));
85
112
  direction: ltr;
86
113
  }
114
+ .progress .lds-ring svg {
115
+ position: absolute;
116
+ top: var(--thickness);
117
+ left: var(--thickness);
118
+ }
87
119
  .lds-ring div {
88
- box-sizing: border-box;
89
120
  display: block;
90
121
  position: absolute;
91
122
  width: calc(var(--size) / 1.25);
@@ -96,28 +127,17 @@ const computedBorder = $computed(() => {
96
127
  animation: lds-ring var(--animation-duration) cubic-bezier(0.5, 0, 0.5, 1) infinite;
97
128
  border-color: currentColor transparent transparent transparent;
98
129
  }
99
-
100
- .lds-ring div:nth-child(1) {
101
- animation-delay: calc(var(--animation-duration) * -0.38);
102
- }
103
- .lds-ring div:nth-child(2) {
104
- animation-delay: calc(var(--animation-duration) / -4);
105
- }
106
- .lds-ring div:nth-child(3) {
107
- animation-delay: calc(var(--animation-duration) / -8);
108
- }
130
+ .lds-ring div:nth-child(1) { animation-delay: calc(var(--animation-duration) * -0.38); }
131
+ .lds-ring div:nth-child(2) { animation-delay: calc(var(--animation-duration) / -4); }
132
+ .lds-ring div:nth-child(3) { animation-delay: calc(var(--animation-duration) / -8); }
109
133
 
110
134
  @keyframes lds-ring {
111
- 0% {
112
- transform: rotate(0deg);
113
- }
114
- 100% {
115
- transform: rotate(360deg);
116
- }
135
+ 0% { transform: rotate(0deg); }
136
+ 100% { transform: rotate(360deg); }
117
137
  }
118
138
 
119
- .lds-ellipsis,
120
- .lds-ellipsis div {
139
+ /* Ellipsis Theme */
140
+ .lds-ellipsis, .lds-ellipsis div {
121
141
  box-sizing: border-box;
122
142
  }
123
143
  .lds-ellipsis {
@@ -128,9 +148,9 @@ const computedBorder = $computed(() => {
128
148
  }
129
149
  .lds-ellipsis div {
130
150
  position: absolute;
131
- top: calc(var(--size) - 40%);
151
+ top: calc(var(--size) / 2 - calc(var(--size) / 10));
132
152
  width: calc(var(--size) / 5);
133
- height:calc(var(--size) / 5);
153
+ height: calc(var(--size) / 5);
134
154
  border-radius: 50%;
135
155
  background: currentColor;
136
156
  animation-timing-function: cubic-bezier(0, 1, 1, 0);
@@ -152,27 +172,15 @@ const computedBorder = $computed(() => {
152
172
  animation: lds-ellipsis3 0.6s infinite;
153
173
  }
154
174
  @keyframes lds-ellipsis1 {
155
- 0% {
156
- transform: scale(0);
157
- }
158
- 100% {
159
- transform: scale(1);
160
- }
175
+ 0% { transform: scale(0); }
176
+ 100% { transform: scale(1); }
161
177
  }
162
178
  @keyframes lds-ellipsis3 {
163
- 0% {
164
- transform: scale(1);
165
- }
166
- 100% {
167
- transform: scale(0);
168
- }
179
+ 0% { transform: scale(1); }
180
+ 100% { transform: scale(0); }
169
181
  }
170
182
  @keyframes lds-ellipsis2 {
171
- 0% {
172
- transform: translate(0, 0);
173
- }
174
- 100% {
175
- transform: translate(calc(var(--size) / 3.33), 0);
176
- }
183
+ 0% { transform: translate(0, 0); }
184
+ 100% { transform: translate(calc(var(--size) / 3.33), 0); }
177
185
  }
178
186
  </style>
@@ -15,7 +15,7 @@ import {
15
15
  } from 'vue'
16
16
  import '../styles/modal.css'
17
17
 
18
- const props = defineProps<{
18
+ interface ModalProps {
19
19
  thin?: boolean
20
20
  side?: boolean
21
21
  title?: string
@@ -23,7 +23,13 @@ const props = defineProps<{
23
23
  dismissable?: boolean
24
24
  actions?: BtnOptions[]
25
25
  visible?: boolean
26
- }>()
26
+ }
27
+ const props = withDefaults(defineProps<ModalProps>(), {
28
+ thin: false,
29
+ side: false,
30
+ dismissable: true,
31
+ visible: false,
32
+ })
27
33
 
28
34
  const emit = defineEmits(['update:visible'])
29
35
 
@@ -79,6 +85,7 @@ onUnmounted(() => {
79
85
  <header v-if="slots.toolbar || title" class="tool-bar">
80
86
  <slot name="toolbar" />
81
87
  <Btn
88
+ v-if="dismissable"
82
89
  :style="{ float: side ? 'left' : 'right' }"
83
90
  flat
84
91
  icon="close"
@@ -90,6 +97,7 @@ onUnmounted(() => {
90
97
 
91
98
  <div v-else class="sticky z-index-999 -mt-1 -ms-1 px-025 h-30px pt-025 modal-no-title">
92
99
  <Btn
100
+ v-if="dismissable"
93
101
  class="position-start"
94
102
  icon="close"
95
103
  thin
@@ -126,8 +134,6 @@ onUnmounted(() => {
126
134
  margin-top: 0.5rem;
127
135
  margin-bottom: 0 !important;
128
136
  width: 100%;
129
- -webkit-padding-end: 40px;
130
- padding-inline-end: 40px;
131
137
  line-height: 2;
132
138
  display: -webkit-box;
133
139
  max-width: 100%;
@@ -7,7 +7,7 @@ import {
7
7
  keyToLabel,
8
8
  getNestedValue
9
9
  } from '@bagelink/vue'
10
- import { useSlots, watch, computed } from 'vue'
10
+ import { useSlots, watch, computed, toValue } from 'vue'
11
11
  import { useSchemaField } from '../../composables/useSchemaField'
12
12
  import { useTableData } from './useTableData'
13
13
  import { useTableSelection } from './useTableSelection'
@@ -30,12 +30,6 @@ const loading = defineModel('loading', { default: false })
30
30
  const itemHeight = defineModel('itemHeight', { default: 50 })
31
31
  const selectedItems = defineModel<string[]>('selectedItems', { default: [] as string[] })
32
32
 
33
- // Create computed properties to wrap the props
34
- const data = computed(() => props.data)
35
- const schema = computed(() => props.schema as any)
36
- const columns = computed(() => props.columns as any)
37
- const useServerSort = computed(() => props.useServerSort as any)
38
-
39
33
  const {
40
34
  computedSchema,
41
35
  computedData,
@@ -44,10 +38,10 @@ const {
44
38
  toggleSort,
45
39
  cleanTransformedData
46
40
  } = useTableData<T>({
47
- data,
48
- schema,
49
- columns,
50
- useServerSort,
41
+ data: computed(() => props.data),
42
+ schema: computed(() => toValue(props.schema)),
43
+ columns: computed(() => toValue(props.columns)),
44
+ useServerSort: computed(() => toValue(props.useServerSort)),
51
45
  onSort: (field, direction) => {
52
46
  emit('orderBy', `${field.trim()} ${direction.trim()}` as EmitOrderT)
53
47
  }
@@ -1,5 +1,5 @@
1
1
  import type { BglFormSchemaT } from '@bagelink/vue'
2
- import type { ComputedRef, MaybeRefOrGetter } from 'vue'
2
+ import type { MaybeRefOrGetter } from 'vue'
3
3
  import type { SortDirectionsT } from '../../types/TableSchema'
4
4
  import { useBglSchema, isDate, keyToLabel } from '@bagelink/vue'
5
5
  import { computed, ref, watch, toValue } from 'vue'
@@ -14,10 +14,10 @@ const SRC_VALUE_COMPONENTS = new Set(['img', 'iframe'])
14
14
 
15
15
  // Extend the base options interface to include computed refs
16
16
  export interface UseTableDataOptions<T> {
17
- data: ComputedRef<T[]>
18
- schema?: MaybeRefOrGetter<BglFormSchemaT<T>>
19
- columns?: MaybeRefOrGetter<string[]>
20
- useServerSort?: MaybeRefOrGetter<boolean>
17
+ data: MaybeRefOrGetter<T[]>
18
+ schema?: MaybeRefOrGetter<BglFormSchemaT<T> | undefined>
19
+ columns?: MaybeRefOrGetter<string[] | undefined>
20
+ useServerSort?: MaybeRefOrGetter<boolean | undefined>
21
21
  onSort?: (field: string, direction: SortDirectionsT) => void
22
22
  }
23
23
 
@@ -44,7 +44,7 @@ export function useTableData<T extends { [key: string]: any }>(options: UseTable
44
44
  schemaState.value = 'loading'
45
45
 
46
46
  // Get the data safely
47
- const dataValue = options.data.value || []
47
+ const dataValue = toValue(options.data) || []
48
48
 
49
49
  // Get the schema from useBglSchema
50
50
  const schema = useBglSchema<T>({
@@ -100,6 +100,9 @@ export function useTableData<T extends { [key: string]: any }>(options: UseTable
100
100
  const computedSchema = computed(() => resolvedSchema.value)
101
101
 
102
102
  function transform(rowData: T): TransformedData<T> {
103
+ // TODO: only use type casting in the return statement
104
+ // TODO: replace assignments with Object.assign(transformed, {[key]: value})
105
+
103
106
  const transformed = { ...rowData } as TransformedData<T>
104
107
  const schemaFields = computedSchema.value.filter((f: any) => f.id)
105
108
 
@@ -150,16 +153,14 @@ export function useTableData<T extends { [key: string]: any }>(options: UseTable
150
153
 
151
154
  const computedData = computed(() => {
152
155
  // Get the data safely
153
- const currentData = options.data.value || []
156
+ const currentData = toValue(options.data) || []
154
157
 
155
158
  // If there's no data, return an empty array
156
159
  if (!Array.isArray(currentData) || currentData.length === 0) {
157
160
  return []
158
161
  }
159
162
 
160
- const useServerSortValue = $computed(() => toValue(options.useServerSort))
161
-
162
- if (!sortField.value || useServerSortValue === true) {
163
+ if (!sortField.value || toValue(options.useServerSort) === true) {
163
164
  return currentData.map(transform)
164
165
  }
165
166