@bagelink/vue 0.0.466 → 0.0.471

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 (179) hide show
  1. package/dist/components/Accordion.vue.d.ts.map +1 -1
  2. package/dist/components/AccordionItem.vue.d.ts.map +1 -1
  3. package/dist/components/Alert.vue.d.ts +2 -2
  4. package/dist/components/Alert.vue.d.ts.map +1 -1
  5. package/dist/components/Avatar.vue.d.ts.map +1 -1
  6. package/dist/components/Badge.vue.d.ts +2 -2
  7. package/dist/components/Badge.vue.d.ts.map +1 -1
  8. package/dist/components/BglVideo.vue.d.ts +2 -2
  9. package/dist/components/BglVideo.vue.d.ts.map +1 -1
  10. package/dist/components/Btn.vue.d.ts.map +1 -1
  11. package/dist/components/Card.vue.d.ts.map +1 -1
  12. package/dist/components/Carousel.vue.d.ts +4 -2
  13. package/dist/components/Carousel.vue.d.ts.map +1 -1
  14. package/dist/components/DataPreview.vue.d.ts.map +1 -1
  15. package/dist/components/Drop.vue.d.ts +34 -0
  16. package/dist/components/Drop.vue.d.ts.map +1 -0
  17. package/dist/components/FileUploader.vue.d.ts +60 -0
  18. package/dist/components/FileUploader.vue.d.ts.map +1 -0
  19. package/dist/components/Flag.vue.d.ts +2 -2
  20. package/dist/components/Flag.vue.d.ts.map +1 -1
  21. package/dist/components/ListItem.vue.d.ts.map +1 -1
  22. package/dist/components/ListView.vue.d.ts.map +1 -1
  23. package/dist/components/MapEmbed.vue.d.ts +2 -2
  24. package/dist/components/MapEmbed.vue.d.ts.map +1 -1
  25. package/dist/components/MaterialIcon.vue.d.ts.map +1 -1
  26. package/dist/components/Modal.vue.d.ts +2 -1
  27. package/dist/components/Modal.vue.d.ts.map +1 -1
  28. package/dist/components/ModalConfirm.vue.d.ts.map +1 -1
  29. package/dist/components/ModalForm.vue.d.ts.map +1 -1
  30. package/dist/components/NavBar.vue.d.ts.map +1 -1
  31. package/dist/components/PageTitle.vue.d.ts.map +1 -1
  32. package/dist/components/TableSchema.vue.d.ts.map +1 -1
  33. package/dist/components/Title.vue.d.ts.map +1 -1
  34. package/dist/components/dashboard/Lineart.vue.d.ts.map +1 -1
  35. package/dist/components/dashboard/index.d.ts.map +1 -1
  36. package/dist/components/form/BglField.vue.d.ts.map +1 -1
  37. package/dist/components/form/BglForm.vue.d.ts +4 -2
  38. package/dist/components/form/BglForm.vue.d.ts.map +1 -1
  39. package/dist/components/form/ItemRef.vue.d.ts +1 -0
  40. package/dist/components/form/ItemRef.vue.d.ts.map +1 -1
  41. package/dist/components/form/index.d.ts.map +1 -1
  42. package/dist/components/form/inputs/CheckInput.vue.d.ts.map +1 -1
  43. package/dist/components/form/inputs/Checkbox.vue.d.ts.map +1 -1
  44. package/dist/components/form/inputs/ColorPicker.vue.d.ts.map +1 -1
  45. package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
  46. package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
  47. package/dist/components/form/inputs/FileUpload.vue.d.ts +2 -1
  48. package/dist/components/form/inputs/FileUpload.vue.d.ts.map +1 -1
  49. package/dist/components/form/inputs/JSONInput.vue.d.ts.map +1 -1
  50. package/dist/components/form/inputs/RadioPillsInput.vue.d.ts.map +1 -1
  51. package/dist/components/form/inputs/RichText.vue.d.ts.map +1 -1
  52. package/dist/components/form/inputs/SelectField.vue.d.ts +1 -4
  53. package/dist/components/form/inputs/SelectField.vue.d.ts.map +1 -1
  54. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  55. package/dist/components/form/inputs/SignaturePad.vue.d.ts +56 -0
  56. package/dist/components/form/inputs/SignaturePad.vue.d.ts.map +1 -0
  57. package/dist/components/form/inputs/TableField.vue.d.ts.map +1 -1
  58. package/dist/components/form/inputs/TelInput.vue.d.ts +2 -2
  59. package/dist/components/form/inputs/TelInput.vue.d.ts.map +1 -1
  60. package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
  61. package/dist/components/form/inputs/ToggleInput.vue.d.ts.map +1 -1
  62. package/dist/components/form/inputs/index.d.ts +1 -0
  63. package/dist/components/form/inputs/index.d.ts.map +1 -1
  64. package/dist/components/index.d.ts.map +1 -1
  65. package/dist/components/layout/BottomMenu.vue.d.ts.map +1 -1
  66. package/dist/components/layout/Layout.vue.d.ts +2 -2
  67. package/dist/components/layout/Layout.vue.d.ts.map +1 -1
  68. package/dist/components/layout/SidebarMenu.vue.d.ts.map +1 -1
  69. package/dist/components/layout/TabbedLayout.vue.d.ts.map +1 -1
  70. package/dist/components/layout/Tabs.vue.d.ts.map +1 -1
  71. package/dist/components/layout/TabsBody.vue.d.ts.map +1 -1
  72. package/dist/components/layout/TabsNav.vue.d.ts.map +1 -1
  73. package/dist/components/layout/index.d.ts.map +1 -1
  74. package/dist/index.cjs +17616 -20818
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.mjs +17616 -20818
  77. package/dist/plugins/bagel.d.ts +1 -1
  78. package/dist/plugins/bagel.d.ts.map +1 -1
  79. package/dist/plugins/modal.d.ts +14 -14
  80. package/dist/plugins/modal.d.ts.map +1 -1
  81. package/dist/style.css +330 -309
  82. package/dist/types/BagelForm.d.ts +16 -16
  83. package/dist/types/BagelForm.d.ts.map +1 -1
  84. package/dist/types/BtnOptions.d.ts +1 -1
  85. package/dist/types/BtnOptions.d.ts.map +1 -1
  86. package/dist/types/NavLink.d.ts +2 -2
  87. package/dist/types/NavLink.d.ts.map +1 -1
  88. package/dist/types/file.d.ts +2 -2
  89. package/dist/types/file.d.ts.map +1 -1
  90. package/dist/types/index.d.ts.map +1 -1
  91. package/dist/types/materialIcons.d.ts.map +1 -1
  92. package/dist/utils/BagelFormUtils.d.ts.map +1 -1
  93. package/dist/utils/allCountries.d.ts +2 -2
  94. package/dist/utils/allCountries.d.ts.map +1 -1
  95. package/dist/utils/clickOutside.d.ts.map +1 -1
  96. package/dist/utils/index.d.ts +5 -5
  97. package/dist/utils/index.d.ts.map +1 -1
  98. package/package.json +19 -17
  99. package/src/components/Accordion.vue +10 -10
  100. package/src/components/AccordionItem.vue +47 -47
  101. package/src/components/Alert.vue +21 -21
  102. package/src/components/Avatar.vue +15 -15
  103. package/src/components/Badge.vue +17 -16
  104. package/src/components/BglVideo.vue +43 -43
  105. package/src/components/Btn.vue +64 -65
  106. package/src/components/Card.vue +26 -26
  107. package/src/components/Carousel.vue +130 -134
  108. package/src/components/DataPreview.vue +30 -30
  109. package/src/components/Flag.vue +26 -26
  110. package/src/components/ListItem.vue +13 -13
  111. package/src/components/ListView.vue +2 -2
  112. package/src/components/MapEmbed.vue +33 -33
  113. package/src/components/MaterialIcon.vue +12 -12
  114. package/src/components/Modal.vue +73 -66
  115. package/src/components/ModalConfirm.vue +18 -18
  116. package/src/components/ModalForm.vue +79 -76
  117. package/src/components/NavBar.vue +33 -30
  118. package/src/components/PageTitle.vue +10 -8
  119. package/src/components/TableSchema.vue +123 -113
  120. package/src/components/Title.vue +8 -8
  121. package/src/components/dashboard/Lineart.vue +103 -96
  122. package/src/components/dashboard/index.ts +1 -1
  123. package/src/components/form/BglField.vue +61 -61
  124. package/src/components/form/BglFieldSet.vue +9 -8
  125. package/src/components/form/BglForm.vue +71 -70
  126. package/src/components/form/index.ts +4 -4
  127. package/src/components/form/inputs/CheckInput.vue +25 -23
  128. package/src/components/form/inputs/Checkbox.vue +10 -10
  129. package/src/components/form/inputs/ColorPicker.vue +26 -24
  130. package/src/components/form/inputs/DateInput.vue +39 -39
  131. package/src/components/form/inputs/DatePicker.vue +37 -36
  132. package/src/components/form/inputs/FileUpload.vue +165 -161
  133. package/src/components/form/inputs/FileUploadURL.vue +134 -132
  134. package/src/components/form/inputs/JSONInput.vue +29 -29
  135. package/src/components/form/inputs/RadioPillsInput.vue +49 -49
  136. package/src/components/form/inputs/RichText.vue +62 -63
  137. package/src/components/form/inputs/SelectInput.vue +173 -167
  138. package/src/components/form/inputs/SignaturePad.vue +150 -0
  139. package/src/components/form/inputs/TableField.vue +77 -76
  140. package/src/components/form/inputs/TelInput.vue +280 -285
  141. package/src/components/form/inputs/TextInput.vue +81 -76
  142. package/src/components/form/inputs/ToggleInput.vue +13 -13
  143. package/src/components/form/inputs/index.ts +17 -15
  144. package/src/components/formkit/FileUploader.vue +162 -158
  145. package/src/components/formkit/MiscFields.vue +20 -20
  146. package/src/components/formkit/Toggle.vue +13 -13
  147. package/src/components/index.ts +28 -28
  148. package/src/components/layout/BottomMenu.vue +25 -21
  149. package/src/components/layout/Layout.vue +29 -29
  150. package/src/components/layout/SidebarMenu.vue +31 -27
  151. package/src/components/layout/TabbedLayout.vue +47 -45
  152. package/src/components/layout/Tabs.vue +32 -32
  153. package/src/components/layout/TabsBody.vue +10 -10
  154. package/src/components/layout/TabsNav.vue +44 -44
  155. package/src/components/layout/index.ts +7 -7
  156. package/src/components/layout/tabsManager.ts +6 -6
  157. package/src/index.ts +13 -8
  158. package/src/plugins/bagel.ts +37 -37
  159. package/src/plugins/modal.ts +66 -67
  160. package/src/styles/layout.css +5 -3
  161. package/src/styles/mobilLayout.css +7 -0
  162. package/src/types/BagelForm.ts +27 -27
  163. package/src/types/BtnOptions.ts +13 -13
  164. package/src/types/NavLink.ts +8 -8
  165. package/src/types/file.ts +11 -11
  166. package/src/types/index.ts +16 -12
  167. package/src/types/materialIcons.ts +3249 -3249
  168. package/src/utils/BagelFormUtils.ts +23 -23
  169. package/src/utils/allCountries.ts +11 -12
  170. package/src/utils/clickOutside.ts +6 -6
  171. package/src/utils/index.ts +39 -41
  172. package/src/utils/lang.ts +13 -13
  173. package/src/utils/strings.ts +9 -9
  174. package/tsconfig.json +0 -1
  175. package/vite.config.ts +8 -8
  176. package/dist/components/Popover.vue.d.ts +0 -10
  177. package/dist/components/Popover.vue.d.ts.map +0 -1
  178. package/dist/types/materialIcon.d.ts +0 -2
  179. package/dist/types/materialIcon.d.ts.map +0 -1
@@ -1,11 +1,130 @@
1
+ <script setup lang="ts">
2
+ import { useSlots } from 'vue'
3
+ import {
4
+ BglField,
5
+ type BglFormSchemaT,
6
+ MaterialIcon,
7
+ keyToLabel,
8
+ } from '@bagelink/vue'
9
+
10
+ const props = defineProps<{
11
+ selecteItems?: string[]
12
+ data: any[]
13
+ schema?: BglFormSchemaT | (() => BglFormSchemaT)
14
+ showFields?: string[]
15
+ }>()
16
+ const emit = defineEmits(['update:selecteItems', 'orderBy', 'select'])
17
+ const slots = useSlots()
18
+ const loading = $ref(true)
19
+
20
+ let selecteItems = $ref<string[]>(props.selecteItems || [])
21
+ let selected = $computed({
22
+ get: () => selecteItems,
23
+ set: (value: string[]) => {
24
+ selecteItems = value
25
+ emit('update:selecteItems', value)
26
+ },
27
+ })
28
+
29
+ function selectElement(item: Record<string, any>) { emit('select', item) }
30
+
31
+ let sortDirection = $ref('ASC')
32
+ let sortField = $ref('')
33
+
34
+ function getFallbackSchema() {
35
+ const keys = [
36
+ ...new Set((props.data || []).map(Object.keys).flat()),
37
+ ] as string[]
38
+ const schema: BglFormSchemaT = keys.map(id => ({
39
+ id,
40
+ label: keyToLabel(id),
41
+ }))
42
+ return props.showFields
43
+ ? schema.filter(f => props.showFields?.includes(f.id as string) || !f.id)
44
+ : schema
45
+ }
46
+
47
+ const computedSchema = $computed(() => {
48
+ let _schema = props.schema
49
+ if (typeof _schema === 'function') {
50
+ _schema = _schema()
51
+ }
52
+ if (_schema) {
53
+ return props.showFields
54
+ ? _schema.filter(f => props.showFields?.includes(f.id as string))
55
+ : _schema
56
+ }
57
+ return getFallbackSchema()
58
+ })
59
+
60
+ function transform(rowData: any) {
61
+ const obj: Record<string, any> = { ...rowData }
62
+ const fields = computedSchema.filter(f => f.id)
63
+
64
+ for (const field of fields) {
65
+ const fieldData = rowData[`${field.id}`]
66
+
67
+ const newFieldVal = field.transform?.(fieldData, rowData) || fieldData || ''
68
+
69
+ Object.assign(obj, {
70
+ [`${field.id}`]: newFieldVal
71
+ })
72
+ }
73
+ return obj
74
+ }
75
+
76
+ const computedData = $computed(() => {
77
+ const dta = [...props.data].map(transform)
78
+ if (sortField as string) {
79
+ return dta.sort((a, b) => {
80
+ const aValue = a[sortField]
81
+ const bValue = b[sortField]
82
+ const numAValue = Number.parseInt(aValue, 10)
83
+ const numBValue = Number.parseInt(bValue, 10)
84
+ if (!Number.isNaN(numAValue) && !Number.isNaN(numBValue)) {
85
+ if (sortDirection === 'ASC') return numAValue - numBValue
86
+ return numBValue - numAValue
87
+ }
88
+ if (typeof aValue === 'string') {
89
+ if (sortDirection === 'ASC') return aValue.localeCompare(bValue)
90
+ return bValue.localeCompare(aValue)
91
+ }
92
+ if (sortDirection === 'ASC') return aValue < bValue ? -1 : 1
93
+ return aValue < bValue ? 1 : -1
94
+ })
95
+ }
96
+ return dta
97
+ })
98
+
99
+ function selectAll(event: PointerEvent) {
100
+ const value = (event.target as HTMLInputElement).checked
101
+ if (!value) {
102
+ selected = []
103
+ return
104
+ }
105
+ selected.push(...computedData.map(d => d.id))
106
+ }
107
+
108
+ function sort(fieldname: string) {
109
+ if (sortField === fieldname) {
110
+ if (sortDirection === 'ASC') sortDirection = 'DESC'
111
+ else sortField = ''
112
+ } else {
113
+ sortField = fieldname
114
+ sortDirection = 'ASC'
115
+ }
116
+ emit('orderBy', `${fieldname} ${sortDirection}`.trim())
117
+ }
118
+ </script>
119
+
1
120
  <template>
2
121
  <div class="table-list-wrap h-100">
3
122
  <table class="infinite-wrapper">
4
123
  <thead class="row first-row">
5
124
  <th
6
- class="col"
7
125
  v-for="field in computedSchema"
8
126
  :key="field.id"
127
+ class="col"
9
128
  @click="sort(field?.id || '')"
10
129
  >
11
130
  <div class="flex">
@@ -22,20 +141,21 @@
22
141
  </div>
23
142
  </th>
24
143
  </thead>
144
+ <!-- eslint-disable-next-line vue/no-unused-refs TODO: Can we remove the unused ref ??? -->
25
145
  <tbody ref="infinite" class="rows infinite" :class="{ loading }">
26
146
  <tr
27
147
  v-for="row in computedData"
28
148
  :key="row.id"
29
- @click="selectElement(row)"
30
149
  class="row row-item position-relative"
150
+ @click="selectElement(row)"
31
151
  >
32
152
  <td
33
- class="col"
34
153
  v-for="field in computedSchema.map((c) => ({
35
154
  ...c,
36
155
  transform: undefined,
37
156
  }))"
38
157
  :key="`${field.id}-${row.id}`"
158
+ class="col"
39
159
  >
40
160
  <slot
41
161
  v-if="field.id && slots[field.id]"
@@ -58,116 +178,6 @@
58
178
  </div>
59
179
  </template>
60
180
 
61
- <script setup lang="ts">
62
- import { useSlots } from 'vue';
63
- import {
64
- type BglFormSchemaT,
65
- MaterialIcon,
66
- BglField,
67
- keyToLabel,
68
- } from '@bagelink/vue';
69
-
70
- const slots = useSlots();
71
- const loading = $ref(true);
72
-
73
- const props = defineProps<{
74
- selecteItems?: string[];
75
- data: any[];
76
- schema?: BglFormSchemaT | (() => BglFormSchemaT);
77
- showFields?: string[];
78
- }>();
79
-
80
- const emit = defineEmits(['update:selecteItems', 'orderBy', 'select']);
81
-
82
- let selecteItems = $ref<string[]>(props.selecteItems || []);
83
- let selected = $computed({
84
- get: () => selecteItems,
85
- set: (value: string[]) => {
86
- selecteItems = value;
87
- emit('update:selecteItems', value);
88
- },
89
- });
90
-
91
- function selectAll(event: PointerEvent) {
92
- const value = (event.target as HTMLInputElement).checked;
93
- if (!value) {
94
- selected = [];
95
- return;
96
- }
97
- selected.push(...computedData.map((d) => d.id));
98
- }
99
-
100
- const computedSchema = $computed(() => {
101
- if (typeof props.schema === 'function') {
102
- return props.schema();
103
- }
104
- if (props.schema) {
105
- return props.showFields
106
- ? props.schema.filter((f) => props.showFields?.includes(f.id as string))
107
- : props.schema;
108
- }
109
- const keys = [
110
- ...new Set((props.data || []).map(Object.keys).flat()),
111
- ] as string[];
112
- const schema: BglFormSchemaT = keys.map((id) => ({
113
- id,
114
- label: keyToLabel(id),
115
- }));
116
- return props.showFields
117
- ? schema.filter((f) => props.showFields?.includes(f.id as string) || !f.id)
118
- : schema;
119
- });
120
-
121
- const selectElement = (item: Record<string, any>) => emit('select', item);
122
-
123
- let sortDirection = $ref('ASC');
124
- let sortField = $ref('');
125
-
126
- const sort = (fieldname: string) => {
127
- if (sortField === fieldname) {
128
- if (sortDirection === 'ASC') sortDirection = 'DESC';
129
- else sortField = '';
130
- } else {
131
- sortField = fieldname;
132
- sortDirection = 'ASC';
133
- }
134
- emit('orderBy', `${fieldname} ${sortDirection}`.trim());
135
- };
136
-
137
- const transform = (rowData: any) => {
138
- const obj: Record<string, any> = { ...rowData };
139
- for (const field of computedSchema.filter((f) => f.id)) {
140
- const fieldData = rowData[field.id as string];
141
- obj[field.id as string] =
142
- field.transform?.(fieldData, rowData) || fieldData || '';
143
- }
144
- return obj;
145
- };
146
-
147
- const computedData = $computed(() => {
148
- const dta = [...props.data].map(transform);
149
- if (sortField) {
150
- return dta.sort((a, b) => {
151
- const aValue = a[sortField];
152
- const bValue = b[sortField];
153
- const numAValue = parseInt(aValue);
154
- const numBValue = parseInt(bValue);
155
- if (!isNaN(numAValue) && !isNaN(numBValue)) {
156
- if (sortDirection === 'ASC') return numAValue - numBValue;
157
- return numBValue - numAValue;
158
- }
159
- if (typeof aValue === 'string') {
160
- if (sortDirection === 'ASC') return aValue.localeCompare(bValue);
161
- return bValue.localeCompare(aValue);
162
- }
163
- if (sortDirection === 'ASC') return aValue < bValue ? -1 : 1;
164
- return aValue < bValue ? 1 : -1;
165
- });
166
- }
167
- return dta;
168
- });
169
- </script>
170
-
171
181
  <style scoped>
172
182
  .list-arrows {
173
183
  opacity: 0;
@@ -1,10 +1,3 @@
1
- <template>
2
- <component :is="tag">
3
- {{ label || value }}
4
- <slot />
5
- </component>
6
- </template>
7
-
8
1
  <script lang="ts" setup>
9
2
  defineProps({
10
3
  value: {
@@ -19,5 +12,12 @@ defineProps({
19
12
  type: String,
20
13
  default: 'h1',
21
14
  },
22
- });
15
+ })
23
16
  </script>
17
+
18
+ <template>
19
+ <component :is="tag">
20
+ {{ label || value }}
21
+ <slot />
22
+ </component>
23
+ </template>
@@ -1,3 +1,106 @@
1
+ <script lang="ts" setup>
2
+ import { onMounted, onUnmounted } from 'vue'
3
+ import {
4
+ Area,
5
+ Chart,
6
+ Grid,
7
+ Line,
8
+ Marker,
9
+ Tooltip,
10
+ } from 'vue3-charts'
11
+ import type { ChartAxis, Data } from 'vue3-charts/dist/types'
12
+
13
+ const props = defineProps<{ data: Data[], locale: string }>()
14
+
15
+ const data = $computed(() => (props.locale === 'he' ? [...props.data].reverse() : props.data))
16
+
17
+ interface Size {
18
+ width: number
19
+ height: number
20
+ }
21
+
22
+ // Computed properties
23
+ const meanValue = $computed(() => {
24
+ const sum = props.data.reduce((acc, curr) => acc + +curr.total_value, 0)
25
+ return sum / props.data.length
26
+ })
27
+
28
+ const axisConfig = $computed<ChartAxis>(() => ({
29
+ primary: {
30
+ type: 'band',
31
+ rotate: true,
32
+ ticks: 5,
33
+ domain: ['dataMin', 'dataMax'],
34
+ tickValues:
35
+ props.data.length > 100 ? [''] : props.data.map((d: any) => d.date),
36
+ },
37
+ secondary: {
38
+ domain: ['dataMin', 'dataMax * 1.05'],
39
+ type: 'linear',
40
+ ticks: 8,
41
+ },
42
+ }))
43
+
44
+ // Constants
45
+ const BRAND_COLOR = 'var(--bgl-primary)'
46
+
47
+ const tooltipConfiguration = {
48
+ date: { label: 'תאריך' },
49
+ total_value: {
50
+ color: BRAND_COLOR,
51
+ label: 'סכום',
52
+ format: (v: number) => `₪${v.toLocaleString() || ''}`,
53
+ },
54
+ total_count: {
55
+ label: 'מספר התרומות',
56
+ format: (v: number) => `${v.toLocaleString() || ''}`,
57
+ },
58
+ }
59
+
60
+ // Refs
61
+ let chartSize = $ref<Size | null>(null)
62
+ const chartContainer = $ref<HTMLElement>()
63
+ const displayMarker = $ref(true)
64
+ const chartMargin = $ref({
65
+ left: 0,
66
+ top: 0,
67
+ right: 0,
68
+ bottom: 0,
69
+ })
70
+
71
+ // Functions
72
+ function adjustChartSize() {
73
+ chartSize = null
74
+ const el = chartContainer
75
+ if (!el) return
76
+ const { width, height } = el.getBoundingClientRect()
77
+ chartSize = { width: width - 5, height: height - 10 }
78
+ console.log(chartSize)
79
+ }
80
+
81
+ function handleResize() {
82
+ setTimeout(adjustChartSize, 300)
83
+ }
84
+
85
+ // Lifecycle hooks
86
+ onMounted(() => {
87
+ adjustChartSize()
88
+ window.addEventListener('resize', handleResize)
89
+ })
90
+
91
+ onUnmounted(() => {
92
+ window.removeEventListener('resize', handleResize)
93
+ })
94
+
95
+ // Style Configurations
96
+ function dotStyling(ctx: Record<string, any>) {
97
+ return {
98
+ r: ctx.active ? 5 : 1,
99
+ fill: BRAND_COLOR,
100
+ }
101
+ }
102
+ </script>
103
+
1
104
  <template>
2
105
  <div
3
106
  ref="chartContainer"
@@ -64,102 +167,6 @@
64
167
  </div>
65
168
  </template>
66
169
 
67
- <script lang="ts" setup>
68
- import { onMounted, onUnmounted } from 'vue';
69
- import {
70
- Chart, Grid, Line, Area, Tooltip, Marker,
71
- } from 'vue3-charts';
72
- import type { ChartAxis, Data } from 'vue3-charts/dist/types';
73
-
74
- const props = defineProps<{ data: Data[]; locale: string }>();
75
-
76
- const data = $computed(() => (props.locale === 'he' ? [...props.data].reverse() : props.data));
77
-
78
- interface Size {
79
- width: number;
80
- height: number;
81
- }
82
-
83
- // Computed properties
84
- const meanValue = $computed(() => {
85
- const sum = props.data.reduce((acc, curr) => acc + +curr.total_value, 0);
86
- return sum / props.data.length;
87
- });
88
-
89
- const axisConfig = $computed<ChartAxis>(() => ({
90
- primary: {
91
- type: 'band',
92
- rotate: true,
93
- ticks: 5,
94
- domain: ['dataMin', 'dataMax'],
95
- tickValues:
96
- props.data?.length > 100 ? [''] : props.data.map((d: any) => d.date),
97
- },
98
- secondary: {
99
- domain: ['dataMin', 'dataMax * 1.05'],
100
- type: 'linear',
101
- ticks: 8,
102
- },
103
- }));
104
-
105
- // Constants
106
- const BRAND_COLOR = 'var(--bgl-primary)';
107
-
108
- const tooltipConfiguration = {
109
- date: { label: 'תאריך' },
110
- total_value: {
111
- color: BRAND_COLOR,
112
- label: 'סכום',
113
- format: (v: number) => `₪${v?.toLocaleString?.() || ''}`,
114
- },
115
- total_count: {
116
- label: 'מספר התרומות',
117
- format: (v: number) => `${v?.toLocaleString?.() || ''}`,
118
- },
119
- };
120
-
121
- // Refs
122
- let chartSize = $ref<Size | null>(null);
123
- const chartContainer = $ref<HTMLElement>();
124
- const displayMarker = $ref(true);
125
- const chartMargin = $ref({
126
- left: 0,
127
- top: 0,
128
- right: 0,
129
- bottom: 0,
130
- });
131
-
132
- // Functions
133
- const adjustChartSize = () => {
134
- chartSize = null;
135
- const el = chartContainer;
136
- if (!el) return;
137
- const { width, height } = el.getBoundingClientRect();
138
- chartSize = { width: width - 5, height: height - 10 };
139
- console.log(chartSize);
140
- };
141
-
142
- const handleResize = () => {
143
- setTimeout(adjustChartSize, 300);
144
- };
145
-
146
- // Lifecycle hooks
147
- onMounted(() => {
148
- adjustChartSize();
149
- window.addEventListener('resize', handleResize);
150
- });
151
-
152
- onUnmounted(() => {
153
- window.removeEventListener('resize', handleResize);
154
- });
155
-
156
- // Style Configurations
157
- const dotStyling = (ctx: Record<string, any>) => ({
158
- r: ctx.active ? 5 : 1,
159
- fill: BRAND_COLOR,
160
- });
161
- </script>
162
-
163
170
  <style>
164
171
  .chart-line {
165
172
  width: 100%;
@@ -1 +1 @@
1
- export { default as Lineart } from './Lineart.vue';
1
+ export { default as Lineart } from './Lineart.vue'
@@ -1,90 +1,90 @@
1
- <template>
2
- <component
3
- :required="field.required"
4
- v-bind="bindAttrs(field?.attrs || {}, fieldData, modelValue)"
5
- :class="classify(fieldData, modelValue, field.class, field.attrs?.class)"
6
- v-if="vIf"
7
- :is="is"
8
- :label="field.label"
9
- :id="field.id"
10
- :placeholder="field.placeholder || field.label"
11
- v-model="fieldData"
12
- :defaultValue="field.defaultValue"
13
- :disabled="field.disabled"
14
- :options="
15
- bindAttrs({ options: field.options }, fieldData, modelValue).options
16
- "
17
- :helptext="field.helptext"
18
- @update:modelValue="($event: any) => field?.onUpdate?.($event, formData)"
19
- >
20
- {{ field.transform?.(fieldData, modelValue) || fieldData || '' }}
21
- <BglField
22
- v-model="formData"
23
- v-for="(child, ii) in field.children"
24
- :key="child.id || ii"
25
- :field="child"
26
- />
27
- </component>
28
- </template>
29
-
30
1
  <script lang="ts" setup>
31
2
  import {
3
+ CheckInput,
32
4
  type Field,
33
- bindAttrs,
34
- classify,
5
+ RichText,
35
6
  SelectInput,
36
7
  TextInput,
37
8
  ToggleInput,
38
- CheckInput,
39
- RichText,
40
- } from '@bagelink/vue';
9
+ bindAttrs,
10
+ classify,
11
+ } from '@bagelink/vue'
41
12
 
42
13
  const props = withDefaults(
43
14
  defineProps<{
44
- field: Field;
45
- modelValue: Record<string, any>;
15
+ field: Field
16
+ modelValue: Record<string, any>
46
17
  }>(),
47
18
  {
48
19
  modelValue: () => ({}),
49
20
  },
50
- );
21
+ )
51
22
 
52
- const is = $computed(() => {
53
- if (props.field.$el === 'text') return TextInput;
54
- if (props.field.$el === 'select') return SelectInput;
55
- if (props.field.$el === 'toggle') return ToggleInput;
56
- if (props.field.$el === 'check') return CheckInput;
57
- if (props.field.$el === 'richtext') return RichText;
58
- return props.field.$el || 'div';
59
- });
23
+ const emit = defineEmits(['update:modelValue'])
60
24
 
61
- const emit = defineEmits(['update:modelValue']);
25
+ const is = $computed(() => {
26
+ if (props.field.$el === 'text') return TextInput
27
+ if (props.field.$el === 'select') return SelectInput
28
+ if (props.field.$el === 'toggle') return ToggleInput
29
+ if (props.field.$el === 'check') return CheckInput
30
+ if (props.field.$el === 'richtext') return RichText
31
+ return props.field.$el || 'div'
32
+ })
62
33
 
63
34
  const formData = $computed({
64
35
  get: () => props.modelValue,
65
- set: (val: any) => emit('update:modelValue', val),
66
- });
36
+ set: (val: any) => { emit('update:modelValue', val) },
37
+ })
67
38
 
68
39
  const fieldData = $computed({
69
40
  set: (val: any) => {
70
- if (!props.field.id) return;
71
- const data = { ...props.modelValue } || {};
72
- data[props.field.id] = val;
73
- emit('update:modelValue', data);
41
+ if (!props.field.id) return
42
+ const data = { ...props.modelValue } || {}
43
+ data[props.field.id] = val
44
+ emit('update:modelValue', data)
74
45
  },
75
46
  get: () => {
76
- if (props.field.id) return props.modelValue[props.field.id];
77
- return props.field.defaultValue || '';
47
+ if (props.field.id) return props.modelValue[props.field.id]
48
+ return props.field.defaultValue || ''
78
49
  },
79
- });
50
+ })
80
51
 
81
52
  const vIf = $computed(() => {
82
- if (props.field['v-if'] === undefined) return true;
83
- if (typeof props.field['v-if'] === 'boolean') return props.field['v-if'];
84
- if (typeof props.field['v-if'] === 'string') return true;
53
+ if (props.field['v-if'] === undefined) return true
54
+ if (typeof props.field['v-if'] === 'boolean') return props.field['v-if']
55
+ if (typeof props.field['v-if'] === 'string') return true
85
56
  if (typeof props.field['v-if'] === 'function') {
86
- return props.field['v-if']?.(fieldData, formData);
57
+ return props.field['v-if'](fieldData, formData)
87
58
  }
88
- return true;
89
- });
59
+ return true
60
+ })
90
61
  </script>
62
+
63
+ <template>
64
+ <component
65
+ v-bind="bindAttrs(field?.attrs || {}, fieldData, modelValue)"
66
+ :is="is"
67
+ v-if="vIf"
68
+ :id="field.id"
69
+ v-model="fieldData"
70
+ :required="field.required"
71
+ :class="classify(fieldData, modelValue, field.class, field.attrs?.class)"
72
+ :label="field.label"
73
+ :placeholder="field.placeholder || field.label"
74
+ :defaultValue="field.defaultValue"
75
+ :disabled="field.disabled"
76
+ :options="
77
+ bindAttrs({ options: field.options }, fieldData, modelValue).options
78
+ "
79
+ :helptext="field.helptext"
80
+ @update:modelValue="($event: any) => field?.onUpdate?.($event, formData)"
81
+ >
82
+ {{ field.transform?.(fieldData, modelValue) || fieldData || '' }}
83
+ <BglField
84
+ v-for="(child, ii) in field.children"
85
+ :key="child.id || ii"
86
+ v-model="formData"
87
+ :field="child"
88
+ />
89
+ </component>
90
+ </template>
@@ -1,13 +1,14 @@
1
+ <script lang="ts" setup>
2
+ import { defineExpose } from 'vue'
3
+
4
+ const fieldSet = $ref<HTMLFieldSetElement | null>(null)
5
+ const isDirty = $ref(false)
6
+ const validateForm = () => fieldSet?.reportValidity()
7
+ defineExpose({ validateForm, isDirty })
8
+ </script>
9
+
1
10
  <template>
2
11
  <fieldset ref="fieldSet">
3
12
  <slot />
4
13
  </fieldset>
5
14
  </template>
6
- <script lang="ts" setup>
7
- import { defineExpose } from 'vue';
8
-
9
- const fieldSet = $ref<HTMLFieldSetElement | null>(null);
10
- const isDirty = $ref(false);
11
- const validateForm = () => fieldSet?.reportValidity?.();
12
- defineExpose({ validateForm, isDirty });
13
- </script>