@mieweb/ui 0.10.0-dev.45 → 0.10.0-dev.46
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.
- package/dist/{chunk-4IS3QCOQ.cjs → chunk-2FZYZ4HT.cjs} +4 -3
- package/dist/chunk-2FZYZ4HT.cjs.map +1 -0
- package/dist/{chunk-IT775BYG.js → chunk-2W73UQ3T.js} +4 -3
- package/dist/chunk-2W73UQ3T.js.map +1 -0
- package/dist/{chunk-VEE46VTX.js → chunk-4RI3CQGE.js} +4 -4
- package/dist/{chunk-VEE46VTX.js.map → chunk-4RI3CQGE.js.map} +1 -1
- package/dist/{chunk-DHU3FFC3.cjs → chunk-ATRW3J5Z.cjs} +7 -7
- package/dist/{chunk-DHU3FFC3.cjs.map → chunk-ATRW3J5Z.cjs.map} +1 -1
- package/dist/{chunk-WFL4N5PC.js → chunk-DXFP53KF.js} +3 -3
- package/dist/{chunk-WFL4N5PC.js.map → chunk-DXFP53KF.js.map} +1 -1
- package/dist/{chunk-CVXESGXJ.js → chunk-EBKE4DLU.js} +9 -3
- package/dist/chunk-EBKE4DLU.js.map +1 -0
- package/dist/{chunk-X3RSNAMX.js → chunk-EGPDT7SM.js} +3 -3
- package/dist/{chunk-X3RSNAMX.js.map → chunk-EGPDT7SM.js.map} +1 -1
- package/dist/{chunk-XVW5DPPP.js → chunk-F7SZSOB3.js} +4 -3
- package/dist/chunk-F7SZSOB3.js.map +1 -0
- package/dist/{chunk-S4XCPDEO.cjs → chunk-FBN2VHUV.cjs} +9 -3
- package/dist/chunk-FBN2VHUV.cjs.map +1 -0
- package/dist/{chunk-F2FOG4EG.cjs → chunk-FMEA6WAY.cjs} +9 -9
- package/dist/{chunk-F2FOG4EG.cjs.map → chunk-FMEA6WAY.cjs.map} +1 -1
- package/dist/{chunk-VFFV7EMT.cjs → chunk-GYXSF6BJ.cjs} +6 -6
- package/dist/{chunk-VFFV7EMT.cjs.map → chunk-GYXSF6BJ.cjs.map} +1 -1
- package/dist/{chunk-ZSNFL736.cjs → chunk-IEZXJWHJ.cjs} +5 -5
- package/dist/{chunk-ZSNFL736.cjs.map → chunk-IEZXJWHJ.cjs.map} +1 -1
- package/dist/{chunk-TVU4KB27.cjs → chunk-KIVEYQGA.cjs} +3 -37
- package/dist/chunk-KIVEYQGA.cjs.map +1 -0
- package/dist/{chunk-LUPRGPKP.js → chunk-LAN5VWGC.js} +4 -4
- package/dist/{chunk-LUPRGPKP.js.map → chunk-LAN5VWGC.js.map} +1 -1
- package/dist/{chunk-SACHTD7B.js → chunk-LX323IMT.js} +3 -3
- package/dist/{chunk-SACHTD7B.js.map → chunk-LX323IMT.js.map} +1 -1
- package/dist/{chunk-B4CKCNWD.js → chunk-ME7EVT6F.js} +9 -3
- package/dist/chunk-ME7EVT6F.js.map +1 -0
- package/dist/{chunk-EEOGIGIA.js → chunk-OYUIEJPN.js} +15 -6
- package/dist/chunk-OYUIEJPN.js.map +1 -0
- package/dist/{chunk-C77FAR3F.cjs → chunk-PINIBEIU.cjs} +15 -6
- package/dist/chunk-PINIBEIU.cjs.map +1 -0
- package/dist/{chunk-OIMXMPH2.cjs → chunk-PWXDRFJL.cjs} +6 -6
- package/dist/{chunk-OIMXMPH2.cjs.map → chunk-PWXDRFJL.cjs.map} +1 -1
- package/dist/{chunk-LC7PVBXH.cjs → chunk-S7AMZ4RD.cjs} +9 -3
- package/dist/chunk-S7AMZ4RD.cjs.map +1 -0
- package/dist/{chunk-OSTSZDQC.js → chunk-TJ4GWQPM.js} +6 -4
- package/dist/chunk-TJ4GWQPM.js.map +1 -0
- package/dist/{chunk-DZ3JTMKM.cjs → chunk-U2RS574O.cjs} +12 -10
- package/dist/{chunk-DZ3JTMKM.cjs.map → chunk-U2RS574O.cjs.map} +1 -1
- package/dist/{chunk-W3HXHIDO.cjs → chunk-WSMBIXPU.cjs} +11 -11
- package/dist/{chunk-W3HXHIDO.cjs.map → chunk-WSMBIXPU.cjs.map} +1 -1
- package/dist/{chunk-XDIMTPZU.cjs → chunk-XPWFIDZM.cjs} +4 -3
- package/dist/chunk-XPWFIDZM.cjs.map +1 -0
- package/dist/{chunk-F3EWRDIT.js → chunk-YG7BR76Y.js} +4 -35
- package/dist/{chunk-TVU4KB27.cjs.map → chunk-YG7BR76Y.js.map} +1 -1
- package/dist/chunk-YVKBXNPK.js +41 -0
- package/dist/chunk-YVKBXNPK.js.map +1 -0
- package/dist/{chunk-24AFHH4J.js → chunk-YZCM7CXK.js} +3 -3
- package/dist/{chunk-24AFHH4J.js.map → chunk-YZCM7CXK.js.map} +1 -1
- package/dist/chunk-Z3WMDVMR.cjs +46 -0
- package/dist/chunk-Z3WMDVMR.cjs.map +1 -0
- package/dist/components/BoardView/index.cjs +5 -4
- package/dist/components/BoardView/index.js +2 -1
- package/dist/components/Dropdown/index.cjs +9 -8
- package/dist/components/Dropdown/index.d.cts +4 -3
- package/dist/components/Dropdown/index.d.ts +4 -3
- package/dist/components/Dropdown/index.js +2 -1
- package/dist/components/EmailEditor/index.cjs +14 -13
- package/dist/components/EmailEditor/index.js +5 -4
- package/dist/components/RecordHeader/index.cjs +5 -4
- package/dist/components/RecordHeader/index.js +3 -2
- package/dist/components/RecordLayout/index.cjs +5 -4
- package/dist/components/RecordLayout/index.js +3 -2
- package/dist/components/RichTextEditor/index.cjs +6 -5
- package/dist/components/RichTextEditor/index.js +3 -2
- package/dist/components/SuperChat/index.cjs +10 -9
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.js +3 -2
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +5 -4
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.js +4 -3
- package/dist/components/SuperChat/plugins/index.js.map +1 -1
- package/dist/components/Tabs/index.cjs +8 -7
- package/dist/components/Tabs/index.js +2 -1
- package/dist/components/ViewSet/index.cjs +5 -4
- package/dist/components/ViewSet/index.js +4 -3
- package/dist/components/ViewSwitcher/index.cjs +4 -3
- package/dist/components/ViewSwitcher/index.js +2 -1
- package/dist/deck.cjs +12 -3
- package/dist/deck.cjs.map +1 -1
- package/dist/deck.js +12 -3
- package/dist/deck.js.map +1 -1
- package/dist/esheet.cjs +5 -4
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +2 -1
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +36 -31
- package/dist/hooks/index.d.cts +13 -1
- package/dist/hooks/index.d.ts +13 -1
- package/dist/hooks/index.js +2 -1
- package/dist/index.cjs +214 -211
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +19 -5
- package/dist/index.d.ts +19 -5
- package/dist/index.js +29 -29
- package/dist/index.js.map +1 -1
- package/dist/org-chart.cjs +2 -1
- package/dist/org-chart.cjs.map +1 -1
- package/dist/org-chart.js +2 -1
- package/dist/org-chart.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-4IS3QCOQ.cjs.map +0 -1
- package/dist/chunk-B4CKCNWD.js.map +0 -1
- package/dist/chunk-C77FAR3F.cjs.map +0 -1
- package/dist/chunk-CVXESGXJ.js.map +0 -1
- package/dist/chunk-EEOGIGIA.js.map +0 -1
- package/dist/chunk-F3EWRDIT.js.map +0 -1
- package/dist/chunk-IT775BYG.js.map +0 -1
- package/dist/chunk-LC7PVBXH.cjs.map +0 -1
- package/dist/chunk-OSTSZDQC.js.map +0 -1
- package/dist/chunk-S4XCPDEO.cjs.map +0 -1
- package/dist/chunk-XDIMTPZU.cjs.map +0 -1
- package/dist/chunk-XVW5DPPP.js.map +0 -1
package/dist/esheet.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkFBN2VHUV_cjs = require('./chunk-FBN2VHUV.cjs');
|
|
4
4
|
require('./chunk-JSXIB6EJ.cjs');
|
|
5
5
|
require('./chunk-G7EQ3JPX.cjs');
|
|
6
6
|
require('./chunk-AIJAFPGJ.cjs');
|
|
@@ -21,6 +21,7 @@ require('./chunk-CW75IKA6.cjs');
|
|
|
21
21
|
require('./chunk-SCV7C55E.cjs');
|
|
22
22
|
require('./chunk-L7L5S2HO.cjs');
|
|
23
23
|
require('./chunk-YW2AKBLS.cjs');
|
|
24
|
+
require('./chunk-Z3WMDVMR.cjs');
|
|
24
25
|
require('./chunk-7E46YDOT.cjs');
|
|
25
26
|
require('./chunk-EACNRR3C.cjs');
|
|
26
27
|
require('./chunk-ANMX7YDL.cjs');
|
|
@@ -83,7 +84,7 @@ function MedicationListField({
|
|
|
83
84
|
return definition.medications ?? [];
|
|
84
85
|
}, [response?.answer, definition.medications]);
|
|
85
86
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
86
|
-
|
|
87
|
+
chunkFBN2VHUV_cjs.MedicationReconciliation,
|
|
87
88
|
{
|
|
88
89
|
medications,
|
|
89
90
|
onChange: (next) => onResponse({ answer: JSON.stringify({ medications: next }) }),
|
|
@@ -140,7 +141,7 @@ function AllergyListField({
|
|
|
140
141
|
codeLookup
|
|
141
142
|
}) {
|
|
142
143
|
const definition = field.definition;
|
|
143
|
-
const ambientCodeLookup =
|
|
144
|
+
const ambientCodeLookup = chunkFBN2VHUV_cjs.useCodeLookupConfig();
|
|
144
145
|
const effectiveCodeLookup = codeLookup === false ? void 0 : codeLookup ?? ambientCodeLookup ?? void 0;
|
|
145
146
|
const value = React__namespace.useMemo(() => {
|
|
146
147
|
if (response?.answer) return parseValue2(response.answer);
|
|
@@ -150,7 +151,7 @@ function AllergyListField({
|
|
|
150
151
|
onResponse({ answer: JSON.stringify(next) });
|
|
151
152
|
};
|
|
152
153
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
153
|
-
|
|
154
|
+
chunkFBN2VHUV_cjs.AllergyManager,
|
|
154
155
|
{
|
|
155
156
|
allergies: value.allergies,
|
|
156
157
|
onChange: (allergies) => commit({
|
package/dist/esheet.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/esheet-fields/MedicationListField.tsx","../src/esheet-fields/AllergyListField.tsx","../src/esheet-fields/registerAll.ts"],"names":["React","jsx","MedicationReconciliation","registerCustomFieldTypes","parseValue","useCodeLookupConfig","React2","AllergyManager"],"mappings":"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","file":"esheet.cjs","sourcesContent":["/**\n * MedicationListField — eSheet custom field wrapper around\n * MedicationReconciliation.\n *\n * Thin adapter: all reconciliation UI/behavior lives in the standalone\n * `MedicationReconciliation` component (main bundle). This file only maps the\n * eSheet field contract (definition, response, preview/enabled state) onto it.\n *\n * Exposed via the `@mieweb/ui/esheet` entry point (NOT the main bundle) so\n * that @esheet/* stays an optional dependency.\n *\n * The field stores its state as JSON in `response.answer`:\n * `{ medications: Medication[] }`.\n *\n * @example\n * ```tsx\n * import { registerMedicationListFieldType } from '@mieweb/ui/esheet';\n *\n * registerMedicationListFieldType(); // before rendering EsheetBuilder/Renderer\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport {\n MedicationReconciliation,\n type CodeLookupConfig,\n type Medication,\n} from '../components/MedicationList';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface MedicationListFieldValue {\n medications: Medication[];\n}\n\nfunction parseValue(answer: string | undefined): MedicationListFieldValue {\n if (!answer) return { medications: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { medications: [] };\n }\n const { medications } = parsed as { medications?: unknown };\n return {\n medications: Array.isArray(medications)\n ? (medications as Medication[])\n : [],\n };\n } catch {\n return { medications: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function MedicationListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerMedicationListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n medications?: Medication[];\n quickAddOptions?: string[];\n };\n\n // Response wins; otherwise seed from the field definition's medication list.\n const medications = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer).medications;\n return definition.medications ?? [];\n }, [response?.answer, definition.medications]);\n\n return (\n <MedicationReconciliation\n medications={medications}\n onChange={(next) =>\n onResponse({ answer: JSON.stringify({ medications: next }) })\n }\n title={definition.question ?? 'Presenting medications'}\n quickAddOptions={definition.quickAddOptions}\n codeLookup={codeLookup}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `medicationList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n *\n * @param options.codeLookup — wire the offline RxNorm/FDB CodeLookup into the\n * medication editor (Correct / Add Medication):\n * ```tsx\n * import { CodeLookup } from '…/CodeLookup';\n * registerMedicationListFieldType({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\nexport function registerMedicationListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <MedicationListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n medicationList: {\n label: 'Medication Reconciliation',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Presenting medications',\n quickAddOptions: [\n 'aspirin 81 mg tablet',\n 'atorvastatin 20 mg tablet',\n 'metformin 500 mg tablet',\n ],\n },\n component: Field,\n },\n });\n}\n","/**\n * AllergyListField — eSheet custom field wrapper around AllergyManager.\n *\n * Thin adapter, same pattern as MedicationListField. State persists as JSON\n * in `response.answer`: `{ allergies: Allergy[], noKnownAllergies?: boolean }`.\n *\n * @example\n * ```tsx\n * import { registerAllergyListFieldType } from '@mieweb/ui/esheet';\n *\n * registerAllergyListFieldType({ codeLookup: { component: CodeLookup, indexUrl: '/codify' } });\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport { AllergyManager, type Allergy } from '../components/AllergyList';\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { useCodeLookupConfig } from '../components/CodeLookup/context';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface AllergyListFieldValue {\n allergies: Allergy[];\n noKnownAllergies?: boolean;\n}\n\nfunction parseValue(answer: string | undefined): AllergyListFieldValue {\n if (!answer) return { allergies: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { allergies: [] };\n }\n const { allergies, noKnownAllergies } = parsed as Partial<\n Record<keyof AllergyListFieldValue, unknown>\n >;\n return {\n allergies: Array.isArray(allergies) ? (allergies as Allergy[]) : [],\n noKnownAllergies:\n typeof noKnownAllergies === 'boolean' ? noKnownAllergies : undefined,\n };\n } catch {\n return { allergies: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function AllergyListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerAllergyListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n allergies?: Allergy[];\n };\n\n // Default to the ambient provider; `false` forces plain text.\n const ambientCodeLookup = useCodeLookupConfig();\n const effectiveCodeLookup =\n codeLookup === false\n ? undefined\n : (codeLookup ?? ambientCodeLookup ?? undefined);\n\n const value = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer);\n return { allergies: definition.allergies ?? [] };\n }, [response?.answer, definition.allergies]);\n\n const commit = (next: AllergyListFieldValue) => {\n onResponse({ answer: JSON.stringify(next) });\n };\n\n return (\n <AllergyManager\n allergies={value.allergies}\n onChange={(allergies) =>\n commit({\n allergies,\n // any recorded allergy clears NKA\n noKnownAllergies:\n allergies.length > 0 ? undefined : value.noKnownAllergies,\n })\n }\n noKnownAllergies={value.noKnownAllergies}\n onNoKnownAllergiesChange={(nka) =>\n commit({ allergies: value.allergies, noKnownAllergies: nka })\n }\n title={definition.question ?? 'Allergies'}\n codeLookup={codeLookup}\n inlineAddSearch={Boolean(effectiveCodeLookup)}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `allergyList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerAllergyListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <AllergyListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n allergyList: {\n label: 'Allergy List',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Allergies',\n },\n component: Field,\n },\n });\n}\n","/**\n * registerMieEsheetFields — one-call registration for every @mieweb/ui custom\n * eSheet field type (medication reconciliation + allergy list).\n *\n * The @esheet/* packages stay generic and free of medical dependencies; these\n * fields live in @mieweb/ui and opt in from the consumer side. This helper is\n * the \"batteries included\" entry point so an app can enable the full medical\n * field set with a single call instead of wiring each field type by hand.\n *\n * @example\n * ```tsx\n * import { registerMieEsheetFields } from '@mieweb/ui/esheet';\n * import { CodeLookup } from '…/CodeLookup';\n *\n * // once, before EsheetBuilder / EsheetRenderer mount\n * registerMieEsheetFields({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\n\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { registerMedicationListFieldType } from './MedicationListField';\nimport { registerAllergyListFieldType } from './AllergyListField';\n\nexport interface RegisterMieEsheetFieldsOptions {\n /**\n * Shared CodeLookup wiring applied to every field that supports offline\n * RxNorm/FDB coding (medication + allergy editors).\n */\n codeLookup?: CodeLookupConfig;\n}\n\n/**\n * Register all @mieweb/ui custom eSheet field types at once:\n * `medicationList` and `allergyList`.\n *\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerMieEsheetFields(\n options?: RegisterMieEsheetFieldsOptions\n): void {\n registerMedicationListFieldType({ codeLookup: options?.codeLookup });\n registerAllergyListFieldType({ codeLookup: options?.codeLookup });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/esheet-fields/MedicationListField.tsx","../src/esheet-fields/AllergyListField.tsx","../src/esheet-fields/registerAll.ts"],"names":["React","jsx","MedicationReconciliation","registerCustomFieldTypes","parseValue","useCodeLookupConfig","React2","AllergyManager"],"mappings":"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","file":"esheet.cjs","sourcesContent":["/**\n * MedicationListField — eSheet custom field wrapper around\n * MedicationReconciliation.\n *\n * Thin adapter: all reconciliation UI/behavior lives in the standalone\n * `MedicationReconciliation` component (main bundle). This file only maps the\n * eSheet field contract (definition, response, preview/enabled state) onto it.\n *\n * Exposed via the `@mieweb/ui/esheet` entry point (NOT the main bundle) so\n * that @esheet/* stays an optional dependency.\n *\n * The field stores its state as JSON in `response.answer`:\n * `{ medications: Medication[] }`.\n *\n * @example\n * ```tsx\n * import { registerMedicationListFieldType } from '@mieweb/ui/esheet';\n *\n * registerMedicationListFieldType(); // before rendering EsheetBuilder/Renderer\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport {\n MedicationReconciliation,\n type CodeLookupConfig,\n type Medication,\n} from '../components/MedicationList';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface MedicationListFieldValue {\n medications: Medication[];\n}\n\nfunction parseValue(answer: string | undefined): MedicationListFieldValue {\n if (!answer) return { medications: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { medications: [] };\n }\n const { medications } = parsed as { medications?: unknown };\n return {\n medications: Array.isArray(medications)\n ? (medications as Medication[])\n : [],\n };\n } catch {\n return { medications: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function MedicationListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerMedicationListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n medications?: Medication[];\n quickAddOptions?: string[];\n };\n\n // Response wins; otherwise seed from the field definition's medication list.\n const medications = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer).medications;\n return definition.medications ?? [];\n }, [response?.answer, definition.medications]);\n\n return (\n <MedicationReconciliation\n medications={medications}\n onChange={(next) =>\n onResponse({ answer: JSON.stringify({ medications: next }) })\n }\n title={definition.question ?? 'Presenting medications'}\n quickAddOptions={definition.quickAddOptions}\n codeLookup={codeLookup}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `medicationList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n *\n * @param options.codeLookup — wire the offline RxNorm/FDB CodeLookup into the\n * medication editor (Correct / Add Medication):\n * ```tsx\n * import { CodeLookup } from '…/CodeLookup';\n * registerMedicationListFieldType({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\nexport function registerMedicationListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <MedicationListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n medicationList: {\n label: 'Medication Reconciliation',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Presenting medications',\n quickAddOptions: [\n 'aspirin 81 mg tablet',\n 'atorvastatin 20 mg tablet',\n 'metformin 500 mg tablet',\n ],\n },\n component: Field,\n },\n });\n}\n","/**\n * AllergyListField — eSheet custom field wrapper around AllergyManager.\n *\n * Thin adapter, same pattern as MedicationListField. State persists as JSON\n * in `response.answer`: `{ allergies: Allergy[], noKnownAllergies?: boolean }`.\n *\n * @example\n * ```tsx\n * import { registerAllergyListFieldType } from '@mieweb/ui/esheet';\n *\n * registerAllergyListFieldType({ codeLookup: { component: CodeLookup, indexUrl: '/codify' } });\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport { AllergyManager, type Allergy } from '../components/AllergyList';\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { useCodeLookupConfig } from '../components/CodeLookup/context';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface AllergyListFieldValue {\n allergies: Allergy[];\n noKnownAllergies?: boolean;\n}\n\nfunction parseValue(answer: string | undefined): AllergyListFieldValue {\n if (!answer) return { allergies: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { allergies: [] };\n }\n const { allergies, noKnownAllergies } = parsed as Partial<\n Record<keyof AllergyListFieldValue, unknown>\n >;\n return {\n allergies: Array.isArray(allergies) ? (allergies as Allergy[]) : [],\n noKnownAllergies:\n typeof noKnownAllergies === 'boolean' ? noKnownAllergies : undefined,\n };\n } catch {\n return { allergies: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function AllergyListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerAllergyListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n allergies?: Allergy[];\n };\n\n // Default to the ambient provider; `false` forces plain text.\n const ambientCodeLookup = useCodeLookupConfig();\n const effectiveCodeLookup =\n codeLookup === false\n ? undefined\n : (codeLookup ?? ambientCodeLookup ?? undefined);\n\n const value = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer);\n return { allergies: definition.allergies ?? [] };\n }, [response?.answer, definition.allergies]);\n\n const commit = (next: AllergyListFieldValue) => {\n onResponse({ answer: JSON.stringify(next) });\n };\n\n return (\n <AllergyManager\n allergies={value.allergies}\n onChange={(allergies) =>\n commit({\n allergies,\n // any recorded allergy clears NKA\n noKnownAllergies:\n allergies.length > 0 ? undefined : value.noKnownAllergies,\n })\n }\n noKnownAllergies={value.noKnownAllergies}\n onNoKnownAllergiesChange={(nka) =>\n commit({ allergies: value.allergies, noKnownAllergies: nka })\n }\n title={definition.question ?? 'Allergies'}\n codeLookup={codeLookup}\n inlineAddSearch={Boolean(effectiveCodeLookup)}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `allergyList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerAllergyListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <AllergyListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n allergyList: {\n label: 'Allergy List',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Allergies',\n },\n component: Field,\n },\n });\n}\n","/**\n * registerMieEsheetFields — one-call registration for every @mieweb/ui custom\n * eSheet field type (medication reconciliation + allergy list).\n *\n * The @esheet/* packages stay generic and free of medical dependencies; these\n * fields live in @mieweb/ui and opt in from the consumer side. This helper is\n * the \"batteries included\" entry point so an app can enable the full medical\n * field set with a single call instead of wiring each field type by hand.\n *\n * @example\n * ```tsx\n * import { registerMieEsheetFields } from '@mieweb/ui/esheet';\n * import { CodeLookup } from '…/CodeLookup';\n *\n * // once, before EsheetBuilder / EsheetRenderer mount\n * registerMieEsheetFields({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\n\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { registerMedicationListFieldType } from './MedicationListField';\nimport { registerAllergyListFieldType } from './AllergyListField';\n\nexport interface RegisterMieEsheetFieldsOptions {\n /**\n * Shared CodeLookup wiring applied to every field that supports offline\n * RxNorm/FDB coding (medication + allergy editors).\n */\n codeLookup?: CodeLookupConfig;\n}\n\n/**\n * Register all @mieweb/ui custom eSheet field types at once:\n * `medicationList` and `allergyList`.\n *\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerMieEsheetFields(\n options?: RegisterMieEsheetFieldsOptions\n): void {\n registerMedicationListFieldType({ codeLookup: options?.codeLookup });\n registerAllergyListFieldType({ codeLookup: options?.codeLookup });\n}\n"]}
|
package/dist/esheet.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MedicationReconciliation, useCodeLookupConfig, AllergyManager } from './chunk-
|
|
1
|
+
import { MedicationReconciliation, useCodeLookupConfig, AllergyManager } from './chunk-EBKE4DLU.js';
|
|
2
2
|
import './chunk-7X6R3JIA.js';
|
|
3
3
|
import './chunk-EPSB4WTL.js';
|
|
4
4
|
import './chunk-I3WGZPI6.js';
|
|
@@ -19,6 +19,7 @@ import './chunk-RC2YMOMS.js';
|
|
|
19
19
|
import './chunk-VSQF22GL.js';
|
|
20
20
|
import './chunk-BKSPDTX4.js';
|
|
21
21
|
import './chunk-XDU65GLW.js';
|
|
22
|
+
import './chunk-YVKBXNPK.js';
|
|
22
23
|
import './chunk-522WJIVI.js';
|
|
23
24
|
import './chunk-N5JDL4VE.js';
|
|
24
25
|
import './chunk-WFBUBT54.js';
|
package/dist/esheet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/esheet-fields/MedicationListField.tsx","../src/esheet-fields/AllergyListField.tsx","../src/esheet-fields/registerAll.ts"],"names":["parseValue","React2","jsx","registerCustomFieldTypes"],"mappings":"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","file":"esheet.js","sourcesContent":["/**\n * MedicationListField — eSheet custom field wrapper around\n * MedicationReconciliation.\n *\n * Thin adapter: all reconciliation UI/behavior lives in the standalone\n * `MedicationReconciliation` component (main bundle). This file only maps the\n * eSheet field contract (definition, response, preview/enabled state) onto it.\n *\n * Exposed via the `@mieweb/ui/esheet` entry point (NOT the main bundle) so\n * that @esheet/* stays an optional dependency.\n *\n * The field stores its state as JSON in `response.answer`:\n * `{ medications: Medication[] }`.\n *\n * @example\n * ```tsx\n * import { registerMedicationListFieldType } from '@mieweb/ui/esheet';\n *\n * registerMedicationListFieldType(); // before rendering EsheetBuilder/Renderer\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport {\n MedicationReconciliation,\n type CodeLookupConfig,\n type Medication,\n} from '../components/MedicationList';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface MedicationListFieldValue {\n medications: Medication[];\n}\n\nfunction parseValue(answer: string | undefined): MedicationListFieldValue {\n if (!answer) return { medications: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { medications: [] };\n }\n const { medications } = parsed as { medications?: unknown };\n return {\n medications: Array.isArray(medications)\n ? (medications as Medication[])\n : [],\n };\n } catch {\n return { medications: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function MedicationListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerMedicationListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n medications?: Medication[];\n quickAddOptions?: string[];\n };\n\n // Response wins; otherwise seed from the field definition's medication list.\n const medications = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer).medications;\n return definition.medications ?? [];\n }, [response?.answer, definition.medications]);\n\n return (\n <MedicationReconciliation\n medications={medications}\n onChange={(next) =>\n onResponse({ answer: JSON.stringify({ medications: next }) })\n }\n title={definition.question ?? 'Presenting medications'}\n quickAddOptions={definition.quickAddOptions}\n codeLookup={codeLookup}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `medicationList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n *\n * @param options.codeLookup — wire the offline RxNorm/FDB CodeLookup into the\n * medication editor (Correct / Add Medication):\n * ```tsx\n * import { CodeLookup } from '…/CodeLookup';\n * registerMedicationListFieldType({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\nexport function registerMedicationListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <MedicationListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n medicationList: {\n label: 'Medication Reconciliation',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Presenting medications',\n quickAddOptions: [\n 'aspirin 81 mg tablet',\n 'atorvastatin 20 mg tablet',\n 'metformin 500 mg tablet',\n ],\n },\n component: Field,\n },\n });\n}\n","/**\n * AllergyListField — eSheet custom field wrapper around AllergyManager.\n *\n * Thin adapter, same pattern as MedicationListField. State persists as JSON\n * in `response.answer`: `{ allergies: Allergy[], noKnownAllergies?: boolean }`.\n *\n * @example\n * ```tsx\n * import { registerAllergyListFieldType } from '@mieweb/ui/esheet';\n *\n * registerAllergyListFieldType({ codeLookup: { component: CodeLookup, indexUrl: '/codify' } });\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport { AllergyManager, type Allergy } from '../components/AllergyList';\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { useCodeLookupConfig } from '../components/CodeLookup/context';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface AllergyListFieldValue {\n allergies: Allergy[];\n noKnownAllergies?: boolean;\n}\n\nfunction parseValue(answer: string | undefined): AllergyListFieldValue {\n if (!answer) return { allergies: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { allergies: [] };\n }\n const { allergies, noKnownAllergies } = parsed as Partial<\n Record<keyof AllergyListFieldValue, unknown>\n >;\n return {\n allergies: Array.isArray(allergies) ? (allergies as Allergy[]) : [],\n noKnownAllergies:\n typeof noKnownAllergies === 'boolean' ? noKnownAllergies : undefined,\n };\n } catch {\n return { allergies: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function AllergyListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerAllergyListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n allergies?: Allergy[];\n };\n\n // Default to the ambient provider; `false` forces plain text.\n const ambientCodeLookup = useCodeLookupConfig();\n const effectiveCodeLookup =\n codeLookup === false\n ? undefined\n : (codeLookup ?? ambientCodeLookup ?? undefined);\n\n const value = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer);\n return { allergies: definition.allergies ?? [] };\n }, [response?.answer, definition.allergies]);\n\n const commit = (next: AllergyListFieldValue) => {\n onResponse({ answer: JSON.stringify(next) });\n };\n\n return (\n <AllergyManager\n allergies={value.allergies}\n onChange={(allergies) =>\n commit({\n allergies,\n // any recorded allergy clears NKA\n noKnownAllergies:\n allergies.length > 0 ? undefined : value.noKnownAllergies,\n })\n }\n noKnownAllergies={value.noKnownAllergies}\n onNoKnownAllergiesChange={(nka) =>\n commit({ allergies: value.allergies, noKnownAllergies: nka })\n }\n title={definition.question ?? 'Allergies'}\n codeLookup={codeLookup}\n inlineAddSearch={Boolean(effectiveCodeLookup)}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `allergyList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerAllergyListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <AllergyListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n allergyList: {\n label: 'Allergy List',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Allergies',\n },\n component: Field,\n },\n });\n}\n","/**\n * registerMieEsheetFields — one-call registration for every @mieweb/ui custom\n * eSheet field type (medication reconciliation + allergy list).\n *\n * The @esheet/* packages stay generic and free of medical dependencies; these\n * fields live in @mieweb/ui and opt in from the consumer side. This helper is\n * the \"batteries included\" entry point so an app can enable the full medical\n * field set with a single call instead of wiring each field type by hand.\n *\n * @example\n * ```tsx\n * import { registerMieEsheetFields } from '@mieweb/ui/esheet';\n * import { CodeLookup } from '…/CodeLookup';\n *\n * // once, before EsheetBuilder / EsheetRenderer mount\n * registerMieEsheetFields({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\n\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { registerMedicationListFieldType } from './MedicationListField';\nimport { registerAllergyListFieldType } from './AllergyListField';\n\nexport interface RegisterMieEsheetFieldsOptions {\n /**\n * Shared CodeLookup wiring applied to every field that supports offline\n * RxNorm/FDB coding (medication + allergy editors).\n */\n codeLookup?: CodeLookupConfig;\n}\n\n/**\n * Register all @mieweb/ui custom eSheet field types at once:\n * `medicationList` and `allergyList`.\n *\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerMieEsheetFields(\n options?: RegisterMieEsheetFieldsOptions\n): void {\n registerMedicationListFieldType({ codeLookup: options?.codeLookup });\n registerAllergyListFieldType({ codeLookup: options?.codeLookup });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/esheet-fields/MedicationListField.tsx","../src/esheet-fields/AllergyListField.tsx","../src/esheet-fields/registerAll.ts"],"names":["parseValue","React2","jsx","registerCustomFieldTypes"],"mappings":"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","file":"esheet.js","sourcesContent":["/**\n * MedicationListField — eSheet custom field wrapper around\n * MedicationReconciliation.\n *\n * Thin adapter: all reconciliation UI/behavior lives in the standalone\n * `MedicationReconciliation` component (main bundle). This file only maps the\n * eSheet field contract (definition, response, preview/enabled state) onto it.\n *\n * Exposed via the `@mieweb/ui/esheet` entry point (NOT the main bundle) so\n * that @esheet/* stays an optional dependency.\n *\n * The field stores its state as JSON in `response.answer`:\n * `{ medications: Medication[] }`.\n *\n * @example\n * ```tsx\n * import { registerMedicationListFieldType } from '@mieweb/ui/esheet';\n *\n * registerMedicationListFieldType(); // before rendering EsheetBuilder/Renderer\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport {\n MedicationReconciliation,\n type CodeLookupConfig,\n type Medication,\n} from '../components/MedicationList';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface MedicationListFieldValue {\n medications: Medication[];\n}\n\nfunction parseValue(answer: string | undefined): MedicationListFieldValue {\n if (!answer) return { medications: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { medications: [] };\n }\n const { medications } = parsed as { medications?: unknown };\n return {\n medications: Array.isArray(medications)\n ? (medications as Medication[])\n : [],\n };\n } catch {\n return { medications: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function MedicationListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerMedicationListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n medications?: Medication[];\n quickAddOptions?: string[];\n };\n\n // Response wins; otherwise seed from the field definition's medication list.\n const medications = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer).medications;\n return definition.medications ?? [];\n }, [response?.answer, definition.medications]);\n\n return (\n <MedicationReconciliation\n medications={medications}\n onChange={(next) =>\n onResponse({ answer: JSON.stringify({ medications: next }) })\n }\n title={definition.question ?? 'Presenting medications'}\n quickAddOptions={definition.quickAddOptions}\n codeLookup={codeLookup}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `medicationList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n *\n * @param options.codeLookup — wire the offline RxNorm/FDB CodeLookup into the\n * medication editor (Correct / Add Medication):\n * ```tsx\n * import { CodeLookup } from '…/CodeLookup';\n * registerMedicationListFieldType({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\nexport function registerMedicationListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <MedicationListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n medicationList: {\n label: 'Medication Reconciliation',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Presenting medications',\n quickAddOptions: [\n 'aspirin 81 mg tablet',\n 'atorvastatin 20 mg tablet',\n 'metformin 500 mg tablet',\n ],\n },\n component: Field,\n },\n });\n}\n","/**\n * AllergyListField — eSheet custom field wrapper around AllergyManager.\n *\n * Thin adapter, same pattern as MedicationListField. State persists as JSON\n * in `response.answer`: `{ allergies: Allergy[], noKnownAllergies?: boolean }`.\n *\n * @example\n * ```tsx\n * import { registerAllergyListFieldType } from '@mieweb/ui/esheet';\n *\n * registerAllergyListFieldType({ codeLookup: { component: CodeLookup, indexUrl: '/codify' } });\n * ```\n */\n\nimport * as React from 'react';\nimport type { FieldComponentProps } from '@esheet/core';\nimport { registerCustomFieldTypes } from '@esheet/fields';\nimport { AllergyManager, type Allergy } from '../components/AllergyList';\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { useCodeLookupConfig } from '../components/CodeLookup/context';\n\n// =============================================================================\n// Response (de)serialization\n// =============================================================================\n\nexport interface AllergyListFieldValue {\n allergies: Allergy[];\n noKnownAllergies?: boolean;\n}\n\nfunction parseValue(answer: string | undefined): AllergyListFieldValue {\n if (!answer) return { allergies: [] };\n try {\n // shape-guarded: valid JSON like `null` or `[]` must degrade safely\n const parsed: unknown = JSON.parse(answer);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { allergies: [] };\n }\n const { allergies, noKnownAllergies } = parsed as Partial<\n Record<keyof AllergyListFieldValue, unknown>\n >;\n return {\n allergies: Array.isArray(allergies) ? (allergies as Allergy[]) : [],\n noKnownAllergies:\n typeof noKnownAllergies === 'boolean' ? noKnownAllergies : undefined,\n };\n } catch {\n return { allergies: [] };\n }\n}\n\n// =============================================================================\n// Field component\n// =============================================================================\n\nexport function AllergyListField({\n field,\n response,\n isPreview,\n isEnabled,\n onResponse,\n codeLookup,\n}: FieldComponentProps & {\n /** CodeLookup wiring — supplied via registerAllergyListFieldType() */\n codeLookup?: CodeLookupConfig | false;\n}): React.JSX.Element {\n const definition = field.definition as {\n question?: string;\n allergies?: Allergy[];\n };\n\n // Default to the ambient provider; `false` forces plain text.\n const ambientCodeLookup = useCodeLookupConfig();\n const effectiveCodeLookup =\n codeLookup === false\n ? undefined\n : (codeLookup ?? ambientCodeLookup ?? undefined);\n\n const value = React.useMemo(() => {\n if (response?.answer) return parseValue(response.answer);\n return { allergies: definition.allergies ?? [] };\n }, [response?.answer, definition.allergies]);\n\n const commit = (next: AllergyListFieldValue) => {\n onResponse({ answer: JSON.stringify(next) });\n };\n\n return (\n <AllergyManager\n allergies={value.allergies}\n onChange={(allergies) =>\n commit({\n allergies,\n // any recorded allergy clears NKA\n noKnownAllergies:\n allergies.length > 0 ? undefined : value.noKnownAllergies,\n })\n }\n noKnownAllergies={value.noKnownAllergies}\n onNoKnownAllergiesChange={(nka) =>\n commit({ allergies: value.allergies, noKnownAllergies: nka })\n }\n title={definition.question ?? 'Allergies'}\n codeLookup={codeLookup}\n inlineAddSearch={Boolean(effectiveCodeLookup)}\n readOnly={!(isPreview && isEnabled)}\n />\n );\n}\n\n// =============================================================================\n// Registration\n// =============================================================================\n\n/**\n * Register the `allergyList` field type with eSheet.\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerAllergyListFieldType(options?: {\n codeLookup?: CodeLookupConfig | false;\n}): void {\n const Field = (props: FieldComponentProps) => (\n <AllergyListField {...props} codeLookup={options?.codeLookup} />\n );\n registerCustomFieldTypes({\n allergyList: {\n label: 'Allergy List',\n category: 'rich',\n answerType: 'text',\n hasOptions: false,\n hasMatrix: false,\n defaultProps: {\n question: 'Allergies',\n },\n component: Field,\n },\n });\n}\n","/**\n * registerMieEsheetFields — one-call registration for every @mieweb/ui custom\n * eSheet field type (medication reconciliation + allergy list).\n *\n * The @esheet/* packages stay generic and free of medical dependencies; these\n * fields live in @mieweb/ui and opt in from the consumer side. This helper is\n * the \"batteries included\" entry point so an app can enable the full medical\n * field set with a single call instead of wiring each field type by hand.\n *\n * @example\n * ```tsx\n * import { registerMieEsheetFields } from '@mieweb/ui/esheet';\n * import { CodeLookup } from '…/CodeLookup';\n *\n * // once, before EsheetBuilder / EsheetRenderer mount\n * registerMieEsheetFields({\n * codeLookup: { component: CodeLookup, indexUrl: '/codify' },\n * });\n * ```\n */\n\nimport type { CodeLookupConfig } from '../components/MedicationList';\nimport { registerMedicationListFieldType } from './MedicationListField';\nimport { registerAllergyListFieldType } from './AllergyListField';\n\nexport interface RegisterMieEsheetFieldsOptions {\n /**\n * Shared CodeLookup wiring applied to every field that supports offline\n * RxNorm/FDB coding (medication + allergy editors).\n */\n codeLookup?: CodeLookupConfig;\n}\n\n/**\n * Register all @mieweb/ui custom eSheet field types at once:\n * `medicationList` and `allergyList`.\n *\n * Call once before rendering EsheetBuilder or EsheetRenderer.\n */\nexport function registerMieEsheetFields(\n options?: RegisterMieEsheetFieldsOptions\n): void {\n registerMedicationListFieldType({ codeLookup: options?.codeLookup });\n registerAllergyListFieldType({ codeLookup: options?.codeLookup });\n}\n"]}
|
package/dist/hooks/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkKIVEYQGA_cjs = require('../chunk-KIVEYQGA.cjs');
|
|
4
4
|
var chunkIXFC7LK2_cjs = require('../chunk-IXFC7LK2.cjs');
|
|
5
5
|
var chunk2O7D6F67_cjs = require('../chunk-2O7D6F67.cjs');
|
|
6
6
|
var chunkVPTASZ2O_cjs = require('../chunk-VPTASZ2O.cjs');
|
|
@@ -17,6 +17,7 @@ var chunkFSGEDDF2_cjs = require('../chunk-FSGEDDF2.cjs');
|
|
|
17
17
|
var chunkAOHJILLU_cjs = require('../chunk-AOHJILLU.cjs');
|
|
18
18
|
require('../chunk-SCV7C55E.cjs');
|
|
19
19
|
var chunkYW2AKBLS_cjs = require('../chunk-YW2AKBLS.cjs');
|
|
20
|
+
var chunkZ3WMDVMR_cjs = require('../chunk-Z3WMDVMR.cjs');
|
|
20
21
|
var chunkNMBYU7D7_cjs = require('../chunk-NMBYU7D7.cjs');
|
|
21
22
|
require('../chunk-EUAMEVVI.cjs');
|
|
22
23
|
|
|
@@ -24,87 +25,75 @@ require('../chunk-EUAMEVVI.cjs');
|
|
|
24
25
|
|
|
25
26
|
Object.defineProperty(exports, "KEYBOARD_INSET_VAR", {
|
|
26
27
|
enumerable: true,
|
|
27
|
-
get: function () { return
|
|
28
|
+
get: function () { return chunkKIVEYQGA_cjs.KEYBOARD_INSET_VAR; }
|
|
28
29
|
});
|
|
29
30
|
Object.defineProperty(exports, "KEYBOARD_OPEN_ATTRIBUTE", {
|
|
30
31
|
enumerable: true,
|
|
31
|
-
get: function () { return
|
|
32
|
+
get: function () { return chunkKIVEYQGA_cjs.KEYBOARD_OPEN_ATTRIBUTE; }
|
|
32
33
|
});
|
|
33
34
|
Object.defineProperty(exports, "KEYBOARD_SOURCE_ATTRIBUTE", {
|
|
34
35
|
enumerable: true,
|
|
35
|
-
get: function () { return
|
|
36
|
-
});
|
|
37
|
-
Object.defineProperty(exports, "RTL_LOCALES", {
|
|
38
|
-
enumerable: true,
|
|
39
|
-
get: function () { return chunkTVU4KB27_cjs.RTL_LOCALES; }
|
|
36
|
+
get: function () { return chunkKIVEYQGA_cjs.KEYBOARD_SOURCE_ATTRIBUTE; }
|
|
40
37
|
});
|
|
41
38
|
Object.defineProperty(exports, "VISUAL_VIEWPORT_HEIGHT_VAR", {
|
|
42
39
|
enumerable: true,
|
|
43
|
-
get: function () { return
|
|
40
|
+
get: function () { return chunkKIVEYQGA_cjs.VISUAL_VIEWPORT_HEIGHT_VAR; }
|
|
44
41
|
});
|
|
45
42
|
Object.defineProperty(exports, "VISUAL_VIEWPORT_OFFSET_TOP_VAR", {
|
|
46
43
|
enumerable: true,
|
|
47
|
-
get: function () { return
|
|
48
|
-
});
|
|
49
|
-
Object.defineProperty(exports, "isRtlLocale", {
|
|
50
|
-
enumerable: true,
|
|
51
|
-
get: function () { return chunkTVU4KB27_cjs.isRtlLocale; }
|
|
44
|
+
get: function () { return chunkKIVEYQGA_cjs.VISUAL_VIEWPORT_OFFSET_TOP_VAR; }
|
|
52
45
|
});
|
|
53
46
|
Object.defineProperty(exports, "localStorageOrderAdapter", {
|
|
54
47
|
enumerable: true,
|
|
55
|
-
get: function () { return
|
|
48
|
+
get: function () { return chunkKIVEYQGA_cjs.localStorageOrderAdapter; }
|
|
56
49
|
});
|
|
57
50
|
Object.defineProperty(exports, "mergeOrder", {
|
|
58
51
|
enumerable: true,
|
|
59
|
-
get: function () { return
|
|
52
|
+
get: function () { return chunkKIVEYQGA_cjs.mergeOrder; }
|
|
60
53
|
});
|
|
61
54
|
Object.defineProperty(exports, "useCommandK", {
|
|
62
55
|
enumerable: true,
|
|
63
|
-
get: function () { return
|
|
64
|
-
});
|
|
65
|
-
Object.defineProperty(exports, "useDirection", {
|
|
66
|
-
enumerable: true,
|
|
67
|
-
get: function () { return chunkTVU4KB27_cjs.useDirection; }
|
|
56
|
+
get: function () { return chunkKIVEYQGA_cjs.useCommandK; }
|
|
68
57
|
});
|
|
69
58
|
Object.defineProperty(exports, "useIsDesktop", {
|
|
70
59
|
enumerable: true,
|
|
71
|
-
get: function () { return
|
|
60
|
+
get: function () { return chunkKIVEYQGA_cjs.useIsDesktop; }
|
|
72
61
|
});
|
|
73
62
|
Object.defineProperty(exports, "useIsLargeDesktop", {
|
|
74
63
|
enumerable: true,
|
|
75
|
-
get: function () { return
|
|
64
|
+
get: function () { return chunkKIVEYQGA_cjs.useIsLargeDesktop; }
|
|
76
65
|
});
|
|
77
66
|
Object.defineProperty(exports, "useIsMobile", {
|
|
78
67
|
enumerable: true,
|
|
79
|
-
get: function () { return
|
|
68
|
+
get: function () { return chunkKIVEYQGA_cjs.useIsMobile; }
|
|
80
69
|
});
|
|
81
70
|
Object.defineProperty(exports, "useIsMobileOrTablet", {
|
|
82
71
|
enumerable: true,
|
|
83
|
-
get: function () { return
|
|
72
|
+
get: function () { return chunkKIVEYQGA_cjs.useIsMobileOrTablet; }
|
|
84
73
|
});
|
|
85
74
|
Object.defineProperty(exports, "useIsSmallTablet", {
|
|
86
75
|
enumerable: true,
|
|
87
|
-
get: function () { return
|
|
76
|
+
get: function () { return chunkKIVEYQGA_cjs.useIsSmallTablet; }
|
|
88
77
|
});
|
|
89
78
|
Object.defineProperty(exports, "useIsTablet", {
|
|
90
79
|
enumerable: true,
|
|
91
|
-
get: function () { return
|
|
80
|
+
get: function () { return chunkKIVEYQGA_cjs.useIsTablet; }
|
|
92
81
|
});
|
|
93
82
|
Object.defineProperty(exports, "useKeyboardInset", {
|
|
94
83
|
enumerable: true,
|
|
95
|
-
get: function () { return
|
|
84
|
+
get: function () { return chunkKIVEYQGA_cjs.useKeyboardInset; }
|
|
96
85
|
});
|
|
97
86
|
Object.defineProperty(exports, "useKeyboardShortcut", {
|
|
98
87
|
enumerable: true,
|
|
99
|
-
get: function () { return
|
|
88
|
+
get: function () { return chunkKIVEYQGA_cjs.useKeyboardShortcut; }
|
|
100
89
|
});
|
|
101
90
|
Object.defineProperty(exports, "useMediaQuery", {
|
|
102
91
|
enumerable: true,
|
|
103
|
-
get: function () { return
|
|
92
|
+
get: function () { return chunkKIVEYQGA_cjs.useMediaQuery; }
|
|
104
93
|
});
|
|
105
94
|
Object.defineProperty(exports, "useOrderPersistence", {
|
|
106
95
|
enumerable: true,
|
|
107
|
-
get: function () { return
|
|
96
|
+
get: function () { return chunkKIVEYQGA_cjs.useOrderPersistence; }
|
|
108
97
|
});
|
|
109
98
|
Object.defineProperty(exports, "useYouTubeHoverPreview", {
|
|
110
99
|
enumerable: true,
|
|
@@ -210,6 +199,22 @@ Object.defineProperty(exports, "usePrefersReducedMotion", {
|
|
|
210
199
|
enumerable: true,
|
|
211
200
|
get: function () { return chunkYW2AKBLS_cjs.usePrefersReducedMotion; }
|
|
212
201
|
});
|
|
202
|
+
Object.defineProperty(exports, "RTL_LOCALES", {
|
|
203
|
+
enumerable: true,
|
|
204
|
+
get: function () { return chunkZ3WMDVMR_cjs.RTL_LOCALES; }
|
|
205
|
+
});
|
|
206
|
+
Object.defineProperty(exports, "isRtl", {
|
|
207
|
+
enumerable: true,
|
|
208
|
+
get: function () { return chunkZ3WMDVMR_cjs.isRtl; }
|
|
209
|
+
});
|
|
210
|
+
Object.defineProperty(exports, "isRtlLocale", {
|
|
211
|
+
enumerable: true,
|
|
212
|
+
get: function () { return chunkZ3WMDVMR_cjs.isRtlLocale; }
|
|
213
|
+
});
|
|
214
|
+
Object.defineProperty(exports, "useDirection", {
|
|
215
|
+
enumerable: true,
|
|
216
|
+
get: function () { return chunkZ3WMDVMR_cjs.useDirection; }
|
|
217
|
+
});
|
|
213
218
|
Object.defineProperty(exports, "isDarkMode", {
|
|
214
219
|
enumerable: true,
|
|
215
220
|
get: function () { return chunkNMBYU7D7_cjs.isDarkMode; }
|
package/dist/hooks/index.d.cts
CHANGED
|
@@ -47,6 +47,18 @@ declare const RTL_LOCALES: readonly ["ar", "he", "fa", "ur"];
|
|
|
47
47
|
* right-to-left script.
|
|
48
48
|
*/
|
|
49
49
|
declare function isRtlLocale(locale: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Non-hook check for event handlers: true when the element currently renders
|
|
52
|
+
* right-to-left. Use inside `onKeyDown` to invert ArrowLeft/ArrowRight so
|
|
53
|
+
* horizontal arrows follow the *visual* direction:
|
|
54
|
+
*
|
|
55
|
+
* ```ts
|
|
56
|
+
* const rtl = isRtl(event.currentTarget);
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* Prefer `useDirection()` when the direction drives rendering.
|
|
60
|
+
*/
|
|
61
|
+
declare function isRtl(element?: Element | null): boolean;
|
|
50
62
|
/**
|
|
51
63
|
* Hook returning the effective text direction (`ltr` | `rtl`) inherited from
|
|
52
64
|
* the nearest `dir` attribute — zero setup for consumers who set
|
|
@@ -1088,4 +1100,4 @@ interface UseTranscriptEditsResult {
|
|
|
1088
1100
|
*/
|
|
1089
1101
|
declare function useTranscriptEdits(options: UseTranscriptEditsOptions): UseTranscriptEditsResult;
|
|
1090
1102
|
|
|
1091
|
-
export { type AnchoredPlacement, DEFAULT_DRAG_REORDER_LABELS, DEFAULT_FILLER_WORDS, DEFAULT_MIN_SILENCE_MS, DEFAULT_NL_SILENCE_MS, type Direction, type DragOverState, type DragReorderLabels, type FillerAnalysis, type HoverPreviewState, KEYBOARD_INSET_VAR, KEYBOARD_OPEN_ATTRIBUTE, KEYBOARD_SOURCE_ATTRIBUTE, type KeyboardInsetSource, type KeyboardInsetState, type KeyboardShortcutOptions, type MediaTransportState, type OrderPersistenceAdapter, RTL_LOCALES, type ResolvedTheme, type SilenceThresholdCount, type Theme, type TranscriptClipboard, type TranscriptEditStats, type UseAnchoredPositionOptions, type UseAnchoredPositionReturn, type UseDragReorderOptions, type UseDragReorderReturn, type UseKeyboardInsetOptions, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseOrderPersistenceOptions, type UseOrderPersistenceReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseStickToBottomOptions, type UseStickToBottomReturn, type UseTranscriptEditsOptions, type UseTranscriptEditsResult, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, VISUAL_VIEWPORT_HEIGHT_VAR, VISUAL_VIEWPORT_OFFSET_TOP_VAR, buildPlaybackSegments, dragIndicatorClasses, getSpeedAtIndex, initEditableWords, insertSilences, isDarkMode, isRtlLocale, localStorageOrderAdapter, mergeOrder, moveIdBy, reorderIds, useAnchoredPosition, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardInset, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, useOrderPersistence, usePrefersReducedMotion, useScrollSpy, useStickToBottom, useStreamEndedBelowFold, useTheme, useTranscriptEdits, useUrlTab, useYouTubeHoverPreview };
|
|
1103
|
+
export { type AnchoredPlacement, DEFAULT_DRAG_REORDER_LABELS, DEFAULT_FILLER_WORDS, DEFAULT_MIN_SILENCE_MS, DEFAULT_NL_SILENCE_MS, type Direction, type DragOverState, type DragReorderLabels, type FillerAnalysis, type HoverPreviewState, KEYBOARD_INSET_VAR, KEYBOARD_OPEN_ATTRIBUTE, KEYBOARD_SOURCE_ATTRIBUTE, type KeyboardInsetSource, type KeyboardInsetState, type KeyboardShortcutOptions, type MediaTransportState, type OrderPersistenceAdapter, RTL_LOCALES, type ResolvedTheme, type SilenceThresholdCount, type Theme, type TranscriptClipboard, type TranscriptEditStats, type UseAnchoredPositionOptions, type UseAnchoredPositionReturn, type UseDragReorderOptions, type UseDragReorderReturn, type UseKeyboardInsetOptions, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseOrderPersistenceOptions, type UseOrderPersistenceReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseStickToBottomOptions, type UseStickToBottomReturn, type UseTranscriptEditsOptions, type UseTranscriptEditsResult, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, VISUAL_VIEWPORT_HEIGHT_VAR, VISUAL_VIEWPORT_OFFSET_TOP_VAR, buildPlaybackSegments, dragIndicatorClasses, getSpeedAtIndex, initEditableWords, insertSilences, isDarkMode, isRtl, isRtlLocale, localStorageOrderAdapter, mergeOrder, moveIdBy, reorderIds, useAnchoredPosition, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardInset, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, useOrderPersistence, usePrefersReducedMotion, useScrollSpy, useStickToBottom, useStreamEndedBelowFold, useTheme, useTranscriptEdits, useUrlTab, useYouTubeHoverPreview };
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -47,6 +47,18 @@ declare const RTL_LOCALES: readonly ["ar", "he", "fa", "ur"];
|
|
|
47
47
|
* right-to-left script.
|
|
48
48
|
*/
|
|
49
49
|
declare function isRtlLocale(locale: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Non-hook check for event handlers: true when the element currently renders
|
|
52
|
+
* right-to-left. Use inside `onKeyDown` to invert ArrowLeft/ArrowRight so
|
|
53
|
+
* horizontal arrows follow the *visual* direction:
|
|
54
|
+
*
|
|
55
|
+
* ```ts
|
|
56
|
+
* const rtl = isRtl(event.currentTarget);
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* Prefer `useDirection()` when the direction drives rendering.
|
|
60
|
+
*/
|
|
61
|
+
declare function isRtl(element?: Element | null): boolean;
|
|
50
62
|
/**
|
|
51
63
|
* Hook returning the effective text direction (`ltr` | `rtl`) inherited from
|
|
52
64
|
* the nearest `dir` attribute — zero setup for consumers who set
|
|
@@ -1088,4 +1100,4 @@ interface UseTranscriptEditsResult {
|
|
|
1088
1100
|
*/
|
|
1089
1101
|
declare function useTranscriptEdits(options: UseTranscriptEditsOptions): UseTranscriptEditsResult;
|
|
1090
1102
|
|
|
1091
|
-
export { type AnchoredPlacement, DEFAULT_DRAG_REORDER_LABELS, DEFAULT_FILLER_WORDS, DEFAULT_MIN_SILENCE_MS, DEFAULT_NL_SILENCE_MS, type Direction, type DragOverState, type DragReorderLabels, type FillerAnalysis, type HoverPreviewState, KEYBOARD_INSET_VAR, KEYBOARD_OPEN_ATTRIBUTE, KEYBOARD_SOURCE_ATTRIBUTE, type KeyboardInsetSource, type KeyboardInsetState, type KeyboardShortcutOptions, type MediaTransportState, type OrderPersistenceAdapter, RTL_LOCALES, type ResolvedTheme, type SilenceThresholdCount, type Theme, type TranscriptClipboard, type TranscriptEditStats, type UseAnchoredPositionOptions, type UseAnchoredPositionReturn, type UseDragReorderOptions, type UseDragReorderReturn, type UseKeyboardInsetOptions, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseOrderPersistenceOptions, type UseOrderPersistenceReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseStickToBottomOptions, type UseStickToBottomReturn, type UseTranscriptEditsOptions, type UseTranscriptEditsResult, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, VISUAL_VIEWPORT_HEIGHT_VAR, VISUAL_VIEWPORT_OFFSET_TOP_VAR, buildPlaybackSegments, dragIndicatorClasses, getSpeedAtIndex, initEditableWords, insertSilences, isDarkMode, isRtlLocale, localStorageOrderAdapter, mergeOrder, moveIdBy, reorderIds, useAnchoredPosition, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardInset, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, useOrderPersistence, usePrefersReducedMotion, useScrollSpy, useStickToBottom, useStreamEndedBelowFold, useTheme, useTranscriptEdits, useUrlTab, useYouTubeHoverPreview };
|
|
1103
|
+
export { type AnchoredPlacement, DEFAULT_DRAG_REORDER_LABELS, DEFAULT_FILLER_WORDS, DEFAULT_MIN_SILENCE_MS, DEFAULT_NL_SILENCE_MS, type Direction, type DragOverState, type DragReorderLabels, type FillerAnalysis, type HoverPreviewState, KEYBOARD_INSET_VAR, KEYBOARD_OPEN_ATTRIBUTE, KEYBOARD_SOURCE_ATTRIBUTE, type KeyboardInsetSource, type KeyboardInsetState, type KeyboardShortcutOptions, type MediaTransportState, type OrderPersistenceAdapter, RTL_LOCALES, type ResolvedTheme, type SilenceThresholdCount, type Theme, type TranscriptClipboard, type TranscriptEditStats, type UseAnchoredPositionOptions, type UseAnchoredPositionReturn, type UseDragReorderOptions, type UseDragReorderReturn, type UseKeyboardInsetOptions, type UseMediaTransportOptions, type UseMediaTransportReturn, type UseOrderPersistenceOptions, type UseOrderPersistenceReturn, type UseScrollSpyOptions, type UseScrollSpyReturn, type UseStickToBottomOptions, type UseStickToBottomReturn, type UseTranscriptEditsOptions, type UseTranscriptEditsResult, type UseYouTubeHoverPreviewOptions, type UseYouTubeHoverPreviewReturn, VISUAL_VIEWPORT_HEIGHT_VAR, VISUAL_VIEWPORT_OFFSET_TOP_VAR, buildPlaybackSegments, dragIndicatorClasses, getSpeedAtIndex, initEditableWords, insertSilences, isDarkMode, isRtl, isRtlLocale, localStorageOrderAdapter, mergeOrder, moveIdBy, reorderIds, useAnchoredPosition, useClickOutside, useCommandK, useDirection, useDragReorder, useEscapeKey, useFocusTrap, useIsDarkMode, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardInset, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, useOrderPersistence, usePrefersReducedMotion, useScrollSpy, useStickToBottom, useStreamEndedBelowFold, useTheme, useTranscriptEdits, useUrlTab, useYouTubeHoverPreview };
|
package/dist/hooks/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { KEYBOARD_INSET_VAR, KEYBOARD_OPEN_ATTRIBUTE, KEYBOARD_SOURCE_ATTRIBUTE,
|
|
1
|
+
export { KEYBOARD_INSET_VAR, KEYBOARD_OPEN_ATTRIBUTE, KEYBOARD_SOURCE_ATTRIBUTE, VISUAL_VIEWPORT_HEIGHT_VAR, VISUAL_VIEWPORT_OFFSET_TOP_VAR, localStorageOrderAdapter, mergeOrder, useCommandK, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardInset, useKeyboardShortcut, useMediaQuery, useOrderPersistence } from '../chunk-YG7BR76Y.js';
|
|
2
2
|
export { useYouTubeHoverPreview } from '../chunk-POWS35OT.js';
|
|
3
3
|
export { useTheme } from '../chunk-KJZNEVYM.js';
|
|
4
4
|
export { useStickToBottom, useStreamEndedBelowFold } from '../chunk-BM35CACB.js';
|
|
@@ -15,6 +15,7 @@ export { useClickOutside } from '../chunk-62ZOA6PX.js';
|
|
|
15
15
|
export { useAnchoredPosition } from '../chunk-WSNMQQ4P.js';
|
|
16
16
|
import '../chunk-VSQF22GL.js';
|
|
17
17
|
export { usePrefersReducedMotion } from '../chunk-XDU65GLW.js';
|
|
18
|
+
export { RTL_LOCALES, isRtl, isRtlLocale, useDirection } from '../chunk-YVKBXNPK.js';
|
|
18
19
|
export { isDarkMode, useIsDarkMode } from '../chunk-RUGHNFQG.js';
|
|
19
20
|
import '../chunk-PX6F3LHL.js';
|
|
20
21
|
//# sourceMappingURL=index.js.map
|