@bagelink/vue 1.5.15 → 1.5.20

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 (135) hide show
  1. package/bin/experimentalGenTypedRoutes.ts +15 -15
  2. package/bin/generateFormSchema.ts +12 -12
  3. package/bin/utils.ts +4 -4
  4. package/dist/components/Dropdown.vue.d.ts.map +1 -1
  5. package/dist/components/RouterWrapper.vue.d.ts.map +1 -1
  6. package/dist/components/calendar/CalendarPopover.vue.d.ts.map +1 -1
  7. package/dist/components/form/BagelForm.vue.d.ts.map +1 -1
  8. package/dist/components/form/FieldArray.vue.d.ts +5 -4
  9. package/dist/components/form/FieldArray.vue.d.ts.map +1 -1
  10. package/dist/components/form/inputs/CheckInput.vue.d.ts.map +1 -1
  11. package/dist/components/form/inputs/RichText/index.vue.d.ts +1 -0
  12. package/dist/components/form/inputs/RichText/index.vue.d.ts.map +1 -1
  13. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  14. package/dist/components/form/inputs/ToggleInput.vue.d.ts.map +1 -1
  15. package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts.map +1 -1
  16. package/dist/composables/useFormField.d.ts.map +1 -1
  17. package/dist/composables/useSchemaField.d.ts.map +1 -1
  18. package/dist/index.cjs +68 -55
  19. package/dist/index.mjs +34035 -143
  20. package/dist/style.css +1 -1
  21. package/package.json +1 -1
  22. package/src/components/AccordionItem.vue +2 -2
  23. package/src/components/AddToCalendar.vue +1 -1
  24. package/src/components/BglVideo.vue +8 -8
  25. package/src/components/Btn.vue +9 -9
  26. package/src/components/Card.vue +4 -4
  27. package/src/components/Carousel.vue +44 -44
  28. package/src/components/DataPreview.vue +1 -1
  29. package/src/components/DragOver.vue +6 -6
  30. package/src/components/Dropdown.vue +14 -14
  31. package/src/components/Flag.vue +3 -3
  32. package/src/components/Icon/Icon.vue +13 -13
  33. package/src/components/Image.vue +4 -4
  34. package/src/components/ImportData.vue +79 -79
  35. package/src/components/ListItem.vue +7 -7
  36. package/src/components/MapEmbed/Index.vue +6 -6
  37. package/src/components/Modal.vue +10 -10
  38. package/src/components/ModalForm.vue +4 -4
  39. package/src/components/NavBar.vue +2 -2
  40. package/src/components/Pagination.vue +9 -9
  41. package/src/components/Pill.vue +1 -1
  42. package/src/components/Rating.vue +2 -2
  43. package/src/components/RouterWrapper.vue +3 -3
  44. package/src/components/Slider.vue +77 -77
  45. package/src/components/Spreadsheet/Index.vue +34 -34
  46. package/src/components/Spreadsheet/SpreadsheetTable.vue +3 -3
  47. package/src/components/Zoomer.vue +28 -28
  48. package/src/components/analytics/BarChart.vue +6 -6
  49. package/src/components/analytics/KpiCard.vue +2 -2
  50. package/src/components/analytics/LineChart.vue +14 -14
  51. package/src/components/analytics/PieChart.vue +11 -11
  52. package/src/components/calendar/CalendarPopover.vue +1 -1
  53. package/src/components/calendar/Index.vue +1 -1
  54. package/src/components/calendar/views/AgendaView.vue +2 -2
  55. package/src/components/calendar/views/DayView.vue +6 -6
  56. package/src/components/calendar/views/MonthView.vue +2 -2
  57. package/src/components/calendar/views/WeekView.vue +18 -18
  58. package/src/components/dataTable/DataTable.vue +3 -3
  59. package/src/components/dataTable/useSorting.ts +1 -1
  60. package/src/components/dataTable/useTableData.ts +15 -15
  61. package/src/components/dataTable/useTableSelection.ts +8 -8
  62. package/src/components/dataTable/useTableVirtualization.ts +1 -1
  63. package/src/components/draggable/useDraggable.ts +42 -42
  64. package/src/components/form/BagelForm.vue +66 -23
  65. package/src/components/form/BglMultiStepForm.vue +18 -18
  66. package/src/components/form/FieldArray.vue +177 -67
  67. package/src/components/form/inputs/CheckInput.vue +2 -1
  68. package/src/components/form/inputs/CodeEditor/Index.vue +1 -1
  69. package/src/components/form/inputs/CodeEditor/format.ts +7 -7
  70. package/src/components/form/inputs/CodeEditor/useHighlight.ts +6 -6
  71. package/src/components/form/inputs/DateInput.vue +6 -6
  72. package/src/components/form/inputs/DatePicker.vue +19 -19
  73. package/src/components/form/inputs/EmailInput.vue +14 -14
  74. package/src/components/form/inputs/NumberInput.vue +6 -6
  75. package/src/components/form/inputs/OTP.vue +3 -3
  76. package/src/components/form/inputs/RadioGroup.vue +1 -1
  77. package/src/components/form/inputs/RadioPillsInput.vue +8 -8
  78. package/src/components/form/inputs/RichText/components/EditorToolbar.vue +10 -10
  79. package/src/components/form/inputs/RichText/components/TableGridSelector.vue +1 -1
  80. package/src/components/form/inputs/RichText/composables/useCommands.ts +1 -1
  81. package/src/components/form/inputs/RichText/composables/useEditor.ts +12 -12
  82. package/src/components/form/inputs/RichText/composables/useEditorKeyboard.ts +1 -1
  83. package/src/components/form/inputs/RichText/index.vue +300 -132
  84. package/src/components/form/inputs/RichText/utils/commands.ts +69 -69
  85. package/src/components/form/inputs/RichText/utils/debug.ts +1 -1
  86. package/src/components/form/inputs/RichText/utils/formatting.ts +39 -39
  87. package/src/components/form/inputs/RichText/utils/media.ts +6 -6
  88. package/src/components/form/inputs/RichText/utils/selection.ts +28 -28
  89. package/src/components/form/inputs/RichText/utils/table.ts +19 -19
  90. package/src/components/form/inputs/SelectBtn.vue +1 -1
  91. package/src/components/form/inputs/SelectInput.vue +50 -26
  92. package/src/components/form/inputs/SignaturePad.vue +15 -15
  93. package/src/components/form/inputs/TableField.vue +1 -1
  94. package/src/components/form/inputs/TelInput.vue +6 -6
  95. package/src/components/form/inputs/TextInput.vue +5 -5
  96. package/src/components/form/inputs/ToggleInput.vue +2 -1
  97. package/src/components/form/inputs/Upload/UploadInput.vue +155 -102
  98. package/src/components/form/inputs/Upload/upload.ts +1 -1
  99. package/src/components/form/inputs/Upload/useFileUpload.ts +6 -6
  100. package/src/components/form/useBagelFormState.ts +5 -5
  101. package/src/components/layout/AppContent.vue +1 -1
  102. package/src/components/layout/AppLayout.vue +1 -1
  103. package/src/components/layout/Layout.vue +4 -4
  104. package/src/components/layout/TabbedLayout.vue +1 -1
  105. package/src/components/layout/Tabs.vue +2 -2
  106. package/src/components/layout/TabsNav.vue +7 -7
  107. package/src/components/lightbox/Lightbox.vue +8 -8
  108. package/src/components/lightbox/index.ts +8 -8
  109. package/src/composables/index.ts +2 -2
  110. package/src/composables/useAddToCalendar.ts +13 -13
  111. package/src/composables/useDevice.ts +2 -2
  112. package/src/composables/useExcel.ts +6 -6
  113. package/src/composables/useFormField.ts +5 -9
  114. package/src/composables/usePolling.ts +8 -8
  115. package/src/composables/useSchemaField.ts +53 -38
  116. package/src/composables/useTheme.ts +9 -9
  117. package/src/composables/useValidateFieldValue.ts +2 -2
  118. package/src/directives/pattern.ts +25 -25
  119. package/src/directives/ripple.ts +4 -4
  120. package/src/directives/vResize.ts +6 -6
  121. package/src/plugins/bagel.ts +4 -4
  122. package/src/plugins/useModal.ts +3 -3
  123. package/src/styles/layout.css +7 -1
  124. package/src/utils/BagelFormUtils.ts +7 -7
  125. package/src/utils/calendar/Helpers.ts +8 -8
  126. package/src/utils/calendar/dateUtils.ts +22 -22
  127. package/src/utils/calendar/time.ts +25 -25
  128. package/src/utils/calendar/week.ts +25 -25
  129. package/src/utils/elementUtils.ts +27 -27
  130. package/src/utils/index.ts +22 -22
  131. package/src/utils/sizeParsing.ts +2 -2
  132. package/src/utils/strings.ts +5 -5
  133. package/src/utils/tapDetector.ts +11 -11
  134. package/src/utils/useSearch.ts +29 -29
  135. package/vite.config.ts +1 -1
@@ -47,12 +47,12 @@ function getTarget(el: HTMLElement): HTMLInputElement | HTMLTextAreaElement | nu
47
47
 
48
48
  function getModifiers(binding: DirectiveBinding): string {
49
49
  const modifiers = Object.keys(binding.modifiers)
50
- return modifiers.length > 0 ? modifiers[modifiers.length - 1] : ''
50
+ return 0 < modifiers.length ? modifiers[modifiers.length - 1] : ''
51
51
  }
52
52
 
53
53
  function getRegex(state: PatternState): RegExp {
54
- if (state.pattern != null) return state.pattern
55
- if (state.modifier != null && state.modifier !== '') {
54
+ if (null != state.pattern) {return state.pattern}
55
+ if (null != state.modifier && '' !== state.modifier) {
56
56
  const presetPattern = (DEFAULT_PATTERNS as Record<string, PatternValue | undefined>)[state.modifier]?.pattern
57
57
  return presetPattern ?? /./
58
58
  }
@@ -80,10 +80,10 @@ function bindEvents(el: HTMLElement, target: HTMLInputElement | HTMLTextAreaElem
80
80
  }
81
81
 
82
82
  function unbindEvents(target: HTMLInputElement | HTMLTextAreaElement, state: PatternState) {
83
- if (state.keydownEvent) target.removeEventListener('keydown', state.keydownEvent)
84
- if (state.inputEvent) target.removeEventListener('input', state.inputEvent, { capture: true })
85
- if (state.compositionStartEvent) target.removeEventListener('compositionstart', state.compositionStartEvent)
86
- if (state.compositionEndEvent) target.removeEventListener('compositionend', state.compositionEndEvent)
83
+ if (state.keydownEvent) {target.removeEventListener('keydown', state.keydownEvent)}
84
+ if (state.inputEvent) {target.removeEventListener('input', state.inputEvent, { capture: true })}
85
+ if (state.compositionStartEvent) {target.removeEventListener('compositionstart', state.compositionStartEvent)}
86
+ if (state.compositionEndEvent) {target.removeEventListener('compositionend', state.compositionEndEvent)}
87
87
 
88
88
  state.keydownEvent = undefined
89
89
  state.inputEvent = undefined
@@ -102,19 +102,19 @@ function isNavigationOrControlKey(event: KeyboardEvent): boolean {
102
102
  'ArrowDown',
103
103
  'Enter',
104
104
  ]
105
- if (event.ctrlKey || event.altKey || event.metaKey) return true
105
+ if (event.ctrlKey || event.altKey || event.metaKey) {return true}
106
106
  return allowedKeys.includes(event.key)
107
107
  }
108
108
 
109
109
  function onKeydown(event: KeyboardEvent, target: HTMLInputElement | HTMLTextAreaElement, state: PatternState) {
110
- if (state.composing === true) return
111
- if (isNavigationOrControlKey(event)) return
110
+ if (true === state.composing) {return}
111
+ if (isNavigationOrControlKey(event)) {return}
112
112
 
113
113
  // If a transform is configured (e.g., slug/snake/lower/upper),
114
114
  // do not block keystrokes; normalization happens on input.
115
- if (state.modifier != null && state.modifier !== '') {
115
+ if (null != state.modifier && '' !== state.modifier) {
116
116
  const transformFn = (DEFAULT_PATTERNS as Record<string, PatternValue | undefined>)[state.modifier]?.transform
117
- if (typeof transformFn === 'function') return
117
+ if ('function' === typeof transformFn) {return}
118
118
  }
119
119
 
120
120
  const regex = getRegex(state)
@@ -142,7 +142,7 @@ function onCompositionEnd(
142
142
  function sanitizeTransformed(value: string, state: PatternState): string {
143
143
  const regex = getRegex(state)
144
144
  let transformed: string
145
- if (state.modifier != null && state.modifier !== '') {
145
+ if (null != state.modifier && '' !== state.modifier) {
146
146
  const transformFn = (DEFAULT_PATTERNS as Record<string, PatternValue | undefined>)[state.modifier]?.transform
147
147
  transformed = transformFn ? transformFn(value) : value
148
148
  } else {
@@ -151,7 +151,7 @@ function sanitizeTransformed(value: string, state: PatternState): string {
151
151
  let result = ''
152
152
  for (let i = 0; i < transformed.length; i++) {
153
153
  const ch = transformed[i]
154
- if (regex.test(ch)) result += ch
154
+ if (regex.test(ch)) {result += ch}
155
155
  }
156
156
  return result
157
157
  }
@@ -161,8 +161,8 @@ function onInput(
161
161
  target: HTMLInputElement | HTMLTextAreaElement,
162
162
  state: PatternState,
163
163
  ) {
164
- if (state.reformatting === true) return
165
- if (state.composing === true) return
164
+ if (true === state.reformatting) {return}
165
+ if (true === state.composing) {return}
166
166
 
167
167
  const originalValue = target.value
168
168
  const selectionEnd = target.selectionEnd ?? originalValue.length
@@ -170,7 +170,7 @@ function onInput(
170
170
  const left = originalValue.slice(0, selectionEnd)
171
171
 
172
172
  const sanitizedFull = sanitizeTransformed(originalValue, state)
173
- if (sanitizedFull === originalValue) return
173
+ if (sanitizedFull === originalValue) {return}
174
174
 
175
175
  const leftSanitized = sanitizeTransformed(left, state)
176
176
  const newCursor = leftSanitized.length
@@ -186,15 +186,15 @@ function onInput(
186
186
  const pattern = {
187
187
  beforeMount(el: HTMLElement, binding: DirectiveBinding) {
188
188
  const target = getTarget(el)
189
- if (target === null) return
189
+ if (null === target) {return}
190
190
 
191
191
  const state: PatternState = {
192
192
  modifier: getModifiers(binding),
193
193
  }
194
194
 
195
- if (typeof binding.value === 'object' && binding.value !== null) {
195
+ if ('object' === typeof binding.value && null !== binding.value) {
196
196
  state.pattern = binding.value.pattern ?? /./
197
- state.validateOnly = binding.value.validateOnly === true
197
+ state.validateOnly = true === binding.value.validateOnly
198
198
  }
199
199
 
200
200
  stateMap.set(el, state)
@@ -202,18 +202,18 @@ const pattern = {
202
202
  },
203
203
  updated(el: HTMLElement, binding: DirectiveBinding) {
204
204
  const target = getTarget(el)
205
- if (target === null) return
205
+ if (null === target) {return}
206
206
 
207
207
  const state = stateMap.get(el)
208
- if (state === undefined) return
208
+ if (state === undefined) {return}
209
209
 
210
210
  unbindEvents(target, state)
211
211
 
212
212
  state.modifier = getModifiers(binding)
213
213
 
214
- if (typeof binding.value === 'object' && binding.value !== null) {
214
+ if ('object' === typeof binding.value && null !== binding.value) {
215
215
  state.pattern = binding.value.pattern ?? /./
216
- state.validateOnly = binding.value.validateOnly === true
216
+ state.validateOnly = true === binding.value.validateOnly
217
217
  }
218
218
 
219
219
  bindEvents(el, target, state)
@@ -222,7 +222,7 @@ const pattern = {
222
222
  const target = getTarget(el)
223
223
  const state = stateMap.get(el)
224
224
 
225
- if (target !== null && state !== undefined) {
225
+ if (null !== target && state !== undefined) {
226
226
  unbindEvents(target, state)
227
227
  }
228
228
 
@@ -27,8 +27,8 @@ const ripple: Directive<HTMLElement, boolean> = {
27
27
 
28
28
  (el as any).__rippleClickHandler = clickHandler
29
29
 
30
- if (binding.value !== false) {
31
- if (getComputedStyle(el).position === 'static') {
30
+ if (false !== binding.value) {
31
+ if ('static' === getComputedStyle(el).position) {
32
32
  el.style.position = 'relative'
33
33
  }
34
34
  el.style.overflow = 'hidden'
@@ -37,10 +37,10 @@ const ripple: Directive<HTMLElement, boolean> = {
37
37
  },
38
38
  updated(el: HTMLElement, binding: DirectiveBinding<boolean>) {
39
39
  const clickHandler = (el as any).__rippleClickHandler
40
- if (binding.value === false) {
40
+ if (false === binding.value) {
41
41
  el.removeEventListener('mousedown', clickHandler)
42
42
  } else {
43
- if (getComputedStyle(el).position === 'static') {
43
+ if ('static' === getComputedStyle(el).position) {
44
44
  el.style.position = 'relative'
45
45
  }
46
46
  el.style.overflow = 'hidden'
@@ -73,12 +73,12 @@ function initResize(el: HTMLElement, binding: { value?: ResizeOptions }) {
73
73
  }
74
74
 
75
75
  function applyGridSnapping(height: number): number {
76
- if (!options.gridSize) return height
76
+ if (!options.gridSize) {return height}
77
77
  return Math.round(height / options.gridSize) * options.gridSize
78
78
  }
79
79
 
80
80
  function handleMove(e: MouseEvent | TouchEvent) {
81
- if (!isResizing) return
81
+ if (!isResizing) {return}
82
82
  e.preventDefault()
83
83
 
84
84
  const clientY = 'touches' in e ? e.touches[0].clientY : e.clientY
@@ -109,7 +109,7 @@ function initResize(el: HTMLElement, binding: { value?: ResizeOptions }) {
109
109
  }
110
110
 
111
111
  function handleEnd(e: MouseEvent | TouchEvent) {
112
- if (!isResizing) return
112
+ if (!isResizing) {return}
113
113
 
114
114
  const clientY = 'touches' in e ? e.changedTouches[0].clientY : e.clientY
115
115
  const event = createResizeEvent(clientY)
@@ -136,7 +136,7 @@ function initResize(el: HTMLElement, binding: { value?: ResizeOptions }) {
136
136
 
137
137
  function handleStart(e: MouseEvent | TouchEvent) {
138
138
  // Only handle left mouse button for mouse events
139
- if (e instanceof MouseEvent && e.button !== 0) return
139
+ if (e instanceof MouseEvent && 0 !== e.button) {return}
140
140
 
141
141
  e.preventDefault()
142
142
  isResizing = true
@@ -186,7 +186,7 @@ export const vResize: Directive<HTMLElement, ResizeOptions> = {
186
186
 
187
187
  unmounted(el) {
188
188
  const cleanup = (el as any)[RESIZE_KEY]
189
- if (typeof cleanup === 'function') {
189
+ if ('function' === typeof cleanup) {
190
190
  cleanup()
191
191
  delete (el as any)[RESIZE_KEY]
192
192
  }
@@ -195,7 +195,7 @@ export const vResize: Directive<HTMLElement, ResizeOptions> = {
195
195
  updated(el, binding) {
196
196
  if (binding.value !== binding.oldValue) {
197
197
  const cleanup = (el as any)[RESIZE_KEY]
198
- if (typeof cleanup === 'function') {
198
+ if ('function' === typeof cleanup) {
199
199
  cleanup()
200
200
  delete (el as any)[RESIZE_KEY]
201
201
  }
@@ -14,7 +14,7 @@ export const i18nTInjectionKey = Symbol('bagel') as InjectionKey<(key: string) =
14
14
 
15
15
  export function injectI18nT(injectionKey: typeof i18nTInjectionKey = i18nTInjectionKey) {
16
16
  const i18nT = inject(injectionKey)
17
- if (!i18nT) throw new Error('No i18nT provided')
17
+ if (!i18nT) {throw new Error('No i18nT provided')}
18
18
  return i18nT
19
19
  }
20
20
 
@@ -55,9 +55,9 @@ export const BagelVue: Plugin<BagelOptions> = {
55
55
  },
56
56
  })
57
57
  const { availableLangs, defaultLang, lang } = useLang()
58
- if (options.availableLangs) availableLangs.value = options.availableLangs
59
- if (options.defaultLang) defaultLang.value = options.defaultLang
60
- if (options.language) lang.value = options.language
58
+ if (options.availableLangs) {availableLangs.value = options.availableLangs}
59
+ if (options.defaultLang) {defaultLang.value = options.defaultLang}
60
+ if (options.language) {lang.value = options.language}
61
61
  app.config.globalProperties.$bagel = bagel
62
62
  app.provide(bagelInjectionKey, bagel)
63
63
  app.config.globalProperties.$i18T
@@ -29,7 +29,7 @@ export const ModalSymbol: InjectionKey<ModalApi> = Symbol('modal')
29
29
 
30
30
  export function useModal(): ModalApi {
31
31
  const modalApi = inject(ModalSymbol)
32
- if (!modalApi) throw new Error('Modal API not provided')
32
+ if (!modalApi) {throw new Error('Modal API not provided')}
33
33
  return modalApi
34
34
  }
35
35
 
@@ -43,7 +43,7 @@ export const ModalPlugin: Plugin = {
43
43
 
44
44
  const confirmModal = (options: ConfirmModalUserOptions): Promise<boolean> => {
45
45
  return new Promise((resolve) => {
46
- const confirmOptions = typeof options === 'string' ? { title: '', message: options } : options
46
+ const confirmOptions = 'string' === typeof options ? { title: '', message: options } : options
47
47
  modalStack.push({
48
48
  modalOptions: { ...confirmOptions, resolve },
49
49
  modalType: 'confirmModal',
@@ -64,7 +64,7 @@ export const ModalPlugin: Plugin = {
64
64
  }
65
65
  modalStack.push(modalComponent)
66
66
 
67
- if (modalType === 'modalForm') {
67
+ if ('modalForm' === modalType) {
68
68
  return modalComponent as ModalFormComponentProps<T>
69
69
  }
70
70
  return modalComponent
@@ -741,7 +741,7 @@
741
741
  top: 10rem;
742
742
  }
743
743
 
744
- .top-50p{
744
+ .top-50p {
745
745
  top: 50%;
746
746
  }
747
747
 
@@ -2072,6 +2072,7 @@
2072
2072
  margin-inline-end: auto;
2073
2073
  width: 98%;
2074
2074
  }
2075
+
2075
2076
  .w1,
2076
2077
  .w1px,
2077
2078
  .w-1px,
@@ -7285,6 +7286,11 @@
7285
7286
  grid-template-rows: auto 1fr;
7286
7287
  }
7287
7288
 
7289
+ .grid-list-wrapper-reverse,
7290
+ .grid-list-wrapper-rev {
7291
+ grid-template-rows: 1fr auto;
7292
+ }
7293
+
7288
7294
  .grid-overlap {
7289
7295
  display: grid;
7290
7296
  grid-template-columns: 1fr;
@@ -101,7 +101,7 @@ export function getBaseField<T, P extends Path<T, PO>, PO extends PathsOptions =
101
101
  labelOrRest: string | Partial<BaseBagelField<T, P>> = {},
102
102
  rest: Partial<BaseBagelField<T, P>> = {}
103
103
  ): BaseBagelField<T, P, PO> {
104
- if (typeof labelOrRest === 'object') return { id, ...labelOrRest }
104
+ if ('object' === typeof labelOrRest) {return { id, ...labelOrRest }}
105
105
  return { id, label: labelOrRest, ...rest }
106
106
  }
107
107
 
@@ -426,7 +426,7 @@ export function rangeField<
426
426
  }
427
427
 
428
428
  export function bglForm<T>(idOrField?: string | FieldByP<T, Path<T>>, ...schema: FieldByP<T, Path<T>>[]) {
429
- if (typeof idOrField === 'string') {
429
+ if ('string' === typeof idOrField) {
430
430
  return {
431
431
  $el: 'bagelform',
432
432
  id: idOrField,
@@ -494,13 +494,13 @@ export function colorField<
494
494
 
495
495
  export function findBglFieldById<T>(id: string, _schema: ShallowBglFormSchemaT<T>): FieldByP<T, Path<T>> | undefined {
496
496
  for (const field of _schema) {
497
- if (field.id === id) return field as FieldByP<T, Path<T>> | undefined
498
- if (field.children && Number(field.children.length) > 0) {
497
+ if (field.id === id) {return field as FieldByP<T, Path<T>> | undefined}
498
+ if (field.children && 0 < Number(field.children.length)) {
499
499
  const fieldChildren = field.children.filter(
500
- c => typeof c === 'object' && '$el' in c
500
+ c => 'object' === typeof c && '$el' in c
501
501
  )
502
502
  const child = findBglFieldById(id, fieldChildren as ShallowBglFormSchemaT<T>)
503
- if (child) return child as FieldByP<T, Path<T>> | undefined
503
+ if (child) {return child as FieldByP<T, Path<T>> | undefined}
504
504
  }
505
505
  }
506
506
  return undefined
@@ -528,7 +528,7 @@ export function arrField<
528
528
  options?: ArrayFieldOptions<T, P>
529
529
  ): ArrayBagelField<T, P, PO> {
530
530
  const arraySpecificAttrs = (
531
- typeof schemaOrType === 'string'
531
+ 'string' === typeof schemaOrType
532
532
  ? { type: schemaOrType }
533
533
  : { schema: schemaOrType }
534
534
  )
@@ -11,7 +11,7 @@ export default class Helpers {
11
11
  * otherwise just use navigator.language
12
12
  */
13
13
  static getBrowserNavigatorLocale(): string {
14
- if (typeof navigator !== 'object') return 'en-US'
14
+ if ('object' !== typeof navigator) {return 'en-US'}
15
15
 
16
16
  return navigator.languages && navigator.languages.length
17
17
  ? navigator.languages[0]
@@ -22,16 +22,16 @@ export default class Helpers {
22
22
  * Solution from https://github.com/vuejs/core/issues/4733#issuecomment-1024816095
23
23
  */
24
24
  static hasSlotContent(slot: Slot | undefined) {
25
- if (!slot) return false
25
+ if (!slot) {return false}
26
26
 
27
27
  return slot().some((vnode: VNode) => {
28
- if (vnode.type === Comment) return false
28
+ if (vnode.type === Comment) {return false}
29
29
 
30
- if (Array.isArray(vnode.children) && !vnode.children.length) return false
30
+ if (Array.isArray(vnode.children) && !vnode.children.length) {return false}
31
31
 
32
32
  return (
33
33
  vnode.type !== Text
34
- || (typeof vnode.children === 'string' && vnode.children.trim() !== '')
34
+ || ('string' === typeof vnode.children && '' !== vnode.children.trim())
35
35
  )
36
36
  })
37
37
  }
@@ -43,9 +43,9 @@ export default class Helpers {
43
43
  const isFullDayEvent = DATE_TIME_STRING_FULL_DAY_PATTERN.test(event.time.start)
44
44
  && DATE_TIME_STRING_FULL_DAY_PATTERN.test(event.time.end)
45
45
 
46
- if (isTimedEvent) return this.getTimedEventType(event, time)
46
+ if (isTimedEvent) {return this.getTimedEventType(event, time)}
47
47
 
48
- if (isFullDayEvent) return this.getFullDayEventType(event, time)
48
+ if (isFullDayEvent) {return this.getFullDayEventType(event, time)}
49
49
 
50
50
  throw new Error('Event has invalid type')
51
51
  }
@@ -81,6 +81,6 @@ export default class Helpers {
81
81
  }
82
82
 
83
83
  static isUIEventTouchEvent(event: UIEvent): boolean {
84
- return 'touches' in event && typeof event.touches === 'object'
84
+ return 'touches' in event && 'object' === typeof event.touches
85
85
  }
86
86
  }
@@ -112,8 +112,8 @@ const translations: Record<AvailableTimeLanguages, LanguageTranslations> = {
112
112
  }
113
113
 
114
114
  export function timeAgo(date: string | Date, lang: AvailableTimeLanguages = 'en') {
115
- if (!date) return ''
116
- if (typeof date === 'string') date = new Date(date)
115
+ if (!date) {return ''}
116
+ if ('string' === typeof date) {date = new Date(date)}
117
117
  const now: Date = new Date()
118
118
  const nowNumber = now.getTime()
119
119
  const dateNumber = date.getTime()
@@ -133,32 +133,32 @@ export function timeAgo(date: string | Date, lang: AvailableTimeLanguages = 'en'
133
133
 
134
134
  for (const interval of intervals) {
135
135
  const count = Math.floor(Math.abs(seconds) / interval.seconds)
136
- if (count >= 1) {
137
- const suffix = seconds < 0 ? ` ${selectedLang.ago}` : ''
138
- const prefix = seconds > 0 && selectedLang.in !== 'in' ? `${selectedLang.in} ` : ''
136
+ if (1 <= count) {
137
+ const suffix = 0 > seconds ? ` ${selectedLang.ago}` : ''
138
+ const prefix = 0 < seconds && 'in' !== selectedLang.in ? `${selectedLang.in} ` : ''
139
139
 
140
140
  // Handle Hebrew plural forms
141
- if (lang === 'he') {
141
+ if ('he' === lang) {
142
142
  const timeUnit = selectedLang[interval.label] as TimeUnit
143
- const form = count === 1 ? timeUnit.singular : timeUnit.plural
143
+ const form = 1 === count ? timeUnit.singular : timeUnit.plural
144
144
 
145
145
  // For Hebrew, we place the prefix/suffix before the number
146
- const hebrewPrefix = seconds < 0 ? `${selectedLang.ago} ` : (seconds > 0 ? `${selectedLang.in} ` : '')
146
+ const hebrewPrefix = 0 > seconds ? `${selectedLang.ago} ` : (0 < seconds ? `${selectedLang.in} ` : '')
147
147
 
148
- if (interval.label === 'day' && seconds > 0) {
148
+ if ('day' === interval.label && 0 < seconds) {
149
149
  const hours = Math.floor((Math.abs(seconds) % 86400) / 3600)
150
150
  const hourUnit = selectedLang.hour as TimeUnit
151
- const hourForm = hours === 1 ? hourUnit.singular : hourUnit.plural
152
- return `${hebrewPrefix}${count} ${form}${hours > 0 ? ` ${hours} ${hourForm}` : ''}`
151
+ const hourForm = 1 === hours ? hourUnit.singular : hourUnit.plural
152
+ return `${hebrewPrefix}${count} ${form}${ 0 < hours ? ` ${hours} ${hourForm}` : ''}`
153
153
  }
154
154
  return `${hebrewPrefix}${count} ${form}`
155
155
  }
156
156
 
157
157
  // Handle other languages
158
- if (interval.label === 'day' && seconds > 0) {
158
+ if ('day' === interval.label && 0 < seconds) {
159
159
  const hours = Math.floor((Math.abs(seconds) % 86400) / 3600)
160
- const hourLabel = hours > 1 ? `${selectedLang.hour}s` : selectedLang.hour
161
- return `${prefix}${count} ${selectedLang[interval.label]}${hours > 0 ? ` ${hours} ${hourLabel}` : ''}${suffix}`
160
+ const hourLabel = 1 < hours ? `${selectedLang.hour}s` : selectedLang.hour
161
+ return `${prefix}${count} ${selectedLang[interval.label]}${ 0 < hours ? ` ${hours} ${hourLabel}` : ''}${suffix}`
162
162
  }
163
163
  return `${prefix}${count} ${selectedLang[interval.label]}${suffix}`
164
164
  }
@@ -168,7 +168,7 @@ export function timeAgo(date: string | Date, lang: AvailableTimeLanguages = 'en'
168
168
  }
169
169
 
170
170
  function getBrowserNavigatorLocale(): string {
171
- if (typeof navigator !== 'object') return 'en-US'
171
+ if ('object' !== typeof navigator) {return 'en-US'}
172
172
  return navigator.languages && navigator.languages.length
173
173
  ? navigator.languages[0]
174
174
  : navigator.language
@@ -182,7 +182,7 @@ function getBrowserNavigatorLocale(): string {
182
182
  */
183
183
  export function handleTimezone(date: Date, intFmtOpt: Intl.DateTimeFormatOptions): Date {
184
184
  // If timeZone is UTC, convert to UTC directly
185
- if (intFmtOpt.timeZone === 'UTC') {
185
+ if ('UTC' === intFmtOpt.timeZone) {
186
186
  const utcDate = new Date(date.getTime())
187
187
  utcDate.setMinutes(utcDate.getMinutes() + date.getTimezoneOffset())
188
188
  return utcDate
@@ -203,7 +203,7 @@ export function handleTimezone(date: Date, intFmtOpt: Intl.DateTimeFormatOptions
203
203
  const parts: Record<string, number> = {}
204
204
 
205
205
  formattedParts.forEach((part) => {
206
- if (part.type !== 'literal' && part.type !== 'timeZoneName') {
206
+ if ('literal' !== part.type && 'timeZoneName' !== part.type) {
207
207
  parts[part.type] = Number.parseInt(part.value, 10)
208
208
  }
209
209
  })
@@ -305,10 +305,10 @@ export function formatDate(
305
305
  let rest: Partial<Pick<Intl.DateTimeFormatOptions, 'hour12'>> = {}
306
306
 
307
307
  // Handle both overloads
308
- if (typeof formatOrOpts === 'string') {
308
+ if ('string' === typeof formatOrOpts) {
309
309
  // First overload: format string directly
310
310
  format = formatOrOpts
311
- } else if (formatOrOpts && typeof formatOrOpts === 'object') {
311
+ } else if (formatOrOpts && 'object' === typeof formatOrOpts) {
312
312
  // Second overload: options object
313
313
  format = formatOrOpts.fmt
314
314
  locale = formatOrOpts.locale
@@ -316,13 +316,13 @@ export function formatDate(
316
316
  rest = formatOrOpts
317
317
  }
318
318
 
319
- if (!date) return ''
319
+ if (!date) {return ''}
320
320
  format = format || 'DD.MM.YY'
321
321
 
322
322
  locale = locale || getBrowserNavigatorLocale()
323
323
  try {
324
324
  // Validate the date
325
- const d = typeof date === 'string' || typeof date === 'number' ? new Date(date) : date
325
+ const d = 'string' === typeof date || 'number' === typeof date ? new Date(date) : date
326
326
 
327
327
  // Check if date is valid
328
328
  if (Number.isNaN(d.getTime())) {
@@ -355,7 +355,7 @@ export function formatDate(
355
355
  const partsMap: Partial<Record<Intl.DateTimeFormatPartTypes, string>> = {}
356
356
 
357
357
  formattedParts.forEach((part) => {
358
- if (part.type !== 'literal') {
358
+ if ('literal' !== part.type) {
359
359
  partsMap[part.type] = part.value
360
360
  }
361
361
  })