@turnipxenon/pineapple 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/README.md +38 -0
  2. package/dist/app.postcss +94 -0
  3. package/dist/assets/bg_tiled/bg_tiled_ares.png +0 -0
  4. package/dist/assets/bg_tiled/bg_tiled_corn.png +0 -0
  5. package/dist/assets/bg_tiled/bg_tiled_pineapple.png +0 -0
  6. package/dist/assets/bg_tiled/bg_tiled_reinhard.png +0 -0
  7. package/dist/assets/bg_tiled/bg_tiled_tomato.png +0 -0
  8. package/dist/assets/bg_tiled/bg_tiled_turnip.png +0 -0
  9. package/dist/assets/characters/ares/ares_blushing.webp +0 -0
  10. package/dist/assets/characters/ares/ares_disappointed.webp +0 -0
  11. package/dist/assets/characters/ares/ares_happy.webp +0 -0
  12. package/dist/assets/characters/ares/ares_lets_go.webp +0 -0
  13. package/dist/assets/characters/ares/ares_logo.webp +0 -0
  14. package/dist/assets/characters/ares/ares_mad.webp +0 -0
  15. package/dist/assets/characters/ares/ares_neutral.webp +0 -0
  16. package/dist/assets/characters/ares/ares_slightly_mad.webp +0 -0
  17. package/dist/assets/characters/ares/ares_surprised.webp +0 -0
  18. package/dist/assets/characters/ares/ares_yay.webp +0 -0
  19. package/dist/assets/game_dev/footage-chef-wings.gif +0 -0
  20. package/dist/assets/game_dev/footage-depreciation.webm +0 -0
  21. package/dist/assets/game_dev/footage-thinking-of-flowers.webm +0 -0
  22. package/dist/assets/game_dev/screenshot-game-jam-mama.png +0 -0
  23. package/dist/assets/game_dev/screenshot-string-hop.png +0 -0
  24. package/dist/assets/game_dev/screenshot-wet-ass-road.png +0 -0
  25. package/dist/assets/icons/chat_cursor.svg +47 -0
  26. package/dist/assets/icons/external_link.svg +50 -0
  27. package/dist/assets/temp/background-image.jpg +0 -0
  28. package/dist/assets/temp/bitbucket-logo.png +0 -0
  29. package/dist/assets/temp/github-logo.png +0 -0
  30. package/dist/assets/temp/header-hep-cat.mp4 +0 -0
  31. package/dist/assets/temp/header-hep-cat.ogg +0 -0
  32. package/dist/assets/temp/header-hep-cat.webm +0 -0
  33. package/dist/assets/temp/header-pengi.mp4 +0 -0
  34. package/dist/assets/temp/header-pengi.webm +0 -0
  35. package/dist/assets/temp/header-soulwork.mp4 +0 -0
  36. package/dist/assets/temp/header-soulwork.ogg +0 -0
  37. package/dist/assets/temp/header-soulwork.webm +0 -0
  38. package/dist/components/DialogOverlay.svelte +93 -0
  39. package/dist/components/DialogOverlay.svelte.d.ts +14 -0
  40. package/dist/components/LazyAsset.svelte +96 -0
  41. package/dist/components/LazyAsset.svelte.d.ts +20 -0
  42. package/dist/components/LazyAssetType.d.ts +10 -0
  43. package/dist/components/LazyAssetType.js +12 -0
  44. package/dist/components/PineappleBaseLayout.svelte +186 -0
  45. package/dist/components/PineappleBaseLayout.svelte.d.ts +19 -0
  46. package/dist/components/RandomizedBackground.svelte +62 -0
  47. package/dist/components/RandomizedBackground.svelte.d.ts +16 -0
  48. package/dist/components/RandomizedImage.svelte +29 -0
  49. package/dist/components/RandomizedImage.svelte.d.ts +17 -0
  50. package/dist/components/dialog_manager/DialogManager.d.ts +77 -0
  51. package/dist/components/dialog_manager/DialogManager.js +239 -0
  52. package/dist/components/dialog_manager/DialogManagerStore.d.ts +41 -0
  53. package/dist/components/dialog_manager/DialogManagerStore.js +45 -0
  54. package/dist/components/dialog_manager/DialogProcessor.d.ts +13 -0
  55. package/dist/components/dialog_manager/DialogProcessor.js +62 -0
  56. package/dist/components/dialog_manager/DialogUtils.d.ts +5 -0
  57. package/dist/components/dialog_manager/DialogUtils.js +8 -0
  58. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.d.ts +15 -0
  59. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.js +34 -0
  60. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.d.ts +4 -0
  61. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.js +1 -0
  62. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.d.ts +3 -0
  63. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.js +1 -0
  64. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.d.ts +5 -0
  65. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.js +6 -0
  66. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.d.ts +12 -0
  67. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.js +22 -0
  68. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.d.ts +5 -0
  69. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.js +1 -0
  70. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.d.ts +4 -0
  71. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.js +1 -0
  72. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.d.ts +15 -0
  73. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.js +220 -0
  74. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.d.ts +5 -0
  75. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.js +1 -0
  76. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.d.ts +8 -0
  77. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.js +15 -0
  78. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.d.ts +3 -0
  79. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.js +1 -0
  80. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.d.ts +10 -0
  81. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.js +15 -0
  82. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.d.ts +11 -0
  83. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.js +30 -0
  84. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.d.ts +6 -0
  85. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.js +21 -0
  86. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.d.ts +9 -0
  87. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.js +19 -0
  88. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.d.ts +9 -0
  89. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.js +18 -0
  90. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.d.ts +15 -0
  91. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.js +24 -0
  92. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.d.ts +20 -0
  93. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.js +32 -0
  94. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.d.ts +13 -0
  95. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.js +25 -0
  96. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.d.ts +7 -0
  97. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.js +15 -0
  98. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.d.ts +7 -0
  99. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.js +14 -0
  100. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.d.ts +7 -0
  101. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.js +12 -0
  102. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.d.ts +7 -0
  103. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.js +12 -0
  104. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.d.ts +7 -0
  105. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.js +12 -0
  106. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.d.ts +7 -0
  107. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.js +12 -0
  108. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.d.ts +7 -0
  109. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.js +12 -0
  110. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.d.ts +7 -0
  111. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.js +13 -0
  112. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.d.ts +17 -0
  113. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.js +32 -0
  114. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.d.ts +9 -0
  115. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.js +47 -0
  116. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.d.ts +7 -0
  117. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.js +13 -0
  118. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.d.ts +7 -0
  119. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.js +17 -0
  120. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.d.ts +7 -0
  121. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.js +14 -0
  122. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.d.ts +7 -0
  123. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.js +14 -0
  124. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.d.ts +7 -0
  125. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.js +12 -0
  126. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.d.ts +7 -0
  127. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.js +14 -0
  128. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.d.ts +7 -0
  129. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.js +14 -0
  130. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.d.ts +4 -0
  131. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.js +1 -0
  132. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.d.ts +6 -0
  133. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.js +1 -0
  134. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.d.ts +6 -0
  135. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.js +1 -0
  136. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.d.ts +8 -0
  137. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.js +15 -0
  138. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.d.ts +5 -0
  139. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.js +5 -0
  140. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.d.ts +11 -0
  141. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.js +53 -0
  142. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.d.ts +11 -0
  143. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.js +49 -0
  144. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.d.ts +11 -0
  145. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.js +23 -0
  146. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.d.ts +6 -0
  147. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.js +8 -0
  148. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.d.ts +12 -0
  149. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.js +43 -0
  150. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.d.ts +11 -0
  151. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.js +25 -0
  152. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.d.ts +6 -0
  153. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.js +18 -0
  154. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.d.ts +6 -0
  155. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.js +17 -0
  156. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.d.ts +10 -0
  157. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.js +38 -0
  158. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.d.ts +11 -0
  159. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.js +31 -0
  160. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.d.ts +8 -0
  161. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.js +39 -0
  162. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +8 -0
  163. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +40 -0
  164. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.d.ts +9 -0
  165. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.js +28 -0
  166. package/dist/index.d.ts +8 -0
  167. package/dist/index.js +8 -0
  168. package/dist/scripts/SetDefaultEnvironment.d.ts +1 -0
  169. package/dist/scripts/SetDefaultEnvironment.js +41 -0
  170. package/dist/scripts/pineapple_fiber/PineappleWeaver.d.ts +9 -0
  171. package/dist/scripts/pineapple_fiber/PineappleWeaver.js +201 -0
  172. package/dist/scripts/util/FileManagement.d.ts +7 -0
  173. package/dist/scripts/util/FileManagement.js +35 -0
  174. package/dist/scripts/util/ManualCheck.d.ts +1 -0
  175. package/dist/scripts/util/ManualCheck.js +28 -0
  176. package/dist/scripts/util/ManualCheckRun.d.ts +1 -0
  177. package/dist/scripts/util/ManualCheckRun.js +6 -0
  178. package/dist/store.d.ts +17 -0
  179. package/dist/store.js +17 -0
  180. package/dist/styles/DefaultGridContainer.css +61 -0
  181. package/dist/theme.postcss +107 -0
  182. package/dist/types/BlogBlurbMeta.d.ts +11 -0
  183. package/dist/types/BlogBlurbMeta.js +16 -0
  184. package/dist/types/BreadcrumbData.d.ts +4 -0
  185. package/dist/types/BreadcrumbData.js +1 -0
  186. package/dist/types/pineapple_fiber/DialogDetail.d.ts +6 -0
  187. package/dist/types/pineapple_fiber/DialogDetail.js +1 -0
  188. package/dist/types/pineapple_fiber/DialogState.d.ts +5 -0
  189. package/dist/types/pineapple_fiber/DialogState.js +6 -0
  190. package/dist/types/pineapple_fiber/DialogVariableStore.d.ts +2 -0
  191. package/dist/types/pineapple_fiber/DialogVariableStore.js +20 -0
  192. package/dist/types/pineapple_fiber/PortraitType.d.ts +11 -0
  193. package/dist/types/pineapple_fiber/PortraitType.js +12 -0
  194. package/dist/util/stable_random.d.ts +2 -0
  195. package/dist/util/stable_random.js +15 -0
  196. package/package.json +67 -0
  197. package/src/app.html +13 -0
  198. package/src/lib/app.postcss +94 -0
  199. package/src/lib/assets/bg_tiled/bg_tiled_ares.png +0 -0
  200. package/src/lib/assets/bg_tiled/bg_tiled_corn.png +0 -0
  201. package/src/lib/assets/bg_tiled/bg_tiled_pineapple.png +0 -0
  202. package/src/lib/assets/bg_tiled/bg_tiled_reinhard.png +0 -0
  203. package/src/lib/assets/bg_tiled/bg_tiled_tomato.png +0 -0
  204. package/src/lib/assets/bg_tiled/bg_tiled_turnip.png +0 -0
  205. package/src/lib/assets/characters/ares/ares_blushing.webp +0 -0
  206. package/src/lib/assets/characters/ares/ares_disappointed.webp +0 -0
  207. package/src/lib/assets/characters/ares/ares_happy.webp +0 -0
  208. package/src/lib/assets/characters/ares/ares_lets_go.webp +0 -0
  209. package/src/lib/assets/characters/ares/ares_logo.webp +0 -0
  210. package/src/lib/assets/characters/ares/ares_mad.webp +0 -0
  211. package/src/lib/assets/characters/ares/ares_neutral.webp +0 -0
  212. package/src/lib/assets/characters/ares/ares_slightly_mad.webp +0 -0
  213. package/src/lib/assets/characters/ares/ares_surprised.webp +0 -0
  214. package/src/lib/assets/characters/ares/ares_yay.webp +0 -0
  215. package/src/lib/assets/game_dev/footage-chef-wings.gif +0 -0
  216. package/src/lib/assets/game_dev/footage-depreciation.webm +0 -0
  217. package/src/lib/assets/game_dev/footage-thinking-of-flowers.webm +0 -0
  218. package/src/lib/assets/game_dev/screenshot-game-jam-mama.png +0 -0
  219. package/src/lib/assets/game_dev/screenshot-string-hop.png +0 -0
  220. package/src/lib/assets/game_dev/screenshot-wet-ass-road.png +0 -0
  221. package/src/lib/assets/icons/chat_cursor.svg +47 -0
  222. package/src/lib/assets/icons/external_link.svg +50 -0
  223. package/src/lib/assets/temp/background-image.jpg +0 -0
  224. package/src/lib/assets/temp/bitbucket-logo.png +0 -0
  225. package/src/lib/assets/temp/github-logo.png +0 -0
  226. package/src/lib/assets/temp/header-hep-cat.mp4 +0 -0
  227. package/src/lib/assets/temp/header-hep-cat.ogg +0 -0
  228. package/src/lib/assets/temp/header-hep-cat.webm +0 -0
  229. package/src/lib/assets/temp/header-pengi.mp4 +0 -0
  230. package/src/lib/assets/temp/header-pengi.webm +0 -0
  231. package/src/lib/assets/temp/header-soulwork.mp4 +0 -0
  232. package/src/lib/assets/temp/header-soulwork.ogg +0 -0
  233. package/src/lib/assets/temp/header-soulwork.webm +0 -0
  234. package/src/lib/components/DialogOverlay.svelte +100 -0
  235. package/src/lib/components/LazyAsset.svelte +114 -0
  236. package/src/lib/components/LazyAssetType.ts +11 -0
  237. package/src/lib/components/PineappleBaseLayout.svelte +165 -0
  238. package/src/lib/components/RandomizedBackground.svelte +77 -0
  239. package/src/lib/components/RandomizedImage.svelte +31 -0
  240. package/src/lib/components/dialog_manager/DialogManager.ts +282 -0
  241. package/src/lib/components/dialog_manager/DialogManagerStore.ts +52 -0
  242. package/src/lib/components/dialog_manager/DialogProcessor.ts +68 -0
  243. package/src/lib/components/dialog_manager/DialogUtils.ts +10 -0
  244. package/src/lib/components/dialog_manager/behavior_tree/core/BTreeUtils.ts +40 -0
  245. package/src/lib/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.ts +5 -0
  246. package/src/lib/components/dialog_manager/behavior_tree/core/BehaviorNode.ts +3 -0
  247. package/src/lib/components/dialog_manager/behavior_tree/core/BehaviorStatus.ts +5 -0
  248. package/src/lib/components/dialog_manager/behavior_tree/core/SelectorNode.ts +32 -0
  249. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments.ts +6 -0
  250. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.ts +5 -0
  251. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.ts +236 -0
  252. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionResult.ts +6 -0
  253. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.ts +20 -0
  254. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionState.ts +3 -0
  255. package/src/lib/components/dialog_manager/behavior_tree/expression/OperandNode.ts +19 -0
  256. package/src/lib/components/dialog_manager/behavior_tree/expression/OperatorNode.ts +37 -0
  257. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.ts +28 -0
  258. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.ts +34 -0
  259. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandMap.ts +26 -0
  260. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.ts +31 -0
  261. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.ts +38 -0
  262. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.ts +28 -0
  263. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/AndOperator.ts +24 -0
  264. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.ts +21 -0
  265. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.ts +21 -0
  266. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.ts +21 -0
  267. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.ts +19 -0
  268. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.ts +21 -0
  269. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.ts +21 -0
  270. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.ts +20 -0
  271. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.ts +42 -0
  272. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.ts +53 -0
  273. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OrOperator.ts +22 -0
  274. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/XorOperator.ts +24 -0
  275. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.ts +23 -0
  276. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.ts +23 -0
  277. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.ts +21 -0
  278. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.ts +23 -0
  279. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.ts +23 -0
  280. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.ts +5 -0
  281. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.ts +7 -0
  282. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.ts +7 -0
  283. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.ts +20 -0
  284. package/src/lib/components/dialog_manager/behavior_tree/line_processors/BehaviorState.ts +6 -0
  285. package/src/lib/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.ts +59 -0
  286. package/src/lib/components/dialog_manager/behavior_tree/line_processors/ElseNode.ts +55 -0
  287. package/src/lib/components/dialog_manager/behavior_tree/line_processors/EndIfNode.ts +28 -0
  288. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IfMode.ts +7 -0
  289. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IfNode.ts +49 -0
  290. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.ts +30 -0
  291. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.ts +24 -0
  292. package/src/lib/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.ts +22 -0
  293. package/src/lib/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.ts +48 -0
  294. package/src/lib/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.ts +37 -0
  295. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.ts +48 -0
  296. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.ts +51 -0
  297. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.ts +34 -0
  298. package/src/lib/index.ts +9 -0
  299. package/src/lib/scripts/SetDefaultEnvironment.ts +45 -0
  300. package/src/lib/scripts/pineapple_fiber/PineappleWeaver.ts +252 -0
  301. package/src/lib/scripts/util/FileManagement.ts +38 -0
  302. package/src/lib/scripts/util/ManualCheck.ts +32 -0
  303. package/src/lib/scripts/util/ManualCheckRun.ts +7 -0
  304. package/src/lib/store.ts +18 -0
  305. package/src/lib/styles/DefaultGridContainer.css +61 -0
  306. package/src/lib/theme.postcss +107 -0
  307. package/src/lib/types/BlogBlurbMeta.ts +16 -0
  308. package/src/lib/types/BreadcrumbData.ts +4 -0
  309. package/src/lib/types/pineapple_fiber/DialogDetail.ts +7 -0
  310. package/src/lib/types/pineapple_fiber/DialogState.ts +5 -0
  311. package/src/lib/types/pineapple_fiber/DialogVariableStore.ts +24 -0
  312. package/src/lib/types/pineapple_fiber/PortraitType.ts +11 -0
  313. package/src/lib/util/stable_random.ts +16 -0
  314. package/src/routes/+error.svelte +26 -0
  315. package/src/routes/+layout.svelte +23 -0
  316. package/src/routes/+page.svelte +41 -0
  317. package/src/routes/Error.yarn +7 -0
  318. package/src/routes/ErrorYarn.ts +24 -0
  319. package/src/routes/portfolio/+page.svelte +0 -0
  320. package/src/types.d.ts +8 -0
  321. package/static/default-card.png +0 -0
  322. package/static/favicon.png +0 -0
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Pineapple Fiber
3
+ *
4
+ * A script that generates Typescript files from Yarn where the choices are embedded on
5
+ * the dialogue itself
6
+ *
7
+ * npx vite-node src/lib/scripts/pineapple_fiber/PineappleWeaver.ts
8
+ */
9
+
10
+ import { getAllFiles } from "$pkg/scripts/util/FileManagement";
11
+ import fs, { readFileSync } from "fs";
12
+ import type { DialogDetail } from "$pkg/types/pineapple_fiber/DialogDetail";
13
+ import { PortraitType } from "$pkg/types/pineapple_fiber/PortraitType";
14
+
15
+ // import { getAllFiles } from "../util/FileManagement";
16
+ // import fs, { readFileSync } from "fs";
17
+ // import type { DialogDetail } from "../../types/pineapple_fiber/DialogDetail";
18
+ // import { PortraitType } from "../../types/pineapple_fiber/PortraitType";
19
+
20
+ interface ChoiceDetail {
21
+ name: string;
22
+ jumpNode: string;
23
+ }
24
+
25
+ const shouldDebug = false;
26
+
27
+ const pineappleWeaverRun = () => {
28
+ console.info("Starting Pineapple Weaver.");
29
+ const BASE_PATH = "./src/routes";
30
+ getAllFiles(BASE_PATH, (path: string): boolean => {
31
+ return path.split(".").pop() === "yarn";
32
+ }).map((filePath) => {
33
+ console.info(`Converting: ${filePath}`);
34
+ const fileContent = readFileSync(filePath, "utf-8");
35
+ const dialogDetailList: DialogDetail[] = [];
36
+
37
+ fileContent.split("===").map((unparsedNode) => {
38
+ // todo: detect empty nodes
39
+ // todo: improve the code readability
40
+ if (unparsedNode.trim() === "") {
41
+ return;
42
+ }
43
+
44
+ const dialogDetails: DialogDetail = {
45
+ // todo: dissect the line below and give comments because it is complex
46
+ dialogId: unparsedNode
47
+ .slice(unparsedNode.indexOf("title: "))
48
+ .split("\n")[0]
49
+ .split(" ")
50
+ .pop()
51
+ ?.trim(),
52
+ portraitType: PortraitType.AresNeutral,
53
+ textContent: "" // will be filled later below
54
+ };
55
+ let portraitUnset = true;
56
+
57
+ // parse the PineappleFiber metatags
58
+ const unparsedBody = unparsedNode.split("---").pop()!.trim();
59
+ const bodyList = unparsedBody.split("\n");
60
+ let contentIndexStart = 0;
61
+ for (let index = 0; index < bodyList.length; index++) {
62
+ const possibleTagPair = bodyList[index].split(": ");
63
+ const possibleTagName = possibleTagPair[0].toLowerCase();
64
+
65
+ if (!["portrait"].includes(possibleTagName)) {
66
+ break;
67
+ }
68
+
69
+ contentIndexStart = index + 1; // increase count for each viable tah
70
+ switch (possibleTagName) {
71
+ case "portrait":
72
+ portraitUnset = false;
73
+ // todo: implement a way to match the appropriate portrait based on the metatag
74
+ // from https://stackoverflow.com/a/17381004/17836168
75
+ dialogDetails.portraitType =
76
+ PortraitType[possibleTagPair[1].trim() as keyof typeof PortraitType];
77
+ if (shouldDebug) {
78
+ console.log(
79
+ "Portrait detected:",
80
+ possibleTagPair[1],
81
+ " => ",
82
+ dialogDetails.portraitType
83
+ );
84
+ }
85
+ break;
86
+ }
87
+ }
88
+
89
+ // portrait check
90
+ if (portraitUnset) {
91
+ console.warn(`Portrait missing for node: ${dialogDetails.dialogId}`);
92
+ dialogDetails.portraitType = PortraitType.AresNeutral;
93
+ }
94
+
95
+ // remove the metatags from the body
96
+ const unprocessedContent = bodyList.slice(contentIndexStart).join("\n");
97
+ const contentPair = unprocessedContent.split("<ChoiceBreak>");
98
+
99
+ if (contentPair.length === 2) {
100
+ // parse for the choice names in the options
101
+ enum ChoiceParsingState {
102
+ Free, // detects for the next option
103
+ Line // previously detected an option, will try to detect for the next option
104
+ }
105
+
106
+ let parsingState: ChoiceParsingState = ChoiceParsingState.Free;
107
+ const currentChoiceDetail: ChoiceDetail = { jumpNode: "", name: "" };
108
+ const choiceList: ChoiceDetail[] = [];
109
+ let shouldSkipChoices = false;
110
+
111
+ const checkChoiceForSave = () => {
112
+ if (currentChoiceDetail.name !== "") {
113
+ choiceList.push({
114
+ name: currentChoiceDetail.name,
115
+ jumpNode: currentChoiceDetail.jumpNode
116
+ });
117
+ }
118
+ };
119
+
120
+ contentPair[1]
121
+ .trim()
122
+ .split("\n")
123
+ .filter((line) => {
124
+ const trimmedLine = line.trim();
125
+ if (shouldSkipChoices) {
126
+ return false;
127
+ }
128
+
129
+ if (trimmedLine.startsWith("// ignore the rest")) {
130
+ shouldSkipChoices = true;
131
+ return false;
132
+ }
133
+
134
+ return true;
135
+ })
136
+ .map((line) => {
137
+ const trimmedLine = line.trim();
138
+
139
+ switch (parsingState) {
140
+ case ChoiceParsingState.Free:
141
+ if (trimmedLine.startsWith("->")) {
142
+ // save previous choice
143
+ checkChoiceForSave();
144
+
145
+ // write start of new choice
146
+ currentChoiceDetail.name = trimmedLine.split(" ").pop()!;
147
+ parsingState = ChoiceParsingState.Line;
148
+ }
149
+ break;
150
+
151
+ case ChoiceParsingState.Line:
152
+ if (trimmedLine.startsWith("<<jump")) {
153
+ const jumpNode = trimmedLine.split(" ").pop()!;
154
+ currentChoiceDetail.jumpNode = jumpNode.slice(0, jumpNode.length - 2); // remove ">>"
155
+ parsingState = ChoiceParsingState.Free;
156
+ }
157
+ break;
158
+
159
+ default:
160
+ console.error(`Unimplemented parsing state: ${parsingState}`);
161
+ break;
162
+ }
163
+ });
164
+ checkChoiceForSave();
165
+
166
+ dialogDetails.textContent = contentPair[0];
167
+
168
+ // handle choice start tags to a href
169
+ choiceList.forEach((choiceDetail) => {
170
+ const keyword = `<choice ${choiceDetail.name}>`;
171
+ while (dialogDetails.textContent.includes(keyword)) {
172
+ dialogDetails.textContent = dialogDetails.textContent.replace(
173
+ keyword,
174
+ `<a class="choice-${choiceDetail.jumpNode} dialog-choice" title="Click to continue the dialog">`
175
+ );
176
+ }
177
+ });
178
+
179
+ const externalKeyword = "<a href=";
180
+ while (dialogDetails.textContent.includes(externalKeyword)) {
181
+ dialogDetails.textContent = dialogDetails.textContent.replace(
182
+ externalKeyword,
183
+ '<a target="_blank" class="external-link" href='
184
+ ); // make all external tags with a custom cursor
185
+ }
186
+
187
+ const choiceEndKeyword = "</choice>";
188
+ while (dialogDetails.textContent.includes(choiceEndKeyword)) {
189
+ dialogDetails.textContent = dialogDetails.textContent.replace(choiceEndKeyword, "</a>"); // convert all choice end tags to a tags
190
+ }
191
+ } else {
192
+ // assume only one which indicates it's choiceless
193
+ dialogDetails.textContent = unprocessedContent;
194
+ }
195
+
196
+ dialogDetailList.push(dialogDetails);
197
+ });
198
+
199
+ const dialogDetailToString = (detail: DialogDetail): string => {
200
+ if (detail.portraitType === undefined) {
201
+ detail.portraitType = PortraitType.AresNeutral;
202
+ console.error(`Missing portrait at dialog: ${detail.dialogId}`);
203
+ console.error(`It contains: ${detail.textContent}`);
204
+ }
205
+ return ` {
206
+ dialogId: "${detail.dialogId}",
207
+ portraitType: PortraitType.${detail.portraitType.toString()},
208
+ textContent: \`${detail.textContent}\`
209
+ },`;
210
+ };
211
+
212
+ const dialogDetailListToString = (detailList: DialogDetail[]): string => {
213
+ return detailList
214
+ .map((detail) => {
215
+ return dialogDetailToString(detail);
216
+ })
217
+ .join("\n");
218
+ };
219
+
220
+ // generate file
221
+ const filePathList = filePath.split(".");
222
+ const fileName = filePathList[filePathList.length - 2].split("/").pop();
223
+ const template = `// this file was generated by PineappleWeaver.ts
224
+ // do not edit!
225
+
226
+ import type { DialogDetail } from "@turnipxenon/pineapple";
227
+ import { dialogManager, PortraitType } from "@turnipxenon/pineapple";
228
+
229
+ class _${fileName}Yarn {
230
+ dialogList: DialogDetail[] = [
231
+ ${dialogDetailListToString(dialogDetailList)}
232
+ ];
233
+
234
+ /* Remember to call DialogManager.subscribeToSetDialogChoice before calling this in Svelte */
235
+ setDialogTree = () => {
236
+ dialogManager.setDialogTree(this.dialogList);
237
+ };
238
+ }
239
+
240
+ export const ${fileName}Yarn = new _${fileName}Yarn();
241
+ `;
242
+
243
+ const filePathSplit = filePath.split(".");
244
+ filePathSplit.pop();
245
+ const generatedPath = `${filePathSplit.join(".")}Yarn.ts`;
246
+ fs.writeFileSync(generatedPath, template);
247
+ });
248
+
249
+ console.info("Finish converting all yarn files!");
250
+ };
251
+
252
+ pineappleWeaverRun();
@@ -0,0 +1,38 @@
1
+ import fs from "fs";
2
+
3
+ // from https://stackoverflow.com/a/26832802
4
+ export const getDirectories = (path: string): string[] => {
5
+ return fs
6
+ .readdirSync(path)
7
+ .filter(function (file) {
8
+ return fs.statSync(path + "/" + file).isDirectory();
9
+ })
10
+ .map((value: string) => {
11
+ return path + "/" + value;
12
+ });
13
+ };
14
+
15
+ /**
16
+ * Get all files underneath a path. The results can be filtered!
17
+ * @param path: path where to start finding all files underneath
18
+ * @param filter?: optional path filter
19
+ */
20
+ export const getAllFiles = (path: string, filter?: (path: string) => boolean): string[] => {
21
+ const contentList = fs.readdirSync(path);
22
+ const fileList: string[] = [];
23
+
24
+ contentList.forEach((content) => {
25
+ const contentName = path + "/" + content;
26
+ const stat = fs.statSync(contentName);
27
+ if (stat.isDirectory()) {
28
+ fileList.push(...getAllFiles(contentName, filter));
29
+ } else {
30
+ // takes advantage of lazy evaluation
31
+ if (filter === undefined || filter(contentName)) {
32
+ fileList.push(contentName);
33
+ }
34
+ }
35
+ });
36
+
37
+ return fileList;
38
+ };
@@ -0,0 +1,32 @@
1
+ import { getAllFiles } from "$lib/scripts/util/FileManagement";
2
+ import { readFileSync } from "fs";
3
+
4
+ /**
5
+ * checks for manual dialog tree sets in all files except for *Yarn.ts and DialogManager.ts
6
+ */
7
+ const checkManualDialogSet = () => {
8
+ // todo:
9
+ const BASE_PATH = "./src/routes";
10
+ getAllFiles(BASE_PATH, (path: string): boolean => {
11
+ // from: https://stackoverflow.com/a/424006/17836168
12
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
13
+ // @ts-ignore
14
+ const filename: string = path.split("\\").pop().split("/").pop();
15
+
16
+ const isNonYarn = !filename.endsWith("Yarn.ts");
17
+
18
+ // takes advantage of lazy evaluation
19
+ // is non-yarn and is not exempted
20
+ return isNonYarn && !["DialogManager.ts"].includes(filename);
21
+ }).map((filePath) => {
22
+ // todo:
23
+ const fileContent = readFileSync(filePath, "utf-8");
24
+ if (fileContent.includes("dialogManager.setDialogTree")) {
25
+ console.warn(`Warning! Manual dialog tree set found in path: ${filePath}`);
26
+ }
27
+ });
28
+ };
29
+
30
+ export const runAll = () => {
31
+ checkManualDialogSet();
32
+ };
@@ -0,0 +1,7 @@
1
+ import { runAll } from "$lib/scripts/util/ManualCheck";
2
+
3
+ /**
4
+ * todo: Integrate manual check into CI check#137
5
+ * ISSUE #137 https://github.com/TurnipXenon/pineapple/issues/137
6
+ */
7
+ runAll();
@@ -0,0 +1,18 @@
1
+ import { writable } from "svelte/store";
2
+
3
+ /**
4
+ * Enables background in main layout
5
+ *
6
+ * @example
7
+ * When updating to false, remember to restore the value to true, our default value, onDestroy.
8
+ * Avoid async to prevent weird flashes of updates!
9
+ * ```
10
+ * import {enableBackground} from "$lib/store.ts";
11
+ * enableBackground.update(() => false);
12
+ *
13
+ * onDestroy(() => {
14
+ * enableBackground.update(() => true);
15
+ * });
16
+ * ```
17
+ */
18
+ export const enableBackground = writable(true);
@@ -0,0 +1,61 @@
1
+ .default-grid-container-title-card {
2
+ max-width: calc(var(--default-card-max-width) + 32rem) !important;
3
+ width: 100%;
4
+ padding: 2rem !important;
5
+ text-align: center !important;
6
+ }
7
+
8
+ .default-grid-container {
9
+ width: 100%;
10
+ max-width: calc(var(--default-card-max-width) + 32rem);
11
+ padding-top: 4rem;
12
+ display: flex;
13
+ flex-wrap: wrap;
14
+ justify-content: center;
15
+ align-items: flex-start;
16
+ }
17
+
18
+ .default-grid-container > .card,
19
+ .default-grid-container > .lite-wrapper {
20
+ width: 22rem;
21
+ margin: clamp(0vw, 1vw, 1.5rem);
22
+ }
23
+
24
+ .default-grid-container div h3 {
25
+ margin: 0.5em;
26
+ text-align: center;
27
+ font-weight: bold;
28
+ }
29
+
30
+ .default-grid-container video {
31
+ padding: var(--theme-border-base);
32
+ }
33
+
34
+ .default-grid-container img {
35
+ padding: var(--theme-border-base);
36
+ width: 100%;
37
+ }
38
+
39
+ .links {
40
+ width: 100%;
41
+ display: flex;
42
+ flex-wrap: wrap;
43
+ justify-content: center;
44
+ align-items: center;
45
+ }
46
+
47
+ .card.tx-badge {
48
+ object-fit: scale-down;
49
+ padding: 0.5rem;
50
+ }
51
+
52
+ img.tx-badge,
53
+ .card.tx-badge {
54
+ max-height: 5rem;
55
+ max-width: 6rem;
56
+ margin: 1rem;
57
+ }
58
+
59
+ .twitter-wrapper {
60
+ padding: 1rem;
61
+ }
@@ -0,0 +1,107 @@
1
+ :root {
2
+ /* =~= Theme Properties =~= */
3
+ --theme-font-family-base: system-ui;
4
+ --theme-font-family-heading: system-ui;
5
+ --theme-font-color-base: var(--color-text-500);
6
+ --theme-font-color-dark: var(--color-text-900);
7
+ --theme-rounded-base: 24px;
8
+ --theme-rounded-container: 16px;
9
+ --theme-border-base: 2px;
10
+ /* =~= Theme On-X Colors =~= */
11
+ --on-primary: var(--color-text-900);
12
+ --on-secondary: var(--color-surface-500);
13
+ --on-tertiary: var(--color-text-900);
14
+ --on-success: var(--color-text-900);
15
+ --on-warning: var(--color-text-900);
16
+ --on-error: var(--color-surface-500);
17
+ --on-surface: var(--color-text-900);
18
+ /* =~= Theme Colors =~= */
19
+ /* primary | #b9a26e */
20
+ --color-primary-50: 245 241 233; /* ⬅ #f5f1e9 */
21
+ --color-primary-100: 241 236 226; /* ⬅ #f1ece2 */
22
+ --color-primary-200: 238 232 219; /* ⬅ #eee8db */
23
+ --color-primary-300: 227 218 197; /* ⬅ #e3dac5 */
24
+ --color-primary-400: 206 190 154; /* ⬅ #cebe9a */
25
+ --color-primary-500: 185 162 110; /* ⬅ #b9a26e */
26
+ --color-primary-600: 167 146 99; /* ⬅ #a79263 */
27
+ --color-primary-700: 139 122 83; /* ⬅ #8b7a53 */
28
+ --color-primary-800: 111 97 66; /* ⬅ #6f6142 */
29
+ --color-primary-900: 91 79 54; /* ⬅ #5b4f36 */
30
+ /* secondary | #b55639 */
31
+ --color-secondary-50: 244 230 225; /* ⬅ #f4e6e1 */
32
+ --color-secondary-100: 240 221 215; /* ⬅ #f0ddd7 */
33
+ --color-secondary-200: 237 213 206; /* ⬅ #edd5ce */
34
+ --color-secondary-300: 225 187 176; /* ⬅ #e1bbb0 */
35
+ --color-secondary-400: 203 137 116; /* ⬅ #cb8974 */
36
+ --color-secondary-500: 181 86 57; /* ⬅ #b55639 */
37
+ --color-secondary-600: 163 77 51; /* ⬅ #a34d33 */
38
+ --color-secondary-700: 136 65 43; /* ⬅ #88412b */
39
+ --color-secondary-800: 109 52 34; /* ⬅ #6d3422 */
40
+ --color-secondary-900: 89 42 28; /* ⬅ #592a1c */
41
+ /* tertiary | #cd7949 */
42
+ --color-tertiary-50: 248 235 228; /* ⬅ #f8ebe4 */
43
+ --color-tertiary-100: 245 228 219; /* ⬅ #f5e4db */
44
+ --color-tertiary-200: 243 222 210; /* ⬅ #f3ded2 */
45
+ --color-tertiary-300: 235 201 182; /* ⬅ #ebc9b6 */
46
+ --color-tertiary-400: 220 161 128; /* ⬅ #dca180 */
47
+ --color-tertiary-500: 205 121 73; /* ⬅ #cd7949 */
48
+ --color-tertiary-600: 185 109 66; /* ⬅ #b96d42 */
49
+ --color-tertiary-700: 154 91 55; /* ⬅ #9a5b37 */
50
+ --color-tertiary-800: 123 73 44; /* ⬅ #7b492c */
51
+ --color-tertiary-900: 100 59 36; /* ⬅ #643b24 */
52
+ /* success | #7cab36 */
53
+ --color-success-50: 235 242 225; /* ⬅ #ebf2e1 */
54
+ --color-success-100: 229 238 215; /* ⬅ #e5eed7 */
55
+ --color-success-200: 222 234 205; /* ⬅ #deeacd */
56
+ --color-success-300: 203 221 175; /* ⬅ #cbddaf */
57
+ --color-success-400: 163 196 114; /* ⬅ #a3c472 */
58
+ --color-success-500: 124 171 54; /* ⬅ #7cab36 */
59
+ --color-success-600: 112 154 49; /* ⬅ #709a31 */
60
+ --color-success-700: 93 128 41; /* ⬅ #5d8029 */
61
+ --color-success-800: 74 103 32; /* ⬅ #4a6720 */
62
+ --color-success-900: 61 84 26; /* ⬅ #3d541a */
63
+ /* warning | #b8993a */
64
+ --color-warning-50: 244 240 225; /* ⬅ #f4f0e1 */
65
+ --color-warning-100: 241 235 216; /* ⬅ #f1ebd8 */
66
+ --color-warning-200: 237 230 206; /* ⬅ #ede6ce */
67
+ --color-warning-300: 227 214 176; /* ⬅ #e3d6b0 */
68
+ --color-warning-400: 205 184 117; /* ⬅ #cdb875 */
69
+ --color-warning-500: 184 153 58; /* ⬅ #b8993a */
70
+ --color-warning-600: 166 138 52; /* ⬅ #a68a34 */
71
+ --color-warning-700: 138 115 44; /* ⬅ #8a732c */
72
+ --color-warning-800: 110 92 35; /* ⬅ #6e5c23 */
73
+ --color-warning-900: 90 75 28; /* ⬅ #5a4b1c */
74
+ /* error | #b53977 */
75
+ --color-error-50: 244 225 235; /* ⬅ #f4e1eb */
76
+ --color-error-100: 240 215 228; /* ⬅ #f0d7e4 */
77
+ --color-error-200: 237 206 221; /* ⬅ #edcedd */
78
+ --color-error-300: 225 176 201; /* ⬅ #e1b0c9 */
79
+ --color-error-400: 203 116 160; /* ⬅ #cb74a0 */
80
+ --color-error-500: 181 57 119; /* ⬅ #b53977 */
81
+ --color-error-600: 163 51 107; /* ⬅ #a3336b */
82
+ --color-error-700: 136 43 89; /* ⬅ #882b59 */
83
+ --color-error-800: 109 34 71; /* ⬅ #6d2247 */
84
+ --color-error-900: 89 28 58; /* ⬅ #591c3a */
85
+ /* surface | #fff7e3 */
86
+ --color-surface-50: 255 254 251; /* ⬅ #fffefb */
87
+ --color-surface-100: 255 253 249; /* ⬅ #fffdf9 */
88
+ --color-surface-200: 255 253 248; /* ⬅ #fffdf8 */
89
+ --color-surface-300: 255 252 244; /* ⬅ #fffcf4 */
90
+ --color-surface-400: 255 249 235; /* ⬅ #fff9eb */
91
+ --color-surface-500: 255 247 227; /* ⬅ #fff7e3 */
92
+ --color-surface-600: 230 222 204; /* ⬅ #e6decc */
93
+ --color-surface-700: 191 185 170; /* ⬅ #bfb9aa */
94
+ --color-surface-800: 153 148 136; /* ⬅ #999488 */
95
+ --color-surface-900: 125 121 111; /* ⬅ #7d796f */
96
+ /* text color | #3f312f */
97
+ --color-text-50: 226 224 224; /* ⬅ #e2e0e0 */
98
+ --color-text-100: 217 214 213; /* ⬅ #d9d6d5 */
99
+ --color-text-200: 207 204 203; /* ⬅ #cfcccb */
100
+ --color-text-300: 178 173 172; /* ⬅ #b2adac */
101
+ --color-text-400: 121 111 109; /* ⬅ #796f6d */
102
+ --color-text-500: 63 49 47; /* ⬅ #3f312f */
103
+ --color-text-600: 57 44 42; /* ⬅ #392c2a */
104
+ --color-text-700: 47 37 35; /* ⬅ #2f2523 */
105
+ --color-text-800: 38 29 28; /* ⬅ #261d1c */
106
+ --color-text-900: 31 24 23; /* ⬅ #1f1817 */
107
+ }
@@ -0,0 +1,16 @@
1
+ // I don't wanna waste time figuring out how to fight against the rollup magic
2
+ // svelte does so let's just copy paste this class, as a treat LOL
3
+ // Mirror is between
4
+ // - src/lib/types/BlogBlurbMeta.ts
5
+ // - pineapple_scripts/blog_list_data_generator.ts
6
+ export class BlogBlurbMeta {
7
+ title = "";
8
+ blurb = "";
9
+ tagList: string[] = [];
10
+ publishDate = "";
11
+ lastUpdate = "";
12
+ previewSrc: any = "";
13
+ previewSrcScript = "";
14
+ previewAlt = "";
15
+ blogLink = "";
16
+ }
@@ -0,0 +1,4 @@
1
+ export interface BreadcrumbData {
2
+ path: string;
3
+ name: string;
4
+ }
@@ -0,0 +1,7 @@
1
+ import type { PortraitType } from "$lib/types/pineapple_fiber/PortraitType";
2
+
3
+ export interface DialogDetail {
4
+ textContent: string;
5
+ dialogId?: string;
6
+ portraitType?: PortraitType;
7
+ }
@@ -0,0 +1,5 @@
1
+ export enum DialogState {
2
+ Invisible,
3
+ Visible,
4
+ Busy
5
+ }
@@ -0,0 +1,24 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+
4
+ import { browser } from "$app/environment";
5
+
6
+ export type DialogMapStore = Storage;
7
+
8
+ export const createNewMapStore = (): DialogMapStore => {
9
+ return browser
10
+ ? localStorage
11
+ : {
12
+ // dumb storage if not in browser
13
+ length: 0,
14
+ setItem: (key: string, value: string) => {},
15
+ getItem: (key: string): string | null => {
16
+ return null;
17
+ },
18
+ clear: () => {},
19
+ key: (index: number): string | null => {
20
+ return null;
21
+ },
22
+ removeItem: (key: string) => {}
23
+ };
24
+ };
@@ -0,0 +1,11 @@
1
+ export enum PortraitType {
2
+ AresHappy = "AresHappy",
3
+ AresDisappointed = "AresDisappointed",
4
+ AresBlushing = "AresBlushing",
5
+ AresLetsGo = "AresLetsGo",
6
+ AresMad = "AresMad",
7
+ AresNeutral = "AresNeutral",
8
+ AresSlightlyMad = "AresSlightlyMad",
9
+ AresSurprised = "AresSurprised",
10
+ AresYay = "AresYay"
11
+ }
@@ -0,0 +1,16 @@
1
+ export const generatedDailySeed = (): number => {
2
+ const date = new Date();
3
+ const time = date.getTime() + 86400000;
4
+ return time - (time % 86400000);
5
+ };
6
+
7
+ // psuedo misc with seed
8
+ // from https://stackoverflow.com/a/47593316
9
+ export const mulberry32Generator = (a: number): (() => number) => {
10
+ return function () {
11
+ var t = (a += 0x6d2b79f5);
12
+ t = Math.imul(t ^ (t >>> 15), t | 1);
13
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
14
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
15
+ };
16
+ };
@@ -0,0 +1,26 @@
1
+ <script>
2
+ import { onDestroy } from "svelte";
3
+ import { dialogManager } from "$lib/components/dialog_manager/DialogManagerStore.ts";
4
+ import { ErrorYarn } from "./ErrorYarn";
5
+
6
+ ErrorYarn.setDialogTree();
7
+
8
+ onDestroy(() => {
9
+ dialogManager.setDialogToDefault();
10
+ });
11
+ </script>
12
+
13
+ <div class="card default-card">
14
+ <blockquote class="twitter-tweet">
15
+ <p dir="ltr" lang="en">
16
+ Going to be 96 years old showing this to the geriatric ward nurses my pushing the emergency help button and they
17
+ run in and i just show them this for the 30th time that day <a href="https://t.co/YqjP1Uox2Q"
18
+ >pic.twitter.com/YqjP1Uox2Q</a
19
+ >
20
+ </p>
21
+ &mdash; ᶻ 𝗓 𐰁 (@felidfang)<a href="https://twitter.com/felidfang/status/1325145574572744705?ref_src=twsrc%5Etfw"
22
+ >November 7, 2020</a
23
+ >
24
+ </blockquote>
25
+ <script async charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
26
+ </div>
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import PinyaBaseLayout from "$lib/components/PineappleBaseLayout.svelte";
3
+ import { PUBLIC_CRINGE_USERNAME } from "$env/static/public";
4
+ </script>
5
+
6
+ <svelte:head>
7
+ <title>{PUBLIC_CRINGE_USERNAME}</title>
8
+ <meta content="summary" name="Turnip time!" />
9
+ <meta content="@{PUBLIC_CRINGE_USERNAME}" name="twitter:site" />
10
+ <meta content="@{PUBLIC_CRINGE_USERNAME}" name="twitter:creator" />
11
+ <meta content="https://www.{PUBLIC_CRINGE_USERNAME}.com/" name="og:url" />
12
+ <meta content="{PUBLIC_CRINGE_USERNAME} | Home" name="og:title" />
13
+ <meta
14
+ content="I have no idea! Anyway... Hi! I don't know what I'm doing! Also check out my games!"
15
+ name="og:description"
16
+ />
17
+ <meta content="https://www.{PUBLIC_CRINGE_USERNAME}.com/default-card.png" property="og:image" />
18
+ </svelte:head>
19
+
20
+ <PinyaBaseLayout>
21
+ <slot />
22
+ </PinyaBaseLayout>
23
+