@mieweb/ui 0.6.1-dev.159 → 0.6.1-dev.165

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 (119) hide show
  1. package/dist/MedicationEditor-Bp4NLy7y.d.cts +352 -0
  2. package/dist/MedicationEditor-Bp4NLy7y.d.ts +352 -0
  3. package/dist/ag-grid.cjs +5 -5
  4. package/dist/ag-grid.js +1 -1
  5. package/dist/{chunk-H4T5T65N.cjs → chunk-2JQBPU3Y.cjs} +3 -3
  6. package/dist/{chunk-H4T5T65N.cjs.map → chunk-2JQBPU3Y.cjs.map} +1 -1
  7. package/dist/{chunk-6555OYRU.js → chunk-5BQE6BEL.js} +2 -2
  8. package/dist/{chunk-6555OYRU.js.map → chunk-5BQE6BEL.js.map} +1 -1
  9. package/dist/chunk-67CEEDAP.cjs +1605 -0
  10. package/dist/chunk-67CEEDAP.cjs.map +1 -0
  11. package/dist/{chunk-ULF4PWHW.cjs → chunk-7BARESXI.cjs} +3 -3
  12. package/dist/{chunk-ULF4PWHW.cjs.map → chunk-7BARESXI.cjs.map} +1 -1
  13. package/dist/chunk-7ZVTLTJF.js +109 -0
  14. package/dist/chunk-7ZVTLTJF.js.map +1 -0
  15. package/dist/{chunk-KX4NWZIR.cjs → chunk-CDMWZBDD.cjs} +3 -3
  16. package/dist/{chunk-KX4NWZIR.cjs.map → chunk-CDMWZBDD.cjs.map} +1 -1
  17. package/dist/chunk-DHKYGVP7.js +3 -0
  18. package/dist/{chunk-LEMY57MI.js.map → chunk-DHKYGVP7.js.map} +1 -1
  19. package/dist/{chunk-FSBFQBNE.cjs → chunk-DKGUOMBC.cjs} +2 -2
  20. package/dist/{chunk-FSBFQBNE.cjs.map → chunk-DKGUOMBC.cjs.map} +1 -1
  21. package/dist/{chunk-4FALCEJI.cjs → chunk-EL2RSQTJ.cjs} +2 -2
  22. package/dist/{chunk-4FALCEJI.cjs.map → chunk-EL2RSQTJ.cjs.map} +1 -1
  23. package/dist/{chunk-TQV5CGSA.js → chunk-ETGZ5DSA.js} +3 -3
  24. package/dist/{chunk-TQV5CGSA.js.map → chunk-ETGZ5DSA.js.map} +1 -1
  25. package/dist/{chunk-EYJDPYOP.js → chunk-FJG7KUDJ.js} +3 -3
  26. package/dist/{chunk-EYJDPYOP.js.map → chunk-FJG7KUDJ.js.map} +1 -1
  27. package/dist/{chunk-HMQ2PRTB.cjs → chunk-GBRPZGSI.cjs} +7 -7
  28. package/dist/{chunk-HMQ2PRTB.cjs.map → chunk-GBRPZGSI.cjs.map} +1 -1
  29. package/dist/{chunk-M7BLVBL4.js → chunk-GSOOPTGM.js} +3 -3
  30. package/dist/{chunk-M7BLVBL4.js.map → chunk-GSOOPTGM.js.map} +1 -1
  31. package/dist/chunk-HUXOASEB.js +1568 -0
  32. package/dist/chunk-HUXOASEB.js.map +1 -0
  33. package/dist/chunk-IQ4KQJAO.js +3 -0
  34. package/dist/{chunk-4ZU53GNR.cjs.map → chunk-IQ4KQJAO.js.map} +1 -1
  35. package/dist/{chunk-RUGWUQ47.js → chunk-NBD236EH.js} +48 -2
  36. package/dist/chunk-NBD236EH.js.map +1 -0
  37. package/dist/chunk-OF7NTZ2I.js +3 -0
  38. package/dist/chunk-OF7NTZ2I.js.map +1 -0
  39. package/dist/chunk-RHNPILZQ.cjs +4 -0
  40. package/dist/chunk-RHNPILZQ.cjs.map +1 -0
  41. package/dist/chunk-RI56YPED.cjs +201 -0
  42. package/dist/chunk-RI56YPED.cjs.map +1 -0
  43. package/dist/{chunk-DCER2QQB.js → chunk-T42BCIUA.js} +2 -2
  44. package/dist/{chunk-DCER2QQB.js.map → chunk-T42BCIUA.js.map} +1 -1
  45. package/dist/{chunk-4ZU53GNR.cjs → chunk-UTYUT5YY.cjs} +62 -2
  46. package/dist/chunk-UTYUT5YY.cjs.map +1 -0
  47. package/dist/{chunk-Q7NBJFEB.js → chunk-UVQEHZRF.js} +2 -2
  48. package/dist/{chunk-Q7NBJFEB.js.map → chunk-UVQEHZRF.js.map} +1 -1
  49. package/dist/chunk-VBWRH4UW.cjs +4 -0
  50. package/dist/chunk-VBWRH4UW.cjs.map +1 -0
  51. package/dist/{chunk-WJIANZPI.cjs → chunk-VJOVJTFP.cjs} +3 -3
  52. package/dist/chunk-VJOVJTFP.cjs.map +1 -0
  53. package/dist/{chunk-OVQKCUTZ.js → chunk-WFS6R2F5.js} +3 -3
  54. package/dist/{chunk-OVQKCUTZ.js.map → chunk-WFS6R2F5.js.map} +1 -1
  55. package/dist/chunk-Y5KEFV5O.js +192 -0
  56. package/dist/chunk-Y5KEFV5O.js.map +1 -0
  57. package/dist/{chunk-4N72FAQW.js → chunk-YBLIDESO.js} +3 -3
  58. package/dist/chunk-YBLIDESO.js.map +1 -0
  59. package/dist/chunk-YVPC65ZJ.cjs +134 -0
  60. package/dist/chunk-YVPC65ZJ.cjs.map +1 -0
  61. package/dist/{chunk-3AMNAMJA.cjs → chunk-YYDW3ZZS.cjs} +48 -2
  62. package/dist/chunk-YYDW3ZZS.cjs.map +1 -0
  63. package/dist/{chunk-3M4P2KMG.cjs → chunk-ZHBANUBI.cjs} +2 -2
  64. package/dist/{chunk-3M4P2KMG.cjs.map → chunk-ZHBANUBI.cjs.map} +1 -1
  65. package/dist/components/Badge/index.cjs +4 -3
  66. package/dist/components/Badge/index.js +2 -1
  67. package/dist/components/Card/index.cjs +16 -15
  68. package/dist/components/Card/index.js +2 -1
  69. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  70. package/dist/components/CountryCodeDropdown/index.js +2 -2
  71. package/dist/components/Dropdown/index.cjs +8 -8
  72. package/dist/components/Dropdown/index.js +2 -2
  73. package/dist/components/RichTextEditor/index.cjs +7 -7
  74. package/dist/components/RichTextEditor/index.js +4 -4
  75. package/dist/components/Skeleton/index.d.cts +1 -1
  76. package/dist/components/Skeleton/index.d.ts +1 -1
  77. package/dist/components/SuperChat/index.cjs +10 -9
  78. package/dist/components/SuperChat/index.cjs.map +1 -1
  79. package/dist/components/SuperChat/index.js +5 -4
  80. package/dist/components/SuperChat/index.js.map +1 -1
  81. package/dist/components/SuperChat/plugins/index.cjs +3 -3
  82. package/dist/components/SuperChat/plugins/index.js +2 -2
  83. package/dist/datavis.cjs +273 -5
  84. package/dist/datavis.cjs.map +1 -1
  85. package/dist/datavis.d.cts +61 -1
  86. package/dist/datavis.d.ts +61 -1
  87. package/dist/datavis.js +251 -1
  88. package/dist/datavis.js.map +1 -1
  89. package/dist/esheet.cjs +182 -0
  90. package/dist/esheet.cjs.map +1 -1
  91. package/dist/esheet.d.cts +117 -0
  92. package/dist/esheet.d.ts +117 -0
  93. package/dist/esheet.js +161 -0
  94. package/dist/esheet.js.map +1 -1
  95. package/dist/hooks/index.cjs +33 -16
  96. package/dist/hooks/index.d.cts +62 -1
  97. package/dist/hooks/index.d.ts +62 -1
  98. package/dist/hooks/index.js +3 -2
  99. package/dist/index.cjs +3923 -938
  100. package/dist/index.cjs.map +1 -1
  101. package/dist/index.d.cts +981 -2
  102. package/dist/index.d.ts +981 -2
  103. package/dist/index.js +3313 -452
  104. package/dist/index.js.map +1 -1
  105. package/dist/{nitroTableGrid-RQNSZQO4.cjs → nitroTableGrid-3J2GY6CK.cjs} +4 -4
  106. package/dist/{nitroTableGrid-RQNSZQO4.cjs.map → nitroTableGrid-3J2GY6CK.cjs.map} +1 -1
  107. package/dist/{nitroTableGrid-W6XWRFA7.js → nitroTableGrid-SIMT7635.js} +3 -3
  108. package/dist/{nitroTableGrid-W6XWRFA7.js.map → nitroTableGrid-SIMT7635.js.map} +1 -1
  109. package/dist/orderRows-BUJYgSc7.d.cts +221 -0
  110. package/dist/orderRows-BUJYgSc7.d.ts +221 -0
  111. package/dist/styles.css +1 -1
  112. package/dist/tailwind-preset.cjs +4 -4
  113. package/dist/tailwind-preset.js +1 -1
  114. package/package.json +3 -3
  115. package/dist/chunk-3AMNAMJA.cjs.map +0 -1
  116. package/dist/chunk-4N72FAQW.js.map +0 -1
  117. package/dist/chunk-LEMY57MI.js +0 -3
  118. package/dist/chunk-RUGWUQ47.js.map +0 -1
  119. package/dist/chunk-WJIANZPI.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkWJIANZPI_cjs = require('./chunk-WJIANZPI.cjs');
3
+ var chunkVJOVJTFP_cjs = require('./chunk-VJOVJTFP.cjs');
4
4
  var React = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
@@ -39,9 +39,9 @@ function NitroTableGrid({ headers, rows }) {
39
39
  },
40
40
  [varName]
41
41
  );
42
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "superchat-nitro-table", className: "my-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkWJIANZPI_cjs.DataVisNitroSource, { type: "local", varName, children: /* @__PURE__ */ jsxRuntime.jsx(chunkWJIANZPI_cjs.DataVisNitroGrid, { columns: headers, className: "max-h-80" }) }) });
42
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "superchat-nitro-table", className: "my-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVJOVJTFP_cjs.DataVisNitroSource, { type: "local", varName, children: /* @__PURE__ */ jsxRuntime.jsx(chunkVJOVJTFP_cjs.DataVisNitroGrid, { columns: headers, className: "max-h-80" }) }) });
43
43
  }
44
44
 
45
45
  module.exports = NitroTableGrid;
46
- //# sourceMappingURL=nitroTableGrid-RQNSZQO4.cjs.map
47
- //# sourceMappingURL=nitroTableGrid-RQNSZQO4.cjs.map
46
+ //# sourceMappingURL=nitroTableGrid-3J2GY6CK.cjs.map
47
+ //# sourceMappingURL=nitroTableGrid-3J2GY6CK.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/SuperChat/plugins/nitroTableGrid.tsx"],"names":["React","DataVisNitroSource","DataVisNitroGrid"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqBe,SAAR,cAAA,CAAgC,EAAE,OAAA,EAAS,IAAA,EAAK,EAAwB;AAC7E,EAAA,MAAM,OAAA,GAAgBA,yBAAQ,MAAM;AAClC,IAAA,MAAM,WAAA,GAAc,CAAA,wBAAA,EAA2B,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAClF,IAAC,MAAA,CAA8C,WAAW,CAAA,GAAI;AAAA,MAC5D,QAAA,EAAU,QAAQ,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAS,CAAE,CAAA;AAAA,MAC5D,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,WAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAMA,gBAAA,CAAA,SAAA;AAAA,IACJ,MAAM,MAAM;AACV,MAAA,OAAQ,OAA8C,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,sCACG,KAAA,EAAA,EAAI,WAAA,EAAU,yBAAwB,SAAA,EAAU,MAAA,EAC/C,yCAACC,oCAAA,EAAA,EAAmB,IAAA,EAAK,OAAA,EAAQ,OAAA,EAC/B,yCAACC,kCAAA,EAAA,EAAiB,OAAA,EAAS,SAAS,SAAA,EAAU,UAAA,EAAW,GAC3D,CAAA,EACF,CAAA;AAEJ","file":"nitroTableGrid-RQNSZQO4.cjs","sourcesContent":["/**\n * SuperChat NITRO table grid (lazy chunk).\n *\n * Default-exported so it can be pulled in with `React.lazy` only when a GFM\n * table actually renders — this keeps the heavy `datavis` / `datavis-ace`\n * dependencies out of the SuperChat (and Markdown core) bundle.\n *\n * Data is handed to {@link DataVisNitroSource} through a short-lived local\n * source so Storybook never pauses in the intermediate \"Waiting…\" state.\n */\n\nimport * as React from 'react';\nimport { DataVisNitroGrid, DataVisNitroSource } from '../../DataVisNITRO';\n\nexport interface NitroTableGridProps {\n /** Column headers, in order. */\n headers: string[];\n /** Row objects keyed by header. */\n rows: Array<Record<string, string>>;\n}\n\nexport default function NitroTableGrid({ headers, rows }: NitroTableGridProps) {\n const varName = React.useMemo(() => {\n const nextVarName = `__superchat_nitro_table_${Math.random().toString(36).slice(2)}`;\n (window as unknown as Record<string, unknown>)[nextVarName] = {\n typeInfo: headers.map((field) => ({ field, type: 'string' })),\n data: rows,\n };\n return nextVarName;\n }, [headers, rows]);\n\n React.useEffect(\n () => () => {\n delete (window as unknown as Record<string, unknown>)[varName];\n },\n [varName]\n );\n\n return (\n <div data-slot=\"superchat-nitro-table\" className=\"my-2\">\n <DataVisNitroSource type=\"local\" varName={varName}>\n <DataVisNitroGrid columns={headers} className=\"max-h-80\" />\n </DataVisNitroSource>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/SuperChat/plugins/nitroTableGrid.tsx"],"names":["React","DataVisNitroSource","DataVisNitroGrid"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqBe,SAAR,cAAA,CAAgC,EAAE,OAAA,EAAS,IAAA,EAAK,EAAwB;AAC7E,EAAA,MAAM,OAAA,GAAgBA,yBAAQ,MAAM;AAClC,IAAA,MAAM,WAAA,GAAc,CAAA,wBAAA,EAA2B,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAClF,IAAC,MAAA,CAA8C,WAAW,CAAA,GAAI;AAAA,MAC5D,QAAA,EAAU,QAAQ,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAS,CAAE,CAAA;AAAA,MAC5D,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,WAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAMA,gBAAA,CAAA,SAAA;AAAA,IACJ,MAAM,MAAM;AACV,MAAA,OAAQ,OAA8C,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,sCACG,KAAA,EAAA,EAAI,WAAA,EAAU,yBAAwB,SAAA,EAAU,MAAA,EAC/C,yCAACC,oCAAA,EAAA,EAAmB,IAAA,EAAK,OAAA,EAAQ,OAAA,EAC/B,yCAACC,kCAAA,EAAA,EAAiB,OAAA,EAAS,SAAS,SAAA,EAAU,UAAA,EAAW,GAC3D,CAAA,EACF,CAAA;AAEJ","file":"nitroTableGrid-3J2GY6CK.cjs","sourcesContent":["/**\n * SuperChat NITRO table grid (lazy chunk).\n *\n * Default-exported so it can be pulled in with `React.lazy` only when a GFM\n * table actually renders — this keeps the heavy `datavis` / `datavis-ace`\n * dependencies out of the SuperChat (and Markdown core) bundle.\n *\n * Data is handed to {@link DataVisNitroSource} through a short-lived local\n * source so Storybook never pauses in the intermediate \"Waiting…\" state.\n */\n\nimport * as React from 'react';\nimport { DataVisNitroGrid, DataVisNitroSource } from '../../DataVisNITRO';\n\nexport interface NitroTableGridProps {\n /** Column headers, in order. */\n headers: string[];\n /** Row objects keyed by header. */\n rows: Array<Record<string, string>>;\n}\n\nexport default function NitroTableGrid({ headers, rows }: NitroTableGridProps) {\n const varName = React.useMemo(() => {\n const nextVarName = `__superchat_nitro_table_${Math.random().toString(36).slice(2)}`;\n (window as unknown as Record<string, unknown>)[nextVarName] = {\n typeInfo: headers.map((field) => ({ field, type: 'string' })),\n data: rows,\n };\n return nextVarName;\n }, [headers, rows]);\n\n React.useEffect(\n () => () => {\n delete (window as unknown as Record<string, unknown>)[varName];\n },\n [varName]\n );\n\n return (\n <div data-slot=\"superchat-nitro-table\" className=\"my-2\">\n <DataVisNitroSource type=\"local\" varName={varName}>\n <DataVisNitroGrid columns={headers} className=\"max-h-80\" />\n </DataVisNitroSource>\n </div>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { DataVisNitroSource, DataVisNitroGrid } from './chunk-4N72FAQW.js';
1
+ import { DataVisNitroSource, DataVisNitroGrid } from './chunk-YBLIDESO.js';
2
2
  import * as React from 'react';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
@@ -21,5 +21,5 @@ function NitroTableGrid({ headers, rows }) {
21
21
  }
22
22
 
23
23
  export { NitroTableGrid as default };
24
- //# sourceMappingURL=nitroTableGrid-W6XWRFA7.js.map
25
- //# sourceMappingURL=nitroTableGrid-W6XWRFA7.js.map
24
+ //# sourceMappingURL=nitroTableGrid-SIMT7635.js.map
25
+ //# sourceMappingURL=nitroTableGrid-SIMT7635.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/SuperChat/plugins/nitroTableGrid.tsx"],"names":[],"mappings":";;;;AAqBe,SAAR,cAAA,CAAgC,EAAE,OAAA,EAAS,IAAA,EAAK,EAAwB;AAC7E,EAAA,MAAM,OAAA,GAAgB,cAAQ,MAAM;AAClC,IAAA,MAAM,WAAA,GAAc,CAAA,wBAAA,EAA2B,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAClF,IAAC,MAAA,CAA8C,WAAW,CAAA,GAAI;AAAA,MAC5D,QAAA,EAAU,QAAQ,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAS,CAAE,CAAA;AAAA,MAC5D,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,WAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAM,KAAA,CAAA,SAAA;AAAA,IACJ,MAAM,MAAM;AACV,MAAA,OAAQ,OAA8C,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,2BACG,KAAA,EAAA,EAAI,WAAA,EAAU,yBAAwB,SAAA,EAAU,MAAA,EAC/C,8BAAC,kBAAA,EAAA,EAAmB,IAAA,EAAK,OAAA,EAAQ,OAAA,EAC/B,8BAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,SAAS,SAAA,EAAU,UAAA,EAAW,GAC3D,CAAA,EACF,CAAA;AAEJ","file":"nitroTableGrid-W6XWRFA7.js","sourcesContent":["/**\n * SuperChat NITRO table grid (lazy chunk).\n *\n * Default-exported so it can be pulled in with `React.lazy` only when a GFM\n * table actually renders — this keeps the heavy `datavis` / `datavis-ace`\n * dependencies out of the SuperChat (and Markdown core) bundle.\n *\n * Data is handed to {@link DataVisNitroSource} through a short-lived local\n * source so Storybook never pauses in the intermediate \"Waiting…\" state.\n */\n\nimport * as React from 'react';\nimport { DataVisNitroGrid, DataVisNitroSource } from '../../DataVisNITRO';\n\nexport interface NitroTableGridProps {\n /** Column headers, in order. */\n headers: string[];\n /** Row objects keyed by header. */\n rows: Array<Record<string, string>>;\n}\n\nexport default function NitroTableGrid({ headers, rows }: NitroTableGridProps) {\n const varName = React.useMemo(() => {\n const nextVarName = `__superchat_nitro_table_${Math.random().toString(36).slice(2)}`;\n (window as unknown as Record<string, unknown>)[nextVarName] = {\n typeInfo: headers.map((field) => ({ field, type: 'string' })),\n data: rows,\n };\n return nextVarName;\n }, [headers, rows]);\n\n React.useEffect(\n () => () => {\n delete (window as unknown as Record<string, unknown>)[varName];\n },\n [varName]\n );\n\n return (\n <div data-slot=\"superchat-nitro-table\" className=\"my-2\">\n <DataVisNitroSource type=\"local\" varName={varName}>\n <DataVisNitroGrid columns={headers} className=\"max-h-80\" />\n </DataVisNitroSource>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/SuperChat/plugins/nitroTableGrid.tsx"],"names":[],"mappings":";;;;AAqBe,SAAR,cAAA,CAAgC,EAAE,OAAA,EAAS,IAAA,EAAK,EAAwB;AAC7E,EAAA,MAAM,OAAA,GAAgB,cAAQ,MAAM;AAClC,IAAA,MAAM,WAAA,GAAc,CAAA,wBAAA,EAA2B,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAClF,IAAC,MAAA,CAA8C,WAAW,CAAA,GAAI;AAAA,MAC5D,QAAA,EAAU,QAAQ,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAS,CAAE,CAAA;AAAA,MAC5D,IAAA,EAAM;AAAA,KACR;AACA,IAAA,OAAO,WAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAM,KAAA,CAAA,SAAA;AAAA,IACJ,MAAM,MAAM;AACV,MAAA,OAAQ,OAA8C,OAAO,CAAA;AAAA,IAC/D,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,2BACG,KAAA,EAAA,EAAI,WAAA,EAAU,yBAAwB,SAAA,EAAU,MAAA,EAC/C,8BAAC,kBAAA,EAAA,EAAmB,IAAA,EAAK,OAAA,EAAQ,OAAA,EAC/B,8BAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,SAAS,SAAA,EAAU,UAAA,EAAW,GAC3D,CAAA,EACF,CAAA;AAEJ","file":"nitroTableGrid-SIMT7635.js","sourcesContent":["/**\n * SuperChat NITRO table grid (lazy chunk).\n *\n * Default-exported so it can be pulled in with `React.lazy` only when a GFM\n * table actually renders — this keeps the heavy `datavis` / `datavis-ace`\n * dependencies out of the SuperChat (and Markdown core) bundle.\n *\n * Data is handed to {@link DataVisNitroSource} through a short-lived local\n * source so Storybook never pauses in the intermediate \"Waiting…\" state.\n */\n\nimport * as React from 'react';\nimport { DataVisNitroGrid, DataVisNitroSource } from '../../DataVisNITRO';\n\nexport interface NitroTableGridProps {\n /** Column headers, in order. */\n headers: string[];\n /** Row objects keyed by header. */\n rows: Array<Record<string, string>>;\n}\n\nexport default function NitroTableGrid({ headers, rows }: NitroTableGridProps) {\n const varName = React.useMemo(() => {\n const nextVarName = `__superchat_nitro_table_${Math.random().toString(36).slice(2)}`;\n (window as unknown as Record<string, unknown>)[nextVarName] = {\n typeInfo: headers.map((field) => ({ field, type: 'string' })),\n data: rows,\n };\n return nextVarName;\n }, [headers, rows]);\n\n React.useEffect(\n () => () => {\n delete (window as unknown as Record<string, unknown>)[varName];\n },\n [varName]\n );\n\n return (\n <div data-slot=\"superchat-nitro-table\" className=\"my-2\">\n <DataVisNitroSource type=\"local\" varName={varName}>\n <DataVisNitroGrid columns={headers} className=\"max-h-80\" />\n </DataVisNitroSource>\n </div>\n );\n}\n"]}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Patient history — the minimal longitudinal facts the health-surveillance
3
+ * due engine needs: who the patient is (age, sex) and what has been done or
4
+ * is in flight (orders with status, observations, procedures, immunizations),
5
+ * plus problem-list context (conditions) and allergies for display/interop.
6
+ *
7
+ * All clinical entries are keyed by `CODETYPE|FULLCODE` — the same keys used
8
+ * by programs.json order sets and the codify shards — so the due engine can
9
+ * match history against a program's satisfying orders with plain string
10
+ * equality.
11
+ */
12
+ /** ISO date string (YYYY-MM-DD or full ISO timestamp). */
13
+ type IsoDate = string;
14
+ interface HistoryOrder {
15
+ /** CODETYPE|FULLCODE, e.g. "Quest Order|3058" or "HCPCS|92551" */
16
+ key: string;
17
+ /** Display label (optional; the due list falls back to the key) */
18
+ label?: string;
19
+ status: 'completed' | 'pending';
20
+ /** Completion date for completed orders; order date for pending ones */
21
+ date: IsoDate;
22
+ /** Ordering/performing provider display name (e.g. "Dr. Patel") */
23
+ provider?: string;
24
+ /** Requisition the order was bundled into — the document routing a batch
25
+ * of encounter orders to a provider/referral (e.g. "REQ-2024-0117") */
26
+ requisitionId?: string;
27
+ /** Encounter (visit) the order was placed in (e.g. "ENC-2024-0117") */
28
+ encounterId?: string;
29
+ }
30
+ interface HistoryObservation {
31
+ /** CODETYPE|FULLCODE, e.g. "LOINC|4548-4" (HbA1c) */
32
+ key: string;
33
+ label?: string;
34
+ /** Display value with units, e.g. "7.2 %" or "38 ug/dL" */
35
+ value?: string;
36
+ date: IsoDate;
37
+ }
38
+ interface HistoryProcedure {
39
+ key: string;
40
+ label?: string;
41
+ date: IsoDate;
42
+ }
43
+ interface HistoryImmunization {
44
+ /** CODETYPE|FULLCODE, e.g. "CVX|88" */
45
+ key: string;
46
+ label?: string;
47
+ date: IsoDate;
48
+ }
49
+ interface HistoryCondition {
50
+ key: string;
51
+ label?: string;
52
+ onset?: IsoDate;
53
+ }
54
+ interface HistoryAllergy {
55
+ /** Allergen key when coded (e.g. "RxNORM|7980"), else omit */
56
+ key?: string;
57
+ label: string;
58
+ reaction?: string;
59
+ severity?: 'mild' | 'moderate' | 'severe';
60
+ }
61
+ interface HistoryMedication {
62
+ key?: string;
63
+ label: string;
64
+ /** Sig / dose display, e.g. "10 mg daily" */
65
+ detail?: string;
66
+ }
67
+ interface PatientHistory {
68
+ /** Age in years */
69
+ age: number;
70
+ sex: 'M' | 'F';
71
+ /** Past + in-flight orders (completion drives the due engine) */
72
+ orders: HistoryOrder[];
73
+ observations?: HistoryObservation[];
74
+ procedures?: HistoryProcedure[];
75
+ immunizations?: HistoryImmunization[];
76
+ conditions?: HistoryCondition[];
77
+ allergies?: HistoryAllergy[];
78
+ medications?: HistoryMedication[];
79
+ }
80
+
81
+ /**
82
+ * Due-evaluation engine — the "knowledge" layer of health surveillance.
83
+ * Given a patient's history and the program metadata (programs.json from
84
+ * mieweb/codify, or a deployment's own), decides which programs/measures are
85
+ * due, overdue, pending, or satisfied. Pure functions, no I/O — the metadata
86
+ * is small, so this runs on the main thread.
87
+ */
88
+
89
+ /**
90
+ * One entry in a program's order set:
91
+ * - `"CODETYPE|FULLCODE"` — a plain required order
92
+ * - `{ alt: [a, b] }` — mutually exclusive alternatives (one-of): a
93
+ * colonoscopy OR a FIT satisfies colorectal screening
94
+ * - `{ key, after: […] }` — depends on completed prerequisites (Gantt edge):
95
+ * the RMO's fitness-for-duty determination needs the panel results first,
96
+ * and a program may carry several determinations (per panel / per SEG)
97
+ */
98
+ type ProgramOrder = string | {
99
+ key?: string;
100
+ alt?: string[];
101
+ after?: string[];
102
+ };
103
+ /** Program metadata — mirrors programs.json (see mieweb/codify). */
104
+ interface ProgramMeta {
105
+ kind?: 'surveillance' | 'fitness' | 'credential' | 'quality';
106
+ /** Omitted = one-time / event-driven (satisfied forever once done) */
107
+ periodicityMonths?: number;
108
+ ageMin?: number;
109
+ ageMax?: number;
110
+ sex?: 'M' | 'F';
111
+ /** Satisfying orders — plain keys, one-of alternatives, or dependent
112
+ * entries (see ProgramOrder) */
113
+ orders?: ProgramOrder[];
114
+ }
115
+ type ProgramsMap = Record<string, ProgramMeta>;
116
+ type DueStatus = 'due' | 'overdue' | 'pending' | 'satisfied' | 'not-applicable';
117
+ interface DueItem {
118
+ /** Program key, CODETYPE|FULLCODE (e.g. "OSHA|1910.95", "eCQM|CMS125") */
119
+ key: string;
120
+ program: ProgramMeta;
121
+ status: DueStatus;
122
+ /** Most recent completion date of any satisfying order */
123
+ lastCompleted?: string;
124
+ /** When the current/last satisfaction lapses (satisfied/overdue only) */
125
+ dueDate?: string;
126
+ /** Satisfying orders currently pending */
127
+ pendingKeys: string[];
128
+ }
129
+ /** Is the patient inside the program's age/sex gates? */
130
+ declare function isApplicable(history: Pick<PatientHistory, 'age' | 'sex'>, program: ProgramMeta): boolean;
131
+ /**
132
+ * Evaluate one program against the history.
133
+ * `now` defaults to today; injectable for tests.
134
+ */
135
+ declare function evaluateProgram(key: string, program: ProgramMeta, history: PatientHistory, now?: Date): DueItem;
136
+ /**
137
+ * Evaluate a set of programs against the history, most actionable first
138
+ * (overdue → due → pending → satisfied; not-applicable omitted unless
139
+ * `includeNotApplicable`).
140
+ *
141
+ * `enrolledKeys` restricts occupational programs to the patient's actual
142
+ * enrollments (a clerk isn't due for cadmium surveillance just because the
143
+ * program exists); quality measures apply to everyone passing their gates.
144
+ */
145
+ declare function evaluateDue(history: PatientHistory, programs: ProgramsMap, options?: {
146
+ enrolledKeys?: string[];
147
+ includeNotApplicable?: boolean;
148
+ now?: Date;
149
+ }): DueItem[];
150
+ /**
151
+ * Ordering-time prompt: is this order key part of a due/overdue program?
152
+ * Returns the matching due items so the UI can badge "due for OSHA 1910.95"
153
+ * or warn "already satisfied" while the clinician is ordering.
154
+ */
155
+ declare function dueForOrder(orderKey: string, dueItems: DueItem[]): DueItem[];
156
+
157
+ /**
158
+ * Order-row builders — flatten the order history and the due-evaluation
159
+ * output into grid-friendly rows (one row per encounter order) for the
160
+ * NITRO-backed ChartOrdersGrid / EncounterOrdersGrid.
161
+ *
162
+ * Pure functions, no I/O. Every field is a flat string so the DataVis engine
163
+ * can group/filter/aggregate on any of them (reason, provider, requisition,
164
+ * status, kind, date).
165
+ */
166
+
167
+ /** Per-order status — finer grained than the program-level DueStatus. */
168
+ type OrderRowStatus = 'completed' | 'pending' | 'available' | 'blocked';
169
+ /** One encounter order as a flat grid row. */
170
+ interface OrderRow {
171
+ /** CODETYPE|FULLCODE of the order */
172
+ orderKey: string;
173
+ /** Order display label */
174
+ order: string;
175
+ /** Reason/concern — the surveillance program or quality measure label */
176
+ reason: string;
177
+ /** Program key (CODETYPE|FULLCODE); '' when no program matches */
178
+ reasonKey: string;
179
+ /** Program kind label ('surveillance', 'quality measure', …) */
180
+ kind: string;
181
+ status: OrderRowStatus;
182
+ /** Completion date (completed) or order date (pending); '' otherwise */
183
+ date: string;
184
+ /** Program due date, when known */
185
+ dueDate: string;
186
+ /** Ordering/performing provider; '' when unknown */
187
+ provider: string;
188
+ /** Requisition the order is bundled into; '' = unprocessed */
189
+ requisitionId: string;
190
+ /** Encounter the order was placed in; '' for not-yet-placed rows */
191
+ encounterId: string;
192
+ /** Unmet prerequisite labels, comma-joined ('' when unblocked) */
193
+ blockedBy: string;
194
+ }
195
+ interface OrderRowsOptions {
196
+ /** Occupational enrollments; quality measures apply to everyone in-gate */
197
+ enrolledKeys?: string[];
198
+ /** Evaluation clock (defaults to today; inject for determinism) */
199
+ now?: Date;
200
+ /** Display labels for program keys (falls back to the key) */
201
+ programLabels?: Record<string, string>;
202
+ /** Display labels for order keys (falls back to history labels, then key) */
203
+ orderLabels?: Record<string, string>;
204
+ /** Include not-yet-placed due-list orders as available/blocked rows
205
+ * (default true) */
206
+ includeDue?: boolean;
207
+ }
208
+ /**
209
+ * Chart-wide rows: every past + in-flight order in the history, plus (by
210
+ * default) the actionable due-list orders that haven't been placed yet
211
+ * (`available`, or `blocked` while prerequisites are incomplete).
212
+ */
213
+ declare function buildChartOrderRows(history: PatientHistory, programs: ProgramsMap, options?: OrderRowsOptions): OrderRow[];
214
+ /**
215
+ * Current-encounter rows: the encounter's own orders (pending unprocessed
216
+ * ones are the mass-operation targets) plus the actionable due-list orders
217
+ * available to place this visit.
218
+ */
219
+ declare function buildEncounterOrderRows(history: PatientHistory, programs: ProgramsMap, encounterId: string, options?: OrderRowsOptions): OrderRow[];
220
+
221
+ export { type DueItem as D, type HistoryAllergy as H, type IsoDate as I, type OrderRow as O, type PatientHistory as P, type ProgramsMap as a, type DueStatus as b, type HistoryCondition as c, type HistoryImmunization as d, type HistoryMedication as e, type HistoryObservation as f, type HistoryOrder as g, type HistoryProcedure as h, type OrderRowStatus as i, type OrderRowsOptions as j, type ProgramMeta as k, buildChartOrderRows as l, buildEncounterOrderRows as m, dueForOrder as n, evaluateDue as o, evaluateProgram as p, isApplicable as q };
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Patient history — the minimal longitudinal facts the health-surveillance
3
+ * due engine needs: who the patient is (age, sex) and what has been done or
4
+ * is in flight (orders with status, observations, procedures, immunizations),
5
+ * plus problem-list context (conditions) and allergies for display/interop.
6
+ *
7
+ * All clinical entries are keyed by `CODETYPE|FULLCODE` — the same keys used
8
+ * by programs.json order sets and the codify shards — so the due engine can
9
+ * match history against a program's satisfying orders with plain string
10
+ * equality.
11
+ */
12
+ /** ISO date string (YYYY-MM-DD or full ISO timestamp). */
13
+ type IsoDate = string;
14
+ interface HistoryOrder {
15
+ /** CODETYPE|FULLCODE, e.g. "Quest Order|3058" or "HCPCS|92551" */
16
+ key: string;
17
+ /** Display label (optional; the due list falls back to the key) */
18
+ label?: string;
19
+ status: 'completed' | 'pending';
20
+ /** Completion date for completed orders; order date for pending ones */
21
+ date: IsoDate;
22
+ /** Ordering/performing provider display name (e.g. "Dr. Patel") */
23
+ provider?: string;
24
+ /** Requisition the order was bundled into — the document routing a batch
25
+ * of encounter orders to a provider/referral (e.g. "REQ-2024-0117") */
26
+ requisitionId?: string;
27
+ /** Encounter (visit) the order was placed in (e.g. "ENC-2024-0117") */
28
+ encounterId?: string;
29
+ }
30
+ interface HistoryObservation {
31
+ /** CODETYPE|FULLCODE, e.g. "LOINC|4548-4" (HbA1c) */
32
+ key: string;
33
+ label?: string;
34
+ /** Display value with units, e.g. "7.2 %" or "38 ug/dL" */
35
+ value?: string;
36
+ date: IsoDate;
37
+ }
38
+ interface HistoryProcedure {
39
+ key: string;
40
+ label?: string;
41
+ date: IsoDate;
42
+ }
43
+ interface HistoryImmunization {
44
+ /** CODETYPE|FULLCODE, e.g. "CVX|88" */
45
+ key: string;
46
+ label?: string;
47
+ date: IsoDate;
48
+ }
49
+ interface HistoryCondition {
50
+ key: string;
51
+ label?: string;
52
+ onset?: IsoDate;
53
+ }
54
+ interface HistoryAllergy {
55
+ /** Allergen key when coded (e.g. "RxNORM|7980"), else omit */
56
+ key?: string;
57
+ label: string;
58
+ reaction?: string;
59
+ severity?: 'mild' | 'moderate' | 'severe';
60
+ }
61
+ interface HistoryMedication {
62
+ key?: string;
63
+ label: string;
64
+ /** Sig / dose display, e.g. "10 mg daily" */
65
+ detail?: string;
66
+ }
67
+ interface PatientHistory {
68
+ /** Age in years */
69
+ age: number;
70
+ sex: 'M' | 'F';
71
+ /** Past + in-flight orders (completion drives the due engine) */
72
+ orders: HistoryOrder[];
73
+ observations?: HistoryObservation[];
74
+ procedures?: HistoryProcedure[];
75
+ immunizations?: HistoryImmunization[];
76
+ conditions?: HistoryCondition[];
77
+ allergies?: HistoryAllergy[];
78
+ medications?: HistoryMedication[];
79
+ }
80
+
81
+ /**
82
+ * Due-evaluation engine — the "knowledge" layer of health surveillance.
83
+ * Given a patient's history and the program metadata (programs.json from
84
+ * mieweb/codify, or a deployment's own), decides which programs/measures are
85
+ * due, overdue, pending, or satisfied. Pure functions, no I/O — the metadata
86
+ * is small, so this runs on the main thread.
87
+ */
88
+
89
+ /**
90
+ * One entry in a program's order set:
91
+ * - `"CODETYPE|FULLCODE"` — a plain required order
92
+ * - `{ alt: [a, b] }` — mutually exclusive alternatives (one-of): a
93
+ * colonoscopy OR a FIT satisfies colorectal screening
94
+ * - `{ key, after: […] }` — depends on completed prerequisites (Gantt edge):
95
+ * the RMO's fitness-for-duty determination needs the panel results first,
96
+ * and a program may carry several determinations (per panel / per SEG)
97
+ */
98
+ type ProgramOrder = string | {
99
+ key?: string;
100
+ alt?: string[];
101
+ after?: string[];
102
+ };
103
+ /** Program metadata — mirrors programs.json (see mieweb/codify). */
104
+ interface ProgramMeta {
105
+ kind?: 'surveillance' | 'fitness' | 'credential' | 'quality';
106
+ /** Omitted = one-time / event-driven (satisfied forever once done) */
107
+ periodicityMonths?: number;
108
+ ageMin?: number;
109
+ ageMax?: number;
110
+ sex?: 'M' | 'F';
111
+ /** Satisfying orders — plain keys, one-of alternatives, or dependent
112
+ * entries (see ProgramOrder) */
113
+ orders?: ProgramOrder[];
114
+ }
115
+ type ProgramsMap = Record<string, ProgramMeta>;
116
+ type DueStatus = 'due' | 'overdue' | 'pending' | 'satisfied' | 'not-applicable';
117
+ interface DueItem {
118
+ /** Program key, CODETYPE|FULLCODE (e.g. "OSHA|1910.95", "eCQM|CMS125") */
119
+ key: string;
120
+ program: ProgramMeta;
121
+ status: DueStatus;
122
+ /** Most recent completion date of any satisfying order */
123
+ lastCompleted?: string;
124
+ /** When the current/last satisfaction lapses (satisfied/overdue only) */
125
+ dueDate?: string;
126
+ /** Satisfying orders currently pending */
127
+ pendingKeys: string[];
128
+ }
129
+ /** Is the patient inside the program's age/sex gates? */
130
+ declare function isApplicable(history: Pick<PatientHistory, 'age' | 'sex'>, program: ProgramMeta): boolean;
131
+ /**
132
+ * Evaluate one program against the history.
133
+ * `now` defaults to today; injectable for tests.
134
+ */
135
+ declare function evaluateProgram(key: string, program: ProgramMeta, history: PatientHistory, now?: Date): DueItem;
136
+ /**
137
+ * Evaluate a set of programs against the history, most actionable first
138
+ * (overdue → due → pending → satisfied; not-applicable omitted unless
139
+ * `includeNotApplicable`).
140
+ *
141
+ * `enrolledKeys` restricts occupational programs to the patient's actual
142
+ * enrollments (a clerk isn't due for cadmium surveillance just because the
143
+ * program exists); quality measures apply to everyone passing their gates.
144
+ */
145
+ declare function evaluateDue(history: PatientHistory, programs: ProgramsMap, options?: {
146
+ enrolledKeys?: string[];
147
+ includeNotApplicable?: boolean;
148
+ now?: Date;
149
+ }): DueItem[];
150
+ /**
151
+ * Ordering-time prompt: is this order key part of a due/overdue program?
152
+ * Returns the matching due items so the UI can badge "due for OSHA 1910.95"
153
+ * or warn "already satisfied" while the clinician is ordering.
154
+ */
155
+ declare function dueForOrder(orderKey: string, dueItems: DueItem[]): DueItem[];
156
+
157
+ /**
158
+ * Order-row builders — flatten the order history and the due-evaluation
159
+ * output into grid-friendly rows (one row per encounter order) for the
160
+ * NITRO-backed ChartOrdersGrid / EncounterOrdersGrid.
161
+ *
162
+ * Pure functions, no I/O. Every field is a flat string so the DataVis engine
163
+ * can group/filter/aggregate on any of them (reason, provider, requisition,
164
+ * status, kind, date).
165
+ */
166
+
167
+ /** Per-order status — finer grained than the program-level DueStatus. */
168
+ type OrderRowStatus = 'completed' | 'pending' | 'available' | 'blocked';
169
+ /** One encounter order as a flat grid row. */
170
+ interface OrderRow {
171
+ /** CODETYPE|FULLCODE of the order */
172
+ orderKey: string;
173
+ /** Order display label */
174
+ order: string;
175
+ /** Reason/concern — the surveillance program or quality measure label */
176
+ reason: string;
177
+ /** Program key (CODETYPE|FULLCODE); '' when no program matches */
178
+ reasonKey: string;
179
+ /** Program kind label ('surveillance', 'quality measure', …) */
180
+ kind: string;
181
+ status: OrderRowStatus;
182
+ /** Completion date (completed) or order date (pending); '' otherwise */
183
+ date: string;
184
+ /** Program due date, when known */
185
+ dueDate: string;
186
+ /** Ordering/performing provider; '' when unknown */
187
+ provider: string;
188
+ /** Requisition the order is bundled into; '' = unprocessed */
189
+ requisitionId: string;
190
+ /** Encounter the order was placed in; '' for not-yet-placed rows */
191
+ encounterId: string;
192
+ /** Unmet prerequisite labels, comma-joined ('' when unblocked) */
193
+ blockedBy: string;
194
+ }
195
+ interface OrderRowsOptions {
196
+ /** Occupational enrollments; quality measures apply to everyone in-gate */
197
+ enrolledKeys?: string[];
198
+ /** Evaluation clock (defaults to today; inject for determinism) */
199
+ now?: Date;
200
+ /** Display labels for program keys (falls back to the key) */
201
+ programLabels?: Record<string, string>;
202
+ /** Display labels for order keys (falls back to history labels, then key) */
203
+ orderLabels?: Record<string, string>;
204
+ /** Include not-yet-placed due-list orders as available/blocked rows
205
+ * (default true) */
206
+ includeDue?: boolean;
207
+ }
208
+ /**
209
+ * Chart-wide rows: every past + in-flight order in the history, plus (by
210
+ * default) the actionable due-list orders that haven't been placed yet
211
+ * (`available`, or `blocked` while prerequisites are incomplete).
212
+ */
213
+ declare function buildChartOrderRows(history: PatientHistory, programs: ProgramsMap, options?: OrderRowsOptions): OrderRow[];
214
+ /**
215
+ * Current-encounter rows: the encounter's own orders (pending unprocessed
216
+ * ones are the mass-operation targets) plus the actionable due-list orders
217
+ * available to place this visit.
218
+ */
219
+ declare function buildEncounterOrderRows(history: PatientHistory, programs: ProgramsMap, encounterId: string, options?: OrderRowsOptions): OrderRow[];
220
+
221
+ export { type DueItem as D, type HistoryAllergy as H, type IsoDate as I, type OrderRow as O, type PatientHistory as P, type ProgramsMap as a, type DueStatus as b, type HistoryCondition as c, type HistoryImmunization as d, type HistoryMedication as e, type HistoryObservation as f, type HistoryOrder as g, type HistoryProcedure as h, type OrderRowStatus as i, type OrderRowsOptions as j, type ProgramMeta as k, buildChartOrderRows as l, buildEncounterOrderRows as m, dueForOrder as n, evaluateDue as o, evaluateProgram as p, isApplicable as q };