create-lt-adventure 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 (125) hide show
  1. package/README.md +79 -0
  2. package/addons/github-workflow/addon.json +5 -0
  3. package/addons/github-workflow/main.yml +48 -0
  4. package/addons/github-workflow/setup.ts +112 -0
  5. package/dist/bin.d.ts +3 -0
  6. package/dist/bin.d.ts.map +1 -0
  7. package/dist/bin.js +283 -0
  8. package/dist/bin.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +3 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/options.d.ts +21 -0
  14. package/dist/options.d.ts.map +1 -0
  15. package/dist/options.js +66 -0
  16. package/dist/options.js.map +1 -0
  17. package/package.json +66 -0
  18. package/templates/vite/.env.example +2 -0
  19. package/templates/vite/README.md +0 -0
  20. package/templates/vite/assets/journals/Read-Aloud_Corner.webp +0 -0
  21. package/templates/vite/assets/journals/Sidebar_Frame_Brown.webp +0 -0
  22. package/templates/vite/assets/journals/Sidebar_Frame_Green.webp +0 -0
  23. package/templates/vite/assets/journals/borders/panel-border-000.webp +0 -0
  24. package/templates/vite/assets/journals/borders/panel-border-001.webp +0 -0
  25. package/templates/vite/assets/journals/borders/panel-border-002.webp +0 -0
  26. package/templates/vite/assets/journals/borders/panel-border-003.webp +0 -0
  27. package/templates/vite/assets/journals/borders/panel-border-004.webp +0 -0
  28. package/templates/vite/assets/journals/borders/panel-border-005.webp +0 -0
  29. package/templates/vite/assets/journals/borders/panel-border-006.webp +0 -0
  30. package/templates/vite/assets/journals/borders/panel-border-007.webp +0 -0
  31. package/templates/vite/assets/journals/borders/panel-border-008.webp +0 -0
  32. package/templates/vite/assets/journals/borders/panel-border-009.webp +0 -0
  33. package/templates/vite/assets/journals/borders/panel-border-010.webp +0 -0
  34. package/templates/vite/assets/journals/borders/panel-border-011.webp +0 -0
  35. package/templates/vite/assets/journals/borders/panel-border-012.webp +0 -0
  36. package/templates/vite/assets/journals/borders/panel-border-013.webp +0 -0
  37. package/templates/vite/assets/journals/borders/panel-border-014.webp +0 -0
  38. package/templates/vite/assets/journals/borders/panel-border-015.webp +0 -0
  39. package/templates/vite/assets/journals/borders/panel-border-016.webp +0 -0
  40. package/templates/vite/assets/journals/borders/panel-border-017.webp +0 -0
  41. package/templates/vite/assets/journals/borders/panel-border-018.webp +0 -0
  42. package/templates/vite/assets/journals/borders/panel-border-019.webp +0 -0
  43. package/templates/vite/assets/journals/borders/panel-border-020.webp +0 -0
  44. package/templates/vite/assets/journals/borders/panel-border-021.webp +0 -0
  45. package/templates/vite/assets/journals/borders/panel-border-022.webp +0 -0
  46. package/templates/vite/assets/journals/borders/panel-border-023.webp +0 -0
  47. package/templates/vite/assets/journals/borders/panel-border-024.webp +0 -0
  48. package/templates/vite/assets/journals/borders/panel-border-025.webp +0 -0
  49. package/templates/vite/assets/journals/borders/panel-border-026.webp +0 -0
  50. package/templates/vite/assets/journals/borders/panel-border-027.webp +0 -0
  51. package/templates/vite/assets/journals/borders/panel-border-028.webp +0 -0
  52. package/templates/vite/assets/journals/borders/panel-border-029.webp +0 -0
  53. package/templates/vite/assets/journals/borders/panel-border-030.webp +0 -0
  54. package/templates/vite/assets/journals/borders/panel-border-031.webp +0 -0
  55. package/templates/vite/assets/journals/fonts/Candara.ttf +0 -0
  56. package/templates/vite/assets/journals/fonts/CoinageCapsKrugerGray.ttf +0 -0
  57. package/templates/vite/assets/journals/fonts/GeizerModifiedO.otf +0 -0
  58. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_Bold.otf +0 -0
  59. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_BoldItalic.otf +0 -0
  60. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_Italic.otf +0 -0
  61. package/templates/vite/assets/journals/fonts/Kings Caslon/Kings_Caslon_Regular.otf +0 -0
  62. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_Bold.otf +0 -0
  63. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_BoldItalic.otf +0 -0
  64. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_Light.otf +0 -0
  65. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_LightItalic.otf +0 -0
  66. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_Medium.otf +0 -0
  67. package/templates/vite/assets/journals/fonts/Modesto/ModestoText_MediumItalic.otf +0 -0
  68. package/templates/vite/assets/journals/fonts/Modesto/Modesto_Condensed_Bold.otf +0 -0
  69. package/templates/vite/assets/journals/fonts/Modesto/Modesto_Condensed_Light.otf +0 -0
  70. package/templates/vite/assets/journals/fonts/Modesto/Modesto_Condensed_Regular.otf +0 -0
  71. package/templates/vite/assets/journals/headers/bg-header-length-01.svg +61 -0
  72. package/templates/vite/assets/journals/headers/bg-header-length-02.svg +59 -0
  73. package/templates/vite/assets/journals/headers/bg-header-length-03.svg +66 -0
  74. package/templates/vite/assets/journals/headers/bg-header-length-04.svg +58 -0
  75. package/templates/vite/assets/journals/headers/bg-header-length-05.svg +75 -0
  76. package/templates/vite/assets/journals/headers/bg-header-length-06.svg +73 -0
  77. package/templates/vite/assets/journals/headers/bg-header-length-07.svg +69 -0
  78. package/templates/vite/assets/journals/masks/flipped/mask-brush-02.webp +0 -0
  79. package/templates/vite/assets/journals/masks/flipped/mask-brush-03.webp +0 -0
  80. package/templates/vite/assets/journals/masks/flipped/mask-brush-04.webp +0 -0
  81. package/templates/vite/assets/journals/masks/flipped/mask-brush-05.webp +0 -0
  82. package/templates/vite/assets/journals/masks/flipped/mask-brush-06.webp +0 -0
  83. package/templates/vite/assets/journals/masks/flipped/mask-hard-01.webp +0 -0
  84. package/templates/vite/assets/journals/masks/flipped/mask-hard-02.webp +0 -0
  85. package/templates/vite/assets/journals/masks/flipped/mask-hard-03.webp +0 -0
  86. package/templates/vite/assets/journals/masks/flipped/mask-hard-04.webp +0 -0
  87. package/templates/vite/assets/journals/masks/flipped/mask-hard-05.webp +0 -0
  88. package/templates/vite/assets/journals/masks/flipped/mask-hard-06.webp +0 -0
  89. package/templates/vite/assets/journals/masks/flipped/mask-soft-01.webp +0 -0
  90. package/templates/vite/assets/journals/masks/flipped/mask-soft-02.webp +0 -0
  91. package/templates/vite/assets/journals/masks/flipped/mask-soft-03.webp +0 -0
  92. package/templates/vite/assets/journals/masks/flipped/mask-soft-04.webp +0 -0
  93. package/templates/vite/assets/journals/masks/flipped/mask-soft-05.webp +0 -0
  94. package/templates/vite/assets/journals/masks/flipped/mask-soft-06.webp +0 -0
  95. package/templates/vite/assets/journals/masks/mask-brush-02.webp +0 -0
  96. package/templates/vite/assets/journals/masks/mask-brush-03.webp +0 -0
  97. package/templates/vite/assets/journals/masks/mask-brush-04.webp +0 -0
  98. package/templates/vite/assets/journals/masks/mask-brush-05.webp +0 -0
  99. package/templates/vite/assets/journals/masks/mask-brush-06.webp +0 -0
  100. package/templates/vite/assets/journals/masks/mask-hard-01.webp +0 -0
  101. package/templates/vite/assets/journals/masks/mask-hard-02.webp +0 -0
  102. package/templates/vite/assets/journals/masks/mask-hard-03.webp +0 -0
  103. package/templates/vite/assets/journals/masks/mask-hard-04.webp +0 -0
  104. package/templates/vite/assets/journals/masks/mask-hard-05.webp +0 -0
  105. package/templates/vite/assets/journals/masks/mask-hard-06.webp +0 -0
  106. package/templates/vite/assets/journals/masks/mask-soft-01.webp +0 -0
  107. package/templates/vite/assets/journals/masks/mask-soft-02.webp +0 -0
  108. package/templates/vite/assets/journals/masks/mask-soft-03.webp +0 -0
  109. package/templates/vite/assets/journals/masks/mask-soft-04.webp +0 -0
  110. package/templates/vite/assets/journals/masks/mask-soft-05.webp +0 -0
  111. package/templates/vite/assets/journals/masks/mask-soft-06.webp +0 -0
  112. package/templates/vite/assets/setup.webp +0 -0
  113. package/templates/vite/bun.lock +983 -0
  114. package/templates/vite/lang/en.json +1 -0
  115. package/templates/vite/module.json +36 -0
  116. package/templates/vite/package.json +29 -0
  117. package/templates/vite/scripts/extractPacks.mjs +50 -0
  118. package/templates/vite/scripts/onCreate.mjs +14 -0
  119. package/templates/vite/scripts/symlink.mjs +79 -0
  120. package/templates/vite/src/adventureSheet/index.js +498 -0
  121. package/templates/vite/src/index.js +5 -0
  122. package/templates/vite/src/misc/fonts.js +50 -0
  123. package/templates/vite/src/misc/prosemirror.js +47 -0
  124. package/templates/vite/src/module.css +284 -0
  125. package/templates/vite/vite.config.ts +110 -0
@@ -0,0 +1,5 @@
1
+ import "./module.css";
2
+ import "./misc/fonts.js"
3
+ import "./misc/prosemirror.js"
4
+
5
+ Hooks.on("ready", () => import("./adventureSheet"))
@@ -0,0 +1,50 @@
1
+ import { id } from "moduleJSON";
2
+
3
+ CONFIG.fontDefinitions["Candara"] = {
4
+ editor: true,
5
+ fonts: [
6
+ { urls: [`modules/${id}/assets/journals/fonts/Candara.ttf`] }
7
+ ]
8
+ };
9
+
10
+ CONFIG.fontDefinitions["Coinage Caps Kruger Gray"] = {
11
+ editor: true,
12
+ fonts: [
13
+ { urls: [`modules/${id}/assets/journals/fonts/CoinageCapsKrugerGray.ttf`] }
14
+ ]
15
+ };
16
+
17
+ CONFIG.fontDefinitions["Geizer"] = {
18
+ editor: true,
19
+ fonts: [
20
+ { urls: [`modules/${id}/assets/journals/fonts/GeizerModifiedO.otf`] }
21
+ ]
22
+ };
23
+
24
+ CONFIG.fontDefinitions["Kings Caslon"] = {
25
+ editor: true,
26
+ fonts: [
27
+ { urls: [`modules/${id}/assets/journals/fonts/Kings Caslon/Kings_Caslon_Regular.otf`] },
28
+ { urls: [`modules/${id}/assets/journals/fonts/Kings Caslon/Kings_Caslon_Bold.otf`], weight: 700 },
29
+ { urls: [`modules/${id}/assets/journals/fonts/Kings Caslon/Kings_Caslon_Italic.otf`], style: "italic" },
30
+ { urls: [`modules/${id}/assets/journals/fonts/Kings Caslon/Kings_Caslon_BoldItalic.otf`], style: "italic", weight: 700 }
31
+ ]
32
+ };
33
+
34
+ CONFIG.fontDefinitions["Modesto"] = {
35
+ editor: true,
36
+ fonts: [
37
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_Regular.otf`] },
38
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_Bold.otf`], weight: 700 },
39
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_Light.otf`], weight: 300 },
40
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_Italic.otf`], style: "italic" },
41
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_LightItalic.otf`], style: "italic", weight: 300 },
42
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_MediumItalic.otf`], style: "italic", weight: 500 },
43
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_Medium.otf`], weight: 500 },
44
+ { urls: [`modules/${id}/assets/journals/fonts/Modesto/ModestoText_BoldItalic.otf`], style: "italic", weight: 700 }
45
+ ]
46
+ };
47
+
48
+ if (import.meta.hot) {
49
+ import.meta.hot.accept();
50
+ }
@@ -0,0 +1,47 @@
1
+ import { id, title } from "moduleJSON";
2
+
3
+ // https://github.com/foundryvtt/pf2e/blob/master/src/scripts/hooks/get-prosemirror-menu-dropdowns.ts
4
+ Hooks.on("getProseMirrorMenuDropDowns", (menu, dropdowns) => {
5
+ const toggleMark = foundry.prosemirror.commands.toggleMark;
6
+ const wrapIn = foundry.prosemirror.commands.wrapIn;
7
+ if ("format" in dropdowns) {
8
+ dropdowns.format.entries.push({
9
+ action: `${id}`,
10
+ title,
11
+ children: [
12
+ {
13
+ action: "green-check",
14
+ class: `${id} Checks-and-Saves`,
15
+ title: "Checks and Saves",
16
+ mark: menu.schema.marks.span,
17
+ attrs: { _preserve: { class: `${id} Checks-and-Saves` } },
18
+ priority: 1,
19
+ cmd: toggleMark(menu.schema.marks.span, {
20
+ _preserve: { class: `${id} Checks-and-Saves` },
21
+ }),
22
+ },
23
+ {
24
+ action: "sidebar",
25
+ class: "sidebar",
26
+ title: "Sidebar",
27
+ node: menu.schema.nodes.section,
28
+ attrs: { _preserve: { class: `${id} sidebar right` } },
29
+ priority: 1,
30
+ cmd: () => {
31
+ menu._toggleBlock(menu.schema.nodes.section, wrapIn, {
32
+ attrs: { _preserve: { class: `${id} sidebar right` } },
33
+ });
34
+ return true;
35
+ },
36
+ },
37
+ ],
38
+ });
39
+ }
40
+ });
41
+
42
+ if (import.meta.hot) {
43
+ import.meta.hot.accept()
44
+ import.meta.hot.dispose(() => {
45
+ Hooks.off(hook)
46
+ });
47
+ }
@@ -0,0 +1,284 @@
1
+ .((moduleId))-journal .journal-entry-content .sidebar,
2
+ .editor-content .((moduleId)).sidebar {
3
+ /* font-family: "Candara"; */
4
+
5
+ padding: 0.75rem;
6
+ margin-block: 1.25rem;
7
+ width: var(--sidebarWidth, 50%);
8
+ float: right;
9
+
10
+ .themed.theme-light &,
11
+ body.theme-light & {
12
+ background: oklch(0.393 0.095 152.535 / 0.05);
13
+ }
14
+
15
+ .themed.theme-dark &,
16
+ body.theme-dark & {
17
+ background: oklch(0.393 0.095 152.535 / 0.2);
18
+ }
19
+
20
+ margin-right: 0.25rem;
21
+ margin-left: 1rem;
22
+
23
+ &.left {
24
+ margin-left: 0rem;
25
+ margin-right: 1.5rem;
26
+ float: left;
27
+ }
28
+
29
+ & h1,
30
+ & h2,
31
+ & h3,
32
+ & h4 {
33
+ color: hsl(179, 100%, 10%);
34
+ .themed.theme-dark & {
35
+ color: hsl(120, 25%, 90%);
36
+ }
37
+ font-family: "Modesto Condensed";
38
+ font-size: 1.5rem;
39
+ font-weight: 700;
40
+ text-align: center;
41
+ border-color: none;
42
+ text-decoration-line: none;
43
+ padding: 0px;
44
+ margin: 0px;
45
+ }
46
+
47
+ border-image-slice: 50 75 50 75;
48
+ border-image-width: 20px 26px 20px 26px;
49
+ border-image-outset: 19px 0px 19px 0px;
50
+ border-image-repeat: round round;
51
+ border-image-source: url("modules/((moduleId))/assets/journals/Sidebar_Frame_Green.webp");
52
+
53
+ &.brown {
54
+ border-image-source: url("modules/((moduleId))/assets/journals/Sidebar_Frame_Brown.webp");
55
+ }
56
+ }
57
+
58
+ .((moduleId))-journal .journal-entry-content {
59
+ /* font-family: "Kings Caslon"; */
60
+ text-align: justify;
61
+
62
+ blockquote,
63
+ .readaloud {
64
+ /* font-family: "Candara"; */
65
+
66
+ & > p + p {
67
+ text-indent: 0px;
68
+ }
69
+
70
+ font-style: initial;
71
+ padding: 0.5rem;
72
+ margin: 0.5rem;
73
+ background: hsl(25, 30%, 75%, 50%);
74
+ position: relative;
75
+ z-index: 0;
76
+
77
+ border-image-slice: 30 30 30 30;
78
+ border-image-width: 12px 12px 12px 12px;
79
+ border-image-outset: 6px 6px 6px 6px;
80
+ border-image-repeat: stretch stretch;
81
+ border-image-source: url("modules/((moduleId))/assets/journals/Read-Aloud_Corner.webp");
82
+
83
+ .themed.theme-dark & {
84
+ background: hsl(25, 30%, 75%, 15%);
85
+ }
86
+
87
+ em {
88
+ font-style: italic;
89
+ }
90
+
91
+ h3 {
92
+ border: none;
93
+ }
94
+
95
+ &.limited {
96
+ width: min-content;
97
+ white-space: nowrap;
98
+ }
99
+ }
100
+
101
+ .heliana-style-bg {
102
+ background-repeat: no-repeat;
103
+ background-size: auto 100%;
104
+ background-position: center left;
105
+ z-index: 31;
106
+ padding-top: 0.25rem;
107
+ padding-bottom: 0.1rem;
108
+ padding-inline: 0.25rem;
109
+
110
+ & > * {
111
+ width: min-content;
112
+ white-space: nowrap;
113
+ color: white !important;
114
+ height: 2rem;
115
+ border-bottom: 0;
116
+ padding-left: 0.4rem;
117
+ padding-right: 1.5rem;
118
+ margin-bottom: 0;
119
+ }
120
+ }
121
+
122
+ .mask {
123
+ --mask-size: 40%;
124
+ border: none;
125
+ mask-image: url("modules/((moduleId))/assets/journals/masks/mask-soft-04.webp"),
126
+ linear-gradient(white 0 0);
127
+ mask-composite: add;
128
+ mask-mode: luminance;
129
+ mask-position: top right, bottom;
130
+ mask-size: 101% var(--mask-size), 101% calc(101% - var(--mask-size));
131
+ mask-repeat: no-repeat;
132
+
133
+ &.upside-down {
134
+ transform: scaleY(-1);
135
+ }
136
+ }
137
+
138
+ .scrollable div.scenery {
139
+ position: sticky;
140
+ display: relative;
141
+ top: 0;
142
+ transition: opacity 300ms ease-out;
143
+ margin-bottom: -2rem;
144
+ margin-inline: 0px;
145
+ scale: 101%;
146
+
147
+ &.upside-down > * {
148
+ width: 100%;
149
+ transform: scaleY(-1);
150
+ }
151
+
152
+ & > header {
153
+ --height: 10rem;
154
+ position: absolute;
155
+ width: 100%;
156
+ height: var(--height);
157
+ bottom: calc(50% - var(--height) / 2);
158
+
159
+ text-align: center;
160
+ font-size: 2rem;
161
+ line-height: var(--height);
162
+ font-family: "Coinage Caps Kruger Gray";
163
+ color: white;
164
+
165
+ background: rgba(0, 0, 0, 66%);
166
+
167
+ border: none;
168
+ mask-image: url("modules/((moduleId))/assets/journals/masks/mask-soft-04.webp"),
169
+ url("modules/((moduleId))/assets/journals/masks/flipped/mask-soft-04.webp");
170
+ mask-composite: add;
171
+ mask-mode: luminance;
172
+ mask-position: top, bottom;
173
+ mask-size: 100% 51%, 100% 50%;
174
+ mask-repeat: no-repeat;
175
+ }
176
+
177
+ & img {
178
+ border-top-left-radius: 0;
179
+ border-top-right-radius: 0;
180
+ cursor: pointer;
181
+ }
182
+ }
183
+
184
+ .journal-entry-pages {
185
+ margin: 0;
186
+ padding-right: 0;
187
+ & > * {
188
+ margin-inline: 16px;
189
+ }
190
+ }
191
+ }
192
+
193
+ body.theme-light .((moduleId)).Checks-and-Saves {
194
+ font-weight: bold;
195
+ color: #074e4b;
196
+ }
197
+
198
+ body.theme-dark .((moduleId)).Checks-and-Saves {
199
+ color: hsl(69 58 47);
200
+ }
201
+
202
+ .themed.theme-dark .((moduleId)).Checks-and-Saves {
203
+ color: hsl(69 58 47);
204
+ }
205
+
206
+ .themed.theme-light .((moduleId)).Checks-and-Saves {
207
+ font-weight: bold;
208
+ color: #074e4b;
209
+ }
210
+
211
+ .((moduleId))-journal.application {
212
+ &:not(.minimized) {
213
+ --ltBorderCut: 32;
214
+ --ltBorderOutset: 32;
215
+ corner-top-left-shape: notch;
216
+ corner-top-right-shape: notch;
217
+ corner-bottom-left-shape: notch;
218
+ border-radius: var(--ltBorderRadius, 15px);
219
+ border-bottom-right-radius: 0;
220
+ overflow: visible;
221
+
222
+ &::after {
223
+ content: "";
224
+ position: absolute;
225
+ top: 50%;
226
+ left: 50%;
227
+ transform: translate(-50%, -50%);
228
+ width: calc(100% + var(--ltBorderSizeMod, 0px));
229
+ height: calc(100% + var(--ltBorderSizeMod, 0px));
230
+ border-image: var(
231
+ --urlBorderImage,
232
+ url("modules/((moduleId))/assets/journals/borders/panel-border-026.webp")
233
+ )
234
+ var(--ltBorderCut) var(--ltBorderCut) var(--ltBorderCut)
235
+ var(--ltBorderCut) fill / calc(1px * var(--ltBorderOutset))
236
+ calc(1px * var(--ltBorderOutset)) calc(1px * var(--ltBorderOutset))
237
+ calc(1px * var(--ltBorderOutset));
238
+ pointer-events: none;
239
+ }
240
+ }
241
+
242
+ &:not(.minimized) .window-header {
243
+ padding: 0 36px;
244
+ }
245
+
246
+ & footer {
247
+ margin-left: 2.25rem;
248
+ padding-inline: 0;
249
+ padding-block: 0.5rem 0.75rem;
250
+ }
251
+
252
+ &.sheet.journal-entry .journal-entry-page + .journal-entry-page {
253
+ margin-top: 0.5rem;
254
+ }
255
+
256
+ & aside.sidebar {
257
+ position: relative;
258
+
259
+ &::before {
260
+ z-index: -100;
261
+ content: "";
262
+ position: absolute;
263
+
264
+ margin-top: -2rem;
265
+ height: 100%;
266
+ width: 100%;
267
+
268
+ opacity: 33%;
269
+ background-image: var(--sidebarImage);
270
+ background-size: cover;
271
+
272
+ --mask-size: 10%;
273
+ mask-image: url("modules/((moduleId))/assets/journals/masks/mask-hard-06.webp"),
274
+ linear-gradient(white 0 0),
275
+ url("modules/((moduleId))/assets/journals/masks/flipped/mask-soft-04.webp");
276
+ mask-composite: add;
277
+ mask-mode: luminance;
278
+ mask-position: top, center, bottom;
279
+ mask-size: 101% var(--mask-size), 100% calc(100% - 2 * var(--mask-size)),
280
+ 101% var(--mask-size);
281
+ mask-repeat: no-repeat;
282
+ }
283
+ }
284
+ }
@@ -0,0 +1,110 @@
1
+ import type { Plugin, UserConfig } from "vite";
2
+ import path from "node:path";
3
+ import fs from 'node:fs';
4
+ import vttSync from "foundryvtt-sync";
5
+ import { defineConfig } from "vite";
6
+ import moduleJSON from "./module.json" with { type: "json" };
7
+ import postcssPresetEnv from "postcss-preset-env";
8
+ import PostCSSReplace from "postcss-replace";
9
+ import 'dotenv/config'
10
+
11
+ const target = "es2022"; // Build target for the vinal bundle.
12
+ const foundryPort = Number(process.env.FOUNDRY_PORT || 30000); // Which port your FoundryVTT instance is hosted at.
13
+ const devPort = Number(process.env.DEV_PORT || 30001); // Which port you want to use for development.
14
+ const libEntry = "index.js"; // The main entry file to begin crawling from (root being `src/`).
15
+
16
+ const postcss = {
17
+ inject: false,
18
+ sourceMap: true,
19
+ extensions: [".css"],
20
+ plugins: [
21
+ postcssPresetEnv,
22
+ PostCSSReplace({
23
+ pattern: /\(\(\s?(\S+?)\s?\)\)/g,
24
+ commentsOnly: false,
25
+ data: {
26
+ moduleId: moduleJSON.id,
27
+ },
28
+ }),
29
+ ],
30
+ };
31
+
32
+ const PACKAGE_ID = `modules/${moduleJSON.id}`;
33
+
34
+ console.log(`Running foundry port ${foundryPort} -> dev port ${devPort}`)
35
+
36
+ export default defineConfig(({ mode: _mode }) => {
37
+ return {
38
+ root: "src/", // Source location / esbuild root.
39
+ base: `/${PACKAGE_ID}/dist`, // Base module path.
40
+ publicDir: false, // No public resources to copy.
41
+ cacheDir: "../.vite-cache", // Relative from root directory.
42
+
43
+ resolve: {
44
+ conditions: ["browser", "import", "default"], // Only use browser-compatible exports from node modules.
45
+ alias: {
46
+ $lib: path.resolve(__dirname, "./src/lib"),
47
+ moduleJSON: path.resolve(__dirname, "./module.json"),
48
+ },
49
+ },
50
+
51
+ esbuild: { target }, // https://esbuild.github.io/api/#transform
52
+
53
+ css: { postcss }, // https://vite.dev/config/shared-options#css-postcss
54
+
55
+ server: {
56
+ port: devPort,
57
+ open: "/game",
58
+ proxy: {
59
+ // Serves static files from main Foundry server.
60
+ [`^(/${PACKAGE_ID}/(assets|lang|packs))`]: `http://localhost:${foundryPort}`,
61
+
62
+ // All other paths besides package ID path are served from main Foundry server.
63
+ [`^(?!/${PACKAGE_ID}/)`]: `http://localhost:${foundryPort}`,
64
+
65
+ // Rewrite incoming `module-id.js` request from Foundry to the dev server libEntry.
66
+ [`/${PACKAGE_ID}/dist/${moduleJSON.id}.js`]: {
67
+ target: `http://localhost:${devPort}/${PACKAGE_ID}/dist`,
68
+ rewrite: () => libEntry,
69
+ },
70
+
71
+ // Enable socket.io from main Foundry server.
72
+ "/socket.io": { target: `ws://localhost:${foundryPort}`, ws: true },
73
+ },
74
+ },
75
+ build: {
76
+ outDir: "../dist", // The output directory.
77
+ emptyOutDir: false,
78
+ sourcemap: true, // Provide a publicly available sourcemap for debuggin purposes.
79
+ target,
80
+ lib: {
81
+ entry: "./" + libEntry,
82
+ formats: ["es"],
83
+ fileName: moduleJSON.id,
84
+ },
85
+ rollupOptions: {
86
+ output: {
87
+ // Rewrite the default style.css to a more recognizable file name.
88
+ assetFileNames: assetInfo =>
89
+ assetInfo.name === "style.css" ? `${moduleJSON.id}.css` : assetInfo.name as string,
90
+ },
91
+ },
92
+ },
93
+
94
+ plugins: [
95
+ vttSync(moduleJSON, {}) as Plugin[], // Build the database from JSON files on build
96
+ {
97
+ name: 'create-dist-files', // Create dummy files for Foundry's tests to pass
98
+ apply: 'serve',
99
+ buildStart() {
100
+ if (!fs.existsSync('dist')) fs.mkdirSync('dist');
101
+
102
+ const files = [...moduleJSON.esmodules, ...moduleJSON.styles];
103
+ for (const name of files) {
104
+ fs.writeFileSync(name, '', { flag: 'a' });
105
+ }
106
+ },
107
+ },
108
+ ],
109
+ } satisfies UserConfig;
110
+ });