@bagelink/vue 1.14.15 → 1.15.0

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 (102) hide show
  1. package/dist/components/Alert.vue.d.ts.map +1 -1
  2. package/dist/components/Badge.vue.d.ts.map +1 -1
  3. package/dist/components/Btn.vue.d.ts.map +1 -1
  4. package/dist/components/Dropdown.vue.d.ts.map +1 -1
  5. package/dist/components/Image.vue.d.ts.map +1 -1
  6. package/dist/components/ListItem.vue.d.ts.map +1 -1
  7. package/dist/components/MapEmbed/Index.vue.d.ts.map +1 -1
  8. package/dist/components/Pagination.vue.d.ts.map +1 -1
  9. package/dist/components/Swiper.vue.d.ts.map +1 -1
  10. package/dist/components/Toast.vue.d.ts.map +1 -1
  11. package/dist/components/form/index.d.ts.map +1 -1
  12. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  13. package/dist/components/index.d.ts.map +1 -1
  14. package/dist/components/layout/AppContent.vue.d.ts.map +1 -1
  15. package/dist/components/layout/AppLayout.vue.d.ts.map +1 -1
  16. package/dist/components/layout/AppSidebar.vue.d.ts.map +1 -1
  17. package/dist/components/layout/Panel.vue.d.ts.map +1 -1
  18. package/dist/components/layout/Resizable.vue.d.ts.map +1 -1
  19. package/dist/components/layout/TabsNav.vue.d.ts.map +1 -1
  20. package/dist/components/layout/appLayoutContext.d.ts +24 -0
  21. package/dist/components/layout/appLayoutContext.d.ts.map +1 -0
  22. package/dist/components/layout/index.d.ts.map +1 -1
  23. package/dist/components/lightbox/Lightbox.vue.d.ts.map +1 -1
  24. package/dist/composables/index.d.ts.map +1 -1
  25. package/dist/composables/useDevice.d.ts.map +1 -1
  26. package/dist/composables/useEscapeKey.d.ts +12 -0
  27. package/dist/composables/useEscapeKey.d.ts.map +1 -0
  28. package/dist/composables/useSchemaField.d.ts.map +1 -1
  29. package/dist/composables/useTheme.d.ts.map +1 -1
  30. package/dist/form-flow/FormFlow.vue.d.ts.map +1 -1
  31. package/dist/form-flow/form-flow.d.ts.map +1 -1
  32. package/dist/index.cjs +203 -207
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.mjs +25819 -28870
  35. package/dist/style.css +1 -1
  36. package/dist/types/BagelForm.d.ts.map +1 -1
  37. package/dist/types/BtnOptions.d.ts.map +1 -1
  38. package/dist/utils/constants.d.ts.map +1 -1
  39. package/dist/utils/index.d.ts.map +1 -1
  40. package/package.json +3 -6
  41. package/src/components/Alert.vue +34 -14
  42. package/src/components/Badge.vue +145 -22
  43. package/src/components/Btn.vue +43 -31
  44. package/src/components/Dropdown.vue +5 -12
  45. package/src/components/FilterQuery.vue +1 -1
  46. package/src/components/Image.vue +3 -2
  47. package/src/components/JSONSchema.vue +2 -2
  48. package/src/components/JsonBuilder.vue +1 -1
  49. package/src/components/ListItem.vue +1 -3
  50. package/src/components/MapEmbed/Index.vue +10 -9
  51. package/src/components/NavBar.vue +2 -2
  52. package/src/components/Spreadsheet/Index.vue +1 -1
  53. package/src/components/Swiper.vue +3 -1
  54. package/src/components/Toast.vue +23 -8
  55. package/src/components/calendar/Index.vue +4 -4
  56. package/src/components/calendar/views/MonthView.vue +3 -3
  57. package/src/components/form/index.ts +0 -4
  58. package/src/components/form/inputs/EmailInput.vue +1 -1
  59. package/src/components/form/inputs/NumberInput.vue +1 -1
  60. package/src/components/form/inputs/OTP.vue +2 -2
  61. package/src/components/form/inputs/SelectInput.vue +3 -3
  62. package/src/components/form/inputs/TelInput.vue +2 -2
  63. package/src/components/form/inputs/TextInput.vue +1 -1
  64. package/src/components/form/inputs/Upload/upload.css +2 -2
  65. package/src/components/index.ts +2 -6
  66. package/src/components/layout/AppContent.vue +5 -19
  67. package/src/components/layout/AppLayout.vue +47 -18
  68. package/src/components/layout/AppSidebar.vue +16 -33
  69. package/src/components/layout/Resizable.vue +5 -2
  70. package/src/components/layout/TabsNav.vue +5 -5
  71. package/src/components/layout/appLayoutContext.ts +44 -0
  72. package/src/components/layout/index.ts +2 -0
  73. package/src/components/lightbox/Lightbox.vue +3 -9
  74. package/src/composables/index.ts +1 -0
  75. package/src/composables/useDevice.ts +2 -1
  76. package/src/composables/useEscapeKey.ts +56 -0
  77. package/src/composables/useSchemaField.ts +2 -17
  78. package/src/composables/useTheme.ts +23 -19
  79. package/src/form-flow/FormFlow.vue +2 -0
  80. package/src/form-flow/form-flow.ts +7 -0
  81. package/src/index.ts +0 -2
  82. package/src/styles/inputs.css +1 -1
  83. package/src/types/BagelForm.ts +46 -151
  84. package/src/types/BtnOptions.ts +5 -3
  85. package/src/utils/constants.ts +7 -0
  86. package/src/utils/index.ts +19 -3
  87. package/src/utils/sizeParsing.ts +5 -5
  88. package/vite.config.ts +5 -1
  89. package/src/components/Carousel.vue +0 -724
  90. package/src/components/ImportData.vue +0 -1749
  91. package/src/components/Pill.vue +0 -150
  92. package/src/components/Slider.vue +0 -1446
  93. package/src/components/Title.vue +0 -23
  94. package/src/components/ToolBar.vue +0 -9
  95. package/src/components/form/BagelForm.vue +0 -219
  96. package/src/components/form/BglFieldSet.vue +0 -14
  97. package/src/components/form/BglMultiStepForm.vue +0 -469
  98. package/src/components/form/FieldArray.vue +0 -422
  99. package/src/components/form/useBagelFormState.ts +0 -76
  100. package/src/composables/useFormField.ts +0 -38
  101. package/src/dialog/DialogOLD.vue +0 -358
  102. package/src/utils/BagelFormUtils.ts +0 -684
@@ -1,358 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Dialog - Native dialog wrapper with animations
4
- *
5
- * Uses native <dialog> element for:
6
- * - Automatic focus trap
7
- * - ESC key handling
8
- * - Backdrop via ::backdrop
9
- * - Browser-managed z-index stacking
10
- */
11
- import type { DialogWidth, DialogPosition } from './dialogTypes'
12
- import { ref, computed, onMounted, watch } from 'vue'
13
- import { DIALOG_WIDTHS } from './dialogTypes'
14
-
15
- const props = withDefaults(defineProps<{
16
- open: boolean
17
- title?: string
18
- width?: DialogWidth
19
- position?: DialogPosition
20
- dismissable?: boolean
21
- }>(), {
22
- width: 'm',
23
- position: 'center',
24
- dismissable: true
25
- })
26
-
27
- const emit = defineEmits<{
28
- 'update:open': [value: boolean]
29
- 'close': []
30
- }>()
31
-
32
- const dialogRef = ref<HTMLDialogElement | null>(null)
33
- const isClosing = ref(false)
34
-
35
- const widthStyle = computed(() => DIALOG_WIDTHS[props.width])
36
-
37
- const positionClass = computed(() => {
38
- if (props.position === 'left') return 'dialog-left'
39
- if (props.position === 'right') return 'dialog-right'
40
- return 'dialog-center'
41
- })
42
-
43
- // Handle open/close
44
- watch(() => props.open, (isOpen) => {
45
- if (isOpen) {
46
- dialogRef.value?.showModal()
47
- isClosing.value = false
48
- } else {
49
- closeWithAnimation()
50
- }
51
- })
52
-
53
- onMounted(() => {
54
- if (props.open) {
55
- dialogRef.value?.showModal()
56
- }
57
- })
58
-
59
- function closeWithAnimation() {
60
- if (isClosing.value) return
61
- isClosing.value = true
62
- }
63
-
64
- function onAnimationEnd() {
65
- if (isClosing.value) {
66
- dialogRef.value?.close()
67
- isClosing.value = false
68
- emit('close')
69
- }
70
- }
71
-
72
- function onBackdropClick(e: MouseEvent) {
73
- // Only close if clicking directly on the dialog backdrop (not content)
74
- if (e.target === dialogRef.value && props.dismissable) {
75
- emit('update:open', false)
76
- }
77
- }
78
-
79
- function onCancel(e: Event) {
80
- // Native ESC key triggers cancel event
81
- if (!props.dismissable) {
82
- e.preventDefault()
83
- return
84
- }
85
- emit('update:open', false)
86
- }
87
-
88
- function close() {
89
- emit('update:open', false)
90
- }
91
-
92
- defineExpose({ close })
93
- </script>
94
-
95
- <template>
96
- <dialog
97
- ref="dialogRef" :class="[positionClass, { 'is-closing': isClosing }]"
98
- :style="{ '--dialog-width': widthStyle }" @click="onBackdropClick" @cancel="onCancel"
99
- @animationend="onAnimationEnd"
100
- >
101
- <div class="dialog-content" @click.stop>
102
- <!-- Header -->
103
- <header v-if="title || dismissable" class="dialog-header">
104
- <h2 v-if="title" class="dialog-title">
105
- {{ title }}
106
- </h2>
107
- <button v-if="dismissable" type="button" class="dialog-close" aria-label="Close" @click="close">
108
- <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
109
- <path d="M18 6L6 18M6 6l12 12" />
110
- </svg>
111
- </button>
112
- </header>
113
-
114
- <!-- Body -->
115
- <div class="dialog-body">
116
- <slot />
117
- </div>
118
-
119
- <!-- Footer -->
120
- <footer v-if="$slots.footer" class="dialog-footer">
121
- <slot name="footer" />
122
- </footer>
123
- </div>
124
- </dialog>
125
- </template>
126
-
127
- <style scoped>
128
- dialog {
129
- border: none;
130
- border-radius: var(--bgl-card-radius, 12px);
131
- padding: 0;
132
- max-width: var(--dialog-width);
133
- width: calc(100% - 2rem);
134
- max-height: calc(100vh - 2rem);
135
- background: var(--bgl-popup-bg, #fff);
136
- color: var(--bgl-text, #1a1a1a);
137
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
138
- overflow: hidden;
139
- }
140
-
141
- dialog::backdrop {
142
- background: var(--bgl-dark-bg, rgba(0, 0, 0, 0.5));
143
- opacity: 0;
144
- transition: opacity 0.2s ease-out;
145
- }
146
-
147
- dialog[open]::backdrop {
148
- opacity: 1;
149
- }
150
-
151
- /* Center position (default) */
152
- dialog.dialog-center {
153
- margin: auto;
154
- }
155
-
156
- dialog.dialog-center[open] {
157
- animation: dialog-fade-in 0.2s ease-out;
158
- }
159
-
160
- dialog.dialog-center.is-closing {
161
- animation: dialog-fade-out 0.15s ease-in forwards;
162
- }
163
-
164
- @keyframes dialog-fade-in {
165
- from {
166
- opacity: 0;
167
- transform: scale(0.95) translateY(10px);
168
- }
169
-
170
- to {
171
- opacity: 1;
172
- transform: scale(1) translateY(0);
173
- }
174
- }
175
-
176
- @keyframes dialog-fade-out {
177
- from {
178
- opacity: 1;
179
- transform: scale(1) translateY(0);
180
- }
181
-
182
- to {
183
- opacity: 0;
184
- transform: scale(0.95) translateY(10px);
185
- }
186
- }
187
-
188
- /* Right position */
189
- dialog.dialog-right {
190
- margin: 0;
191
- margin-inline-start: auto;
192
- margin-inline-end: 1rem;
193
- margin-top: 1rem;
194
- margin-bottom: 1rem;
195
- height: calc(100vh - 2rem);
196
- max-height: calc(100vh - 2rem);
197
- border-radius: var(--bgl-card-radius, 12px);
198
- }
199
-
200
- dialog.dialog-right[open] {
201
- animation: dialog-slide-in-right 0.25s ease-out;
202
- }
203
-
204
- dialog.dialog-right.is-closing {
205
- animation: dialog-slide-out-right 0.2s ease-in forwards;
206
- }
207
-
208
- @keyframes dialog-slide-in-right {
209
- from {
210
- opacity: 0;
211
- transform: translateX(100%);
212
- }
213
-
214
- to {
215
- opacity: 1;
216
- transform: translateX(0);
217
- }
218
- }
219
-
220
- @keyframes dialog-slide-out-right {
221
- from {
222
- opacity: 1;
223
- transform: translateX(0);
224
- }
225
-
226
- to {
227
- opacity: 0;
228
- transform: translateX(100%);
229
- }
230
- }
231
-
232
- /* Left position */
233
- dialog.dialog-left {
234
- margin: 0;
235
- margin-inline-end: auto;
236
- margin-inline-start: 1rem;
237
- margin-top: 1rem;
238
- margin-bottom: 1rem;
239
- height: calc(100vh - 2rem);
240
- max-height: calc(100vh - 2rem);
241
- border-radius: var(--bgl-card-radius, 12px);
242
- }
243
-
244
- dialog.dialog-left[open] {
245
- animation: dialog-slide-in-left 0.25s ease-out;
246
- }
247
-
248
- dialog.dialog-left.is-closing {
249
- animation: dialog-slide-out-left 0.2s ease-in forwards;
250
- }
251
-
252
- @keyframes dialog-slide-in-left {
253
- from {
254
- opacity: 0;
255
- transform: translateX(-100%);
256
- }
257
-
258
- to {
259
- opacity: 1;
260
- transform: translateX(0);
261
- }
262
- }
263
-
264
- @keyframes dialog-slide-out-left {
265
- from {
266
- opacity: 1;
267
- transform: translateX(0);
268
- }
269
-
270
- to {
271
- opacity: 0;
272
- transform: translateX(-100%);
273
- }
274
- }
275
-
276
- /* Content structure */
277
- .dialog-content {
278
- display: flex;
279
- flex-direction: column;
280
- height: 100%;
281
- max-height: inherit;
282
- }
283
-
284
- .dialog-header {
285
- display: flex;
286
- align-items: center;
287
- justify-content: space-between;
288
- padding: 1rem 1.5rem;
289
- border-bottom: 1px solid var(--bgl-border-color, #e5e5e5);
290
- flex-shrink: 0;
291
- }
292
-
293
- .dialog-title {
294
- margin: 0;
295
- font-size: 1.125rem;
296
- font-weight: 600;
297
- }
298
-
299
- .dialog-close {
300
- display: flex;
301
- align-items: center;
302
- justify-content: center;
303
- width: 32px;
304
- height: 32px;
305
- border: none;
306
- background: transparent;
307
- border-radius: 6px;
308
- cursor: pointer;
309
- color: var(--bgl-text-secondary, #666);
310
- transition: background 0.15s ease, color 0.15s ease;
311
- }
312
-
313
- .dialog-close:hover {
314
- background: var(--bgl-gray-tint, #f0f0f0);
315
- color: var(--bgl-text, #1a1a1a);
316
- }
317
-
318
- .dialog-body {
319
- flex: 1;
320
- padding: 1.5rem;
321
- overflow-y: auto;
322
- }
323
-
324
- .dialog-footer {
325
- display: flex;
326
- align-items: center;
327
- justify-content: flex-end;
328
- gap: 0.75rem;
329
- padding: 1rem 1.5rem;
330
- border-top: 1px solid var(--bgl-border-color, #e5e5e5);
331
- flex-shrink: 0;
332
- }
333
-
334
- /* Full width */
335
- dialog[style*="--dialog-width: 100%"] {
336
- max-width: calc(100vw - 2rem);
337
- }
338
-
339
- dialog.dialog-left[style*="--dialog-width: 100%"],
340
- dialog.dialog-right[style*="--dialog-width: 100%"] {
341
- max-width: calc(100vw - 2rem);
342
- width: calc(100vw - 2rem);
343
- }
344
-
345
- /* Mobile adjustments */
346
- @media screen and (max-width: 640px) {
347
-
348
- dialog.dialog-left,
349
- dialog.dialog-right {
350
- margin: 0;
351
- width: 100%;
352
- max-width: 100%;
353
- height: 100vh;
354
- max-height: 100vh;
355
- border-radius: 0;
356
- }
357
- }
358
- </style>