@magicgol/polyjuice 0.4.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,16 @@
1
- import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport'
1
+ import Vue from 'vue';
2
+ import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
3
+ import { library } from '@fortawesome/fontawesome-svg-core';
4
+ import {
5
+ faChevronRight
6
+ } from '@fortawesome/free-solid-svg-icons';
7
+ import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport';
8
+ import SvgIcon from 'vue-svgicon';
9
+ import '../src/assets/svg';
10
+
11
+ library.add(faChevronRight);
12
+ Vue.component('font-awesome-icon', FontAwesomeIcon);
13
+ Vue.use(SvgIcon, { tagName: 'svgicon' });
2
14
 
3
15
  export const parameters = {
4
16
  actions: { argTypesRegex: "^on[A-Z].*" },
@@ -10,6 +22,5 @@ export const parameters = {
10
22
  },
11
23
  viewport: {
12
24
  viewports: INITIAL_VIEWPORTS,
13
- defaultViewport: 'responsive',
14
25
  },
15
26
  }
package/package.json CHANGED
@@ -1,15 +1,19 @@
1
1
  {
2
2
  "name": "@magicgol/polyjuice",
3
- "version": "0.4.0",
3
+ "version": "0.6.1",
4
4
  "scripts": {
5
5
  "serve": "vue-cli-service serve",
6
6
  "build": "vue-cli-service build",
7
7
  "lint": "vue-cli-service lint",
8
8
  "storybook": "start-storybook -p 6006",
9
9
  "build-storybook": "build-storybook",
10
- "chromatic": "npx chromatic --project-token=process.env.CHROMATIC_PROJECT_TOKEN"
10
+ "svg": "vsvg -s ./src/svg -t ./src/assets/svg",
11
+ "chromatic": "npx chromatic --project-token=e18a9d1a4420"
11
12
  },
12
13
  "dependencies": {
14
+ "@fortawesome/fontawesome-svg-core": "^6.1.1",
15
+ "@fortawesome/free-solid-svg-icons": "^6.1.1",
16
+ "@fortawesome/vue-fontawesome": "^2.0.6",
13
17
  "core-js": "^3.6.5",
14
18
  "vue": "^2.6.11"
15
19
  },
@@ -34,6 +38,7 @@
34
38
  "sass-loader": "^10.1.1",
35
39
  "style-loader": "^2.0.0",
36
40
  "vue-loader": "^15.9.8",
41
+ "vue-svgicon": "^3.2.9",
37
42
  "vue-template-compiler": "^2.6.14"
38
43
  },
39
44
  "eslintConfig": {
@@ -1,5 +1,6 @@
1
1
  $palette: (
2
2
  'brand': #d81159,
3
+ 'expertClub': #075169,
3
4
  'warning': #ff614c,
4
5
  'success': #349B50,
5
6
  'info': #004781,
@@ -0,0 +1,2 @@
1
+ /* eslint-disable */
2
+ require('./star-c')
@@ -0,0 +1,10 @@
1
+ /* eslint-disable */
2
+ var icon = require('vue-svgicon')
3
+ icon.register({
4
+ 'star-c': {
5
+ width: 16,
6
+ height: 16,
7
+ viewBox: '0 0 20 20',
8
+ data: '<path pid="0" fill-rule="evenodd" clip-rule="evenodd" d="M10.923 1.22c-.341-.821-1.505-.821-1.846 0L7.06 6.067a1 1 0 01-.844.613L.984 7.1c-.887.07-1.246 1.177-.57 1.756L4.4 12.271a1 1 0 01.323.992L3.505 18.37c-.207.865.734 1.549 1.493 1.085l4.48-2.737a1 1 0 011.043 0l4.48 2.737c.76.464 1.701-.22 1.495-1.085l-1.218-5.107a1 1 0 01.322-.992l3.987-3.415c.675-.579.316-1.685-.57-1.756l-5.234-.42a1 1 0 01-.843-.613L10.923 1.22zM7.46 10.008a3.141 3.141 0 00-.216 1.143c0 .408.075.81.225 1.206.156.39.372.744.648 1.062.282.312.615.564.999.756.39.186.816.279 1.278.279.354 0 .711-.057 1.071-.171.366-.12.693-.291.981-.513.288-.222.495-.489.621-.801l-1.206-.711c-.084.21-.207.381-.369.513a1.585 1.585 0 01-.513.279c-.186.06-.369.09-.549.09-.252 0-.483-.051-.693-.153a1.719 1.719 0 01-.54-.432 1.993 1.993 0 01-.333-.621 2.29 2.29 0 01-.117-.729c0-.228.033-.456.099-.684.066-.228.168-.435.306-.621.138-.186.312-.333.522-.441.21-.114.456-.171.738-.171.174 0 .354.027.54.081.192.048.366.135.522.261.162.126.291.303.387.531l1.134-.792a2.496 2.496 0 00-.99-1.008c-.438-.258-.957-.387-1.557-.387a3.14 3.14 0 00-2.358 1.008 3.246 3.246 0 00-.63 1.026z" _fill="#075169"/>'
9
+ }
10
+ })
@@ -0,0 +1,35 @@
1
+ import MgHCard from './HCard.vue';
2
+
3
+ // More on default export: https://storybook.js.org/docs/vue/writing-stories/introduction#default-export
4
+ export default {
5
+ title: 'Card/HCard',
6
+ component: MgHCard,
7
+ // More on argTypes: https://storybook.js.org/docs/vue/api/argtypes
8
+ argTypes: {
9
+ default: {
10
+ description: "The default Vue slot",
11
+ control: {
12
+ type: 'text',
13
+ },
14
+ table: {
15
+ category: 'Slots',
16
+ type: {
17
+ summary: 'html',
18
+ },
19
+ }
20
+ }
21
+ },
22
+ };
23
+
24
+ // More on component templates: https://storybook.js.org/docs/vue/writing-stories/introduction#using-args
25
+ const Template = (args, { argTypes }) => ({
26
+ props: Object.keys(argTypes),
27
+ components: { MgHCard },
28
+ template: `<mg-h-card @click="$emit('click')" v-bind="$props"><template v-if="${'default' in args}" v-slot>${args.default}</template></mg-h-card>`,
29
+ });
30
+
31
+ export const Default = Template.bind({});
32
+ // More on args: https://storybook.js.org/docs/vue/writing-stories/args
33
+ Default.args = {
34
+ default: '<div>This is a vertical card.</div><div>What do you think about?</div>'
35
+ };
@@ -0,0 +1,54 @@
1
+ <template>
2
+ <div
3
+ class="d-flex justify-content-between align-items-center rounded px-3"
4
+ v-bind:class="classes"
5
+ >
6
+ <div
7
+ class="flex-fill"
8
+ ><slot></slot></div>
9
+ <!-- ARROW -->
10
+ <div
11
+ class="pl-3"
12
+ >
13
+ <font-awesome-icon
14
+ icon="chevron-right"
15
+ class="mg-icon"
16
+ />
17
+ </div>
18
+ <!-- end of ARROW -->
19
+ </div>
20
+ </template>
21
+
22
+ <script>
23
+ export default {
24
+ name: 'mg-h-card',
25
+
26
+ computed: {
27
+ classes() {
28
+ return {
29
+ 'mg-h-card': true,
30
+ };
31
+ }
32
+ },
33
+
34
+ methods: {
35
+ onClick() {
36
+ this.$emit('click');
37
+ },
38
+ },
39
+ };
40
+ </script>
41
+
42
+ <style lang="scss">
43
+ @import '../../../assets/palette';
44
+
45
+ .mg-h-card {
46
+ box-shadow: 0 8px 12px 0 rgba(0, 0, 0, 0.25);
47
+ height: 3.75rem;
48
+
49
+ .mg-icon {
50
+ color: map-get($palette, 'brand');
51
+ cursor: pointer;
52
+ }
53
+ }
54
+ </style>
@@ -0,0 +1,41 @@
1
+ import MgPrimaryClubButton from './PrimaryClubButton.vue';
2
+
3
+ // More on default export: https://storybook.js.org/docs/vue/writing-stories/introduction#default-export
4
+ export default {
5
+ title: 'Club/Button/Primary Button',
6
+ component: MgPrimaryClubButton,
7
+ // More on argTypes: https://storybook.js.org/docs/vue/api/argtypes
8
+ argTypes: {
9
+ default: {
10
+ description: "The default Vue slot",
11
+ control: {
12
+ type: 'text',
13
+ },
14
+ table: {
15
+ category: 'Slots',
16
+ type: {
17
+ summary: 'html',
18
+ },
19
+ }
20
+ }
21
+ },
22
+ };
23
+
24
+ // More on component templates: https://storybook.js.org/docs/vue/writing-stories/introduction#using-args
25
+ const Template = (args, { argTypes }) => ({
26
+ props: Object.keys(argTypes),
27
+ components: { MgPrimaryClubButton },
28
+ template: `<mg-primary-club-button @click="$emit('click')" v-bind="$props"><template v-if="${'default' in args}" v-slot>${args.default}</template></mg-primary-club-button>`,
29
+ });
30
+
31
+ export const Default = Template.bind({});
32
+ // More on args: https://storybook.js.org/docs/vue/writing-stories/args
33
+ Default.args = {
34
+ default: 'primary club button'
35
+ };
36
+
37
+ export const Disabled = Template.bind({});
38
+ Disabled.args = {
39
+ disabled: true,
40
+ default: 'primary club button'
41
+ };
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <button
3
+ type="button"
4
+ class="w-100 rounded justify-content-center align-items-center p-2 border-0 text-white text-uppercase d-flex"
5
+ :class="classes"
6
+ :disabled="disabled"
7
+ @click="$emit('click')"
8
+ >
9
+ <svgicon
10
+ name="star-c"
11
+ color="#fff"
12
+ style="height: 16px"
13
+ ></svgicon>
14
+ <div class="ml-2">
15
+ <slot></slot>
16
+ </div>
17
+ </button>
18
+ </template>
19
+
20
+ <script>
21
+ export default {
22
+ name: 'mg-primary-club-button',
23
+
24
+ props: {
25
+ disabled: {
26
+ type: Boolean,
27
+ default: false,
28
+ },
29
+ },
30
+
31
+ computed: {
32
+ classes() {
33
+ return {
34
+ 'mg-primary-club-button': true,
35
+ 'mg-primary-club-button--disabled': this.disabled,
36
+ };
37
+ }
38
+ },
39
+
40
+ methods: {
41
+ onClick() {
42
+ this.$emit('click');
43
+ },
44
+ },
45
+ };
46
+ </script>
47
+
48
+ <style lang="scss">
49
+ @import '../../../../assets/palette';
50
+
51
+ .mg-primary-club-button {
52
+ appearance: none;
53
+ background-color: map-get($palette, 'expertClub');
54
+ box-shadow: 0 5px 22px rgba(0, 0, 0, 0.3);
55
+ cursor: pointer;
56
+ font-size: 1rem;
57
+ font-family: 'Ubuntu', sans-serif;
58
+ font-weight: 500;
59
+ outline: none;
60
+
61
+ &--disabled {
62
+ opacity: 0.6 !important;
63
+ cursor: not-allowed !important;
64
+ }
65
+ }
66
+ </style>
@@ -62,22 +62,22 @@ export default {
62
62
  cursor: pointer;
63
63
  font-family: 'Ubuntu', sans-serif;
64
64
  font-weight: 500;
65
+ outline: none;
65
66
 
66
- &-size {
67
- &-normal {
68
- font-size: 0.8215rem;
69
- padding: 0.5rem;
70
- }
71
- &-large {
72
- box-shadow: 0 8px 22px 0 rgba(0, 0, 0, 0.3);
73
- font-size: 1rem;
74
- padding: 1rem;
75
- }
76
- }
67
+ &-size {
68
+ &-normal {
69
+ font-size: 0.8215rem;
70
+ padding: 0.5rem;
71
+ }
72
+ &-large {
73
+ font-size: 1rem;
74
+ padding: 1rem;
75
+ }
76
+ }
77
77
 
78
- &--disabled {
79
- opacity: 0.6 !important;
80
- cursor: not-allowed !important;
81
- }
78
+ &--disabled {
79
+ opacity: 0.6 !important;
80
+ cursor: not-allowed !important;
81
+ }
82
82
  }
83
83
  </style>
@@ -46,6 +46,7 @@ export default {
46
46
  font-family: 'Ubuntu', sans-serif;
47
47
  font-size: 0.8215rem;
48
48
  font-weight: 500;
49
+ outline: none;
49
50
 
50
51
  &--disabled {
51
52
  opacity: 0.6 !important;
@@ -44,6 +44,7 @@ export default {
44
44
  font-family: 'Ubuntu', sans-serif;
45
45
  font-size: 0.75rem;
46
46
  font-weight: 500;
47
+ outline: none;
47
48
 
48
49
  &--disabled {
49
50
  opacity: 0.6 !important;
@@ -0,0 +1,49 @@
1
+ import MgToggleButton from './ToggleButton.vue';
2
+
3
+ // More on default export: https://storybook.js.org/docs/vue/writing-stories/introduction#default-export
4
+ export default {
5
+ title: 'Form/Button/Toggle Button',
6
+ component: MgToggleButton,
7
+ // More on argTypes: https://storybook.js.org/docs/vue/api/argtypes
8
+ argTypes: {
9
+ default: {
10
+ description: "The default Vue slot",
11
+ control: {
12
+ type: 'text',
13
+ },
14
+ table: {
15
+ category: 'Slots',
16
+ type: {
17
+ summary: 'html',
18
+ },
19
+ }
20
+ }
21
+ },
22
+ };
23
+
24
+ // More on component templates: https://storybook.js.org/docs/vue/writing-stories/introduction#using-args
25
+ const Template = (args, { argTypes }) => ({
26
+ props: Object.keys(argTypes),
27
+ components: { MgToggleButton },
28
+ template: `<mg-toggle-button @click="$emit('click')" v-bind="$props"><template v-if="${'default' in args}" v-slot>${args.default}</template><template v-if="${'content' in args}" v-slot:content>${args.content}</template></mg-toggle-button>`,
29
+ });
30
+
31
+ export const Default = Template.bind({});
32
+ // More on args: https://storybook.js.org/docs/vue/writing-stories/args
33
+ Default.args = {
34
+ value: false,
35
+ default: 'toggle button'
36
+ };
37
+
38
+ export const Clicked = Template.bind({});
39
+ Clicked.args = {
40
+ value: true,
41
+ default: 'toggle button'
42
+ };
43
+
44
+ export const Content = Template.bind({});
45
+ Content.args = {
46
+ value: true,
47
+ default: 'toggle button',
48
+ content: 'il contenuto extra è visualizzato qui'
49
+ };
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <div class="border rounded">
3
+ <label
4
+ class="d-block w-100 m-0 p-2 rounded text-uppercase text-center text-decoration-none"
5
+ for="toggle-button"
6
+ :class="classes"
7
+ >
8
+ <input
9
+ type="checkbox"
10
+ id="toggle-button"
11
+ class="d-none"
12
+ :name="name"
13
+ :value="value"
14
+ @change="$emit('input', !value)"
15
+ />
16
+ <span><slot></slot></span>
17
+ </label>
18
+ <div
19
+ v-if="contentSlotVisibility"
20
+ class="p-2"
21
+ ><slot name="content"></slot></div>
22
+ </div>
23
+ </template>
24
+
25
+ <script>
26
+ export default {
27
+ name: 'mg-toggle-button',
28
+
29
+ props: {
30
+ name: {
31
+ type: String
32
+ },
33
+ value: {
34
+ type: Boolean,
35
+ default: false
36
+ }
37
+ },
38
+
39
+ computed: {
40
+ classes() {
41
+ return {
42
+ 'mg-toggle-button': true,
43
+ 'mg-toggle-button--on': this.value === true
44
+ };
45
+ },
46
+ contentSlotVisibility() {
47
+ return this.$slots['content'] && this.value === true
48
+ }
49
+ },
50
+
51
+ methods: {
52
+ onClick() {
53
+ this.$emit('click');
54
+ },
55
+ },
56
+ };
57
+ </script>
58
+
59
+ <style lang="scss">
60
+ @import '../../../assets/palette';
61
+
62
+ .mg-toggle-button {
63
+ appearance: none;
64
+ background-color: #f7f7f7;
65
+ color: map-get($palette, 'brand');
66
+ cursor: pointer;
67
+ font-family: 'Ubuntu', sans-serif;
68
+ font-size: 0.8215rem;
69
+ font-weight: 500;
70
+ outline: none;
71
+
72
+ &--on {
73
+ background-color: #fff !important;
74
+ }
75
+ }
76
+ </style>
@@ -0,0 +1,43 @@
1
+ import MgTabButton from './TabButton.vue';
2
+
3
+ // More on default export: https://storybook.js.org/docs/vue/writing-stories/introduction#default-export
4
+ export default {
5
+ title: 'Navigation/Tab Button',
6
+ component: MgTabButton,
7
+ // More on argTypes: https://storybook.js.org/docs/vue/api/argtypes
8
+ argTypes: {
9
+ default: {
10
+ description: "The default Vue slot",
11
+ control: {
12
+ type: 'text',
13
+ },
14
+ table: {
15
+ category: 'Slots',
16
+ type: {
17
+ summary: 'html',
18
+ },
19
+ }
20
+ }
21
+ },
22
+ };
23
+
24
+ // More on component templates: https://storybook.js.org/docs/vue/writing-stories/introduction#using-args
25
+ const Template = (args, { argTypes }) => ({
26
+ props: Object.keys(argTypes),
27
+ components: { MgTabButton },
28
+ template: `<mg-tab-button @click="$emit('click')" v-bind="$props"><template v-if="${'default' in args}" v-slot>${args.default}</template></mg-tab-button>`,
29
+ });
30
+
31
+ export const Default = Template.bind({});
32
+ // More on args: https://storybook.js.org/docs/vue/writing-stories/args
33
+ Default.args = {
34
+ active: false,
35
+ default: 'tab button'
36
+ };
37
+
38
+ export const Active = Template.bind({});
39
+ // More on args: https://storybook.js.org/docs/vue/writing-stories/args
40
+ Active.args = {
41
+ active: true,
42
+ default: 'tab button'
43
+ };
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div
3
+ class="d-inline-flex text-center text-decoration-none rounded"
4
+ :class="classes"
5
+ :active="active"
6
+ >
7
+ <slot></slot>
8
+ </div>
9
+ </template>
10
+
11
+ <script>
12
+ export default {
13
+ name: 'mg-tab-button',
14
+
15
+ props: {
16
+ active: {
17
+ type: Boolean,
18
+ default: false
19
+ },
20
+ },
21
+
22
+ computed: {
23
+ classes() {
24
+ return {
25
+ 'mg-tab-button': true,
26
+ 'mg-tab-button--active': this.active === true,
27
+ };
28
+ }
29
+ },
30
+ };
31
+ </script>
32
+
33
+ <style lang="scss">
34
+ @import '../../../assets/palette';
35
+
36
+ .mg-tab-button {
37
+ appearance: none;
38
+ background-color: #efefef;
39
+ border: 1px solid;
40
+ border-color: #efefef;
41
+ color: #666666;
42
+ cursor: pointer;
43
+ font-family: 'Ubuntu', sans-serif;
44
+ font-size: 1rem;
45
+ font-weight: 500;
46
+ padding: 0.4375rem 0.75rem;
47
+
48
+ &--active {
49
+ background-color: rgba(map-get($palette, 'brand'), 0.05);
50
+ border-color: map-get($palette, 'brand');
51
+ color: map-get($palette, 'brand');
52
+ cursor: default !important;
53
+ }
54
+ }
55
+ </style>
@@ -6,7 +6,7 @@ import {ColorItem, ColorPalette, Meta} from '@storybook/addon-docs';
6
6
  <ColorItem
7
7
  title="Warning"
8
8
  subtitle="Used for error messages"
9
- colors={{Persimmon: '#ff614c'}}
9
+ colors={{'Persimmon': '#ff614c'}}
10
10
  />
11
11
  <ColorItem
12
12
  title="Success"
@@ -5,6 +5,10 @@ import {ColorItem, ColorPalette, Meta} from '@storybook/addon-docs';
5
5
  <ColorPalette>
6
6
  <ColorItem
7
7
  title="Brand Color"
8
- colors={{Razzmatazz: '#d81159'}}
8
+ colors={{'Razzmatazz': '#d81159'}}
9
+ />
10
+ <ColorItem
11
+ title="Expert Club Color"
12
+ colors={{'Teal Blue': '#075169'}}
9
13
  />
10
14
  </ColorPalette>
@@ -5,15 +5,15 @@ import {ColorItem, ColorPalette, Meta} from '@storybook/addon-docs';
5
5
  <ColorPalette>
6
6
  <ColorItem
7
7
  title="Goalkeeper"
8
- colors={{Supernova: '#ffc700'}}
8
+ colors={{'Supernova': '#ffc700'}}
9
9
  />
10
10
  <ColorItem
11
11
  title="Defender"
12
- colors={{Harlequin: '#3de000'}}
12
+ colors={{'Harlequin': '#3de000'}}
13
13
  />
14
14
  <ColorItem
15
15
  title="Midfielder"
16
- colors={{Denim: '#116dd8'}}
16
+ colors={{'Denim': '#116dd8'}}
17
17
  />
18
18
  <ColorItem
19
19
  title="Forward"
package/src/main.js CHANGED
@@ -1,13 +1,28 @@
1
- import Vue from 'vue'
2
- import App from './App.vue'
1
+ import Vue from 'vue';
2
+ import App from './App.vue';
3
+ import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
4
+ import { library } from '@fortawesome/fontawesome-svg-core';
5
+ import {
6
+ faChevronRight
7
+ } from '@fortawesome/free-solid-svg-icons';
8
+ import SvgIcon from 'vue-svgicon';
9
+ import './assets/svg';
3
10
 
4
- Vue.config.productionTip = false
11
+ library.add(faChevronRight);
12
+ Vue.component('font-awesome-icon', FontAwesomeIcon);
13
+ Vue.use(SvgIcon, { tagName: 'svgicon' });
14
+
15
+ Vue.config.productionTip = false;
5
16
 
6
17
  new Vue({
7
18
  render: h => h(App),
8
19
  }).$mount('#app')
9
20
 
21
+ export MgHCard from './components/card/horizontal-card/HCard';
10
22
  export MgVCard from './components/card/vertical-card/VCard';
23
+ export MgPrimaryClubButton from './components/club/button/primary-club-button/PrimaryClubButton';
11
24
  export MgPrimaryButton from './components/form/primary-button/PrimaryButton';
12
25
  export MgSecondaryButton from './components/form/secondary-button/SecondaryButton';
13
26
  export MgTertiaryButton from './components/form/tertiary-button/TertiaryButton';
27
+ export MgToggleButton from './components/form/toggle-button/ToggleButton';
28
+ export MgTabButton from './components/navigation/tab-button/TabButton';
@@ -0,0 +1,3 @@
1
+ <svg viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M10.9234 1.21997C10.5818 0.398681 9.41836 0.39868 9.07676 1.21997L7.06061 6.06739C6.9166 6.41363 6.59099 6.6502 6.2172 6.68016L0.984003 7.09971C0.097349 7.17079 -0.262179 8.2773 0.413358 8.85597L4.4005 12.2714C4.68529 12.5153 4.80966 12.8981 4.72266 13.2629L3.50452 18.3696C3.29813 19.2348 4.23938 19.9187 4.99848 19.455L9.47883 16.7184C9.79884 16.523 10.2013 16.523 10.5213 16.7184L15.0017 19.455C15.7608 19.9187 16.702 19.2348 16.4956 18.3696L15.2775 13.2629C15.1905 12.8981 15.3149 12.5153 15.5997 12.2714L19.5868 8.85597C20.2623 8.2773 19.9028 7.17079 19.0162 7.09971L13.783 6.68016C13.4092 6.6502 13.0836 6.41363 12.9396 6.06739L10.9234 1.21997ZM7.459 10.008C7.315 10.38 7.243 10.761 7.243 11.151C7.243 11.559 7.318 11.961 7.468 12.357C7.624 12.747 7.84 13.101 8.116 13.419C8.398 13.731 8.731 13.983 9.115 14.175C9.505 14.361 9.931 14.454 10.393 14.454C10.747 14.454 11.104 14.397 11.464 14.283C11.83 14.163 12.157 13.992 12.445 13.77C12.733 13.548 12.94 13.281 13.066 12.969L11.86 12.258C11.776 12.468 11.653 12.639 11.491 12.771C11.335 12.897 11.164 12.99 10.978 13.05C10.792 13.11 10.609 13.14 10.429 13.14C10.177 13.14 9.946 13.089 9.736 12.987C9.526 12.879 9.346 12.735 9.196 12.555C9.052 12.375 8.941 12.168 8.863 11.934C8.785 11.7 8.746 11.457 8.746 11.205C8.746 10.977 8.779 10.749 8.845 10.521C8.911 10.293 9.013 10.086 9.151 9.90005C9.289 9.71404 9.463 9.56705 9.673 9.45905C9.883 9.34505 10.129 9.28804 10.411 9.28804C10.585 9.28804 10.765 9.31504 10.951 9.36905C11.143 9.41704 11.317 9.50404 11.473 9.63004C11.635 9.75604 11.764 9.93304 11.86 10.161L12.994 9.36905C12.778 8.95504 12.448 8.61905 12.004 8.36104C11.566 8.10304 11.047 7.97404 10.447 7.97404C9.943 7.97404 9.493 8.06704 9.097 8.25304C8.701 8.43304 8.365 8.67604 8.089 8.98204C7.813 9.28804 7.603 9.63004 7.459 10.008Z" fill="#075169"/>
3
+ </svg>