formanitor 0.1.10 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AddInvestigationWidget-G7NPTSFY.cjs +32 -0
- package/dist/AddInvestigationWidget-G7NPTSFY.cjs.map +1 -0
- package/dist/AddInvestigationWidget-TQUKTGAW.mjs +30 -0
- package/dist/AddInvestigationWidget-TQUKTGAW.mjs.map +1 -0
- package/dist/AddMedicationWidget-26RHKIA6.cjs +32 -0
- package/dist/AddMedicationWidget-26RHKIA6.cjs.map +1 -0
- package/dist/AddMedicationWidget-I5UIT3WG.mjs +30 -0
- package/dist/AddMedicationWidget-I5UIT3WG.mjs.map +1 -0
- package/dist/AddProcedureWidget-B6OUF3BM.cjs +278 -0
- package/dist/AddProcedureWidget-B6OUF3BM.cjs.map +1 -0
- package/dist/AddProcedureWidget-NB46COB6.mjs +276 -0
- package/dist/AddProcedureWidget-NB46COB6.mjs.map +1 -0
- package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs +298 -0
- package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs.map +1 -0
- package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs +300 -0
- package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs.map +1 -0
- package/dist/DateTimeWidget-72YUK7PX.cjs +61 -0
- package/dist/DateTimeWidget-72YUK7PX.cjs.map +1 -0
- package/dist/DateTimeWidget-WKQIEQSA.mjs +59 -0
- package/dist/DateTimeWidget-WKQIEQSA.mjs.map +1 -0
- package/dist/DateWidget-K2TVTZ7Z.mjs +72 -0
- package/dist/DateWidget-K2TVTZ7Z.mjs.map +1 -0
- package/dist/DateWidget-SYDMSGWO.cjs +74 -0
- package/dist/DateWidget-SYDMSGWO.cjs.map +1 -0
- package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs +184 -0
- package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs.map +1 -0
- package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs +190 -0
- package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs.map +1 -0
- package/dist/DifferentialDiagnosisWidget-FENJP245.mjs +15 -0
- package/dist/DifferentialDiagnosisWidget-FENJP245.mjs.map +1 -0
- package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs +17 -0
- package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs.map +1 -0
- package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs +161 -0
- package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs.map +1 -0
- package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs +163 -0
- package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs.map +1 -0
- package/dist/EditableTable-LPAYCK36.mjs +279 -0
- package/dist/EditableTable-LPAYCK36.mjs.map +1 -0
- package/dist/EditableTable-YB4IC3ZK.cjs +281 -0
- package/dist/EditableTable-YB4IC3ZK.cjs.map +1 -0
- package/dist/FollowupWidget-EEKOI2TW.cjs +285 -0
- package/dist/FollowupWidget-EEKOI2TW.cjs.map +1 -0
- package/dist/FollowupWidget-NJ4QDBOG.mjs +283 -0
- package/dist/FollowupWidget-NJ4QDBOG.mjs.map +1 -0
- package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs +93 -0
- package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs.map +1 -0
- package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs +91 -0
- package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs.map +1 -0
- package/dist/GsExaminationWidget-EX6C3EF5.cjs +528 -0
- package/dist/GsExaminationWidget-EX6C3EF5.cjs.map +1 -0
- package/dist/GsExaminationWidget-MEIUHRQQ.mjs +526 -0
- package/dist/GsExaminationWidget-MEIUHRQQ.mjs.map +1 -0
- package/dist/GsGradingWidget-4UPOEYNL.mjs +90 -0
- package/dist/GsGradingWidget-4UPOEYNL.mjs.map +1 -0
- package/dist/GsGradingWidget-IV3UF63W.cjs +92 -0
- package/dist/GsGradingWidget-IV3UF63W.cjs.map +1 -0
- package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs +398 -0
- package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs.map +1 -0
- package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs +396 -0
- package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs.map +1 -0
- package/dist/HiddenVitalsWidget-AMH32HT2.cjs +55 -0
- package/dist/HiddenVitalsWidget-AMH32HT2.cjs.map +1 -0
- package/dist/HiddenVitalsWidget-W23IFSEF.mjs +53 -0
- package/dist/HiddenVitalsWidget-W23IFSEF.mjs.map +1 -0
- package/dist/LensAssessmentWidget-LSHBUTT5.cjs +234 -0
- package/dist/LensAssessmentWidget-LSHBUTT5.cjs.map +1 -0
- package/dist/LensAssessmentWidget-SJ6YUTSN.mjs +232 -0
- package/dist/LensAssessmentWidget-SJ6YUTSN.mjs.map +1 -0
- package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs +74 -0
- package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs.map +1 -0
- package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs +76 -0
- package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs.map +1 -0
- package/dist/OBGExaminationWidget-BK4ERETW.mjs +213 -0
- package/dist/OBGExaminationWidget-BK4ERETW.mjs.map +1 -0
- package/dist/OBGExaminationWidget-SMFZ2WCL.cjs +215 -0
- package/dist/OBGExaminationWidget-SMFZ2WCL.cjs.map +1 -0
- package/dist/OBGPathwayWidget-5YTUDBEH.cjs +519 -0
- package/dist/OBGPathwayWidget-5YTUDBEH.cjs.map +1 -0
- package/dist/OBGPathwayWidget-U5BCAESB.mjs +517 -0
- package/dist/OBGPathwayWidget-U5BCAESB.mjs.map +1 -0
- package/dist/ObstetricHistoryWidget-GC63CB3U.cjs +1115 -0
- package/dist/ObstetricHistoryWidget-GC63CB3U.cjs.map +1 -0
- package/dist/ObstetricHistoryWidget-WD572Q7H.mjs +1113 -0
- package/dist/ObstetricHistoryWidget-WD572Q7H.mjs.map +1 -0
- package/dist/OphthalDiagnosisWidget-QXFK446I.cjs +91 -0
- package/dist/OphthalDiagnosisWidget-QXFK446I.cjs.map +1 -0
- package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs +89 -0
- package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs.map +1 -0
- package/dist/OphthalmologyWidget-CRQMN5QU.mjs +1329 -0
- package/dist/OphthalmologyWidget-CRQMN5QU.mjs.map +1 -0
- package/dist/OphthalmologyWidget-U2HQMZ4J.cjs +1331 -0
- package/dist/OphthalmologyWidget-U2HQMZ4J.cjs.map +1 -0
- package/dist/OrthopedicExamWidget-LP7VN3W5.cjs +368 -0
- package/dist/OrthopedicExamWidget-LP7VN3W5.cjs.map +1 -0
- package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs +366 -0
- package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs.map +1 -0
- package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs +153 -0
- package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs.map +1 -0
- package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs +151 -0
- package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs.map +1 -0
- package/dist/ReadOnlyTable-4Y2XW4MX.mjs +6 -0
- package/dist/ReadOnlyTable-4Y2XW4MX.mjs.map +1 -0
- package/dist/ReadOnlyTable-L7G6GWEJ.cjs +15 -0
- package/dist/ReadOnlyTable-L7G6GWEJ.cjs.map +1 -0
- package/dist/ReferralWidget-IYTS32TS.mjs +169 -0
- package/dist/ReferralWidget-IYTS32TS.mjs.map +1 -0
- package/dist/ReferralWidget-PDNEKHFO.cjs +171 -0
- package/dist/ReferralWidget-PDNEKHFO.cjs.map +1 -0
- package/dist/RichTextWidget-5OOJ2LJN.mjs +11 -0
- package/dist/RichTextWidget-5OOJ2LJN.mjs.map +1 -0
- package/dist/RichTextWidget-XWLOHKLE.cjs +24 -0
- package/dist/RichTextWidget-XWLOHKLE.cjs.map +1 -0
- package/dist/SmartTextarea-L7Q4CORK.cjs +19 -0
- package/dist/SmartTextarea-L7Q4CORK.cjs.map +1 -0
- package/dist/SmartTextarea-ZCXGMZLG.mjs +10 -0
- package/dist/SmartTextarea-ZCXGMZLG.mjs.map +1 -0
- package/dist/SuggestionTextareaWidget-2TEITBPF.cjs +226 -0
- package/dist/SuggestionTextareaWidget-2TEITBPF.cjs.map +1 -0
- package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs +215 -0
- package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs.map +1 -0
- package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs +144 -0
- package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs.map +1 -0
- package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs +146 -0
- package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs.map +1 -0
- package/dist/UrologyExaminationWidget-74L3IN2X.cjs +273 -0
- package/dist/UrologyExaminationWidget-74L3IN2X.cjs.map +1 -0
- package/dist/UrologyExaminationWidget-IQEBP6CI.mjs +271 -0
- package/dist/UrologyExaminationWidget-IQEBP6CI.mjs.map +1 -0
- package/dist/UrologyPathwayWidget-S4QY6RD6.mjs +153 -0
- package/dist/UrologyPathwayWidget-S4QY6RD6.mjs.map +1 -0
- package/dist/UrologyPathwayWidget-UJY5EW2G.cjs +155 -0
- package/dist/UrologyPathwayWidget-UJY5EW2G.cjs.map +1 -0
- package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs +469 -0
- package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs.map +1 -0
- package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs +471 -0
- package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs.map +1 -0
- package/dist/VitalsWidget-44UWQGIF.cjs +208 -0
- package/dist/VitalsWidget-44UWQGIF.cjs.map +1 -0
- package/dist/VitalsWidget-MBYDGC7U.mjs +187 -0
- package/dist/VitalsWidget-MBYDGC7U.mjs.map +1 -0
- package/dist/chunk-4BAKQIPJ.mjs +27 -0
- package/dist/chunk-4BAKQIPJ.mjs.map +1 -0
- package/dist/chunk-4KSZUIJE.cjs +143 -0
- package/dist/chunk-4KSZUIJE.cjs.map +1 -0
- package/dist/chunk-4PMNVBJD.mjs +121 -0
- package/dist/chunk-4PMNVBJD.mjs.map +1 -0
- package/dist/chunk-5E3APMY6.cjs +54 -0
- package/dist/chunk-5E3APMY6.cjs.map +1 -0
- package/dist/chunk-AIZ3XYEZ.cjs +551 -0
- package/dist/chunk-AIZ3XYEZ.cjs.map +1 -0
- package/dist/chunk-AZHTIUOL.mjs +116 -0
- package/dist/chunk-AZHTIUOL.mjs.map +1 -0
- package/dist/chunk-AZSAPO2V.cjs +174 -0
- package/dist/chunk-AZSAPO2V.cjs.map +1 -0
- package/dist/chunk-AZVJU7NZ.mjs +137 -0
- package/dist/chunk-AZVJU7NZ.mjs.map +1 -0
- package/dist/chunk-B3GBIAHZ.mjs +285 -0
- package/dist/chunk-B3GBIAHZ.mjs.map +1 -0
- package/dist/chunk-BMNY7F6H.mjs +148 -0
- package/dist/chunk-BMNY7F6H.mjs.map +1 -0
- package/dist/chunk-BU4ZEAAP.mjs +102 -0
- package/dist/chunk-BU4ZEAAP.mjs.map +1 -0
- package/dist/chunk-CTW65YW2.cjs +388 -0
- package/dist/chunk-CTW65YW2.cjs.map +1 -0
- package/dist/chunk-DE7VZVKR.cjs +140 -0
- package/dist/chunk-DE7VZVKR.cjs.map +1 -0
- package/dist/chunk-DZYV47QC.mjs +54 -0
- package/dist/chunk-DZYV47QC.mjs.map +1 -0
- package/dist/chunk-E7WUDHSA.cjs +127 -0
- package/dist/chunk-E7WUDHSA.cjs.map +1 -0
- package/dist/chunk-FHHISVCH.cjs +13 -0
- package/dist/chunk-FHHISVCH.cjs.map +1 -0
- package/dist/chunk-FZEEWRW3.cjs +77 -0
- package/dist/chunk-FZEEWRW3.cjs.map +1 -0
- package/dist/chunk-GFDE2KZC.mjs +228 -0
- package/dist/chunk-GFDE2KZC.mjs.map +1 -0
- package/dist/chunk-GNZWSVTB.mjs +29 -0
- package/dist/chunk-GNZWSVTB.mjs.map +1 -0
- package/dist/chunk-GXXWMHAA.mjs +49 -0
- package/dist/chunk-GXXWMHAA.mjs.map +1 -0
- package/dist/chunk-GZPCYSJK.mjs +104 -0
- package/dist/chunk-GZPCYSJK.mjs.map +1 -0
- package/dist/chunk-HEFZA2AH.mjs +22 -0
- package/dist/chunk-HEFZA2AH.mjs.map +1 -0
- package/dist/chunk-I4AV6BQF.mjs +10 -0
- package/dist/chunk-I4AV6BQF.mjs.map +1 -0
- package/dist/chunk-IDSBJOFY.cjs +1885 -0
- package/dist/chunk-IDSBJOFY.cjs.map +1 -0
- package/dist/chunk-IFMQKLNW.mjs +39 -0
- package/dist/chunk-IFMQKLNW.mjs.map +1 -0
- package/dist/chunk-IFSKLIS2.cjs +12 -0
- package/dist/chunk-IFSKLIS2.cjs.map +1 -0
- package/dist/chunk-IKAKE7TR.mjs +527 -0
- package/dist/chunk-IKAKE7TR.mjs.map +1 -0
- package/dist/chunk-JE6VXRWW.cjs +86 -0
- package/dist/chunk-JE6VXRWW.cjs.map +1 -0
- package/dist/chunk-JMGUUFOJ.cjs +45 -0
- package/dist/chunk-JMGUUFOJ.cjs.map +1 -0
- package/dist/chunk-JNVSA77L.cjs +236 -0
- package/dist/chunk-JNVSA77L.cjs.map +1 -0
- package/dist/chunk-KJA5BLGX.cjs +31 -0
- package/dist/chunk-KJA5BLGX.cjs.map +1 -0
- package/dist/chunk-KMJOTMUQ.cjs +109 -0
- package/dist/chunk-KMJOTMUQ.cjs.map +1 -0
- package/dist/chunk-KPGTPJDH.cjs +32 -0
- package/dist/chunk-KPGTPJDH.cjs.map +1 -0
- package/dist/chunk-LBWB7MYU.cjs +287 -0
- package/dist/chunk-LBWB7MYU.cjs.map +1 -0
- package/dist/chunk-LGGOBIEA.mjs +61 -0
- package/dist/chunk-LGGOBIEA.mjs.map +1 -0
- package/dist/chunk-LQYWMYEC.mjs +28 -0
- package/dist/chunk-LQYWMYEC.mjs.map +1 -0
- package/dist/chunk-MIUUO4CI.mjs +361 -0
- package/dist/chunk-MIUUO4CI.mjs.map +1 -0
- package/dist/chunk-N4L76SHJ.cjs +65 -0
- package/dist/chunk-N4L76SHJ.cjs.map +1 -0
- package/dist/chunk-NJJTIL3U.cjs +73 -0
- package/dist/chunk-NJJTIL3U.cjs.map +1 -0
- package/dist/chunk-O3VQBPEW.cjs +72 -0
- package/dist/chunk-O3VQBPEW.cjs.map +1 -0
- package/dist/chunk-P62377LB.cjs +27 -0
- package/dist/chunk-P62377LB.cjs.map +1 -0
- package/dist/chunk-PHADAQSH.cjs +49 -0
- package/dist/chunk-PHADAQSH.cjs.map +1 -0
- package/dist/chunk-PZBJYPWW.cjs +52 -0
- package/dist/chunk-PZBJYPWW.cjs.map +1 -0
- package/dist/chunk-QKJ7BQSR.cjs +538 -0
- package/dist/chunk-QKJ7BQSR.cjs.map +1 -0
- package/dist/chunk-QS6WG2XJ.cjs +56 -0
- package/dist/chunk-QS6WG2XJ.cjs.map +1 -0
- package/dist/chunk-S7EMPE2D.cjs +104 -0
- package/dist/chunk-S7EMPE2D.cjs.map +1 -0
- package/dist/chunk-SCMXLRX5.mjs +42 -0
- package/dist/chunk-SCMXLRX5.mjs.map +1 -0
- package/dist/chunk-TJHG5WHX.cjs +47 -0
- package/dist/chunk-TJHG5WHX.cjs.map +1 -0
- package/dist/chunk-UGGUIXUS.cjs +41 -0
- package/dist/chunk-UGGUIXUS.cjs.map +1 -0
- package/dist/chunk-UULLSS4O.mjs +82 -0
- package/dist/chunk-UULLSS4O.mjs.map +1 -0
- package/dist/chunk-VNFBUAZD.mjs +25 -0
- package/dist/chunk-VNFBUAZD.mjs.map +1 -0
- package/dist/chunk-VPU66PI6.mjs +11 -0
- package/dist/chunk-VPU66PI6.mjs.map +1 -0
- package/dist/chunk-WYVXXEZI.mjs +46 -0
- package/dist/chunk-WYVXXEZI.mjs.map +1 -0
- package/dist/chunk-XDUVO3IZ.mjs +547 -0
- package/dist/chunk-XDUVO3IZ.mjs.map +1 -0
- package/dist/chunk-XR2ZM654.mjs +30 -0
- package/dist/chunk-XR2ZM654.mjs.map +1 -0
- package/dist/chunk-Y7TIWH4I.mjs +25 -0
- package/dist/chunk-Y7TIWH4I.mjs.map +1 -0
- package/dist/chunk-YEFM2ERQ.cjs +143 -0
- package/dist/chunk-YEFM2ERQ.cjs.map +1 -0
- package/dist/chunk-YYPMIUDW.mjs +69 -0
- package/dist/chunk-YYPMIUDW.mjs.map +1 -0
- package/dist/chunk-ZGPHTPAN.mjs +1851 -0
- package/dist/chunk-ZGPHTPAN.mjs.map +1 -0
- package/dist/chunk-ZSOIQVB3.mjs +75 -0
- package/dist/chunk-ZSOIQVB3.mjs.map +1 -0
- package/dist/index.cjs +1596 -14537
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -767
- package/dist/index.d.ts +4 -767
- package/dist/index.mjs +1358 -14346
- package/dist/index.mjs.map +1 -1
- package/dist/read-only-table.cjs +15 -0
- package/dist/read-only-table.cjs.map +1 -0
- package/dist/read-only-table.d.cts +10 -0
- package/dist/read-only-table.d.ts +10 -0
- package/dist/read-only-table.mjs +6 -0
- package/dist/read-only-table.mjs.map +1 -0
- package/dist/rich-text.cjs +24 -0
- package/dist/rich-text.cjs.map +1 -0
- package/dist/rich-text.d.cts +8 -0
- package/dist/rich-text.d.ts +8 -0
- package/dist/rich-text.mjs +11 -0
- package/dist/rich-text.mjs.map +1 -0
- package/dist/richTextClassName--8wkuHkW.d.cts +10 -0
- package/dist/richTextClassName--8wkuHkW.d.ts +10 -0
- package/dist/smart.cjs +23 -0
- package/dist/smart.cjs.map +1 -0
- package/dist/smart.d.cts +23 -0
- package/dist/smart.d.ts +23 -0
- package/dist/smart.mjs +10 -0
- package/dist/smart.mjs.map +1 -0
- package/dist/types-D0iYXUOo.d.cts +736 -0
- package/dist/types-D0iYXUOo.d.ts +736 -0
- package/package.json +20 -2
- package/src/styles/index.css +35 -2
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
|
|
4
|
+
var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var lucideReact = require('lucide-react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
|
|
29
|
+
var Spinner = React__namespace.forwardRef(
|
|
30
|
+
({ className, size = "md", ...props }, ref) => {
|
|
31
|
+
const sizeClasses = {
|
|
32
|
+
sm: "h-4 w-4 border-2",
|
|
33
|
+
md: "h-6 w-6 border-2",
|
|
34
|
+
lg: "h-8 w-8 border-3"
|
|
35
|
+
};
|
|
36
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
37
|
+
"div",
|
|
38
|
+
{
|
|
39
|
+
ref,
|
|
40
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
41
|
+
"animate-spin rounded-full border-primary border-t-transparent",
|
|
42
|
+
sizeClasses[size],
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
...props,
|
|
46
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Loading..." })
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
Spinner.displayName = "Spinner";
|
|
52
|
+
function buildItems(data) {
|
|
53
|
+
const items = [];
|
|
54
|
+
const hasBP = data.blood_pressure_systolic != null || data.blood_pressure_diastolic != null;
|
|
55
|
+
if (hasBP) {
|
|
56
|
+
const sys = data.blood_pressure_systolic ?? "\u2013";
|
|
57
|
+
const dia = data.blood_pressure_diastolic ?? "\u2013";
|
|
58
|
+
items.push({ label: "BP", value: `${sys}/${dia}` });
|
|
59
|
+
}
|
|
60
|
+
if (data.heart_rate != null)
|
|
61
|
+
items.push({ label: "Heart Rate", value: `${data.heart_rate} bpm` });
|
|
62
|
+
if (data.respiratory_rate != null)
|
|
63
|
+
items.push({ label: "Resp. Rate", value: `${data.respiratory_rate}/min` });
|
|
64
|
+
if (data.oxygen_saturation != null)
|
|
65
|
+
items.push({ label: "SpO\u2082", value: `${data.oxygen_saturation}%` });
|
|
66
|
+
if (data.temperature != null)
|
|
67
|
+
items.push({ label: "Temp", value: `${data.temperature} \xB0F` });
|
|
68
|
+
if (data.height != null)
|
|
69
|
+
items.push({ label: "Height", value: `${data.height} cm` });
|
|
70
|
+
if (data.weight != null)
|
|
71
|
+
items.push({ label: "Weight", value: `${data.weight} kg` });
|
|
72
|
+
if (data.bmi != null)
|
|
73
|
+
items.push({ label: "BMI", value: `${data.bmi}` });
|
|
74
|
+
if (data.blood_sugar != null)
|
|
75
|
+
items.push({ label: "Blood Sugar", value: `${data.blood_sugar} mg/dL` });
|
|
76
|
+
if (data.circumference_of_head_in_cms != null)
|
|
77
|
+
items.push({ label: "Head Circ.", value: `${data.circumference_of_head_in_cms} cm` });
|
|
78
|
+
if (data.circumference_of_waist_in_cms != null)
|
|
79
|
+
items.push({ label: "Waist Circ.", value: `${data.circumference_of_waist_in_cms} cm` });
|
|
80
|
+
return items;
|
|
81
|
+
}
|
|
82
|
+
function formatRecordedAt(iso) {
|
|
83
|
+
if (!iso) return "";
|
|
84
|
+
try {
|
|
85
|
+
return new Date(iso).toLocaleString(void 0, {
|
|
86
|
+
day: "2-digit",
|
|
87
|
+
month: "short",
|
|
88
|
+
year: "numeric",
|
|
89
|
+
hour: "2-digit",
|
|
90
|
+
minute: "2-digit"
|
|
91
|
+
});
|
|
92
|
+
} catch {
|
|
93
|
+
return iso;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function VitalChip({ label, value }) {
|
|
97
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0 rounded-md min-w-fit px-1.5", children: [
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-sm text-gray-500 uppercase tracking-wide leading-none", children: label }),
|
|
99
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-900 leading-tight", children: value })
|
|
100
|
+
] });
|
|
101
|
+
}
|
|
102
|
+
var Vitals = ({
|
|
103
|
+
data,
|
|
104
|
+
loading = false,
|
|
105
|
+
error = null,
|
|
106
|
+
onRefresh,
|
|
107
|
+
className
|
|
108
|
+
}) => {
|
|
109
|
+
const items = data ? buildItems(data) : [];
|
|
110
|
+
const hasItems = items.length > 0;
|
|
111
|
+
const recordedAt = data?.recorded_at ? formatRecordedAt(data.recorded_at) : null;
|
|
112
|
+
const notes = data?.notes?.trim() || null;
|
|
113
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
117
|
+
"rounded-md overflow-hidden border border-[#D0D0D0] bg-white px-2 py-2",
|
|
118
|
+
className
|
|
119
|
+
),
|
|
120
|
+
children: loading && !hasItems ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5 py-1", children: [
|
|
121
|
+
/* @__PURE__ */ jsxRuntime.jsx(Spinner, { size: "sm" }),
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Loading vitals\u2026" })
|
|
123
|
+
] }) : error ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-red-500 py-1", children: error }) : hasItems ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
124
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-x-3 gap-y-1", children: [
|
|
125
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-x-2 gap-y-0.5", children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(VitalChip, { ...item }, item.label)) }),
|
|
126
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end gap-0.5 shrink-0", children: [
|
|
127
|
+
recordedAt && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-slate-500", children: recordedAt }),
|
|
128
|
+
onRefresh && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
129
|
+
"button",
|
|
130
|
+
{
|
|
131
|
+
type: "button",
|
|
132
|
+
onClick: onRefresh,
|
|
133
|
+
disabled: loading,
|
|
134
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
135
|
+
"flex items-center gap-0.5 text-[10px] font-medium text-slate-600",
|
|
136
|
+
"hover:text-slate-900 transition-colors disabled:opacity-50 cursor-pointer"
|
|
137
|
+
),
|
|
138
|
+
"aria-label": "Refresh vitals",
|
|
139
|
+
children: [
|
|
140
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: chunkFHHISVCH_cjs.cn("h-2.5 w-2.5", loading && "animate-spin") }),
|
|
141
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Refresh" })
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
)
|
|
145
|
+
] })
|
|
146
|
+
] }),
|
|
147
|
+
notes && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-600 pt-1.5 mt-0.5", children: notes })
|
|
148
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2 py-1", children: [
|
|
149
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "No vitals recorded." }),
|
|
150
|
+
onRefresh && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
151
|
+
"button",
|
|
152
|
+
{
|
|
153
|
+
type: "button",
|
|
154
|
+
onClick: onRefresh,
|
|
155
|
+
disabled: loading,
|
|
156
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
157
|
+
"flex items-center gap-0.5 text-[10px] font-medium text-slate-600",
|
|
158
|
+
"hover:text-slate-900 transition-colors disabled:opacity-50 shrink-0"
|
|
159
|
+
),
|
|
160
|
+
"aria-label": "Refresh vitals",
|
|
161
|
+
children: [
|
|
162
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: chunkFHHISVCH_cjs.cn("h-2.5 w-2.5", loading && "animate-spin") }),
|
|
163
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Refresh" })
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
)
|
|
167
|
+
] })
|
|
168
|
+
}
|
|
169
|
+
);
|
|
170
|
+
};
|
|
171
|
+
var VitalsWidget = ({ fieldId }) => {
|
|
172
|
+
const { value, setValue, fieldDef } = chunkIDSBJOFY_cjs.useField(fieldId);
|
|
173
|
+
const handlers = chunkIDSBJOFY_cjs.useFieldHandlers(fieldId);
|
|
174
|
+
const [loading, setLoading] = React.useState(false);
|
|
175
|
+
const [error, setError] = React.useState(null);
|
|
176
|
+
console.log("[VitalsWidget] fieldId:", fieldId, "| onFetch present:", !!handlers.onFetch, "| value:", value);
|
|
177
|
+
const fetchVitals = React.useCallback(async () => {
|
|
178
|
+
if (!handlers.onFetch) return;
|
|
179
|
+
setLoading(true);
|
|
180
|
+
setError(null);
|
|
181
|
+
try {
|
|
182
|
+
const data = await handlers.onFetch();
|
|
183
|
+
console.log("[VitalsWidget] fetched data:", data);
|
|
184
|
+
setValue(data);
|
|
185
|
+
} catch {
|
|
186
|
+
setError("Failed to load vitals. Please try again.");
|
|
187
|
+
} finally {
|
|
188
|
+
setLoading(false);
|
|
189
|
+
}
|
|
190
|
+
}, [handlers, setValue]);
|
|
191
|
+
React.useEffect(() => {
|
|
192
|
+
fetchVitals();
|
|
193
|
+
}, []);
|
|
194
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
195
|
+
Vitals,
|
|
196
|
+
{
|
|
197
|
+
label: fieldDef?.label ?? "Vitals",
|
|
198
|
+
data: value ?? null,
|
|
199
|
+
loading,
|
|
200
|
+
error,
|
|
201
|
+
onRefresh: handlers.onFetch ? fetchVitals : void 0
|
|
202
|
+
}
|
|
203
|
+
);
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
exports.VitalsWidget = VitalsWidget;
|
|
207
|
+
//# sourceMappingURL=VitalsWidget-44UWQGIF.cjs.map
|
|
208
|
+
//# sourceMappingURL=VitalsWidget-44UWQGIF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/shadcn/spinner.tsx","../src/ui/widgets/Vitals.tsx","../src/ui/widgets/VitalsWidget.tsx"],"names":["React","jsx","cn","jsxs","RefreshCw","useField","useFieldHandlers","useState","useCallback","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAM,OAAA,GAAgBA,gBAAA,CAAA,UAAA;AAAA,EACpB,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,MAAM,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC7C,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,EAAA,EAAI,kBAAA;AAAA,MACJ,EAAA,EAAI,kBAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAEA,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWC,oBAAA;AAAA,UACT,+DAAA;AAAA,UACA,YAAY,IAAI,CAAA;AAAA,UAChB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAD,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,YAAA,EAAU;AAAA;AAAA,KACtC;AAAA,EAEJ;AACF,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,SAAA;ACOtB,SAAS,WAAW,IAAA,EAA+B;AACjD,EAAA,MAAM,QAAqB,EAAC;AAE5B,EAAA,MAAM,KAAA,GACJ,IAAA,CAAK,uBAAA,IAA2B,IAAA,IAAQ,KAAK,wBAAA,IAA4B,IAAA;AAC3E,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,GAAA,GAAM,KAAK,uBAAA,IAA2B,QAAA;AAC5C,IAAA,MAAM,GAAA,GAAM,KAAK,wBAAA,IAA4B,QAAA;AAC7C,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,GAAG,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,CAAA;AAAA,EACpD;AAEA,EAAA,IAAI,KAAK,UAAA,IAAc,IAAA;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,YAAA,EAAc,OAAO,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,IAAA,CAAA,EAAQ,CAAA;AAErE,EAAA,IAAI,KAAK,gBAAA,IAAoB,IAAA;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,YAAA,EAAc,OAAO,CAAA,EAAG,IAAA,CAAK,gBAAgB,CAAA,IAAA,CAAA,EAAQ,CAAA;AAE3E,EAAA,IAAI,KAAK,iBAAA,IAAqB,IAAA;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,WAAA,EAAa,OAAO,CAAA,EAAG,IAAA,CAAK,iBAAiB,CAAA,CAAA,CAAA,EAAK,CAAA;AAExE,EAAA,IAAI,KAAK,WAAA,IAAe,IAAA;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,MAAA,CAAA,EAAY,CAAA;AAEpE,EAAA,IAAI,KAAK,MAAA,IAAU,IAAA;AACjB,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,GAAA,CAAA,EAAO,CAAA;AAE5D,EAAA,IAAI,KAAK,MAAA,IAAU,IAAA;AACjB,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,GAAA,CAAA,EAAO,CAAA;AAE5D,EAAA,IAAI,KAAK,GAAA,IAAO,IAAA;AACd,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI,CAAA;AAEnD,EAAA,IAAI,KAAK,WAAA,IAAe,IAAA;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,aAAA,EAAe,OAAO,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,MAAA,CAAA,EAAU,CAAA;AAEzE,EAAA,IAAI,KAAK,4BAAA,IAAgC,IAAA;AACvC,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,YAAA,EAAc,OAAO,CAAA,EAAG,IAAA,CAAK,4BAA4B,CAAA,GAAA,CAAA,EAAO,CAAA;AAEtF,EAAA,IAAI,KAAK,6BAAA,IAAiC,IAAA;AACxC,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,KAAA,EAAO,aAAA,EAAe,OAAO,CAAA,EAAG,IAAA,CAAK,6BAA6B,CAAA,GAAA,CAAA,EAAO,CAAA;AAExF,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,iBAAiB,GAAA,EAAwC;AAChE,EAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AACjB,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,IAAA,CAAK,GAAG,CAAA,CAAE,eAAe,KAAA,CAAA,EAAW;AAAA,MAC7C,GAAA,EAAK,SAAA;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAIA,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAM,EAAc;AAC9C,EAAA,uBACEE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wEAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAuC,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAC/D,CAAA;AAEJ;AAIO,IAAM,SAAgC,CAAC;AAAA,EAC5C,IAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,KAAA,GAAQ,IAAA;AAAA,EACR,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,KAAA,GAAQ,IAAA,GAAO,UAAA,CAAW,IAAI,IAAI,EAAC;AACzC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,GAAS,CAAA;AAChC,EAAA,MAAM,aAAa,IAAA,EAAM,WAAA,GAAc,gBAAA,CAAiB,IAAA,CAAK,WAAW,CAAA,GAAI,IAAA;AAC5E,EAAA,MAAM,KAAA,GAAQ,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,IAAK,IAAA;AAErC,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,oBAAA;AAAA,QACT,uEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,qBAAW,CAAC,QAAA,mBACXC,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gCAAA,EACb,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,CAAA;AAAA,wBACnBA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,sBAAA,EAAe;AAAA,OAAA,EACjE,CAAA,GACE,KAAA,mBACFA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAAA,EAA6B,QAAA,EAAA,KAAA,EAAM,CAAA,GAC9C,QAAA,mBACFE,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACZ,gBAAM,GAAA,CAAI,CAAA,IAAA,qBACTA,cAAAA,CAAC,aAA4B,GAAG,IAAA,EAAA,EAAhB,IAAA,CAAK,KAAiB,CACvC,CAAA,EACH,CAAA;AAAA,0BACAE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACZ,QAAA,EAAA;AAAA,YAAA,UAAA,oBACCF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,YAE1D,SAAA,oBACCE,eAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,SAAA;AAAA,gBACT,QAAA,EAAU,OAAA;AAAA,gBACV,SAAA,EAAWD,oBAAA;AAAA,kBACT,kEAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,YAAA,EAAW,gBAAA;AAAA,gBAEX,QAAA,EAAA;AAAA,kCAAAD,eAACG,qBAAA,EAAA,EAAU,SAAA,EAAWF,qBAAG,aAAA,EAAe,OAAA,IAAW,cAAc,CAAA,EAAG,CAAA;AAAA,kCACpED,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO;AAAA;AAAA;AAAA;AACf,WAAA,EAEJ;AAAA,SAAA,EACF,CAAA;AAAA,QACC,yBACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCACV,QAAA,EAAA,KAAA,EACH;AAAA,OAAA,EAEJ,CAAA,mBAEAE,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,qBAAA,EAAmB,CAAA;AAAA,QAC/D,SAAA,oBACCE,eAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,SAAA;AAAA,YACT,QAAA,EAAU,OAAA;AAAA,YACV,SAAA,EAAWD,oBAAA;AAAA,cACT,kEAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,YAAA,EAAW,gBAAA;AAAA,YAEX,QAAA,EAAA;AAAA,8BAAAD,eAACG,qBAAA,EAAA,EAAU,SAAA,EAAWF,qBAAG,aAAA,EAAe,OAAA,IAAW,cAAc,CAAA,EAAG,CAAA;AAAA,8BACpED,cAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO;AAAA;AAAA;AAAA;AACf,OAAA,EAEJ;AAAA;AAAA,GAEJ;AAEJ,CAAA;AC7LO,IAAM,YAAA,GAA8C,CAAC,EAAE,OAAA,EAAQ,KAAM;AAC1E,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,EAAS,GAAII,2BAAS,OAAO,CAAA;AACtD,EAAA,MAAM,QAAA,GAAWC,mCAAiB,OAAO,CAAA;AACzC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEtD,EAAA,OAAA,CAAQ,GAAA,CAAI,2BAA2B,OAAA,EAAS,oBAAA,EAAsB,CAAC,CAAC,QAAA,CAAS,OAAA,EAAS,UAAA,EAAY,KAAK,CAAA;AAE3G,EAAA,MAAM,WAAA,GAAcC,kBAAY,YAAY;AAC1C,IAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACvB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,OAAA,EAAQ;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,gCAAgC,IAAI,CAAA;AAChD,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,CAAA,CAAA,MAAQ;AACN,MAAA,QAAA,CAAS,0CAA0C,CAAA;AAAA,IACrD,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AAGvB,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,WAAA,EAAY;AAAA,EAEd,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACER,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,UAAU,KAAA,IAAS,QAAA;AAAA,MAC1B,MAAO,KAAA,IAA+B,IAAA;AAAA,MACtC,OAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,QAAA,CAAS,OAAA,GAAU,WAAA,GAAc;AAAA;AAAA,GAC9C;AAEJ","file":"VitalsWidget-44UWQGIF.cjs","sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = \"md\", ...props }, ref) => {\n const sizeClasses = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-3\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"animate-spin rounded-full border-primary border-t-transparent\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n);\nSpinner.displayName = \"Spinner\";\n\nexport { Spinner };\n","import React from 'react';\nimport { RefreshCw } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Spinner } from '../shadcn/spinner';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type VitalsData = {\n temperature?: number | null;\n height?: number | null;\n weight?: number | null;\n bmi?: number | null;\n blood_sugar?: number | null;\n notes?: string | null;\n circumference_of_head_in_cms?: number | null;\n circumference_of_waist_in_cms?: number | null;\n blood_pressure_systolic?: number | null;\n blood_pressure_diastolic?: number | null;\n heart_rate?: number | null;\n respiratory_rate?: number | null;\n oxygen_saturation?: number | null;\n recorded_at?: string | null;\n};\n\nexport type VitalsProps = {\n label?: string;\n data: VitalsData | null;\n loading?: boolean;\n error?: string | null;\n onRefresh?: () => void;\n className?: string;\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\ntype VitalItem = { label: string; value: string };\n\nfunction buildItems(data: VitalsData): VitalItem[] {\n const items: VitalItem[] = [];\n\n const hasBP =\n data.blood_pressure_systolic != null || data.blood_pressure_diastolic != null;\n if (hasBP) {\n const sys = data.blood_pressure_systolic ?? '–';\n const dia = data.blood_pressure_diastolic ?? '–';\n items.push({ label: 'BP', value: `${sys}/${dia}` });\n }\n\n if (data.heart_rate != null)\n items.push({ label: 'Heart Rate', value: `${data.heart_rate} bpm` });\n\n if (data.respiratory_rate != null)\n items.push({ label: 'Resp. Rate', value: `${data.respiratory_rate}/min` });\n\n if (data.oxygen_saturation != null)\n items.push({ label: 'SpO\\u2082', value: `${data.oxygen_saturation}%` });\n\n if (data.temperature != null)\n items.push({ label: 'Temp', value: `${data.temperature} \\u00b0F` });\n\n if (data.height != null)\n items.push({ label: 'Height', value: `${data.height} cm` });\n\n if (data.weight != null)\n items.push({ label: 'Weight', value: `${data.weight} kg` });\n\n if (data.bmi != null)\n items.push({ label: 'BMI', value: `${data.bmi}` });\n\n if (data.blood_sugar != null)\n items.push({ label: 'Blood Sugar', value: `${data.blood_sugar} mg/dL` });\n\n if (data.circumference_of_head_in_cms != null)\n items.push({ label: 'Head Circ.', value: `${data.circumference_of_head_in_cms} cm` });\n\n if (data.circumference_of_waist_in_cms != null)\n items.push({ label: 'Waist Circ.', value: `${data.circumference_of_waist_in_cms} cm` });\n\n return items;\n}\n\nfunction formatRecordedAt(iso: string | null | undefined): string {\n if (!iso) return '';\n try {\n return new Date(iso).toLocaleString(undefined, {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n } catch {\n return iso;\n }\n}\n\n// ─── Vital chip ───────────────────────────────────────────────────────────────\n\nfunction VitalChip({ label, value }: VitalItem) {\n return (\n <div className=\"flex flex-col gap-0 rounded-md min-w-fit px-1.5\">\n <span className=\"text-[10px] font-sm text-gray-500 uppercase tracking-wide leading-none\">\n {label}\n </span>\n <span className=\"text-xs text-gray-900 leading-tight\">{value}</span>\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const Vitals: React.FC<VitalsProps> = ({\n data,\n loading = false,\n error = null,\n onRefresh,\n className,\n}) => {\n const items = data ? buildItems(data) : [];\n const hasItems = items.length > 0;\n const recordedAt = data?.recorded_at ? formatRecordedAt(data.recorded_at) : null;\n const notes = data?.notes?.trim() || null;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden border border-[#D0D0D0] bg-white px-2 py-2',\n className\n )}\n >\n {loading && !hasItems ? (\n <div className=\"flex items-center gap-1.5 py-1\">\n <Spinner size=\"sm\" />\n <span className=\"text-xs text-muted-foreground\">Loading vitals…</span>\n </div>\n ) : error ? (\n <p className=\"text-xs text-red-500 py-1\">{error}</p>\n ) : hasItems ? (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-1\">\n <div className=\"flex flex-wrap gap-x-2 gap-y-0.5\">\n {items.map(item => (\n <VitalChip key={item.label} {...item} />\n ))}\n </div>\n <div className=\"flex flex-col items-end gap-0.5 shrink-0\">\n {recordedAt && (\n <span className=\"text-[10px] text-slate-500\">{recordedAt}</span>\n )}\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 cursor-pointer'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n </div>\n {notes && (\n <p className=\"text-xs text-gray-600 pt-1.5 mt-0.5\">\n {notes}\n </p>\n )}\n </div>\n ) : (\n <div className=\"flex items-center justify-between gap-2 py-1\">\n <p className=\"text-xs text-muted-foreground\">No vitals recorded.</p>\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 shrink-0'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Vitals, type VitalsData } from './Vitals';\n\nexport const VitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue, fieldDef } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n console.log('[VitalsWidget] fieldId:', fieldId, '| onFetch present:', !!handlers.onFetch, '| value:', value);\n\n const fetchVitals = useCallback(async () => {\n if (!handlers.onFetch) return;\n setLoading(true);\n setError(null);\n try {\n const data = await handlers.onFetch();\n console.log('[VitalsWidget] fetched data:', data);\n setValue(data);\n } catch {\n setError('Failed to load vitals. Please try again.');\n } finally {\n setLoading(false);\n }\n }, [handlers, setValue]);\n\n // Fetch once on mount if a handler is provided\n useEffect(() => {\n fetchVitals();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Vitals\n label={fieldDef?.label ?? 'Vitals'}\n data={(value as VitalsData | null) ?? null}\n loading={loading}\n error={error}\n onRefresh={handlers.onFetch ? fetchVitals : undefined}\n />\n );\n};\n"]}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { useField, useFieldHandlers } from './chunk-ZGPHTPAN.mjs';
|
|
2
|
+
import { cn } from './chunk-VPU66PI6.mjs';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
5
|
+
import { RefreshCw } from 'lucide-react';
|
|
6
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var Spinner = React.forwardRef(
|
|
9
|
+
({ className, size = "md", ...props }, ref) => {
|
|
10
|
+
const sizeClasses = {
|
|
11
|
+
sm: "h-4 w-4 border-2",
|
|
12
|
+
md: "h-6 w-6 border-2",
|
|
13
|
+
lg: "h-8 w-8 border-3"
|
|
14
|
+
};
|
|
15
|
+
return /* @__PURE__ */ jsx(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
ref,
|
|
19
|
+
className: cn(
|
|
20
|
+
"animate-spin rounded-full border-primary border-t-transparent",
|
|
21
|
+
sizeClasses[size],
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
...props,
|
|
25
|
+
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading..." })
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
Spinner.displayName = "Spinner";
|
|
31
|
+
function buildItems(data) {
|
|
32
|
+
const items = [];
|
|
33
|
+
const hasBP = data.blood_pressure_systolic != null || data.blood_pressure_diastolic != null;
|
|
34
|
+
if (hasBP) {
|
|
35
|
+
const sys = data.blood_pressure_systolic ?? "\u2013";
|
|
36
|
+
const dia = data.blood_pressure_diastolic ?? "\u2013";
|
|
37
|
+
items.push({ label: "BP", value: `${sys}/${dia}` });
|
|
38
|
+
}
|
|
39
|
+
if (data.heart_rate != null)
|
|
40
|
+
items.push({ label: "Heart Rate", value: `${data.heart_rate} bpm` });
|
|
41
|
+
if (data.respiratory_rate != null)
|
|
42
|
+
items.push({ label: "Resp. Rate", value: `${data.respiratory_rate}/min` });
|
|
43
|
+
if (data.oxygen_saturation != null)
|
|
44
|
+
items.push({ label: "SpO\u2082", value: `${data.oxygen_saturation}%` });
|
|
45
|
+
if (data.temperature != null)
|
|
46
|
+
items.push({ label: "Temp", value: `${data.temperature} \xB0F` });
|
|
47
|
+
if (data.height != null)
|
|
48
|
+
items.push({ label: "Height", value: `${data.height} cm` });
|
|
49
|
+
if (data.weight != null)
|
|
50
|
+
items.push({ label: "Weight", value: `${data.weight} kg` });
|
|
51
|
+
if (data.bmi != null)
|
|
52
|
+
items.push({ label: "BMI", value: `${data.bmi}` });
|
|
53
|
+
if (data.blood_sugar != null)
|
|
54
|
+
items.push({ label: "Blood Sugar", value: `${data.blood_sugar} mg/dL` });
|
|
55
|
+
if (data.circumference_of_head_in_cms != null)
|
|
56
|
+
items.push({ label: "Head Circ.", value: `${data.circumference_of_head_in_cms} cm` });
|
|
57
|
+
if (data.circumference_of_waist_in_cms != null)
|
|
58
|
+
items.push({ label: "Waist Circ.", value: `${data.circumference_of_waist_in_cms} cm` });
|
|
59
|
+
return items;
|
|
60
|
+
}
|
|
61
|
+
function formatRecordedAt(iso) {
|
|
62
|
+
if (!iso) return "";
|
|
63
|
+
try {
|
|
64
|
+
return new Date(iso).toLocaleString(void 0, {
|
|
65
|
+
day: "2-digit",
|
|
66
|
+
month: "short",
|
|
67
|
+
year: "numeric",
|
|
68
|
+
hour: "2-digit",
|
|
69
|
+
minute: "2-digit"
|
|
70
|
+
});
|
|
71
|
+
} catch {
|
|
72
|
+
return iso;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function VitalChip({ label, value }) {
|
|
76
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0 rounded-md min-w-fit px-1.5", children: [
|
|
77
|
+
/* @__PURE__ */ jsx("span", { className: "text-[10px] font-sm text-gray-500 uppercase tracking-wide leading-none", children: label }),
|
|
78
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-gray-900 leading-tight", children: value })
|
|
79
|
+
] });
|
|
80
|
+
}
|
|
81
|
+
var Vitals = ({
|
|
82
|
+
data,
|
|
83
|
+
loading = false,
|
|
84
|
+
error = null,
|
|
85
|
+
onRefresh,
|
|
86
|
+
className
|
|
87
|
+
}) => {
|
|
88
|
+
const items = data ? buildItems(data) : [];
|
|
89
|
+
const hasItems = items.length > 0;
|
|
90
|
+
const recordedAt = data?.recorded_at ? formatRecordedAt(data.recorded_at) : null;
|
|
91
|
+
const notes = data?.notes?.trim() || null;
|
|
92
|
+
return /* @__PURE__ */ jsx(
|
|
93
|
+
"div",
|
|
94
|
+
{
|
|
95
|
+
className: cn(
|
|
96
|
+
"rounded-md overflow-hidden border border-[#D0D0D0] bg-white px-2 py-2",
|
|
97
|
+
className
|
|
98
|
+
),
|
|
99
|
+
children: loading && !hasItems ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 py-1", children: [
|
|
100
|
+
/* @__PURE__ */ jsx(Spinner, { size: "sm" }),
|
|
101
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "Loading vitals\u2026" })
|
|
102
|
+
] }) : error ? /* @__PURE__ */ jsx("p", { className: "text-xs text-red-500 py-1", children: error }) : hasItems ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
103
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-x-3 gap-y-1", children: [
|
|
104
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-x-2 gap-y-0.5", children: items.map((item) => /* @__PURE__ */ jsx(VitalChip, { ...item }, item.label)) }),
|
|
105
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-end gap-0.5 shrink-0", children: [
|
|
106
|
+
recordedAt && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-slate-500", children: recordedAt }),
|
|
107
|
+
onRefresh && /* @__PURE__ */ jsxs(
|
|
108
|
+
"button",
|
|
109
|
+
{
|
|
110
|
+
type: "button",
|
|
111
|
+
onClick: onRefresh,
|
|
112
|
+
disabled: loading,
|
|
113
|
+
className: cn(
|
|
114
|
+
"flex items-center gap-0.5 text-[10px] font-medium text-slate-600",
|
|
115
|
+
"hover:text-slate-900 transition-colors disabled:opacity-50 cursor-pointer"
|
|
116
|
+
),
|
|
117
|
+
"aria-label": "Refresh vitals",
|
|
118
|
+
children: [
|
|
119
|
+
/* @__PURE__ */ jsx(RefreshCw, { className: cn("h-2.5 w-2.5", loading && "animate-spin") }),
|
|
120
|
+
/* @__PURE__ */ jsx("span", { children: "Refresh" })
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
] })
|
|
125
|
+
] }),
|
|
126
|
+
notes && /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-600 pt-1.5 mt-0.5", children: notes })
|
|
127
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 py-1", children: [
|
|
128
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "No vitals recorded." }),
|
|
129
|
+
onRefresh && /* @__PURE__ */ jsxs(
|
|
130
|
+
"button",
|
|
131
|
+
{
|
|
132
|
+
type: "button",
|
|
133
|
+
onClick: onRefresh,
|
|
134
|
+
disabled: loading,
|
|
135
|
+
className: cn(
|
|
136
|
+
"flex items-center gap-0.5 text-[10px] font-medium text-slate-600",
|
|
137
|
+
"hover:text-slate-900 transition-colors disabled:opacity-50 shrink-0"
|
|
138
|
+
),
|
|
139
|
+
"aria-label": "Refresh vitals",
|
|
140
|
+
children: [
|
|
141
|
+
/* @__PURE__ */ jsx(RefreshCw, { className: cn("h-2.5 w-2.5", loading && "animate-spin") }),
|
|
142
|
+
/* @__PURE__ */ jsx("span", { children: "Refresh" })
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
] })
|
|
147
|
+
}
|
|
148
|
+
);
|
|
149
|
+
};
|
|
150
|
+
var VitalsWidget = ({ fieldId }) => {
|
|
151
|
+
const { value, setValue, fieldDef } = useField(fieldId);
|
|
152
|
+
const handlers = useFieldHandlers(fieldId);
|
|
153
|
+
const [loading, setLoading] = useState(false);
|
|
154
|
+
const [error, setError] = useState(null);
|
|
155
|
+
console.log("[VitalsWidget] fieldId:", fieldId, "| onFetch present:", !!handlers.onFetch, "| value:", value);
|
|
156
|
+
const fetchVitals = useCallback(async () => {
|
|
157
|
+
if (!handlers.onFetch) return;
|
|
158
|
+
setLoading(true);
|
|
159
|
+
setError(null);
|
|
160
|
+
try {
|
|
161
|
+
const data = await handlers.onFetch();
|
|
162
|
+
console.log("[VitalsWidget] fetched data:", data);
|
|
163
|
+
setValue(data);
|
|
164
|
+
} catch {
|
|
165
|
+
setError("Failed to load vitals. Please try again.");
|
|
166
|
+
} finally {
|
|
167
|
+
setLoading(false);
|
|
168
|
+
}
|
|
169
|
+
}, [handlers, setValue]);
|
|
170
|
+
useEffect(() => {
|
|
171
|
+
fetchVitals();
|
|
172
|
+
}, []);
|
|
173
|
+
return /* @__PURE__ */ jsx(
|
|
174
|
+
Vitals,
|
|
175
|
+
{
|
|
176
|
+
label: fieldDef?.label ?? "Vitals",
|
|
177
|
+
data: value ?? null,
|
|
178
|
+
loading,
|
|
179
|
+
error,
|
|
180
|
+
onRefresh: handlers.onFetch ? fetchVitals : void 0
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
export { VitalsWidget };
|
|
186
|
+
//# sourceMappingURL=VitalsWidget-MBYDGC7U.mjs.map
|
|
187
|
+
//# sourceMappingURL=VitalsWidget-MBYDGC7U.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/shadcn/spinner.tsx","../src/ui/widgets/Vitals.tsx","../src/ui/widgets/VitalsWidget.tsx"],"names":["jsx"],"mappings":"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","file":"VitalsWidget-MBYDGC7U.mjs","sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = \"md\", ...props }, ref) => {\n const sizeClasses = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-3\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"animate-spin rounded-full border-primary border-t-transparent\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n);\nSpinner.displayName = \"Spinner\";\n\nexport { Spinner };\n","import React from 'react';\nimport { RefreshCw } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Spinner } from '../shadcn/spinner';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type VitalsData = {\n temperature?: number | null;\n height?: number | null;\n weight?: number | null;\n bmi?: number | null;\n blood_sugar?: number | null;\n notes?: string | null;\n circumference_of_head_in_cms?: number | null;\n circumference_of_waist_in_cms?: number | null;\n blood_pressure_systolic?: number | null;\n blood_pressure_diastolic?: number | null;\n heart_rate?: number | null;\n respiratory_rate?: number | null;\n oxygen_saturation?: number | null;\n recorded_at?: string | null;\n};\n\nexport type VitalsProps = {\n label?: string;\n data: VitalsData | null;\n loading?: boolean;\n error?: string | null;\n onRefresh?: () => void;\n className?: string;\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\ntype VitalItem = { label: string; value: string };\n\nfunction buildItems(data: VitalsData): VitalItem[] {\n const items: VitalItem[] = [];\n\n const hasBP =\n data.blood_pressure_systolic != null || data.blood_pressure_diastolic != null;\n if (hasBP) {\n const sys = data.blood_pressure_systolic ?? '–';\n const dia = data.blood_pressure_diastolic ?? '–';\n items.push({ label: 'BP', value: `${sys}/${dia}` });\n }\n\n if (data.heart_rate != null)\n items.push({ label: 'Heart Rate', value: `${data.heart_rate} bpm` });\n\n if (data.respiratory_rate != null)\n items.push({ label: 'Resp. Rate', value: `${data.respiratory_rate}/min` });\n\n if (data.oxygen_saturation != null)\n items.push({ label: 'SpO\\u2082', value: `${data.oxygen_saturation}%` });\n\n if (data.temperature != null)\n items.push({ label: 'Temp', value: `${data.temperature} \\u00b0F` });\n\n if (data.height != null)\n items.push({ label: 'Height', value: `${data.height} cm` });\n\n if (data.weight != null)\n items.push({ label: 'Weight', value: `${data.weight} kg` });\n\n if (data.bmi != null)\n items.push({ label: 'BMI', value: `${data.bmi}` });\n\n if (data.blood_sugar != null)\n items.push({ label: 'Blood Sugar', value: `${data.blood_sugar} mg/dL` });\n\n if (data.circumference_of_head_in_cms != null)\n items.push({ label: 'Head Circ.', value: `${data.circumference_of_head_in_cms} cm` });\n\n if (data.circumference_of_waist_in_cms != null)\n items.push({ label: 'Waist Circ.', value: `${data.circumference_of_waist_in_cms} cm` });\n\n return items;\n}\n\nfunction formatRecordedAt(iso: string | null | undefined): string {\n if (!iso) return '';\n try {\n return new Date(iso).toLocaleString(undefined, {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n } catch {\n return iso;\n }\n}\n\n// ─── Vital chip ───────────────────────────────────────────────────────────────\n\nfunction VitalChip({ label, value }: VitalItem) {\n return (\n <div className=\"flex flex-col gap-0 rounded-md min-w-fit px-1.5\">\n <span className=\"text-[10px] font-sm text-gray-500 uppercase tracking-wide leading-none\">\n {label}\n </span>\n <span className=\"text-xs text-gray-900 leading-tight\">{value}</span>\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const Vitals: React.FC<VitalsProps> = ({\n data,\n loading = false,\n error = null,\n onRefresh,\n className,\n}) => {\n const items = data ? buildItems(data) : [];\n const hasItems = items.length > 0;\n const recordedAt = data?.recorded_at ? formatRecordedAt(data.recorded_at) : null;\n const notes = data?.notes?.trim() || null;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden border border-[#D0D0D0] bg-white px-2 py-2',\n className\n )}\n >\n {loading && !hasItems ? (\n <div className=\"flex items-center gap-1.5 py-1\">\n <Spinner size=\"sm\" />\n <span className=\"text-xs text-muted-foreground\">Loading vitals…</span>\n </div>\n ) : error ? (\n <p className=\"text-xs text-red-500 py-1\">{error}</p>\n ) : hasItems ? (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-1\">\n <div className=\"flex flex-wrap gap-x-2 gap-y-0.5\">\n {items.map(item => (\n <VitalChip key={item.label} {...item} />\n ))}\n </div>\n <div className=\"flex flex-col items-end gap-0.5 shrink-0\">\n {recordedAt && (\n <span className=\"text-[10px] text-slate-500\">{recordedAt}</span>\n )}\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 cursor-pointer'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n </div>\n {notes && (\n <p className=\"text-xs text-gray-600 pt-1.5 mt-0.5\">\n {notes}\n </p>\n )}\n </div>\n ) : (\n <div className=\"flex items-center justify-between gap-2 py-1\">\n <p className=\"text-xs text-muted-foreground\">No vitals recorded.</p>\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 shrink-0'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Vitals, type VitalsData } from './Vitals';\n\nexport const VitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue, fieldDef } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n console.log('[VitalsWidget] fieldId:', fieldId, '| onFetch present:', !!handlers.onFetch, '| value:', value);\n\n const fetchVitals = useCallback(async () => {\n if (!handlers.onFetch) return;\n setLoading(true);\n setError(null);\n try {\n const data = await handlers.onFetch();\n console.log('[VitalsWidget] fetched data:', data);\n setValue(data);\n } catch {\n setError('Failed to load vitals. Please try again.');\n } finally {\n setLoading(false);\n }\n }, [handlers, setValue]);\n\n // Fetch once on mount if a handler is provided\n useEffect(() => {\n fetchVitals();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Vitals\n label={fieldDef?.label ?? 'Vitals'}\n data={(value as VitalsData | null) ?? null}\n loading={loading}\n error={error}\n onRefresh={handlers.onFetch ? fetchVitals : undefined}\n />\n );\n};\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cn } from './chunk-VPU66PI6.mjs';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
var Textarea = React.forwardRef(
|
|
6
|
+
({ className, height, style, ...props }, ref) => {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"textarea",
|
|
9
|
+
{
|
|
10
|
+
spellCheck: false,
|
|
11
|
+
className: cn(
|
|
12
|
+
"flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
|
|
13
|
+
height == null && "min-h-[80px]",
|
|
14
|
+
className
|
|
15
|
+
),
|
|
16
|
+
ref,
|
|
17
|
+
style: height != null ? { ...style, height: `${height}px` } : style,
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
Textarea.displayName = "Textarea";
|
|
24
|
+
|
|
25
|
+
export { Textarea };
|
|
26
|
+
//# sourceMappingURL=chunk-4BAKQIPJ.mjs.map
|
|
27
|
+
//# sourceMappingURL=chunk-4BAKQIPJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/shadcn/textarea.tsx"],"names":[],"mappings":";;;;AASA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,OAAO,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC/C,IAAA,uBACE,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,UAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,yLAAA;AAAA,UACA,UAAU,IAAA,IAAQ,cAAA;AAAA,UAClB;AAAA,SACF;AAAA,QACA,GAAA;AAAA,QACA,KAAA,EAAO,MAAA,IAAU,IAAA,GAAO,EAAE,GAAG,OAAO,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAK,GAAI,KAAA;AAAA,QAC7D,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-4BAKQIPJ.mjs","sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"../../core/utils\";\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\n /** Height in pixels. If not provided, uses default min height (80px). */\n height?: number;\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, height, style, ...props }, ref) => {\n return (\n <textarea\n spellCheck={false}\n className={cn(\n \"flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n height == null && \"min-h-[80px]\",\n className\n )}\n ref={ref}\n style={height != null ? { ...style, height: `${height}px` } : style}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"]}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var SelectPrimitive = require('@radix-ui/react-select');
|
|
6
|
+
var lucideReact = require('lucide-react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
|
|
29
|
+
|
|
30
|
+
var Select = SelectPrimitive__namespace.Root;
|
|
31
|
+
var SelectValue = SelectPrimitive__namespace.Value;
|
|
32
|
+
var SelectTrigger = React__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
33
|
+
SelectPrimitive__namespace.Trigger,
|
|
34
|
+
{
|
|
35
|
+
ref,
|
|
36
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
37
|
+
"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
|
|
38
|
+
className
|
|
39
|
+
),
|
|
40
|
+
...props,
|
|
41
|
+
children: [
|
|
42
|
+
children,
|
|
43
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
));
|
|
47
|
+
SelectTrigger.displayName = SelectPrimitive__namespace.Trigger.displayName;
|
|
48
|
+
var SelectScrollUpButton = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
49
|
+
SelectPrimitive__namespace.ScrollUpButton,
|
|
50
|
+
{
|
|
51
|
+
ref,
|
|
52
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
53
|
+
"flex cursor-default items-center justify-center py-1",
|
|
54
|
+
className
|
|
55
|
+
),
|
|
56
|
+
...props,
|
|
57
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "h-4 w-4" })
|
|
58
|
+
}
|
|
59
|
+
));
|
|
60
|
+
SelectScrollUpButton.displayName = SelectPrimitive__namespace.ScrollUpButton.displayName;
|
|
61
|
+
var SelectScrollDownButton = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
62
|
+
SelectPrimitive__namespace.ScrollDownButton,
|
|
63
|
+
{
|
|
64
|
+
ref,
|
|
65
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
66
|
+
"flex cursor-default items-center justify-center py-1",
|
|
67
|
+
className
|
|
68
|
+
),
|
|
69
|
+
...props,
|
|
70
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4" })
|
|
71
|
+
}
|
|
72
|
+
));
|
|
73
|
+
SelectScrollDownButton.displayName = SelectPrimitive__namespace.ScrollDownButton.displayName;
|
|
74
|
+
var SelectContent = React__namespace.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
75
|
+
SelectPrimitive__namespace.Content,
|
|
76
|
+
{
|
|
77
|
+
ref,
|
|
78
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
79
|
+
"relative z-50 max-h-52 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
80
|
+
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
81
|
+
className
|
|
82
|
+
),
|
|
83
|
+
position,
|
|
84
|
+
...props,
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectScrollUpButton, {}),
|
|
87
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
88
|
+
SelectPrimitive__namespace.Viewport,
|
|
89
|
+
{
|
|
90
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
91
|
+
"p-1",
|
|
92
|
+
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
|
|
93
|
+
),
|
|
94
|
+
children
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectScrollDownButton, {})
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
) }));
|
|
101
|
+
SelectContent.displayName = SelectPrimitive__namespace.Content.displayName;
|
|
102
|
+
var SelectLabel = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
103
|
+
SelectPrimitive__namespace.Label,
|
|
104
|
+
{
|
|
105
|
+
ref,
|
|
106
|
+
className: chunkFHHISVCH_cjs.cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
|
|
107
|
+
...props
|
|
108
|
+
}
|
|
109
|
+
));
|
|
110
|
+
SelectLabel.displayName = SelectPrimitive__namespace.Label.displayName;
|
|
111
|
+
var SelectItem = React__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
112
|
+
SelectPrimitive__namespace.Item,
|
|
113
|
+
{
|
|
114
|
+
ref,
|
|
115
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
116
|
+
"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
117
|
+
className
|
|
118
|
+
),
|
|
119
|
+
...props,
|
|
120
|
+
children: [
|
|
121
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4" }) }) }),
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsx(SelectPrimitive__namespace.ItemText, { children })
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
));
|
|
126
|
+
SelectItem.displayName = SelectPrimitive__namespace.Item.displayName;
|
|
127
|
+
var SelectSeparator = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
128
|
+
SelectPrimitive__namespace.Separator,
|
|
129
|
+
{
|
|
130
|
+
ref,
|
|
131
|
+
className: chunkFHHISVCH_cjs.cn("-mx-1 my-1 h-px bg-muted", className),
|
|
132
|
+
...props
|
|
133
|
+
}
|
|
134
|
+
));
|
|
135
|
+
SelectSeparator.displayName = SelectPrimitive__namespace.Separator.displayName;
|
|
136
|
+
|
|
137
|
+
exports.Select = Select;
|
|
138
|
+
exports.SelectContent = SelectContent;
|
|
139
|
+
exports.SelectItem = SelectItem;
|
|
140
|
+
exports.SelectTrigger = SelectTrigger;
|
|
141
|
+
exports.SelectValue = SelectValue;
|
|
142
|
+
//# sourceMappingURL=chunk-4KSZUIJE.cjs.map
|
|
143
|
+
//# sourceMappingURL=chunk-4KSZUIJE.cjs.map
|