@bagelink/vue 1.14.13 → 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 (238) hide show
  1. package/dist/components/AddressSearch.vue.d.ts +6 -7
  2. package/dist/components/Alert.vue.d.ts.map +1 -1
  3. package/dist/components/Avatar.vue.d.ts.map +1 -1
  4. package/dist/components/Badge.vue.d.ts.map +1 -1
  5. package/dist/components/Btn.vue.d.ts +1 -1
  6. package/dist/components/Btn.vue.d.ts.map +1 -1
  7. package/dist/components/Card.vue.d.ts.map +1 -1
  8. package/dist/components/Carousel.vue.d.ts +0 -11
  9. package/dist/components/Dropdown.vue.d.ts +0 -2
  10. package/dist/components/Dropdown.vue.d.ts.map +1 -1
  11. package/dist/components/Filter.vue.d.ts +30 -0
  12. package/dist/components/Filter.vue.d.ts.map +1 -0
  13. package/dist/components/FilterQuery.vue.d.ts +8 -3
  14. package/dist/components/Image.vue.d.ts.map +1 -1
  15. package/dist/components/ImportData.vue.d.ts.map +1 -1
  16. package/dist/components/ListItem.vue.d.ts.map +1 -1
  17. package/dist/components/MapEmbed/Index.vue.d.ts.map +1 -1
  18. package/dist/components/Modal.vue.d.ts +0 -1
  19. package/dist/components/Pagination.vue.d.ts.map +1 -1
  20. package/dist/components/Pill.vue.d.ts.map +1 -1
  21. package/dist/components/QueryFilter.vue.d.ts +30 -0
  22. package/dist/components/QueryFilter.vue.d.ts.map +1 -0
  23. package/dist/components/Swiper.vue.d.ts +6 -12
  24. package/dist/components/Swiper.vue.d.ts.map +1 -1
  25. package/dist/components/Toast.vue.d.ts.map +1 -1
  26. package/dist/components/analytics/PieChart.vue.d.ts +2 -2
  27. package/dist/components/calendar/CalendarPopover.vue.d.ts +8 -4
  28. package/dist/components/calendar/CalendarPopover.vue.d.ts.map +1 -1
  29. package/dist/components/calendar/CalendarTypes.d.ts +0 -10
  30. package/dist/components/calendar/Index.vue.d.ts +4 -20
  31. package/dist/components/calendar/views/WeekView.vue.d.ts +1 -9
  32. package/dist/components/dataTable/DataTable.vue.d.ts.map +1 -1
  33. package/dist/components/form/index.d.ts.map +1 -1
  34. package/dist/components/form/inputs/ArrayInput.vue.d.ts +2 -4
  35. package/dist/components/form/inputs/CheckInput.vue.d.ts +1 -2
  36. package/dist/components/form/inputs/Checkbox.vue.d.ts.map +1 -1
  37. package/dist/components/form/inputs/CodeEditor/Index.vue.d.ts +0 -54
  38. package/dist/components/form/inputs/ColorInput.vue.d.ts +1 -3
  39. package/dist/components/form/inputs/DateInput.vue.d.ts +1 -2
  40. package/dist/components/form/inputs/DatePicker.vue.d.ts +0 -1
  41. package/dist/components/form/inputs/EmailInput.vue.d.ts +2 -5
  42. package/dist/components/form/inputs/JSONInput.vue.d.ts +1 -2
  43. package/dist/components/form/inputs/MarkdownEditor.vue.d.ts +2 -7
  44. package/dist/components/form/inputs/NumberInput.vue.d.ts +1 -2
  45. package/dist/components/form/inputs/OTP.vue.d.ts +1 -2
  46. package/dist/components/form/inputs/PasswordInput.vue.d.ts +10 -16
  47. package/dist/components/form/inputs/RadioGroup.vue.d.ts +1 -3
  48. package/dist/components/form/inputs/RangeInput.vue.d.ts +1 -6
  49. package/dist/components/form/inputs/RichText/index.vue.d.ts +1 -2
  50. package/dist/components/form/inputs/RichText/index.vue.d.ts.map +1 -1
  51. package/dist/components/form/inputs/RichText/utils/media.d.ts.map +1 -1
  52. package/dist/components/form/inputs/SelectBtn.vue.d.ts +2 -2
  53. package/dist/components/form/inputs/SelectInput.vue.d.ts +13 -20
  54. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  55. package/dist/components/form/inputs/SignaturePad.vue.d.ts +1 -6
  56. package/dist/components/form/inputs/TableField.vue.d.ts +1 -2
  57. package/dist/components/form/inputs/TelInput.vue.d.ts +1 -2
  58. package/dist/components/form/inputs/TextInput.vue.d.ts +2 -3
  59. package/dist/components/form/inputs/ToggleInput.vue.d.ts +1 -2
  60. package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts +6 -27
  61. package/dist/components/form/inputs/Upload/upload.d.ts +1 -1
  62. package/dist/components/form/inputs/index.d.ts +0 -1
  63. package/dist/components/index.d.ts +1 -3
  64. package/dist/components/index.d.ts.map +1 -1
  65. package/dist/components/layout/AppContent.vue.d.ts +1 -1
  66. package/dist/components/layout/AppContent.vue.d.ts.map +1 -1
  67. package/dist/components/layout/AppLayout.vue.d.ts +0 -2
  68. package/dist/components/layout/AppLayout.vue.d.ts.map +1 -1
  69. package/dist/components/layout/AppSidebar.vue.d.ts +1 -5
  70. package/dist/components/layout/AppSidebar.vue.d.ts.map +1 -1
  71. package/dist/components/layout/Panel.vue.d.ts.map +1 -1
  72. package/dist/components/layout/Resizable.vue.d.ts.map +1 -1
  73. package/dist/components/layout/Skeleton.vue.d.ts.map +1 -1
  74. package/dist/components/layout/TabsNav.vue.d.ts +1 -12
  75. package/dist/components/layout/TabsNav.vue.d.ts.map +1 -1
  76. package/dist/components/layout/appLayoutContext.d.ts +24 -0
  77. package/dist/components/layout/appLayoutContext.d.ts.map +1 -0
  78. package/dist/components/layout/index.d.ts.map +1 -1
  79. package/dist/components/lightbox/Lightbox.vue.d.ts.map +1 -1
  80. package/dist/composables/index.d.ts.map +1 -1
  81. package/dist/composables/useDevice.d.ts.map +1 -1
  82. package/dist/composables/useEscapeKey.d.ts +12 -0
  83. package/dist/composables/useEscapeKey.d.ts.map +1 -0
  84. package/dist/composables/useSchemaField.d.ts.map +1 -1
  85. package/dist/composables/useTheme.d.ts.map +1 -1
  86. package/dist/dialog/Dialog.vue.d.ts.map +1 -1
  87. package/dist/dialog/DialogConfirm.vue.d.ts.map +1 -1
  88. package/dist/form-flow/FormFlow.vue.d.ts.map +1 -1
  89. package/dist/form-flow/MultiStepForm.vue.d.ts +1 -6
  90. package/dist/form-flow/form-flow.d.ts +1 -24
  91. package/dist/form-flow/form-flow.d.ts.map +1 -1
  92. package/dist/i18n/index.d.ts +0 -838
  93. package/dist/index.cjs +245 -222
  94. package/dist/index.d.ts +0 -2
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.mjs +42201 -51162
  97. package/dist/plugins/bagel.d.ts.map +1 -1
  98. package/dist/style.css +1 -2
  99. package/dist/types/BagelForm.d.ts +1 -10
  100. package/dist/types/BagelForm.d.ts.map +1 -1
  101. package/dist/types/BtnOptions.d.ts.map +1 -1
  102. package/dist/types/NavLink.d.ts +1 -2
  103. package/dist/types/TableSchema.d.ts.map +1 -1
  104. package/dist/types/index.d.ts +1 -2
  105. package/dist/types/index.d.ts.map +1 -1
  106. package/dist/utils/BagelFormUtils.d.ts +0 -1
  107. package/dist/utils/calendar/dateUtils.d.ts +2 -2
  108. package/dist/utils/calendar/dateUtils.d.ts.map +1 -1
  109. package/dist/utils/constants.d.ts.map +1 -1
  110. package/dist/utils/date.d.ts +116 -0
  111. package/dist/utils/date.d.ts.map +1 -0
  112. package/dist/utils/fetch.d.ts +29 -0
  113. package/dist/utils/fetch.d.ts.map +1 -0
  114. package/dist/utils/index.d.ts +1 -1
  115. package/dist/utils/index.d.ts.map +1 -1
  116. package/dist/utils/string.d.ts +7 -0
  117. package/dist/utils/string.d.ts.map +1 -0
  118. package/dist/utils/useSearch.d.ts +1 -1
  119. package/package.json +3 -10
  120. package/src/components/AccordionItem.vue +5 -5
  121. package/src/components/Alert.vue +37 -16
  122. package/src/components/Avatar.vue +2 -1
  123. package/src/components/Badge.vue +145 -22
  124. package/src/components/BglVideo.vue +4 -4
  125. package/src/components/Btn.vue +81 -69
  126. package/src/components/Card.vue +7 -6
  127. package/src/components/Dropdown.vue +7 -14
  128. package/src/components/FieldSetVue.vue +2 -2
  129. package/src/components/FilterQuery.vue +3 -3
  130. package/src/components/Image.vue +5 -3
  131. package/src/components/JSONSchema.vue +4 -4
  132. package/src/components/JsonBuilder.vue +3 -3
  133. package/src/components/ListItem.vue +2 -4
  134. package/src/components/MapEmbed/Index.vue +18 -17
  135. package/src/components/NavBar.vue +2 -2
  136. package/src/components/Spreadsheet/Index.vue +4 -4
  137. package/src/components/Spreadsheet/SpreadsheetTable.vue +10 -10
  138. package/src/components/Swiper.vue +3 -1
  139. package/src/components/Toast.vue +57 -36
  140. package/src/components/calendar/CalendarPopover.vue +1 -1
  141. package/src/components/calendar/Index.vue +5 -5
  142. package/src/components/calendar/views/AgendaView.vue +2 -2
  143. package/src/components/calendar/views/DayView.vue +1 -1
  144. package/src/components/calendar/views/MonthView.vue +8 -8
  145. package/src/components/dataTable/DataTable.vue +68 -10
  146. package/src/components/form/index.ts +0 -4
  147. package/src/components/form/inputs/ArrayInput.vue +1 -1
  148. package/src/components/form/inputs/CheckInput.vue +6 -6
  149. package/src/components/form/inputs/Checkbox.vue +5 -4
  150. package/src/components/form/inputs/CodeEditor/Index.vue +1 -1
  151. package/src/components/form/inputs/ColorInput.vue +5 -5
  152. package/src/components/form/inputs/DatePicker.vue +3 -3
  153. package/src/components/form/inputs/EmailInput.vue +15 -15
  154. package/src/components/form/inputs/NumberInput.vue +11 -11
  155. package/src/components/form/inputs/OTP.vue +4 -4
  156. package/src/components/form/inputs/PasswordInput.vue +3 -3
  157. package/src/components/form/inputs/RadioGroup.vue +1 -1
  158. package/src/components/form/inputs/RichText/editor.css +4 -4
  159. package/src/components/form/inputs/RichText/index.vue +39 -39
  160. package/src/components/form/inputs/RichText/utils/media.ts +1 -92
  161. package/src/components/form/inputs/RichText/utils/table.ts +4 -4
  162. package/src/components/form/inputs/SelectBtn.vue +1 -1
  163. package/src/components/form/inputs/SelectInput.vue +16 -16
  164. package/src/components/form/inputs/SignaturePad.vue +6 -6
  165. package/src/components/form/inputs/TableField.vue +7 -7
  166. package/src/components/form/inputs/TelInput.vue +12 -12
  167. package/src/components/form/inputs/TextInput.vue +11 -11
  168. package/src/components/form/inputs/ToggleInput.vue +11 -11
  169. package/src/components/form/inputs/Upload/upload.css +16 -16
  170. package/src/components/index.ts +2 -9
  171. package/src/components/layout/AppContent.vue +5 -19
  172. package/src/components/layout/AppLayout.vue +47 -18
  173. package/src/components/layout/AppSidebar.vue +19 -36
  174. package/src/components/layout/BottomMenu.vue +1 -1
  175. package/src/components/layout/Resizable.vue +5 -2
  176. package/src/components/layout/Skeleton.vue +5 -4
  177. package/src/components/layout/TabsNav.vue +23 -23
  178. package/src/components/layout/appLayoutContext.ts +44 -0
  179. package/src/components/layout/index.ts +2 -0
  180. package/src/components/lightbox/Lightbox.vue +3 -9
  181. package/src/composables/index.ts +1 -0
  182. package/src/composables/useDevice.ts +2 -1
  183. package/src/composables/useEscapeKey.ts +56 -0
  184. package/src/composables/useSchemaField.ts +2 -17
  185. package/src/composables/useTheme.ts +23 -19
  186. package/src/form-flow/FormFlow.vue +2 -0
  187. package/src/form-flow/form-flow.ts +7 -0
  188. package/src/index.ts +0 -3
  189. package/src/plugins/bagel.ts +0 -15
  190. package/src/styles/app-layout.css +231 -0
  191. package/src/styles/appearance.css +179 -21
  192. package/src/styles/bagel.css +103 -97
  193. package/src/styles/buttons.css +8 -8
  194. package/src/styles/colors.css +0 -103
  195. package/src/styles/dark.css +25 -26
  196. package/src/styles/input-variants.css +11 -11
  197. package/src/styles/inputs.css +44 -61
  198. package/src/styles/layout.css +445 -1258
  199. package/src/styles/loginCard.css +1 -1
  200. package/src/styles/mobilLayout.css +153 -28
  201. package/src/styles/text.css +500 -1508
  202. package/src/styles/theme.css +199 -435
  203. package/src/styles/transitions.css +4 -4
  204. package/src/types/BagelForm.ts +46 -151
  205. package/src/types/BtnOptions.ts +5 -3
  206. package/src/types/TableSchema.ts +1 -0
  207. package/src/types/index.ts +0 -5
  208. package/src/utils/calendar/dateUtils.ts +2 -3
  209. package/src/utils/constants.ts +7 -0
  210. package/src/utils/date.ts +482 -0
  211. package/src/utils/fetch.ts +128 -0
  212. package/src/utils/index.ts +54 -3
  213. package/src/utils/sizeParsing.ts +5 -5
  214. package/src/utils/string.ts +56 -0
  215. package/vite.config.ts +5 -1
  216. package/bin/generateFormSchema.ts +0 -1035
  217. package/bin/utils.ts +0 -223
  218. package/src/components/Carousel.vue +0 -724
  219. package/src/components/ImportData.vue +0 -1749
  220. package/src/components/Modal.vue +0 -184
  221. package/src/components/ModalConfirm.vue +0 -42
  222. package/src/components/ModalForm.vue +0 -102
  223. package/src/components/Pill.vue +0 -149
  224. package/src/components/Slider.vue +0 -1446
  225. package/src/components/Title.vue +0 -23
  226. package/src/components/ToolBar.vue +0 -9
  227. package/src/components/form/BagelForm.vue +0 -219
  228. package/src/components/form/BglFieldSet.vue +0 -14
  229. package/src/components/form/BglMultiStepForm.vue +0 -469
  230. package/src/components/form/FieldArray.vue +0 -422
  231. package/src/components/form/useBagelFormState.ts +0 -76
  232. package/src/composables/useFormField.ts +0 -38
  233. package/src/dialog/DialogOLD.vue +0 -358
  234. package/src/plugins/modalTypes.ts +0 -61
  235. package/src/plugins/useModal.ts +0 -225
  236. package/src/styles/modal.css +0 -120
  237. package/src/styles/pillColors.css +0 -0
  238. package/src/utils/BagelFormUtils.ts +0 -684
@@ -422,7 +422,7 @@ watch(() => props.modelValue, (newValue) => {
422
422
  <CheckInput class="mb-0 jsonCheckbox" :model-value="required.includes(key)" label="Required" @update:model-value="toggleRequired(key)" />
423
423
  <Btn
424
424
  icon="close"
425
- size="s"
425
+ size="sm"
426
426
  @click="removeProperty(key)"
427
427
  />
428
428
  </div>
@@ -436,7 +436,7 @@ watch(() => props.modelValue, (newValue) => {
436
436
  <Btn
437
437
  value="Add Property"
438
438
  icon="add"
439
- size="s"
439
+ size="sm"
440
440
  color="purple"
441
441
  @click="addProperty"
442
442
  />
@@ -457,13 +457,13 @@ watch(() => props.modelValue, (newValue) => {
457
457
 
458
458
  <style>
459
459
  .JSONSchema{
460
- --input-height: 38px;
460
+ --bgl-input-height: 38px;
461
461
  --bgl-accent-color: var(--bgl-purple);
462
462
  container-type: inline-size;
463
463
  container-name: json-schema;
464
464
  }
465
465
  .jsonCheckbox{
466
- --input-height: 44px;
466
+ --bgl-input-height: 44px;
467
467
  }
468
468
  .jsonFormat {
469
469
  gap: 0.25rem !important;
@@ -207,7 +207,7 @@ watch(() => props.modelValue, () => {
207
207
  icon="add"
208
208
  color="purple"
209
209
  outline
210
- size="s"
210
+ size="sm"
211
211
  @click="addField"
212
212
  />
213
213
  </div>
@@ -216,8 +216,8 @@ watch(() => props.modelValue, () => {
216
216
  <style scoped>
217
217
  .json-builder {
218
218
  /* Add any custom styles here */
219
- --input-height: 27px;
220
- --input-font-size: 12px;
219
+ --bgl-input-height: 27px;
220
+ --bgl-input-font-size: 12px;
221
221
  }
222
222
  .grid-json-builder-row{
223
223
  grid-template-columns: 2fr 1fr 2fr auto;
@@ -22,7 +22,6 @@ const props = withDefaults(
22
22
  fullWidth?: boolean
23
23
  ellipsis?: boolean
24
24
  ripple?: boolean
25
- tiny?: boolean
26
25
  onClick?: () => void
27
26
  }>(),
28
27
  {
@@ -62,9 +61,8 @@ const bind = computed(() => {
62
61
  <component
63
62
  :is="isComponent" v-bind="bind" v-ripple="ripple && isClickable"
64
63
  class="flex flex-grow-1 gap-05 list-item" :class="{
65
- 'py-1': !props.thin && !props.tiny,
64
+ 'py-1': !props.thin,
66
65
  'py-05': props.thin,
67
- 'py-0': props.tiny,
68
66
  'px-1': !props.fullWidth,
69
67
  'px-0': props.fullWidth,
70
68
  }" @click="onClick"
@@ -139,7 +137,7 @@ button.list-item {
139
137
  left: 0;
140
138
  right: 0;
141
139
  bottom: 0;
142
- border-bottom: 1px solid var(--border-color);
140
+ border-bottom: 1px solid var(--bgl-border-color);
143
141
  }
144
142
 
145
143
  .list-item:last-child::after {
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { LatLngExpression, Map, Marker } from 'leaflet'
3
- import { appendScript, sleep } from '@bagelink/vue'
4
- import { onMounted, ref, watch } from 'vue'
3
+ import { appendScript, awaitGlobal } from '@bagelink/vue'
4
+ import { onMounted, onUnmounted, ref, watch } from 'vue'
5
5
  import './leaflet.css'
6
6
 
7
7
  type MapMarker = {
@@ -40,14 +40,9 @@ const id = ref(Math.random().toString(36).slice(2, 10))
40
40
  const defaultMarkerSVG = '<svg width="28" height="38" viewBox="0 0 28 38" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14.2263 37.7955C17.0897 37.7955 19.4109 37.0138 19.4109 36.0496C19.4109 35.0854 17.0897 34.3037 14.2263 34.3037C11.363 34.3037 9.04175 35.0854 9.04175 36.0496C9.04175 37.0138 11.363 37.7955 14.2263 37.7955Z" fill="black" fill-opacity="0.1"/><path d="M14.2265 0.549591C21.2842 0.549591 27.0131 6.23786 27.0787 13.28V13.4024C27.0787 19.3328 24.4759 24.4306 21.5627 28.2764C18.6511 32.12 15.4577 34.6754 14.3457 35.5097C14.2748 35.5629 14.1778 35.5629 14.1068 35.5097C12.9947 34.675 9.80135 32.1197 6.88984 28.2762C3.97665 24.4304 1.37378 19.3328 1.37378 13.4024C1.37378 6.30387 7.12806 0.549591 14.2265 0.549591Z" fill="#ED1b3E" stroke="#ED6C6F"/><path d="M14.2263 21.6185C18.7639 21.6185 22.4424 17.94 22.4424 13.4024C22.4424 8.86477 18.7639 5.18631 14.2263 5.18631C9.68872 5.18631 6.01025 8.86477 6.01025 13.4024C6.01025 17.94 9.68872 21.6185 14.2263 21.6185Z" fill="white"/></svg>'
41
41
  const leafletScriptUrl = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js'
42
42
 
43
- async function loadGlobalL() {
44
- while (!window.L) { await sleep(100) }
45
- return window.L
46
- }
47
-
48
43
  async function initializeMap() {
49
44
  await appendScript(leafletScriptUrl)
50
- L.value = await loadGlobalL()
45
+ L.value = await awaitGlobal('L')
51
46
  if (!map.value) {
52
47
  map.value = L.value.map(id.value, {
53
48
  center: props.center,
@@ -96,7 +91,7 @@ function latLangFromMarker(marker: MapMarker): LatLngExpression {
96
91
  }
97
92
 
98
93
  async function watchMarkers(markers?: MapMarker[]) {
99
- if (!L.value) { L.value = await loadGlobalL() }
94
+ if (!L.value) { L.value = await awaitGlobal('L') }
100
95
  _markers.value.forEach(marker => marker.remove())
101
96
  if (!markers) { return }
102
97
 
@@ -111,6 +106,12 @@ watch(() => props.markers, watchMarkers, { immediate: true })
111
106
  watch(() => props.center, center => map.value?.setView(center, props.zoom), { immediate: true })
112
107
 
113
108
  onMounted(initializeMap)
109
+
110
+ onUnmounted(() => {
111
+ _markers.value.forEach(marker => marker.remove())
112
+ map.value?.remove()
113
+ map.value = undefined
114
+ })
114
115
  </script>
115
116
 
116
117
  <template>
@@ -120,7 +121,7 @@ onMounted(initializeMap)
120
121
  <style>
121
122
  .leaflet-map {
122
123
  height: 100%;
123
- border-radius: var(--input-border-radius);
124
+ border-radius: var(--bgl-input-border-radius);
124
125
  position: relative;
125
126
  background: var(--bgl-bg);
126
127
  direction: ltr;
@@ -149,27 +150,27 @@ onMounted(initializeMap)
149
150
 
150
151
  .leaflet-touch .leaflet-control-zoom-in,
151
152
  .leaflet-touch .leaflet-control-zoom-out {
152
- font-size: var(--input-font-size);
153
+ font-size: var(--bgl-input-font-size);
153
154
  }
154
155
 
155
156
  .leaflet-bar {
156
- border-radius: var(--input-border-radius) !important;
157
+ border-radius: var(--bgl-input-border-radius) !important;
157
158
  }
158
159
 
159
160
  .leaflet-touch .leaflet-bar a:first-child {
160
- border-top-left-radius: calc(var(--input-border-radius) - 2px) !important;
161
- border-top-right-radius: calc(var(--input-border-radius) - 2px) !important;
161
+ border-top-left-radius: calc(var(--bgl-input-border-radius) - 2px) !important;
162
+ border-top-right-radius: calc(var(--bgl-input-border-radius) - 2px) !important;
162
163
  }
163
164
 
164
165
  .leaflet-touch .leaflet-bar a:last-child {
165
- border-bottom-left-radius: calc(var(--input-border-radius) - 2px) !important;
166
- border-bottom-right-radius: calc(var(--input-border-radius) - 2px) !important;
166
+ border-bottom-left-radius: calc(var(--bgl-input-border-radius) - 2px) !important;
167
+ border-bottom-right-radius: calc(var(--bgl-input-border-radius) - 2px) !important;
167
168
  }
168
169
 
169
170
  .leaflet-bar a {
170
171
  background: var(--bgl-box-bg) !important;
171
172
  transition: var(--bgl-transition);
172
- border-bottom: 1px solid var(--border-color) !important;
173
+ border-bottom: 1px solid var(--bgl-border-color) !important;
173
174
  display: flex;
174
175
  justify-content: center;
175
176
  align-items: center;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" setup>
2
2
  import type { IconType, NavLink } from '@bagelink/vue'
3
- import { Icon } from '@bagelink/vue'
3
+ import { Icon, MOBILE_BREAKPOINT } from '@bagelink/vue'
4
4
  import { onMounted, ref } from 'vue'
5
5
  import { resolveI18n } from '../i18n'
6
6
 
@@ -24,7 +24,7 @@ withDefaults(
24
24
  const isOpen = ref(true)
25
25
 
26
26
  function calcIsOpen() {
27
- isOpen.value = window.innerWidth < 1100
27
+ isOpen.value = window.innerWidth <= MOBILE_BREAKPOINT
28
28
 
29
29
  const storedNavOpenVal = localStorage.getItem('navOpen')
30
30
  if (storedNavOpenVal === 'true' || storedNavOpenVal === null) { isOpen.value = true }
@@ -217,7 +217,7 @@ function handleSpreadsheetKeyDown(event: KeyboardEvent) {
217
217
  flat thin small value="$t:spreadsheet.selectAll"
218
218
  @click="visibleColumns = columnOptions.map(col => col.key)"
219
219
  />
220
- <Btn flat thin small value="$t:spreadsheet.clearAll" @click="visibleColumns = []" />
220
+ <Btn flat thin sm value="$t:spreadsheet.clearAll" @click="visibleColumns = []" />
221
221
  </div>
222
222
  <CheckInput
223
223
  v-for="col in columnOptions" :key="col.key" v-model="visibleColumns"
@@ -265,16 +265,16 @@ function handleSpreadsheetKeyDown(event: KeyboardEvent) {
265
265
  <style>
266
266
  .spreadsheet {
267
267
  user-select: none;
268
- outline: 1px solid var(--border-color);
268
+ outline: 1px solid var(--bgl-border-color);
269
269
  }
270
270
 
271
271
  .spreadsheet-toolbar {
272
- border-bottom: 1px solid var(--border-color);
272
+ border-bottom: 1px solid var(--bgl-border-color);
273
273
  padding-bottom: 0.375rem;
274
274
  margin-bottom: 0;
275
275
  }
276
276
 
277
277
  body>div:has(.spreadsheet) ::-webkit-scrollbar-track {
278
- background: var(--input-bg) !important;
278
+ background: var(--bgl-input-bg) !important;
279
279
  }
280
280
  </style>
@@ -180,7 +180,7 @@ function selectionEdgeClasses(rowIndex: number, localColIndex: number): Record<s
180
180
  .row-number{
181
181
  position: sticky;
182
182
  inset-inline-start: 0;
183
- background: var(--input-bg);
183
+ background: var(--bgl-input-bg);
184
184
  color: var(--txt-muted, #888);
185
185
  z-index: 1;
186
186
  }
@@ -188,7 +188,7 @@ function selectionEdgeClasses(rowIndex: number, localColIndex: number): Record<s
188
188
  content: '';
189
189
  position: absolute;
190
190
  inset: -1px;
191
- border: 1px solid var(--border-color);
191
+ border: 1px solid var(--bgl-border-color);
192
192
  }
193
193
 
194
194
  .stickyTop{
@@ -202,11 +202,11 @@ function selectionEdgeClasses(rowIndex: number, localColIndex: number): Record<s
202
202
  position: absolute;
203
203
  display: block;
204
204
  inset: 0;
205
- border-bottom: 1px solid var(--border-color);
205
+ border-bottom: 1px solid var(--bgl-border-color);
206
206
  }
207
207
 
208
208
  .fixed-columns {
209
- border-right: 2px solid var(--border-color);
209
+ border-right: 2px solid var(--bgl-border-color);
210
210
  }
211
211
  table {
212
212
  border-collapse: collapse;
@@ -219,14 +219,14 @@ th, td {
219
219
  }
220
220
 
221
221
  th {
222
- background: var(--input-bg);
222
+ background: var(--bgl-input-bg);
223
223
  white-space: nowrap;
224
224
  position: relative;
225
225
  padding: 0.25rem 0.5rem;
226
226
  font-weight: 500;
227
227
  text-align: start;
228
- border-bottom: 1px solid var(--border-color);
229
- border-inline-start: 1px solid var(--border-color);
228
+ border-bottom: 1px solid var(--bgl-border-color);
229
+ border-inline-start: 1px solid var(--bgl-border-color);
230
230
 
231
231
  }
232
232
  th .bgl_icon-font{
@@ -257,7 +257,7 @@ td.locked.selected {
257
257
  background: var(--bgl-primary-light);
258
258
  }
259
259
  td {
260
- border: 1px solid var(--border-color);
260
+ border: 1px solid var(--bgl-border-color);
261
261
  height: 40px;
262
262
  vertical-align: middle;
263
263
  }
@@ -311,7 +311,7 @@ td .bgl-checkbox{
311
311
  }
312
312
  td:has(.bgl-checkbox){
313
313
  text-align: center;
314
- background: var(--input-bg);
314
+ background: var(--bgl-input-bg);
315
315
  }
316
316
  td:has(:checked){
317
317
  background: var(--bgl-primary-light);
@@ -355,6 +355,6 @@ td:has(:checked){
355
355
  color: var(--txt-muted, #888);
356
356
  font-size: 0.875rem;
357
357
  background: var(--bgl-white);
358
- border: 1px solid var(--border-color);
358
+ border: 1px solid var(--bgl-border-color);
359
359
  }
360
360
  </style>
@@ -14,6 +14,8 @@ import 'swiper/css/effect-cube'
14
14
  import 'swiper/css/effect-flip'
15
15
  import 'swiper/css/effect-cards'
16
16
 
17
+ defineOptions({ name: 'BglSwiper' })
18
+
17
19
  type SwiperEffect = 'slide' | 'fade' | 'cube' | 'coverflow' | 'flip' | 'cards'
18
20
  type SwiperDirection = 'horizontal' | 'vertical'
19
21
  type SwiperVariant = 'default' | 'testimonial' | 'gallery' | 'cards' | 'coverflow' | 'hero'
@@ -505,7 +507,7 @@ defineExpose({
505
507
  opacity: 0.8;
506
508
  }
507
509
 
508
- @media screen and (max-width: 900px) {
510
+ @media screen and (max-width: 910px) {
509
511
  .swi-ctrl {
510
512
  padding: 0rem 0.5rem;
511
513
  }
@@ -1,28 +1,45 @@
1
1
  <script setup lang="ts">
2
2
  import { Icon } from '@bagelink/vue'
3
+ import { computed } from 'vue'
4
+
5
+ defineOptions({ name: 'BglToast' })
6
+
7
+ type ToastType = 'success' | 'error' | 'warning' | 'info'
3
8
 
4
9
  interface Props {
5
10
  message: string
6
- type?: 'success' | 'error' | 'warning' | 'info'
11
+ type?: ToastType
12
+ /** Boolean shorthands: <Toast error message="..." /> */
13
+ info?: boolean
14
+ success?: boolean
15
+ warning?: boolean
16
+ error?: boolean
7
17
  showIcon?: boolean
8
18
  showCloseButton?: boolean
9
19
  closeToast?: () => void
10
20
  }
11
21
 
12
- withDefaults(defineProps<Props>(), {
13
- type: 'info',
22
+ const props = withDefaults(defineProps<Props>(), {
14
23
  showIcon: true,
15
24
  showCloseButton: true,
16
25
  })
26
+
27
+ const computedType = computed<ToastType>(() => {
28
+ if (props.type) { return props.type }
29
+ if (props.error) { return 'error' }
30
+ if (props.warning) { return 'warning' }
31
+ if (props.success) { return 'success' }
32
+ return 'info'
33
+ })
17
34
  </script>
18
35
 
19
36
  <template>
20
- <div class="custom-toast" :class="`custom-toast--${type}`">
37
+ <div class="custom-toast" :class="`custom-toast--${computedType}`">
21
38
  <div v-if="showIcon" class="custom-toast__icon">
22
- <Icon v-if="type === 'success'" icon="check_circle" />
23
- <Icon v-if="type === 'error'" icon="dangerous" />
24
- <Icon v-if="type === 'warning'" icon="report" />
25
- <Icon v-if="type === 'info'" icon="info" />
39
+ <Icon v-if="computedType === 'success'" icon="check_circle" />
40
+ <Icon v-if="computedType === 'error'" icon="dangerous" />
41
+ <Icon v-if="computedType === 'warning'" icon="report" />
42
+ <Icon v-if="computedType === 'info'" icon="info" />
26
43
  </div>
27
44
  <div class="custom-toast__content">
28
45
  {{ message }}
@@ -35,27 +52,31 @@ withDefaults(defineProps<Props>(), {
35
52
 
36
53
  <style>
37
54
  .custom-toast {
38
- --toast-border-radius: 6px;
55
+ --toast-border-radius: var(--bgl-btn-border-radius);
56
+ --toast-success: var(--bgl-green);
57
+ --toast-error: var(--bgl-red);
58
+ --toast-warning: var(--bgl-yellow);
59
+ --toast-info: var(--bgl-blue);
39
60
  display: flex;
40
61
  align-items: center;
41
- gap: 12px;
42
- padding: 16px;
43
- padding-left: 20px;
62
+ gap: 0.75rem;
63
+ padding: 1rem;
64
+ padding-inline-start: 1.25rem;
44
65
  border-radius: var(--toast-border-radius);
45
- background: white;
46
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
66
+ background: var(--bgl-box-bg);
67
+ box-shadow: 0 4px 12px var(--bgl-shadow);
47
68
  min-width: 300px;
48
- font-family: system-ui, -apple-system, sans-serif;
69
+ font-family: var(--bgl-font);
49
70
  position: relative;
50
71
  overflow: hidden;
51
- outline: 1px solid var(--border-color);
52
- outline-offset: -1px !important;
72
+ outline: 1px solid var(--bgl-border-color);
73
+ outline-offset: -1px;
53
74
  }
54
75
 
55
76
  .custom-toast::before {
56
77
  content: '';
57
78
  position: absolute;
58
- left: 0;
79
+ inset-inline-start: 0;
59
80
  top: 0;
60
81
  bottom: 0;
61
82
  width: 6px;
@@ -63,52 +84,52 @@ withDefaults(defineProps<Props>(), {
63
84
  }
64
85
 
65
86
  .custom-toast--success::before {
66
- background: #10b981;
87
+ background: var(--toast-success);
67
88
  }
68
89
 
69
90
  .custom-toast--success .custom-toast__icon {
70
- color: #10b981;
91
+ color: var(--toast-success);
71
92
  }
72
93
 
73
94
  .custom-toast--error::before {
74
- background: #ef4444;
95
+ background: var(--toast-error);
75
96
  }
76
97
 
77
98
  .custom-toast--error .custom-toast__icon {
78
- color: #ef4444;
99
+ color: var(--toast-error);
79
100
  }
80
101
 
81
102
  .custom-toast--warning::before {
82
- background: #f59e0b;
103
+ background: var(--toast-warning);
83
104
  }
84
105
 
85
106
  .custom-toast--warning .custom-toast__icon {
86
- color: #f59e0b;
107
+ color: var(--toast-warning);
87
108
  }
88
109
 
89
110
  .custom-toast--info::before {
90
- background: #3b82f6;
111
+ background: var(--toast-info);
91
112
  }
92
113
 
93
114
  .custom-toast--info .custom-toast__icon {
94
- color: #3b82f6;
115
+ color: var(--toast-info);
95
116
  }
96
117
 
97
118
  .custom-toast__icon {
98
- font-size: 20px;
119
+ font-size: 1.25rem;
99
120
  font-weight: bold;
100
121
  line-height: 1;
101
122
  display: flex;
102
123
  align-items: center;
103
124
  justify-content: center;
104
- width: 24px;
105
- height: 24px;
125
+ width: 1.5rem;
126
+ height: 1.5rem;
106
127
  }
107
128
 
108
129
  .custom-toast__content {
109
130
  flex: 1;
110
- font-size: 14px;
111
- color: #1f2937;
131
+ font-size: var(--bgl-input-font-size);
132
+ color: var(--bgl-text-color);
112
133
  line-height: 1.5;
113
134
  }
114
135
 
@@ -116,14 +137,14 @@ withDefaults(defineProps<Props>(), {
116
137
  background: none;
117
138
  border: none;
118
139
  cursor: pointer;
119
- font-size: 18px;
120
- color: #6b7280;
121
- padding: 4px;
140
+ font-size: 1.125rem;
141
+ color: var(--bgl-gray);
142
+ padding: 0.25rem;
122
143
  line-height: 1;
123
- transition: color 0.2s;
144
+ transition: var(--bgl-transition);
124
145
  }
125
146
 
126
147
  .custom-toast__close:hover {
127
- color: #1f2937;
148
+ color: var(--bgl-text-color);
128
149
  }
129
150
  </style>
@@ -78,7 +78,7 @@ function closePopover() {
78
78
  min-width: 250px;
79
79
  max-width: 350px;
80
80
  background-color: white;
81
- border-radius: var(--btn-border-radius);
81
+ border-radius: var(--bgl-btn-border-radius);
82
82
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
83
83
  animation: fadeIn 0.2s ease;
84
84
  transform-origin: center left;
@@ -163,20 +163,20 @@ onMounted(() => {
163
163
  {{ formatDate(currentDate, 'YYYY') }}
164
164
  </h3>
165
165
  <div class="ms-auto flex gap-025 m_flex-wrap">
166
- <TabsNav size="s" v-if="viewSwitcher === 'tabs'" :model-value="currentView" :tabs="viewTabs" group="calendar-view" @update:model-value="handleViewChange($event as CalendarView)"
167
- style="--bgl_tabs-border-radius: calc(var(--btn-border-radius) / 2)" class="txt12 m_mb-05 m_w-100p " align-txt="center" />
166
+ <TabsNav size="sm" v-if="viewSwitcher === 'tabs'" :model-value="currentView" :tabs="viewTabs" group="calendar-view" @update:model-value="handleViewChange($event as CalendarView)"
167
+ style="--bgl_tabs-border-radius: calc(var(--bgl-btn-border-radius) / 2)" class="txt12 m_mb-05 m_w-100p " align-txt="center" />
168
168
  <Dropdown v-else thin :value="currentView" iconEnd="keyboard_arrow_down" color="gray">
169
169
  <ListItem v-for="(_, key) in views" :key="key" thin :title="t(`calendar.views.${key.toLowerCase()}`)" @click="handleViewChange(key)" />
170
170
  </Dropdown>
171
171
  <div class="flex gap-025">
172
- <Btn icon="calendar" size="s" class="txt12" color="gray" :value="t('calendar.today')" @click="handleDateChange(new Date())" />
172
+ <Btn icon="calendar" size="sm" class="txt12" color="gray" :value="t('calendar.today')" @click="handleDateChange(new Date())" />
173
173
  <Btn
174
- icon="chevron_left" color="gray" size="s" class=""
174
+ icon="chevron_left" color="gray" size="sm" class=""
175
175
  :disabled="currentView === 'Agenda'"
176
176
  @click="handleDateChange(timeDelta(currentDate, { [viewToDeltaKey[currentView]]: -1 }))"
177
177
  />
178
178
  <Btn
179
- icon="chevron_right" color="gray" size="s" class=""
179
+ icon="chevron_right" color="gray" size="sm" class=""
180
180
  :disabled="currentView === 'Agenda'"
181
181
  @click="handleDateChange(timeDelta(currentDate, { [viewToDeltaKey[currentView]]: 1 }))"
182
182
  />
@@ -239,12 +239,12 @@ onUnmounted(() => { containerRef.value?.removeEventListener('scroll', handleScro
239
239
  display: block;
240
240
  width: 1px;
241
241
  height: calc(100% - 2rem);
242
- background: var(--border-color, #e6e8ec);
242
+ background: var(--bgl-border-color, #e6e8ec);
243
243
  margin: 0.5rem auto 0;
244
244
  }
245
245
 
246
246
  /* .agenda-event-card {
247
- border-inline-start: var(--event-color, var(--bgl-primary)) solid calc(var(--card-border-radius) + 0.25rem);
247
+ border-inline-start: var(--event-color, var(--bgl-primary)) solid calc(var(--bgl-card-border-radius) + 0.25rem);
248
248
  } */
249
249
 
250
250
  .agenda-event-card h3::before {
@@ -277,7 +277,7 @@ onUnmounted(() => {
277
277
  .events-column {
278
278
  flex-grow: 1;
279
279
  position: relative;
280
- border-inline-start: 1px solid var(--border-color);
280
+ border-inline-start: 1px solid var(--bgl-border-color);
281
281
  min-height: 100%; /* Ensure the column fills the full height */
282
282
  }
283
283
 
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import type { SetupContext } from 'vue'
3
3
  import type { CalendarEvent } from '../CalendarTypes'
4
- import { formatDate, getI18n } from '@bagelink/vue'
4
+ import { formatDate, getI18n, useDevice } from '@bagelink/vue'
5
5
  import { computed, useSlots } from 'vue'
6
6
 
7
7
  interface MonthViewEvent {
@@ -23,8 +23,8 @@ const emit = defineEmits<{
23
23
 
24
24
  const slots: SetupContext['slots'] = useSlots()
25
25
 
26
- // Responsive state
27
- const isMobile = computed(() => window.innerWidth < 768)
26
+ // Responsive state (reactive — tracks resize via useDevice)
27
+ const { isMobile } = useDevice()
28
28
 
29
29
  // Calendar data
30
30
  const weekDays = computed(() => {
@@ -166,7 +166,7 @@ function handleEventSelection(event: CalendarEvent, domEvent?: MouseEvent) {
166
166
  .month-header {
167
167
  display: grid;
168
168
  grid-template-columns: repeat(7, 1fr);
169
- border-bottom: 1px solid var(--border-color);
169
+ border-bottom: 1px solid var(--bgl-border-color);
170
170
  }
171
171
 
172
172
  .weekday {
@@ -181,13 +181,13 @@ function handleEventSelection(event: CalendarEvent, domEvent?: MouseEvent) {
181
181
  grid-template-rows: repeat(6, 1fr);
182
182
  flex-grow: 1;
183
183
  overflow: auto;
184
- border-inline-end: 1px solid var(--border-color);
184
+ border-inline-end: 1px solid var(--bgl-border-color);
185
185
 
186
186
  }
187
187
 
188
188
  .day-cell {
189
- border-inline-start: 1px solid var(--border-color);
190
- border-bottom: 1px solid var(--border-color);
189
+ border-inline-start: 1px solid var(--bgl-border-color);
190
+ border-bottom: 1px solid var(--bgl-border-color);
191
191
  padding: 0.5rem;
192
192
  min-height: 100px;
193
193
  display: flex;
@@ -260,7 +260,7 @@ function handleEventSelection(event: CalendarEvent, domEvent?: MouseEvent) {
260
260
  min-width: 250px;
261
261
  max-width: 350px;
262
262
  background-color: white;
263
- border-radius: var(--btn-border-radius);
263
+ border-radius: var(--bgl-btn-border-radius);
264
264
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
265
265
  animation: fadeIn 0.2s ease;
266
266
  transform-origin: center left;