staticky 0.1.0

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 (87) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +11 -0
  4. data/CHANGELOG.md +5 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +163 -0
  7. data/Rakefile +12 -0
  8. data/bin/staticky +7 -0
  9. data/lib/staticky/builder.rb +62 -0
  10. data/lib/staticky/cli.rb +71 -0
  11. data/lib/staticky/container.rb +26 -0
  12. data/lib/staticky/deps.rb +5 -0
  13. data/lib/staticky/environment.rb +8 -0
  14. data/lib/staticky/error.rb +5 -0
  15. data/lib/staticky/filesystem.rb +29 -0
  16. data/lib/staticky/generator.rb +63 -0
  17. data/lib/staticky/phlex/view_helpers.rb +16 -0
  18. data/lib/staticky/resource.rb +25 -0
  19. data/lib/staticky/router/definition.rb +49 -0
  20. data/lib/staticky/router.rb +35 -0
  21. data/lib/staticky/server.rb +48 -0
  22. data/lib/staticky/version.rb +5 -0
  23. data/lib/staticky/view_context.rb +17 -0
  24. data/lib/staticky.rb +51 -0
  25. data/site_template/.dockerignore +4 -0
  26. data/site_template/.gitignore +11 -0
  27. data/site_template/.prettierrc +6 -0
  28. data/site_template/.rspec +1 -0
  29. data/site_template/.rubocop.yml +8 -0
  30. data/site_template/.ruby-version +1 -0
  31. data/site_template/Dockerfile +47 -0
  32. data/site_template/Gemfile +33 -0
  33. data/site_template/Procfile.dev +3 -0
  34. data/site_template/README.md +98 -0
  35. data/site_template/Rakefile +18 -0
  36. data/site_template/app/views/errors/not_found.rb +14 -0
  37. data/site_template/app/views/errors/service_error.rb +14 -0
  38. data/site_template/app/views/layouts/error.rb +13 -0
  39. data/site_template/app/views/layouts/head.rb +60 -0
  40. data/site_template/app/views/layouts/site.rb +37 -0
  41. data/site_template/app/views/pages/home.rb +22 -0
  42. data/site_template/app/views/ui/.keep +0 -0
  43. data/site_template/app/views/ui/footer.rb +21 -0
  44. data/site_template/app/views/ui/navbar.rb +19 -0
  45. data/site_template/bin/console +11 -0
  46. data/site_template/bin/dev +12 -0
  47. data/site_template/bin/lint +18 -0
  48. data/site_template/bin/staticky +28 -0
  49. data/site_template/config/boot.rb +15 -0
  50. data/site_template/config/routes.rb +9 -0
  51. data/site_template/config/site.erb +12 -0
  52. data/site_template/config/vite.json +17 -0
  53. data/site_template/config.ru +8 -0
  54. data/site_template/content/.keep +0 -0
  55. data/site_template/content/demo.md +12 -0
  56. data/site_template/frontend/controllers/.keep +0 -0
  57. data/site_template/frontend/controllers/index.js +3 -0
  58. data/site_template/frontend/entrypoints/application.js +8 -0
  59. data/site_template/frontend/images/.keep +0 -0
  60. data/site_template/frontend/images/hero.jpg +0 -0
  61. data/site_template/frontend/stylesheets/application.css +61 -0
  62. data/site_template/frontend/stylesheets/syntax.css +151 -0
  63. data/site_template/frontend/tailwindcss/variable_font_plugin.js +103 -0
  64. data/site_template/frontend/turbo_transitions.js +54 -0
  65. data/site_template/lib/component.rb +32 -0
  66. data/site_template/lib/icon.rb +39 -0
  67. data/site_template/lib/layout.rb +4 -0
  68. data/site_template/lib/page.rb +11 -0
  69. data/site_template/lib/vite_helpers.rb +38 -0
  70. data/site_template/logs/.keep +0 -0
  71. data/site_template/nginx.conf +59 -0
  72. data/site_template/package.json +31 -0
  73. data/site_template/postcss.config.js +6 -0
  74. data/site_template/public/android-chrome-192x192.png +0 -0
  75. data/site_template/public/android-chrome-512x512.png +0 -0
  76. data/site_template/public/apple-touch-icon.png +0 -0
  77. data/site_template/public/favicon-16x16.png +0 -0
  78. data/site_template/public/favicon-32x32.png +0 -0
  79. data/site_template/public/favicon.ico +0 -0
  80. data/site_template/public/robots.txt.erb +1 -0
  81. data/site_template/public/site.webmanifest.erb +19 -0
  82. data/site_template/public/sitemap.xml +0 -0
  83. data/site_template/spec/spec_helper.rb +30 -0
  84. data/site_template/spec/views/pages/home_spec.rb +9 -0
  85. data/site_template/tailwind.config.js +83 -0
  86. data/site_template/vite.config.ts +14 -0
  87. metadata +273 -0
File without changes
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Some Post
3
+ date: 2024-03-02
4
+ description: >-
5
+ This is a description in front matter
6
+ categories:
7
+ - Something
8
+ tags:
9
+ - A tag
10
+ ---
11
+
12
+ This is the start of a great blog post
File without changes
@@ -0,0 +1,3 @@
1
+ import { Application } from "@hotwired/stimulus"
2
+
3
+ window.Stimulus = Application.start()
@@ -0,0 +1,8 @@
1
+ import "@fontsource-variable/inter"
2
+ import "protos-stimulus"
3
+
4
+ import "~/stylesheets/application.css"
5
+ import "~/stylesheets/syntax.css"
6
+
7
+ import "~/controllers"
8
+ import "~/turbo_transitions.js"
File without changes
@@ -0,0 +1,61 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ @layer base {
6
+ :root {
7
+ --spacing-xs: clamp(0.5rem, 1%, 1rem);
8
+ --spacing-sm: clamp(0.75rem, 3%, 1.2rem);
9
+ --spacing-md: clamp(1.25rem, 6%, 2.5rem);
10
+ --spacing-lg: clamp(3rem, 12%, 6rem);
11
+ --spacing-xl: clamp(6rem, 24%, 12rem);
12
+ --spacing-gap-xs: clamp(0.5rem, 1vmax, 1rem);
13
+ --spacing-gap-sm: clamp(1rem, 3vmax, 1.5rem);
14
+ --spacing-gap-md: clamp(1.5rem, 6vmax, 3rem);
15
+ --spacing-gap-lg: clamp(3rem, 8vmax, 4rem);
16
+ --spacing-gap-xl: clamp(4rem, 12vmax, 6rem);
17
+ --shadow-color: var(--b3);
18
+ --box-shadow-sm:
19
+ 0.3px 0.5px 0.5px oklch(var(--shadow-color) / 0.49),
20
+ 0.5px 0.7px 0.8px -1.9px oklch(var(--shadow-color) / 0.38),
21
+ 1.3px 1.9px 2.2px -3.7px oklch(var(--shadow-color) / 0.27);
22
+ --box-shadow-md:
23
+ 0.3px 0.5px 0.5px oklch(var(--shadow-color) / 0.51),
24
+ 0.8px 1.2px 1.4px -1.2px oklch(var(--shadow-color) / 0.43),
25
+ 2.3px 3.6px 4px -2.5px oklch(var(--shadow-color) / 0.34),
26
+ 6.3px 9.6px 10.8px -3.7px oklch(var(--shadow-color) / 0.26);
27
+ --box-shadow-lg:
28
+ 0.3px 0.5px 0.5px oklch(var(--shadow-color) / 0.54),
29
+ 1.3px 1.9px 2.2px -0.6px oklch(var(--shadow-color) / 0.49),
30
+ 2.7px 4.1px 4.6px -1.2px oklch(var(--shadow-color) / 0.44),
31
+ 5.5px 8.4px 9.4px -1.9px oklch(var(--shadow-color) / 0.39),
32
+ 10.6px 16.1px 18.1px -2.5px oklch(var(--shadow-color) / 0.34),
33
+ 18.7px 28.4px 31.9px -3.1px oklch(var(--shadow-color) / 0.29),
34
+ 30.7px 46.6px 52.3px -3.7px oklch(var(--shadow-color) / 0.23);
35
+ --navbar-height: 64px;
36
+ --main-scene: calc(100vh - var(--navbar-height));
37
+ --viewport-padding: var(--spacing-md);
38
+ }
39
+
40
+ body {
41
+ @apply bg-base-400;
42
+ }
43
+
44
+ .prose pre {
45
+ @apply bg-base-300 border;
46
+ }
47
+
48
+ * {
49
+ scrollbar-color: theme("colors.base-200") theme("colors.base-300");
50
+ border-color: theme("colors.base-200");
51
+ }
52
+
53
+ /* Chrome, Edge, and Safari */
54
+ *::-webkit-scrollbar {
55
+ background: theme("colors.base-300")
56
+ }
57
+
58
+ *::-webkit-scrollbar-track {
59
+ background: theme("colors.base-200");
60
+ }
61
+ }
@@ -0,0 +1,151 @@
1
+ .highlight table td {
2
+ padding: 5px;
3
+ }
4
+
5
+ .highlight table pre {
6
+ margin: 0;
7
+ }
8
+
9
+ .highlight,
10
+ .highlight .w {
11
+ color: #abb2bf;
12
+ }
13
+
14
+ .highlight .err {
15
+ color: #282c34;
16
+ background-color: #e06c75;
17
+ }
18
+
19
+ .highlight .c,
20
+ .highlight .ch,
21
+ .highlight .cd,
22
+ .highlight .cm,
23
+ .highlight .cpf,
24
+ .highlight .c1,
25
+ .highlight .cs {
26
+ color: #545862;
27
+ }
28
+
29
+ .highlight .cp {
30
+ color: #e5c07b;
31
+ }
32
+
33
+ .highlight .nt {
34
+ color: #e5c07b;
35
+ }
36
+
37
+ .highlight .o,
38
+ .highlight .ow {
39
+ color: #abb2bf;
40
+ }
41
+
42
+ .highlight .p,
43
+ .highlight .pi {
44
+ color: #abb2bf;
45
+ }
46
+
47
+ .highlight .gi {
48
+ color: #98c379;
49
+ }
50
+
51
+ .highlight .gd {
52
+ color: #e06c75;
53
+ }
54
+
55
+ .highlight .gh {
56
+ color: #61afef;
57
+ background-color: #282c34;
58
+ font-weight: bold;
59
+ }
60
+
61
+ .highlight .k,
62
+ .highlight .kn,
63
+ .highlight .kp,
64
+ .highlight .kr,
65
+ .highlight .kv {
66
+ color: #c678dd;
67
+ }
68
+
69
+ .highlight .kc {
70
+ color: #d19a66;
71
+ }
72
+
73
+ .highlight .kt {
74
+ color: #d19a66;
75
+ }
76
+
77
+ .highlight .kd {
78
+ color: #d19a66;
79
+ }
80
+
81
+ .highlight .s,
82
+ .highlight .sb,
83
+ .highlight .sc,
84
+ .highlight .dl,
85
+ .highlight .sd,
86
+ .highlight .s2,
87
+ .highlight .sh,
88
+ .highlight .sx,
89
+ .highlight .s1 {
90
+ color: #98c379;
91
+ }
92
+
93
+ .highlight .sa {
94
+ color: #c678dd;
95
+ }
96
+
97
+ .highlight .sr {
98
+ color: #56b6c2;
99
+ }
100
+
101
+ .highlight .si {
102
+ color: #be5046;
103
+ }
104
+
105
+ .highlight .se {
106
+ color: #be5046;
107
+ }
108
+
109
+ .highlight .nn {
110
+ color: #e5c07b;
111
+ }
112
+
113
+ .highlight .nc {
114
+ color: #e5c07b;
115
+ }
116
+
117
+ .highlight .no {
118
+ color: #e5c07b;
119
+ }
120
+
121
+ .highlight .na {
122
+ color: #61afef;
123
+ }
124
+
125
+ .highlight .m,
126
+ .highlight .mb,
127
+ .highlight .mf,
128
+ .highlight .mh,
129
+ .highlight .mi,
130
+ .highlight .il,
131
+ .highlight .mo,
132
+ .highlight .mx {
133
+ color: #98c379;
134
+ }
135
+
136
+ .highlight .ss {
137
+ color: #98c379;
138
+ }
139
+
140
+ .highlight .nf {
141
+ color: #61afef;
142
+ }
143
+
144
+ .highlight .err {
145
+ color: #353b45;
146
+ background-color: #e06c75;
147
+ }
148
+
149
+ .highlight .c1 {
150
+ color: #969DA8;
151
+ }
@@ -0,0 +1,103 @@
1
+ // This is a custom plugin for Tailwind CSS to enable font-variation-settings
2
+ import plugin from "tailwindcss/plugin";
3
+
4
+ const fontVariationSettings = plugin(function ({ addUtilities }) {
5
+ addUtilities({
6
+ ".font-thin": {
7
+ fontWeight: 100,
8
+ fontVariationSettings: '"wght" 100',
9
+ "&.italic": {
10
+ fontVariationSettings: '"slnt" -10, "wght" 100',
11
+ },
12
+ },
13
+ });
14
+
15
+ addUtilities({
16
+ ".font-extralight": {
17
+ fontWeight: 200,
18
+ fontVariationSettings: '"wght" 200',
19
+ "&.italic": {
20
+ fontVariationSettings: '"slnt" -10, "wght" 200',
21
+ },
22
+ },
23
+ });
24
+
25
+ addUtilities({
26
+ ".font-light": {
27
+ fontWeight: 300,
28
+ fontVariationSettings: '"wght" 300',
29
+ "&.italic": {
30
+ fontVariationSettings: '"slnt" -10, "wght" 300',
31
+ },
32
+ },
33
+ });
34
+
35
+ addUtilities({
36
+ ".font-normal": {
37
+ fontWeight: 400,
38
+ fontVariationSettings: '"wght" 400',
39
+ "&.italic": {
40
+ fontVariationSettings: '"slnt" -10, "wght" 400',
41
+ },
42
+ },
43
+ });
44
+
45
+ addUtilities({
46
+ ".font-medium": {
47
+ fontWeight: 500,
48
+ fontVariationSettings: '"wght" 500',
49
+ "&.italic": {
50
+ fontVariationSettings: '"slnt" -10, "wght" 500',
51
+ },
52
+ },
53
+ });
54
+
55
+ addUtilities({
56
+ ".font-semibold": {
57
+ fontWeight: 600,
58
+ fontVariationSettings: '"wght" 600',
59
+ "&.italic": {
60
+ fontVariationSettings: '"slnt" -10, "wght" 600',
61
+ },
62
+ },
63
+ });
64
+
65
+ addUtilities({
66
+ ".font-bold": {
67
+ fontWeight: 700,
68
+ fontVariationSettings: '"wght" 700',
69
+ "&.italic": {
70
+ fontVariationSettings: '"slnt" -10, "wght" 700',
71
+ },
72
+ },
73
+ });
74
+
75
+ addUtilities({
76
+ ".font-extrabold": {
77
+ fontWeight: 800,
78
+ fontVariationSettings: '"wght" 800',
79
+ "&.italic": {
80
+ fontVariationSettings: '"slnt" -10, "wght" 800',
81
+ },
82
+ },
83
+ });
84
+
85
+ addUtilities({
86
+ ".font-black": {
87
+ fontWeight: 900,
88
+ fontVariationSettings: '"wght" 900',
89
+ "&.italic": {
90
+ fontVariationSettings: '"slnt" -10, "wght" 900',
91
+ },
92
+ },
93
+ });
94
+
95
+ addUtilities({
96
+ ".italic": {
97
+ fontStyle: "italic",
98
+ fontVariationSettings: '"slnt" -10',
99
+ },
100
+ });
101
+ });
102
+
103
+ export default fontVariationSettings;
@@ -0,0 +1,54 @@
1
+ document.addEventListener("turbo:visit", () => {
2
+ let main = document.querySelector("main");
3
+ if (main.dataset.turboTransition == "false") return;
4
+
5
+ let [movement, scale] = ["15px", "0.99"];
6
+
7
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
8
+ [movement, scale] = ["7px", "1"];
9
+ }
10
+
11
+ main.style.transformOrigin = "50% 0%";
12
+ main.dataset.animatingOut = true;
13
+
14
+ main.animate(
15
+ [
16
+ { opacity: 1, transform: "translateY(0px) scale(1)" },
17
+ { opacity: 0, transform: `translateY(${movement}) scale(${scale})` },
18
+ ],
19
+ {
20
+ duration: 300,
21
+ easing: "cubic-bezier(0.45, 0, 0.55, 1)",
22
+ fill: "forwards",
23
+ },
24
+ );
25
+
26
+ Promise.all(main.getAnimations().map((animation) => animation.finished)).then(
27
+ () => {
28
+ if (main.dataset.animatingOut) main.style.visibility = "hidden";
29
+ },
30
+ );
31
+ });
32
+
33
+ document.addEventListener("turbo:load", () => {
34
+ let main = document.querySelector("main");
35
+ if (main.dataset.turboTransition == "false") return;
36
+
37
+ let [movement, scale] = ["-10px", "0.99"];
38
+
39
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
40
+ [movement, scale] = ["-5px", "1"];
41
+ }
42
+
43
+ main.style.visibility = "visible";
44
+ main.style.transformOrigin = "50% 0%";
45
+ delete main.dataset.animatingOut;
46
+
47
+ main.animate(
48
+ [
49
+ { opacity: 0, transform: `translateY(${movement}) scale(${scale})` },
50
+ { opacity: 1, transform: "translateY(0px) scale(1)" },
51
+ ],
52
+ { duration: 150, easing: "cubic-bezier(0.45, 0, 0.55, 1)" },
53
+ );
54
+ });
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "staticky/phlex/view_helpers"
4
+
5
+ class Component < Protos::Component
6
+ include ViteHelpers
7
+
8
+ class NullViewContext
9
+ def root? = true
10
+ def current_path = "/"
11
+ end
12
+
13
+ def helpers
14
+ @_view_context ||= NullViewContext.new # rubocop:disable Naming/MemoizedInstanceVariableName
15
+ end
16
+
17
+ def asset_path(...)
18
+ vite_asset_path(...)
19
+ end
20
+
21
+ def image_tag(path, alt:, **)
22
+ img(src: asset_path(path), alt:, **)
23
+ end
24
+
25
+ def icon(...)
26
+ render Icon.new(...)
27
+ end
28
+
29
+ def inline_link(text, url)
30
+ render Protos::Typography::InlineLink.new(href: url) { text }
31
+ end
32
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Icon < Component
4
+ param :name, reader: false
5
+ option :variant, reader: false, default: -> {}
6
+ option :size, default: -> { :md }, reader: false
7
+
8
+ def template
9
+ div(**attrs) do
10
+ render Protos::Icon.heroicon(@name, variant:)
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def variant
17
+ @variant || {
18
+ xs: :micro,
19
+ sm: :mini,
20
+ md: :solid,
21
+ lg: :solid
22
+ }.fetch(@size)
23
+ end
24
+
25
+ def size
26
+ {
27
+ xs: "w-3 h-3",
28
+ sm: "w-4 h-4",
29
+ md: "w-5 h-5",
30
+ lg: "w-7 h-7"
31
+ }.fetch(@size)
32
+ end
33
+
34
+ def theme
35
+ {
36
+ container: tokens(size, "opacity-90", "inline-block")
37
+ }
38
+ end
39
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Layout < Component
4
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Page < Component
4
+ # Example of a nested layout
5
+
6
+ def around_template(&block)
7
+ render Layouts::Site.new do |layout|
8
+ layout.with_content(&block)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViteHelpers
4
+ def vite_client_tag
5
+ src = vite_manifest.vite_client_src || "/vite-dev/@vite/client"
6
+ script(src:, type: :module)
7
+ end
8
+
9
+ def vite_javascript_tag(
10
+ *names,
11
+ type: :module,
12
+ asset_type: :javascript,
13
+ crossorigin: :anonymous,
14
+ **options
15
+ )
16
+ entries = vite_manifest.resolve_entries(*names, type: asset_type)
17
+ entries.fetch(:scripts).each do |src|
18
+ script(
19
+ src:,
20
+ type:,
21
+ crossorigin:,
22
+ extname: :js,
23
+ **options
24
+ )
25
+ end
26
+ entries.fetch(:stylesheets).each do |href|
27
+ link(href:, rel: :stylesheet, type: "text/css")
28
+ end
29
+ end
30
+
31
+ def vite_manifest
32
+ ViteRuby.instance.manifest
33
+ end
34
+
35
+ def vite_asset_path(name, **)
36
+ vite_manifest.path_for(name, **)
37
+ end
38
+ end
File without changes
@@ -0,0 +1,59 @@
1
+ worker_processes 1;
2
+ error_log stderr;
3
+ pid nginx.pid;
4
+
5
+ events {
6
+ worker_connections 768;
7
+ }
8
+
9
+ http {
10
+ types_hash_max_size 2048;
11
+ include mime.types;
12
+ charset UTF-8;
13
+ gzip on;
14
+ gzip_comp_level 6;
15
+ gzip_min_length 256;
16
+ gzip_types text/plain text/css application/json application/javascript application/xml;
17
+ gzip_proxied any;
18
+ gzip_vary on;
19
+
20
+ server {
21
+ listen 80 default_server;
22
+ listen [::]:80 default_server;
23
+ server_name _;
24
+ root /usr/share/nginx/html;
25
+ index index.html index.htm;
26
+ port_in_redirect off;
27
+ add_header X-Content-Type-Options "nosniff";
28
+
29
+ location / {
30
+ try_files $uri $uri.html =404;
31
+ expires 1h;
32
+ }
33
+
34
+ location ~* \.(?:ico|gif|jpe?g|png|svg|webp)$ {
35
+ expires 31536000s;
36
+ add_header Cache-Control "public, max-age=31536000, immutable";
37
+ }
38
+
39
+ location ~* \.(css|js)$ {
40
+ expires 31536000s;
41
+ add_header Cache-Control "public, max-age=31536000, immutable";
42
+ charset utf-8;
43
+ gzip_static on;
44
+ }
45
+
46
+ location ~* \.woff2$ {
47
+ expires 31536000s;
48
+ add_header Cache-Control "public, max-age=31536000, immutable";
49
+ types { font/woff2 woff2; }
50
+ gzip off;
51
+ add_header Vary Accept-Encoding;
52
+ }
53
+
54
+ location ~* \.webmanifest$ {
55
+ charset off;
56
+ gzip off;
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "static-starter",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "type": "module",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "heroku-postbuild": "bin/rake site:build"
9
+ },
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "ISC",
13
+ "dependencies": {
14
+ "@fontsource-variable/inter": "^5.0.20",
15
+ "@hotwired/stimulus": "^3.2.2",
16
+ "@hotwired/turbo": "^8.0.5",
17
+ "@tailwindcss/typography": "^0.5.14",
18
+ "autoprefixer": "^10.4.20",
19
+ "daisyui": "^4.12.10",
20
+ "protos-stimulus": "^0.0.3",
21
+ "postcss": "^8.4.41",
22
+ "tailwindcss": "^3.4.10",
23
+ "vite": "^5.4.0",
24
+ "vite-plugin-ruby": "^5.0.0",
25
+ "vite-plugin-full-reload": "^1.2.0"
26
+ },
27
+ "optionalDependencies": {
28
+ "@rollup/rollup-linux-arm64-musl": "4.20.0"
29
+ },
30
+ "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
31
+ }
@@ -0,0 +1,6 @@
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
Binary file
@@ -0,0 +1 @@
1
+ Sitemap: <%= URI.join(url, "sitemap.xml") %>
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": <%= title %>,
3
+ "short_name": <%= title %>,
4
+ "icons": [
5
+ {
6
+ "src":"/android-chrome-192x192.png",
7
+ "sizes":"192x192",
8
+ "type":"image/png"
9
+ },
10
+ {
11
+ "src":"/android-chrome-512x512.png",
12
+ "sizes":"512x512",
13
+ "type":"image/png"
14
+ }
15
+ ],
16
+ "theme_color":"#61afef",
17
+ "background_color":"#1e2227",
18
+ "display":"standalone"
19
+ }
File without changes