@bagelink/vue 1.12.71 → 1.12.74

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 (81) hide show
  1. package/dist/components/Dropdown.vue.d.ts.map +1 -1
  2. package/dist/components/FilterQuery.types.d.ts +19 -0
  3. package/dist/components/FilterQuery.types.d.ts.map +1 -0
  4. package/dist/components/FilterQuery.vue.d.ts.map +1 -1
  5. package/dist/components/analytics/PieChart.vue.d.ts.map +1 -1
  6. package/dist/components/form/inputs/ArrayInput.vue.d.ts.map +1 -1
  7. package/dist/components/form/inputs/CheckInput.vue.d.ts.map +1 -1
  8. package/dist/components/form/inputs/CodeEditor/Index.vue.d.ts.map +1 -1
  9. package/dist/components/form/inputs/ColorInput.vue.d.ts.map +1 -1
  10. package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
  11. package/dist/components/form/inputs/EmailInput.vue.d.ts.map +1 -1
  12. package/dist/components/form/inputs/JSONInput.vue.d.ts.map +1 -1
  13. package/dist/components/form/inputs/MarkdownEditor.vue.d.ts.map +1 -1
  14. package/dist/components/form/inputs/NumberInput.vue.d.ts.map +1 -1
  15. package/dist/components/form/inputs/OTP.vue.d.ts.map +1 -1
  16. package/dist/components/form/inputs/PasswordInput.vue.d.ts.map +1 -1
  17. package/dist/components/form/inputs/RadioGroup.vue.d.ts.map +1 -1
  18. package/dist/components/form/inputs/RangeInput.vue.d.ts.map +1 -1
  19. package/dist/components/form/inputs/RichText/index.vue.d.ts.map +1 -1
  20. package/dist/components/form/inputs/SelectBtn.vue.d.ts.map +1 -1
  21. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  22. package/dist/components/form/inputs/SignaturePad.vue.d.ts.map +1 -1
  23. package/dist/components/form/inputs/TableField.vue.d.ts.map +1 -1
  24. package/dist/components/form/inputs/TelInput.vue.d.ts.map +1 -1
  25. package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
  26. package/dist/components/form/inputs/ToggleInput.vue.d.ts.map +1 -1
  27. package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts.map +1 -1
  28. package/dist/components/form/inputs/bagelInputShell.d.ts +21 -0
  29. package/dist/components/form/inputs/bagelInputShell.d.ts.map +1 -0
  30. package/dist/components/form/inputs/index.d.ts.map +1 -1
  31. package/dist/components/index.d.ts.map +1 -1
  32. package/dist/components/layout/AppSidebar.vue.d.ts.map +1 -1
  33. package/dist/dialog/Dialog.vue.d.ts.map +1 -1
  34. package/dist/i18n/index.d.ts.map +1 -1
  35. package/dist/index.cjs +135 -135
  36. package/dist/index.mjs +16026 -15661
  37. package/dist/style.css +1 -1
  38. package/dist/types/BagelForm.d.ts.map +1 -1
  39. package/dist/utils/BagelFormUtils.d.ts.map +1 -1
  40. package/package.json +1 -1
  41. package/src/components/Dropdown.vue +2 -1
  42. package/src/components/FilterQuery.types.ts +21 -0
  43. package/src/components/FilterQuery.vue +112 -15
  44. package/src/components/form/inputs/ArrayInput.vue +10 -2
  45. package/src/components/form/inputs/CheckInput.vue +28 -9
  46. package/src/components/form/inputs/CodeEditor/Index.vue +15 -2
  47. package/src/components/form/inputs/ColorInput.vue +77 -9
  48. package/src/components/form/inputs/DateInput.vue +10 -3
  49. package/src/components/form/inputs/EmailInput.vue +90 -54
  50. package/src/components/form/inputs/JSONInput.vue +12 -4
  51. package/src/components/form/inputs/MarkdownEditor.vue +12 -4
  52. package/src/components/form/inputs/NumberInput.vue +154 -89
  53. package/src/components/form/inputs/OTP.vue +46 -7
  54. package/src/components/form/inputs/PasswordInput.vue +32 -21
  55. package/src/components/form/inputs/RadioGroup.vue +18 -7
  56. package/src/components/form/inputs/RangeInput.vue +23 -7
  57. package/src/components/form/inputs/RichText/index.vue +21 -12
  58. package/src/components/form/inputs/SelectBtn.vue +34 -6
  59. package/src/components/form/inputs/SelectInput.vue +19 -25
  60. package/src/components/form/inputs/SignaturePad.vue +39 -14
  61. package/src/components/form/inputs/TableField.vue +6 -2
  62. package/src/components/form/inputs/TelInput.vue +52 -4
  63. package/src/components/form/inputs/TextInput.vue +23 -31
  64. package/src/components/form/inputs/ToggleInput.vue +27 -4
  65. package/src/components/form/inputs/Upload/UploadInput.vue +44 -9
  66. package/src/components/form/inputs/Upload/upload.css +15 -0
  67. package/src/components/form/inputs/bagelInputShell.ts +43 -0
  68. package/src/components/form/inputs/index.ts +1 -0
  69. package/src/components/index.ts +1 -0
  70. package/src/dialog/Dialog.vue +12 -1
  71. package/src/i18n/locales/en.json +4 -1
  72. package/src/i18n/locales/es.json +4 -1
  73. package/src/i18n/locales/fr.json +4 -1
  74. package/src/i18n/locales/he.json +4 -1
  75. package/src/i18n/locales/it.json +4 -1
  76. package/src/i18n/locales/ru.json +4 -1
  77. package/src/styles/input-variants.css +12 -13
  78. package/src/styles/inputs.css +134 -15
  79. package/src/styles/text.css +10 -10
  80. package/src/types/BagelForm.ts +11 -1
  81. package/src/utils/BagelFormUtils.ts +1 -0
@@ -2,16 +2,15 @@
2
2
  import type { IconType, ValidateInputBaseT } from '@bagelink/vue'
3
3
  import {
4
4
  Icon,
5
- sleep,
6
5
  useDebounceFn,
7
6
  useValidateFieldValue,
8
7
  resolveI18n,
9
8
  } from '@bagelink/vue'
10
- import { until } from '@vueuse/core'
11
-
12
9
  import { computed, onMounted, ref, watch, nextTick } from 'vue'
10
+ import type { BagelInputShellProps } from './bagelInputShell'
11
+ import { useBagelInputShell } from './bagelInputShell'
13
12
 
14
- export interface TextInputProps extends ValidateInputBaseT {
13
+ export interface TextInputProps extends ValidateInputBaseT, BagelInputShellProps {
15
14
  id?: string
16
15
  title?: string
17
16
  helptext?: string
@@ -48,6 +47,8 @@ const props = withDefaults(defineProps<TextInputProps>(), {
48
47
  })
49
48
  const emit = defineEmits(['update:modelValue', 'debounce'])
50
49
 
50
+ const { shellClass, shellStyle } = useBagelInputShell(props)
51
+
51
52
  // Normalize pattern for HTML5 validation
52
53
  const normalizedPattern = computed(() => {
53
54
  if (!props.pattern) return undefined
@@ -130,18 +131,10 @@ const hasFocus = () => document.activeElement === input.value
130
131
  const focus = () => input.value?.focus()
131
132
  defineExpose({ focus, hasFocus })
132
133
 
133
- const hasValue = computed(() => {
134
- const val = inputVal.value
135
- return val !== undefined && val !== '' && String(val).length > 0
136
- })
134
+ const hasValue = computed(() => String(inputVal.value ?? '').length > 0)
137
135
 
138
136
  onMounted(async () => {
139
- if (props.autofocus) {
140
- await until(() => input.value).toBeTruthy()
141
- await sleep(400)
142
- input.value?.focus()
143
- }
144
- // Don't auto-restore defaultValue - let user control their own content
137
+ if (props.autofocus) { setTimeout(() => input.value?.focus(), 50) }
145
138
 
146
139
  if (props.autoheight) {
147
140
  await nextTick()
@@ -152,23 +145,26 @@ onMounted(async () => {
152
145
 
153
146
  <template>
154
147
  <div
155
- class="bagel-input text-input" :class="{
156
- dense,
157
- small,
158
- shrink,
159
- code,
160
- underlined,
161
- 'textInputIconWrap': icon,
162
- 'txtInputIconStart': iconStart,
163
- 'has-error': !!error,
164
- 'has-value': hasValue,
165
- }" :title="title"
148
+ class="bagel-input text-input" :class="[
149
+ shellClass,
150
+ {
151
+ dense,
152
+ small,
153
+ shrink,
154
+ code,
155
+ underlined,
156
+ 'textInputIconWrap': icon,
157
+ 'txtInputIconStart': iconStart,
158
+ 'has-error': !!error,
159
+ 'has-value': hasValue,
160
+ },
161
+ ]" :style="shellStyle" :title="title"
166
162
  >
167
163
  <label :for="id">
168
164
  <span v-if="label || (underlined && placeholder)" class="label-text">{{ resolveI18n(label) || resolveI18n(placeholder) }}<span v-if="required"> *</span></span>
169
165
 
170
- <input
171
- v-if="!multiline && !autoheight && !code && inputRows < 2" :id ref="input" v-model.trim="inputVal"
166
+ <input
167
+ v-if="!autoheight && inputRows < 2" :id ref="input" v-model.trim="inputVal"
172
168
  :name :title :autocomplete :type :rows="1"
173
169
  :placeholder="underlined ? ' ' : (resolveI18n(placeholder) || resolveI18n(label))"
174
170
  :disabled :required v-bind="nativeInputAttrs" :pattern="normalizedPattern" @focusout="onFocusout"
@@ -244,10 +240,6 @@ onMounted(async () => {
244
240
  background: #f5f5f5;
245
241
  }
246
242
 
247
- .bagel-input label {
248
- font-size: var(--label-font-size);
249
- }
250
-
251
243
  .textInputIconWrap .bgl_icon-font {
252
244
  color: var(--input-color);
253
245
  position: absolute;
@@ -1,6 +1,8 @@
1
1
  <script setup lang="ts">
2
2
  import { resolveI18n } from '@bagelink/vue'
3
3
  import { computed, onMounted } from 'vue'
4
+ import type { BagelInputShellProps } from './bagelInputShell'
5
+ import { useBagelInputShell } from './bagelInputShell'
4
6
 
5
7
  const props = withDefaults(defineProps<{
6
8
  label?: string
@@ -9,7 +11,9 @@ const props = withDefaults(defineProps<{
9
11
  small?: boolean
10
12
  required?: boolean
11
13
  defaultValue?: boolean
12
- }>(), { defaultValue: false })
14
+ } & BagelInputShellProps>(), { defaultValue: false })
15
+
16
+ const { shellClass, shellStyle } = useBagelInputShell(props)
13
17
 
14
18
  const inputId = computed(() => props.id || Math.random().toString(36).slice(7))
15
19
 
@@ -25,7 +29,7 @@ onMounted(() => {
25
29
  <div
26
30
  class="bagel-input bgl-toggle"
27
31
  :title
28
- :class="{ small }"
32
+ :class="[shellClass, { small, 'has-value': checked }]" :style="shellStyle"
29
33
  >
30
34
  <div class="switch" :class="{ checked }">
31
35
  <span class="slider rounded" />
@@ -116,12 +120,31 @@ onMounted(() => {
116
120
  outline-offset: 2px
117
121
  }
118
122
  .bgl-toggle :checked{
119
- background: var(--bgl-primary);
123
+ background: var(--bgl-input-label-active-color, var(--bgl-primary));
120
124
  }
121
125
  .bgl-toggle :checked::before{
122
126
  margin-inline-start:calc(var(--input-height) / 2 - 2px) ;
123
127
  }
124
128
  .bgl-toggle input:checked + label {
125
- color: var(--bgl-primary) !important;
129
+ color: var(--bgl-input-label-active-color, var(--bgl-primary)) !important;
130
+ }
131
+
132
+ /* ── bgl-outline variant ── */
133
+ .bgl-outline input {
134
+ outline: 1.5px solid var(--border-color) !important;
135
+ outline-offset: 2px;
136
+ }
137
+
138
+ /* ── frame variant ── */
139
+ .frame input {
140
+ outline: 1.5px solid var(--border-color) !important;
141
+ outline-offset: 2px;
142
+ transition: outline-color 0.2s ease, box-shadow 0.2s ease;
143
+ background: transparent;
144
+ }
145
+
146
+ .frame input:checked {
147
+ outline-color: var(--bgl-input-label-active-color, var(--bgl-primary)) !important;
148
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--bgl-input-label-active-color, var(--bgl-primary)) 12%, transparent);
126
149
  }
127
150
  </style>
@@ -1,22 +1,23 @@
1
1
  <script setup lang="ts">
2
2
  import type { UploadInputProps } from '../../../../types/BagelForm'
3
3
  import { Btn, IMAGE_FORMATS_REGEXP, Icon, Card, Image, pathKeyToURL, Loading, useI18n, resolveI18n } from '@bagelink/vue'
4
- import { watch, ref } from 'vue'
5
-
4
+ import { watch, ref, computed, useSlots } from 'vue'
6
5
  import { useFileUpload } from './useFileUpload'
6
+ import { useBagelInputShell } from '../bagelInputShell'
7
7
 
8
- const props = withDefaults(defineProps<UploadInputProps & { showIcon?: boolean, icon?: string }>(), {
8
+ const props = withDefaults(defineProps<UploadInputProps>(), {
9
9
  height: '215px',
10
10
  theme: 'dropzone',
11
11
  accept: '*',
12
12
  showIcon: true,
13
13
  icon: 'upload_2',
14
+ iconSize: 2.5,
14
15
  })
15
16
 
16
17
  const emit = defineEmits(['update:modelValue', 'addFileStart'])
17
18
 
18
19
  const { $t } = useI18n()
19
-
20
+ const slots = useSlots()
20
21
  const {
21
22
  fileQueue,
22
23
  pathKeys,
@@ -41,6 +42,21 @@ const {
41
42
 
42
43
  watch(() => props.modelValue, val => pk.value = val ? [val].flat().filter(Boolean) : [], { immediate: true })
43
44
 
45
+ const { shellClass, shellStyle } = useBagelInputShell(props)
46
+ const hasValue = computed(() => pathKeys.value.length > 0 || fileQueue.value.length > 0)
47
+
48
+ const dropZoneText = computed(() => {
49
+ const raw = props.dropPlaceholder ?? props.placeholder
50
+ if (raw == null) { return $t('upload.dropPlaceholder') }
51
+ const resolved = resolveI18n(raw)
52
+ if (resolved != null && resolved !== '') { return resolved }
53
+ return $t('upload.dropPlaceholder')
54
+ })
55
+
56
+ const showDropZonePlaceholder = computed(
57
+ () => (!pathKeys.value.length && !fileQueue.value.length) || !!props.multiple
58
+ )
59
+
44
60
  const isImage = (str: string) => IMAGE_FORMATS_REGEXP.test(str)
45
61
 
46
62
  const isDragOver = ref(false)
@@ -72,7 +88,10 @@ function fileName(pathKey: string) {
72
88
  </script>
73
89
 
74
90
  <template>
75
- <div class="bagel-input" :class="{ 'has-error': !!error }" :data-field="name || id">
91
+ <div
92
+ class="bagel-input" :class="[shellClass, { 'has-error': !!error, 'has-value': hasValue }]"
93
+ :style="shellStyle" :data-field="name || id"
94
+ >
76
95
  <label v-if="label">{{ label }}<span v-if="required"> *</span></label>
77
96
  <input v-if="required && !pathKeys.length" :name="name || id" placeholder="required" type="text" required class="pixel">
78
97
  <Card
@@ -205,13 +224,29 @@ function fileName(pathKey: string) {
205
224
  </slot>
206
225
 
207
226
  <slot
208
- v-if="(!pathKeys.length && !fileQueue.length) || multiple" name="placeholder" :files="pathKeys"
209
- :fileQueue :browse
227
+ v-if="showDropZonePlaceholder && slots['drop-placeholder']"
228
+ name="drop-placeholder"
229
+ :files="pathKeys"
230
+ :file-queue="fileQueue"
231
+ :browse="browse"
232
+ />
233
+ <slot
234
+ v-else-if="showDropZonePlaceholder"
235
+ name="placeholder"
236
+ :files="pathKeys"
237
+ :file-queue="fileQueue"
238
+ :browse="browse"
210
239
  >
211
240
  <p class="p-1 flex column hover fileUploadPlaceHolder justify-content-center mb-05 ">
212
- <Icon v-if="showIcon" :name="icon" size="2.5" class="user-select-none" />
241
+ <Icon
242
+ v-if="showIcon"
243
+ :icon="icon"
244
+ :size="iconSize"
245
+ :mobile-size="iconMobileSize"
246
+ class="user-select-none line-height-1"
247
+ />
213
248
  <span class=" pretty balance user-select-none ">
214
- {{ resolveI18n(placeholder) || $t('upload.dropPlaceholder') }}
249
+ {{ dropZoneText }}
215
250
  </span>
216
251
  </p>
217
252
  </slot>
@@ -269,6 +269,21 @@
269
269
  outline-color: var(--bgl-red, #dc3545);
270
270
  }
271
271
 
272
+ /* ─── Variant: frame ─────────────────────────────────────────────────────── */
273
+
274
+ .bagel-input.frame .fileUploadWrap,
275
+ .bagel-input.frame .fileUploadWrap.fileDropZone {
276
+ background: transparent;
277
+ outline-color: var(--border-color);
278
+ transition: outline-color 0.2s ease, box-shadow 0.2s ease;
279
+ }
280
+
281
+ .bagel-input.frame .fileUploadWrap:hover,
282
+ .bagel-input.frame .fileUploadWrap:focus-within {
283
+ outline-color: var(--bgl-input-label-active-color, var(--bgl-primary));
284
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--bgl-input-label-active-color, var(--bgl-primary)) 12%, transparent);
285
+ }
286
+
272
287
  .bagel-input.has-error :deep(.bgl-card) {
273
288
  border-color: var(--bgl-red, #dc3545);
274
289
  }
@@ -0,0 +1,43 @@
1
+ import { computed, toValue, type CSSProperties, type MaybeRefOrGetter } from 'vue'
2
+
3
+ /** Shared visual props for bagel-input field wrappers. */
4
+ export interface BagelInputShellProps {
5
+ /** Transparent background with a border that highlights (primary color) on focus. */
6
+ frame?: boolean
7
+ /** Adds a simple border (border-color) without changing background or focus styles. */
8
+ outline?: boolean
9
+ minWidth?: string
10
+ maxWidth?: string
11
+ labelColor?: string
12
+ labelActiveColor?: string
13
+ }
14
+
15
+ export function useBagelInputShell(props: MaybeRefOrGetter<BagelInputShellProps>) {
16
+ const shellClass = computed(() => {
17
+ const p = toValue(props)
18
+ return {
19
+ frame: !!p.frame,
20
+ 'bgl-outline': !!p.outline,
21
+ }
22
+ })
23
+
24
+ const shellStyle = computed((): CSSProperties | undefined => {
25
+ const p = toValue(props)
26
+ const style: Record<string, string> = {}
27
+ if (p.minWidth) { style.minWidth = p.minWidth }
28
+ if (p.maxWidth) { style.maxWidth = p.maxWidth }
29
+ if (p.labelColor) { style['--bgl-input-label-color'] = p.labelColor }
30
+ if (p.labelActiveColor) { style['--bgl-input-label-active-color'] = p.labelActiveColor }
31
+ return Object.keys(style).length > 0 ? style : undefined
32
+ })
33
+
34
+ return { shellClass, shellStyle }
35
+ }
36
+
37
+ export function mergeShellStyle(
38
+ shellStyle: CSSProperties | undefined,
39
+ extra?: CSSProperties | undefined,
40
+ ): CSSProperties | undefined {
41
+ if (!shellStyle && !extra) { return undefined }
42
+ return { ...shellStyle, ...extra }
43
+ }
@@ -1,3 +1,4 @@
1
+ export { useBagelInputShell, type BagelInputShellProps } from './bagelInputShell'
1
2
  export { default as ArrayInput } from './ArrayInput.vue'
2
3
  export { default as Checkbox } from './Checkbox.vue'
3
4
  export { default as CheckInput } from './CheckInput.vue'
@@ -20,6 +20,7 @@ export { default as DragOver } from './DragOver.vue'
20
20
  export { default as Dropdown } from './Dropdown.vue'
21
21
  export { default as FieldSetVue } from './FieldSetVue.vue'
22
22
  export { default as FilterQuery } from './FilterQuery.vue'
23
+ export type { FilterField, QueryOption } from './FilterQuery.types'
23
24
  export { default as Flag } from './Flag.vue'
24
25
  export * from './form'
25
26
  export { default as Icon } from './Icon/Icon.vue'
@@ -218,6 +218,12 @@ dialog.dialog-center.is-closing {
218
218
  dialog.dialog-right[open] {
219
219
  animation: slide-in-right 0.25s ease-out;
220
220
  }
221
+ [dir="rtl"] .dialog-right[open] {
222
+ animation: slide-in-left 0.25s ease-out;
223
+ }
224
+ [dir="rtl"] .dialog-right.is-closing {
225
+ animation: slide-out-left 0.2s ease-in forwards;
226
+ }
221
227
 
222
228
  dialog.dialog-right.is-closing {
223
229
  animation: slide-out-right 0.2s ease-in forwards;
@@ -226,11 +232,16 @@ dialog.dialog-right.is-closing {
226
232
  dialog.dialog-left[open] {
227
233
  animation: slide-in-left 0.25s ease-out;
228
234
  }
235
+ [dir="rtl"] .dialog-left[open] {
236
+ animation: slide-in-right 0.25s ease-out;
237
+ }
229
238
 
230
239
  dialog.dialog-left.is-closing {
231
240
  animation: slide-out-left 0.2s ease-in forwards;
232
241
  }
233
-
242
+ [dir="rtl"] .dialog-left.is-closing {
243
+ animation: slide-out-right 0.2s ease-in forwards;
244
+ }
234
245
  dialog.dialog-top[open] {
235
246
  animation: slide-in-top 0.25s ease-out;
236
247
  }
@@ -140,7 +140,10 @@
140
140
  },
141
141
  "email": {
142
142
  "invalidEmail": "Please enter a valid email address",
143
- "invalidDomain": "This email domain appears to be invalid"
143
+ "invalidDomain": "This email domain appears to be invalid",
144
+ "disposableEmail": "Please use a non-disposable email address",
145
+ "didYouMean": "did you mean {suggestion}?",
146
+ "validating": "Validating email..."
144
147
  },
145
148
  "date": {
146
149
  "invalidFormat": "Invalid date format"
@@ -140,7 +140,10 @@
140
140
  },
141
141
  "email": {
142
142
  "invalidEmail": "Introduce un correo electrónico válido",
143
- "invalidDomain": "El dominio de este correo electrónico parece no ser válido"
143
+ "invalidDomain": "El dominio de este correo electrónico parece no ser válido",
144
+ "disposableEmail": "Por favor, utilice una dirección de correo electrónico que no sea desechable",
145
+ "didYouMean": "¿Quisiste decir {suggestion}?",
146
+ "validating": "Validando correo electrónico..."
144
147
  },
145
148
  "date": {
146
149
  "invalidFormat": "Formato de fecha inválido"
@@ -140,7 +140,10 @@
140
140
  },
141
141
  "email": {
142
142
  "invalidEmail": "Veuillez entrer une adresse email valide",
143
- "invalidDomain": "Le domaine de cet email semble invalide"
143
+ "invalidDomain": "Le domaine de cet email semble invalide",
144
+ "disposableEmail": "Veuillez utiliser une adresse e-mail non jetable",
145
+ "didYouMean": "Vouliez-vous dire {suggestion} ?",
146
+ "validating": "Validation de l'e-mail..."
144
147
  },
145
148
  "date": {
146
149
  "invalidFormat": "Format de date invalide"
@@ -161,7 +161,10 @@
161
161
  },
162
162
  "email": {
163
163
  "invalidEmail": "הזן כתובת אימייל חוקית",
164
- "invalidDomain": "נראה שדומיין האימייל אינו חוקי"
164
+ "invalidDomain": "נראה שדומיין האימייל אינו חוקי",
165
+ "disposableEmail": "אנא השתמש בכתובת אימייל שאינה חד-פעמית",
166
+ "didYouMean": "האם התכוונת ל-{suggestion}?",
167
+ "validating": "מאמת כתובת אימייל..."
165
168
  },
166
169
  "date": {
167
170
  "invalidFormat": "פורמט תאריך לא חוקי"
@@ -140,7 +140,10 @@
140
140
  },
141
141
  "email": {
142
142
  "invalidEmail": "Inserisci un indirizzo email valido",
143
- "invalidDomain": "Il dominio di questa email sembra non essere valido"
143
+ "invalidDomain": "Il dominio di questa email sembra non essere valido",
144
+ "disposableEmail": "Si prega di utilizzare un indirizzo email non temporaneo",
145
+ "didYouMean": "Intendevi {suggestion}?",
146
+ "validating": "Convalida dell'e-mail..."
144
147
  },
145
148
  "date": {
146
149
  "invalidFormat": "Formato data non valido"
@@ -140,7 +140,10 @@
140
140
  },
141
141
  "email": {
142
142
  "invalidEmail": "Введите действительный адрес электронной почты",
143
- "invalidDomain": "Домен этого адреса электронной почты, похоже, недействителен"
143
+ "invalidDomain": "Домен этого адреса электронной почты, похоже, недействителен",
144
+ "disposableEmail": "Пожалуйста, используйте постоянный адрес электронной почты",
145
+ "didYouMean": "Вы имели в виду {suggestion}?",
146
+ "validating": "Проверка адреса электронной почты..."
144
147
  },
145
148
  "date": {
146
149
  "invalidFormat": "Неверный формат даты"
@@ -37,7 +37,7 @@
37
37
  .bagel-input.underlined.open .label-text {
38
38
  top: -0.65rem;
39
39
  font-size: 0.65rem;
40
- color: var(--bgl-primary);
40
+ color: var(--bgl-input-label-active-color);
41
41
  opacity: 1;
42
42
  }
43
43
 
@@ -68,14 +68,13 @@
68
68
  .bagel-input.underlined.has-value .label-text {
69
69
  top: -0.65rem;
70
70
  font-size: 0.65rem;
71
- color: var(--bgl-text-color, #555);
72
- opacity: 0.6;
71
+ opacity: 1;
73
72
  }
74
73
 
75
- /* focused overrides has-value color */
76
- .bagel-input.underlined:focus-within.has-value .label-text,
77
- .bagel-input.underlined.open.has-value .label-text {
78
- color: var(--bgl-primary);
74
+ /* focused: color the label */
75
+ .bagel-input.underlined:focus-within .label-text,
76
+ .bagel-input.underlined.open .label-text {
77
+ color: var(--bgl-input-label-active-color);
79
78
  opacity: 1;
80
79
  }
81
80
 
@@ -106,7 +105,7 @@
106
105
  inset-inline-start: 0;
107
106
  width: 0;
108
107
  height: 2px;
109
- background: var(--bgl-primary);
108
+ background: var(--bgl-input-label-active-color, var(--bgl-primary));
110
109
  transition: width 0.6s ease;
111
110
  pointer-events: none;
112
111
  }
@@ -130,7 +129,7 @@
130
129
  .bagel-input.underlined textarea:focus {
131
130
  outline: none !important;
132
131
  box-shadow: none !important;
133
- border-color: var(--bgl-primary) !important;
132
+ border-color: var(--bgl-input-label-active-color, var(--bgl-primary)) !important;
134
133
  }
135
134
 
136
135
  /* label default: sits at placeholder level inside the box */
@@ -143,7 +142,7 @@
143
142
  .bagel-input.underlined:focus-within label:has(textarea) .label-text {
144
143
  top: 0.45rem;
145
144
  font-size: 0.65rem;
146
- color: var(--bgl-primary);
145
+ color: var(--bgl-input-label-active-color);
147
146
  opacity: 1;
148
147
  }
149
148
 
@@ -152,15 +151,15 @@
152
151
  .label-text {
153
152
  top: 0.45rem;
154
153
  font-size: 0.65rem;
155
- color: var(--bgl-text-color, #555);
156
- opacity: 0.6;
154
+ color: var(--bgl-input-label-active-color);
155
+ opacity: 1;
157
156
  }
158
157
 
159
158
  .bagel-input.underlined:focus-within
160
159
  label:has(textarea:not(:placeholder-shown))
161
160
  .label-text {
162
161
  top: 0.45rem;
163
- color: var(--bgl-primary);
162
+ color: var(--bgl-input-label-active-color);
164
163
  opacity: 1;
165
164
  }
166
165