@bagelink/vue 1.0.33 → 1.0.38
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/DataPreview.vue.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.vue.d.ts +6 -1
- package/dist/components/DataTable/DataTable.vue.d.ts.map +1 -1
- package/dist/components/DataTable/useTableData.d.ts +7 -1
- package/dist/components/DataTable/useTableData.d.ts.map +1 -1
- package/dist/components/DataTable/useTableSelection.d.ts +4 -1
- package/dist/components/DataTable/useTableSelection.d.ts.map +1 -1
- package/dist/components/DataTable/useTableVirtualization.d.ts.map +1 -1
- package/dist/components/form/BagelForm.vue.d.ts.map +1 -1
- package/dist/components/form/FieldArray.vue.d.ts.map +1 -1
- package/dist/index.cjs +183 -92
- package/dist/index.mjs +183 -92
- package/dist/style.css +475 -56
- package/package.json +1 -1
- package/src/components/DataPreview.vue +30 -4
- package/src/components/DataTable/DataTable.vue +9 -7
- package/src/components/DataTable/useTableData.ts +75 -9
- package/src/components/DataTable/useTableSelection.ts +17 -3
- package/src/components/DataTable/useTableVirtualization.ts +11 -2
- package/src/components/form/FieldArray.vue +44 -5
- package/src/components/layout/BottomMenu.vue +1 -1
- package/src/styles/layout.css +240 -0
- package/src/styles/mobilLayout.css +240 -0
package/package.json
CHANGED
|
@@ -9,7 +9,14 @@ import { useTableData } from './DataTable/useTableData'
|
|
|
9
9
|
const props = defineProps<Omit<TableSchemaProps<T>, 'data'> & { modelValue: T, includeUnset?: boolean }>()
|
|
10
10
|
const slots = useSlots() as Slots & Record<string, (props: { row: T, field: BaseBagelField<T> }) => any>
|
|
11
11
|
|
|
12
|
-
const data = computed(() =>
|
|
12
|
+
const data = computed(() => {
|
|
13
|
+
// Handle undefined or null modelValue
|
|
14
|
+
if (!props.modelValue) {
|
|
15
|
+
return []
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return Array.isArray(props.modelValue) ? props.modelValue : [props.modelValue]
|
|
19
|
+
})
|
|
13
20
|
|
|
14
21
|
const {
|
|
15
22
|
computedSchema,
|
|
@@ -21,7 +28,14 @@ const {
|
|
|
21
28
|
useServerSort: false
|
|
22
29
|
})
|
|
23
30
|
|
|
24
|
-
const firstItem = computed(() =>
|
|
31
|
+
const firstItem = computed(() => {
|
|
32
|
+
// Handle empty computedData
|
|
33
|
+
if (!computedData.value || computedData.value.length === 0) {
|
|
34
|
+
return {} as T
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return computedData.value[0] || {} as T
|
|
38
|
+
})
|
|
25
39
|
|
|
26
40
|
const { renderField } = useSchemaField<T>({
|
|
27
41
|
mode: 'preview',
|
|
@@ -32,9 +46,14 @@ const { renderField } = useSchemaField<T>({
|
|
|
32
46
|
|
|
33
47
|
<template>
|
|
34
48
|
<div class="data-preview">
|
|
35
|
-
<template v-
|
|
36
|
-
<
|
|
49
|
+
<template v-if="computedSchema && computedSchema.length > 0">
|
|
50
|
+
<template v-for="field in computedSchema" :key="field.id">
|
|
51
|
+
<component :is="renderField(field, slots)" />
|
|
52
|
+
</template>
|
|
37
53
|
</template>
|
|
54
|
+
<div v-else class="empty-preview">
|
|
55
|
+
No data to display
|
|
56
|
+
</div>
|
|
38
57
|
</div>
|
|
39
58
|
</template>
|
|
40
59
|
|
|
@@ -61,4 +80,11 @@ const { renderField } = useSchemaField<T>({
|
|
|
61
80
|
.field-value {
|
|
62
81
|
font-size: 0.95rem;
|
|
63
82
|
}
|
|
83
|
+
|
|
84
|
+
.empty-preview {
|
|
85
|
+
font-size: 0.9rem;
|
|
86
|
+
color: var(--bgl-black-tint);
|
|
87
|
+
padding: 1rem 0;
|
|
88
|
+
text-align: center;
|
|
89
|
+
}
|
|
64
90
|
</style>
|
|
@@ -40,7 +40,8 @@ const {
|
|
|
40
40
|
computedData,
|
|
41
41
|
sortField,
|
|
42
42
|
sortDirection,
|
|
43
|
-
toggleSort
|
|
43
|
+
toggleSort,
|
|
44
|
+
cleanTransformedData
|
|
44
45
|
} = useTableData<T>({ data, schema, columns, useServerSort, onSort: (field, direction) => {
|
|
45
46
|
emit('orderBy', `${field} ${direction}`.trim() as EmitOrderT)
|
|
46
47
|
} })
|
|
@@ -55,6 +56,7 @@ const {
|
|
|
55
56
|
} = useTableSelection<T>({
|
|
56
57
|
selectable: props.selectable,
|
|
57
58
|
selectedItems,
|
|
59
|
+
cleanData: cleanTransformedData,
|
|
58
60
|
onSelect: (item) => { emit('select', item) }
|
|
59
61
|
})
|
|
60
62
|
|
|
@@ -142,10 +144,10 @@ watch(
|
|
|
142
144
|
@click="toggleSort(field?.id || '')"
|
|
143
145
|
>
|
|
144
146
|
<div class="flex">
|
|
145
|
-
{{ field.label || keyToLabel(field
|
|
147
|
+
{{ field.label || keyToLabel(field?.id) }}
|
|
146
148
|
<div
|
|
147
149
|
class="list-arrows"
|
|
148
|
-
:class="{ sorted: sortField === field
|
|
150
|
+
:class="{ sorted: sortField === field?.id }"
|
|
149
151
|
>
|
|
150
152
|
<Icon
|
|
151
153
|
:class="{ desc: sortDirection === 'DESC' }"
|
|
@@ -158,9 +160,9 @@ watch(
|
|
|
158
160
|
<tbody>
|
|
159
161
|
<tr
|
|
160
162
|
v-for="{ data: row } in list"
|
|
161
|
-
:key="row.
|
|
163
|
+
:key="row?.id || `row-${Math.random()}`"
|
|
162
164
|
class="row row-item position-relative"
|
|
163
|
-
:class="{ selected: computedSelectedItems.includes(row.id
|
|
165
|
+
:class="{ selected: row?.id && computedSelectedItems.includes(row.id) }"
|
|
164
166
|
@click="toggleSelectItem(row)"
|
|
165
167
|
>
|
|
166
168
|
<td v-if="isSelectable">
|
|
@@ -168,13 +170,13 @@ watch(
|
|
|
168
170
|
<input
|
|
169
171
|
v-model="selectedItems"
|
|
170
172
|
type="checkbox"
|
|
171
|
-
:value="row
|
|
173
|
+
:value="row?.id || ''"
|
|
172
174
|
>
|
|
173
175
|
</div>
|
|
174
176
|
</td>
|
|
175
177
|
<td
|
|
176
178
|
v-for="field in computedSchema"
|
|
177
|
-
:key="`${field.id}-${row.
|
|
179
|
+
:key="`${field.id}-${row?.id || Math.random()}`"
|
|
178
180
|
class="col"
|
|
179
181
|
>
|
|
180
182
|
<slot
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComputedRef } from 'vue'
|
|
2
2
|
import type { TableDataOptions, SortDirectionsT } from '../../types/TableSchema'
|
|
3
|
-
import { useBglSchema, isDate } from '@bagelink/vue'
|
|
3
|
+
import { useBglSchema, isDate, keyToLabel } from '@bagelink/vue'
|
|
4
4
|
import { computed, ref } from 'vue'
|
|
5
5
|
|
|
6
6
|
const NON_DIGIT_REGEX = /[^\d.-]/g
|
|
@@ -34,19 +34,63 @@ export function useTableData<T extends Record<string, any>>(options: UseTableDat
|
|
|
34
34
|
const sortField = ref('')
|
|
35
35
|
const sortDirection = ref<SortDirectionsT>('ASC')
|
|
36
36
|
// Helper function to get the value from a possibly computed ref
|
|
37
|
-
function getValue<V>(value: ComputedRef<V> | V): V {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
function getValue<V>(value: ComputedRef<V> | V | undefined): V | undefined {
|
|
38
|
+
if (value === undefined || value === null) {
|
|
39
|
+
return undefined
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
// Check if it's a computed ref with a value property
|
|
44
|
+
if (value && typeof value === 'object' && 'value' in value) {
|
|
45
|
+
return (value as ComputedRef<V>).value
|
|
46
|
+
}
|
|
47
|
+
// Otherwise return the value directly
|
|
48
|
+
return value as V
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error('Error in getValue:', error)
|
|
51
|
+
return undefined
|
|
52
|
+
}
|
|
41
53
|
}
|
|
42
54
|
|
|
43
55
|
// Create a computed property for the schema that will react to changes in options.columns
|
|
44
56
|
const computedSchema = computed(() => {
|
|
45
|
-
|
|
57
|
+
// Get the data safely
|
|
58
|
+
const dataValue = options.data.value || []
|
|
59
|
+
|
|
60
|
+
// Get the schema from useBglSchema
|
|
61
|
+
const schema = useBglSchema<T>({
|
|
46
62
|
schema: getValue(options.schema),
|
|
47
63
|
columns: getValue(options.columns),
|
|
48
|
-
data:
|
|
64
|
+
data: dataValue,
|
|
49
65
|
})
|
|
66
|
+
|
|
67
|
+
// If we have a valid schema with fields, filter out fields without an ID
|
|
68
|
+
if (Array.isArray(schema) && schema.length > 0) {
|
|
69
|
+
return schema.filter(field => field && field.id)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// If no schema is provided or it's empty, generate a default schema from the data
|
|
73
|
+
if (Array.isArray(dataValue) && dataValue.length > 0) {
|
|
74
|
+
const firstItem = dataValue[0]
|
|
75
|
+
|
|
76
|
+
// Create a schema based on the keys of the first item
|
|
77
|
+
return Object.keys(firstItem || {})
|
|
78
|
+
.filter(key => key !== 'id' && !key.startsWith('_')) // Exclude id and internal fields
|
|
79
|
+
.map(key => ({
|
|
80
|
+
id: key,
|
|
81
|
+
label: keyToLabel(key),
|
|
82
|
+
$el: 'div',
|
|
83
|
+
transform: (val?: any) => {
|
|
84
|
+
// Handle date fields
|
|
85
|
+
const dateFields = ['created_at', 'updated_at']
|
|
86
|
+
if (dateFields.includes(key)) return val ? new Date(val).toLocaleString() : val
|
|
87
|
+
return val
|
|
88
|
+
}
|
|
89
|
+
}))
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Return an empty array if no data or schema
|
|
93
|
+
return []
|
|
50
94
|
})
|
|
51
95
|
|
|
52
96
|
function transform(rowData: T): TransformedData<T> {
|
|
@@ -82,10 +126,31 @@ export function useTableData<T extends Record<string, any>>(options: UseTableDat
|
|
|
82
126
|
return transformed
|
|
83
127
|
}
|
|
84
128
|
|
|
129
|
+
// Helper function to clean up transformed data by removing all added properties
|
|
130
|
+
function cleanTransformedData<T extends Record<string, any>>(data: TransformedData<T>): T {
|
|
131
|
+
const cleanData = { ...data } as T
|
|
132
|
+
|
|
133
|
+
// Remove all keys that start with underscore (these are added by the transform function)
|
|
134
|
+
Object.keys(cleanData).forEach((key) => {
|
|
135
|
+
if (key.startsWith('_')) {
|
|
136
|
+
delete cleanData[key]
|
|
137
|
+
}
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
return cleanData
|
|
141
|
+
}
|
|
142
|
+
|
|
85
143
|
const computedSortField = computed(() => sortField.value ? `_transformed_${sortField.value}` : '')
|
|
86
144
|
|
|
87
145
|
const computedData = computed(() => {
|
|
88
|
-
|
|
146
|
+
// Get the data safely
|
|
147
|
+
const currentData = options.data.value || []
|
|
148
|
+
|
|
149
|
+
// If there's no data, return an empty array
|
|
150
|
+
if (!Array.isArray(currentData) || currentData.length === 0) {
|
|
151
|
+
return []
|
|
152
|
+
}
|
|
153
|
+
|
|
89
154
|
const useServerSortValue = getValue(options.useServerSort)
|
|
90
155
|
|
|
91
156
|
if (!sortField.value || useServerSortValue === true) {
|
|
@@ -139,6 +204,7 @@ export function useTableData<T extends Record<string, any>>(options: UseTableDat
|
|
|
139
204
|
transform,
|
|
140
205
|
sortField: computed(() => sortField.value),
|
|
141
206
|
sortDirection: computed(() => sortDirection.value),
|
|
142
|
-
toggleSort
|
|
207
|
+
toggleSort,
|
|
208
|
+
cleanTransformedData
|
|
143
209
|
}
|
|
144
210
|
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { TableSelectionOptions } from '../../types/TableSchema'
|
|
2
2
|
import { computed, ref } from 'vue'
|
|
3
3
|
|
|
4
|
-
export
|
|
4
|
+
export interface UseTableSelectionOptions<T> extends TableSelectionOptions<T> {
|
|
5
|
+
cleanData?: (item: T) => T
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function useTableSelection<T extends Record<string, any>>(options: UseTableSelectionOptions<T>) {
|
|
5
9
|
const allSelectorEl = ref<HTMLInputElement>()
|
|
6
10
|
const computedSelectedItems = computed(() => options.selectedItems.value)
|
|
7
11
|
const isSelectable = computed(() => options.selectable === true && Array.isArray(options.selectedItems.value))
|
|
@@ -16,8 +20,18 @@ export function useTableSelection<T extends Record<string, any>>(options: TableS
|
|
|
16
20
|
|
|
17
21
|
function toggleSelectItem(item: T) {
|
|
18
22
|
if (computedSelectedItems.value.length === 0) {
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
// Clean the item if a cleanData function is provided, otherwise use the default cleaning
|
|
24
|
+
const cleanItem = options.cleanData ? options.cleanData(item) : { ...item }
|
|
25
|
+
|
|
26
|
+
// If no cleanData function is provided, use the default cleaning
|
|
27
|
+
if (!options.cleanData) {
|
|
28
|
+
Object.keys(cleanItem).forEach((key) => {
|
|
29
|
+
if (key.startsWith('_')) {
|
|
30
|
+
delete cleanItem[key]
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
|
|
21
35
|
options.onSelect(cleanItem)
|
|
22
36
|
return
|
|
23
37
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TableVirtualizationOptions } from '../../types/TableSchema'
|
|
2
2
|
import { useVirtualList, useIntersectionObserver, until } from '@vueuse/core'
|
|
3
|
-
import { ref } from 'vue'
|
|
3
|
+
import { ref, isRef } from 'vue'
|
|
4
4
|
|
|
5
5
|
export function useTableVirtualization<T>(options: TableVirtualizationOptions<T>) {
|
|
6
6
|
const lastItemEl = ref<HTMLTableRowElement | null>(null)
|
|
@@ -16,7 +16,16 @@ export function useTableVirtualization<T>(options: TableVirtualizationOptions<T>
|
|
|
16
16
|
await until(() => lastItemEl.value).toBeTruthy()
|
|
17
17
|
|
|
18
18
|
useIntersectionObserver(lastItemEl, ([entry]) => {
|
|
19
|
-
|
|
19
|
+
// Check if options.data.value exists and has length
|
|
20
|
+
let dataLength = 0
|
|
21
|
+
|
|
22
|
+
if (isRef(options.data) && options.data.value) {
|
|
23
|
+
dataLength = Array.isArray(options.data.value) ? options.data.value.length : 0
|
|
24
|
+
} else if (Array.isArray(options.data)) {
|
|
25
|
+
dataLength = options.data.length
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (entry.isIntersecting && dataLength > 0) {
|
|
20
29
|
options.onLastItemVisible?.()
|
|
21
30
|
}
|
|
22
31
|
})
|
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
Attributes,
|
|
6
6
|
BagelFieldOptions,
|
|
7
7
|
BglFormSchemaFnT,
|
|
8
|
+
BglFormSchemaT,
|
|
8
9
|
Field,
|
|
9
10
|
} from '@bagelink/vue'
|
|
10
11
|
import { BagelForm, Btn } from '@bagelink/vue'
|
|
@@ -39,6 +40,8 @@ const props = withDefaults(
|
|
|
39
40
|
|
|
40
41
|
const emit = defineEmits(['update:modelValue'])
|
|
41
42
|
|
|
43
|
+
const minimizedItems = $ref<boolean[]>([])
|
|
44
|
+
|
|
42
45
|
const data = $ref<T[]>(props.modelValue || [])
|
|
43
46
|
|
|
44
47
|
function emitValue() {
|
|
@@ -55,6 +58,10 @@ function addItem() {
|
|
|
55
58
|
emitValue()
|
|
56
59
|
}
|
|
57
60
|
|
|
61
|
+
function toggleMinimized(index: number) {
|
|
62
|
+
minimizedItems[index] = !minimizedItems[index]
|
|
63
|
+
}
|
|
64
|
+
|
|
58
65
|
const computedField = $computed(
|
|
59
66
|
() => ({
|
|
60
67
|
label: props.label,
|
|
@@ -72,6 +79,11 @@ const computedField = $computed(
|
|
|
72
79
|
}) as Field<T>
|
|
73
80
|
) as Field<Record<string, any>>
|
|
74
81
|
|
|
82
|
+
const resolvedSchema = $computed<BglFormSchemaT<T>>(() => {
|
|
83
|
+
if (!props.schema) return [] as BglFormSchemaT<T>
|
|
84
|
+
return typeof props.schema === 'function' ? props.schema() : props.schema
|
|
85
|
+
})
|
|
86
|
+
|
|
75
87
|
const { renderField } = useSchemaField<Record<string, any>>({
|
|
76
88
|
mode: 'form',
|
|
77
89
|
getRowData: () => data,
|
|
@@ -90,11 +102,23 @@ const { renderField } = useSchemaField<Record<string, any>>({
|
|
|
90
102
|
<p class="label mb-05">
|
|
91
103
|
{{ label }}
|
|
92
104
|
</p>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
105
|
+
<div v-if="resolvedSchema" class="ps-025 border-start mb-05">
|
|
106
|
+
<div
|
|
107
|
+
v-for="(_, i) in data" :key="i" outline thin
|
|
108
|
+
class="mb-05 itemBox transition ps-05 pb-025 pt-025 radius-05 gap-05 overflow-hidden"
|
|
109
|
+
:class="{ minimized: minimizedItems[i] }"
|
|
110
|
+
>
|
|
111
|
+
<p v-if="minimizedItems[i]" class="minimizedText txt14 p-025 opacity-7">
|
|
112
|
+
{{ label }} {{ i + 1 }}
|
|
113
|
+
</p>
|
|
114
|
+
<BagelForm v-else v-model="data[i]" :schema="resolvedSchema" @update:model-value="emitValue" />
|
|
115
|
+
<div class="bg-gray-80 -my-05 px-025 pt-065 pb-05 txt-center space-between flex column">
|
|
116
|
+
<Btn
|
|
117
|
+
v-if="resolvedSchema.length > 4"
|
|
118
|
+
class="block rotate-180 txt10 opacity-7 p-025"
|
|
119
|
+
flat thin icon="keyboard_arrow_down"
|
|
120
|
+
@click="toggleMinimized(i)"
|
|
121
|
+
/>
|
|
98
122
|
<Btn
|
|
99
123
|
v-if="props.delete"
|
|
100
124
|
icon="delete"
|
|
@@ -109,6 +133,7 @@ const { renderField } = useSchemaField<Record<string, any>>({
|
|
|
109
133
|
<p>{{ label }}</p>
|
|
110
134
|
</Btn>
|
|
111
135
|
</div>
|
|
136
|
+
|
|
112
137
|
<template v-else>
|
|
113
138
|
<component
|
|
114
139
|
:is="renderField({ ...computedField, id: String(i) })"
|
|
@@ -121,6 +146,19 @@ const { renderField } = useSchemaField<Record<string, any>>({
|
|
|
121
146
|
</template>
|
|
122
147
|
|
|
123
148
|
<style>
|
|
149
|
+
.minimized{
|
|
150
|
+
height: 2.4rem;
|
|
151
|
+
overflow: hidden;
|
|
152
|
+
}
|
|
153
|
+
.minimizedText{
|
|
154
|
+
display: none;
|
|
155
|
+
}
|
|
156
|
+
.minimized .minimizedText{
|
|
157
|
+
display: block;
|
|
158
|
+
}
|
|
159
|
+
.minimized .rotate-180{
|
|
160
|
+
transform: rotate(0deg);
|
|
161
|
+
}
|
|
124
162
|
.itemBox{
|
|
125
163
|
background: var(--input-bg);
|
|
126
164
|
grid-template-columns: 1fr auto;
|
|
@@ -129,6 +167,7 @@ const { renderField } = useSchemaField<Record<string, any>>({
|
|
|
129
167
|
--input-height: 30px;
|
|
130
168
|
--input-font-size: 14px;
|
|
131
169
|
}
|
|
170
|
+
|
|
132
171
|
.pt-065{
|
|
133
172
|
padding-top: 0.65rem;
|
|
134
173
|
}
|
|
@@ -23,7 +23,7 @@ defineProps<{
|
|
|
23
23
|
@click="nav.onClick"
|
|
24
24
|
>
|
|
25
25
|
<Icon :icon="nav.icon" :size="1.4" class="m-0 line-height-14" />
|
|
26
|
-
<p class="m-0 pb-025
|
|
26
|
+
<p class="m-0 pb-025 txt10 line-height-1 w60 menu-text">
|
|
27
27
|
{{ nav.label }}
|
|
28
28
|
</p>
|
|
29
29
|
</Btn>
|
package/src/styles/layout.css
CHANGED
|
@@ -2759,6 +2759,36 @@
|
|
|
2759
2759
|
min-height: 200px;
|
|
2760
2760
|
}
|
|
2761
2761
|
|
|
2762
|
+
.h-250,
|
|
2763
|
+
.h250p,
|
|
2764
|
+
.h-250p {
|
|
2765
|
+
height: 250%;
|
|
2766
|
+
}
|
|
2767
|
+
|
|
2768
|
+
.vh-250,
|
|
2769
|
+
.h-250vh,
|
|
2770
|
+
.h250vh {
|
|
2771
|
+
height: 250vh;
|
|
2772
|
+
}
|
|
2773
|
+
|
|
2774
|
+
.h-250px,
|
|
2775
|
+
.h250px {
|
|
2776
|
+
height: 250px;
|
|
2777
|
+
}
|
|
2778
|
+
|
|
2779
|
+
.hm-250px,
|
|
2780
|
+
.max-h-250px,
|
|
2781
|
+
.h-max-250px,
|
|
2782
|
+
.max-h250px {
|
|
2783
|
+
max-height: 250px;
|
|
2784
|
+
}
|
|
2785
|
+
|
|
2786
|
+
.min-h-250px,
|
|
2787
|
+
.h-min-250px,
|
|
2788
|
+
.min-h250px {
|
|
2789
|
+
min-height: 250px;
|
|
2790
|
+
}
|
|
2791
|
+
|
|
2762
2792
|
.h-300,
|
|
2763
2793
|
.h300p,
|
|
2764
2794
|
.h-300p {
|
|
@@ -2789,6 +2819,36 @@
|
|
|
2789
2819
|
min-height: 300px;
|
|
2790
2820
|
}
|
|
2791
2821
|
|
|
2822
|
+
.h-350,
|
|
2823
|
+
.h350p,
|
|
2824
|
+
.h-350p {
|
|
2825
|
+
height: 350%;
|
|
2826
|
+
}
|
|
2827
|
+
|
|
2828
|
+
.vh-350,
|
|
2829
|
+
.h-350vh,
|
|
2830
|
+
.h350vh {
|
|
2831
|
+
height: 350vh;
|
|
2832
|
+
}
|
|
2833
|
+
|
|
2834
|
+
.h-350px,
|
|
2835
|
+
.h350px {
|
|
2836
|
+
height: 350px;
|
|
2837
|
+
}
|
|
2838
|
+
|
|
2839
|
+
.hm-350px,
|
|
2840
|
+
.max-h-350px,
|
|
2841
|
+
.h-max-350px,
|
|
2842
|
+
.max-h350px {
|
|
2843
|
+
max-height: 350px;
|
|
2844
|
+
}
|
|
2845
|
+
|
|
2846
|
+
.min-h-350px,
|
|
2847
|
+
.h-min-350px,
|
|
2848
|
+
.min-h350px {
|
|
2849
|
+
min-height: 350px;
|
|
2850
|
+
}
|
|
2851
|
+
|
|
2792
2852
|
.h-400,
|
|
2793
2853
|
.h400p,
|
|
2794
2854
|
.h-400p {
|
|
@@ -2819,6 +2879,36 @@
|
|
|
2819
2879
|
min-height: 400px;
|
|
2820
2880
|
}
|
|
2821
2881
|
|
|
2882
|
+
.h-450,
|
|
2883
|
+
.h450p,
|
|
2884
|
+
.h-450p {
|
|
2885
|
+
height: 450%;
|
|
2886
|
+
}
|
|
2887
|
+
|
|
2888
|
+
.vh-450,
|
|
2889
|
+
.h-450vh,
|
|
2890
|
+
.h450vh {
|
|
2891
|
+
height: 450vh;
|
|
2892
|
+
}
|
|
2893
|
+
|
|
2894
|
+
.h-450px,
|
|
2895
|
+
.h450px {
|
|
2896
|
+
height: 450px;
|
|
2897
|
+
}
|
|
2898
|
+
|
|
2899
|
+
.hm-450px,
|
|
2900
|
+
.max-h-450px,
|
|
2901
|
+
.h-max-450px,
|
|
2902
|
+
.max-h450px {
|
|
2903
|
+
max-height: 450px;
|
|
2904
|
+
}
|
|
2905
|
+
|
|
2906
|
+
.min-h-450px,
|
|
2907
|
+
.h-min-450px,
|
|
2908
|
+
.min-h450px {
|
|
2909
|
+
min-height: 450px;
|
|
2910
|
+
}
|
|
2911
|
+
|
|
2822
2912
|
.h-500,
|
|
2823
2913
|
.h500p,
|
|
2824
2914
|
.h-500p {
|
|
@@ -2849,6 +2939,36 @@
|
|
|
2849
2939
|
min-height: 500px;
|
|
2850
2940
|
}
|
|
2851
2941
|
|
|
2942
|
+
.h-550,
|
|
2943
|
+
.h550p,
|
|
2944
|
+
.h-550p {
|
|
2945
|
+
height: 550%;
|
|
2946
|
+
}
|
|
2947
|
+
|
|
2948
|
+
.vh-550,
|
|
2949
|
+
.h-550vh,
|
|
2950
|
+
.h550vh {
|
|
2951
|
+
height: 550vh;
|
|
2952
|
+
}
|
|
2953
|
+
|
|
2954
|
+
.h-550px,
|
|
2955
|
+
.h550px {
|
|
2956
|
+
height: 550px;
|
|
2957
|
+
}
|
|
2958
|
+
|
|
2959
|
+
.hm-550px,
|
|
2960
|
+
.max-h-550px,
|
|
2961
|
+
.h-max-550px,
|
|
2962
|
+
.max-h550px {
|
|
2963
|
+
max-height: 550px;
|
|
2964
|
+
}
|
|
2965
|
+
|
|
2966
|
+
.min-h-550px,
|
|
2967
|
+
.h-min-550px,
|
|
2968
|
+
.min-h550px {
|
|
2969
|
+
min-height: 550px;
|
|
2970
|
+
}
|
|
2971
|
+
|
|
2852
2972
|
.h-600,
|
|
2853
2973
|
.h600p,
|
|
2854
2974
|
.h-600p {
|
|
@@ -2879,6 +2999,36 @@
|
|
|
2879
2999
|
min-height: 600px;
|
|
2880
3000
|
}
|
|
2881
3001
|
|
|
3002
|
+
.h-650,
|
|
3003
|
+
.h650p,
|
|
3004
|
+
.h-650p {
|
|
3005
|
+
height: 650%;
|
|
3006
|
+
}
|
|
3007
|
+
|
|
3008
|
+
.vh-650,
|
|
3009
|
+
.h-650vh,
|
|
3010
|
+
.h650vh {
|
|
3011
|
+
height: 650vh;
|
|
3012
|
+
}
|
|
3013
|
+
|
|
3014
|
+
.h-650px,
|
|
3015
|
+
.h650px {
|
|
3016
|
+
height: 650px;
|
|
3017
|
+
}
|
|
3018
|
+
|
|
3019
|
+
.hm-650px,
|
|
3020
|
+
.max-h-650px,
|
|
3021
|
+
.h-max-650px,
|
|
3022
|
+
.max-h650px {
|
|
3023
|
+
max-height: 650px;
|
|
3024
|
+
}
|
|
3025
|
+
|
|
3026
|
+
.min-h-650px,
|
|
3027
|
+
.h-min-650px,
|
|
3028
|
+
.min-h650px {
|
|
3029
|
+
min-height: 650px;
|
|
3030
|
+
}
|
|
3031
|
+
|
|
2882
3032
|
.h-700,
|
|
2883
3033
|
.h700p,
|
|
2884
3034
|
.h-700p {
|
|
@@ -2909,6 +3059,36 @@
|
|
|
2909
3059
|
min-height: 700px;
|
|
2910
3060
|
}
|
|
2911
3061
|
|
|
3062
|
+
.h-750,
|
|
3063
|
+
.h750p,
|
|
3064
|
+
.h-750p {
|
|
3065
|
+
height: 750%;
|
|
3066
|
+
}
|
|
3067
|
+
|
|
3068
|
+
.vh-750,
|
|
3069
|
+
.h-750vh,
|
|
3070
|
+
.h750vh {
|
|
3071
|
+
height: 750vh;
|
|
3072
|
+
}
|
|
3073
|
+
|
|
3074
|
+
.h-750px,
|
|
3075
|
+
.h750px {
|
|
3076
|
+
height: 750px;
|
|
3077
|
+
}
|
|
3078
|
+
|
|
3079
|
+
.hm-750px,
|
|
3080
|
+
.max-h-750px,
|
|
3081
|
+
.h-max-750px,
|
|
3082
|
+
.max-h750px {
|
|
3083
|
+
max-height: 750px;
|
|
3084
|
+
}
|
|
3085
|
+
|
|
3086
|
+
.min-h-750px,
|
|
3087
|
+
.h-min-750px,
|
|
3088
|
+
.min-h750px {
|
|
3089
|
+
min-height: 750px;
|
|
3090
|
+
}
|
|
3091
|
+
|
|
2912
3092
|
.h-800,
|
|
2913
3093
|
.h800p,
|
|
2914
3094
|
.h-800p {
|
|
@@ -2939,6 +3119,36 @@
|
|
|
2939
3119
|
min-height: 800px;
|
|
2940
3120
|
}
|
|
2941
3121
|
|
|
3122
|
+
.h-850,
|
|
3123
|
+
.h850p,
|
|
3124
|
+
.h-850p {
|
|
3125
|
+
height: 850%;
|
|
3126
|
+
}
|
|
3127
|
+
|
|
3128
|
+
.vh-850,
|
|
3129
|
+
.h-850vh,
|
|
3130
|
+
.h850vh {
|
|
3131
|
+
height: 850vh;
|
|
3132
|
+
}
|
|
3133
|
+
|
|
3134
|
+
.h-850px,
|
|
3135
|
+
.h850px {
|
|
3136
|
+
height: 850px;
|
|
3137
|
+
}
|
|
3138
|
+
|
|
3139
|
+
.hm-850px,
|
|
3140
|
+
.max-h-850px,
|
|
3141
|
+
.h-max-850px,
|
|
3142
|
+
.max-h850px {
|
|
3143
|
+
max-height: 850px;
|
|
3144
|
+
}
|
|
3145
|
+
|
|
3146
|
+
.min-h-850px,
|
|
3147
|
+
.h-min-850px,
|
|
3148
|
+
.min-h850px {
|
|
3149
|
+
min-height: 850px;
|
|
3150
|
+
}
|
|
3151
|
+
|
|
2942
3152
|
.h-900,
|
|
2943
3153
|
.h900p,
|
|
2944
3154
|
.h-900p {
|
|
@@ -2969,6 +3179,36 @@
|
|
|
2969
3179
|
min-height: 900px;
|
|
2970
3180
|
}
|
|
2971
3181
|
|
|
3182
|
+
.h-950,
|
|
3183
|
+
.h950p,
|
|
3184
|
+
.h-950p {
|
|
3185
|
+
height: 950%;
|
|
3186
|
+
}
|
|
3187
|
+
|
|
3188
|
+
.vh-950,
|
|
3189
|
+
.h-950vh,
|
|
3190
|
+
.h950vh {
|
|
3191
|
+
height: 950vh;
|
|
3192
|
+
}
|
|
3193
|
+
|
|
3194
|
+
.h-950px,
|
|
3195
|
+
.h950px {
|
|
3196
|
+
height: 950px;
|
|
3197
|
+
}
|
|
3198
|
+
|
|
3199
|
+
.hm-950px,
|
|
3200
|
+
.max-h-950px,
|
|
3201
|
+
.h-max-950px,
|
|
3202
|
+
.max-h950px {
|
|
3203
|
+
max-height: 950px;
|
|
3204
|
+
}
|
|
3205
|
+
|
|
3206
|
+
.min-h-950px,
|
|
3207
|
+
.h-min-950px,
|
|
3208
|
+
.min-h950px {
|
|
3209
|
+
min-height: 950px;
|
|
3210
|
+
}
|
|
3211
|
+
|
|
2972
3212
|
.h-1000,
|
|
2973
3213
|
.h1000p,
|
|
2974
3214
|
.h-1000p {
|