@amirjalili1374/ui-kit 1.2.0 → 1.2.2

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 (141) hide show
  1. package/README.md +11 -11
  2. package/package.json +3 -3
  3. package/src/assets/fonts/A Massir Spray.ttf +0 -0
  4. package/src/assets/fonts/BYekan.ttf +0 -0
  5. package/src/assets/fonts/BYekan.woff +0 -0
  6. package/src/assets/fonts/BYekan.woff2 +0 -0
  7. package/src/assets/fonts/Dima Shekasteh 2 Free.ttf +0 -0
  8. package/src/assets/fonts/Dima Shekasteh Free Regular.ttf +0 -0
  9. package/src/assets/fonts/IRANSansWeb.ts +0 -1
  10. package/src/assets/fonts/IRANSansWeb.ttf +0 -0
  11. package/src/assets/fonts/IRANSansXBlack.ttf +0 -0
  12. package/src/assets/fonts/IRANSansXBold.ttf +0 -0
  13. package/src/assets/fonts/IRANSansXDemiBold.ttf +0 -0
  14. package/src/assets/fonts/IRANSansXExtraBold.ttf +0 -0
  15. package/src/assets/fonts/IRANSansXLight.ttf +0 -0
  16. package/src/assets/fonts/IRANSansXMedium.ttf +0 -0
  17. package/src/assets/fonts/IRANSansXRegular.ttf +0 -0
  18. package/src/assets/fonts/IRANSansXThin.ttf +0 -0
  19. package/src/assets/fonts/IRANSansXUltraLight.ttf +0 -0
  20. package/src/assets/fonts/IranNastaliq.ttf +0 -0
  21. package/src/assets/fonts/Vazir-Medium-FD.ttf +0 -0
  22. package/src/assets/fonts/Vazir-Medium-FD.woff +0 -0
  23. package/src/assets/fonts/Vazir-Medium-FD.woff2 +0 -0
  24. package/src/assets/fonts/Vazir-Regular-FD.eot +0 -0
  25. package/src/assets/fonts/kalamehBold.woff +0 -0
  26. package/src/assets/fonts/kalamehBold.woff2 +0 -0
  27. package/src/assets/fonts/kalamehHeavy.woff +0 -0
  28. package/src/assets/fonts/kalamehHeavy.woff2 +0 -0
  29. package/src/assets/fonts/kalamehLight.woff +0 -0
  30. package/src/assets/fonts/kalamehLight.woff2 +0 -0
  31. package/src/assets/fonts/kalamehRegular.woff +0 -0
  32. package/src/assets/fonts/kalamehRegular.woff2 +0 -0
  33. package/src/assets/images/auth/social-google.svg +0 -6
  34. package/src/assets/images/favicon.svg +0 -18
  35. package/src/assets/images/icons/icon-card.svg +0 -5
  36. package/src/assets/images/logos/logo.svg +0 -12
  37. package/src/assets/images/logos/logolight.svg +0 -12
  38. package/src/assets/images/maintenance/img-error-bg.svg +0 -34
  39. package/src/assets/images/maintenance/img-error-blue.svg +0 -43
  40. package/src/assets/images/maintenance/img-error-purple.svg +0 -42
  41. package/src/assets/images/maintenance/img-error-text.svg +0 -27
  42. package/src/assets/images/profile/profile-user-account-svgrepo-com.svg +0 -12
  43. package/src/assets/images/profile/user-round.svg +0 -15
  44. package/src/assets/images/template/template-01.ts +0 -1
  45. package/src/assets/images/vectors/colorized-bg.svg +0 -40
  46. package/src/assets/images/vectors/logo_stroke_1px.svg +0 -26
  47. package/src/assets/images/vectors/logo_stroke_2px.svg +0 -26
  48. package/src/assets/scss/components/_approval-sections.scss +0 -75
  49. package/src/assets/styles/fonts.scss +0 -77
  50. package/src/components/Loading.vue +0 -88
  51. package/src/components/common/AppStepper.vue +0 -139
  52. package/src/components/shared/BaseBreadcrumb.vue +0 -55
  53. package/src/components/shared/BaseIcon.vue +0 -27
  54. package/src/components/shared/ConfirmDialog.vue +0 -72
  55. package/src/components/shared/CustomAutocomplete.vue +0 -306
  56. package/src/components/shared/CustomDataTable.vue +0 -1859
  57. package/src/components/shared/DescriptionInput.vue +0 -204
  58. package/src/components/shared/DownloadButton.vue +0 -169
  59. package/src/components/shared/MoneyInput.vue +0 -105
  60. package/src/components/shared/PdfViewer.vue +0 -645
  61. package/src/components/shared/ShamsiDatePicker.vue +0 -444
  62. package/src/components/shared/UiChildCard.vue +0 -17
  63. package/src/components/shared/UiParentCard.vue +0 -21
  64. package/src/components/shared/VPriceTextField.vue +0 -136
  65. package/src/composables/useDataTable.ts +0 -152
  66. package/src/composables/usePermissions.ts +0 -90
  67. package/src/composables/useRouteGuard.ts +0 -36
  68. package/src/composables/useTableActions.ts +0 -207
  69. package/src/composables/useTableHeaders.ts +0 -172
  70. package/src/composables/useTableSelection.ts +0 -201
  71. package/src/constants/enums/approval.ts +0 -13
  72. package/src/constants/enums/booleanEnum.ts +0 -11
  73. package/src/constants/enums/contractType.ts +0 -11
  74. package/src/constants/enums/lcProductType.ts +0 -21
  75. package/src/constants/enums/repaymentType.ts +0 -11
  76. package/src/directives/v-digit-limit.ts +0 -15
  77. package/src/directives/v-permission.ts +0 -31
  78. package/src/features/index.ts +0 -48
  79. package/src/index.ts +0 -119
  80. package/src/plugins/key-clock.ts +0 -39
  81. package/src/plugins/mdi-icon.ts +0 -31
  82. package/src/plugins/vuetify.ts +0 -74
  83. package/src/scss/_override.scss +0 -72
  84. package/src/scss/_variables.scss +0 -124
  85. package/src/scss/components/_VButtons.scss +0 -23
  86. package/src/scss/components/_VCard.scss +0 -20
  87. package/src/scss/components/_VCustomDataTable.scss +0 -282
  88. package/src/scss/components/_VField.scss +0 -9
  89. package/src/scss/components/_VInput.scss +0 -17
  90. package/src/scss/components/_VNavigationDrawer.scss +0 -3
  91. package/src/scss/components/_VShadow.scss +0 -3
  92. package/src/scss/components/_VStepper.scss +0 -235
  93. package/src/scss/components/_VTabs.scss +0 -11
  94. package/src/scss/components/_VTextField.scss +0 -40
  95. package/src/scss/components/_approval.scss +0 -128
  96. package/src/scss/layout/_container.scss +0 -147
  97. package/src/scss/layout/_sidebar.scss +0 -138
  98. package/src/scss/layout/_topbar.scss +0 -39
  99. package/src/scss/pages/_dashboards.scss +0 -97
  100. package/src/scss/style.scss +0 -21
  101. package/src/services/apiService.ts +0 -59
  102. package/src/services/axiosInstance.ts +0 -14
  103. package/src/stores/customizer.ts +0 -55
  104. package/src/stores/permissions.ts +0 -237
  105. package/src/theme/darkThemes/DarkModernTheme.ts +0 -54
  106. package/src/theme/darkThemes/DarkOrangeTheme.ts +0 -53
  107. package/src/theme/darkThemes/DarkPurpleTheme.ts +0 -54
  108. package/src/theme/darkThemes/DarkRedTheme.ts +0 -54
  109. package/src/theme/darkThemes/DarkSilverTheme.ts +0 -53
  110. package/src/theme/darkThemes/DarkSteelTealGreen.ts +0 -53
  111. package/src/theme/darkThemes/DarkTealTheme.ts +0 -52
  112. package/src/theme/lightThemes/ModernTheme.ts +0 -55
  113. package/src/theme/lightThemes/OrangeTheme.ts +0 -54
  114. package/src/theme/lightThemes/PurpleTheme.ts +0 -54
  115. package/src/theme/lightThemes/RedTheme.ts +0 -55
  116. package/src/theme/lightThemes/SilverTheme.ts +0 -55
  117. package/src/theme/lightThemes/SteelTealGreen.ts +0 -54
  118. package/src/theme/lightThemes/TealTheme.ts +0 -54
  119. package/src/types/approval/approvalType.ts +0 -473
  120. package/src/types/cartable/cartableTypes.ts +0 -169
  121. package/src/types/componentTypes/DataTableType.ts +0 -14
  122. package/src/types/componentTypes/DataTableTypes.ts +0 -130
  123. package/src/types/enums/global.ts +0 -267
  124. package/src/types/jalaali-js.d.ts +0 -6
  125. package/src/types/models/Base.ts +0 -4
  126. package/src/types/models/env.d.ts +0 -10
  127. package/src/types/models/person.ts +0 -13
  128. package/src/types/models/userInfo.ts +0 -29
  129. package/src/types/preApproval/preApprovalTypes.ts +0 -67
  130. package/src/types/shims-tabler-icons.d.ts +0 -58
  131. package/src/types/themeTypes/ThemeType.ts +0 -47
  132. package/src/types/vue-apexcharts.d.ts +0 -1
  133. package/src/types/vue3-print-nb.d.ts +0 -1
  134. package/src/types/vue_tabler_icon.d.ts +0 -10
  135. package/src/utils/NationalCodeValidator.ts +0 -33
  136. package/src/utils/date-convertor.ts +0 -40
  137. package/src/utils/greetingUtils.ts +0 -97
  138. package/src/utils/helpers/fake-backend.ts +0 -68
  139. package/src/utils/helpers/fetch-wrapper.ts +0 -86
  140. package/src/utils/number-formatter.ts +0 -33
  141. package/src/validators/nationalCodeRule.ts +0 -6
@@ -1,306 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from 'vue';
3
-
4
- type DisplayStyle = 'compact' | 'detailed'
5
-
6
- interface TooltipFn<T = any> {
7
- (item: T): string
8
- }
9
-
10
- interface SubtitleFn<T = any> {
11
- (item: T): string | undefined
12
- }
13
-
14
- const props = withDefaults(defineProps<{
15
- // Optional unified dynamic field mapping
16
- fields?: {
17
- title?: string | ((item: any) => string)
18
- value?: string | ((item: any) => unknown)
19
- subtitle?: string | SubtitleFn
20
- group?: string
21
- isMainGroup?: string
22
- }
23
- modelValue: any
24
- items: any[]
25
- itemTitle?: string | ((item: any) => string)
26
- itemValue?: string | ((item: any) => unknown)
27
- displayStyle?: DisplayStyle
28
- multiple?: boolean
29
- clearable?: boolean
30
- label?: string
31
- placeholder?: string
32
- density?: 'default' | 'comfortable' | 'compact'
33
- disabled?: boolean
34
- loading?: boolean
35
- error?: boolean
36
- rules?: ((v: any) => true | string)[]
37
- returnObject?: boolean
38
- chips?: boolean
39
- maxWidth?: string | number
40
- // Optional secondary line for detailed style
41
- itemSubtitle?: string | SubtitleFn
42
- // Tooltip: string or function per item; slot overrides this
43
- tooltip?: string | TooltipFn
44
- // Props for underlying VTooltip
45
- tooltipLocation?: 'top' | 'bottom' | 'start' | 'end'
46
- tooltipOpenDelay?: number
47
- tooltipCloseDelay?: number
48
- // Group functionality
49
- groupField?: string // field name for group identification (default: 'groupId')
50
- isMainGroupField?: string // field name for main group flag (default: 'isMainGroup')
51
- }>(), {
52
- itemTitle: 'title',
53
- itemValue: 'value',
54
- displayStyle: 'compact',
55
- multiple: false,
56
- clearable: true,
57
- density: 'comfortable',
58
- returnObject: false,
59
- chips: true,
60
- tooltipLocation: 'top',
61
- tooltipOpenDelay: 0,
62
- tooltipCloseDelay: 0,
63
- groupField: 'groupId',
64
- isMainGroupField: 'isMainGroup',
65
- })
66
-
67
- const emit = defineEmits<{
68
- (e: 'update:modelValue', value: any): void
69
- }>()
70
-
71
- const model = computed({
72
- get: () => props.modelValue,
73
- set: (v: any) => emit('update:modelValue', v),
74
- })
75
-
76
- function resolveTitle(item: any): string {
77
- // Priority: fields.title -> itemTitle -> raw
78
- const titleMapper = props.fields?.title ?? props.itemTitle
79
- if (typeof titleMapper === 'function') return titleMapper(item)
80
- if (titleMapper && typeof item === 'object' && item) return String(item[titleMapper] ?? '')
81
- return String(item ?? '')
82
- }
83
-
84
- function resolveValue(item: any): unknown {
85
- // Priority: fields.value -> itemValue -> raw
86
- const valueMapper = props.fields?.value ?? props.itemValue
87
- if (typeof valueMapper === 'function') return valueMapper(item)
88
- if (valueMapper && typeof item === 'object' && item) return item[valueMapper]
89
- return item
90
- }
91
-
92
- function resolveSubtitle(item: any): string | undefined {
93
- // Priority: fields.subtitle -> itemSubtitle
94
- const subtitleMapper = props.fields?.subtitle ?? props.itemSubtitle
95
- if (!subtitleMapper) return undefined
96
- if (typeof subtitleMapper === 'function') return subtitleMapper(item)
97
- if (typeof item === 'object' && item) return item[subtitleMapper]
98
- return undefined
99
- }
100
-
101
- function resolveTooltip(item: any): string | undefined {
102
- if (!props.tooltip) return undefined
103
- if (typeof props.tooltip === 'function') return props.tooltip(item)
104
- return props.tooltip
105
- }
106
-
107
- // Get group members for main group items
108
- function getGroupMembers(mainGroupItem: any): any[] {
109
- const groupField = props.fields?.group ?? props.groupField
110
- const isMainField = props.fields?.isMainGroup ?? props.isMainGroupField
111
- if (!mainGroupItem || !mainGroupItem[isMainField as string]) return []
112
- const groupId = mainGroupItem[groupField as string]
113
- if (groupId === null || groupId === undefined) return []
114
- return props.items.filter(item => item[groupField as string] === groupId && !item[isMainField as string])
115
- }
116
-
117
- // Check if item is a main group
118
- function isMainGroup(item: any): boolean {
119
- const isMainField = props.fields?.isMainGroup ?? props.isMainGroupField
120
- return !!(item && item[isMainField as string] === true)
121
- }
122
- </script>
123
-
124
- <template>
125
- <v-autocomplete
126
- v-model="model"
127
- :items="items"
128
- :item-title="(item: any) => resolveTitle(item.raw ?? item)"
129
- :item-value="(item: any) => resolveValue(item.raw ?? item)"
130
- :multiple="multiple"
131
- :clearable="clearable"
132
- :label="label"
133
- :placeholder="placeholder"
134
- :density="density"
135
- :disabled="disabled"
136
- :loading="loading"
137
- :error="error"
138
- :rules="rules"
139
- :return-object="returnObject"
140
- :chips="chips"
141
- :style="maxWidth ? { maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth } : undefined"
142
- v-bind="$attrs"
143
- variant="outlined"
144
- >
145
- <template #item="{ props: itemProps, item }">
146
- <template v-if="isMainGroup(item.raw ?? item)">
147
- <v-tooltip
148
- :location="tooltipLocation"
149
- :open-delay="tooltipOpenDelay"
150
- :close-delay="tooltipCloseDelay"
151
- :text="undefined"
152
- width="300px"
153
- height="300px"
154
- >
155
- <template #activator="{ props: activatorProps }">
156
- <v-list-item
157
- v-bind="{ ...itemProps, ...activatorProps }"
158
- :two-line="displayStyle === 'detailed'"
159
- :class="{ 'ca-main-group': true }"
160
- >
161
- <template #title>
162
- <div class="ca-item-title">
163
- {{ resolveTitle(item.raw ?? item) }}
164
- <v-chip
165
- size="small"
166
- color="primary"
167
- variant="tonal"
168
- class="ca-group-chip"
169
- >
170
- گروه
171
- </v-chip>
172
- </div>
173
- </template>
174
- <template v-if="displayStyle === 'detailed' && resolveSubtitle(item.raw ?? item)" #subtitle>
175
- <div class="ca-item-subtitle">{{ resolveSubtitle(item.raw ?? item) }}</div>
176
- </template>
177
- <slot name="item-append" :item="item.raw ?? item" />
178
- </v-list-item>
179
- </template>
180
- <template #default>
181
- <slot name="tooltip" :item="item.raw ?? item" :group-members="getGroupMembers(item.raw ?? item)">
182
- <div class="ca-group-tooltip">
183
- <div class="ca-group-tooltip-header">
184
- <strong>{{ resolveTitle(item.raw ?? item) }}</strong>
185
- <span class="ca-group-count">{{ getGroupMembers(item.raw ?? item).length }} آیتم</span>
186
- </div>
187
- <div class="ca-group-members">
188
- <div
189
- v-for="(member, idx) in getGroupMembers(item.raw ?? item)"
190
- :key="`${resolveValue(member)}-${idx}`"
191
- class="ca-group-member"
192
- >
193
- {{ resolveTitle(member) }}
194
- </div>
195
- </div>
196
- </div>
197
- </slot>
198
- </template>
199
- </v-tooltip>
200
- </template>
201
- <template v-else>
202
- <v-list-item
203
- v-bind="itemProps"
204
- :two-line="displayStyle === 'detailed'"
205
- >
206
- <template #title>
207
- <div class="ca-item-title">{{ resolveTitle(item.raw ?? item) }}</div>
208
- </template>
209
- <template v-if="displayStyle === 'detailed' && resolveSubtitle(item.raw ?? item)" #subtitle>
210
- <div class="ca-item-subtitle">{{ resolveSubtitle(item.raw ?? item) }}</div>
211
- </template>
212
- <slot name="item-append" :item="item.raw ?? item" />
213
- </v-list-item>
214
- </template>
215
- </template>
216
-
217
- <template #selection="{ item, index }">
218
- <v-chip
219
- class="ca-chip"
220
- variant="tonal"
221
- >
222
- <span class="ca-chip-title">{{ resolveTitle(item.raw ?? item) }}</span>
223
- <template v-if="displayStyle === 'detailed' && resolveSubtitle(item.raw ?? item)">
224
- <span class="ca-chip-sep">•</span>
225
- <span class="ca-chip-subtitle">{{ resolveSubtitle(item.raw ?? item) }}</span>
226
- </template>
227
- </v-chip>
228
- </template>
229
- </v-autocomplete>
230
- </template>
231
-
232
- <style scoped>
233
- .ca-item-title {
234
- font-weight: 600;
235
- display: flex;
236
- align-items: center;
237
- gap: 8px;
238
- }
239
- .ca-item-subtitle {
240
- opacity: 0.7;
241
- font-size: 0.875rem;
242
- }
243
- .ca-chip {
244
- margin: 2px;
245
- }
246
- .ca-chip-title {
247
- font-weight: 600;
248
- }
249
- .ca-chip-sep {
250
- margin: 0 6px;
251
- opacity: 0.6;
252
- }
253
- .ca-chip-subtitle {
254
- opacity: 0.85;
255
- }
256
-
257
- /* Group styling */
258
- .ca-main-group {
259
- background-color: rgba(var(--v-theme-primary), 0.05);
260
- border-left: 3px solid rgb(var(--v-theme-primary));
261
- }
262
-
263
- .ca-group-chip {
264
- margin-right: auto;
265
- }
266
-
267
- /* Group tooltip styling */
268
- .ca-group-tooltip {
269
- max-width: 300px;
270
- padding: 8px;
271
- }
272
-
273
- .ca-group-tooltip-header {
274
- display: flex;
275
- justify-content: space-between;
276
- align-items: center;
277
- margin-bottom: 8px;
278
- padding-bottom: 4px;
279
- border-bottom: 1px solid rgba(0, 0, 0, 0.1);
280
- }
281
-
282
- .ca-group-count {
283
- font-size: 0.8rem;
284
- color: rgba(0, 0, 0, 0.6);
285
- background-color: rgba(var(--v-theme-primary), 0.1);
286
- padding: 2px 6px;
287
- border-radius: 4px;
288
- }
289
-
290
- .ca-group-members {
291
- max-height: 300px;
292
- overflow-y: auto;
293
- }
294
-
295
- .ca-group-member {
296
- padding: 4px 0;
297
- font-size: 0.9rem;
298
- border-bottom: 1px solid rgba(0, 0, 0, 0.05);
299
- }
300
-
301
- .ca-group-member:last-child {
302
- border-bottom: none;
303
- }
304
- </style>
305
-
306
-