spoko-design-system 0.2.79 → 0.2.81

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 (155) hide show
  1. package/.github/dependabot.yml +11 -11
  2. package/.github/todo.yml +3 -3
  3. package/.github/workflows/deploy.yml +39 -39
  4. package/.stackblitzrc +5 -5
  5. package/.vscode/extensions.json +5 -5
  6. package/.vscode/launch.json +11 -11
  7. package/.vscode/settings.json +5 -5
  8. package/LICENSE +21 -21
  9. package/README.md +113 -113
  10. package/astro-i18next.config.mjs +17 -17
  11. package/astro-i18next.config.ts +10 -10
  12. package/astro.config.mjs +147 -147
  13. package/dev-dist/sw.js +91 -91
  14. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  15. package/index.ts +65 -65
  16. package/package.json +3 -3
  17. package/public/fonts/lg.svg +53 -53
  18. package/public/fonts/vwhead-bold-demo.html +549 -549
  19. package/public/fonts/vwhead-regular-demo.html +549 -549
  20. package/public/fonts/vwtext-bold-demo.html +549 -549
  21. package/public/fonts/vwtext-regular-demo.html +549 -549
  22. package/public/github.svg +3 -3
  23. package/public/grid_dot.svg +4 -4
  24. package/public/linkedin.svg +44 -44
  25. package/public/locales/en/translation.json +8 -8
  26. package/public/locales/pl/translation.json +8 -8
  27. package/public/make-scrollable-code-focusable.js +3 -3
  28. package/public/pagefind.yml +3 -3
  29. package/public/polo.blue.svg +29 -29
  30. package/public/spoko.space.svg +71 -71
  31. package/public/twitter.svg +46 -46
  32. package/renovate.json +6 -6
  33. package/sandbox.config.json +11 -11
  34. package/src/MyComponent.astro +8 -8
  35. package/src/components/Badge.vue +19 -19
  36. package/src/components/Badges.vue +21 -21
  37. package/src/components/Breadcrumbs.vue +107 -107
  38. package/src/components/Button.vue +55 -55
  39. package/src/components/ButtonCopy.vue +36 -36
  40. package/src/components/Card.astro +27 -27
  41. package/src/components/Carousel.astro +26 -26
  42. package/src/components/Category/CategoriesCarousel.astro +101 -101
  43. package/src/components/Category/CategoriesSidebar.astro +186 -186
  44. package/src/components/Category/CategoryDetails.astro +82 -82
  45. package/src/components/Category/CategoryLink.vue +23 -23
  46. package/src/components/Category/CategorySection.astro +69 -69
  47. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  48. package/src/components/Category/CategoryTile.astro +49 -49
  49. package/src/components/Category/SubCategoryLink.vue +29 -29
  50. package/src/components/CategoryLink.astro +18 -18
  51. package/src/components/Copyright.astro +12 -12
  52. package/src/components/Date.astro +7 -7
  53. package/src/components/Faq.astro +33 -33
  54. package/src/components/FaqItem.astro +96 -96
  55. package/src/components/FeaturesList.vue +41 -41
  56. package/src/components/FuckRussia.vue +62 -62
  57. package/src/components/HandDrive.astro +29 -29
  58. package/src/components/Header/Header.astro +210 -210
  59. package/src/components/Header/SkipToContent.astro +1 -1
  60. package/src/components/Headline.vue +48 -48
  61. package/src/components/Image.astro +30 -30
  62. package/src/components/Jumbatron.vue +40 -40
  63. package/src/components/LeftSidebar.astro +53 -53
  64. package/src/components/MainColors.vue +23 -23
  65. package/src/components/MainInput.vue +15 -15
  66. package/src/components/Modal.astro +27 -27
  67. package/src/components/PageContent.astro +5 -5
  68. package/src/components/PartNumber.vue +27 -27
  69. package/src/components/PostHeader.astro +103 -103
  70. package/src/components/PrCode.vue +141 -141
  71. package/src/components/Product/ProductButton.vue +18 -18
  72. package/src/components/Product/ProductCarousel.astro +35 -35
  73. package/src/components/Product/ProductCodes.vue +174 -174
  74. package/src/components/Product/ProductEngineType.vue +42 -42
  75. package/src/components/Product/ProductImage.astro +40 -40
  76. package/src/components/Product/ProductLink.astro +101 -101
  77. package/src/components/Product/ProductLink.vue +59 -59
  78. package/src/components/Product/ProductLinkInfo.astro +37 -37
  79. package/src/components/Product/ProductNumber.astro +61 -61
  80. package/src/components/ProductCarousel.astro +38 -38
  81. package/src/components/ProductCodes.vue +39 -39
  82. package/src/components/ProductDetailName.vue +52 -52
  83. package/src/components/ProductDetailsList.vue +65 -65
  84. package/src/components/ProductTile.astro +48 -48
  85. package/src/components/Quote.vue +23 -23
  86. package/src/components/ReloadPrompt.astro +50 -50
  87. package/src/components/SlimBanner.vue +72 -72
  88. package/src/components/Table.vue +32 -32
  89. package/src/components/TableOfContents.astro +15 -15
  90. package/src/components/Translations.vue +23 -23
  91. package/src/components/flags/FlagPL.vue +3 -3
  92. package/src/components/flags/FlagUA.vue +2 -2
  93. package/src/components/layout/Container.astro +7 -7
  94. package/src/components/layout/Header.astro +80 -80
  95. package/src/config.ts +56 -56
  96. package/src/design.config.ts +81 -81
  97. package/src/env.d.ts +1 -1
  98. package/src/layouts/Layout.astro +60 -60
  99. package/src/layouts/MainLayout.astro +81 -81
  100. package/src/layouts/partials/FooterCommon.astro +4 -4
  101. package/src/layouts/partials/HeadCommon.astro +44 -44
  102. package/src/layouts/partials/HeadSEO.astro +41 -41
  103. package/src/pages/components/badges.mdx +57 -57
  104. package/src/pages/components/breadcrumbs.mdx +139 -139
  105. package/src/pages/components/buttons.mdx +236 -236
  106. package/src/pages/components/card.mdx +294 -294
  107. package/src/pages/components/carousel.mdx +62 -62
  108. package/src/pages/components/copyright.mdx +42 -42
  109. package/src/pages/components/details-list.mdx +115 -115
  110. package/src/pages/components/features-list.mdx +37 -37
  111. package/src/pages/components/flags.mdx +49 -49
  112. package/src/pages/components/fuck-russia.mdx +39 -39
  113. package/src/pages/components/hand-drive.mdx +38 -38
  114. package/src/pages/components/headline.mdx +152 -152
  115. package/src/pages/components/icons.astro +48 -48
  116. package/src/pages/components/image.mdx +513 -513
  117. package/src/pages/components/input.mdx +45 -45
  118. package/src/pages/components/jumbatron.mdx +95 -95
  119. package/src/pages/components/modal.mdx +64 -64
  120. package/src/pages/components/post-header.mdx +60 -60
  121. package/src/pages/components/pr-code.mdx +65 -65
  122. package/src/pages/components/product-number.mdx +58 -58
  123. package/src/pages/components/product-tile.mdx +51 -51
  124. package/src/pages/components/quote.mdx +33 -33
  125. package/src/pages/components/slimbanner.mdx +35 -35
  126. package/src/pages/components/table.mdx +108 -108
  127. package/src/pages/core/colors.mdx +10 -10
  128. package/src/pages/core/grid.mdx +89 -89
  129. package/src/pages/core/introduction.mdx +77 -77
  130. package/src/pages/core/shadows.astro +20 -20
  131. package/src/pages/core/typography.astro +47 -47
  132. package/src/pages/index.astro +126 -126
  133. package/src/pages/patterns/introduction.mdx +60 -60
  134. package/src/pwa.ts +12 -12
  135. package/src/styles/_variables.scss +70 -70
  136. package/src/styles/base/base.css +184 -184
  137. package/src/styles/base/grid.css +92 -92
  138. package/src/styles/base/typography.css +70 -70
  139. package/src/styles/content.css +73 -73
  140. package/src/styles/main.css +7 -7
  141. package/src/types/Product.ts +31 -31
  142. package/src/types/astro.d.ts +3 -3
  143. package/src/utils/product/getPriceFormatted.ts +15 -15
  144. package/src/utils/product/getProductChecklist.ts +17 -17
  145. package/src/utils/product/useFormatProductNumber.ts +41 -41
  146. package/src/utils/seo/getShorterDescription.ts +14 -14
  147. package/src/utils/text/formatDate.ts +5 -5
  148. package/src/utils/text/formatLocaleNumber.ts +6 -6
  149. package/src/utils/text/formatPad.ts +12 -12
  150. package/src/utils/text/getNumberFormatted.ts +33 -33
  151. package/src/utils/text/getTranslatedLink.ts +5 -5
  152. package/src/utils/text.ts +28 -28
  153. package/tailwind.config.cjs +8 -8
  154. package/tsconfig.json +28 -28
  155. package/uno.config.ts +256 -256
@@ -1,39 +1,39 @@
1
- <script lang="ts" setup>
2
- import type { PropType } from 'vue'
3
- import PrCode from './PrCode.vue';
4
-
5
- const props = defineProps({
6
- prcodes: {
7
- type: Object as PropType<string[] | null>,
8
- default: null,
9
- required: true,
10
- },
11
- isPdp: {
12
- type: Boolean,
13
- default: false,
14
- required: false,
15
- },
16
- })
17
-
18
- const codes = props.prcodes || []
19
- const decodedCodes = codes ? codes.sort() : []
20
-
21
- const settings = {
22
- prcodes: decodedCodes,
23
- }
24
- </script>
25
-
26
- <template>
27
-
28
- <span
29
- v-for="(prcode, index) in settings.prcodes"
30
- :key="index"
31
- class="not-last:mr-1"
32
- >
33
- <PrCode :prcode="prcode" v-if="!String(prcode).includes('+')" />
34
- <span v-else >
35
- <PrCode v-for="(splittedCode, index2) in String(prcode).split('+')" :key="index2" :prcode="splittedCode" />
36
- </span>
37
- </span>
38
- </template>
39
-
1
+ <script lang="ts" setup>
2
+ import type { PropType } from 'vue'
3
+ import PrCode from './PrCode.vue';
4
+
5
+ const props = defineProps({
6
+ prcodes: {
7
+ type: Object as PropType<string[] | null>,
8
+ default: null,
9
+ required: true,
10
+ },
11
+ isPdp: {
12
+ type: Boolean,
13
+ default: false,
14
+ required: false,
15
+ },
16
+ })
17
+
18
+ const codes = props.prcodes || []
19
+ const decodedCodes = codes ? codes.sort() : []
20
+
21
+ const settings = {
22
+ prcodes: decodedCodes,
23
+ }
24
+ </script>
25
+
26
+ <template>
27
+
28
+ <span
29
+ v-for="(prcode, index) in settings.prcodes"
30
+ :key="index"
31
+ class="not-last:mr-1"
32
+ >
33
+ <PrCode :prcode="prcode" v-if="!String(prcode).includes('+')" />
34
+ <span v-else >
35
+ <PrCode v-for="(splittedCode, index2) in String(prcode).split('+')" :key="index2" :prcode="splittedCode" />
36
+ </span>
37
+ </span>
38
+ </template>
39
+
@@ -1,53 +1,53 @@
1
- <script lang="ts" setup>
2
- import { PropType } from 'vue';
3
-
4
- const props = defineProps({
5
- as: {
6
- type: String as PropType< 'th'| 'td' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
- default: 'div',
8
- required: true,
9
- },
10
- text: {
11
- type: String,
12
- default: '',
13
- required: true,
14
- },
15
- styles: {
16
- type: String,
17
- default: '',
18
- required: false,
19
- }
20
- })
21
- </script>
22
-
23
- <template>
24
- <component :is="props.as" class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64">
25
- <span :class="styles && styles.length ? styles : 'mt-auto'">
26
- <b class="bg-white z-1 colon-after pr-1">{{ props.text }}</b>
27
- </span>
28
- </component>
29
- </template>
30
-
31
-
32
- <style>
33
- .detail-name {
34
- @apply overflow-hidden relative;
35
-
36
- span {
37
- @apply block bg-white relative z-10 pr-1.5 w-full;
38
-
39
- &:before {
40
- /* // order: 2; */
41
- @apply text-gray-300 absolute select-none border-b border-gray-200 w-full -z-1 absolute content-empty left-0;
42
- height: 1em;
43
- white-space: nowrap;
44
- font-weight: 100;
45
- bottom: 2px;
46
- flex: 1;
47
- }
48
- }
49
-
50
-
51
- }
52
-
1
+ <script lang="ts" setup>
2
+ import { PropType } from 'vue';
3
+
4
+ const props = defineProps({
5
+ as: {
6
+ type: String as PropType< 'th'| 'td' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
+ default: 'div',
8
+ required: true,
9
+ },
10
+ text: {
11
+ type: String,
12
+ default: '',
13
+ required: true,
14
+ },
15
+ styles: {
16
+ type: String,
17
+ default: '',
18
+ required: false,
19
+ }
20
+ })
21
+ </script>
22
+
23
+ <template>
24
+ <component :is="props.as" class="font-bold detail-name w-full sm:w-50 flex 2xl:w-64">
25
+ <span :class="styles && styles.length ? styles : 'mt-auto'">
26
+ <b class="bg-white z-1 colon-after pr-1">{{ props.text }}</b>
27
+ </span>
28
+ </component>
29
+ </template>
30
+
31
+
32
+ <style>
33
+ .detail-name {
34
+ @apply overflow-hidden relative;
35
+
36
+ span {
37
+ @apply block bg-white relative z-10 pr-1.5 w-full;
38
+
39
+ &:before {
40
+ /* // order: 2; */
41
+ @apply text-gray-300 absolute select-none border-b border-gray-200 w-full -z-1 absolute content-empty left-0;
42
+ height: 1em;
43
+ white-space: nowrap;
44
+ font-weight: 100;
45
+ bottom: 2px;
46
+ flex: 1;
47
+ }
48
+ }
49
+
50
+
51
+ }
52
+
53
53
  </style>
@@ -1,65 +1,65 @@
1
- <script setup lang="ts">
2
- import { PropType } from "vue";
3
- import ProductDetailName from "./ProductDetailName.vue";
4
-
5
- interface TableItem {
6
- id: string,
7
- name: string
8
- value: unknown
9
- }
10
-
11
- const props = defineProps({
12
- items: {type: Array as PropType<TableItem[]>, default: () => []},
13
- caption: { type: String, default: null }
14
- })
15
-
16
- </script>
17
-
18
- <template>
19
- <table class="details table-auto text-left bg-white">
20
- <caption v-if="!!$slots.caption || caption">
21
- <slot name="caption">{{ caption }}</slot>
22
- </caption>
23
- <colgroup>
24
- <col>
25
- <col>
26
- </colgroup>
27
- <tbody>
28
- <tr v-for="row, index in props.items" :key="index">
29
- <ProductDetailName as="th" :text="row.name" />
30
- <slot :name="row.id">
31
- <td>{{ row.value }}</td>
32
- </slot>
33
- </tr>
34
- </tbody>
35
- </table>
36
- </template>
37
-
38
- <style scoped>
39
- .details {
40
- @apply border-none shadow-none w-full md:w-auto
41
- box-shadow: none;
42
-
43
- col {
44
- @apply w-1/2 md:w-auto;
45
-
46
- }
47
-
48
- tr {
49
- @apply border-none;
50
- }
51
-
52
- tr,
53
- th {
54
- @apply leading-none text-3.5 py-2 border-none xl:(py-4) 3xl:(text-4);
55
- }
56
-
57
- th {
58
- @apply px-0;
59
- }
60
-
61
- td {
62
- @apply relative;
63
- }
64
- }
65
- </style>
1
+ <script setup lang="ts">
2
+ import { PropType } from "vue";
3
+ import ProductDetailName from "./ProductDetailName.vue";
4
+
5
+ interface TableItem {
6
+ id: string,
7
+ name: string
8
+ value: unknown
9
+ }
10
+
11
+ const props = defineProps({
12
+ items: {type: Array as PropType<TableItem[]>, default: () => []},
13
+ caption: { type: String, default: null }
14
+ })
15
+
16
+ </script>
17
+
18
+ <template>
19
+ <table class="details table-auto text-left bg-white">
20
+ <caption v-if="!!$slots.caption || caption">
21
+ <slot name="caption">{{ caption }}</slot>
22
+ </caption>
23
+ <colgroup>
24
+ <col>
25
+ <col>
26
+ </colgroup>
27
+ <tbody>
28
+ <tr v-for="row, index in props.items" :key="index">
29
+ <ProductDetailName as="th" :text="row.name" />
30
+ <slot :name="row.id">
31
+ <td>{{ row.value }}</td>
32
+ </slot>
33
+ </tr>
34
+ </tbody>
35
+ </table>
36
+ </template>
37
+
38
+ <style scoped>
39
+ .details {
40
+ @apply border-none shadow-none w-full md:w-auto
41
+ box-shadow: none;
42
+
43
+ col {
44
+ @apply w-1/2 md:w-auto;
45
+
46
+ }
47
+
48
+ tr {
49
+ @apply border-none;
50
+ }
51
+
52
+ tr,
53
+ th {
54
+ @apply leading-none text-3.5 py-2 border-none xl:(py-4) 3xl:(text-4);
55
+ }
56
+
57
+ th {
58
+ @apply px-0;
59
+ }
60
+
61
+ td {
62
+ @apply relative;
63
+ }
64
+ }
65
+ </style>
@@ -1,48 +1,48 @@
1
- ---
2
- const { productObject, locale, index } = Astro.props;
3
- import Image from "./Image.astro"
4
- import ProductNumber from "./Product/ProductNumber.astro"
5
- import { t } from "i18next";
6
- ---
7
-
8
- { productObject &&
9
- (
10
-
11
- <!-- product image -->
12
- <div class="img--4/3 img--small">
13
- { productObject.photo !== null ?
14
- <Image
15
- imageObject={
16
- {
17
- src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
18
- alt: 'Image Alt',
19
- height: '180',
20
- width: '240',
21
- class: 'img--overlay object-cover'
22
- }
23
- }
24
- />
25
- :
26
- <img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} />
27
- }
28
- </div>
29
-
30
- <!-- product deails -->
31
- <div class="sm:pl-4 flex flex-col" >
32
- <a class="font-light leading-none mb-2 pr-4 line-clamp-2 h-[2em] before:(content-empty absolute left-0 right-4 h-full top-0)"
33
- href={productObject.url} itemprop="url"
34
- title={productObject.number}
35
- >
36
- { productObject.name }
37
- </a>
38
-
39
- <ProductNumber productNumber={productObject.number} copyDisabled={false} buttonTexts={{ copy: t('copy'), copied: t('copied') }} />
40
-
41
- { index !== null &&
42
- ( <meta itemprop="position" content={String(index)} />
43
- <meta itemprop="name" content={productObject.name} /> )
44
- }
45
- </div>
46
-
47
- )}
48
-
1
+ ---
2
+ const { productObject, locale, index } = Astro.props;
3
+ import Image from "./Image.astro"
4
+ import ProductNumber from "./Product/ProductNumber.astro"
5
+ import { t } from "i18next";
6
+ ---
7
+
8
+ { productObject &&
9
+ (
10
+
11
+ <!-- product image -->
12
+ <div class="img--4/3 img--small">
13
+ { productObject.photo !== null ?
14
+ <Image
15
+ imageObject={
16
+ {
17
+ src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
18
+ alt: 'Image Alt',
19
+ height: '180',
20
+ width: '240',
21
+ class: 'img--overlay object-cover'
22
+ }
23
+ }
24
+ />
25
+ :
26
+ <img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} />
27
+ }
28
+ </div>
29
+
30
+ <!-- product deails -->
31
+ <div class="sm:pl-4 flex flex-col" >
32
+ <a class="font-light leading-none mb-2 pr-4 line-clamp-2 h-[2em] before:(content-empty absolute left-0 right-4 h-full top-0)"
33
+ href={productObject.url} itemprop="url"
34
+ title={productObject.number}
35
+ >
36
+ { productObject.name }
37
+ </a>
38
+
39
+ <ProductNumber productNumber={productObject.number} copyDisabled={false} buttonTexts={{ copy: t('copy'), copied: t('copied') }} />
40
+
41
+ { index !== null &&
42
+ ( <meta itemprop="position" content={String(index)} />
43
+ <meta itemprop="name" content={productObject.name} /> )
44
+ }
45
+ </div>
46
+
47
+ )}
48
+
@@ -1,23 +1,23 @@
1
- <script setup lang="ts">
2
- import { PropType } from 'vue';
3
-
4
- const props = defineProps({
5
- as: {
6
- type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
- default: 'div',
8
- required: false,
9
- },
10
- text: {
11
- type: String,
12
- default: '',
13
- required: false,
14
- }
15
- })
16
- </script>
17
-
18
- <template>
19
- <component :is="props.as"
20
- class="px-8 sm:px-8 mx-4 sm:mx-6 lg:max-w-4xl drop-shadow-primary text-2xl md:text-4xl lg:text-4.5xl relative font-light after:left-0 after:content-empty after:rounded-3xl after:top-0 after:absolute after:h-full after:border-solid after:border-[var(--primary)] after:border-l-3 after:z-0">
21
- <slot>{{ props.text }}</slot>
22
- </component>
23
- </template>
1
+ <script setup lang="ts">
2
+ import { PropType } from 'vue';
3
+
4
+ const props = defineProps({
5
+ as: {
6
+ type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
+ default: 'div',
8
+ required: false,
9
+ },
10
+ text: {
11
+ type: String,
12
+ default: '',
13
+ required: false,
14
+ }
15
+ })
16
+ </script>
17
+
18
+ <template>
19
+ <component :is="props.as"
20
+ class="px-8 sm:px-8 mx-4 sm:mx-6 lg:max-w-4xl drop-shadow-primary text-2xl md:text-4xl lg:text-4.5xl relative font-light after:left-0 after:content-empty after:rounded-3xl after:top-0 after:absolute after:h-full after:border-solid after:border-[var(--primary)] after:border-l-3 after:z-0">
21
+ <slot>{{ props.text }}</slot>
22
+ </component>
23
+ </template>
@@ -1,51 +1,51 @@
1
- <script src="./../pwa.ts"></script>
2
- <div
3
- id="pwa-toast"
4
- role="alert"
5
- aria-labelledby="toast-message"
6
- >
7
- <div class="message">
8
- <span id="toast-message"></span>
9
- </div>
10
- <button id="pwa-refresh">
11
- Reload
12
- </button>
13
- <button id="pwa-close">
14
- Close
15
- </button>
16
- </div>
17
-
18
- <style>
19
- #pwa-toast {
20
- visibility: hidden;
21
- position: fixed;
22
- right: 0;
23
- bottom: 0;
24
- margin: 16px;
25
- padding: 12px;
26
- border: 1px solid #8885;
27
- border-radius: 4px;
28
- z-index: 1;
29
- text-align: left;
30
- box-shadow: 3px 4px 5px 0 #8885;
31
- }
32
- #pwa-toast .message {
33
- margin-bottom: 8px;
34
- }
35
- #pwa-toast button {
36
- border: 1px solid #8885;
37
- outline: none;
38
- margin-right: 5px;
39
- border-radius: 2px;
40
- padding: 3px 10px;
41
- }
42
- #pwa-toast.show {
43
- visibility: visible;
44
- }
45
- button#pwa-refresh {
46
- display: none;
47
- }
48
- #pwa-toast.show.refresh button#pwa-refresh {
49
- display: inline-block;
50
- }
1
+ <script src="./../pwa.ts"></script>
2
+ <div
3
+ id="pwa-toast"
4
+ role="alert"
5
+ aria-labelledby="toast-message"
6
+ >
7
+ <div class="message">
8
+ <span id="toast-message"></span>
9
+ </div>
10
+ <button id="pwa-refresh">
11
+ Reload
12
+ </button>
13
+ <button id="pwa-close">
14
+ Close
15
+ </button>
16
+ </div>
17
+
18
+ <style>
19
+ #pwa-toast {
20
+ visibility: hidden;
21
+ position: fixed;
22
+ right: 0;
23
+ bottom: 0;
24
+ margin: 16px;
25
+ padding: 12px;
26
+ border: 1px solid #8885;
27
+ border-radius: 4px;
28
+ z-index: 1;
29
+ text-align: left;
30
+ box-shadow: 3px 4px 5px 0 #8885;
31
+ }
32
+ #pwa-toast .message {
33
+ margin-bottom: 8px;
34
+ }
35
+ #pwa-toast button {
36
+ border: 1px solid #8885;
37
+ outline: none;
38
+ margin-right: 5px;
39
+ border-radius: 2px;
40
+ padding: 3px 10px;
41
+ }
42
+ #pwa-toast.show {
43
+ visibility: visible;
44
+ }
45
+ button#pwa-refresh {
46
+ display: none;
47
+ }
48
+ #pwa-toast.show.refresh button#pwa-refresh {
49
+ display: inline-block;
50
+ }
51
51
  </style>