@dative-gpi/foundation-shared-components 0.0.2

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 (52) hide show
  1. package/components/FSBreadcrumbs.vue +64 -0
  2. package/components/FSButton.vue +82 -0
  3. package/components/FSCheckbox.vue +111 -0
  4. package/components/FSCol.vue +69 -0
  5. package/components/FSFadeOut.vue +67 -0
  6. package/components/FSIcon.vue +30 -0
  7. package/components/FSRadio.vue +118 -0
  8. package/components/FSRadioGroup.vue +75 -0
  9. package/components/FSRow.vue +75 -0
  10. package/components/FSSlideGroup.vue +57 -0
  11. package/components/FSSpan.vue +24 -0
  12. package/components/FSSwitch.vue +112 -0
  13. package/components/FSTab.vue +65 -0
  14. package/components/FSTabs.vue +60 -0
  15. package/components/FSTag.vue +85 -0
  16. package/components/FSTextField.vue +60 -0
  17. package/components/FSWindow.vue +26 -0
  18. package/components/FSWrapGroup.vue +56 -0
  19. package/composables/index.ts +2 -0
  20. package/composables/useColors.ts +64 -0
  21. package/composables/useTouch.ts +9 -0
  22. package/defaults/FSButtons.ts +63 -0
  23. package/importMap.json +59 -0
  24. package/importsGenerator.py +39 -0
  25. package/package.json +23 -0
  26. package/plugins/colorPlugin.ts +13 -0
  27. package/plugins/index.ts +1 -0
  28. package/shims-plugin.d.ts +9 -0
  29. package/styles/components/fs_breadcrumbs.scss +28 -0
  30. package/styles/components/fs_button.scss +28 -0
  31. package/styles/components/fs_checkbox.scss +15 -0
  32. package/styles/components/fs_col.scss +6 -0
  33. package/styles/components/fs_fade_out.scss +27 -0
  34. package/styles/components/fs_icon.scss +17 -0
  35. package/styles/components/fs_radio.scss +15 -0
  36. package/styles/components/fs_row.scss +6 -0
  37. package/styles/components/fs_span.scss +8 -0
  38. package/styles/components/fs_switch.scss +51 -0
  39. package/styles/components/fs_tabs.scss +63 -0
  40. package/styles/components/fs_tag.scss +45 -0
  41. package/styles/components/fs_text_field.scss +24 -0
  42. package/styles/components/fs_wrap_group.scss +12 -0
  43. package/styles/components/index.scss +14 -0
  44. package/styles/globals/breakpoints.scss +13 -0
  45. package/styles/globals/index.scss +6 -0
  46. package/styles/globals/overrides.scss +41 -0
  47. package/styles/globals/scrollbars.scss +45 -0
  48. package/styles/globals/text_fonts.scss +110 -0
  49. package/styles/globals/touchscreen.scss +11 -0
  50. package/styles/main.scss +3 -0
  51. package/themes/default.ts +24 -0
  52. package/themes/index.ts +1 -0
package/importMap.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "components": {
3
+ "FSWindow": {
4
+ "from": "@dative-gpi/foundation-shared-components/components/FSWindow.vue"
5
+ },
6
+ "FSSpan": {
7
+ "from": "@dative-gpi/foundation-shared-components/components/FSSpan.vue"
8
+ },
9
+ "FSSlideGroup": {
10
+ "from": "@dative-gpi/foundation-shared-components/components/FSSlideGroup.vue"
11
+ },
12
+ "FSIcon": {
13
+ "from": "@dative-gpi/foundation-shared-components/components/FSIcon.vue"
14
+ },
15
+ "FSRow": {
16
+ "from": "@dative-gpi/foundation-shared-components/components/FSRow.vue"
17
+ },
18
+ "FSTabs": {
19
+ "from": "@dative-gpi/foundation-shared-components/components/FSTabs.vue"
20
+ },
21
+ "FSWrapGroup": {
22
+ "from": "@dative-gpi/foundation-shared-components/components/FSWrapGroup.vue"
23
+ },
24
+ "FSCol": {
25
+ "from": "@dative-gpi/foundation-shared-components/components/FSCol.vue"
26
+ },
27
+ "FSRadio": {
28
+ "from": "@dative-gpi/foundation-shared-components/components/FSRadio.vue"
29
+ },
30
+ "FSButton": {
31
+ "from": "@dative-gpi/foundation-shared-components/components/FSButton.vue"
32
+ },
33
+ "FSTag": {
34
+ "from": "@dative-gpi/foundation-shared-components/components/FSTag.vue"
35
+ },
36
+ "FSTab": {
37
+ "from": "@dative-gpi/foundation-shared-components/components/FSTab.vue"
38
+ },
39
+ "FSFadeOut": {
40
+ "from": "@dative-gpi/foundation-shared-components/components/FSFadeOut.vue"
41
+ },
42
+ "FSBreadcrumbs": {
43
+ "from": "@dative-gpi/foundation-shared-components/components/FSBreadcrumbs.vue"
44
+ },
45
+ "FSTextField": {
46
+ "from": "@dative-gpi/foundation-shared-components/components/FSTextField.vue"
47
+ },
48
+ "FSRadioGroup": {
49
+ "from": "@dative-gpi/foundation-shared-components/components/FSRadioGroup.vue"
50
+ },
51
+ "FSCheckbox": {
52
+ "from": "@dative-gpi/foundation-shared-components/components/FSCheckbox.vue"
53
+ },
54
+ "FSSwitch": {
55
+ "from": "@dative-gpi/foundation-shared-components/components/FSSwitch.vue"
56
+ }
57
+ },
58
+ "directives": []
59
+ }
@@ -0,0 +1,39 @@
1
+ import os
2
+ import json
3
+
4
+ PROJECT = "@dative-gpi/foundation-shared-components"
5
+
6
+ def find_vue_files(directory):
7
+ """
8
+ Parcourt récursivement le répertoire donné et retourne un dictionnaire de fichiers .vue
9
+ """
10
+ components_dict = {}
11
+
12
+ for root, dirs, files in os.walk(directory):
13
+ for file in files:
14
+ if file.endswith(".vue"):
15
+ # Récupérer le chemin relatif du fichier par rapport au répertoire racine du projet
16
+ full_relative_path = os.path.relpath(os.path.join(root, file), project_root)
17
+
18
+ file_name_without_extension = os.path.splitext(file)[0]
19
+ components_dict[file_name_without_extension] = {
20
+ "from": PROJECT + '/' + full_relative_path
21
+ }
22
+
23
+ return components_dict
24
+
25
+ def main():
26
+ global project_root
27
+ project_root = "." # Vous pouvez remplacer '.' par le chemin absolu ou relatif de votre projet
28
+ components = find_vue_files(os.path.join(project_root, "components"))
29
+
30
+ data = {
31
+ "components": components,
32
+ "directives": []
33
+ }
34
+
35
+ with open("importMap.json", "w", encoding="utf-8") as f:
36
+ json.dump(data, f, ensure_ascii=False, indent=4)
37
+
38
+ if __name__ == "__main__":
39
+ main()
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@dative-gpi/foundation-shared-components",
3
+ "version": "0.0.2",
4
+ "description": "",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "main": "index.ts",
9
+ "author": "",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "@dative-gpi/foundation-shared-domain": "0.0.2",
13
+ "@dative-gpi/foundation-shared-services": "0.0.2",
14
+ "color": "^4.2.3",
15
+ "vue": "^3.2.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/color": "^3.0.6",
19
+ "sass": "^1.69.5",
20
+ "sass-loader": "^13.3.2"
21
+ },
22
+ "gitHead": "44e9629c836e0cd06289b208b53120f07775ea5e"
23
+ }
@@ -0,0 +1,13 @@
1
+ import { DefineComponent, Plugin } from "vue";
2
+ import { useTheme } from "vuetify";
3
+
4
+ import { ColorBase } from "@dative-gpi/foundation-shared-components/themes";
5
+
6
+ export const ColorPlugin: Plugin = {
7
+ install: (app) => {
8
+ app.config.globalProperties.$color = function(this: InstanceType<DefineComponent>, key: ColorBase): string {
9
+ const theme = this.$vuetify ? (this.$vuetify as any).theme.current : useTheme().current.value;
10
+ return theme.colors[key];
11
+ }
12
+ }
13
+ }
@@ -0,0 +1 @@
1
+ export * from "./colorPlugin";
@@ -0,0 +1,9 @@
1
+ import Vue from "vue";
2
+
3
+ import { ColorBase } from "@dative-gpi/foundation-shared-components/themes";
4
+
5
+ declare module "vue" {
6
+ interface ComponentCustomProperties {
7
+ $color: (key: ColorBase) => string;
8
+ }
9
+ }
@@ -0,0 +1,28 @@
1
+ .v-breadcrumbs {
2
+ padding: 0 !important;
3
+ gap: 8px !important;
4
+ }
5
+
6
+ .v-breadcrumbs-item {
7
+ padding: 0 !important;
8
+
9
+ &:last-child > .fs-breadcrumbs-label--disabled {
10
+ @extend .text-button;
11
+
12
+ color: var(--fs-breadcrumbs-light-text) !important;
13
+ }
14
+ }
15
+
16
+ .v-breadcrumbs-divider {
17
+ padding: 0 !important;
18
+ color: var(--fs-breadcrumbs-base-text) !important;
19
+ }
20
+
21
+ .fs-breadcrumbs-label {
22
+ cursor: pointer;
23
+ color: var(--fs-breadcrumbs-base-text) !important;
24
+
25
+ &:hover {
26
+ color: var(--fs-breadcrumbs-dark-text) !important;
27
+ }
28
+ }
@@ -0,0 +1,28 @@
1
+ .fs-button {
2
+ padding: var(--fs-button-padding) !important;
3
+ border-radius: 4px !important;
4
+ box-shadow: none !important;
5
+ border: 1px solid var(--fs-button-base-color) !important;
6
+ background-color: var(--fs-button-light-color) !important;
7
+ color: var(--fs-button-light-text) !important;
8
+
9
+ &:hover {
10
+ background-color: var(--fs-button-base-color) !important;
11
+ color: var(--fs-button-base-text) !important;
12
+ }
13
+
14
+ &:active {
15
+ border-color: var(--fs-button-dark-color) !important;
16
+ background-color: var(--fs-button-dark-color) !important;
17
+ }
18
+
19
+ @include web {
20
+ min-width: 48px !important;
21
+ height: 48px !important;
22
+ }
23
+
24
+ @include mobile {
25
+ min-width: 36px !important;
26
+ height: 36px !important;
27
+ }
28
+ }
@@ -0,0 +1,15 @@
1
+ .fs-checkbox {
2
+ cursor: var(--fs-checkbox-cursor) !important;
3
+ color: var(--fs-checkbox-base-color);
4
+ }
5
+
6
+ .fs-checkbox-label {
7
+ cursor: var(--fs-checkbox-cursor) !important;
8
+ color: var(--fs-checkbox-base-text);
9
+ height: 20px !important;
10
+ user-select: none;
11
+ }
12
+
13
+ .fs-checkbox-description {
14
+ color: var(--fs-checkbox-base-text);
15
+ }
@@ -0,0 +1,6 @@
1
+ .fs-col {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: flex-start;
5
+ gap: var(--fs-col-gap)
6
+ }
@@ -0,0 +1,27 @@
1
+ .fs-fade-out {
2
+ @extend .fs-hide-y-scrollbar;
3
+ }
4
+
5
+ .fs-fade-out-top {
6
+ pointer-events: none;
7
+ position: sticky;
8
+ z-index: 2;
9
+ height: var(--fs-fade-out-top-mask-height);
10
+ width: 100%;
11
+ top: 0;
12
+ left: 0;
13
+ transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
14
+ background: linear-gradient(to top, transparent 0, var(--fs-fade-out-mask-color) var(--fs-fade-out-top-mask-height));
15
+ }
16
+
17
+ .fs-fade-out-bottom {
18
+ pointer-events: none;
19
+ position: sticky;
20
+ z-index: 2;
21
+ height: var(--fs-fade-out-bottom-mask-height);
22
+ width: 100%;
23
+ bottom: 0;
24
+ left: 0;
25
+ transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
26
+ background: linear-gradient(to bottom, transparent 0, var(--fs-fade-out-mask-color) var(--fs-fade-out-bottom-mask-height));
27
+ }
@@ -0,0 +1,17 @@
1
+ .fs-icon-s {
2
+ font-size: 12px !important;
3
+ }
4
+
5
+ .fs-icon-m {
6
+ @include mobile {
7
+ font-size: 18px !important;
8
+ }
9
+
10
+ @include web {
11
+ font-size: 24px !important;
12
+ }
13
+ }
14
+
15
+ .fs-icon-checkbox {
16
+ font-size: 20px !important;
17
+ }
@@ -0,0 +1,15 @@
1
+ .fs-radio {
2
+ cursor: var(--fs-radio-cursor) !important;
3
+ color: var(--fs-radio-base-color) !important;
4
+ }
5
+
6
+ .fs-radio-label {
7
+ cursor: var(--fs-radio-cursor) !important;
8
+ color: var(--fs-radio-base-text);
9
+ height: 20px !important;
10
+ user-select: none;
11
+ }
12
+
13
+ .fs-radio-description {
14
+ color: var(--fs-radio-base-text);
15
+ }
@@ -0,0 +1,6 @@
1
+ .fs-row {
2
+ display: flex;
3
+ align-items: flex-start;
4
+ flex-wrap: var(--fs-row-flex-wrap);
5
+ gap: var(--fs-row-gap);
6
+ }
@@ -0,0 +1,8 @@
1
+ .fs-span {
2
+ height: 100%;
3
+ display: flex;
4
+ align-items: center;
5
+ overflow: hidden;
6
+ white-space: nowrap;
7
+ text-overflow: ellipsis;
8
+ }
@@ -0,0 +1,51 @@
1
+ .fs-switch-size {
2
+ width: 40px !important;
3
+ min-height: 24px !important;
4
+ height: 24px !important;
5
+ }
6
+
7
+ .fs-switch * {
8
+ cursor: var(--fs-switch-cursor) !important;
9
+ }
10
+
11
+ .fs-switch {
12
+ @extend .fs-switch-size;
13
+
14
+ & .v-input__control {
15
+ & .v-selection-control {
16
+ @extend .fs-switch-size;
17
+
18
+ &__wrapper {
19
+ height: 24px !important;
20
+ }
21
+
22
+ &__input {
23
+ transform: translateX(var(--fs-switch-translate-x)) !important;
24
+ height: 24px !important;
25
+ }
26
+ }
27
+ }
28
+ }
29
+
30
+ .fs-switch-label {
31
+ cursor: var(--fs-switch-cursor) !important;
32
+ color: var(--fs-switch-base-text);
33
+ user-select: none;
34
+ }
35
+
36
+ .fs-switch-description {
37
+ color: var(--fs-switch-base-text);
38
+ }
39
+
40
+ .v-switch__track {
41
+ width: 40px !important;
42
+ height: 24px !important;
43
+ background-color: var(--fs-switch-base-color) !important;
44
+
45
+ }
46
+
47
+ .v-switch__thumb {
48
+ width: 16px !important;
49
+ height: 16px !important;
50
+ background-color: var(--fs-switch-base-background) !important;
51
+ }
@@ -0,0 +1,63 @@
1
+ .fs-tabs {
2
+ display: flex !important;
3
+ width: 100% !important;
4
+
5
+ @include web {
6
+ height: 48px !important;
7
+ }
8
+
9
+ @include mobile {
10
+ height: 40px !important;
11
+ }
12
+ }
13
+
14
+ .fs-tab {
15
+ display: flex;
16
+ padding: 0 16px;
17
+ border-bottom: 1px solid var(--fs-group-light-text) !important;
18
+ color: var(--fs-group-light-text) !important;
19
+
20
+ & .fs-tab-label {
21
+ @extend .text-button;
22
+ }
23
+
24
+ &:hover {
25
+ border-bottom: 1px solid var(--fs-group-dark-text) !important;
26
+ color: var(--fs-group-dark-text) !important;
27
+ }
28
+
29
+ @include web {
30
+ height: 48px !important;
31
+ }
32
+
33
+ @include mobile {
34
+ height: 40px !important;
35
+ }
36
+ }
37
+
38
+ .fs-tab-active {
39
+ background-color: var(--fs-group-light-color) !important;
40
+ color: var(--fs-group-dark-text) !important;
41
+ border-bottom: 0 !important;
42
+
43
+ &:hover {
44
+ border-bottom: 0 !important;
45
+ }
46
+ }
47
+
48
+ .fs-tab-tag {
49
+ padding: 0 8px;
50
+ border-radius: 4px;
51
+ background-color: var(--fs-group-base-color);
52
+ color: var(--fs-group-light-color);
53
+
54
+ @include web {
55
+ min-width: 28px;
56
+ height: 28px;
57
+ }
58
+
59
+ @include mobile {
60
+ min-width: 24px;
61
+ height: 24px;
62
+ }
63
+ }
@@ -0,0 +1,45 @@
1
+ .fs-tag {
2
+ padding: 0 8px !important;
3
+ border-radius: 2px !important;
4
+ background-color: var(--fs-tag-light-color) !important;
5
+ color: var(--fs-tag-light-text) !important;
6
+
7
+ @include web {
8
+ height: 28px !important;
9
+ }
10
+
11
+ @include mobile {
12
+ height: 24px !important;
13
+ }
14
+ }
15
+
16
+ .fs-tag-button {
17
+ padding: 0 !important;
18
+ margin: 4px 0 !important;
19
+ border-radius: 2px !important;
20
+ box-shadow: none !important;
21
+ background-color: var(--fs-tag-light-color) !important;
22
+ color: var(--fs-tag-light-text) !important;
23
+
24
+ &:hover {
25
+ background-color: var(--fs-tag-base-color) !important;
26
+ color: var(--fs-tag-base-text) !important;
27
+ }
28
+
29
+ &:active {
30
+ background-color: var(--fs-tag-dark-color) !important;
31
+ color: var(--fs-tag-dark-text) !important;
32
+ }
33
+
34
+ @include web {
35
+ min-width: 20px !important;
36
+ width: 20px !important;
37
+ height: 20px !important;
38
+ }
39
+
40
+ @include mobile {
41
+ min-width: 20px !important;
42
+ width: 20px !important;
43
+ height: 16px !important;
44
+ }
45
+ }
@@ -0,0 +1,24 @@
1
+ .fs-text-field > .v-input__control > .v-field {
2
+ border: 1.3px solid #000000 !important;
3
+ border-radius: 4px !important;
4
+
5
+ & > .v-field__outline {
6
+ display: none;
7
+ }
8
+ }
9
+
10
+ .fs-text-field > .v-input__control > .v-field > .v-field__field > input {
11
+ @extend .text-body;
12
+
13
+ padding: 12px 16px !important;
14
+
15
+ @include web {
16
+ min-height: 44px !important;
17
+ height: 44px !important;
18
+ }
19
+
20
+ @include mobile {
21
+ min-height: 40px !important;
22
+ height: 40px !important;
23
+ }
24
+ }
@@ -0,0 +1,12 @@
1
+
2
+ @include clickscreen {
3
+ .fs-wrap-group {
4
+ & .v-slide-group__container .v-slide-group__content {
5
+ flex: 0 1 auto !important;
6
+
7
+ & .fs-row {
8
+ flex-wrap: wrap !important;
9
+ }
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,14 @@
1
+ @import 'fs_breadcrumbs.scss';
2
+ @import 'fs_button.scss';
3
+ @import 'fs_checkbox.scss';
4
+ @import 'fs_col.scss';
5
+ @import 'fs_fade_out.scss';
6
+ @import 'fs_icon.scss';
7
+ @import 'fs_radio.scss';
8
+ @import 'fs_row.scss';
9
+ @import 'fs_span.scss';
10
+ @import 'fs_switch.scss';
11
+ @import 'fs_tag.scss';
12
+ @import 'fs_tabs.scss';
13
+ @import 'fs_text_field.scss';
14
+ @import 'fs_wrap_group.scss';
@@ -0,0 +1,13 @@
1
+ $mobile-breakpoint: 1264px;
2
+
3
+ @mixin mobile {
4
+ @media only screen and (max-width: $mobile-breakpoint) {
5
+ @content;
6
+ }
7
+ }
8
+
9
+ @mixin web {
10
+ @media screen and (min-width: ($mobile-breakpoint - 1)) {
11
+ @content;
12
+ }
13
+ }
@@ -0,0 +1,6 @@
1
+ // Warning: Imports are loaded in order. If you need to use a variable / property / mixin, import it after the file that defines it
2
+ @import 'breakpoints.scss';
3
+ @import 'text_fonts.scss';
4
+ @import 'touchscreen.scss';
5
+ @import 'scrollbars.scss';
6
+ @import 'overrides.scss';
@@ -0,0 +1,41 @@
1
+ // No default hover effect on buttons
2
+ .v-btn__overlay {
3
+ display: none;
4
+ }
5
+
6
+ // No default hover effect on switches and others
7
+ .v-selection-control__input::before {
8
+ display: none;
9
+ }
10
+
11
+ /***** Applies to all slide groups (FSTabs, FSSlideGroup, FSWrapGroup) *****/
12
+
13
+ // On touchscreen, hide arrows
14
+ // Otherwise show small ones with base text color
15
+ .v-slide-group__prev,
16
+ .v-slide-group__next {
17
+ transition: background-color 0.28s cubic-bezier(0.4, 0, 0.2, 1);
18
+ min-width: 24px !important;
19
+ width: 24px !important;
20
+ flex: 1 1 0 !important;
21
+ color: var(--fs-group-base-text);
22
+
23
+ @include touchscreen {
24
+ display: none !important;
25
+ }
26
+ }
27
+
28
+ // Light background color & dark text color on arrows when hovered
29
+ .v-slide-group__prev:hover,
30
+ .v-slide-group__next:hover {
31
+ background-color: var(--fs-group-light-color);
32
+ color: var(--fs-group-dark-text);
33
+ }
34
+
35
+ // Light text color on arrows when disabled
36
+ .v-slide-group__prev--disabled,
37
+ .v-slide-group__next--disabled {
38
+ color: var(--fs-group-light-text) !important;
39
+ }
40
+
41
+ /***************************************************************************/
@@ -0,0 +1,45 @@
1
+ @property --scrollbar-color {
2
+ syntax: "<color>";
3
+ inherits: true;
4
+ initial-value: #00000000;
5
+ }
6
+
7
+ @include clickscreen {
8
+ .fs-hide-scrollbar {
9
+ transition: --scrollbar-color 0.28s cubic-bezier(0.4, 0, 0.2, 1);
10
+
11
+ &::-webkit-scrollbar {
12
+ width: 8px;
13
+ }
14
+ &::-webkit-scrollbar-thumb {
15
+ background: var(--scrollbar-color);
16
+ border-radius: 4px;
17
+ }
18
+
19
+ &:hover {
20
+ --scrollbar-color: #00000022;
21
+ }
22
+ }
23
+
24
+ .fs-hide-y-scrollbar {
25
+ overflow-y: scroll;
26
+
27
+ @extend .fs-hide-scrollbar;
28
+ }
29
+
30
+ .fs-hide-x-scrollbar {
31
+ overflow-x: scroll;
32
+
33
+ @extend .fs-hide-scrollbar;
34
+ }
35
+ }
36
+
37
+ @include touchscreen {
38
+ .fs-hide-y-scrollbar {
39
+ overflow-y: scroll;
40
+ }
41
+
42
+ .fs-hide-x-scrollbar {
43
+ overflow-x: scroll;
44
+ }
45
+ }