@papit/create 0.0.1

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 (141) hide show
  1. package/README.md +198 -0
  2. package/asset/component-templates/browser/src/component.ts +7 -0
  3. package/asset/component-templates/browser/src/index.ts +3 -0
  4. package/asset/component-templates/browser/src/types.ts +1 -0
  5. package/asset/component-templates/browser/tests/index.html +15 -0
  6. package/asset/component-templates/browser/tests/main.js +1 -0
  7. package/asset/component-templates/browser/tests/public/icons/.gitkeep +0 -0
  8. package/asset/component-templates/browser/tests/public/images/.gitkeep +0 -0
  9. package/asset/component-templates/browser/tests/public/translations/en.json +7 -0
  10. package/asset/component-templates/browser/tests/snapshot.test.ts +12 -0
  11. package/asset/component-templates/browser/tests/unit.test.ts +69 -0
  12. package/asset/component-templates/browser/views/index.html +29 -0
  13. package/asset/component-templates/browser/views/main.js +13 -0
  14. package/asset/component-templates/browser/views/public/icons/.gitkeep +0 -0
  15. package/asset/component-templates/browser/views/public/images/.gitkeep +0 -0
  16. package/asset/component-templates/browser/views/public/translations/en.json +7 -0
  17. package/asset/component-templates/browser/views/style.css +28 -0
  18. package/asset/component-templates/game/src/component.ts +7 -0
  19. package/asset/component-templates/game/src/index.ts +3 -0
  20. package/asset/component-templates/game/src/types.ts +1 -0
  21. package/asset/component-templates/game/tests/index.html +15 -0
  22. package/asset/component-templates/game/tests/main.js +34 -0
  23. package/asset/component-templates/game/tests/public/models/.gitkeep +0 -0
  24. package/asset/component-templates/game/tests/public/textures/.gitkeep +0 -0
  25. package/asset/component-templates/game/tests/public/translations/en.json +7 -0
  26. package/asset/component-templates/game/tests/snapshot.test.ts +12 -0
  27. package/asset/component-templates/game/tests/unit.test.ts +18 -0
  28. package/asset/component-templates/game/views/index.html +22 -0
  29. package/asset/component-templates/game/views/main.js +34 -0
  30. package/asset/component-templates/game/views/public/models/.gitkeep +0 -0
  31. package/asset/component-templates/game/views/public/textures/.gitkeep +0 -0
  32. package/asset/component-templates/game/views/public/translations/en.json +7 -0
  33. package/asset/component-templates/game/views/style.css +9 -0
  34. package/asset/component-templates/node/src/component.ts +7 -0
  35. package/asset/component-templates/node/src/index.ts +3 -0
  36. package/asset/component-templates/node/src/types.ts +1 -0
  37. package/asset/component-templates/node/tests/unit.test.js +10 -0
  38. package/asset/component-templates/theme/lib/theme.css +80 -0
  39. package/asset/component-templates/theme/src/theme.css +205 -0
  40. package/asset/component-templates/theme/tests/index.html +15 -0
  41. package/asset/component-templates/theme/tests/main.js +1 -0
  42. package/asset/component-templates/theme/tests/public/icons/.gitkeep +0 -0
  43. package/asset/component-templates/theme/tests/public/images/.gitkeep +0 -0
  44. package/asset/component-templates/theme/tests/public/translations/en.json +7 -0
  45. package/asset/component-templates/theme/tests/snapshot.test.ts +12 -0
  46. package/asset/component-templates/theme/tests/unit.test.ts +67 -0
  47. package/asset/component-templates/theme/views/index.html +110 -0
  48. package/asset/component-templates/theme/views/main.js +14 -0
  49. package/asset/component-templates/theme/views/style.css +241 -0
  50. package/asset/component-templates/web-component/src/component.ts +31 -0
  51. package/asset/component-templates/web-component/src/index.ts +15 -0
  52. package/asset/component-templates/web-component/src/style.css +4 -0
  53. package/asset/component-templates/web-component/src/types.ts +1 -0
  54. package/asset/component-templates/web-component/tests/index.html +17 -0
  55. package/asset/component-templates/web-component/tests/main.js +1 -0
  56. package/asset/component-templates/web-component/tests/public/icons/.gitkeep +0 -0
  57. package/asset/component-templates/web-component/tests/public/images/.gitkeep +0 -0
  58. package/asset/component-templates/web-component/tests/public/translations/en.json +7 -0
  59. package/asset/component-templates/web-component/tests/snapshot.test.ts +12 -0
  60. package/asset/component-templates/web-component/tests/unit.test.ts +69 -0
  61. package/asset/component-templates/web-component/views/index.html +28 -0
  62. package/asset/component-templates/web-component/views/main.js +14 -0
  63. package/asset/component-templates/web-component/views/public/icons/.gitkeep +0 -0
  64. package/asset/component-templates/web-component/views/public/images/.gitkeep +0 -0
  65. package/asset/component-templates/web-component/views/public/translations/en.json +7 -0
  66. package/asset/component-templates/web-component/views/style.css +28 -0
  67. package/asset/package-templates/browser/README.md +44 -0
  68. package/asset/package-templates/browser/asset/icons/.gitkeep +0 -0
  69. package/asset/package-templates/browser/asset/images/.gitkeep +0 -0
  70. package/asset/package-templates/browser/asset/translations/en.json +7 -0
  71. package/asset/package-templates/browser/package.json +76 -0
  72. package/asset/package-templates/browser/src/.gitkeep +0 -0
  73. package/asset/package-templates/browser/tests/playwright.config.ts +81 -0
  74. package/asset/package-templates/browser/tests/tsconfig.json +9 -0
  75. package/asset/package-templates/browser/tsconfig.json +41 -0
  76. package/asset/package-templates/browser/tsconfig.prod.json +9 -0
  77. package/asset/package-templates/game/README.md +40 -0
  78. package/asset/package-templates/game/asset/models/.gitkeep +0 -0
  79. package/asset/package-templates/game/asset/textures/.gitkeep +0 -0
  80. package/asset/package-templates/game/asset/translations/en.json +7 -0
  81. package/asset/package-templates/game/package.json +78 -0
  82. package/asset/package-templates/game/src/.gitkeep +0 -0
  83. package/asset/package-templates/game/tests/playwright.config.ts +80 -0
  84. package/asset/package-templates/game/tests/tsconfig.json +9 -0
  85. package/asset/package-templates/game/tsconfig.json +41 -0
  86. package/asset/package-templates/game/tsconfig.prod.json +9 -0
  87. package/asset/package-templates/game/views/.gitkeep +0 -0
  88. package/asset/package-templates/game/views/tsconfig.json +9 -0
  89. package/asset/package-templates/node/README.md +40 -0
  90. package/asset/package-templates/node/asset/translations/en.json +7 -0
  91. package/asset/package-templates/node/package.json +70 -0
  92. package/asset/package-templates/node/src/.gitkeep +0 -0
  93. package/asset/package-templates/node/tests/.gitkeep +0 -0
  94. package/asset/package-templates/node/tests/tsconfig.json +9 -0
  95. package/asset/package-templates/node/tsconfig.json +38 -0
  96. package/asset/package-templates/node/tsconfig.prod.json +9 -0
  97. package/asset/package-templates/theme/README.md +44 -0
  98. package/asset/package-templates/theme/asset/icons/.gitkeep +0 -0
  99. package/asset/package-templates/theme/asset/images/.gitkeep +0 -0
  100. package/asset/package-templates/theme/asset/translations/en.json +7 -0
  101. package/asset/package-templates/theme/package.json +70 -0
  102. package/asset/package-templates/theme/tests/playwright.config.ts +81 -0
  103. package/asset/package-templates/theme/tsconfig.json +39 -0
  104. package/asset/package-templates/theme/tsconfig.prod.json +9 -0
  105. package/asset/package-templates/web-component/README.md +55 -0
  106. package/asset/package-templates/web-component/asset/icons/.gitkeep +0 -0
  107. package/asset/package-templates/web-component/asset/images/.gitkeep +0 -0
  108. package/asset/package-templates/web-component/asset/translations/en.json +7 -0
  109. package/asset/package-templates/web-component/package.json +79 -0
  110. package/asset/package-templates/web-component/src/global-css.d.ts +4 -0
  111. package/asset/package-templates/web-component/tests/playwright.config.ts +81 -0
  112. package/asset/package-templates/web-component/tests/tsconfig.json +9 -0
  113. package/asset/package-templates/web-component/tsconfig.json +42 -0
  114. package/asset/package-templates/web-component/tsconfig.prod.json +9 -0
  115. package/asset/package-templates/web-component/views/.gitkeep +0 -0
  116. package/asset/package-templates/web-component/views/tsconfig.json +9 -0
  117. package/asset/project-template/.eslintrc +26 -0
  118. package/asset/project-template/.gitattributes +1 -0
  119. package/asset/project-template/.github/ISSUE_TEMPLATE/CONTRIBUTING.md +101 -0
  120. package/asset/project-template/.github/workflows/build-cache.yml +30 -0
  121. package/asset/project-template/.github/workflows/initialise.yml +49 -0
  122. package/asset/project-template/.github/workflows/publish.yml +59 -0
  123. package/asset/project-template/.github/workflows/pull-request.yml +73 -0
  124. package/asset/project-template/.github/workflows/update-snapshots.yml +80 -0
  125. package/asset/project-template/.nvmrc +1 -0
  126. package/asset/project-template/.vscode/settings.json +19 -0
  127. package/asset/project-template/.vscode/web-components.code-workspace +25 -0
  128. package/asset/project-template/README.md +45 -0
  129. package/asset/project-template/bin/clean.mjs +28 -0
  130. package/asset/project-template/bin/runners/example-runner/runner.js +4 -0
  131. package/asset/project-template/bin/spawn-command.mjs +31 -0
  132. package/asset/project-template/bin/test.mjs +94 -0
  133. package/asset/project-template/package.json +42 -0
  134. package/asset/project-template/packages/atoms/.gitkeep +0 -0
  135. package/asset/project-template/packages/molecules/.gitkeep +0 -0
  136. package/asset/project-template/packages/organisms/.gitkeep +0 -0
  137. package/asset/project-template/packages/pages/.gitkeep +0 -0
  138. package/asset/project-template/packages/templates/.gitkeep +0 -0
  139. package/lib/bundle.d.ts +1 -0
  140. package/lib/bundle.js +4 -0
  141. package/package.json +72 -0
@@ -0,0 +1,80 @@
1
+ @layer theme {
2
+ :root {
3
+ color-scheme: light;
4
+ [data-theme="opposite"], .theme-opposite { color-scheme: dark; }
5
+
6
+ @media (prefers-color-scheme: dark) {
7
+ color-scheme: dark;
8
+ [data-theme="opposite"], .theme-opposite { color-scheme: light; }
9
+ }
10
+
11
+ /* Brand */
12
+ --primary: light-dark(oklch(14% 0 0), oklch(92% 0 0)); /* near black */
13
+ --secondary: light-dark(oklch(80% 0 0), oklch(28% 0 0)); /* near #ccc */
14
+ --tertiary: light-dark(oklch(55% 0 0), oklch(55% 0 0)); /* mid grey */
15
+
16
+ /* Semantic — vivid, same hues in both modes */
17
+ --success: light-dark(oklch(72% 0.22 145), oklch(76% 0.22 145)); /* spring green */
18
+ --info: light-dark(oklch(52% 0.22 262), oklch(58% 0.22 262)); /* deep blue */
19
+ --warning: light-dark(oklch(78% 0.19 68), oklch(82% 0.19 68)); /* orange-yellow */
20
+ --error: light-dark(oklch(53% 0.24 24), oklch(58% 0.24 24)); /* fire red */
21
+
22
+ /* Backgrounds — near white → mid grey */
23
+ --background-lightest: light-dark(oklch(100% 0 0), oklch(32% 0 0));
24
+ --background-lighter: light-dark(oklch(98% 0 0), oklch(24% 0 0));
25
+ --background-light: light-dark(oklch(95% 0 0), oklch(20% 0 0));
26
+ --background: light-dark(oklch(92% 0 0), oklch(16% 0 0));
27
+ --background-dark: light-dark(oklch(86% 0 0), oklch(12% 0 0));
28
+ --background-darker: light-dark(oklch(78% 0 0), oklch(8% 0 0));
29
+ --background-darkest: light-dark(oklch(68% 0 0), oklch(4% 0 0));
30
+
31
+ /* Foregrounds — mid grey → near black */
32
+ --foreground-lightest: light-dark(oklch(52% 0 0), oklch(100% 0 0));
33
+ --foreground-lighter: light-dark(oklch(40% 0 0), oklch(97% 0 0));
34
+ --foreground-light: light-dark(oklch(28% 0 0), oklch(92% 0 0));
35
+ --foreground: light-dark(oklch(16% 0 0), oklch(86% 0 0));
36
+ --foreground-dark: light-dark(oklch(10% 0 0), oklch(74% 0 0));
37
+ --foreground-darker: light-dark(oklch(6% 0 0), oklch(62% 0 0));
38
+ --foreground-darkest: light-dark(oklch(2% 0 0), oklch(48% 0 0));
39
+ }
40
+
41
+ [data-theme="light"], .theme-light {
42
+ color-scheme: light;
43
+ [data-theme="opposite"], .theme-opposite { color-scheme: dark; }
44
+ }
45
+ [data-theme="dark"], .theme-dark {
46
+ color-scheme: dark;
47
+ [data-theme="opposite"], .theme-opposite { color-scheme: light; }
48
+ }
49
+
50
+
51
+ /* == UNITS == */
52
+ :root {
53
+ --base-unit: 0.25rem;
54
+ --space-1: calc(var(--base-unit) * 1); /* 0.25rem - 4px */
55
+ --space-2: calc(var(--base-unit) * 2); /* 0.5rem - 8px */
56
+ --space-3: calc(var(--base-unit) * 3); /* 0.75rem - 12px */
57
+ --space-4: calc(var(--base-unit) * 4); /* 1rem - 16px */
58
+ --space-5: calc(var(--base-unit) * 5); /* 1.25rem - 20px */
59
+ --space-6: calc(var(--base-unit) * 6); /* 1.5rem - 24px */
60
+ --space-7: calc(var(--base-unit) * 7); /* 1.75rem - 28px */
61
+ --space-8: calc(var(--base-unit) * 8); /* 2rem - 32px */
62
+ --space-9: calc(var(--base-unit) * 9); /* 2.25rem - 36px */
63
+ --space-10: calc(var(--base-unit) * 10); /* 2.5rem - 40px */
64
+ --space-11: calc(var(--base-unit) * 11); /* 2.75rem - 44px */
65
+ --space-12: calc(var(--base-unit) * 12); /* 3rem - 48px */
66
+ --space-13: calc(var(--base-unit) * 13); /* 3.25rem - 52px */
67
+ --space-14: calc(var(--base-unit) * 14); /* 3.5rem - 56px */
68
+ --space-15: calc(var(--base-unit) * 15); /* 3.75rem - 60px */
69
+ --space-16: calc(var(--base-unit) * 16); /* 4rem - 64px */
70
+ --space-17: calc(var(--base-unit) * 17); /* 4.25rem - 68px */
71
+ --space-18: calc(var(--base-unit) * 18); /* 4.5rem - 72px */
72
+ --space-19: calc(var(--base-unit) * 19); /* 4.75rem - 76px */
73
+ --space-20: calc(var(--base-unit) * 20); /* 5rem - 80px */
74
+
75
+ --radius-small: var(--space-2);
76
+ --radius-medium: var(--space-4);
77
+ --radius-large: var(--space-8);
78
+ --radius-full: 100vh;
79
+ }
80
+ }
@@ -0,0 +1,205 @@
1
+ @layer theme {
2
+ :root {
3
+ /* Brand */
4
+ --primary: light-dark(oklch(14% 0 0), oklch(92% 0 0));
5
+ /* near black */
6
+ --secondary: light-dark(oklch(80% 0 0), oklch(28% 0 0));
7
+ /* near #ccc */
8
+ --tertiary: light-dark(oklch(55% 0 0), oklch(55% 0 0));
9
+ /* mid grey */
10
+
11
+ --text: light-dark(oklch(10% 0 0), oklch(95% 0 0));
12
+ --text-inverse: light-dark(oklch(95% 0 0), oklch(10% 0 0));
13
+ --text-secondary: light-dark(oklch(42% 0 0), oklch(62% 0 0));
14
+ /* muted, readable in both modes */
15
+
16
+ /* Semantic — vivid, same hues in both modes */
17
+ --success: light-dark(oklch(50% 0.18 145), oklch(72% 0.20 145));
18
+ /* spring green */
19
+ --info: light-dark(oklch(46% 0.20 262), oklch(65% 0.20 262));
20
+ /* deep blue */
21
+ --warning: light-dark(oklch(58% 0.18 68), oklch(80% 0.18 68));
22
+ /* orange-yellow */
23
+ --error: light-dark(oklch(50% 0.22 25), oklch(65% 0.22 25));
24
+ /* fire red */
25
+
26
+ /* In light mode: backgrounds are near-white, constrained range so nothing feels "dark" */
27
+ --background-light: light-dark(oklch(99% 0 0), oklch(22% 0 0));
28
+ /* page canvas */
29
+ --background: light-dark(oklch(96% 0 0), oklch(17% 0 0));
30
+ /* cards, panels */
31
+ --background-dark: light-dark(oklch(90% 0 0), oklch(12% 0 0));
32
+ /* borders, pressed, wells */
33
+
34
+ /* In light mode: foregrounds are near-black, three intensities */
35
+ --foreground-light: light-dark(oklch(52% 0 0), oklch(62% 0 0));
36
+ /* placeholder, caption, muted */
37
+ --foreground: light-dark(oklch(24% 0 0), oklch(86% 0 0));
38
+ /* body text */
39
+ --foreground-dark: light-dark(oklch(10% 0 0), oklch(96% 0 0));
40
+ /* headings, emphasis */
41
+
42
+ /* INVERSE Backgrounds — near white → mid grey */
43
+
44
+ --background-light-inverse: light-dark(oklch(22% 0 0), oklch(99% 0 0));
45
+ /* page canvas */
46
+ --background-inverse: light-dark(oklch(17% 0 0), oklch(96% 0 0));
47
+ /* cards, panels */
48
+ --background-dark-inverse: light-dark(oklch(12% 0 0), oklch(90% 0 0));
49
+ /* borders, pressed, wells */
50
+
51
+ /* In light mode: foregrounds are near-black, three intensities */
52
+ --foreground-light-inverse: light-dark(oklch(62% 0 0), oklch(52% 0 0));
53
+ /* placeholder, caption, muted */
54
+ --foreground-inverse: light-dark(oklch(86% 0 0), oklch(24% 0 0));
55
+ /* body text */
56
+ --foreground-dark-inverse: light-dark(oklch(96% 0 0), oklch(10% 0 0));
57
+ /* headings, emphasis */
58
+
59
+ --focus-color: light-dark(blue, cornflowerblue);
60
+ }
61
+
62
+ /* make sure web-components are hidden intially to avoid flashes */
63
+ *:not(:defined) {
64
+ visibility: hidden;
65
+ }
66
+
67
+ :root {
68
+ color-scheme: light;
69
+
70
+ [data-theme="opposite"],
71
+ .theme-opposite {
72
+ color-scheme: dark;
73
+ background-color: var(--background, light-dark(oklch(96% 0 0), oklch(17% 0 0)));
74
+ color: var(--text);
75
+
76
+ [data-theme="opposite"],
77
+ .theme-opposite {
78
+ color-scheme: light;
79
+ }
80
+
81
+ /* nested 1 level */
82
+ }
83
+
84
+ @media (prefers-color-scheme: dark) {
85
+ color-scheme: dark;
86
+
87
+ [data-theme="opposite"],
88
+ .theme-opposite {
89
+ color-scheme: light;
90
+
91
+ [data-theme="opposite"],
92
+ .theme-opposite {
93
+ color-scheme: dark;
94
+ }
95
+
96
+ /* nested 1 level */
97
+ }
98
+ }
99
+ }
100
+
101
+ [data-theme="light"],
102
+ .theme-light {
103
+ color-scheme: light;
104
+
105
+ [data-theme="opposite"],
106
+ .theme-opposite {
107
+ color-scheme: dark;
108
+
109
+ [data-theme="opposite"],
110
+ .theme-opposite {
111
+ color-scheme: light;
112
+ }
113
+
114
+ /* nested 1 level */
115
+ }
116
+ }
117
+
118
+ [data-theme="dark"],
119
+ .theme-dark {
120
+ color-scheme: dark;
121
+
122
+ [data-theme="opposite"],
123
+ .theme-opposite {
124
+ color-scheme: light;
125
+
126
+ [data-theme="opposite"],
127
+ .theme-opposite {
128
+ color-scheme: dark;
129
+ }
130
+
131
+ /* nested 1 level */
132
+ }
133
+ }
134
+
135
+ /* == UNITS == */
136
+ :root {
137
+ --base-unit: 0.25rem;
138
+ --space-1: calc(var(--base-unit) * 1);
139
+ /* 0.25rem - 4px */
140
+ --space-2: calc(var(--base-unit) * 2);
141
+ /* 0.5rem - 8px */
142
+ --space-3: calc(var(--base-unit) * 3);
143
+ /* 0.75rem - 12px */
144
+ --space-4: calc(var(--base-unit) * 4);
145
+ /* 1rem - 16px */
146
+ --space-5: calc(var(--base-unit) * 5);
147
+ /* 1.25rem - 20px */
148
+ --space-6: calc(var(--base-unit) * 6);
149
+ /* 1.5rem - 24px */
150
+ --space-7: calc(var(--base-unit) * 7);
151
+ /* 1.75rem - 28px */
152
+ --space-8: calc(var(--base-unit) * 8);
153
+ /* 2rem - 32px */
154
+ --space-9: calc(var(--base-unit) * 9);
155
+ /* 2.25rem - 36px */
156
+ --space-10: calc(var(--base-unit) * 10);
157
+ /* 2.5rem - 40px */
158
+ --space-11: calc(var(--base-unit) * 11);
159
+ /* 2.75rem - 44px */
160
+ --space-12: calc(var(--base-unit) * 12);
161
+ /* 3rem - 48px */
162
+ --space-13: calc(var(--base-unit) * 13);
163
+ /* 3.25rem - 52px */
164
+ --space-14: calc(var(--base-unit) * 14);
165
+ /* 3.5rem - 56px */
166
+ --space-15: calc(var(--base-unit) * 15);
167
+ /* 3.75rem - 60px */
168
+ --space-16: calc(var(--base-unit) * 16);
169
+ /* 4rem - 64px */
170
+ --space-17: calc(var(--base-unit) * 17);
171
+ /* 4.25rem - 68px */
172
+ --space-18: calc(var(--base-unit) * 18);
173
+ /* 4.5rem - 72px */
174
+ --space-19: calc(var(--base-unit) * 19);
175
+ /* 4.75rem - 76px */
176
+ --space-20: calc(var(--base-unit) * 20);
177
+ /* 5rem - 80px */
178
+
179
+ --radius-small: var(--space-2);
180
+ --radius-medium: var(--space-4);
181
+ --radius-large: var(--space-8);
182
+ --radius-full: 100vh;
183
+ }
184
+
185
+ /* THEME VIEW TRANSITION */
186
+ @media (prefers-reduced-motion: no-preference) {
187
+ ::view-transition-old(root) {
188
+ animation-delay: 500ms;
189
+ }
190
+
191
+ ::view-transition-new(root) {
192
+ animation: theme-transition-in 500ms;
193
+ }
194
+ }
195
+
196
+ @keyframes theme-transition-in {
197
+ from {
198
+ clip-path: circle(0% at var(--theme-transition-location, 80% 0%));
199
+ }
200
+
201
+ to {
202
+ clip-path: circle(200% at var(--theme-transition-location, 80% 0%));
203
+ }
204
+ }
205
+ }
@@ -0,0 +1,15 @@
1
+ <html lang="en">
2
+
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>VARIABLE_NAME test</title>
7
+
8
+ <script defer src="main.js"></script>
9
+ </head>
10
+
11
+ <body>
12
+ <h1>VARIABLE_NAME test</h1>
13
+ </body>
14
+
15
+ </html>
@@ -0,0 +1 @@
1
+ import 'VARIABLE_FULL_NAME';
@@ -0,0 +1,7 @@
1
+ {
2
+ "meta": {
3
+ "region": "GB",
4
+ "language": "en-UK"
5
+ },
6
+ "VARIABLE_NAME": "VARIABLE_NAME"
7
+ }
@@ -0,0 +1,12 @@
1
+ import { test, expect } from '@playwright/test';
2
+
3
+ test.beforeEach(async ({ page }) => {
4
+ // Navigate to your test page
5
+ await page.goto('tests/VARIABLE_NAME/');
6
+ });
7
+
8
+ test.describe("VARIABLE_FULL_NAME visual regression", () => {
9
+ test('default snapshot', async ({ page }) => {
10
+ await expect(page).toHaveScreenshot();
11
+ });
12
+ })
@@ -0,0 +1,67 @@
1
+ import { test, expect } from '@playwright/test';
2
+
3
+ test.beforeEach(async ({ page }) => {
4
+ // Navigate to your test page
5
+ await page.goto('tests/VARIABLE_NAME/');
6
+ });
7
+
8
+ declare global {
9
+ interface Window {
10
+ EVENT_EMITTED: any;
11
+ }
12
+ }
13
+
14
+ test.describe.skip("VARIABLE_FULL_NAME unit tests", () => {
15
+ test('available in DOM', async ({ page }) => {
16
+ // Interact with your component and make assertions
17
+ });
18
+ });
19
+
20
+ test.describe.skip("helpers", () => {
21
+ test("wait for event : enter press", async ({ page }) => {
22
+ const target = page.getByTestId("base-target");
23
+ await page.evaluate(() => {
24
+ window.EVENT_EMITTED = null;
25
+ const target = document.querySelector<HTMLElement>("*[data-testid='base-target']");
26
+ if (!target) return;
27
+
28
+ target.addEventListener("event-name", () => {
29
+ window.EVENT_EMITTED = true;
30
+ });
31
+
32
+ target.focus();
33
+ target.dispatchEvent(new KeyboardEvent("up", { key: "Enter" }));
34
+ // enter is tricky to capture so we make sure to dispatch inside evalute
35
+ });
36
+
37
+ await target.focus();
38
+ await target.press("Enter");
39
+
40
+ expect(await page.evaluate(() => window.EVENT_EMITTED)).toBeTruthy();
41
+ });
42
+
43
+ test("should submit a form", async ({ page }) => {
44
+ // NOTE this requires in main.js you have form.onsubmit = (e) => { e.preventDefault() }
45
+ // setting this in evaluate did not work.. (maybe with page.evalute)
46
+
47
+ await page.getByTestId("a").fill("hello");
48
+ await page.getByTestId("submit").click();
49
+
50
+ const results = await page.evaluate(() => {
51
+ const form = document.querySelector("form");
52
+ if (!form) return null;
53
+
54
+ const formdata = new FormData(form);
55
+ return {
56
+ a: formdata.get("a"),
57
+ b: formdata.get("b"),
58
+ }
59
+ });
60
+
61
+ expect(results).not.toBe(null);
62
+ expect(results).toMatchObject({
63
+ a: "hello",
64
+ b: "value",
65
+ });
66
+ });
67
+ });
@@ -0,0 +1,110 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>VARIABLE_CLASS_NAME | experiment</title>
9
+
10
+ <link rel="icon" type="image/x-icon" href="favicon.ico">
11
+
12
+ <!-- Styles -->
13
+ <link rel="stylesheet" href="/theme.css" />
14
+ <link rel="stylesheet" href="style.css" />
15
+
16
+ <script defer src="main.js"></script>
17
+ </head>
18
+
19
+ <body>
20
+ <template>
21
+ <section class="showcase-section">
22
+ <h2 class="showcase-title">Brand</h2>
23
+ <div class="swatch-row">
24
+ <div class="swatch swatch--primary"><span class="swatch-label">--primary</span></div>
25
+ <div class="swatch swatch--secondary"><span class="swatch-label">--secondary</span></div>
26
+ <div class="swatch swatch--tertiary"><span class="swatch-label">--tertiary</span></div>
27
+ </div>
28
+ </section>
29
+
30
+ <section class="showcase-section">
31
+ <h2 class="showcase-title">Semantic</h2>
32
+ <div class="swatch-row">
33
+ <div class="swatch swatch--success"><span class="swatch-label">--success</span></div>
34
+ <div class="swatch swatch--info"><span class="swatch-label">--info</span></div>
35
+ <div class="swatch swatch--warning"><span class="swatch-label">--warning</span></div>
36
+ <div class="swatch swatch--error"><span class="swatch-label">--error</span></div>
37
+ </div>
38
+ </section>
39
+
40
+ <section class="showcase-section">
41
+ <h2 class="showcase-title">Background</h2>
42
+ <div class="swatch-row">
43
+ <div class="swatch swatch--background-lightest"><span class="swatch-label">--background-lightest</span></div>
44
+ <div class="swatch swatch--background-lighter"><span class="swatch-label">--background-lighter</span></div>
45
+ <div class="swatch swatch--background-light"><span class="swatch-label">--background-light</span></div>
46
+ <div class="swatch swatch--background"><span class="swatch-label">--background</span></div>
47
+ <div class="swatch swatch--background-dark"><span class="swatch-label">--background-dark</span></div>
48
+ <div class="swatch swatch--background-darker"><span class="swatch-label">--background-darker</span></div>
49
+ <div class="swatch swatch--background-darkest"><span class="swatch-label">--background-darkest</span></div>
50
+ </div>
51
+ </section>
52
+
53
+ <section class="showcase-section">
54
+ <h2 class="showcase-title">Foreground</h2>
55
+ <div class="swatch-row">
56
+ <div class="swatch swatch--foreground-lightest"><span class="swatch-label">--foreground-lightest</span></div>
57
+ <div class="swatch swatch--foreground-lighter"><span class="swatch-label">--foreground-lighter</span></div>
58
+ <div class="swatch swatch--foreground-light"><span class="swatch-label">--foreground-light</span></div>
59
+ <div class="swatch swatch--foreground"><span class="swatch-label">--foreground</span></div>
60
+ <div class="swatch swatch--foreground-dark"><span class="swatch-label">--foreground-dark</span></div>
61
+ <div class="swatch swatch--foreground-darker"><span class="swatch-label">--foreground-darker</span></div>
62
+ <div class="swatch swatch--foreground-darkest"><span class="swatch-label">--foreground-darkest</span></div>
63
+ </div>
64
+ </section>
65
+
66
+ <section class="showcase-section">
67
+ <h2 class="showcase-title">Spacing</h2>
68
+ <div class="space-list">
69
+ <div class="space-item space-item--1"><span class="space-label">--space-1</span></div>
70
+ <div class="space-item space-item--2"><span class="space-label">--space-2</span></div>
71
+ <div class="space-item space-item--3"><span class="space-label">--space-3</span></div>
72
+ <div class="space-item space-item--4"><span class="space-label">--space-4</span></div>
73
+ <div class="space-item space-item--5"><span class="space-label">--space-5</span></div>
74
+ <div class="space-item space-item--6"><span class="space-label">--space-6</span></div>
75
+ <div class="space-item space-item--7"><span class="space-label">--space-7</span></div>
76
+ <div class="space-item space-item--8"><span class="space-label">--space-8</span></div>
77
+ <div class="space-item space-item--9"><span class="space-label">--space-9</span></div>
78
+ <div class="space-item space-item--10"><span class="space-label">--space-10</span></div>
79
+ <div class="space-item space-item--12"><span class="space-label">--space-12</span></div>
80
+ <div class="space-item space-item--16"><span class="space-label">--space-16</span></div>
81
+ <div class="space-item space-item--20"><span class="space-label">--space-20</span></div>
82
+ </div>
83
+ </section>
84
+
85
+ <section class="showcase-section">
86
+ <h2 class="showcase-title">Radius</h2>
87
+ <div class="swatch-row">
88
+ <div class="radius-item radius-item--small"><span class="radius-label">--radius-small</span></div>
89
+ <div class="radius-item radius-item--medium"><span class="radius-label">--radius-medium</span></div>
90
+ <div class="radius-item radius-item--large"><span class="radius-label">--radius-large</span></div>
91
+ <div class="radius-item radius-item--full"><span class="radius-label">--radius-full</span></div>
92
+ </div>
93
+ </section>
94
+ </template>
95
+
96
+
97
+ <select>
98
+ <option value="system">system</option>
99
+ <option value="light">light</option>
100
+ <option value="dark">dark</option>
101
+ </select>
102
+
103
+ <div data-template>placeholder-becuase-my-html-parser-has-limits</div>
104
+
105
+ <div class="theme-opposite">
106
+ <div data-template>placeholder-becuase-my-html-parser-has-limits</div>
107
+ </div>
108
+ </body>
109
+
110
+ </html>
@@ -0,0 +1,14 @@
1
+ window.onload = () => {
2
+ document.querySelector("select").onchange = (e) => {
3
+ const { value } = e.currentTarget;
4
+ if (value === "system") return document.body.removeAttribute("data-theme");
5
+
6
+ document.body.setAttribute("data-theme", value);
7
+ }
8
+
9
+ const template = document.querySelector("template");
10
+ document.querySelectorAll("[data-template]").forEach(el => {
11
+ console.log(el)
12
+ el.replaceWith(template.content.cloneNode(true));
13
+ });
14
+ }