@fieldia/core 0.26.1 → 0.27.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 (415) hide show
  1. package/README.md +307 -3
  2. package/package.json +1 -1
  3. package/schema/page.schema.json +227 -23
  4. package/src/index.d.mts +8 -2
  5. package/src/index.d.ts +8 -2
  6. package/src/index.js +22 -1
  7. package/src/index.js.map +1 -1
  8. package/src/index.mjs +9 -2
  9. package/src/index.mjs.map +1 -1
  10. package/src/lib/expression/app-functions.d.mts +47 -0
  11. package/src/lib/expression/app-functions.d.ts +47 -0
  12. package/src/lib/expression/app-functions.js +64 -0
  13. package/src/lib/expression/app-functions.js.map +1 -0
  14. package/src/lib/expression/app-functions.mjs +58 -0
  15. package/src/lib/expression/app-functions.mjs.map +1 -0
  16. package/src/lib/expression/dates.d.mts +21 -0
  17. package/src/lib/expression/dates.d.ts +21 -0
  18. package/src/lib/expression/dates.js +73 -0
  19. package/src/lib/expression/dates.js.map +1 -0
  20. package/src/lib/expression/dates.mjs +67 -0
  21. package/src/lib/expression/dates.mjs.map +1 -0
  22. package/src/lib/expression/evaluator.js +12 -6
  23. package/src/lib/expression/evaluator.js.map +1 -1
  24. package/src/lib/expression/evaluator.mjs +12 -6
  25. package/src/lib/expression/evaluator.mjs.map +1 -1
  26. package/src/lib/expression/expression.d.mts +7 -3
  27. package/src/lib/expression/expression.d.ts +7 -3
  28. package/src/lib/expression/expression.js +8 -2
  29. package/src/lib/expression/expression.js.map +1 -1
  30. package/src/lib/expression/expression.mjs +7 -2
  31. package/src/lib/expression/expression.mjs.map +1 -1
  32. package/src/lib/expression/functions-part.d.mts +7 -0
  33. package/src/lib/expression/functions-part.d.ts +7 -0
  34. package/src/lib/expression/functions-part.js +13 -0
  35. package/src/lib/expression/functions-part.js.map +1 -0
  36. package/src/lib/expression/functions-part.mjs +8 -0
  37. package/src/lib/expression/functions-part.mjs.map +1 -0
  38. package/src/lib/expression/functions.d.mts +60 -3
  39. package/src/lib/expression/functions.d.ts +60 -3
  40. package/src/lib/expression/functions.js +109 -15
  41. package/src/lib/expression/functions.js.map +1 -1
  42. package/src/lib/expression/functions.mjs +103 -16
  43. package/src/lib/expression/functions.mjs.map +1 -1
  44. package/src/lib/expression/kinds.d.mts +31 -0
  45. package/src/lib/expression/kinds.d.ts +31 -0
  46. package/src/lib/expression/kinds.js +159 -0
  47. package/src/lib/expression/kinds.js.map +1 -0
  48. package/src/lib/expression/kinds.mjs +151 -0
  49. package/src/lib/expression/kinds.mjs.map +1 -0
  50. package/src/lib/expression/modifier.d.mts +4 -3
  51. package/src/lib/expression/modifier.d.ts +4 -3
  52. package/src/lib/expression/modifier.js +4 -3
  53. package/src/lib/expression/modifier.js.map +1 -1
  54. package/src/lib/expression/modifier.mjs +4 -3
  55. package/src/lib/expression/modifier.mjs.map +1 -1
  56. package/src/lib/expression/more-functions.d.mts +8 -0
  57. package/src/lib/expression/more-functions.d.ts +8 -0
  58. package/src/lib/expression/more-functions.js +235 -0
  59. package/src/lib/expression/more-functions.js.map +1 -0
  60. package/src/lib/expression/more-functions.mjs +230 -0
  61. package/src/lib/expression/more-functions.mjs.map +1 -0
  62. package/src/lib/expression/parser.d.mts +4 -1
  63. package/src/lib/expression/parser.d.ts +4 -1
  64. package/src/lib/expression/parser.js +6 -3
  65. package/src/lib/expression/parser.js.map +1 -1
  66. package/src/lib/expression/parser.mjs +6 -3
  67. package/src/lib/expression/parser.mjs.map +1 -1
  68. package/src/lib/expression/reads.d.mts +2 -2
  69. package/src/lib/expression/reads.d.ts +2 -2
  70. package/src/lib/expression/reads.js +6 -4
  71. package/src/lib/expression/reads.js.map +1 -1
  72. package/src/lib/expression/reads.mjs +6 -4
  73. package/src/lib/expression/reads.mjs.map +1 -1
  74. package/src/lib/format/actions.d.mts +16 -16
  75. package/src/lib/format/actions.d.ts +16 -16
  76. package/src/lib/format/check-page.d.mts +7 -2
  77. package/src/lib/format/check-page.d.ts +7 -2
  78. package/src/lib/format/check-page.js +10 -4
  79. package/src/lib/format/check-page.js.map +1 -1
  80. package/src/lib/format/check-page.mjs +10 -4
  81. package/src/lib/format/check-page.mjs.map +1 -1
  82. package/src/lib/format/choice-options.d.mts +34 -0
  83. package/src/lib/format/choice-options.d.ts +34 -0
  84. package/src/lib/format/choice-options.js +60 -0
  85. package/src/lib/format/choice-options.js.map +1 -0
  86. package/src/lib/format/choice-options.mjs +51 -0
  87. package/src/lib/format/choice-options.mjs.map +1 -0
  88. package/src/lib/format/endings-checks.d.mts +8 -0
  89. package/src/lib/format/endings-checks.d.ts +8 -0
  90. package/src/lib/format/endings-checks.js +23 -0
  91. package/src/lib/format/endings-checks.js.map +1 -0
  92. package/src/lib/format/endings-checks.mjs +20 -0
  93. package/src/lib/format/endings-checks.mjs.map +1 -0
  94. package/src/lib/format/endings.d.mts +40 -0
  95. package/src/lib/format/endings.d.ts +40 -0
  96. package/src/lib/format/endings.js +15 -0
  97. package/src/lib/format/endings.js.map +1 -0
  98. package/src/lib/format/endings.mjs +12 -0
  99. package/src/lib/format/endings.mjs.map +1 -0
  100. package/src/lib/format/field.d.mts +151 -16
  101. package/src/lib/format/field.d.ts +151 -16
  102. package/src/lib/format/field.js +64 -11
  103. package/src/lib/format/field.js.map +1 -1
  104. package/src/lib/format/field.mjs +63 -10
  105. package/src/lib/format/field.mjs.map +1 -1
  106. package/src/lib/format/head-checks.d.mts +2 -0
  107. package/src/lib/format/head-checks.d.ts +2 -0
  108. package/src/lib/format/head-checks.js +2 -59
  109. package/src/lib/format/head-checks.js.map +1 -1
  110. package/src/lib/format/head-checks.mjs +1 -58
  111. package/src/lib/format/head-checks.mjs.map +1 -1
  112. package/src/lib/format/later-checks.d.mts +17 -0
  113. package/src/lib/format/later-checks.d.ts +17 -0
  114. package/src/lib/format/later-checks.js +20 -0
  115. package/src/lib/format/later-checks.js.map +1 -0
  116. package/src/lib/format/later-checks.mjs +17 -0
  117. package/src/lib/format/later-checks.mjs.map +1 -0
  118. package/src/lib/format/layout.d.mts +241 -188
  119. package/src/lib/format/layout.d.ts +241 -188
  120. package/src/lib/format/layout.js +33 -28
  121. package/src/lib/format/layout.js.map +1 -1
  122. package/src/lib/format/layout.mjs +13 -3
  123. package/src/lib/format/layout.mjs.map +1 -1
  124. package/src/lib/format/layout.types.d.mts +2 -1
  125. package/src/lib/format/layout.types.d.ts +2 -1
  126. package/src/lib/format/limits-checks.d.mts +14 -0
  127. package/src/lib/format/limits-checks.d.ts +14 -0
  128. package/src/lib/format/limits-checks.js +36 -0
  129. package/src/lib/format/limits-checks.js.map +1 -0
  130. package/src/lib/format/limits-checks.mjs +33 -0
  131. package/src/lib/format/limits-checks.mjs.map +1 -0
  132. package/src/lib/format/limits.d.mts +24 -0
  133. package/src/lib/format/limits.d.ts +24 -0
  134. package/src/lib/format/limits.js +35 -0
  135. package/src/lib/format/limits.js.map +1 -0
  136. package/src/lib/format/limits.mjs +32 -0
  137. package/src/lib/format/limits.mjs.map +1 -0
  138. package/src/lib/format/list-checks.d.mts +44 -0
  139. package/src/lib/format/list-checks.d.ts +44 -0
  140. package/src/lib/format/list-checks.js +340 -0
  141. package/src/lib/format/list-checks.js.map +1 -0
  142. package/src/lib/format/list-checks.mjs +336 -0
  143. package/src/lib/format/list-checks.mjs.map +1 -0
  144. package/src/lib/format/map-checks.d.mts +33 -0
  145. package/src/lib/format/map-checks.d.ts +33 -0
  146. package/src/lib/format/map-checks.js +180 -0
  147. package/src/lib/format/map-checks.js.map +1 -0
  148. package/src/lib/format/map-checks.mjs +175 -0
  149. package/src/lib/format/map-checks.mjs.map +1 -0
  150. package/src/lib/format/mapchecks-part.d.mts +5 -0
  151. package/src/lib/format/mapchecks-part.d.ts +5 -0
  152. package/src/lib/format/mapchecks-part.js +11 -0
  153. package/src/lib/format/mapchecks-part.js.map +1 -0
  154. package/src/lib/format/mapchecks-part.mjs +6 -0
  155. package/src/lib/format/mapchecks-part.mjs.map +1 -0
  156. package/src/lib/format/option-checks.d.mts +16 -0
  157. package/src/lib/format/option-checks.d.ts +16 -0
  158. package/src/lib/format/option-checks.js +39 -0
  159. package/src/lib/format/option-checks.js.map +1 -0
  160. package/src/lib/format/option-checks.mjs +36 -0
  161. package/src/lib/format/option-checks.mjs.map +1 -0
  162. package/src/lib/format/options-part.d.mts +6 -0
  163. package/src/lib/format/options-part.d.ts +6 -0
  164. package/src/lib/format/options-part.js +11 -0
  165. package/src/lib/format/options-part.js.map +1 -0
  166. package/src/lib/format/options-part.mjs +7 -0
  167. package/src/lib/format/options-part.mjs.map +1 -0
  168. package/src/lib/format/page.d.mts +147 -71
  169. package/src/lib/format/page.d.ts +147 -71
  170. package/src/lib/format/page.js +5 -0
  171. package/src/lib/format/page.js.map +1 -1
  172. package/src/lib/format/page.mjs +5 -0
  173. package/src/lib/format/page.mjs.map +1 -1
  174. package/src/lib/format/part-checks.d.mts +20 -0
  175. package/src/lib/format/part-checks.d.ts +20 -0
  176. package/src/lib/format/part-checks.js +3 -0
  177. package/src/lib/format/part-checks.js.map +1 -0
  178. package/src/lib/format/part-checks.mjs +2 -0
  179. package/src/lib/format/part-checks.mjs.map +1 -0
  180. package/src/lib/format/references.d.mts +71 -65
  181. package/src/lib/format/references.d.ts +71 -65
  182. package/src/lib/format/references.js +194 -631
  183. package/src/lib/format/references.js.map +1 -1
  184. package/src/lib/format/references.mjs +194 -631
  185. package/src/lib/format/references.mjs.map +1 -1
  186. package/src/lib/format/seats-checks.d.mts +3 -0
  187. package/src/lib/format/seats-checks.d.ts +3 -0
  188. package/src/lib/format/seats-checks.js +13 -0
  189. package/src/lib/format/seats-checks.js.map +1 -0
  190. package/src/lib/format/seats-checks.mjs +10 -0
  191. package/src/lib/format/seats-checks.mjs.map +1 -0
  192. package/src/lib/format/sheet-head-checks.d.mts +4 -0
  193. package/src/lib/format/sheet-head-checks.d.ts +4 -0
  194. package/src/lib/format/sheet-head-checks.js +68 -0
  195. package/src/lib/format/sheet-head-checks.js.map +1 -0
  196. package/src/lib/format/sheet-head-checks.mjs +65 -0
  197. package/src/lib/format/sheet-head-checks.mjs.map +1 -0
  198. package/src/lib/format/signature-checks.d.mts +7 -0
  199. package/src/lib/format/signature-checks.d.ts +7 -0
  200. package/src/lib/format/signature-checks.js +32 -0
  201. package/src/lib/format/signature-checks.js.map +1 -0
  202. package/src/lib/format/signature-checks.mjs +29 -0
  203. package/src/lib/format/signature-checks.mjs.map +1 -0
  204. package/src/lib/format/signature-options.d.mts +24 -0
  205. package/src/lib/format/signature-options.d.ts +24 -0
  206. package/src/lib/format/signature-options.js +30 -0
  207. package/src/lib/format/signature-options.js.map +1 -0
  208. package/src/lib/format/signature-options.mjs +26 -0
  209. package/src/lib/format/signature-options.mjs.map +1 -0
  210. package/src/lib/format/slots-checks.d.mts +4 -0
  211. package/src/lib/format/slots-checks.d.ts +4 -0
  212. package/src/lib/format/slots-checks.js +21 -0
  213. package/src/lib/format/slots-checks.js.map +1 -0
  214. package/src/lib/format/slots-checks.mjs +18 -0
  215. package/src/lib/format/slots-checks.mjs.map +1 -0
  216. package/src/lib/format/statusbar-checks.d.mts +8 -0
  217. package/src/lib/format/statusbar-checks.d.ts +8 -0
  218. package/src/lib/format/statusbar-checks.js +35 -0
  219. package/src/lib/format/statusbar-checks.js.map +1 -0
  220. package/src/lib/format/statusbar-checks.mjs +32 -0
  221. package/src/lib/format/statusbar-checks.mjs.map +1 -0
  222. package/src/lib/format/table-checks.d.mts +21 -0
  223. package/src/lib/format/table-checks.d.ts +21 -0
  224. package/src/lib/format/table-checks.js +86 -0
  225. package/src/lib/format/table-checks.js.map +1 -0
  226. package/src/lib/format/table-checks.mjs +82 -0
  227. package/src/lib/format/table-checks.mjs.map +1 -0
  228. package/src/lib/format/translate.js +2 -2
  229. package/src/lib/format/translate.js.map +1 -1
  230. package/src/lib/format/translate.mjs +2 -2
  231. package/src/lib/format/translate.mjs.map +1 -1
  232. package/src/lib/format/upgrade.d.mts +6 -3
  233. package/src/lib/format/upgrade.d.ts +6 -3
  234. package/src/lib/format/upgrade.js +6 -3
  235. package/src/lib/format/upgrade.js.map +1 -1
  236. package/src/lib/format/upgrade.mjs +6 -3
  237. package/src/lib/format/upgrade.mjs.map +1 -1
  238. package/src/lib/format/validate.d.mts +18 -2
  239. package/src/lib/format/validate.d.ts +18 -2
  240. package/src/lib/format/validate.js +36 -3
  241. package/src/lib/format/validate.js.map +1 -1
  242. package/src/lib/format/validate.mjs +35 -3
  243. package/src/lib/format/validate.mjs.map +1 -1
  244. package/src/lib/format/version.d.mts +2 -2
  245. package/src/lib/format/version.d.ts +2 -2
  246. package/src/lib/format/version.js +2 -2
  247. package/src/lib/format/version.js.map +1 -1
  248. package/src/lib/format/version.mjs +2 -2
  249. package/src/lib/format/version.mjs.map +1 -1
  250. package/src/lib/format/words.d.mts +6 -2
  251. package/src/lib/format/words.d.ts +6 -2
  252. package/src/lib/format/words.js +13 -7
  253. package/src/lib/format/words.js.map +1 -1
  254. package/src/lib/format/words.mjs +13 -7
  255. package/src/lib/format/words.mjs.map +1 -1
  256. package/src/lib/parts.d.mts +45 -0
  257. package/src/lib/parts.d.ts +45 -0
  258. package/src/lib/parts.js +60 -0
  259. package/src/lib/parts.js.map +1 -0
  260. package/src/lib/parts.mjs +53 -0
  261. package/src/lib/parts.mjs.map +1 -0
  262. package/src/lib/record/cells.d.mts +3 -3
  263. package/src/lib/record/cells.d.ts +3 -3
  264. package/src/lib/record/cells.js +16 -15
  265. package/src/lib/record/cells.js.map +1 -1
  266. package/src/lib/record/cells.mjs +16 -15
  267. package/src/lib/record/cells.mjs.map +1 -1
  268. package/src/lib/record/compute.d.mts +16 -5
  269. package/src/lib/record/compute.d.ts +16 -5
  270. package/src/lib/record/compute.js +57 -16
  271. package/src/lib/record/compute.js.map +1 -1
  272. package/src/lib/record/compute.mjs +57 -16
  273. package/src/lib/record/compute.mjs.map +1 -1
  274. package/src/lib/record/data-source.d.mts +140 -3
  275. package/src/lib/record/data-source.d.ts +140 -3
  276. package/src/lib/record/data-source.js.map +1 -1
  277. package/src/lib/record/data-source.mjs.map +1 -1
  278. package/src/lib/record/drafts.d.mts +19 -0
  279. package/src/lib/record/drafts.d.ts +19 -0
  280. package/src/lib/record/drafts.js +35 -0
  281. package/src/lib/record/drafts.js.map +1 -0
  282. package/src/lib/record/drafts.mjs +31 -0
  283. package/src/lib/record/drafts.mjs.map +1 -0
  284. package/src/lib/record/env.d.mts +5 -1
  285. package/src/lib/record/env.d.ts +5 -1
  286. package/src/lib/record/env.js +9 -1
  287. package/src/lib/record/env.js.map +1 -1
  288. package/src/lib/record/env.mjs +8 -1
  289. package/src/lib/record/env.mjs.map +1 -1
  290. package/src/lib/record/form-limits.d.mts +81 -0
  291. package/src/lib/record/form-limits.d.ts +81 -0
  292. package/src/lib/record/form-limits.js +231 -0
  293. package/src/lib/record/form-limits.js.map +1 -0
  294. package/src/lib/record/form-limits.mjs +224 -0
  295. package/src/lib/record/form-limits.mjs.map +1 -0
  296. package/src/lib/record/form.d.mts +173 -4
  297. package/src/lib/record/form.d.ts +173 -4
  298. package/src/lib/record/form.js +792 -88
  299. package/src/lib/record/form.js.map +1 -1
  300. package/src/lib/record/form.mjs +792 -88
  301. package/src/lib/record/form.mjs.map +1 -1
  302. package/src/lib/record/limits-part.d.mts +6 -0
  303. package/src/lib/record/limits-part.d.ts +6 -0
  304. package/src/lib/record/limits-part.js +12 -0
  305. package/src/lib/record/limits-part.js.map +1 -0
  306. package/src/lib/record/limits-part.mjs +7 -0
  307. package/src/lib/record/limits-part.mjs.map +1 -0
  308. package/src/lib/record/line-choices.d.mts +30 -0
  309. package/src/lib/record/line-choices.d.ts +30 -0
  310. package/src/lib/record/line-choices.js +42 -0
  311. package/src/lib/record/line-choices.js.map +1 -0
  312. package/src/lib/record/line-choices.mjs +36 -0
  313. package/src/lib/record/line-choices.mjs.map +1 -0
  314. package/src/lib/record/locales/ar.js +10 -0
  315. package/src/lib/record/locales/ar.js.map +1 -1
  316. package/src/lib/record/locales/ar.mjs +10 -0
  317. package/src/lib/record/locales/ar.mjs.map +1 -1
  318. package/src/lib/record/locales/de.js +10 -0
  319. package/src/lib/record/locales/de.js.map +1 -1
  320. package/src/lib/record/locales/de.mjs +10 -0
  321. package/src/lib/record/locales/de.mjs.map +1 -1
  322. package/src/lib/record/locales/fr.js +10 -0
  323. package/src/lib/record/locales/fr.js.map +1 -1
  324. package/src/lib/record/locales/fr.mjs +10 -0
  325. package/src/lib/record/locales/fr.mjs.map +1 -1
  326. package/src/lib/record/memory-data-source.d.mts +44 -3
  327. package/src/lib/record/memory-data-source.d.ts +44 -3
  328. package/src/lib/record/memory-data-source.js +102 -40
  329. package/src/lib/record/memory-data-source.js.map +1 -1
  330. package/src/lib/record/memory-data-source.mjs +101 -40
  331. package/src/lib/record/memory-data-source.mjs.map +1 -1
  332. package/src/lib/record/memory-kept.d.mts +20 -0
  333. package/src/lib/record/memory-kept.d.ts +20 -0
  334. package/src/lib/record/memory-kept.js +46 -0
  335. package/src/lib/record/memory-kept.js.map +1 -0
  336. package/src/lib/record/memory-kept.mjs +43 -0
  337. package/src/lib/record/memory-kept.mjs.map +1 -0
  338. package/src/lib/record/memory-later.d.mts +19 -0
  339. package/src/lib/record/memory-later.d.ts +19 -0
  340. package/src/lib/record/memory-later.js +39 -0
  341. package/src/lib/record/memory-later.js.map +1 -0
  342. package/src/lib/record/memory-later.mjs +35 -0
  343. package/src/lib/record/memory-later.mjs.map +1 -0
  344. package/src/lib/record/memory-part.d.mts +7 -0
  345. package/src/lib/record/memory-part.d.ts +7 -0
  346. package/src/lib/record/memory-part.js +13 -0
  347. package/src/lib/record/memory-part.js.map +1 -0
  348. package/src/lib/record/memory-part.mjs +8 -0
  349. package/src/lib/record/memory-part.mjs.map +1 -0
  350. package/src/lib/record/messages.d.mts +17 -0
  351. package/src/lib/record/messages.d.ts +17 -0
  352. package/src/lib/record/messages.js +10 -0
  353. package/src/lib/record/messages.js.map +1 -1
  354. package/src/lib/record/messages.mjs +10 -0
  355. package/src/lib/record/messages.mjs.map +1 -1
  356. package/src/lib/record/option-rules.d.mts +50 -0
  357. package/src/lib/record/option-rules.d.ts +50 -0
  358. package/src/lib/record/option-rules.js +137 -0
  359. package/src/lib/record/option-rules.js.map +1 -0
  360. package/src/lib/record/option-rules.mjs +134 -0
  361. package/src/lib/record/option-rules.mjs.map +1 -0
  362. package/src/lib/record/rules.d.mts +2 -2
  363. package/src/lib/record/rules.d.ts +2 -2
  364. package/src/lib/record/rules.js +3 -3
  365. package/src/lib/record/rules.js.map +1 -1
  366. package/src/lib/record/rules.mjs +3 -3
  367. package/src/lib/record/rules.mjs.map +1 -1
  368. package/src/lib/record/run.js +9 -7
  369. package/src/lib/record/run.js.map +1 -1
  370. package/src/lib/record/run.mjs +9 -7
  371. package/src/lib/record/run.mjs.map +1 -1
  372. package/src/lib/record/search.d.mts +12 -2
  373. package/src/lib/record/search.d.ts +12 -2
  374. package/src/lib/record/search.js +29 -4
  375. package/src/lib/record/search.js.map +1 -1
  376. package/src/lib/record/search.mjs +29 -4
  377. package/src/lib/record/search.mjs.map +1 -1
  378. package/src/lib/record/set-when.d.mts +3 -3
  379. package/src/lib/record/set-when.d.ts +3 -3
  380. package/src/lib/record/set-when.js +9 -9
  381. package/src/lib/record/set-when.js.map +1 -1
  382. package/src/lib/record/set-when.mjs +9 -9
  383. package/src/lib/record/set-when.mjs.map +1 -1
  384. package/src/lib/record/signed.d.mts +21 -0
  385. package/src/lib/record/signed.d.ts +21 -0
  386. package/src/lib/record/signed.js +62 -0
  387. package/src/lib/record/signed.js.map +1 -0
  388. package/src/lib/record/signed.mjs +57 -0
  389. package/src/lib/record/signed.mjs.map +1 -0
  390. package/src/lib/record/taking.d.mts +60 -0
  391. package/src/lib/record/taking.d.ts +60 -0
  392. package/src/lib/record/taking.js +58 -0
  393. package/src/lib/record/taking.js.map +1 -0
  394. package/src/lib/record/taking.mjs +50 -0
  395. package/src/lib/record/taking.mjs.map +1 -0
  396. package/src/lib/record/value-map.js +11 -4
  397. package/src/lib/record/value-map.js.map +1 -1
  398. package/src/lib/record/value-map.mjs +11 -4
  399. package/src/lib/record/value-map.mjs.map +1 -1
  400. package/src/lib/record/values.d.mts +20 -0
  401. package/src/lib/record/values.d.ts +20 -0
  402. package/src/lib/record/values.js.map +1 -1
  403. package/src/lib/record/values.mjs.map +1 -1
  404. package/src/lib/record/waits.d.mts +6 -1
  405. package/src/lib/record/waits.d.ts +6 -1
  406. package/src/lib/record/waits.js +2 -2
  407. package/src/lib/record/waits.js.map +1 -1
  408. package/src/lib/record/waits.mjs +2 -2
  409. package/src/lib/record/waits.mjs.map +1 -1
  410. package/src/runtime.d.mts +16 -5
  411. package/src/runtime.d.ts +16 -5
  412. package/src/runtime.js +41 -3
  413. package/src/runtime.js.map +1 -1
  414. package/src/runtime.mjs +13 -0
  415. package/src/runtime.mjs.map +1 -1
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optionRulesPart = exports.hasOptionRules = exports.changesOptions = exports.optionsField = exports.optionsList = void 0;
4
+ exports.choiceOptions = choiceOptions;
5
+ exports.withCarriedOptions = withCarriedOptions;
6
+ const parts_1 = require("../parts");
7
+ /** The app's list a choice's options come from, when they do. */
8
+ const optionsList = (from) => (from && 'list' in from ? from : undefined);
9
+ exports.optionsList = optionsList;
10
+ /** The earlier question a choice's options are carried from, when they are. */
11
+ const optionsField = (from) => (from && 'field' in from ? from : undefined);
12
+ exports.optionsField = optionsField;
13
+ /**
14
+ * Every option a page's choice may hold, as the page writes it: its own — or, carried from an earlier question
15
+ * (`optionsFrom.field`), that question's (its "None of these" left out) and its own after them. A list's (`optionsFrom.list`)
16
+ * are the app's, known once loaded: its own until then. Whatever conditions hide (`options[].invisible`) included.
17
+ */
18
+ function choiceOptions(fields, name, seen = []) {
19
+ const def = fields[name];
20
+ if (def?.type !== 'selection')
21
+ return [];
22
+ const carried = (0, exports.optionsField)(def.optionsFrom);
23
+ if (!carried || seen.includes(carried.field))
24
+ return [...def.options];
25
+ return [...choiceOptions(fields, carried.field, [...seen, name]).filter((o) => !o.exclusive), ...def.options];
26
+ }
27
+ /**
28
+ * The page with each choice carried from an earlier question holding every option it may (`choiceOptions`), for what
29
+ * shows its answers apart from a form — a list's cells, groups and filters, an import — by their labels. The same
30
+ * page when it carries none.
31
+ */
32
+ function withCarriedOptions(page) {
33
+ const carried = Object.keys(page.fields).filter((name) => {
34
+ const def = page.fields[name];
35
+ return def.type === 'selection' && (0, exports.optionsField)(def.optionsFrom);
36
+ });
37
+ if (!carried.length)
38
+ return page;
39
+ const fields = { ...page.fields };
40
+ for (const name of carried)
41
+ fields[name] = { ...fields[name], options: choiceOptions(page.fields, name) };
42
+ return { ...page, fields };
43
+ }
44
+ /** Whether a choice's options show by a condition: one says when it hides (`invisible`). */
45
+ const ruled = (options) => !!options?.some((option) => option.invisible !== undefined && option.invisible !== false);
46
+ /**
47
+ * Whether a choice's options change with the record's answers — a condition on one, or carried from an earlier
48
+ * question — a page's choice's, or a table line's column's.
49
+ */
50
+ const changesOptions = (def) => def?.type === 'selection' && (!!(0, exports.optionsField)(def.optionsFrom) || ruled(def.options));
51
+ exports.changesOptions = changesOptions;
52
+ /** Whether a page has options by condition or carried from an earlier question: its form's options part is asked for. */
53
+ const hasOptionRules = (page) => Object.values(page.fields).some((def) => (0, exports.changesOptions)(def) || (def.type === 'one2many' && Object.values(def.fields).some((sub) => (0, exports.changesOptions)(sub))));
54
+ exports.hasOptionRules = hasOptionRules;
55
+ /**
56
+ * Options shown by a condition and carried from an earlier question — what a choice offers now, and a chosen one a change
57
+ * no longer offers taken out and said — loaded before a page with any is drawn (`hasOptionRules`).
58
+ */
59
+ exports.optionRulesPart = (0, parts_1.lazyPart)('options', () => Promise.resolve().then(() => require('./options-part')));
60
+ //# sourceMappingURL=choice-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-options.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/choice-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { lazyPart } from '../parts.mjs';
2
+ /** The app's list a choice's options come from, when they do. */
3
+ export const optionsList = (from) => (from && 'list' in from ? from : undefined);
4
+ /** The earlier question a choice's options are carried from, when they are. */
5
+ export const optionsField = (from) => (from && 'field' in from ? from : undefined);
6
+ /**
7
+ * Every option a page's choice may hold, as the page writes it: its own — or, carried from an earlier question
8
+ * (`optionsFrom.field`), that question's (its "None of these" left out) and its own after them. A list's (`optionsFrom.list`)
9
+ * are the app's, known once loaded: its own until then. Whatever conditions hide (`options[].invisible`) included.
10
+ */
11
+ export function choiceOptions(fields, name, seen = []) {
12
+ const def = fields[name];
13
+ if (def?.type !== 'selection')
14
+ return [];
15
+ const carried = optionsField(def.optionsFrom);
16
+ if (!carried || seen.includes(carried.field))
17
+ return [...def.options];
18
+ return [...choiceOptions(fields, carried.field, [...seen, name]).filter((o) => !o.exclusive), ...def.options];
19
+ }
20
+ /**
21
+ * The page with each choice carried from an earlier question holding every option it may (`choiceOptions`), for what
22
+ * shows its answers apart from a form — a list's cells, groups and filters, an import — by their labels. The same
23
+ * page when it carries none.
24
+ */
25
+ export function withCarriedOptions(page) {
26
+ const carried = Object.keys(page.fields).filter((name) => {
27
+ const def = page.fields[name];
28
+ return def.type === 'selection' && optionsField(def.optionsFrom);
29
+ });
30
+ if (!carried.length)
31
+ return page;
32
+ const fields = { ...page.fields };
33
+ for (const name of carried)
34
+ fields[name] = { ...fields[name], options: choiceOptions(page.fields, name) };
35
+ return { ...page, fields };
36
+ }
37
+ /** Whether a choice's options show by a condition: one says when it hides (`invisible`). */
38
+ const ruled = (options) => !!options?.some((option) => option.invisible !== undefined && option.invisible !== false);
39
+ /**
40
+ * Whether a choice's options change with the record's answers — a condition on one, or carried from an earlier
41
+ * question — a page's choice's, or a table line's column's.
42
+ */
43
+ export const changesOptions = (def) => def?.type === 'selection' && (!!optionsField(def.optionsFrom) || ruled(def.options));
44
+ /** Whether a page has options by condition or carried from an earlier question: its form's options part is asked for. */
45
+ export const hasOptionRules = (page) => Object.values(page.fields).some((def) => changesOptions(def) || (def.type === 'one2many' && Object.values(def.fields).some((sub) => changesOptions(sub))));
46
+ /**
47
+ * Options shown by a condition and carried from an earlier question — what a choice offers now, and a chosen one a change
48
+ * no longer offers taken out and said — loaded before a page with any is drawn (`hasOptionRules`).
49
+ */
50
+ export const optionRulesPart = lazyPart('options', () => import('./options-part.mjs'));
51
+ //# sourceMappingURL=choice-options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice-options.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/choice-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Page } from './page.mjs';
2
+ import type { EndingTools } from './part-checks.mjs';
3
+ /**
4
+ * What a page of responses shows once it is sent (that it is one, the reference check says): each ending's condition
5
+ * reads the answers (and `id`, the response's),
6
+ * its words name fields of the page (or `id`), it says something, and none follows one that is always shown.
7
+ */
8
+ export declare function checkEndings(page: Page, tools: EndingTools): void;
@@ -0,0 +1,8 @@
1
+ import type { Page } from './page';
2
+ import type { EndingTools } from './part-checks';
3
+ /**
4
+ * What a page of responses shows once it is sent (that it is one, the reference check says): each ending's condition
5
+ * reads the answers (and `id`, the response's),
6
+ * its words name fields of the page (or `id`), it says something, and none follows one that is always shown.
7
+ */
8
+ export declare function checkEndings(page: Page, tools: EndingTools): void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkEndings = checkEndings;
4
+ /**
5
+ * What a page of responses shows once it is sent (that it is one, the reference check says): each ending's condition
6
+ * reads the answers (and `id`, the response's),
7
+ * its words name fields of the page (or `id`), it says something, and none follows one that is always shown.
8
+ */
9
+ function checkEndings(page, tools) {
10
+ let always = '';
11
+ (Array.isArray(page.endings) ? page.endings : []).forEach((ending, i) => {
12
+ const at = `endings[${i}]`;
13
+ if (always)
14
+ tools.report(at, `never shown: ${always} has no when and comes first`);
15
+ tools.checkModifiers(ending, at, ['when']);
16
+ if (ending.when === undefined || ending.when === true)
17
+ always ||= at;
18
+ if (typeof ending.title !== 'string' && typeof ending.text !== 'string')
19
+ tools.report(at, 'an ending needs a title or text');
20
+ tools.checkWords(ending, at, ['title', 'text'], true);
21
+ });
22
+ }
23
+ //# sourceMappingURL=endings-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endings-checks.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/endings-checks.ts"],"names":[],"mappings":";;AAQA,oCAUC;AAfD;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAAU,EAAE,KAAkB;IACzD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC;QAC3B,IAAI,MAAM;YAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,MAAM,8BAA8B,CAAC,CAAC;QACnF,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,KAAK,EAAE,CAAC;QACrE,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,iCAAiC,CAAC,CAAC;QAC7H,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * What a page of responses shows once it is sent (that it is one, the reference check says): each ending's condition
3
+ * reads the answers (and `id`, the response's),
4
+ * its words name fields of the page (or `id`), it says something, and none follows one that is always shown.
5
+ */
6
+ export function checkEndings(page, tools) {
7
+ let always = '';
8
+ (Array.isArray(page.endings) ? page.endings : []).forEach((ending, i) => {
9
+ const at = `endings[${i}]`;
10
+ if (always)
11
+ tools.report(at, `never shown: ${always} has no when and comes first`);
12
+ tools.checkModifiers(ending, at, ['when']);
13
+ if (ending.when === undefined || ending.when === true)
14
+ always ||= at;
15
+ if (typeof ending.title !== 'string' && typeof ending.text !== 'string')
16
+ tools.report(at, 'an ending needs a title or text');
17
+ tools.checkWords(ending, at, ['title', 'text'], true);
18
+ });
19
+ }
20
+ //# sourceMappingURL=endings-checks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endings-checks.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/endings-checks.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,KAAkB;IACzD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC;QAC3B,IAAI,MAAM;YAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,MAAM,8BAA8B,CAAC,CAAC;QACnF,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,KAAK,EAAE,CAAC;QACrE,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,iCAAiC,CAAC,CAAC;QAC7H,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,40 @@
1
+ import * as z from 'zod';
2
+ import { type Modifier } from './layout.mjs';
3
+ /**
4
+ * What a page of responses shows once its answers are sent, in place of the plain "Thank you" (`endings` on a page):
5
+ * the first ending whose `when` holds, read on the answers as they were sent with what the app's source answered —
6
+ * the `values` it added (`SubmitResult.values`) and the response's `id` — else the ending with no `when`, the page's
7
+ * default. Its title and words hold `{field}`s as a text's words do, each written as the field shows its value: a
8
+ * choice by its label, money with its currency, a day in the page's order; `{id}` is the id the source gave the
9
+ * response, where the page has no field of that name.
10
+ *
11
+ * "endings": [
12
+ * { "when": "overall <= 2", "title": "We are sorry, {name}", "text": "Someone from {branch} will call you today." },
13
+ * { "title": "Thank you, {name}", "text": "Your booking is {id}. See you on {date} at {time}." }
14
+ * ]
15
+ *
16
+ * A link goes where an ending's words say `[words](address)`, as a text's. A redirect after sending is a step
17
+ * (`on.afterSave`, `openUrl` with its `when`), as before.
18
+ */
19
+ export interface PageEnding {
20
+ /** When this ending is the one shown: a condition on the answers as sent, as any `when`. Left out: the default. */
21
+ when?: Modifier;
22
+ /** Its heading: "Thank you, {name}". The viewer's own thanks when it has neither title nor text. */
23
+ title?: string;
24
+ /** Its words under the heading: "Your booking is {id}." A line break starts a new paragraph. */
25
+ text?: string;
26
+ /** The words of the button that starts the form again ("Book another"), or false for none; the viewer's own when left out. */
27
+ again?: string | false;
28
+ }
29
+ export declare const PageEndingSchema: z.ZodObject<{
30
+ when: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
31
+ title: z.ZodOptional<z.ZodString>;
32
+ text: z.ZodOptional<z.ZodString>;
33
+ again: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>>;
34
+ }, z.core.$strict>;
35
+ export declare const PageEndingsSchema: z.ZodArray<z.ZodObject<{
36
+ when: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
37
+ title: z.ZodOptional<z.ZodString>;
38
+ text: z.ZodOptional<z.ZodString>;
39
+ again: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>>;
40
+ }, z.core.$strict>>;
@@ -0,0 +1,40 @@
1
+ import * as z from 'zod';
2
+ import { type Modifier } from './layout';
3
+ /**
4
+ * What a page of responses shows once its answers are sent, in place of the plain "Thank you" (`endings` on a page):
5
+ * the first ending whose `when` holds, read on the answers as they were sent with what the app's source answered —
6
+ * the `values` it added (`SubmitResult.values`) and the response's `id` — else the ending with no `when`, the page's
7
+ * default. Its title and words hold `{field}`s as a text's words do, each written as the field shows its value: a
8
+ * choice by its label, money with its currency, a day in the page's order; `{id}` is the id the source gave the
9
+ * response, where the page has no field of that name.
10
+ *
11
+ * "endings": [
12
+ * { "when": "overall <= 2", "title": "We are sorry, {name}", "text": "Someone from {branch} will call you today." },
13
+ * { "title": "Thank you, {name}", "text": "Your booking is {id}. See you on {date} at {time}." }
14
+ * ]
15
+ *
16
+ * A link goes where an ending's words say `[words](address)`, as a text's. A redirect after sending is a step
17
+ * (`on.afterSave`, `openUrl` with its `when`), as before.
18
+ */
19
+ export interface PageEnding {
20
+ /** When this ending is the one shown: a condition on the answers as sent, as any `when`. Left out: the default. */
21
+ when?: Modifier;
22
+ /** Its heading: "Thank you, {name}". The viewer's own thanks when it has neither title nor text. */
23
+ title?: string;
24
+ /** Its words under the heading: "Your booking is {id}." A line break starts a new paragraph. */
25
+ text?: string;
26
+ /** The words of the button that starts the form again ("Book another"), or false for none; the viewer's own when left out. */
27
+ again?: string | false;
28
+ }
29
+ export declare const PageEndingSchema: z.ZodObject<{
30
+ when: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
31
+ title: z.ZodOptional<z.ZodString>;
32
+ text: z.ZodOptional<z.ZodString>;
33
+ again: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>>;
34
+ }, z.z.core.$strict>;
35
+ export declare const PageEndingsSchema: z.ZodArray<z.ZodObject<{
36
+ when: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
37
+ title: z.ZodOptional<z.ZodString>;
38
+ text: z.ZodOptional<z.ZodString>;
39
+ again: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>>;
40
+ }, z.z.core.$strict>>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageEndingsSchema = exports.PageEndingSchema = void 0;
4
+ const z = require("zod");
5
+ const layout_1 = require("./layout");
6
+ exports.PageEndingSchema = z
7
+ .strictObject({
8
+ when: layout_1.ModifierSchema.optional(),
9
+ title: z.string().regex(/\S/, 'an ending’s title is words: "Thank you, {name}"').max(300).optional(),
10
+ text: z.string().regex(/\S/, 'an ending’s text is words: "Your booking is {id}."').max(4000).optional(),
11
+ again: z.union([z.literal(false), z.string().regex(/\S/, 'again is the button’s words, or false for none').max(80)]).optional(),
12
+ })
13
+ .meta({ id: 'PageEnding' });
14
+ exports.PageEndingsSchema = z.array(exports.PageEndingSchema).min(1).max(50);
15
+ //# sourceMappingURL=endings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endings.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/endings.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,qCAAyD;AA6B5C,QAAA,gBAAgB,GAAG,CAAC;KAC9B,YAAY,CAAC;IACZ,IAAI,EAAE,uBAAc,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,iDAAiD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACpG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,oDAAoD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACvG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,gDAAgD,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAChI,CAAC;KACD,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;AAEjB,QAAA,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,wBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import * as z from 'zod';
2
+ import { ModifierSchema } from './layout.mjs';
3
+ export const PageEndingSchema = z
4
+ .strictObject({
5
+ when: ModifierSchema.optional(),
6
+ title: z.string().regex(/\S/, 'an ending’s title is words: "Thank you, {name}"').max(300).optional(),
7
+ text: z.string().regex(/\S/, 'an ending’s text is words: "Your booking is {id}."').max(4000).optional(),
8
+ again: z.union([z.literal(false), z.string().regex(/\S/, 'again is the button’s words, or false for none').max(80)]).optional(),
9
+ })
10
+ .meta({ id: 'PageEnding' });
11
+ export const PageEndingsSchema = z.array(PageEndingSchema).min(1).max(50);
12
+ //# sourceMappingURL=endings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endings.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/endings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,cAAc,EAAiB,MAAM,UAAU,CAAC;AA6BzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,YAAY,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,iDAAiD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACpG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,oDAAoD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACvG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,gDAAgD,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAChI,CAAC;KACD,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;AAE9B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC"}