@azurioh/discord-kernel 0.1.0 → 1.0.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 (529) hide show
  1. package/README.md +318 -1
  2. package/dist/authz/require-level-guard.d.ts +1 -1
  3. package/dist/authz/require-level-guard.d.ts.map +1 -1
  4. package/dist/color.d.ts +42 -0
  5. package/dist/color.d.ts.map +1 -0
  6. package/dist/color.js +130 -0
  7. package/dist/color.js.map +1 -0
  8. package/dist/discord/command/all-required.d.ts +8 -0
  9. package/dist/discord/command/all-required.d.ts.map +1 -0
  10. package/dist/discord/command/all-required.js +12 -0
  11. package/dist/discord/command/all-required.js.map +1 -0
  12. package/dist/discord/command/autocomplete-dispatcher.d.ts.map +1 -1
  13. package/dist/discord/command/autocomplete-dispatcher.js +2 -1
  14. package/dist/discord/command/autocomplete-dispatcher.js.map +1 -1
  15. package/dist/discord/command/autocomplete-limits.d.ts +3 -0
  16. package/dist/discord/command/autocomplete-limits.d.ts.map +1 -0
  17. package/dist/discord/command/autocomplete-limits.js +6 -0
  18. package/dist/discord/command/autocomplete-limits.js.map +1 -0
  19. package/dist/discord/command/autocomplete.d.ts +6 -1
  20. package/dist/discord/command/autocomplete.d.ts.map +1 -1
  21. package/dist/discord/command/autocomplete.js +6 -6
  22. package/dist/discord/command/autocomplete.js.map +1 -1
  23. package/dist/discord/command/command-responders.d.ts +26 -0
  24. package/dist/discord/command/command-responders.d.ts.map +1 -0
  25. package/dist/discord/command/command-responders.js +16 -0
  26. package/dist/discord/command/command-responders.js.map +1 -0
  27. package/dist/discord/command/context.d.ts +8 -17
  28. package/dist/discord/command/context.d.ts.map +1 -1
  29. package/dist/discord/command/context.js +8 -37
  30. package/dist/discord/command/context.js.map +1 -1
  31. package/dist/discord/command/cooldown-guard.d.ts +1 -1
  32. package/dist/discord/command/cooldown-guard.d.ts.map +1 -1
  33. package/dist/discord/command/create-command.d.ts +1 -8
  34. package/dist/discord/command/create-command.d.ts.map +1 -1
  35. package/dist/discord/command/create-command.js +17 -65
  36. package/dist/discord/command/create-command.js.map +1 -1
  37. package/dist/discord/command/create-context-menu-command.d.ts +3 -9
  38. package/dist/discord/command/create-context-menu-command.d.ts.map +1 -1
  39. package/dist/discord/command/create-context-menu-command.js +14 -65
  40. package/dist/discord/command/create-context-menu-command.js.map +1 -1
  41. package/dist/discord/command/errors.d.ts +1 -1
  42. package/dist/discord/command/errors.d.ts.map +1 -1
  43. package/dist/discord/command/errors.js +2 -2
  44. package/dist/discord/command/errors.js.map +1 -1
  45. package/dist/discord/command/guard.d.ts +15 -8
  46. package/dist/discord/command/guard.d.ts.map +1 -1
  47. package/dist/discord/command/guard.js +4 -4
  48. package/dist/discord/command/guard.js.map +1 -1
  49. package/dist/discord/command/options.d.ts +1 -10
  50. package/dist/discord/command/options.d.ts.map +1 -1
  51. package/dist/discord/command/options.js +127 -320
  52. package/dist/discord/command/options.js.map +1 -1
  53. package/dist/discord/command/passes-guard.d.ts +14 -0
  54. package/dist/discord/command/passes-guard.d.ts.map +1 -0
  55. package/dist/discord/command/passes-guard.js +27 -0
  56. package/dist/discord/command/passes-guard.js.map +1 -0
  57. package/dist/discord/command/permission-guard.d.ts +1 -1
  58. package/dist/discord/command/permission-guard.d.ts.map +1 -1
  59. package/dist/discord/command/render-command-failure.d.ts +23 -0
  60. package/dist/discord/command/render-command-failure.d.ts.map +1 -0
  61. package/dist/discord/command/render-command-failure.js +40 -0
  62. package/dist/discord/command/render-command-failure.js.map +1 -0
  63. package/dist/discord/command/route-key.d.ts +8 -0
  64. package/dist/discord/command/route-key.d.ts.map +1 -0
  65. package/dist/discord/command/route-key.js +13 -0
  66. package/dist/discord/command/route-key.js.map +1 -0
  67. package/dist/discord/command/router.d.ts +32 -7
  68. package/dist/discord/command/router.d.ts.map +1 -1
  69. package/dist/discord/command/router.js +48 -10
  70. package/dist/discord/command/router.js.map +1 -1
  71. package/dist/discord/command/send-embed.d.ts +14 -0
  72. package/dist/discord/command/send-embed.d.ts.map +1 -0
  73. package/dist/discord/command/send-embed.js +37 -0
  74. package/dist/discord/command/send-embed.js.map +1 -0
  75. package/dist/discord/command/types.d.ts +7 -1
  76. package/dist/discord/command/types.d.ts.map +1 -1
  77. package/dist/discord/components/component-access.d.ts +12 -0
  78. package/dist/discord/components/component-access.d.ts.map +1 -0
  79. package/dist/discord/components/component-access.js +21 -0
  80. package/dist/discord/components/component-access.js.map +1 -0
  81. package/dist/discord/components/component-router.d.ts +37 -15
  82. package/dist/discord/components/component-router.d.ts.map +1 -1
  83. package/dist/discord/components/component-router.js +44 -32
  84. package/dist/discord/components/component-router.js.map +1 -1
  85. package/dist/discord/components/interactive-message/index.d.ts +3 -1
  86. package/dist/discord/components/interactive-message/index.d.ts.map +1 -1
  87. package/dist/discord/components/interactive-message/index.js +5 -3
  88. package/dist/discord/components/interactive-message/index.js.map +1 -1
  89. package/dist/discord/components/interactive-message/interactive-message-collector.d.ts +3 -28
  90. package/dist/discord/components/interactive-message/interactive-message-collector.d.ts.map +1 -1
  91. package/dist/discord/components/interactive-message/interactive-message-collector.js +6 -53
  92. package/dist/discord/components/interactive-message/interactive-message-collector.js.map +1 -1
  93. package/dist/discord/components/interactive-message/message-edit-options.d.ts +18 -0
  94. package/dist/discord/components/interactive-message/message-edit-options.d.ts.map +1 -0
  95. package/dist/discord/components/interactive-message/message-edit-options.js +40 -0
  96. package/dist/discord/components/interactive-message/message-edit-options.js.map +1 -0
  97. package/dist/discord/components/interactive-message/mount-interactive-message.d.ts +2 -1
  98. package/dist/discord/components/interactive-message/mount-interactive-message.d.ts.map +1 -1
  99. package/dist/discord/components/interactive-message/mount-interactive-message.js +4 -2
  100. package/dist/discord/components/interactive-message/mount-interactive-message.js.map +1 -1
  101. package/dist/discord/components/interactive-message/state-store.d.ts +12 -0
  102. package/dist/discord/components/interactive-message/state-store.d.ts.map +1 -0
  103. package/dist/discord/components/interactive-message/state-store.js +14 -0
  104. package/dist/discord/components/interactive-message/state-store.js.map +1 -0
  105. package/dist/discord/components/paginator/mount-paginator.js +7 -5
  106. package/dist/discord/components/paginator/mount-paginator.js.map +1 -1
  107. package/dist/discord/components/paginator/paginator-view.d.ts +1 -1
  108. package/dist/discord/components/paginator/paginator-view.d.ts.map +1 -1
  109. package/dist/discord/components/persistent-paginator.d.ts +1 -1
  110. package/dist/discord/components/persistent-paginator.d.ts.map +1 -1
  111. package/dist/discord/components/persistent-paginator.js +6 -6
  112. package/dist/discord/components/persistent-paginator.js.map +1 -1
  113. package/dist/discord/components/settings-editor/from-declaration-controls.d.ts +67 -0
  114. package/dist/discord/components/settings-editor/from-declaration-controls.d.ts.map +1 -0
  115. package/dist/discord/components/settings-editor/from-declaration-controls.js +245 -0
  116. package/dist/discord/components/settings-editor/from-declaration-controls.js.map +1 -0
  117. package/dist/discord/components/settings-editor/from-declaration-display.d.ts +23 -0
  118. package/dist/discord/components/settings-editor/from-declaration-display.d.ts.map +1 -0
  119. package/dist/discord/components/settings-editor/from-declaration-display.js +114 -0
  120. package/dist/discord/components/settings-editor/from-declaration-display.js.map +1 -0
  121. package/dist/discord/components/settings-editor/from-declaration-layout.d.ts +33 -0
  122. package/dist/discord/components/settings-editor/from-declaration-layout.d.ts.map +1 -0
  123. package/dist/discord/components/settings-editor/from-declaration-layout.js +178 -0
  124. package/dist/discord/components/settings-editor/from-declaration-layout.js.map +1 -0
  125. package/dist/discord/components/settings-editor/from-declaration-search.d.ts +27 -0
  126. package/dist/discord/components/settings-editor/from-declaration-search.d.ts.map +1 -0
  127. package/dist/discord/components/settings-editor/from-declaration-search.js +58 -0
  128. package/dist/discord/components/settings-editor/from-declaration-search.js.map +1 -0
  129. package/dist/discord/components/settings-editor/from-declaration-stored.d.ts +21 -0
  130. package/dist/discord/components/settings-editor/from-declaration-stored.d.ts.map +1 -0
  131. package/dist/discord/components/settings-editor/from-declaration-stored.js +37 -0
  132. package/dist/discord/components/settings-editor/from-declaration-stored.js.map +1 -0
  133. package/dist/discord/components/settings-editor/from-declaration-subject.d.ts +32 -0
  134. package/dist/discord/components/settings-editor/from-declaration-subject.d.ts.map +1 -0
  135. package/dist/discord/components/settings-editor/from-declaration-subject.js +65 -0
  136. package/dist/discord/components/settings-editor/from-declaration-subject.js.map +1 -0
  137. package/dist/discord/components/settings-editor/from-declaration-values.d.ts +57 -0
  138. package/dist/discord/components/settings-editor/from-declaration-values.d.ts.map +1 -0
  139. package/dist/discord/components/settings-editor/from-declaration-values.js +187 -0
  140. package/dist/discord/components/settings-editor/from-declaration-values.js.map +1 -0
  141. package/dist/discord/components/settings-editor/from-declaration.d.ts +39 -0
  142. package/dist/discord/components/settings-editor/from-declaration.d.ts.map +1 -0
  143. package/dist/discord/components/settings-editor/from-declaration.js +132 -0
  144. package/dist/discord/components/settings-editor/from-declaration.js.map +1 -0
  145. package/dist/discord/components/settings-editor/index.d.ts +3 -1
  146. package/dist/discord/components/settings-editor/index.d.ts.map +1 -1
  147. package/dist/discord/components/settings-editor/index.js +6 -3
  148. package/dist/discord/components/settings-editor/index.js.map +1 -1
  149. package/dist/discord/components/settings-editor/mount-settings-editor.d.ts +16 -2
  150. package/dist/discord/components/settings-editor/mount-settings-editor.d.ts.map +1 -1
  151. package/dist/discord/components/settings-editor/mount-settings-editor.js +14 -10
  152. package/dist/discord/components/settings-editor/mount-settings-editor.js.map +1 -1
  153. package/dist/discord/components/settings-editor/navigation.d.ts +20 -0
  154. package/dist/discord/components/settings-editor/navigation.d.ts.map +1 -1
  155. package/dist/discord/components/settings-editor/navigation.js +22 -0
  156. package/dist/discord/components/settings-editor/navigation.js.map +1 -1
  157. package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts +4 -3
  158. package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts.map +1 -1
  159. package/dist/discord/components/settings-editor/settings-editor-card.view.js +60 -34
  160. package/dist/discord/components/settings-editor/settings-editor-card.view.js.map +1 -1
  161. package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts +2 -1
  162. package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts.map +1 -1
  163. package/dist/discord/components/settings-editor/settings-editor-field-modal.js +48 -72
  164. package/dist/discord/components/settings-editor/settings-editor-field-modal.js.map +1 -1
  165. package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts +6 -0
  166. package/dist/discord/components/settings-editor/settings-editor-field-values.d.ts.map +1 -0
  167. package/dist/discord/components/settings-editor/settings-editor-field-values.js +13 -0
  168. package/dist/discord/components/settings-editor/settings-editor-field-values.js.map +1 -0
  169. package/dist/discord/components/settings-editor/settings-editor-fields.d.ts +6 -5
  170. package/dist/discord/components/settings-editor/settings-editor-fields.d.ts.map +1 -1
  171. package/dist/discord/components/settings-editor/settings-editor-fields.js +0 -10
  172. package/dist/discord/components/settings-editor/settings-editor-fields.js.map +1 -1
  173. package/dist/discord/components/settings-editor/settings-editor.view.d.ts +3 -2
  174. package/dist/discord/components/settings-editor/settings-editor.view.d.ts.map +1 -1
  175. package/dist/discord/components/settings-editor/settings-editor.view.js +4 -21
  176. package/dist/discord/components/settings-editor/settings-editor.view.js.map +1 -1
  177. package/dist/discord/events/event-guild-id.d.ts +10 -0
  178. package/dist/discord/events/event-guild-id.d.ts.map +1 -0
  179. package/dist/discord/events/event-guild-id.js +37 -0
  180. package/dist/discord/events/event-guild-id.js.map +1 -0
  181. package/dist/discord/events/event-router.d.ts +17 -3
  182. package/dist/discord/events/event-router.d.ts.map +1 -1
  183. package/dist/discord/events/event-router.js +33 -9
  184. package/dist/discord/events/event-router.js.map +1 -1
  185. package/dist/discord/i18n.d.ts +17 -2
  186. package/dist/discord/i18n.d.ts.map +1 -1
  187. package/dist/discord/i18n.js +43 -6
  188. package/dist/discord/i18n.js.map +1 -1
  189. package/dist/discord/interaction/interaction-locale.d.ts +14 -0
  190. package/dist/discord/interaction/interaction-locale.d.ts.map +1 -0
  191. package/dist/discord/interaction/interaction-locale.js +12 -0
  192. package/dist/discord/interaction/interaction-locale.js.map +1 -0
  193. package/dist/discord/interaction/locale-resolver.d.ts +27 -0
  194. package/dist/discord/interaction/locale-resolver.d.ts.map +1 -0
  195. package/dist/discord/interaction/locale-resolver.js +3 -0
  196. package/dist/discord/interaction/locale-resolver.js.map +1 -0
  197. package/dist/discord/interaction/modal.d.ts.map +1 -1
  198. package/dist/discord/interaction/modal.js +5 -40
  199. package/dist/discord/interaction/modal.js.map +1 -1
  200. package/dist/discord/interaction/reply-locale.d.ts +18 -0
  201. package/dist/discord/interaction/reply-locale.d.ts.map +1 -0
  202. package/dist/discord/interaction/reply-locale.js +25 -0
  203. package/dist/discord/interaction/reply-locale.js.map +1 -0
  204. package/dist/discord/interaction/select-bounds.d.ts +19 -0
  205. package/dist/discord/interaction/select-bounds.d.ts.map +1 -0
  206. package/dist/discord/interaction/select-bounds.js +17 -0
  207. package/dist/discord/interaction/select-bounds.js.map +1 -0
  208. package/dist/discord/interaction/select-menu.d.ts.map +1 -1
  209. package/dist/discord/interaction/select-menu.js +2 -9
  210. package/dist/discord/interaction/select-menu.js.map +1 -1
  211. package/dist/discord/placeholder-registry.d.ts +1 -1
  212. package/dist/discord/placeholder-registry.d.ts.map +1 -1
  213. package/dist/discord/presenter.d.ts +1 -1
  214. package/dist/discord/presenter.d.ts.map +1 -1
  215. package/dist/discord/settings/discord-guild-directory.d.ts +28 -0
  216. package/dist/discord/settings/discord-guild-directory.d.ts.map +1 -0
  217. package/dist/discord/settings/discord-guild-directory.js +171 -0
  218. package/dist/discord/settings/discord-guild-directory.js.map +1 -0
  219. package/dist/discord/settings/guild-locale-resolver.d.ts +25 -0
  220. package/dist/discord/settings/guild-locale-resolver.d.ts.map +1 -0
  221. package/dist/discord/settings/guild-locale-resolver.js +33 -0
  222. package/dist/discord/settings/guild-locale-resolver.js.map +1 -0
  223. package/dist/discord/settings/is-module-disabled.d.ts +16 -0
  224. package/dist/discord/settings/is-module-disabled.d.ts.map +1 -0
  225. package/dist/discord/settings/is-module-disabled.js +20 -0
  226. package/dist/discord/settings/is-module-disabled.js.map +1 -0
  227. package/dist/discord/settings/module-disabled-embed.d.ts +13 -0
  228. package/dist/discord/settings/module-disabled-embed.d.ts.map +1 -0
  229. package/dist/discord/settings/module-disabled-embed.js +16 -0
  230. package/dist/discord/settings/module-disabled-embed.js.map +1 -0
  231. package/dist/discord/settings/require-configured.d.ts +26 -0
  232. package/dist/discord/settings/require-configured.d.ts.map +1 -0
  233. package/dist/discord/settings/require-configured.js +62 -0
  234. package/dist/discord/settings/require-configured.js.map +1 -0
  235. package/dist/discord/ui/color-aliases.d.ts +31 -0
  236. package/dist/discord/ui/color-aliases.d.ts.map +1 -0
  237. package/dist/discord/ui/color-aliases.js +66 -0
  238. package/dist/discord/ui/color-aliases.js.map +1 -0
  239. package/dist/discord/ui/color-input.d.ts +5 -32
  240. package/dist/discord/ui/color-input.d.ts.map +1 -1
  241. package/dist/discord/ui/color-input.js +8 -157
  242. package/dist/discord/ui/color-input.js.map +1 -1
  243. package/dist/discord/ui/colors.d.ts +0 -2
  244. package/dist/discord/ui/colors.d.ts.map +1 -1
  245. package/dist/discord/ui/colors.js +4 -5
  246. package/dist/discord/ui/colors.js.map +1 -1
  247. package/dist/discord/ui/embed.d.ts.map +1 -1
  248. package/dist/discord/ui/embed.js +3 -8
  249. package/dist/discord/ui/embed.js.map +1 -1
  250. package/dist/discord/ui/truncate-text.d.ts +11 -0
  251. package/dist/discord/ui/truncate-text.d.ts.map +1 -0
  252. package/dist/discord/ui/truncate-text.js +19 -0
  253. package/dist/discord/ui/truncate-text.js.map +1 -0
  254. package/dist/errors/error-message.d.ts +9 -0
  255. package/dist/errors/error-message.d.ts.map +1 -0
  256. package/dist/errors/error-message.js +14 -0
  257. package/dist/errors/error-message.js.map +1 -0
  258. package/dist/i18n/business-message.d.ts +1 -1
  259. package/dist/i18n/business-message.d.ts.map +1 -1
  260. package/dist/i18n/catalog.d.ts +9 -0
  261. package/dist/i18n/catalog.d.ts.map +1 -1
  262. package/dist/i18n/catalog.js +4 -0
  263. package/dist/i18n/catalog.js.map +1 -1
  264. package/dist/i18n/locale.d.ts +2 -0
  265. package/dist/i18n/locale.d.ts.map +1 -1
  266. package/dist/i18n/locale.js +3 -1
  267. package/dist/i18n/locale.js.map +1 -1
  268. package/dist/i18n/translator.d.ts +2 -0
  269. package/dist/i18n/translator.d.ts.map +1 -1
  270. package/dist/i18n/translator.js.map +1 -1
  271. package/dist/module/module.d.ts +15 -1
  272. package/dist/module/module.d.ts.map +1 -1
  273. package/dist/resilience/retry.js +2 -2
  274. package/dist/resilience/retry.js.map +1 -1
  275. package/dist/scheduler/scheduler.d.ts.map +1 -1
  276. package/dist/scheduler/scheduler.js +2 -4
  277. package/dist/scheduler/scheduler.js.map +1 -1
  278. package/dist/settings/cache.d.ts +29 -0
  279. package/dist/settings/cache.d.ts.map +1 -0
  280. package/dist/settings/cache.js +47 -0
  281. package/dist/settings/cache.js.map +1 -0
  282. package/dist/settings/choice.d.ts +10 -0
  283. package/dist/settings/choice.d.ts.map +1 -0
  284. package/dist/settings/choice.js +3 -0
  285. package/dist/settings/choice.js.map +1 -0
  286. package/dist/settings/decode-stored.d.ts +20 -0
  287. package/dist/settings/decode-stored.d.ts.map +1 -0
  288. package/dist/settings/decode-stored.js +35 -0
  289. package/dist/settings/decode-stored.js.map +1 -0
  290. package/dist/settings/define-settings.d.ts +52 -0
  291. package/dist/settings/define-settings.d.ts.map +1 -0
  292. package/dist/settings/define-settings.js +141 -0
  293. package/dist/settings/define-settings.js.map +1 -0
  294. package/dist/settings/describe-field.d.ts +19 -0
  295. package/dist/settings/describe-field.d.ts.map +1 -0
  296. package/dist/settings/describe-field.js +131 -0
  297. package/dist/settings/describe-field.js.map +1 -0
  298. package/dist/settings/describe.d.ts +27 -0
  299. package/dist/settings/describe.d.ts.map +1 -0
  300. package/dist/settings/describe.js +62 -0
  301. package/dist/settings/describe.js.map +1 -0
  302. package/dist/settings/duration.d.ts +16 -0
  303. package/dist/settings/duration.d.ts.map +1 -0
  304. package/dist/settings/duration.js +56 -0
  305. package/dist/settings/duration.js.map +1 -0
  306. package/dist/settings/field-order.d.ts +37 -0
  307. package/dist/settings/field-order.d.ts.map +1 -0
  308. package/dist/settings/field-order.js +100 -0
  309. package/dist/settings/field-order.js.map +1 -0
  310. package/dist/settings/field-search.d.ts +10 -0
  311. package/dist/settings/field-search.d.ts.map +1 -0
  312. package/dist/settings/field-search.js +18 -0
  313. package/dist/settings/field-search.js.map +1 -0
  314. package/dist/settings/fields/builders.d.ts +41 -0
  315. package/dist/settings/fields/builders.d.ts.map +1 -0
  316. package/dist/settings/fields/builders.js +83 -0
  317. package/dist/settings/fields/builders.js.map +1 -0
  318. package/dist/settings/fields/field.d.ts +199 -0
  319. package/dist/settings/fields/field.d.ts.map +1 -0
  320. package/dist/settings/fields/field.js +33 -0
  321. package/dist/settings/fields/field.js.map +1 -0
  322. package/dist/settings/fields/zod-schema.d.ts +67 -0
  323. package/dist/settings/fields/zod-schema.d.ts.map +1 -0
  324. package/dist/settings/fields/zod-schema.js +281 -0
  325. package/dist/settings/fields/zod-schema.js.map +1 -0
  326. package/dist/settings/in-memory/in-memory-guild-directory.d.ts +24 -0
  327. package/dist/settings/in-memory/in-memory-guild-directory.d.ts.map +1 -0
  328. package/dist/settings/in-memory/in-memory-guild-directory.js +42 -0
  329. package/dist/settings/in-memory/in-memory-guild-directory.js.map +1 -0
  330. package/dist/settings/in-memory/in-memory-settings-store.d.ts +8 -0
  331. package/dist/settings/in-memory/in-memory-settings-store.d.ts.map +1 -0
  332. package/dist/settings/in-memory/in-memory-settings-store.js +43 -0
  333. package/dist/settings/in-memory/in-memory-settings-store.js.map +1 -0
  334. package/dist/settings/in-memory/in-process-notifier.d.ts +9 -0
  335. package/dist/settings/in-memory/in-process-notifier.d.ts.map +1 -0
  336. package/dist/settings/in-memory/in-process-notifier.js +32 -0
  337. package/dist/settings/in-memory/in-process-notifier.js.map +1 -0
  338. package/dist/settings/index.d.ts +22 -0
  339. package/dist/settings/index.d.ts.map +1 -0
  340. package/dist/settings/index.js +31 -0
  341. package/dist/settings/index.js.map +1 -0
  342. package/dist/settings/is-plain-object.d.ts +6 -0
  343. package/dist/settings/is-plain-object.d.ts.map +1 -0
  344. package/dist/settings/is-plain-object.js +15 -0
  345. package/dist/settings/is-plain-object.js.map +1 -0
  346. package/dist/settings/messages.d.ts +61 -0
  347. package/dist/settings/messages.d.ts.map +1 -0
  348. package/dist/settings/messages.js +155 -0
  349. package/dist/settings/messages.js.map +1 -0
  350. package/dist/settings/migrate.d.ts +35 -0
  351. package/dist/settings/migrate.d.ts.map +1 -0
  352. package/dist/settings/migrate.js +42 -0
  353. package/dist/settings/migrate.js.map +1 -0
  354. package/dist/settings/ports/guild-directory.d.ts +61 -0
  355. package/dist/settings/ports/guild-directory.d.ts.map +1 -0
  356. package/dist/settings/ports/guild-directory.js +3 -0
  357. package/dist/settings/ports/guild-directory.js.map +1 -0
  358. package/dist/settings/ports/settings-changed-notifier.d.ts +20 -0
  359. package/dist/settings/ports/settings-changed-notifier.d.ts.map +1 -0
  360. package/dist/settings/ports/settings-changed-notifier.js +3 -0
  361. package/dist/settings/ports/settings-changed-notifier.js.map +1 -0
  362. package/dist/settings/ports/settings-store.d.ts +76 -0
  363. package/dist/settings/ports/settings-store.d.ts.map +1 -0
  364. package/dist/settings/ports/settings-store.js +3 -0
  365. package/dist/settings/ports/settings-store.js.map +1 -0
  366. package/dist/settings/registry.d.ts +31 -0
  367. package/dist/settings/registry.d.ts.map +1 -0
  368. package/dist/settings/registry.js +102 -0
  369. package/dist/settings/registry.js.map +1 -0
  370. package/dist/settings/settings-declaration-error.d.ts +13 -0
  371. package/dist/settings/settings-declaration-error.d.ts.map +1 -0
  372. package/dist/settings/settings-declaration-error.js +22 -0
  373. package/dist/settings/settings-declaration-error.js.map +1 -0
  374. package/dist/settings/settings-service.d.ts +148 -0
  375. package/dist/settings/settings-service.d.ts.map +1 -0
  376. package/dist/settings/settings-service.js +279 -0
  377. package/dist/settings/settings-service.js.map +1 -0
  378. package/dist/settings/settings-validation-error.d.ts +23 -0
  379. package/dist/settings/settings-validation-error.d.ts.map +1 -0
  380. package/dist/settings/settings-validation-error.js +17 -0
  381. package/dist/settings/settings-validation-error.js.map +1 -0
  382. package/dist/settings/status.d.ts +16 -0
  383. package/dist/settings/status.d.ts.map +1 -0
  384. package/dist/settings/status.js +18 -0
  385. package/dist/settings/status.js.map +1 -0
  386. package/dist/settings/suggest.d.ts +77 -0
  387. package/dist/settings/suggest.d.ts.map +1 -0
  388. package/dist/settings/suggest.js +192 -0
  389. package/dist/settings/suggest.js.map +1 -0
  390. package/dist/settings/system/kernel-settings.d.ts +43 -0
  391. package/dist/settings/system/kernel-settings.d.ts.map +1 -0
  392. package/dist/settings/system/kernel-settings.js +53 -0
  393. package/dist/settings/system/kernel-settings.js.map +1 -0
  394. package/dist/settings/system/module-gate.d.ts +31 -0
  395. package/dist/settings/system/module-gate.d.ts.map +1 -0
  396. package/dist/settings/system/module-gate.js +34 -0
  397. package/dist/settings/system/module-gate.js.map +1 -0
  398. package/dist/settings/testing/index.d.ts +2 -0
  399. package/dist/settings/testing/index.d.ts.map +1 -0
  400. package/dist/settings/testing/index.js +6 -0
  401. package/dist/settings/testing/index.js.map +1 -0
  402. package/dist/settings/testing/settings-store-contract.d.ts +29 -0
  403. package/dist/settings/testing/settings-store-contract.d.ts.map +1 -0
  404. package/dist/settings/testing/settings-store-contract.js +192 -0
  405. package/dist/settings/testing/settings-store-contract.js.map +1 -0
  406. package/dist/settings/timed-search.d.ts +26 -0
  407. package/dist/settings/timed-search.d.ts.map +1 -0
  408. package/dist/settings/timed-search.js +48 -0
  409. package/dist/settings/timed-search.js.map +1 -0
  410. package/dist/settings/types.d.ts +37 -0
  411. package/dist/settings/types.d.ts.map +1 -0
  412. package/dist/settings/types.js +3 -0
  413. package/dist/settings/types.js.map +1 -0
  414. package/dist/settings/validate.d.ts +55 -0
  415. package/dist/settings/validate.d.ts.map +1 -0
  416. package/dist/settings/validate.js +196 -0
  417. package/dist/settings/validate.js.map +1 -0
  418. package/package.json +463 -88
  419. package/src/authz/require-level-guard.ts +1 -1
  420. package/src/color.ts +134 -0
  421. package/src/discord/command/all-required.ts +12 -0
  422. package/src/discord/command/autocomplete-dispatcher.ts +2 -1
  423. package/src/discord/command/autocomplete-limits.ts +2 -0
  424. package/src/discord/command/autocomplete.ts +8 -7
  425. package/src/discord/command/command-responders.ts +39 -0
  426. package/src/discord/command/context.ts +14 -54
  427. package/src/discord/command/cooldown-guard.ts +1 -1
  428. package/src/discord/command/create-command.ts +19 -94
  429. package/src/discord/command/create-context-menu-command.ts +19 -97
  430. package/src/discord/command/errors.ts +1 -1
  431. package/src/discord/command/guard.ts +24 -12
  432. package/src/discord/command/options.ts +202 -412
  433. package/src/discord/command/passes-guard.ts +37 -0
  434. package/src/discord/command/permission-guard.ts +1 -1
  435. package/src/discord/command/render-command-failure.ts +71 -0
  436. package/src/discord/command/route-key.ts +9 -0
  437. package/src/discord/command/router.ts +73 -12
  438. package/src/discord/command/send-embed.ts +42 -0
  439. package/src/discord/command/types.ts +7 -1
  440. package/src/discord/components/component-access.ts +20 -0
  441. package/src/discord/components/component-router.ts +73 -36
  442. package/src/discord/components/interactive-message/index.ts +5 -3
  443. package/src/discord/components/interactive-message/interactive-message-collector.ts +4 -68
  444. package/src/discord/components/interactive-message/message-edit-options.ts +47 -0
  445. package/src/discord/components/interactive-message/mount-interactive-message.ts +5 -3
  446. package/src/discord/components/interactive-message/state-store.ts +20 -0
  447. package/src/discord/components/paginator/mount-paginator.ts +3 -3
  448. package/src/discord/components/paginator/paginator-view.ts +1 -1
  449. package/src/discord/components/persistent-paginator.ts +8 -9
  450. package/src/discord/components/settings-editor/from-declaration-controls.ts +371 -0
  451. package/src/discord/components/settings-editor/from-declaration-display.ts +155 -0
  452. package/src/discord/components/settings-editor/from-declaration-layout.ts +247 -0
  453. package/src/discord/components/settings-editor/from-declaration-search.ts +77 -0
  454. package/src/discord/components/settings-editor/from-declaration-stored.ts +39 -0
  455. package/src/discord/components/settings-editor/from-declaration-subject.ts +110 -0
  456. package/src/discord/components/settings-editor/from-declaration-values.ts +240 -0
  457. package/src/discord/components/settings-editor/from-declaration.ts +218 -0
  458. package/src/discord/components/settings-editor/index.ts +5 -2
  459. package/src/discord/components/settings-editor/mount-settings-editor.ts +28 -10
  460. package/src/discord/components/settings-editor/navigation.ts +41 -0
  461. package/src/discord/components/settings-editor/settings-editor-card.view.ts +79 -36
  462. package/src/discord/components/settings-editor/settings-editor-field-modal.ts +76 -68
  463. package/src/discord/components/settings-editor/settings-editor-field-values.ts +11 -0
  464. package/src/discord/components/settings-editor/settings-editor-fields.ts +6 -11
  465. package/src/discord/components/settings-editor/settings-editor.view.ts +11 -24
  466. package/src/discord/events/event-guild-id.ts +35 -0
  467. package/src/discord/events/event-router.ts +46 -13
  468. package/src/discord/i18n.ts +47 -8
  469. package/src/discord/interaction/interaction-locale.ts +19 -0
  470. package/src/discord/interaction/locale-resolver.ts +28 -0
  471. package/src/discord/interaction/modal.ts +5 -40
  472. package/src/discord/interaction/reply-locale.ts +35 -0
  473. package/src/discord/interaction/select-bounds.ts +33 -0
  474. package/src/discord/interaction/select-menu.ts +2 -9
  475. package/src/discord/placeholder-registry.ts +1 -1
  476. package/src/discord/presenter.ts +1 -1
  477. package/src/discord/settings/discord-guild-directory.ts +214 -0
  478. package/src/discord/settings/guild-locale-resolver.ts +38 -0
  479. package/src/discord/settings/is-module-disabled.ts +22 -0
  480. package/src/discord/settings/module-disabled-embed.ts +19 -0
  481. package/src/discord/settings/require-configured.ts +68 -0
  482. package/src/discord/ui/color-aliases.ts +70 -0
  483. package/src/discord/ui/color-input.ts +8 -173
  484. package/src/discord/ui/colors.ts +2 -3
  485. package/src/discord/ui/embed.ts +3 -9
  486. package/src/discord/ui/truncate-text.ts +15 -0
  487. package/src/errors/error-message.ts +10 -0
  488. package/src/i18n/business-message.ts +1 -1
  489. package/src/i18n/catalog.ts +14 -0
  490. package/src/i18n/locale.ts +3 -0
  491. package/src/i18n/translator.ts +3 -0
  492. package/src/module/module.ts +15 -1
  493. package/src/resilience/retry.ts +1 -1
  494. package/src/scheduler/scheduler.ts +2 -5
  495. package/src/settings/cache.ts +70 -0
  496. package/src/settings/choice.ts +9 -0
  497. package/src/settings/decode-stored.ts +40 -0
  498. package/src/settings/define-settings.ts +214 -0
  499. package/src/settings/describe-field.ts +155 -0
  500. package/src/settings/describe.ts +90 -0
  501. package/src/settings/duration.ts +54 -0
  502. package/src/settings/field-order.ts +128 -0
  503. package/src/settings/field-search.ts +16 -0
  504. package/src/settings/fields/builders.ts +161 -0
  505. package/src/settings/fields/field.ts +205 -0
  506. package/src/settings/fields/zod-schema.ts +300 -0
  507. package/src/settings/in-memory/in-memory-guild-directory.ts +69 -0
  508. package/src/settings/in-memory/in-memory-settings-store.ts +46 -0
  509. package/src/settings/in-memory/in-process-notifier.ts +40 -0
  510. package/src/settings/index.ts +72 -0
  511. package/src/settings/is-plain-object.ts +11 -0
  512. package/src/settings/messages.ts +161 -0
  513. package/src/settings/migrate.ts +58 -0
  514. package/src/settings/ports/guild-directory.ts +48 -0
  515. package/src/settings/ports/settings-changed-notifier.ts +20 -0
  516. package/src/settings/ports/settings-store.ts +74 -0
  517. package/src/settings/registry.ts +137 -0
  518. package/src/settings/settings-declaration-error.ts +16 -0
  519. package/src/settings/settings-service.ts +535 -0
  520. package/src/settings/settings-validation-error.ts +41 -0
  521. package/src/settings/status.ts +25 -0
  522. package/src/settings/suggest.ts +267 -0
  523. package/src/settings/system/kernel-settings.ts +74 -0
  524. package/src/settings/system/module-gate.ts +49 -0
  525. package/src/settings/testing/index.ts +7 -0
  526. package/src/settings/testing/settings-store-contract.ts +278 -0
  527. package/src/settings/timed-search.ts +56 -0
  528. package/src/settings/types.ts +42 -0
  529. package/src/settings/validate.ts +298 -0
@@ -1 +1 @@
1
- {"version":3,"file":"persistent-paginator.d.ts","sourceRoot":"","sources":["../../../src/discord/components/persistent-paginator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,YAAY,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EACN,KAAK,gBAAgB,EAKrB,MAAM,uCAAuC,CAAC;AAU/C,OAAO,EACN,KAAK,eAAe,EAEpB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAsBtF,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9E,MAAM,WAAW,0BAA0B;IAC1C,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,qBAAqB,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjD,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;CACnC;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAetF;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,0BAA0B,GACjC,mBAAmB,CAuFrB"}
1
+ {"version":3,"file":"persistent-paginator.d.ts","sourceRoot":"","sources":["../../../src/discord/components/persistent-paginator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmC,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhF,OAAO,KAAK,EACX,gBAAgB,EAGhB,MAAM,uCAAuC,CAAC;AAU/C,OAAO,EACN,KAAK,eAAe,EAEpB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AAsBtF,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9E,MAAM,WAAW,0BAA0B;IAC1C,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,qBAAqB,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjD,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;CACnC;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAetF;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,0BAA0B,GACjC,mBAAmB,CAuFrB"}
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.encodePaginatorPage = encodePaginatorPage;
4
4
  exports.decodePaginatorPage = decodePaginatorPage;
5
5
  exports.createPersistentPaginator = createPersistentPaginator;
6
- const component_router_1 = require("../../discord/components/component-router");
7
- const interactive_message_1 = require("../../discord/components/interactive-message");
6
+ const component_access_1 = require("../../discord/components/component-access");
7
+ const message_edit_options_1 = require("../../discord/components/interactive-message/message-edit-options");
8
8
  const page_state_1 = require("../../discord/components/paginator/page-state");
9
9
  const paginator_buttons_1 = require("../../discord/components/paginator/paginator-buttons");
10
10
  const button_1 = require("../../discord/interaction/button");
@@ -120,18 +120,18 @@ function createPersistentPaginator(options) {
120
120
  // at the stale page. `deferUpdate` buys the full edit window instead.
121
121
  await interaction.deferUpdate();
122
122
  const payload = await loadPage(decoded ?? FIRST_PAGE);
123
- await interaction.editReply((0, interactive_message_1.toMessageEditOptions)(payload, [...interaction.message.attachments.values()]));
123
+ await interaction.editReply((0, message_edit_options_1.toMessageEditOptions)(payload, [...interaction.message.attachments.values()]));
124
124
  }
125
125
  return {
126
126
  customId,
127
127
  render: (page = FIRST_PAGE) => loadPage(page),
128
- handler: (0, component_router_1.createComponentHandler)({
128
+ handler: {
129
129
  customId,
130
130
  // Navigation only re-renders what the message already showed to
131
131
  // whoever can see the channel; it grants no access of its own.
132
- authorize: (0, component_router_1.openToAnyone)("paging a message reveals nothing its reader could not already see"),
132
+ authorize: (0, component_access_1.openToAnyone)("paging a message reveals nothing its reader could not already see"),
133
133
  handle: handleClick,
134
- }),
134
+ },
135
135
  };
136
136
  }
137
137
  //# sourceMappingURL=persistent-paginator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"persistent-paginator.js","sourceRoot":"","sources":["../../../src/discord/components/persistent-paginator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistent-paginator.js","sourceRoot":"","sources":["../../../src/discord/components/persistent-paginator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { type SettingsEditorChoice, type SettingsEditorGroupField } from "../../../discord/components/settings-editor/settings-editor-fields";
2
+ import type { SettingsDeclaration } from "../../../settings/define-settings";
3
+ /** One editable entry of the screen: a typed box or a picker, never a level or a group. */
4
+ type ControlEntry = SettingsEditorGroupField<string>["fields"][number];
5
+ /**
6
+ * How a control's value moves between the stored settings and the screen:
7
+ * - `text`: a string typed as is (text, colour);
8
+ * - `number`: a number typed as its decimal text (integer, number);
9
+ * - `duration`: whole seconds typed as `1h30m`;
10
+ * - `secret`: typed, prefilled with whether it is set, never with its value;
11
+ * - `lines`: a list of integers or texts typed one item per line;
12
+ * - `boolean`: picked from a yes/no choice;
13
+ * - `single`: one picked id or enum value;
14
+ * - `many`: a list of picked ids or enum values;
15
+ * - `toggles`: the keys of one toggles select that are on (`keys` are that
16
+ * select's own, at most {@link MAX_SELECT_OPTIONS});
17
+ * - `search`: one value picked from a search's first results, a number for
18
+ * an integer field;
19
+ * - `other`: the free entry beside a non-strict search's select, typed, a
20
+ * number for an integer field; it opens empty and wins over the pick.
21
+ */
22
+ export type ControlShape = {
23
+ readonly kind: "text" | "number" | "duration" | "secret" | "boolean" | "single" | "many";
24
+ } | {
25
+ readonly kind: "lines";
26
+ readonly numeric: boolean;
27
+ } | {
28
+ readonly kind: "toggles";
29
+ readonly keys: readonly string[];
30
+ } | {
31
+ readonly kind: "search";
32
+ readonly numeric: boolean;
33
+ } | {
34
+ readonly kind: "other";
35
+ readonly numeric: boolean;
36
+ };
37
+ /** One control of the screen and the declared field it edits. */
38
+ export interface DeclarationControl {
39
+ readonly entry: ControlEntry;
40
+ /** Key of the declared field; a toggles field split over several selects shares it. */
41
+ readonly fieldKey: string;
42
+ /** Id of the declared group the field belongs to, if any. */
43
+ readonly groupId: string | undefined;
44
+ readonly shape: ControlShape;
45
+ }
46
+ /** Key suffix of the free entry beside a non-strict searchable field's select. */
47
+ export declare const OTHER_VALUE_SUFFIX = "#other";
48
+ /** The options each searchable field's select offers, by field key: its search's first results. */
49
+ export type SearchOptions = ReadonlyMap<string, readonly SettingsEditorChoice[]>;
50
+ /**
51
+ * The controls of a declaration, in declared order: one per field, except a
52
+ * toggles field with more keys than a select offers, which gets one control
53
+ * per chunk of at most {@link MAX_SELECT_OPTIONS} keys, and a non-strict
54
+ * searchable field, which gets its select then a free entry (FR-026a). A
55
+ * searchable field whose search offered nothing is typed like any other.
56
+ *
57
+ * @param declaration - the module's settings declaration.
58
+ * @param searchOptions - what each searchable field's select offers.
59
+ * @returns every control of the screen.
60
+ * @throws SettingsDeclarationError when a list holds an item kind lists cannot
61
+ * hold, which only a declaration built without `defineSettings` can do.
62
+ */
63
+ export declare function declarationControls(declaration: SettingsDeclaration, searchOptions: SearchOptions): DeclarationControl[];
64
+ /** Whether a control is the free entry beside a non-strict search's select. */
65
+ export declare function isFreeEntry(control: DeclarationControl): boolean;
66
+ export {};
67
+ //# sourceMappingURL=from-declaration-controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-controls.d.ts","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-controls.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,MAAM,6DAA6D,CAAC;AAGrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAYtE,2FAA2F;AAC3F,KAAK,YAAY,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;CAAE,GAC5F;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzD,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC7B;AAOD,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,mGAAmG;AACnG,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC,CAAC;AASjF;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAClC,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,aAAa,GAC1B,kBAAkB,EAAE,CAStB;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAEhE"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OTHER_VALUE_SUFFIX = void 0;
4
+ exports.declarationControls = declarationControls;
5
+ exports.isFreeEntry = isFreeEntry;
6
+ const settings_editor_view_1 = require("../../../discord/components/settings-editor/settings-editor.view");
7
+ const settings_editor_fields_1 = require("../../../discord/components/settings-editor/settings-editor-fields");
8
+ const i18n_1 = require("../../../discord/i18n");
9
+ const discord_guild_directory_1 = require("../../../discord/settings/discord-guild-directory");
10
+ const field_search_1 = require("../../../settings/field-search");
11
+ const field_1 = require("../../../settings/fields/field");
12
+ const messages_1 = require("../../../settings/messages");
13
+ const settings_declaration_error_1 = require("../../../settings/settings-declaration-error");
14
+ /** Separates a split toggles field's key from the number of its select. */
15
+ const CHUNK_SEPARATOR = "#";
16
+ /** Key suffix of the free entry beside a non-strict searchable field's select. */
17
+ exports.OTHER_VALUE_SUFFIX = "#other";
18
+ /**
19
+ * The controls of a declaration, in declared order: one per field, except a
20
+ * toggles field with more keys than a select offers, which gets one control
21
+ * per chunk of at most {@link MAX_SELECT_OPTIONS} keys, and a non-strict
22
+ * searchable field, which gets its select then a free entry (FR-026a). A
23
+ * searchable field whose search offered nothing is typed like any other.
24
+ *
25
+ * @param declaration - the module's settings declaration.
26
+ * @param searchOptions - what each searchable field's select offers.
27
+ * @returns every control of the screen.
28
+ * @throws SettingsDeclarationError when a list holds an item kind lists cannot
29
+ * hold, which only a declaration built without `defineSettings` can do.
30
+ */
31
+ function declarationControls(declaration, searchOptions) {
32
+ return Object.entries(declaration.fields).flatMap(([fieldKey, declared]) => fieldControls({
33
+ declarationId: declaration.id,
34
+ fieldKey,
35
+ declared,
36
+ options: searchOptions.get(fieldKey) ?? [],
37
+ }));
38
+ }
39
+ /** Whether a control is the free entry beside a non-strict search's select. */
40
+ function isFreeEntry(control) {
41
+ return control.shape.kind === "other";
42
+ }
43
+ function fieldControls(params) {
44
+ const { fieldKey, declared, options } = params;
45
+ const groupId = declared.ui?.group;
46
+ const base = {
47
+ key: fieldKey,
48
+ labelKey: declared.label ?? fieldKey,
49
+ hintKey: declared.description ?? i18n_1.SETTINGS_EDITOR_MESSAGES.entryHint,
50
+ };
51
+ const { spec } = declared;
52
+ if (spec.kind === "toggles") {
53
+ return togglesControls({ base, groupId, spec });
54
+ }
55
+ const search = (0, field_search_1.fieldSearch)(spec);
56
+ if (search !== undefined && options.length > 0) {
57
+ const numeric = spec.kind === "integer";
58
+ const select = {
59
+ entry: { ...base, kind: "choice", minValues: 0, maxValues: 1, choices: options },
60
+ fieldKey,
61
+ groupId,
62
+ shape: { kind: "search", numeric },
63
+ };
64
+ if (search.strict === true) {
65
+ return [select];
66
+ }
67
+ const free = typedEntry({
68
+ base: {
69
+ key: `${fieldKey}${exports.OTHER_VALUE_SUFFIX}`,
70
+ labelKey: i18n_1.SETTINGS_EDITOR_MESSAGES.otherValue,
71
+ hintKey: i18n_1.SETTINGS_EDITOR_MESSAGES.entryHint,
72
+ },
73
+ declared,
74
+ style: "short",
75
+ maxLength: spec.kind === "text" ? spec.maxLength : undefined,
76
+ });
77
+ const helper = { helperKey: i18n_1.SETTINGS_EDITOR_MESSAGES.otherValueHelper };
78
+ return [
79
+ select,
80
+ { entry: { ...free, ...helper }, fieldKey, groupId, shape: { kind: "other", numeric } },
81
+ ];
82
+ }
83
+ const single = singleControl({ ...params, base, spec });
84
+ return [{ ...single, fieldKey, groupId }];
85
+ }
86
+ /** The entry and shape of a field that is not a toggles field. */
87
+ function singleControl(params) {
88
+ const { base, spec, declared } = params;
89
+ switch (spec.kind) {
90
+ case "text":
91
+ return {
92
+ entry: typedEntry({
93
+ base,
94
+ declared,
95
+ style: "paragraph",
96
+ maxLength: spec.maxLength ?? field_1.FIELD_LIMITS.textMaxLength,
97
+ }),
98
+ shape: { kind: "text" },
99
+ };
100
+ case "color":
101
+ return { entry: typedEntry({ base, declared, style: "short" }), shape: { kind: "text" } };
102
+ case "integer":
103
+ case "number":
104
+ return { entry: typedEntry({ base, declared, style: "short" }), shape: { kind: "number" } };
105
+ case "duration":
106
+ return { entry: typedEntry({ base, declared, style: "short" }), shape: { kind: "duration" } };
107
+ case "secret":
108
+ return { entry: typedEntry({ base, declared, style: "short" }), shape: { kind: "secret" } };
109
+ case "boolean":
110
+ return {
111
+ entry: { ...base, kind: "choice", minValues: 0, maxValues: 1, choices: BOOLEAN_CHOICES },
112
+ shape: { kind: "boolean" },
113
+ };
114
+ case "enum":
115
+ case "channel":
116
+ case "role":
117
+ case "user":
118
+ return {
119
+ entry: pickerEntry({ base, spec, bounds: { minValues: 0, maxValues: 1 } }),
120
+ shape: { kind: "single" },
121
+ };
122
+ case "list":
123
+ return listControl({ ...params, spec });
124
+ default:
125
+ return (0, field_1.unhandledFieldKind)(spec);
126
+ }
127
+ }
128
+ /** The two options of a yes/no field, stored as `"true"` and `"false"`. */
129
+ const BOOLEAN_CHOICES = [
130
+ { value: String(true), labelKey: messages_1.SETTINGS_MESSAGES.booleanTrue },
131
+ { value: String(false), labelKey: messages_1.SETTINGS_MESSAGES.booleanFalse },
132
+ ];
133
+ function typedEntry(params) {
134
+ const { base, declared, style } = params;
135
+ const placeholder = declared.placeholder === undefined ? {} : { placeholderKey: declared.placeholder };
136
+ return {
137
+ ...base,
138
+ kind: "text",
139
+ style,
140
+ maxLength: params.maxLength ?? settings_editor_fields_1.MAX_MODAL_INPUT_LENGTH,
141
+ ...placeholder,
142
+ };
143
+ }
144
+ function isPickable(spec) {
145
+ return (spec.kind === "enum" || spec.kind === "channel" || spec.kind === "role" || spec.kind === "user");
146
+ }
147
+ /** A picker for one channel, role, user or enum value, or a list of them. */
148
+ function pickerEntry(params) {
149
+ const { base, spec, bounds } = params;
150
+ switch (spec.kind) {
151
+ case "enum":
152
+ return {
153
+ ...base,
154
+ ...bounds,
155
+ kind: "choice",
156
+ choices: spec.choices.map((choice) => ({ value: choice.value, labelKey: choice.label })),
157
+ };
158
+ case "channel":
159
+ return { ...base, ...bounds, ...channelPicker(spec.types) };
160
+ case "role":
161
+ case "user":
162
+ return { ...base, ...bounds, kind: spec.kind };
163
+ default:
164
+ return (0, field_1.unhandledFieldKind)(spec);
165
+ }
166
+ }
167
+ /** Every guild channel type, for a channel field that restricts none. */
168
+ const EVERY_CHANNEL_TYPE = Object.values(discord_guild_directory_1.CHANNEL_TYPE_BY_KIND);
169
+ /** A category picker when the field takes categories only, a channel picker otherwise. */
170
+ function channelPicker(types) {
171
+ if (types !== undefined && types.length > 0 && types.every(isCategory)) {
172
+ return { kind: "category" };
173
+ }
174
+ return {
175
+ kind: "channel",
176
+ channelTypes: types === undefined ? EVERY_CHANNEL_TYPE : types.map(toChannelType),
177
+ };
178
+ }
179
+ function isCategory(kind) {
180
+ return kind === "category";
181
+ }
182
+ function toChannelType(kind) {
183
+ return discord_guild_directory_1.CHANNEL_TYPE_BY_KIND[kind];
184
+ }
185
+ /**
186
+ * A list of pickable items becomes a picker bounded by the list's sizes; a
187
+ * list of integers or texts, which no picker offers, a box taking one item
188
+ * per line.
189
+ */
190
+ function listControl(params) {
191
+ const { base, spec, declared } = params;
192
+ const itemKind = spec.item.spec.kind;
193
+ if (itemKind === "integer" || itemKind === "text") {
194
+ return {
195
+ entry: typedEntry({ base, declared, style: "paragraph" }),
196
+ shape: { kind: "lines", numeric: itemKind === "integer" },
197
+ };
198
+ }
199
+ const itemSpec = spec.item.spec;
200
+ if (!isPickable(itemSpec)) {
201
+ throw new settings_declaration_error_1.SettingsDeclarationError(params.declarationId, `field "${params.fieldKey}" is a list of ${itemKind}, which lists cannot hold`);
202
+ }
203
+ const bounds = {
204
+ minValues: spec.minItems ?? 0,
205
+ maxValues: spec.maxItems ?? field_1.FIELD_LIMITS.listMaxItems,
206
+ };
207
+ return { entry: pickerEntry({ base, spec: itemSpec, bounds }), shape: { kind: "many" } };
208
+ }
209
+ /**
210
+ * A toggles field as selects of at most {@link MAX_SELECT_OPTIONS} keys each,
211
+ * every key labelled with its `keyLabels` entry. A single select keeps the
212
+ * field's key; split ones number theirs.
213
+ */
214
+ function togglesControls(params) {
215
+ const { base, groupId, spec } = params;
216
+ const chunks = chunked(spec.keys, settings_editor_view_1.MAX_SELECT_OPTIONS);
217
+ return chunks.map((keys, index) => ({
218
+ entry: {
219
+ ...base,
220
+ key: chunks.length === 1 ? base.key : `${base.key}${CHUNK_SEPARATOR}${index + 1}`,
221
+ kind: "choice",
222
+ minValues: 0,
223
+ maxValues: keys.length,
224
+ choices: keys.map((key) => ({ value: key, labelKey: spec.keyLabels?.[key] ?? key })),
225
+ },
226
+ fieldKey: base.key,
227
+ groupId,
228
+ shape: { kind: "toggles", keys },
229
+ }));
230
+ }
231
+ /**
232
+ * `items` in consecutive chunks of at most `size`, in order.
233
+ *
234
+ * @param items - the items to split.
235
+ * @param size - the most items one chunk holds.
236
+ * @returns the chunks; none for no items.
237
+ */
238
+ function chunked(items, size) {
239
+ const chunks = [];
240
+ for (let start = 0; start < items.length; start += size) {
241
+ chunks.push(items.slice(start, start + size));
242
+ }
243
+ return chunks;
244
+ }
245
+ //# sourceMappingURL=from-declaration-controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-controls.js","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-controls.ts"],"names":[],"mappings":";;;AAyFA,kDAYC;AAGD,kCAEC;AAzGD,oGAA+F;AAC/F,wGAIqE;AACrE,yCAA0D;AAC1D,wFAAkF;AAElF,0DAAsD;AACtD,mDAKiC;AACjC,kDAAwD;AAExD,sFAAiF;AAyCjF,2EAA2E;AAC3E,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,kFAAkF;AACrE,QAAA,kBAAkB,GAAG,QAAQ,CAAC;AAY3C;;;;;;;;;;;;GAYG;AACH,SAAgB,mBAAmB,CAClC,WAAgC,EAChC,aAA4B;IAE5B,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAC1E,aAAa,CAAC;QACb,aAAa,EAAE,WAAW,CAAC,EAAE;QAC7B,QAAQ;QACR,QAAQ;QACR,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;KAC1C,CAAC,CACF,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAgB,WAAW,CAAC,OAA2B;IACtD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,MAKtB;IACA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnC,MAAM,IAAI,GAAc;QACvB,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,QAAQ;QACpC,OAAO,EAAE,QAAQ,CAAC,WAAW,IAAI,+BAAwB,CAAC,SAAS;KACnE,CAAC;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,0BAAW,EAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;QACxC,MAAM,MAAM,GAAuB;YAClC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;YAChF,QAAQ;YACR,OAAO;YACP,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;SAClC,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC;YACvB,IAAI,EAAE;gBACL,GAAG,EAAE,GAAG,QAAQ,GAAG,0BAAkB,EAAE;gBACvC,QAAQ,EAAE,+BAAwB,CAAC,UAAU;gBAC7C,OAAO,EAAE,+BAAwB,CAAC,SAAS;aAC3C;YACD,QAAQ;YACR,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,+BAAwB,CAAC,gBAAgB,EAAE,CAAC;QACxE,OAAO;YACN,MAAM;YACN,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;SACvF,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,kEAAkE;AAClE,SAAS,aAAa,CAAC,MAMtB;IACA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACxC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACV,OAAO;gBACN,KAAK,EAAE,UAAU,CAAC;oBACjB,IAAI;oBACJ,QAAQ;oBACR,KAAK,EAAE,WAAW;oBAClB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,oBAAY,CAAC,aAAa;iBACvD,CAAC;gBACF,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;aACvB,CAAC;QACH,KAAK,OAAO;YACX,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;QAC3F,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACZ,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC7F,KAAK,UAAU;YACd,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;QAC/F,KAAK,QAAQ;YACZ,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC7F,KAAK,SAAS;YACb,OAAO;gBACN,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE;gBACxF,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aAC1B,CAAC;QACH,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACV,OAAO;gBACN,KAAK,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aACzB,CAAC;QACH,KAAK,MAAM;YACV,OAAO,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC;YACC,OAAO,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAC;IAClC,CAAC;AACF,CAAC;AAED,2EAA2E;AAC3E,MAAM,eAAe,GAAoC;IACxD,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,4BAAiB,CAAC,WAAW,EAAE;IAChE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,4BAAiB,CAAC,YAAY,EAAE;CAClE,CAAC;AAEF,SAAS,UAAU,CAAC,MAKnB;IACA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,WAAW,GAChB,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;IACpF,OAAO;QACN,GAAG,IAAI;QACP,IAAI,EAAE,MAAM;QACZ,KAAK;QACL,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,+CAAsB;QACrD,GAAG,WAAW;KACd,CAAC;AACH,CAAC;AAWD,SAAS,UAAU,CAAC,IAAe;IAClC,OAAO,CACN,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAC/F,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,SAAS,WAAW,CAAC,MAIpB;IACA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACtC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACV,OAAO;gBACN,GAAG,IAAI;gBACP,GAAG,MAAM;gBACT,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;aACxF,CAAC;QACH,KAAK,SAAS;YACb,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACV,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD;YACC,OAAO,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAC;IAClC,CAAC;AACF,CAAC;AAED,yEAAyE;AACzE,MAAM,kBAAkB,GAA2B,MAAM,CAAC,MAAM,CAAC,8CAAoB,CAAC,CAAC;AAEvF,0FAA0F;AAC1F,SAAS,aAAa,CACrB,KAAyC;IAIzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO;QACN,IAAI,EAAE,SAAS;QACf,YAAY,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;KACjF,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAiB;IACpC,OAAO,IAAI,KAAK,UAAU,CAAC;AAC5B,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACvC,OAAO,8CAAoB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,MAMpB;IACA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACnD,OAAO;YACN,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YACzD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,KAAK,SAAS,EAAE;SACzD,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,qDAAwB,CACjC,MAAM,CAAC,aAAa,EACpB,UAAU,MAAM,CAAC,QAAQ,kBAAkB,QAAQ,2BAA2B,CAC9E,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAiB;QAC5B,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC;QAC7B,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,oBAAY,CAAC,YAAY;KACrD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;AAC1F,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAIxB;IACA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,yCAAkB,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,EAAE;YACN,GAAG,IAAI;YACP,GAAG,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,eAAe,GAAG,KAAK,GAAG,CAAC,EAAE;YACjF,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;SACpF;QACD,QAAQ,EAAE,IAAI,CAAC,GAAG;QAClB,OAAO;QACP,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;KAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAI,KAAmB,EAAE,IAAY;IACpD,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { DeclarationControl } from "../../../discord/components/settings-editor/from-declaration-controls";
2
+ import type { DeclarationSubject } from "../../../discord/components/settings-editor/from-declaration-subject";
3
+ import type { TranslateKey } from "../../../i18n/translator";
4
+ /**
5
+ * What a control currently holds, as the administrator reads it on the
6
+ * screen: a channel, role or member as the Discord mention that renders its
7
+ * name, an enum value or toggle as its translated label, a secret as whether
8
+ * it is set (never its value), a duration formatted, anything else as is.
9
+ * A stored id the guild no longer has reads as unavailable, a value left
10
+ * unset as "not set".
11
+ *
12
+ * @param params.control - the control shown.
13
+ * @param params.subject - the screen's current subject.
14
+ * @param params.translate - translates the texts shown in place of a value.
15
+ * @returns the text shown after the entry's "Current:" prefix. A searchable
16
+ * field shows its search's label of the value, or the value itself.
17
+ */
18
+ export declare function controlDisplay(params: {
19
+ control: DeclarationControl;
20
+ subject: DeclarationSubject;
21
+ translate: TranslateKey;
22
+ }): string;
23
+ //# sourceMappingURL=from-declaration-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-display.d.ts","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-display.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gEAAgE,CAAC;AAOzG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+DAA+D,CAAC;AAExG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAatD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,YAAY,CAAC;CACxB,GAAG,MAAM,CAoCT"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.controlDisplay = controlDisplay;
4
+ const discord_js_1 = require("discord.js");
5
+ const from_declaration_stored_1 = require("../../../discord/components/settings-editor/from-declaration-stored");
6
+ const truncate_text_1 = require("../../../discord/ui/truncate-text");
7
+ const duration_1 = require("../../../settings/duration");
8
+ const messages_1 = require("../../../settings/messages");
9
+ /** The most characters a stored text shows on the screen before it is cut. */
10
+ const MAX_TEXT_SHOWN = 100;
11
+ /** Separates the items of a list, and the toggles that are on. */
12
+ const ITEM_SEPARATOR = ", ";
13
+ /**
14
+ * What a control currently holds, as the administrator reads it on the
15
+ * screen: a channel, role or member as the Discord mention that renders its
16
+ * name, an enum value or toggle as its translated label, a secret as whether
17
+ * it is set (never its value), a duration formatted, anything else as is.
18
+ * A stored id the guild no longer has reads as unavailable, a value left
19
+ * unset as "not set".
20
+ *
21
+ * @param params.control - the control shown.
22
+ * @param params.subject - the screen's current subject.
23
+ * @param params.translate - translates the texts shown in place of a value.
24
+ * @returns the text shown after the entry's "Current:" prefix. A searchable
25
+ * field shows its search's label of the value, or the value itself.
26
+ */
27
+ function controlDisplay(params) {
28
+ const { control, subject, translate } = params;
29
+ const value = subject.values[control.fieldKey];
30
+ const { shape } = control;
31
+ // A secret reads as whether it is set, whatever it holds: never its value.
32
+ if ((value === undefined || value === null) && shape.kind !== "secret") {
33
+ return translate(messages_1.SETTINGS_MESSAGES.valueNotSet);
34
+ }
35
+ switch (shape.kind) {
36
+ case "secret":
37
+ return translate((0, from_declaration_stored_1.secretStateKey)(value));
38
+ case "text":
39
+ return (0, truncate_text_1.truncateText)(String(value), MAX_TEXT_SHOWN);
40
+ case "number":
41
+ return String(value);
42
+ case "duration":
43
+ return typeof value === "number" ? (0, duration_1.formatDuration)(value) : String(value);
44
+ case "lines":
45
+ return Array.isArray(value)
46
+ ? (0, truncate_text_1.truncateText)(value.map(String).join(ITEM_SEPARATOR), MAX_TEXT_SHOWN)
47
+ : String(value);
48
+ case "boolean":
49
+ return translate(value === true ? messages_1.SETTINGS_MESSAGES.booleanTrue : messages_1.SETTINGS_MESSAGES.booleanFalse);
50
+ case "single":
51
+ case "many":
52
+ return pickedDisplay({ control, subject, translate, value });
53
+ case "toggles":
54
+ return togglesDisplay({ control, translate, value, keys: shape.keys });
55
+ case "search":
56
+ case "other":
57
+ return (0, truncate_text_1.truncateText)(subject.labels[control.fieldKey] ?? String(value), MAX_TEXT_SHOWN);
58
+ default:
59
+ return shape;
60
+ }
61
+ }
62
+ /** Each picked id or enum value as it reads, joined; "not set" for an empty list. */
63
+ function pickedDisplay(params) {
64
+ const { control, subject, translate, value } = params;
65
+ const ids = (0, from_declaration_stored_1.storedIds)(value);
66
+ if (ids.length === 0) {
67
+ return translate(messages_1.SETTINGS_MESSAGES.valueNotSet);
68
+ }
69
+ const missing = subject.unavailable[control.fieldKey] ?? [];
70
+ return ids
71
+ .map((id) => missing.includes(id)
72
+ ? translate(messages_1.SETTINGS_MESSAGES.valueUnavailable)
73
+ : pickedItem({ control, translate, id }))
74
+ .join(ITEM_SEPARATOR);
75
+ }
76
+ /** One picked id as a mention, or one enum value as its choice label. */
77
+ function pickedItem(params) {
78
+ const { control, translate, id } = params;
79
+ const { entry } = control;
80
+ const kind = entry.kind;
81
+ switch (kind) {
82
+ case "channel":
83
+ case "category":
84
+ return (0, discord_js_1.channelMention)(id);
85
+ case "role":
86
+ return (0, discord_js_1.roleMention)(id);
87
+ case "user":
88
+ return (0, discord_js_1.userMention)(id);
89
+ case "choice":
90
+ return translatedChoice({ control, translate, value: id });
91
+ case "text":
92
+ case "image":
93
+ return id;
94
+ default:
95
+ return kind;
96
+ }
97
+ }
98
+ /** The translated labels of this control's toggles that are on, or "none". */
99
+ function togglesDisplay(params) {
100
+ const { control, translate, value, keys } = params;
101
+ const on = keys.filter((key) => (0, from_declaration_stored_1.isToggledOn)({ value, key }));
102
+ if (on.length === 0) {
103
+ return translate(messages_1.SETTINGS_MESSAGES.valueNone);
104
+ }
105
+ return on.map((key) => translatedChoice({ control, translate, value: key })).join(ITEM_SEPARATOR);
106
+ }
107
+ /** A choice control's value as its translated label, or the value itself when no choice offers it. */
108
+ function translatedChoice(params) {
109
+ const { control, translate, value } = params;
110
+ const { entry } = control;
111
+ const labelKey = entry.kind === "choice" ? (0, from_declaration_stored_1.choiceLabelKey)({ choices: entry.choices, value }) : undefined;
112
+ return labelKey === undefined ? value : translate(labelKey);
113
+ }
114
+ //# sourceMappingURL=from-declaration-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-display.js","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type DeclarationControl } from "../../../discord/components/settings-editor/from-declaration-controls";
2
+ import type { SettingsEditorLevel } from "../../../discord/components/settings-editor/navigation";
3
+ import { type SettingsEditorField } from "../../../discord/components/settings-editor/settings-editor-fields";
4
+ import type { SettingsDeclaration } from "../../../settings/define-settings";
5
+ /** The screen of a declaration: its root entries, its nested levels, and what each group entry saves. */
6
+ export interface DeclarationLayout {
7
+ readonly fields: readonly SettingsEditorField<string>[];
8
+ readonly levels: readonly SettingsEditorLevel<string>[];
9
+ /** The controls of each group entry, by the entry's key. */
10
+ readonly groups: ReadonlyMap<string, readonly DeclarationControl[]>;
11
+ }
12
+ /**
13
+ * Lay the controls of a declaration out on the screen, keeping their order
14
+ * (the display order of `@/settings/field-order`): a control outside any group is an entry of its own; a group stands
15
+ * where its first control stands, split into entries of at most
16
+ * {@link MAX_MODAL_COMPONENTS} controls (one modal each). A level holds at
17
+ * most {@link MAX_CARD_LEVEL_ENTRIES} entries: past that, a group split over
18
+ * several entries moves into a level of its own, then the entries past the
19
+ * last that fits move behind a "more settings" level.
20
+ *
21
+ * A non-strict searchable field's select and its free entry are never split:
22
+ * outside any group they form a modal of their own, named after the field;
23
+ * inside a group they share one of its modals.
24
+ *
25
+ * @param params.declaration - the module's settings declaration, for its groups.
26
+ * @param params.controls - the controls of the declaration, in declared order.
27
+ * @returns the root entries, the nested levels and each group entry's controls.
28
+ */
29
+ export declare function layoutDeclaration(params: {
30
+ declaration: SettingsDeclaration;
31
+ controls: readonly DeclarationControl[];
32
+ }): DeclarationLayout;
33
+ //# sourceMappingURL=from-declaration-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-declaration-layout.d.ts","sourceRoot":"","sources":["../../../../src/discord/components/settings-editor/from-declaration-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,kBAAkB,EAEvB,MAAM,gEAAgE,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,OAAO,EAEN,KAAK,mBAAmB,EACxB,MAAM,6DAA6D,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAWtE,yGAAyG;AACzG,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;IACxD,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC,CAAC;CACpE;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACxC,GAAG,iBAAiB,CAapB"}