@bildvitta/quasar-ui-asteroid 3.6.0-beta.0 → 3.6.0-beta.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 (53) hide show
  1. package/package.json +3 -3
  2. package/src/assets/big-shoes-hero.svg +1 -0
  3. package/src/assets/big-shoes-sitting-on-rock.svg +1 -0
  4. package/src/assets/big-shoes-walking-the-dog.svg +1 -0
  5. package/src/components/actions/QasActions.vue +1 -1
  6. package/src/components/actions-menu/QasActionsMenu.vue +5 -3
  7. package/src/components/alert/QasAlert.vue +1 -1
  8. package/src/components/app-bar/QasAppBar.vue +1 -1
  9. package/src/components/app-menu/QasAppMenu.vue +1 -1
  10. package/src/components/badge/QasBadge.vue +7 -1
  11. package/src/components/btn/QasBtn.vue +87 -2
  12. package/src/components/btn/QasBtn.yml +18 -0
  13. package/src/components/card/QasCard.vue +1 -1
  14. package/src/components/copy/QasCopy.vue +1 -6
  15. package/src/components/copy/QasCopy.yml +0 -6
  16. package/src/components/date-time-input/QasDateTimeInput.vue +2 -2
  17. package/src/components/delete/QasDelete.vue +14 -1
  18. package/src/components/dialog/QasDialog.vue +4 -4
  19. package/src/components/filters/QasFilters.vue +5 -5
  20. package/src/components/form-view/QasFormView.vue +22 -20
  21. package/src/components/gallery/QasGallery.vue +2 -4
  22. package/src/components/gallery/private/PvGalleryCarouselDialog.vue +33 -16
  23. package/src/components/list-items/QasListItems.vue +4 -6
  24. package/src/components/list-items/QasListItems.yml +4 -4
  25. package/src/components/list-view/QasListView.vue +1 -1
  26. package/src/components/nested-fields/QasNestedFields.vue +9 -10
  27. package/src/components/pagination/QasPagination.vue +36 -3
  28. package/src/components/search-box/QasSearchBox.vue +2 -2
  29. package/src/components/select-list/QasSelectList.vue +3 -6
  30. package/src/components/signature-pad/QasSignaturePad.vue +1 -1
  31. package/src/components/signature-uploader/QasSignatureUploader.vue +1 -1
  32. package/src/components/text-truncate/QasTextTruncate.vue +8 -1
  33. package/src/components/transfer/QasTransfer.vue +2 -2
  34. package/src/components/tree-generator/QasTreeGenerator.vue +2 -1
  35. package/src/components/uploader/QasUploader.vue +7 -5
  36. package/src/components/welcome/QasWelcome.vue +2 -2
  37. package/src/css/components/button.scss +101 -0
  38. package/src/css/components/index.scss +1 -0
  39. package/src/css/mixins/index.scss +1 -0
  40. package/src/css/mixins/set-button.scss +16 -0
  41. package/src/css/plugins/notify.scss +21 -0
  42. package/src/css/variables/button.scss +2 -1
  43. package/src/css/variables/spacing.scss +40 -27
  44. package/src/mixins/view.js +1 -1
  45. package/src/pages/ErrorComponent.vue +33 -14
  46. package/src/pages/Forbidden.vue +2 -1
  47. package/src/pages/NotFound.vue +2 -1
  48. package/src/pages/ServerError.vue +6 -2
  49. package/src/pages/Unauthorized.vue +3 -2
  50. package/src/plugins/notify-error/NotifyError.js +2 -1
  51. package/src/plugins/notify-success/NotifySuccess.js +2 -1
  52. package/src/vue-plugin.js +2 -2
  53. package/src/assets/gear.svg +0 -27
@@ -2,6 +2,27 @@
2
2
  margin-top: 80px;
3
3
  max-width: 560px;
4
4
 
5
+ &.qas-notification {
6
+ &--error::before,
7
+ &--success::before {
8
+ border-radius: var(--qas-generic-border-radius) 0 0 var(--qas-generic-border-radius);
9
+ bottom: 0;
10
+ content: '';
11
+ left: calc(var(--qas-spacing-md) * -1);
12
+ position: relative;
13
+ top: 0;
14
+ width: 4px;
15
+ }
16
+
17
+ &--error::before {
18
+ background-color: var(--q-negative);
19
+ }
20
+
21
+ &--success::before {
22
+ background-color: var(--q-positive);
23
+ }
24
+ }
25
+
5
26
  &__content {
6
27
  .q-icon {
7
28
  margin-right: var(--qas-spacing-sm);
@@ -1,3 +1,4 @@
1
1
  $button-font-size: 1rem;
2
- $button-line-height: 1.5rem;
2
+ $button-line-height: 16px;
3
3
  $button-font-weight: 600;
4
+ $button-border-radius: 32px;
@@ -1,11 +1,8 @@
1
1
  @use 'sass:map';
2
2
 
3
- /*
4
- * O único valor que de fato é alterado diferente do padrão do Quasar é o tamanho "lg"
5
- */
6
3
  $space-base : 16px;
7
- $space-x-base : $space-base;
8
- $space-y-base : $space-base;
4
+ $space-x-base : $space-base; // 16px
5
+ $space-y-base : $space-base; // 16px
9
6
 
10
7
  $space-none : (
11
8
  x: 0,
@@ -13,38 +10,50 @@ $space-none : (
13
10
  );
14
11
 
15
12
  $space-xs: (
16
- x: ($space-x-base * 0.25),
17
- y: ($space-y-base * 0.25)
13
+ x: ($space-x-base * 0.25), // 4px
14
+ y: ($space-y-base * 0.25) // 4px
18
15
  );
19
16
 
20
17
  $space-sm: (
21
- x: ($space-x-base * 0.5),
22
- y: ($space-y-base * 0.5)
18
+ x: ($space-x-base * 0.5), // 8px
19
+ y: ($space-y-base * 0.5) // 8px
23
20
  );
24
21
 
25
22
  $space-md: (
26
- x: $space-x-base,
27
- y: $space-y-base
23
+ x: $space-x-base, // 16px
24
+ y: $space-y-base // 16px
28
25
  );
29
26
 
30
27
  $space-lg: (
31
- x: ($space-x-base * 1.5),
32
- y: ($space-y-base * 1.5)
28
+ x: ($space-x-base * 1.5), // 24px
29
+ y: ($space-y-base * 1.5) // 24px
33
30
  );
34
31
 
35
32
  // O tamanho original seria "16px * 3" ou "48px", alterado para ter "32px"
36
33
  $space-xl: (
37
- x: ($space-x-base * 2),
38
- y: ($space-y-base * 2)
34
+ x: ($space-x-base * 2), // 32px
35
+ y: ($space-y-base * 2) // 32px
36
+ );
37
+
38
+ $space-2xl: (
39
+ x: ($space-x-base * 2.5), // 40px
40
+ y: ($space-y-base * 2.5) // 40px
41
+ );
42
+
43
+ $space-3xl: (
44
+ x: ($space-x-base * 3), // 48px
45
+ y: ($space-y-base * 3) // 48px
39
46
  );
40
47
 
41
48
  $spaces: (
42
- none: $space-none,
43
- xs: $space-xs,
44
- sm: $space-sm,
45
- md: $space-md,
46
- lg: $space-lg,
47
- xl: $space-xl
49
+ none: $space-none, // 0px
50
+ xs: $space-xs, // 4px
51
+ sm: $space-sm, // 8px
52
+ md: $space-md, // 16px
53
+ lg: $space-lg, // 24px
54
+ xl: $space-xl, // 32px
55
+ 2xl: $space-2xl, // 40px
56
+ 3xl: $space-3xl // 48px
48
57
  );
49
58
 
50
59
  $flex-gutter-xs : map.get($space-xs, 'x');
@@ -52,14 +61,18 @@ $flex-gutter-sm : map.get($space-sm, 'x');
52
61
  $flex-gutter-md : map.get($space-md, 'x');
53
62
  $flex-gutter-lg : map.get($space-lg, 'x');
54
63
  $flex-gutter-xl : map.get($space-xl, 'x');
64
+ $flex-gutter-2xl : map.get($space-2xl, 'x');
65
+ $flex-gutter-3xl : map.get($space-3xl, 'x');
55
66
 
56
67
  $flex-gutter: (
57
- none: 0,
58
- xs: $flex-gutter-xs,
59
- sm: $flex-gutter-sm,
60
- md: $flex-gutter-md,
61
- lg: $flex-gutter-lg,
62
- xl: $flex-gutter-xl
68
+ none: 0, // 0px
69
+ xs: $flex-gutter-xs, // 4px
70
+ sm: $flex-gutter-sm, // 8px
71
+ md: $flex-gutter-md, // 16px
72
+ lg: $flex-gutter-lg, // 24px
73
+ xl: $flex-gutter-xl, // 32px
74
+ 2xl: $flex-gutter-2xl, // 48px
75
+ 3xl: $flex-gutter-3xl // 40px
63
76
  );
64
77
 
65
78
  :root {
@@ -96,7 +96,7 @@ export default {
96
96
 
97
97
  const redirect = status >= 500
98
98
  ? 'ServerError'
99
- : ({ 401: 'Unauthorized', 403: 'Forbidden', 404: 'NotFound' })[status]
99
+ : ({ 403: 'Forbidden', 404: 'NotFound' })[status]
100
100
 
101
101
  // caso exista um desses status será redirecionado sem aparecer o "notify"
102
102
  if (redirect) {
@@ -1,11 +1,17 @@
1
1
  <template>
2
- <div class="column error-component items-center justify-around q-px-xl">
3
- <div class="column full-width items-center justify-center q-gutter-md q-py-md row">
4
- <q-img src="../assets/gear.svg" :width="gearSize" />
5
- <div class="text-bold text-h1 text-primary">{{ code }}</div>
6
- <div class="text-bold text-center text-grey-9 text-h6">{{ title }}</div>
7
- <div v-if="subtitle" class="text-bold text-center text-grey-9 text-subtitle2">{{ subtitle }}</div>
8
- <qas-btn v-if="hasButtonProps" class="text-bold text-primary" v-bind="buttonProps" />
2
+ <div class="container error-component flex">
3
+ <div class="column full-width items-center justify-center row">
4
+ <h2 :aria-label="ariaLabelCode" class="q-mb-sm text-grey-9 text-h2" role="heading">
5
+ {{ code }}
6
+ </h2>
7
+
8
+ <div class="q-mb-2xl text-body1 text-center text-grey-8">
9
+ <qas-breakline :text="description" />
10
+ </div>
11
+
12
+ <q-img alt="ilustração do código de erro" class="error-component__image" :src="imagePath" />
13
+
14
+ <qas-btn v-if="hasButtonProps" class="q-mt-xl" v-bind="buttonProps" color="primary" icon="sym_r_chevron_left" variant="tertiary" />
9
15
  </div>
10
16
  </div>
11
17
  </template>
@@ -25,24 +31,24 @@ export default {
25
31
  required: true
26
32
  },
27
33
 
28
- subtitle: {
34
+ description: {
29
35
  type: String,
30
36
  default: ''
31
37
  },
32
38
 
33
- title: {
39
+ imagePath: {
34
40
  type: String,
35
- required: true
41
+ default: ''
36
42
  }
37
43
  },
38
44
 
39
45
  computed: {
40
- gearSize () {
41
- return this.$qas.screen.isSmall ? '90px' : '160px'
42
- },
43
-
44
46
  hasButtonProps () {
45
47
  return !!Object.keys(this.buttonProps).length
48
+ },
49
+
50
+ ariaLabelCode () {
51
+ return `Código de erro ${this.code}`
46
52
  }
47
53
  }
48
54
  }
@@ -52,5 +58,18 @@ export default {
52
58
  .error-component {
53
59
  background-color: var(--qas-background-color);
54
60
  min-height: 100vh;
61
+ padding: var(--qas-spacing-3xl) 0;
62
+
63
+ &__image {
64
+ width: 300px;
65
+ }
66
+
67
+ @media (max-width: $breakpoint-xs) {
68
+ padding: var(--qas-spacing-xl) 0;
69
+
70
+ &__image {
71
+ width: 265px;
72
+ }
73
+ }
55
74
  }
56
75
  </style>
@@ -16,7 +16,8 @@ export default {
16
16
  errorProps () {
17
17
  return {
18
18
  code: '403',
19
- title: 'Ops, parece que você não tem acesso para este recurso!',
19
+ description: 'Parece que você não tem permissão para acessar esta página. \n Sugerimos que entre em contato com o administrador.',
20
+ imagePath: require('../assets/big-shoes-walking-the-dog.svg'),
20
21
  buttonProps: {
21
22
  to: { path: '/' },
22
23
  label: 'Voltar ao início'
@@ -16,7 +16,8 @@ export default {
16
16
  errorProps () {
17
17
  return {
18
18
  code: '404',
19
- title: 'Ops! Parece que a página que está tentando acessar não existe!',
19
+ description: 'A página que você está tentando acessar está indisponível ou não existe.',
20
+ imagePath: require('../assets/big-shoes-hero.svg'),
20
21
  buttonProps: {
21
22
  to: { path: '/' },
22
23
  label: 'Voltar ao início'
@@ -16,8 +16,12 @@ export default {
16
16
  errorProps () {
17
17
  return {
18
18
  code: '500',
19
- title: 'Ops, ocorreu um erro interno no nosso servidor!',
20
- subtitle: 'Tente novamente em alguns instantes.'
19
+ description: 'Ops... O sistema está passando por uma instabilidade. \n Já identificamos o problema e estamos trabalhando na solução.',
20
+ imagePath: require('../assets/big-shoes-sitting-on-rock.svg'),
21
+ buttonProps: {
22
+ to: { path: '/' },
23
+ label: 'Voltar ao início'
24
+ }
21
25
  }
22
26
  }
23
27
  }
@@ -16,10 +16,11 @@ export default {
16
16
  errorProps () {
17
17
  return {
18
18
  code: '401',
19
- title: 'Ops! Parece que você está sem acesso ao sistema!',
19
+ description: 'Ops... Parece que você foi desconectado do sistema. \n Por favor, entre na sua conta novamente.',
20
+ imagePath: require('../assets/big-shoes-walking-the-dog.svg'),
20
21
  buttonProps: {
21
22
  to: { path: '/auth/login' },
22
- label: 'Fazer login'
23
+ label: 'Entrar novamente'
23
24
  }
24
25
  }
25
26
  }
@@ -1,11 +1,12 @@
1
1
  import { Notify } from 'quasar'
2
2
  import notifyConfig from '../../shared/notify-config.js'
3
3
 
4
- Notify.registerType('error', { icon: 'sym_r_cancel', ...notifyConfig })
4
+ Notify.registerType('error', notifyConfig)
5
5
 
6
6
  export default (message, caption) => {
7
7
  Notify.create({
8
8
  caption,
9
+ classes: 'qas-notification--error',
9
10
  message,
10
11
  type: 'error'
11
12
  })
@@ -1,11 +1,12 @@
1
1
  import { Notify } from 'quasar'
2
2
  import notifyConfig from '../../shared/notify-config.js'
3
3
 
4
- Notify.registerType('success', { icon: 'sym_r_check_circle', ...notifyConfig })
4
+ Notify.registerType('success', notifyConfig)
5
5
 
6
6
  export default (message, caption) => {
7
7
  Notify.create({
8
8
  caption,
9
+ classes: 'qas-notification--success',
9
10
  message,
10
11
  type: 'success'
11
12
  })
package/src/vue-plugin.js CHANGED
@@ -56,7 +56,7 @@ import QasUploader from './components/uploader/QasUploader.vue'
56
56
  import QasWelcome from './components/welcome/QasWelcome.vue'
57
57
 
58
58
  import VueGoogleMaps from '@fawmi/vue-google-maps'
59
- import { Notify, Quasar, Dialog as QuasarDialog } from 'quasar'
59
+ import { Notify, Loading, Quasar, Dialog as QuasarDialog } from 'quasar'
60
60
 
61
61
  // Plugins
62
62
  import {
@@ -132,7 +132,7 @@ function install (app) {
132
132
  app.component('QasUploader', QasUploader)
133
133
  app.component('QasWelcome', QasWelcome)
134
134
 
135
- app.use(Quasar, { plugins: { Notify, QuasarDialog, Dialog } })
135
+ app.use(Quasar, { plugins: { Notify, Loading, QuasarDialog, Dialog } })
136
136
 
137
137
  if (process.env.MAPS_API_KEY) {
138
138
  app.use(VueGoogleMaps, { load: { key: process.env.MAPS_API_KEY, libraries: 'places' } })
@@ -1,27 +0,0 @@
1
- <?xml version='1.0' encoding='utf-8'?>
2
- <svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 100 100">
3
- <g>
4
- <path id="small" fill="#424242" d="m86.6 10.3v-0.1c-1.5-2-3.3-3.7-5.4-5.3v0.1c-1.7 1.3-3.4 2.7-5 4.1-0.7-0.4-1.3-0.7-1.9-1-0.8-0.4-1.6-0.8-2.5-1-0.3-0.1-0.6-0.2-0.9-0.2-0.2-2.2-0.4-4.4-0.7-6.6-1-0.2-2-0.2-3.1-0.3h-1.6c-1 0.1-1.9 0.1-2.8 0.3-0.3 2.1-0.5 4.3-0.6 6.5-0.4 0-0.7 0.1-1.1 0.2-0.1 0-0.2 0-0.3 0.1-0.8 0.2-1.6 0.6-2.4 1-0.7 0.3-1.3 0.6-1.9 1-1.7-1.4-3.3-2.7-5-4.1l-0.1-0.1c-0.4 0.3-0.8 0.6-1.1 0.9-0.7 0.5-1.3 1.1-1.8 1.7-0.9 0.8-1.6 1.8-2.4 2.8h0.1c1.3 1.7 2.7 3.3 4.1 5-0.4 0.6-0.8 1.3-1.1 1.9-0.4 0.8-0.7 1.7-0.9 2.5-0.2 0.4-0.3 0.8-0.3 1.1-2.2 0.2-4.4 0.4-6.5 0.7-0.2 1-0.3 2-0.3 3.1 0 1.5 0.1 3 0.4 4.4 2.1 0.2 4.2 0.4 6.4 0.6 0 0.4 0.1 0.8 0.3 1.1 0.2 0.9 0.5 1.7 0.9 2.6 0.4 0.7 0.7 1.4 1.2 2-1.4 1.7-2.8 3.3-4.1 5 1.5 2.1 3.3 3.9 5.4 5.4v-0.1c1.6-1.3 3.3-2.7 4.9-4.1h0.1c0.5 0.3 1.1 0.6 1.6 0.9 0.9 0.4 1.9 0.8 2.8 1 0.4 0.1 0.7 0.2 1 0.3 0.2 2.1 0.4 4.3 0.7 6.5 0.9 0.1 1.8 0.2 2.8 0.2h1.5c1.1 0 2.2-0.1 3.3-0.3 0.2-2.1 0.4-4.3 0.6-6.5 0.3-0.1 0.6-0.2 0.9-0.3 0.9-0.2 1.7-0.5 2.5-0.9 0.7-0.3 1.4-0.7 2.1-1.2 0 0.1 0 0.1 0.1 0.1 1.6 1.4 3.3 2.8 5 4.1 0.3-0.2 0.6-0.4 1-0.7 0.6-0.5 1.2-1.1 1.7-1.7 0.9-0.9 1.8-1.9 2.6-3-1.4-1.7-2.8-3.4-4.2-5v-0.1c0.3-0.5 0.6-1.1 0.9-1.7 0.3-0.8 0.7-1.6 0.9-2.4 0-0.1 0-0.2 0.1-0.2 0-0.4 0.1-0.7 0.2-0.9 2.2-0.2 4.4-0.4 6.5-0.6 0.2-1 0.2-2 0.3-3v-1.7c-0.1-1-0.1-2-0.3-3-2.1-0.2-4.3-0.4-6.5-0.6-0.1-0.3-0.2-0.6-0.2-0.9-0.3-0.9-0.6-1.8-1-2.7-0.3-0.6-0.7-1.3-1-1.9 1.3-1.6 2.7-3.3 4.1-5zm-26.7 8.3c1.8-1.9 4-2.8 6.5-2.7 2.6-0.1 4.7 0.8 6.6 2.7 1.8 1.8 2.7 4 2.7 6.5 0 2.6-0.9 4.7-2.7 6.6-1.9 1.8-4 2.7-6.6 2.7-2.5 0-4.7-0.9-6.5-2.7-1.8-1.9-2.7-4-2.7-6.6 0-2.5 0.9-4.7 2.7-6.5z"></path>
5
- <path fill="#424242" d="m66.5 17.2c-2.2 0-4 0.8-5.6 2.3-1.5 1.6-2.3 3.4-2.3 5.6s0.8 4 2.3 5.6c1.6 1.6 3.4 2.4 5.6 2.4s4-0.8 5.6-2.4 2.3-3.4 2.3-5.6-0.7-4-2.3-5.6c-1.6-1.5-3.4-2.3-5.6-2.3zm-4.2 3.7c1.2-1.1 2.6-1.7 4.2-1.7s3 0.6 4.2 1.7c1.2 1.2 1.7 2.5 1.7 4.2s-0.5 3.1-1.7 4.2c-1.2 1.2-2.6 1.8-4.2 1.8s-3-0.6-4.2-1.8c-1.1-1.1-1.7-2.5-1.7-4.2 0-1.6 0.6-3 1.7-4.2z"/>
6
- <animateTransform
7
- attributeName="transform"
8
- attributeType="XML"
9
- type="rotate"
10
- from="360 66 25.1"
11
- to="0 66 25.1"
12
- dur="6s"
13
- repeatCount="indefinite"/>
14
- </g>
15
- <g>
16
- <path id="big" fill="#424242" d="m40.8 33.6c-0.4-0.2-0.7-0.3-1-0.3-1.2-0.3-2.4-0.5-3.6-0.7-1.1 2.7-2 5.3-2.9 7.9h-1.8c-1.2 0.1-2.3 0.2-3.4 0.4-0.9 0.1-1.8 0.4-2.7 0.7-1.6-2.3-3.3-4.6-4.9-6.8l-0.1-0.1c-0.6 0.2-1.2 0.4-1.7 0.7-1 0.4-1.9 0.9-2.8 1.5-1.4 0.7-2.7 1.6-3.9 2.7v0.1c1.2 2.5 2.3 5 3.5 7.5-0.7 0.7-1.3 1.3-1.9 2.1-0.8 0.8-1.5 1.8-2.1 2.8-0.3 0.4-0.5 0.8-0.7 1.3-2.8-0.5-5.6-1-8.4-1.4-0.5 1.2-1 2.4-1.4 3.7-0.4 2-0.8 3.9-1 5.8l7.8 3v1.4c0 1.1 0.1 2.3 0.4 3.5 0.1 1 0.4 2 0.7 3-2.3 1.6-4.5 3.2-6.8 4.9 1.2 3 2.9 5.8 4.9 8.4h0.1c2.5-1.2 5-2.3 7.6-3.5 0.6 0.6 1.2 1.1 1.8 1.7 0.9 0.8 2 1.5 3.2 2.2 0.3 0.2 0.7 0.4 1.1 0.7-0.5 2.7-0.9 5.5-1.3 8.3 1.1 0.5 2.2 0.9 3.4 1.2 0.3 0.1 0.9 0.3 1.9 0.5 1.4 0.4 2.8 0.6 4.1 0.8 1.1-2.7 2.1-5.3 3-8h1.3c1.2 0 2.3-0.1 3.4-0.3 1-0.2 2-0.5 3-0.8 0 0 0 0.1 0.1 0.1 1.6 2.3 3.3 4.6 4.9 6.9 0.5-0.3 1-0.5 1.4-0.7 1-0.4 1.9-0.9 2.8-1.4 1.5-0.9 2.9-1.9 4.2-3-1.1-2.6-2.3-5.1-3.5-7.7 0.6-0.6 1.1-1.2 1.7-1.8 0.7-0.9 1.4-1.9 2-2.8 0-0.1 0.1-0.2 0.1-0.3 0.2-0.3 0.4-0.7 0.6-1 2.8 0.5 5.6 0.9 8.4 1.4 0.5-1.2 0.9-2.4 1.3-3.7 0.1-0.3 0.2-0.6 0.3-1 0.1-0.3 0.1-0.6 0.3-1 0.2-1.3 0.5-2.6 0.6-3.8-2.6-1.1-5.3-2-7.9-3v-1.2c0-1.2-0.1-2.5-0.4-3.7-0.1-0.9-0.4-1.8-0.6-2.7 2.3-1.6 4.6-3.3 6.8-5h0.1c-1.2-3-2.8-5.8-5-8.4-2.6 1.1-5.1 2.3-7.6 3.5-0.7-0.7-1.4-1.4-2.1-2-0.9-0.7-1.8-1.4-2.8-1.9-0.3-0.3-0.7-0.5-1-0.7 0.4-2.8 0.9-5.6 1.3-8.4-1.2-0.5-2.5-1-3.8-1.4-0.3-0.1-0.7-0.2-1-0.2zm-18.6 37.4c-1.7-2.9-2.1-5.9-1.2-9.1 0.8-3.2 2.7-5.6 5.6-7.3 2.8-1.6 5.9-2 9-1.2 3.2 0.9 5.7 2.7 7.3 5.6 1.7 2.9 2.1 5.9 1.2 9.1-0.8 3.2-2.7 5.6-5.5 7.2-3 1.7-6 2.1-9.1 1.2-3.2-0.8-5.7-2.7-7.3-5.5z"></path>
17
- <path fill="#424242" d="m22.8 62.4c-0.8 2.7-0.5 5.3 0.9 7.7h0.1c1.4 2.5 3.5 4 6.2 4.8 2.7 0.7 5.3 0.4 7.8-1 2.5-1.5 4-3.5 4.8-6.2v-0.1c0.7-2.7 0.3-5.3-1.1-7.7-1.4-2.5-3.5-4.1-6.2-4.8-2.7-0.8-5.4-0.4-7.8 1-2.5 1.4-4 3.5-4.7 6.3zm6-4c1.9-1.1 3.8-1.4 5.8-0.8 2 0.5 3.6 1.7 4.7 3.6 1.1 1.8 1.3 3.8 0.8 5.8-0.6 2-1.8 3.6-3.6 4.6v0.1c-1.9 1-3.8 1.3-5.8 0.7-2.1-0.5-3.6-1.7-4.7-3.6-1-1.8-1.3-3.7-0.8-5.8 0.6-2 1.8-3.5 3.6-4.6z" />
18
- <animateTransform
19
- attributeName="transform"
20
- attributeType="XML"
21
- type="rotate"
22
- from="0 32.5 65"
23
- to="360 32.5 65"
24
- dur="6s"
25
- repeatCount="indefinite"/>
26
- </g>
27
- </svg>