@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.
- package/dist/components/Dropdown.vue.d.ts.map +1 -1
- package/dist/components/FilterQuery.types.d.ts +19 -0
- package/dist/components/FilterQuery.types.d.ts.map +1 -0
- package/dist/components/FilterQuery.vue.d.ts.map +1 -1
- package/dist/components/analytics/PieChart.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/ArrayInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/CheckInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/CodeEditor/Index.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/ColorInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/EmailInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/JSONInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/MarkdownEditor.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/NumberInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/OTP.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/PasswordInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RadioGroup.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RangeInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText/index.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectBtn.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SignaturePad.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TableField.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TelInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/ToggleInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/bagelInputShell.d.ts +21 -0
- package/dist/components/form/inputs/bagelInputShell.d.ts.map +1 -0
- package/dist/components/form/inputs/index.d.ts.map +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/layout/AppSidebar.vue.d.ts.map +1 -1
- package/dist/dialog/Dialog.vue.d.ts.map +1 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/index.cjs +135 -135
- package/dist/index.mjs +16026 -15661
- package/dist/style.css +1 -1
- package/dist/types/BagelForm.d.ts.map +1 -1
- package/dist/utils/BagelFormUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Dropdown.vue +2 -1
- package/src/components/FilterQuery.types.ts +21 -0
- package/src/components/FilterQuery.vue +112 -15
- package/src/components/form/inputs/ArrayInput.vue +10 -2
- package/src/components/form/inputs/CheckInput.vue +28 -9
- package/src/components/form/inputs/CodeEditor/Index.vue +15 -2
- package/src/components/form/inputs/ColorInput.vue +77 -9
- package/src/components/form/inputs/DateInput.vue +10 -3
- package/src/components/form/inputs/EmailInput.vue +90 -54
- package/src/components/form/inputs/JSONInput.vue +12 -4
- package/src/components/form/inputs/MarkdownEditor.vue +12 -4
- package/src/components/form/inputs/NumberInput.vue +154 -89
- package/src/components/form/inputs/OTP.vue +46 -7
- package/src/components/form/inputs/PasswordInput.vue +32 -21
- package/src/components/form/inputs/RadioGroup.vue +18 -7
- package/src/components/form/inputs/RangeInput.vue +23 -7
- package/src/components/form/inputs/RichText/index.vue +21 -12
- package/src/components/form/inputs/SelectBtn.vue +34 -6
- package/src/components/form/inputs/SelectInput.vue +19 -25
- package/src/components/form/inputs/SignaturePad.vue +39 -14
- package/src/components/form/inputs/TableField.vue +6 -2
- package/src/components/form/inputs/TelInput.vue +52 -4
- package/src/components/form/inputs/TextInput.vue +23 -31
- package/src/components/form/inputs/ToggleInput.vue +27 -4
- package/src/components/form/inputs/Upload/UploadInput.vue +44 -9
- package/src/components/form/inputs/Upload/upload.css +15 -0
- package/src/components/form/inputs/bagelInputShell.ts +43 -0
- package/src/components/form/inputs/index.ts +1 -0
- package/src/components/index.ts +1 -0
- package/src/dialog/Dialog.vue +12 -1
- package/src/i18n/locales/en.json +4 -1
- package/src/i18n/locales/es.json +4 -1
- package/src/i18n/locales/fr.json +4 -1
- package/src/i18n/locales/he.json +4 -1
- package/src/i18n/locales/it.json +4 -1
- package/src/i18n/locales/ru.json +4 -1
- package/src/styles/input-variants.css +12 -13
- package/src/styles/inputs.css +134 -15
- package/src/styles/text.css +10 -10
- package/src/types/BagelForm.ts +11 -1
- 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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
171
|
-
|
|
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
|
|
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
|
|
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="
|
|
209
|
-
|
|
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
|
|
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
|
-
{{
|
|
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
|
+
}
|
package/src/components/index.ts
CHANGED
|
@@ -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'
|
package/src/dialog/Dialog.vue
CHANGED
|
@@ -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
|
}
|
package/src/i18n/locales/en.json
CHANGED
|
@@ -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"
|
package/src/i18n/locales/es.json
CHANGED
|
@@ -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"
|
package/src/i18n/locales/fr.json
CHANGED
|
@@ -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"
|
package/src/i18n/locales/he.json
CHANGED
|
@@ -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": "פורמט תאריך לא חוקי"
|
package/src/i18n/locales/it.json
CHANGED
|
@@ -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"
|
package/src/i18n/locales/ru.json
CHANGED
|
@@ -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-
|
|
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
|
-
|
|
72
|
-
opacity: 0.6;
|
|
71
|
+
opacity: 1;
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
/* focused
|
|
76
|
-
.bagel-input.underlined:focus-within
|
|
77
|
-
.bagel-input.underlined.open
|
|
78
|
-
color: var(--bgl-
|
|
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-
|
|
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-
|
|
156
|
-
opacity:
|
|
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-
|
|
162
|
+
color: var(--bgl-input-label-active-color);
|
|
164
163
|
opacity: 1;
|
|
165
164
|
}
|
|
166
165
|
|