@bagelink/vue 0.0.1220 → 0.0.1227

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 (80) hide show
  1. package/dist/components/BglComponent.vue.d.ts.map +1 -1
  2. package/dist/components/Btn.vue.d.ts.map +1 -1
  3. package/dist/components/Calendar/Index.vue.d.ts +8 -4
  4. package/dist/components/Calendar/Index.vue.d.ts.map +1 -1
  5. package/dist/components/Calendar/components/header/Header.vue.d.ts +2 -0
  6. package/dist/components/Calendar/components/header/Header.vue.d.ts.map +1 -1
  7. package/dist/components/Calendar/components/month/AgendaEventTile.vue.d.ts.map +1 -1
  8. package/dist/components/Calendar/components/month/AgendaEvents.vue.d.ts.map +1 -1
  9. package/dist/components/Calendar/components/month/Day.vue.d.ts.map +1 -1
  10. package/dist/components/Calendar/components/month/Event.vue.d.ts.map +1 -1
  11. package/dist/components/Calendar/components/month/Month.vue.d.ts +2 -2
  12. package/dist/components/Calendar/components/month/Month.vue.d.ts.map +1 -1
  13. package/dist/components/Calendar/components/month/WeekDay.vue.d.ts.map +1 -1
  14. package/dist/components/Calendar/components/partials/EventFlyout.vue.d.ts.map +1 -1
  15. package/dist/components/Calendar/components/week/Day.vue.d.ts.map +1 -1
  16. package/dist/components/Calendar/components/week/Week.vue.d.ts +2 -2
  17. package/dist/components/Calendar/components/week/WeekTimeline.vue.d.ts.map +1 -1
  18. package/dist/components/Calendar/constants.d.ts.map +1 -1
  19. package/dist/components/Calendar/language/index.d.ts +2 -1
  20. package/dist/components/Calendar/language/index.d.ts.map +1 -1
  21. package/dist/components/Calendar/language/keys.d.ts +66 -63
  22. package/dist/components/Calendar/language/keys.d.ts.map +1 -1
  23. package/dist/components/Spreadsheet/Index.vue.d.ts +25 -0
  24. package/dist/components/Spreadsheet/Index.vue.d.ts.map +1 -0
  25. package/dist/components/form/BagelForm.vue.d.ts +2 -1
  26. package/dist/components/form/BagelForm.vue.d.ts.map +1 -1
  27. package/dist/components/form/inputs/DatePick.vue.d.ts +1 -0
  28. package/dist/components/form/inputs/DatePick.vue.d.ts.map +1 -1
  29. package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
  30. package/dist/components/form/inputs/NumberInput.vue.d.ts.map +1 -1
  31. package/dist/components/index.d.ts +1 -0
  32. package/dist/components/index.d.ts.map +1 -1
  33. package/dist/components/lightbox/Lightbox.vue.d.ts.map +1 -1
  34. package/dist/components/lightbox/lightbox.types.d.ts +2 -1
  35. package/dist/components/lightbox/lightbox.types.d.ts.map +1 -1
  36. package/dist/composables/useSchemaField.d.ts +9 -5
  37. package/dist/composables/useSchemaField.d.ts.map +1 -1
  38. package/dist/index.cjs +1879 -1161
  39. package/dist/index.mjs +1880 -1162
  40. package/dist/style.css +733 -763
  41. package/dist/types/BagelForm.d.ts +2 -1
  42. package/dist/types/BagelForm.d.ts.map +1 -1
  43. package/dist/utils/BagelFormUtils.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/src/components/Btn.vue +3 -0
  46. package/src/components/Calendar/Index.vue +13 -16
  47. package/src/components/Calendar/components/header/Header.vue +17 -139
  48. package/src/components/Calendar/components/month/AgendaEventTile.vue +1 -10
  49. package/src/components/Calendar/components/month/AgendaEvents.vue +7 -53
  50. package/src/components/Calendar/components/month/Day.vue +12 -30
  51. package/src/components/Calendar/components/month/Event.vue +10 -67
  52. package/src/components/Calendar/components/month/Month.vue +10 -56
  53. package/src/components/Calendar/components/month/WeekDay.vue +1 -11
  54. package/src/components/Calendar/components/partials/EventFlyout.vue +2 -1
  55. package/src/components/Calendar/components/week/Day.vue +4 -18
  56. package/src/components/Calendar/components/week/DayEvent.vue +1 -1
  57. package/src/components/Calendar/components/week/FullDayEvent.vue +2 -2
  58. package/src/components/Calendar/components/week/Week.vue +1 -1
  59. package/src/components/Calendar/components/week/WeekTimeline.vue +13 -38
  60. package/src/components/Calendar/constants.ts +11 -11
  61. package/src/components/Calendar/language/index.ts +6 -3
  62. package/src/components/Calendar/language/keys.ts +91 -88
  63. package/src/components/Calendar/styles/_variables.css +38 -42
  64. package/src/components/Spreadsheet/Index.vue +867 -0
  65. package/src/components/form/BagelForm.vue +7 -3
  66. package/src/components/form/inputs/DatePick.vue +6 -2
  67. package/src/components/form/inputs/DatePicker.vue +2 -2
  68. package/src/components/form/inputs/NumberInput.vue +2 -2
  69. package/src/components/index.ts +1 -0
  70. package/src/components/lightbox/Lightbox.vue +5 -5
  71. package/src/components/lightbox/lightbox.types.ts +2 -1
  72. package/src/composables/useSchemaField.ts +36 -12
  73. package/src/styles/buttons.css +81 -73
  74. package/src/styles/layout.css +25 -0
  75. package/src/styles/mobilLayout.css +25 -0
  76. package/src/styles/text.css +82 -1
  77. package/src/styles/theme.css +269 -258
  78. package/src/types/BagelForm.ts +2 -1
  79. package/src/utils/BagelFormUtils.ts +2 -1
  80. package/src/components/Calendar/index.ts +0 -4
@@ -8,7 +8,7 @@ export interface BagelFormProps<_T> {
8
8
  modelValue?: _T
9
9
  schema?: BglFormSchemaFnT<_T>
10
10
  tag?: 'form' | 'template'
11
- onSubmit?: (data: _T) => Promise<void>
11
+ onSubmit?: (data: _T) => Promise<void> | void
12
12
  }
13
13
 
14
14
  const props = withDefaults(defineProps<BagelFormProps<T>>(), {
@@ -31,7 +31,7 @@ onMounted(() => {
31
31
  }
32
32
  })
33
33
 
34
- const formState = ref<'success' | 'error' | 'idle'>('idle')
34
+ const formState = ref<'success' | 'error' | 'idle' | 'submitting'>('idle')
35
35
 
36
36
  watch(() => props.modelValue, (newValue) => {
37
37
  if (newValue !== undefined) {
@@ -60,9 +60,13 @@ function updateFormData(fieldId: string, value: any) {
60
60
 
61
61
  async function handleSubmit() {
62
62
  try {
63
+ if (formState.value === 'submitting') return
64
+ formState.value = 'submitting'
63
65
  await props.onSubmit?.(formData.value)
64
66
  initialFormData.value = structuredClone(formData.value)
65
67
  formState.value = 'success'
68
+ // Notify parent window of successful submission
69
+ window.parent.postMessage({ type: 'BAGEL_FORM_SUCCESS', data: formData.value }, '*')
66
70
  } catch (error) {
67
71
  formState.value = 'error'
68
72
  }
@@ -98,7 +102,7 @@ defineExpose({ form, isDirty, validateForm })
98
102
  </template>
99
103
  </template>
100
104
  <slot v-else />
101
- <slot name="submit" :submit="handleSubmit" :isDirty="isDirty" :validateForm="validateForm" />
105
+ <slot name="submit" :submit="handleSubmit" :isDirty="isDirty" :validateForm="validateForm" :formState="formState" />
102
106
  <slot v-if="formState === 'success'" name="success" />
103
107
  <slot v-if="formState === 'error'" name="error" />
104
108
  </form>
@@ -17,6 +17,8 @@ const props = withDefaults(
17
17
  mode?: modeType
18
18
  firstDayOfWeek?: WEEK_START_DAY
19
19
  locale?: string
20
+ center?: boolean
21
+
20
22
  }>(),
21
23
  {
22
24
  enableTime: false,
@@ -40,7 +42,7 @@ const time = new Time(props.firstDayOfWeek, props.locale)
40
42
  function formatDisplayDate(date: Date | string | undefined): string {
41
43
  if (!date) return ''
42
44
  const dateObj = typeof date === 'string' ? new Date(date) : date
43
-
45
+
44
46
  if (props.enableTime) {
45
47
  return dateObj.toLocaleString(props.locale || undefined, {
46
48
  year: 'numeric',
@@ -51,7 +53,7 @@ function formatDisplayDate(date: Date | string | undefined): string {
51
53
  timeZone: props.timezone
52
54
  })
53
55
  }
54
-
56
+
55
57
  return dateObj.toLocaleString(props.locale || undefined, {
56
58
  year: 'numeric',
57
59
  month: 'short',
@@ -260,6 +262,8 @@ function isNotInMonth(date: Date) {
260
262
  :required="required"
261
263
  :disabled="!editMode"
262
264
  class="date-input"
265
+ :class="{
266
+ 'txt-center': center }"
263
267
  readonly
264
268
  @click="isOpen = true"
265
269
  >
@@ -32,7 +32,7 @@ const hours = Array.from({ length: 18 }, (_, index) => {
32
32
 
33
33
  <template>
34
34
  <div class="datetime-wrap">
35
- <div class="date-wrap">
35
+ <!-- <div class="date-wrap">
36
36
  <VDatepicker
37
37
  v-model="selectedDate"
38
38
  inline
@@ -48,7 +48,7 @@ const hours = Array.from({ length: 18 }, (_, index) => {
48
48
  <template #action-buttons />
49
49
  <template #action-preview />
50
50
  </VDatepicker>
51
- </div>
51
+ </div> -->
52
52
  <div v-if="showTimeWrap" class="time-wrap">
53
53
  <template v-for="hr in hours" :key="hr">
54
54
  <input
@@ -100,7 +100,7 @@ function formatNumber(num: number) {
100
100
 
101
101
  let formattedValue = $ref('')
102
102
  function inputHandler() {
103
- let numeric = formattedValue.replace(/[^\d.-]/g, '')
103
+ const numeric = formattedValue.replace(/[^\d.-]/g, '')
104
104
  const emptyValue = ['', '-', '.'].includes(numeric)
105
105
  if (numeric === '-.' || numeric.endsWith('.') || emptyValue) return
106
106
 
@@ -129,7 +129,7 @@ watch(() => modelValue, (newVal) => {
129
129
  }"
130
130
  >
131
131
  <div :for="id">
132
- <label v-if="label">
132
+ <label v-if="label" class="block">
133
133
  {{ label }}
134
134
  </label>
135
135
  <div class="gap-025" :class="{ 'column flex': layout === 'vertical', 'flex': layout === 'horizontal' }">
@@ -36,6 +36,7 @@ export { default as NavBar } from './NavBar.vue'
36
36
  export { default as PageTitle } from './PageTitle.vue'
37
37
  export { default as Pill } from './Pill.vue'
38
38
  export { default as RouterWrapper } from './RouterWrapper.vue'
39
+ export { default as Spreadsheet } from './Spreadsheet/Index.vue'
39
40
  export { default as Title } from './Title.vue'
40
41
  export { default as ToolBar } from './ToolBar.vue'
41
42
  export { default as TopBar } from './TopBar.vue'
@@ -100,13 +100,13 @@ defineExpose({ open, close })
100
100
  <Btn flat class="color-white" icon="add" :disabled="zoom === 3" @click="zoom++" />
101
101
  </div>
102
102
  <Btn
103
- v-if="currentItem?.openFile" class="color-white" round thin flat iconEnd="arrow_outward"
103
+ v-if="currentItem?.openFile && currentItem?.src" class="color-white" round thin flat iconEnd="arrow_outward"
104
104
  value="Open File"
105
105
  :href="currentItem?.src"
106
106
  target="_blank"
107
107
  />
108
108
  <Btn
109
- v-if="currentItem?.download" class="color-white" round thin flat icon="download"
109
+ v-if="currentItem?.download && currentItem?.src" class="color-white" round thin flat icon="download"
110
110
  value="Download File"
111
111
  :href="upgradeHeaders(currentItem?.src)"
112
112
  download
@@ -117,11 +117,11 @@ defineExpose({ open, close })
117
117
  <Carousel v-model:index="currentIndex" :items="1" class="bgl-lightbox-item" :class="{ zoomed: zoom > 1 }" :freeDrag="zoom === 1">
118
118
  <template v-for="item in group" :key="item.src">
119
119
  <Zoomer v-if="item.type === 'image'" v-model:zoom="zoom" :disabled="!item?.enableZoom" :mouse-wheel-to-zoom="false">
120
- <Image :draggable="false" :src="item?.src" alt="Preview" class="vw90 lightbox-image" />
120
+ <Image :draggable="false" :src="item?.src" :pathKey="item?.pathKey" alt="Preview" class="vw90 lightbox-image" />
121
121
  </Zoomer>
122
122
 
123
123
  <BglVideo
124
- v-else-if="item?.type === 'video'"
124
+ v-else-if="item?.type === 'video' && item?.src"
125
125
  :src="item?.src"
126
126
  autoplay
127
127
  controls
@@ -129,7 +129,7 @@ defineExpose({ open, close })
129
129
  />
130
130
 
131
131
  <embed
132
- v-else-if="item?.type === 'pdf'"
132
+ v-else-if="item?.type === 'pdf' && item?.src"
133
133
  :src="normalizeURL(item?.src)"
134
134
  type="application/pdf"
135
135
  width="100%"
@@ -1,5 +1,6 @@
1
1
  export interface LightboxItem {
2
- src: string
2
+ src?: string
3
+ pathKey?: string
3
4
  type: string
4
5
  name: string
5
6
  thumbnail?: string
@@ -1,5 +1,5 @@
1
1
  import type { VNode } from 'vue'
2
- import type { BaseBagelField } from '../types/BagelForm'
2
+ import type { BaseBagelField, BglFormSchemaT } from '../types/BagelForm'
3
3
  import {
4
4
  TextInput,
5
5
  NumberInput,
@@ -17,7 +17,7 @@ import {
17
17
  classify,
18
18
  keyToLabel
19
19
  } from '@bagelink/vue'
20
- import { h } from 'vue'
20
+ import { h, isVNode } from 'vue'
21
21
 
22
22
  const SLOT_VALUE_COMPONENTS = new Set(['div', 'span', 'p'])
23
23
 
@@ -30,6 +30,12 @@ export interface UseSchemaFieldOptions<T> {
30
30
  includeUnset?: boolean
31
31
  }
32
32
 
33
+ // Add type for supported child types
34
+ type SupportedChild<T> = BaseBagelField<T> | string | VNode
35
+ interface SlotProps<T> { row: T, field: BaseBagelField<T> }
36
+ type SlotFunction<T> = (props: SlotProps<T>) => any
37
+ type SupportedSlot<T> = BglFormSchemaT<T> | VNode | SlotFunction<T>
38
+
33
39
  export function useSchemaField<T extends { [key: string]: any }>(options: UseSchemaFieldOptions<T>) {
34
40
  const { mode = 'form', getRowData, onUpdate, includeUnset = false } = options
35
41
 
@@ -57,9 +63,19 @@ export function useSchemaField<T extends { [key: string]: any }>(options: UseSch
57
63
  return typeof field.$el === 'object' ? field.$el : componentMap[field.$el as keyof typeof componentMap] ?? field.$el ?? 'div'
58
64
  }
59
65
 
66
+ function isSlotFunction<T>(slot: unknown): slot is SlotFunction<T> {
67
+ return typeof slot === 'function'
68
+ }
69
+
70
+ function renderChild(child: SupportedChild<T>, slots?: Record<string, SupportedSlot<T>>): any {
71
+ if (typeof child === 'string') return child
72
+ if (isVNode(child)) return child
73
+ return renderField(child, slots)
74
+ }
75
+
60
76
  function renderField(
61
77
  field: BaseBagelField<T>,
62
- slots?: Record<string, (props: { row: T, field: BaseBagelField<T> }) => any>
78
+ slots?: Record<string, SupportedSlot<T>>
63
79
  ): VNode | null {
64
80
  const Component = getComponent(field)
65
81
  if (!Component) return null
@@ -169,10 +185,7 @@ export function useSchemaField<T extends { [key: string]: any }>(options: UseSch
169
185
  // Add default slot if there are children
170
186
  if (children?.length) {
171
187
  componentSlots.default = () => children
172
- .map((child) => {
173
- if (typeof child === 'string') return child
174
- return renderField(child, slots)
175
- })
188
+ .map(child => renderChild(child, slots))
176
189
  .filter(Boolean) // Filter out null results from vIf
177
190
  }
178
191
 
@@ -181,18 +194,29 @@ export function useSchemaField<T extends { [key: string]: any }>(options: UseSch
181
194
  componentSlots.default = () => transformedValue?.toString() || ''
182
195
  }
183
196
 
184
- // Add any custom slots from the field
197
+ // Handle custom slots from the field
185
198
  if (fieldSlots) {
186
199
  Object.entries(fieldSlots).forEach(([name, slot]) => {
187
- componentSlots[name] = typeof slot === 'function'
188
- ? () => slot(currentValue, rowData)
189
- : () => slot
200
+ componentSlots[name] = () => {
201
+ if (Array.isArray(slot)) {
202
+ // Handle BglFormSchemaT array
203
+ return slot.map(schemaField => renderField(schemaField as BaseBagelField<T>, slots))
204
+ } else if (isVNode(slot)) {
205
+ // Handle VNode
206
+ return slot
207
+ } else if (typeof slot === 'function') {
208
+ // Handle function slot
209
+ const slotFn = slot as (props: SlotProps<T>) => any
210
+ return slotFn({ row: rowData, field })
211
+ }
212
+ return slot
213
+ }
190
214
  })
191
215
  }
192
216
 
193
217
  // Handle custom slot content from parent
194
218
  const slotContent = field.id && slots?.[field.id]
195
- ? slots[field.id]({ row: rowData, field })
219
+ ? (slots[field.id] as SlotFunction<T>)({ row: rowData, field })
196
220
  : undefined
197
221
 
198
222
  if (mode === 'preview') {
@@ -1,132 +1,140 @@
1
1
  .bgl_btn,
2
2
  .bgl_flatBtn,
3
3
  .bgl_btn-icon {
4
- font-family: inherit;
5
- white-space: nowrap;
6
- cursor: pointer;
7
- box-sizing: border-box;
8
- user-select: none;
9
- border: none;
10
- transition: var(--bgl-transition);
11
- border-radius: var(--btn-border-radius);
12
- line-height: var(--btn-height);
13
- font-size: var(--input-font-size);
14
- display: inline-block;
15
- height: var(--btn-height);
16
- padding: 0;
4
+ font-family: inherit;
5
+ white-space: nowrap;
6
+ cursor: pointer;
7
+ box-sizing: border-box;
8
+ user-select: none;
9
+ border: none;
10
+ transition: var(--bgl-transition);
11
+ border-radius: var(--btn-border-radius);
12
+ line-height: var(--btn-height);
13
+ font-size: var(--input-font-size);
14
+ display: inline-block;
15
+ height: var(--btn-height);
16
+ padding: 0;
17
17
  }
18
18
 
19
19
  .btn-close {
20
- margin-top: -20px;
21
- margin-inline-end: -20px;
22
- margin-inline-start: auto;
23
- margin-bottom: 15px;
24
- transition: var(--bgl-transition);
25
- height: 30px;
26
- width: 30px;
27
- opacity: 0.6;
28
- cursor: pointer;
29
- border-radius: 100%;
30
- outline: 2px solid transparent;
31
- display: flex;
32
- align-items: center;
33
- justify-content: center;
20
+ margin-top: -20px;
21
+ margin-inline-end: -20px;
22
+ margin-inline-start: auto;
23
+ margin-bottom: 15px;
24
+ transition: var(--bgl-transition);
25
+ height: 30px;
26
+ width: 30px;
27
+ opacity: 0.6;
28
+ cursor: pointer;
29
+ border-radius: 100%;
30
+ outline: 2px solid transparent;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
34
  }
35
35
 
36
36
  .btn-close:hover {
37
- background: var(--bgl-gray-light);
38
- opacity: 1;
37
+ background: var(--bgl-gray-light);
38
+ opacity: 1;
39
39
  }
40
40
 
41
41
  .btn-close:active {
42
- background: var(--bgl-gray);
42
+ background: var(--bgl-gray);
43
43
  }
44
44
 
45
45
  .btn-close::before {
46
- content: 'close';
47
- font-family: 'Material Symbols Outlined', serif;
46
+ content: 'close';
47
+ font-family: 'Material Symbols Outlined', serif;
48
48
  }
49
49
 
50
50
  .bgl_btn.thin {
51
- height: calc(var(--btn-height) * 0.7);
52
- line-height: calc(var(--btn-height) * 0.7);
51
+ height: calc(var(--btn-height) * 0.7);
52
+ line-height: calc(var(--btn-height) * 0.7);
53
53
  }
54
54
 
55
55
  .hover {
56
- cursor: pointer;
57
- transition: all 400ms ease;
56
+ cursor: pointer;
57
+ transition: all 400ms ease;
58
58
  }
59
59
 
60
60
  .hover:hover {
61
- filter: brightness(90%);
61
+ filter: brightness(90%);
62
62
  }
63
63
 
64
64
  .hover:active {
65
- filter: brightness(80%);
65
+ filter: brightness(80%);
66
66
  }
67
67
 
68
68
  .border {
69
- border: 1px solid var(--border-color);
69
+ border: 1px solid var(--border-color);
70
70
  }
71
71
 
72
72
  .border-primary {
73
- border: 1px solid var(--bgl-primary);
73
+ border: 1px solid var(--bgl-primary);
74
+ }
75
+
76
+ .outline {
77
+ outline: 1px solid var(--border-color);
78
+ }
79
+
80
+ .outline-primary {
81
+ outline: 1px solid var(--bgl-primary);
74
82
  }
75
83
 
76
84
  .rotate-270 {
77
- transform: rotate(270deg);
85
+ transform: rotate(270deg);
78
86
  }
79
87
 
80
88
  .rotate-180 {
81
- transform: rotate(180deg);
89
+ transform: rotate(180deg);
82
90
  }
83
91
 
84
92
  .rotate-90 {
85
- transform: rotate(90deg);
93
+ transform: rotate(90deg);
86
94
  }
87
95
 
88
96
  .rotate-0 {
89
- transform: rotate(0deg);
97
+ transform: rotate(0deg);
90
98
  }
91
99
 
92
100
  @media screen and (max-width: 910px) {
93
- .bgl_btn {
94
- padding: 0 20px;
95
- }
101
+ .bgl_btn {
102
+ padding: 0 20px;
103
+ }
96
104
 
97
- .m_border {
98
- border: 1px solid var(--border-color);
99
- }
105
+ .m_border {
106
+ border: 1px solid var(--border-color);
107
+ }
100
108
 
101
- .m_rotate-270 {
102
- transform: rotate(270deg);
103
- }
109
+ .m_rotate-270 {
110
+ transform: rotate(270deg);
111
+ }
104
112
 
105
- .m_rotate-180 {
106
- transform: rotate(180deg);
107
- }
113
+ .m_rotate-180 {
114
+ transform: rotate(180deg);
115
+ }
108
116
 
109
- .m_rotate-90 {
110
- transform: rotate(90deg);
111
- }
117
+ .m_rotate-90 {
118
+ transform: rotate(90deg);
119
+ }
112
120
 
113
- .m_rotate-0 {
114
- transform: rotate(0deg);
115
- }
121
+ .m_rotate-0 {
122
+ transform: rotate(0deg);
123
+ }
116
124
  }
117
125
 
118
126
  .ripple {
119
- position: absolute;
120
- border-radius: 50%;
121
- transform: scale(0);
122
- background: rgba(0, 0, 0, 0.3);
123
- pointer-events: none;
124
- animation: rippleEffect 0.6s ease-out;
127
+ position: absolute;
128
+ border-radius: 50%;
129
+ transform: scale(0);
130
+ background: rgba(0, 0, 0, 0.3);
131
+ pointer-events: none;
132
+ animation: rippleEffect 0.6s ease-out;
125
133
  }
126
134
 
127
135
  @keyframes rippleEffect {
128
- to {
129
- transform: scale(4);
130
- opacity: 0;
131
- }
132
- }
136
+ to {
137
+ transform: scale(4);
138
+ opacity: 0;
139
+ }
140
+ }
@@ -55,6 +55,27 @@
55
55
  aspect-ratio: 1;
56
56
  }
57
57
 
58
+ .vertical-align-middle,
59
+ .vertical-middle {
60
+ vertical-align: middle;
61
+ }
62
+
63
+ .vertical-align-top,
64
+ .vertical-top {
65
+ vertical-align: top;
66
+ }
67
+
68
+ .vertical-align-bottom,
69
+ .vertical-bottom {
70
+ vertical-align: bottom;
71
+ }
72
+
73
+ .vertical-align-baseline,
74
+ .vertical-baseline {
75
+ vertical-align: baseline;
76
+ }
77
+
78
+
58
79
  .flex-center {
59
80
  justify-content: center;
60
81
  align-items: center;
@@ -5380,6 +5401,10 @@
5380
5401
  justify-content: space-between;
5381
5402
  }
5382
5403
 
5404
+ .space-evenly {
5405
+ justify-content: space-evenly;
5406
+ }
5407
+
5383
5408
  .label {
5384
5409
  display: block;
5385
5410
  font-size: var(--label-font-size);
@@ -80,6 +80,27 @@
80
80
  aspect-ratio: 1;
81
81
  }
82
82
 
83
+ .m_vertical-align-middle,
84
+ .m_vertical-middle {
85
+ vertical-align: middle;
86
+ }
87
+
88
+ .m_vertical-align-top,
89
+ .m_vertical-top {
90
+ vertical-align: top;
91
+ }
92
+
93
+ .m_vertical-align-bottom,
94
+ .m_vertical-bottom {
95
+ vertical-align: bottom;
96
+ }
97
+
98
+ .m_vertical-align-baseline,
99
+ .m_vertical-baseline {
100
+ vertical-align: baseline;
101
+ }
102
+
103
+
83
104
  .m_flex-center {
84
105
  justify-items: center;
85
106
  align-items: center;
@@ -4635,6 +4656,10 @@
4635
4656
  justify-content: space-between;
4636
4657
  }
4637
4658
 
4659
+ .m_space-evenly {
4660
+ justify-content: space-evenly;
4661
+ }
4662
+
4638
4663
  .m_label {
4639
4664
  display: block;
4640
4665
  font-size: var(--label-font-size);
@@ -258,6 +258,46 @@
258
258
  font-weight: 900;
259
259
  }
260
260
 
261
+ .line-height-0 {
262
+ line-height: 0;
263
+ }
264
+
265
+ .line-height-01 {
266
+ line-height: 0.1;
267
+ }
268
+
269
+ .line-height-02 {
270
+ line-height: 0.2;
271
+ }
272
+
273
+ .line-height-03 {
274
+ line-height: 0.3;
275
+ }
276
+
277
+ .line-height-04 {
278
+ line-height: 0.4;
279
+ }
280
+
281
+ .line-height-05 {
282
+ line-height: 0.5;
283
+ }
284
+
285
+ .line-height-06 {
286
+ line-height: 0.6;
287
+ }
288
+
289
+ .line-height-07 {
290
+ line-height: 0.7;
291
+ }
292
+
293
+ .line-height-08 {
294
+ line-height: 0.8;
295
+ }
296
+
297
+ .line-height-09 {
298
+ line-height: 0.9;
299
+ }
300
+
261
301
  .line-height-1 {
262
302
  line-height: 1;
263
303
  }
@@ -417,6 +457,7 @@
417
457
  }
418
458
 
419
459
  @media screen and (max-width: 910px) {
460
+
420
461
  .txt20,
421
462
  .txt-20 {
422
463
  font-size: 18px;
@@ -692,6 +733,46 @@
692
733
  font-weight: 900;
693
734
  }
694
735
 
736
+ .m_line-height-0 {
737
+ line-height: 0;
738
+ }
739
+
740
+ .m_line-height-01 {
741
+ line-height: 0.1;
742
+ }
743
+
744
+ .m_line-height-02 {
745
+ line-height: 0.2;
746
+ }
747
+
748
+ .m_line-height-03 {
749
+ line-height: 0.3;
750
+ }
751
+
752
+ .m_line-height-04 {
753
+ line-height: 0.4;
754
+ }
755
+
756
+ .m_line-height-05 {
757
+ line-height: 0.5;
758
+ }
759
+
760
+ .m_line-height-06 {
761
+ line-height: 0.6;
762
+ }
763
+
764
+ .m_line-height-07 {
765
+ line-height: 0.7;
766
+ }
767
+
768
+ .m_line-height-08 {
769
+ line-height: 0.8;
770
+ }
771
+
772
+ .m_line-height-09 {
773
+ line-height: 0.9;
774
+ }
775
+
695
776
  .m_line-height-1 {
696
777
  line-height: 1;
697
778
  }
@@ -833,4 +914,4 @@
833
914
  .m_capitalize {
834
915
  text-transform: capitalize;
835
916
  }
836
- }
917
+ }