@indietabletop/appkit 7.0.0-0 → 7.0.0-rc.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 (279) hide show
  1. package/lib/AppConfig/AppConfig.tsx +80 -0
  2. package/lib/AppConfig/formatters.tsx +43 -0
  3. package/lib/AuthCard/AuthCard.stories.ts +34 -0
  4. package/lib/AuthCard/AuthCard.tsx +64 -0
  5. package/lib/AuthCard/style.css.ts +49 -0
  6. package/lib/CacheProvider.tsx +20 -0
  7. package/lib/DialogTrigger/index.tsx +36 -0
  8. package/lib/DocumentTitle/DocumentTitle.tsx +10 -0
  9. package/lib/EnumMapper.ts +50 -0
  10. package/lib/ExternalLink.tsx +10 -0
  11. package/lib/FullscreenDismissBlocker.tsx +23 -0
  12. package/{dist/HistoryState.d.ts → lib/HistoryState.ts} +5 -2
  13. package/lib/IndieTabletopClubLogo.tsx +44 -0
  14. package/lib/IndieTabletopClubSymbol.tsx +37 -0
  15. package/lib/InfoPage/index.tsx +46 -0
  16. package/lib/InfoPage/pages.tsx +36 -0
  17. package/lib/InfoPage/style.css.ts +36 -0
  18. package/lib/Letterhead/index.tsx +85 -0
  19. package/lib/Letterhead/stories.tsx +41 -0
  20. package/lib/Letterhead/style.css.ts +152 -0
  21. package/lib/LetterheadForm/LetterheadReadonlyTextField.stories.tsx +17 -0
  22. package/lib/LetterheadForm/LetterheadSubmitError.stories.tsx +19 -0
  23. package/lib/LetterheadForm/LetterheadTextField.stories.tsx +19 -0
  24. package/lib/LetterheadForm/index.tsx +137 -0
  25. package/lib/LetterheadForm/style.css.ts +89 -0
  26. package/lib/LoadingIndicator.tsx +40 -0
  27. package/lib/MiddotSeparated/MiddotSeparated.stories.ts +26 -0
  28. package/lib/MiddotSeparated/MiddotSeparated.tsx +26 -0
  29. package/lib/MiddotSeparated/style.css.ts +10 -0
  30. package/lib/ModalDialog/index.tsx +28 -0
  31. package/lib/ModalDialog/style.css.ts +88 -0
  32. package/lib/ModernIDB/Cursor.ts +91 -0
  33. package/lib/ModernIDB/ModernIDB.ts +337 -0
  34. package/lib/ModernIDB/ModernIDBError.ts +9 -0
  35. package/lib/ModernIDB/ObjectStore.ts +195 -0
  36. package/lib/ModernIDB/ObjectStoreIndex.ts +102 -0
  37. package/lib/ModernIDB/README.md +9 -0
  38. package/lib/ModernIDB/Transaction.ts +40 -0
  39. package/lib/ModernIDB/VersionChangeManager.ts +57 -0
  40. package/lib/ModernIDB/bindings/factory.tsx +165 -0
  41. package/lib/ModernIDB/bindings/index.ts +2 -0
  42. package/{dist/ModernIDB/bindings/types.d.ts → lib/ModernIDB/bindings/types.ts} +32 -13
  43. package/lib/ModernIDB/bindings/utils.tsx +32 -0
  44. package/lib/ModernIDB/index.ts +10 -0
  45. package/lib/ModernIDB/types.ts +120 -0
  46. package/lib/ModernIDB/utils.ts +51 -0
  47. package/lib/QRCode/QRCode.stories.tsx +41 -0
  48. package/lib/QRCode/QRCode.tsx +54 -0
  49. package/lib/QRCode/style.css.ts +23 -0
  50. package/lib/ReleaseInfo/index.tsx +29 -0
  51. package/lib/RulesetResolver.ts +214 -0
  52. package/lib/SafariCheck/SafariCheck.stories.tsx +99 -0
  53. package/lib/SafariCheck/SafariCheck.tsx +273 -0
  54. package/lib/SafariCheck/addToDock.svg +13 -0
  55. package/lib/SafariCheck/addToHomeScreen.svg +12 -0
  56. package/lib/SafariCheck/safari.svg +32 -0
  57. package/lib/SafariCheck/shareIcon.svg +11 -0
  58. package/lib/SafariCheck/style.css.ts +106 -0
  59. package/lib/ServiceWorkerHandler.tsx +53 -0
  60. package/lib/ShareButton/ShareButton.stories.tsx +58 -0
  61. package/lib/ShareButton/ShareButton.tsx +153 -0
  62. package/lib/ShareButton/test.css.ts +3 -0
  63. package/lib/SubscribeCard/LetterheadInfoCard.tsx +23 -0
  64. package/lib/SubscribeCard/SubscribeByEmailCard.stories.tsx +69 -0
  65. package/lib/SubscribeCard/SubscribeByEmailCard.tsx +183 -0
  66. package/lib/SubscribeCard/SubscribeByPledgeCard.stories.tsx +133 -0
  67. package/lib/SubscribeCard/SubscribeByPledgeCard.tsx +127 -0
  68. package/lib/SubscribeCard/style.css.ts +14 -0
  69. package/lib/Sync/SyncIcon.stories.tsx +67 -0
  70. package/lib/Sync/SyncIcon.tsx +102 -0
  71. package/lib/Sync/SyncLog.tsx +222 -0
  72. package/lib/Sync/SyncLogList.stories.tsx +219 -0
  73. package/lib/Sync/style.css.ts +126 -0
  74. package/lib/account/AccountIcon.tsx +15 -0
  75. package/lib/account/AccountIssueView.tsx +44 -0
  76. package/lib/account/AlreadyLoggedInView.tsx +47 -0
  77. package/lib/account/CurrentUserFetcher.stories.tsx +292 -0
  78. package/lib/account/CurrentUserFetcher.tsx +118 -0
  79. package/lib/account/FailureFallbackView.tsx +36 -0
  80. package/lib/account/JoinCard.stories.tsx +257 -0
  81. package/lib/account/JoinCard.tsx +301 -0
  82. package/lib/account/LoadingView.tsx +14 -0
  83. package/lib/account/LoginCard.stories.tsx +288 -0
  84. package/lib/account/LoginCard.tsx +100 -0
  85. package/lib/account/LoginView.tsx +151 -0
  86. package/lib/account/NoConnectionView.tsx +34 -0
  87. package/lib/account/PasswordResetCard.stories.tsx +242 -0
  88. package/lib/account/PasswordResetCard.tsx +296 -0
  89. package/lib/account/UserMismatchView.tsx +62 -0
  90. package/lib/account/VerifyPage.tsx +195 -0
  91. package/lib/account/iconMask.svg +3 -0
  92. package/lib/account/style.css.ts +81 -0
  93. package/{dist/account/types.d.ts → lib/account/types.ts} +6 -3
  94. package/lib/account/useFetchCurrentUser.tsx +63 -0
  95. package/lib/account/useRedirectPath.ts +21 -0
  96. package/lib/animations.css.ts +17 -0
  97. package/lib/append-copy-to-text.ts +35 -0
  98. package/lib/async-op.ts +286 -0
  99. package/lib/atomic.css.ts +11 -0
  100. package/{dist/caught-value.d.ts → lib/caught-value.ts} +11 -1
  101. package/{dist/class-names.d.ts → lib/class-names.ts} +17 -6
  102. package/lib/client.ts +662 -0
  103. package/lib/common.css.ts +48 -0
  104. package/lib/copyrightRange.ts +10 -0
  105. package/lib/createSafeStorage.ts +91 -0
  106. package/lib/createStrictContext.ts +15 -0
  107. package/lib/failureMessages.ts +108 -0
  108. package/lib/form/FormSubmitButton.tsx +58 -0
  109. package/lib/form/SubmitErrorAlert.tsx +21 -0
  110. package/lib/form/style.css.ts +9 -0
  111. package/lib/globals.css.ts +62 -0
  112. package/lib/groupBy.ts +25 -0
  113. package/lib/hrefs.ts +48 -0
  114. package/lib/idToDate.ts +8 -0
  115. package/lib/ids.ts +6 -0
  116. package/lib/index.ts +75 -0
  117. package/lib/internal.css.ts +10 -0
  118. package/lib/mailto.ts +40 -0
  119. package/lib/media.ts +50 -0
  120. package/lib/random.ts +19 -0
  121. package/lib/result/swr.ts +18 -0
  122. package/{dist/sleep.d.ts → lib/sleep.ts} +3 -1
  123. package/lib/store/index.tsx +294 -0
  124. package/lib/store/store.ts +482 -0
  125. package/lib/store/types.ts +45 -0
  126. package/lib/store/utils.ts +54 -0
  127. package/lib/storybook/decorators.tsx +10 -0
  128. package/lib/structs.ts +3 -0
  129. package/{dist/typeguards.d.ts → lib/typeguards.ts} +3 -1
  130. package/{dist/types.d.ts → lib/types.ts} +23 -12
  131. package/lib/unique.ts +24 -0
  132. package/lib/use-async-op.ts +16 -0
  133. package/lib/use-document-background-color.ts +16 -0
  134. package/lib/use-form.ts +78 -0
  135. package/lib/use-is-installed.ts +17 -0
  136. package/lib/use-media-query.ts +21 -0
  137. package/lib/use-reverting-state.ts +32 -0
  138. package/lib/use-scroll-restoration.ts +99 -0
  139. package/lib/useEnsureValue.ts +31 -0
  140. package/lib/useInvokeClient.ts +54 -0
  141. package/lib/useIsVisible.ts +27 -0
  142. package/lib/utm.ts +92 -0
  143. package/lib/validations.ts +25 -0
  144. package/lib/vars.css.ts +13 -0
  145. package/package.json +23 -29
  146. package/dist/AppConfig/AppConfig.d.ts +0 -29
  147. package/dist/AuthCard/AuthCard.d.ts +0 -10
  148. package/dist/AuthCard/AuthCard.stories.d.ts +0 -34
  149. package/dist/AuthCard/style.css.d.ts +0 -23
  150. package/dist/DialogTrigger/index.d.ts +0 -13
  151. package/dist/DocumentTitle/DocumentTitle.d.ts +0 -3
  152. package/dist/EnumMapper.d.ts +0 -25
  153. package/dist/ExternalLink.d.ts +0 -3
  154. package/dist/FullscreenDismissBlocker.d.ts +0 -5
  155. package/dist/IndieTabletopClubLogo.d.ts +0 -7
  156. package/dist/IndieTabletopClubSymbol.d.ts +0 -7
  157. package/dist/InfoPage/index.d.ts +0 -8
  158. package/dist/InfoPage/pages.d.ts +0 -2
  159. package/dist/InfoPage/style.css.d.ts +0 -5
  160. package/dist/Letterhead/index.d.ts +0 -19
  161. package/dist/Letterhead/stories.d.ts +0 -13
  162. package/dist/Letterhead/style.css.d.ts +0 -46
  163. package/dist/LetterheadForm/LetterheadReadonlyTextField.stories.d.ts +0 -17
  164. package/dist/LetterheadForm/LetterheadSubmitError.stories.d.ts +0 -11
  165. package/dist/LetterheadForm/LetterheadTextField.stories.d.ts +0 -336
  166. package/dist/LetterheadForm/index.d.ts +0 -44
  167. package/dist/LetterheadForm/style.css.d.ts +0 -8
  168. package/dist/LoadingIndicator.d.ts +0 -3
  169. package/dist/MiddotSeparated/MiddotSeparated.d.ts +0 -8
  170. package/dist/MiddotSeparated/MiddotSeparated.stories.d.ts +0 -586
  171. package/dist/MiddotSeparated/style.css.d.ts +0 -1
  172. package/dist/ModalDialog/index.d.ts +0 -12
  173. package/dist/ModalDialog/style.css.d.ts +0 -58
  174. package/dist/ModernIDB/Cursor.d.ts +0 -56
  175. package/dist/ModernIDB/ModernIDB.d.ts +0 -66
  176. package/dist/ModernIDB/ModernIDBError.d.ts +0 -3
  177. package/dist/ModernIDB/ObjectStore.d.ts +0 -112
  178. package/dist/ModernIDB/ObjectStoreIndex.d.ts +0 -53
  179. package/dist/ModernIDB/Transaction.d.ts +0 -16
  180. package/dist/ModernIDB/VersionChangeManager.d.ts +0 -30
  181. package/dist/ModernIDB/bindings/factory.d.ts +0 -12
  182. package/dist/ModernIDB/bindings/index.d.ts +0 -2
  183. package/dist/ModernIDB/bindings/utils.d.ts +0 -2
  184. package/dist/ModernIDB/index.d.ts +0 -10
  185. package/dist/ModernIDB/types.d.ts +0 -88
  186. package/dist/ModernIDB/utils.d.ts +0 -4
  187. package/dist/QRCode/QRCode.d.ts +0 -7
  188. package/dist/QRCode/QRCode.stories.d.ts +0 -33
  189. package/dist/QRCode/style.css.d.ts +0 -4
  190. package/dist/ReleaseInfo/index.d.ts +0 -5
  191. package/dist/RulesetResolver.d.ts +0 -87
  192. package/dist/SafariCheck/SafariCheck.d.ts +0 -23
  193. package/dist/SafariCheck/SafariCheck.stories.d.ts +0 -73
  194. package/dist/SafariCheck/style.css.d.ts +0 -17
  195. package/dist/ServiceWorkerHandler.d.ts +0 -11
  196. package/dist/ShareButton/ShareButton.d.ts +0 -57
  197. package/dist/ShareButton/ShareButton.stories.d.ts +0 -1577
  198. package/dist/ShareButton/test.css.d.ts +0 -1
  199. package/dist/SubscribeCard/LetterheadInfoCard.d.ts +0 -2
  200. package/dist/SubscribeCard/SubscribeByEmailCard.d.ts +0 -24
  201. package/dist/SubscribeCard/SubscribeByEmailCard.stories.d.ts +0 -10
  202. package/dist/SubscribeCard/SubscribeByPledgeCard.d.ts +0 -36
  203. package/dist/SubscribeCard/SubscribeByPledgeCard.stories.d.ts +0 -65
  204. package/dist/SubscribeCard/style.css.d.ts +0 -4
  205. package/dist/account/AccountIssueView.d.ts +0 -3
  206. package/dist/account/AlreadyLoggedInView.d.ts +0 -5
  207. package/dist/account/CurrentUserFetcher.d.ts +0 -20
  208. package/dist/account/CurrentUserFetcher.stories.d.ts +0 -136
  209. package/dist/account/FailureFallbackView.d.ts +0 -1
  210. package/dist/account/JoinCard.d.ts +0 -14
  211. package/dist/account/JoinCard.stories.d.ts +0 -143
  212. package/dist/account/LoadingView.d.ts +0 -1
  213. package/dist/account/LoginCard.d.ts +0 -39
  214. package/dist/account/LoginCard.stories.d.ts +0 -217
  215. package/dist/account/LoginView.d.ts +0 -10
  216. package/dist/account/NoConnectionView.d.ts +0 -4
  217. package/dist/account/PasswordResetCard.d.ts +0 -15
  218. package/dist/account/PasswordResetCard.stories.d.ts +0 -128
  219. package/dist/account/UserMismatchView.d.ts +0 -6
  220. package/dist/account/VerifyPage.d.ts +0 -13
  221. package/dist/account/style.css.d.ts +0 -10
  222. package/dist/account/useFetchCurrentUser.d.ts +0 -28
  223. package/dist/account/useRedirectPath.d.ts +0 -6
  224. package/dist/animations.css.d.ts +0 -3
  225. package/dist/append-copy-to-text.d.ts +0 -10
  226. package/dist/append-copy-to-text.test.d.ts +0 -1
  227. package/dist/appkit.css +0 -1
  228. package/dist/appkit.js +0 -10692
  229. package/dist/async-op.d.ts +0 -101
  230. package/dist/atomic.css.d.ts +0 -6
  231. package/dist/client.d.ts +0 -424
  232. package/dist/common.css.d.ts +0 -5
  233. package/dist/copyrightRange.d.ts +0 -1
  234. package/dist/copyrightRange.test.d.ts +0 -1
  235. package/dist/createSafeStorage.d.ts +0 -34
  236. package/dist/failureMessages.d.ts +0 -20
  237. package/dist/failureMessages.test.d.ts +0 -1
  238. package/dist/form/FormSubmitButton.d.ts +0 -17
  239. package/dist/form/SubmitErrorAlert.d.ts +0 -5
  240. package/dist/form/style.css.d.ts +0 -3
  241. package/dist/globals.css.d.ts +0 -0
  242. package/dist/groupBy.d.ts +0 -1
  243. package/dist/groupBy.test.d.ts +0 -1
  244. package/dist/hrefs.d.ts +0 -32
  245. package/dist/hrefs.test.d.ts +0 -1
  246. package/dist/idToDate.d.ts +0 -5
  247. package/dist/idToDate.test.d.ts +0 -1
  248. package/dist/ids.d.ts +0 -1
  249. package/dist/ids.test.d.ts +0 -1
  250. package/dist/index.d.ts +0 -64
  251. package/dist/internal.css.d.ts +0 -2
  252. package/dist/mailto.d.ts +0 -8
  253. package/dist/mailto.test.d.ts +0 -1
  254. package/dist/media.d.ts +0 -39
  255. package/dist/random.d.ts +0 -3
  256. package/dist/result/swr.d.ts +0 -4
  257. package/dist/store/index.d.ts +0 -237
  258. package/dist/store/store.d.ts +0 -144
  259. package/dist/store/types.d.ts +0 -49
  260. package/dist/store/utils.d.ts +0 -10
  261. package/dist/storybook/decorators.d.ts +0 -3
  262. package/dist/structs.d.ts +0 -1
  263. package/dist/typeguards.test.d.ts +0 -1
  264. package/dist/unique.d.ts +0 -10
  265. package/dist/unique.test.d.ts +0 -1
  266. package/dist/use-async-op.d.ts +0 -6
  267. package/dist/use-document-background-color.d.ts +0 -4
  268. package/dist/use-form.d.ts +0 -29
  269. package/dist/use-is-installed.d.ts +0 -8
  270. package/dist/use-media-query.d.ts +0 -1
  271. package/dist/use-reverting-state.d.ts +0 -5
  272. package/dist/use-scroll-restoration.d.ts +0 -25
  273. package/dist/useEnsureValue.d.ts +0 -6
  274. package/dist/useInvokeClient.d.ts +0 -25
  275. package/dist/useIsVisible.d.ts +0 -4
  276. package/dist/utm.d.ts +0 -58
  277. package/dist/utm.test.d.ts +0 -1
  278. package/dist/validations.d.ts +0 -3
  279. package/dist/vars.css.d.ts +0 -10
@@ -0,0 +1,286 @@
1
+ type Falsy = null | undefined | false | 0 | 0n | "";
2
+
3
+ type Truthy<T> = Exclude<T, Falsy>;
4
+
5
+ interface Operation<SuccessValue, FailureValue> {
6
+ readonly type: "SUCCESS" | "FAILURE" | "PENDING";
7
+ readonly isPending: boolean;
8
+ readonly isSuccess: boolean;
9
+ readonly isFailure: boolean;
10
+
11
+ val: SuccessValue | FailureValue | null;
12
+
13
+ valueOrNull(): SuccessValue | null;
14
+ valueOrThrow(): SuccessValue;
15
+ hasTruthyValue(): boolean;
16
+ failureValueOrNull(): FailureValue | null;
17
+ failureValueOrThrow(): FailureValue;
18
+
19
+ flatMap<T extends AsyncOp<unknown, unknown>>(
20
+ mappingFn: (value: SuccessValue) => T,
21
+ ): T | Failure<FailureValue> | Pending;
22
+
23
+ mapSuccess<MappedSuccess>(
24
+ mappingFn: (value: SuccessValue) => MappedSuccess,
25
+ ): Operation<MappedSuccess, FailureValue>;
26
+
27
+ mapFailure<MappedFailure>(
28
+ mappingFn: (value: FailureValue) => MappedFailure,
29
+ ): Operation<SuccessValue, MappedFailure>;
30
+
31
+ unpack<S, F, P>(
32
+ mapS: (value: SuccessValue) => S,
33
+ mapF: (failure: FailureValue) => F,
34
+ mapP: () => P,
35
+ ): S | F | P;
36
+
37
+ toJSON(): object;
38
+ }
39
+
40
+ export class Pending implements Operation<never, never> {
41
+ readonly type = "PENDING" as const;
42
+ readonly isPending = true as const;
43
+ readonly isSuccess = false as const;
44
+ readonly isFailure = false as const;
45
+
46
+ val = null;
47
+
48
+ valueOrNull(): null {
49
+ return null;
50
+ }
51
+
52
+ valueOrThrow(): never {
53
+ throw new Error(
54
+ `AsyncOp value was accessed but the op is in Pending state.`,
55
+ { cause: this },
56
+ );
57
+ }
58
+
59
+ hasTruthyValue(): false {
60
+ return false;
61
+ }
62
+
63
+ failureValueOrNull(): null {
64
+ return null;
65
+ }
66
+
67
+ failureValueOrThrow(): never {
68
+ throw new Error(
69
+ `AsyncOp failure value was accessed but the op is in Pending state.`,
70
+ { cause: this },
71
+ );
72
+ }
73
+
74
+ flatMap() {
75
+ return new Pending();
76
+ }
77
+
78
+ mapSuccess() {
79
+ return new Pending();
80
+ }
81
+
82
+ mapFailure() {
83
+ return new Pending();
84
+ }
85
+
86
+ unpack<S, F, P>(
87
+ _mapS: (value: never) => S,
88
+ _mapF: (failure: never) => F,
89
+ mapP: () => P,
90
+ ): S | F | P {
91
+ return mapP();
92
+ }
93
+
94
+ toJSON() {
95
+ return { type: this.type };
96
+ }
97
+ }
98
+
99
+ export class Success<SuccessValue> implements Operation<SuccessValue, never> {
100
+ readonly type = "SUCCESS" as const;
101
+ readonly isPending = false as const;
102
+ readonly isSuccess = true as const;
103
+ readonly isFailure = false as const;
104
+ readonly value: SuccessValue;
105
+ readonly val: SuccessValue;
106
+
107
+ constructor(value: SuccessValue) {
108
+ this.value = value;
109
+ this.val = value;
110
+ }
111
+
112
+ valueOrNull(): SuccessValue {
113
+ return this.value;
114
+ }
115
+
116
+ valueOrThrow(): SuccessValue {
117
+ return this.value;
118
+ }
119
+
120
+ hasTruthyValue(): this is Success<Truthy<SuccessValue>> {
121
+ return !!this.value;
122
+ }
123
+
124
+ failureValueOrNull(): null {
125
+ return null;
126
+ }
127
+
128
+ failureValueOrThrow(): never {
129
+ throw new Error(
130
+ `AsyncOp failure value was accessed but the op is in Success state.`,
131
+ { cause: this },
132
+ );
133
+ }
134
+
135
+ flatMap<T extends AsyncOp<unknown, unknown>>(
136
+ mappingFn: (value: SuccessValue) => T,
137
+ ) {
138
+ return mappingFn(this.value);
139
+ }
140
+
141
+ mapSuccess<MappedValue>(mappingFn: (value: SuccessValue) => MappedValue) {
142
+ return new Success(mappingFn(this.value));
143
+ }
144
+
145
+ mapFailure() {
146
+ return new Success(this.value);
147
+ }
148
+
149
+ unpack<S, F, P>(
150
+ mapS: (value: SuccessValue) => S,
151
+ _mapF: (failure: never) => F,
152
+ _mapP: () => P,
153
+ ): S | F | P {
154
+ return mapS(this.value);
155
+ }
156
+
157
+ toJSON() {
158
+ return {
159
+ type: this.type,
160
+ value: this.value,
161
+ };
162
+ }
163
+ }
164
+
165
+ export class Failure<FailureValue> implements Operation<never, FailureValue> {
166
+ readonly type = "FAILURE" as const;
167
+ readonly isPending = false as const;
168
+ readonly isSuccess = false as const;
169
+ readonly isFailure = true as const;
170
+ readonly failure: FailureValue;
171
+ readonly val: FailureValue;
172
+
173
+ constructor(failure: FailureValue) {
174
+ this.failure = failure;
175
+ this.val = failure;
176
+ }
177
+
178
+ valueOrNull(): null {
179
+ return null;
180
+ }
181
+
182
+ valueOrThrow(): never {
183
+ throw new Error(
184
+ `AsyncOp value was accessed but the op is in Failure state.`,
185
+ { cause: this },
186
+ );
187
+ }
188
+
189
+ hasTruthyValue(): false {
190
+ return false;
191
+ }
192
+
193
+ failureValueOrNull(): FailureValue {
194
+ return this.failure;
195
+ }
196
+
197
+ failureValueOrThrow(): FailureValue {
198
+ return this.failure;
199
+ }
200
+
201
+ flatMap() {
202
+ return new Failure(this.failure);
203
+ }
204
+
205
+ mapSuccess() {
206
+ return new Failure(this.failure);
207
+ }
208
+
209
+ mapFailure<MappedFailure>(mappingFn: (value: FailureValue) => MappedFailure) {
210
+ return new Failure(mappingFn(this.failure));
211
+ }
212
+
213
+ unpack<S, F, P>(
214
+ _mapS: (value: never) => S,
215
+ mapF: (failure: FailureValue) => F,
216
+ _mapP: () => P,
217
+ ): S | F | P {
218
+ return mapF(this.failure);
219
+ }
220
+
221
+ toJSON() {
222
+ return {
223
+ type: this.type,
224
+ failure: this.failure,
225
+ };
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Folds multiple ops into a single op.
231
+ *
232
+ * To return a Success, all ops provided must be a Success. If any Failures are
233
+ * encountered, will return the first one found.
234
+ *
235
+ * If neither of these conditions is true, will return Pending.
236
+ *
237
+ * Note that if passed an empty array, will always return a Success (with an
238
+ * empty array as value). This mimics the semantics of many JS constructs, like
239
+ * Promise.all or Array.prototype.every.
240
+ */
241
+ export function fold<Ops extends readonly AsyncOp<unknown, unknown>[] | []>(
242
+ ops: Ops,
243
+ ): AsyncOp<
244
+ {
245
+ -readonly [Index in keyof Ops]: Ops[Index] extends AsyncOp<infer S, unknown>
246
+ ? S
247
+ : never;
248
+ },
249
+ Ops[number] extends AsyncOp<unknown, infer F> ? F : never
250
+ > {
251
+ // Note that due to the semantics of `every`, if the array provided to `fold`
252
+ // is empty, the result will be a Success with an empty array.
253
+ if (ops.every((v) => v.isSuccess)) {
254
+ return new Success(
255
+ (ops as Success<unknown>[]).map((op) => op.value),
256
+ ) as never;
257
+ }
258
+
259
+ const firstFail = ops.find((op) => op.isFailure);
260
+ if (firstFail) {
261
+ return firstFail as never;
262
+ }
263
+
264
+ return new Pending() as never;
265
+ }
266
+
267
+ export function isAsyncOp(value: unknown): value is AsyncOp<unknown, unknown> {
268
+ return (
269
+ value instanceof Pending ||
270
+ value instanceof Success ||
271
+ value instanceof Failure
272
+ );
273
+ }
274
+
275
+ export type AsyncOp<SuccessValue, FailureValue> =
276
+ | Pending
277
+ | Success<SuccessValue>
278
+ | Failure<FailureValue>;
279
+
280
+ export function fromTryCatch<T>(callback: () => T) {
281
+ try {
282
+ return new Success(callback());
283
+ } catch (cause) {
284
+ return new Failure(cause);
285
+ }
286
+ }
@@ -0,0 +1,11 @@
1
+ import { createSprinkles, defineProperties } from "@vanilla-extract/sprinkles";
2
+
3
+ const atomic = defineProperties({
4
+ properties: {
5
+ textAlign: ["start", "center", "end"],
6
+ },
7
+ });
8
+
9
+ export const textVariants = createSprinkles(atomic);
10
+
11
+ export type TextVariants = Parameters<typeof textVariants>[0];
@@ -12,4 +12,14 @@
12
12
  * if so, returns its message. If a string was caught, it returns that.
13
13
  * Otherwise, it returns "Unknown error".
14
14
  */
15
- export declare function caughtValueToString(value: unknown): string;
15
+ export function caughtValueToString(value: unknown): string {
16
+ if (value instanceof Error) {
17
+ return value.message;
18
+ }
19
+
20
+ if (typeof value === "string") {
21
+ return value;
22
+ }
23
+
24
+ return "Unknown error.";
25
+ }
@@ -1,13 +1,22 @@
1
1
  type Falsy = false | null | undefined;
2
+
2
3
  type PropsWithClassName = {
3
- className?: ClassName;
4
+ className?: ClassName;
4
5
  };
6
+
5
7
  type ClassName = string | PropsWithClassName | Falsy;
8
+
6
9
  /**
7
10
  * Combines a list of strings or objects with className property into a single
8
11
  * string. Falsy values are ignored.
9
12
  */
10
- export declare function classNames(...classNames: ClassName[]): string;
13
+ export function classNames(...classNames: ClassName[]) {
14
+ return classNames
15
+ .filter((cn) => !!cn)
16
+ .map((cn) => (typeof cn === "object" ? cn?.className : cn))
17
+ .join(" ");
18
+ }
19
+
11
20
  /**
12
21
  * Given a list of strings or objects with the className property, returns an
13
22
  * object with className property and combined className. Falsy values will
@@ -16,7 +25,9 @@ export declare function classNames(...classNames: ClassName[]): string;
16
25
  * @example
17
26
  * <h1 {...cx(props, 'heading', 'bold')}>Hello world!</h1>
18
27
  */
19
- export declare function cx(...cns: ClassName[]): {
20
- className: string;
21
- };
22
- export {};
28
+
29
+ export function cx(...cns: ClassName[]) {
30
+ return {
31
+ className: classNames(...cns),
32
+ };
33
+ }