@dative-gpi/foundation-shared-components 1.0.109 → 1.0.110

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.
@@ -3,13 +3,20 @@
3
3
  width="hug"
4
4
  >
5
5
  <FSRow>
6
- <FSSpan
7
- v-if="$props.label"
8
- class="fs-calendar-label"
9
- font="text-overline"
6
+ <FSSelectField
7
+ :hideHeader="true"
8
+ :clearable="false"
9
+ :items="years"
10
+ v-model="innerYear"
11
+ />
12
+ <FSRow
13
+ align="center-right"
10
14
  >
11
- {{ $props.label }}
12
- </FSSpan>
15
+ <FSButton
16
+ :label="$tr('ui.calendar.today', 'Today')"
17
+ @click="onClickToday"
18
+ />
19
+ </FSRow>
13
20
  </FSRow>
14
21
  <FSCol
15
22
  class="fs-calendar"
@@ -71,6 +78,7 @@ import { useDateFormat, useAppLanguageCode } from "@dative-gpi/foundation-shared
71
78
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
72
79
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
73
80
 
81
+ import FSSelectField from "./fields/FSSelectField.vue";
74
82
  import FSButton from "./FSButton.vue";
75
83
  import FSSpan from "./FSSpan.vue";
76
84
  import FSCol from "./FSCol.vue";
@@ -79,17 +87,13 @@ import FSRow from "./FSRow.vue";
79
87
  export default defineComponent({
80
88
  name: "FSCalendar",
81
89
  components: {
90
+ FSSelectField,
82
91
  FSButton,
83
92
  FSSpan,
84
93
  FSCol,
85
94
  FSRow
86
95
  },
87
96
  props: {
88
- label: {
89
- type: String as PropType<string | null>,
90
- required: false,
91
- default: null
92
- },
93
97
  modelValue: {
94
98
  type: Number as PropType<number | null>,
95
99
  required: false,
@@ -117,13 +121,14 @@ export default defineComponent({
117
121
 
118
122
  const colors = computed(() => getColors(props.color));
119
123
  const backgrounds = getColors(ColorEnum.Background);
124
+ const lights = getColors(ColorEnum.Light);
120
125
  const darks = getColors(ColorEnum.Dark);
121
126
 
122
127
  const style = computed((): StyleValue => ({
123
128
  "--fs-calendar-background-color" : backgrounds.base,
124
129
  "--fs-calendar-hover-background-color" : colors.value.light,
125
130
  "--fs-calendar-active-background-color": colors.value.base,
126
- "--fs-calendar-border-color" : darks.base,
131
+ "--fs-calendar-border-color" : lights.dark,
127
132
  "--fs-calendar-hover-border-color" : colors.value.base,
128
133
  "--fs-calendar-active-border-color" : colors.value.base,
129
134
  "--fs-calendar-color" : darks.base,
@@ -138,6 +143,28 @@ export default defineComponent({
138
143
  return new Intl.DateTimeFormat(languageCode.value, { month: "long", year: "numeric" }).format(date);
139
144
  });
140
145
 
146
+ const years = computed((): any[] => {
147
+ const years = [];
148
+ switch (props.limit) {
149
+ case "past":
150
+ for (let i = 1900; i < new Date().getFullYear(); i++) {
151
+ years.push({ label: i.toString(), id: i });
152
+ }
153
+ break;
154
+ case "future":
155
+ for (let i = new Date().getFullYear(); i < 2100; i++) {
156
+ years.push({ label: i.toString(), id: i });
157
+ }
158
+ break;
159
+ default:
160
+ for (let i = 1900; i < 2100; i++) {
161
+ years.push({ label: i.toString(), id: i });
162
+ }
163
+ break;
164
+ }
165
+ return years;
166
+ });
167
+
141
168
  const onClickPrevious = (): void => {
142
169
  if (innerMonth.value > 0) {
143
170
  innerMonth.value--;
@@ -165,6 +192,15 @@ export default defineComponent({
165
192
  emit("update:modelValue", pickerToEpoch(value[0]));
166
193
  };
167
194
 
195
+ const onClickToday = (): void => {
196
+ const today = new Date();
197
+ innerMonth.value = today.getMonth();
198
+ innerYear.value = today.getFullYear();
199
+
200
+ today.setHours(0, 0, 0, 0);
201
+ emit("update:modelValue", pickerToEpoch(today));
202
+ };
203
+
168
204
  const allowedDates = (value: unknown): boolean => {
169
205
  if (!(value instanceof Date)) {
170
206
  return false;
@@ -190,11 +226,13 @@ export default defineComponent({
190
226
  text,
191
227
  innerMonth,
192
228
  innerYear,
229
+ years,
193
230
  epochToPicker,
194
231
  pickerToEpoch,
195
232
  onClickPrevious,
196
233
  onClickNext,
197
234
  onClickDate,
235
+ onClickToday,
198
236
  allowedDates
199
237
  };
200
238
  }
@@ -2,15 +2,22 @@
2
2
  <FSCol
3
3
  width="hug"
4
4
  >
5
- <FSRow
6
- v-if="$props.label"
7
- >
8
- <FSSpan
9
- class="fs-calendar-label"
10
- font="text-overline"
5
+ <FSRow>
6
+ <FSSelectField
7
+ :hideHeader="true"
8
+ :clearable="false"
9
+ :items="years"
10
+ :modelValue="innerLeftYear"
11
+ @update:modelValue="onChangeYear"
12
+ />
13
+ <FSRow
14
+ align="center-right"
11
15
  >
12
- {{ $props.label }}
13
- </FSSpan>
16
+ <FSButton
17
+ :label="$tr('ui.calendar.today', 'Today')"
18
+ @click="onClickToday"
19
+ />
20
+ </FSRow>
14
21
  </FSRow>
15
22
  <FSRow
16
23
  class="fs-calendar-twin"
@@ -118,6 +125,7 @@ import { useDateFormat, useAppLanguageCode } from "@dative-gpi/foundation-shared
118
125
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
119
126
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
120
127
 
128
+ import FSSelectField from "./fields/FSSelectField.vue";
121
129
  import FSButton from "./FSButton.vue";
122
130
  import FSSpan from "./FSSpan.vue";
123
131
  import FSCol from "./FSCol.vue";
@@ -126,17 +134,13 @@ import FSRow from "./FSRow.vue";
126
134
  export default defineComponent({
127
135
  name: "FSCalendarTwin",
128
136
  components: {
137
+ FSSelectField,
129
138
  FSButton,
130
139
  FSSpan,
131
140
  FSCol,
132
141
  FSRow
133
142
  },
134
143
  props: {
135
- label: {
136
- type: String as PropType<string | null>,
137
- required: false,
138
- default: null
139
- },
140
144
  modelValue: {
141
145
  type: Array as PropType<number[] | null>,
142
146
  required: false,
@@ -167,13 +171,14 @@ export default defineComponent({
167
171
 
168
172
  const colors = computed(() => getColors(props.color));
169
173
  const backgrounds = getColors(ColorEnum.Background);
174
+ const lights = getColors(ColorEnum.Light);
170
175
  const darks = getColors(ColorEnum.Dark);
171
176
 
172
177
  const style = computed((): StyleValue => ({
173
178
  "--fs-calendar-background-color" : backgrounds.base,
174
179
  "--fs-calendar-hover-background-color" : colors.value.light,
175
180
  "--fs-calendar-active-background-color": colors.value.base,
176
- "--fs-calendar-border-color" : darks.base,
181
+ "--fs-calendar-border-color" : lights.dark,
177
182
  "--fs-calendar-hover-border-color" : colors.value.base,
178
183
  "--fs-calendar-active-border-color" : colors.value.base,
179
184
  "--fs-calendar-color" : darks.base,
@@ -259,6 +264,28 @@ export default defineComponent({
259
264
  return classNames;
260
265
  });
261
266
 
267
+ const years = computed((): any[] => {
268
+ const years = [];
269
+ switch (props.limit) {
270
+ case "past":
271
+ for (let i = 1900; i < new Date().getFullYear(); i++) {
272
+ years.push({ label: i.toString(), id: i });
273
+ }
274
+ break;
275
+ case "future":
276
+ for (let i = new Date().getFullYear(); i < 2100; i++) {
277
+ years.push({ label: i.toString(), id: i });
278
+ }
279
+ break;
280
+ default:
281
+ for (let i = 1900; i < 2100; i++) {
282
+ years.push({ label: i.toString(), id: i });
283
+ }
284
+ break;
285
+ }
286
+ return years;
287
+ });
288
+
262
289
  const compare = (operator: "before" | "during" | "after", side: "left" | "right", date: { d: number, m: number, y: number }): boolean => {
263
290
  switch (operator) {
264
291
  case "before":
@@ -359,6 +386,35 @@ export default defineComponent({
359
386
  }
360
387
  };
361
388
 
389
+ const onClickToday = (): void => {
390
+ const today = new Date();
391
+ innerLeftMonth.value = today.getMonth();
392
+ innerLeftYear.value = today.getFullYear();
393
+
394
+ if (innerLeftMonth.value === 11) {
395
+ innerRightMonth.value = 0;
396
+ innerRightYear.value = innerLeftYear.value + 1;
397
+ }
398
+ else {
399
+ innerRightMonth.value = innerLeftMonth.value + 1;
400
+ innerRightYear.value = innerLeftYear.value;
401
+ }
402
+
403
+ today.setHours(0, 0, 0, 0);
404
+ emit("update:modelValue", [pickerToEpoch(today), pickerToEpoch(today)]);
405
+ };
406
+
407
+ const onChangeYear = (value: number): void => {
408
+ if (innerRightYear.value !== innerLeftYear.value) {
409
+ innerLeftYear.value = value;
410
+ innerRightYear.value = value + 1;
411
+ }
412
+ else {
413
+ innerLeftYear.value = value;
414
+ innerRightYear.value = value;
415
+ }
416
+ }
417
+
362
418
  const allowedDates = (value: unknown): boolean => {
363
419
  if (!(value instanceof Date)) {
364
420
  return false;
@@ -411,11 +467,14 @@ export default defineComponent({
411
467
  innerRightMonth,
412
468
  innerRightYear,
413
469
  innerRightValue,
470
+ years,
414
471
  epochToPicker,
415
472
  onClickPrevious,
416
473
  onClickNext,
417
474
  onClickLeft,
418
475
  onClickRight,
476
+ onClickToday,
477
+ onChangeYear,
419
478
  allowedDates
420
479
  };
421
480
  }
@@ -7,8 +7,8 @@
7
7
  :elevation="true"
8
8
  >
9
9
  <FSCol
10
- gap="12px"
11
10
  padding="16px"
11
+ gap="12px"
12
12
  >
13
13
  <FSCalendar
14
14
  v-model="calendarValue"
@@ -127,6 +127,8 @@ export default defineComponent({
127
127
  return props.modelValue === "true";
128
128
  case MagicFieldType.TimeStepField:
129
129
  return JSON.parse(props.modelValue);
130
+ case MagicFieldType.PlotPerField:
131
+ return parseInt(props.modelValue);
130
132
  default:
131
133
  return props.modelValue;
132
134
  }
@@ -147,6 +149,9 @@ export default defineComponent({
147
149
  case MagicFieldType.TimeStepField:
148
150
  emit("update:modelValue", JSON.stringify(value));
149
151
  break;
152
+ case MagicFieldType.PlotPerField:
153
+ emit("update:modelValue", value.toString());
154
+ break;
150
155
  default:
151
156
  emit("update:modelValue", value);
152
157
  break;
@@ -131,6 +131,8 @@ export default defineComponent({
131
131
  return props.modelValue === "true";
132
132
  case MagicFieldType.TimeStepField:
133
133
  return JSON.parse(props.modelValue);
134
+ case MagicFieldType.PlotPerField:
135
+ return parseInt(props.modelValue);
134
136
  default:
135
137
  return props.modelValue;
136
138
  }
@@ -175,6 +177,9 @@ export default defineComponent({
175
177
  case MagicFieldType.TimeStepField:
176
178
  emit("update:modelValue", JSON.stringify(value));
177
179
  break;
180
+ case MagicFieldType.PlotPerField:
181
+ emit("update:modelValue", value.toString());
182
+ break;
178
183
  default:
179
184
  emit("update:modelValue", value);
180
185
  break;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-shared-components",
3
3
  "sideEffects": false,
4
- "version": "1.0.109",
4
+ "version": "1.0.110",
5
5
  "description": "",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -10,8 +10,8 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "@dative-gpi/foundation-shared-domain": "1.0.109",
14
- "@dative-gpi/foundation-shared-services": "1.0.109"
13
+ "@dative-gpi/foundation-shared-domain": "1.0.110",
14
+ "@dative-gpi/foundation-shared-services": "1.0.110"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@dative-gpi/bones-ui": "^1.0.0",
@@ -35,5 +35,5 @@
35
35
  "sass": "1.71.1",
36
36
  "sass-loader": "13.3.2"
37
37
  },
38
- "gitHead": "4c6fede4689135f15a5af1ed120a816c1aed111c"
38
+ "gitHead": "ce27d3542d6a82946127e9004d82ff2f401d7242"
39
39
  }