├── .dockerignore ├── .eslintignore ├── .eslintrc.json ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── dependabot.yml └── workflows │ ├── build_test_lint.yml │ ├── deploy_app.yml │ ├── deploy_docs.yml │ └── publish_container.yaml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── CHANGELOG.alpha.md ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Conformance.md ├── Dockerfile ├── LICENSE ├── LOCAL_DEVELOPMENT.md ├── README.md ├── amplify.yml ├── apps ├── demo-renderer-app │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── README.md │ ├── components.json │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── vite.svg │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── Router.tsx │ │ ├── assets │ │ │ └── react.svg │ │ ├── components │ │ │ ├── CsiroRenderer.tsx │ │ │ ├── FormViewer.tsx │ │ │ ├── Home.tsx │ │ │ ├── InputQuestionnaire.tsx │ │ │ ├── LaunchButton.tsx │ │ │ ├── LaunchContextDetails.tsx │ │ │ ├── LaunchContextPicker.tsx │ │ │ ├── LhcFormsRenderer.tsx │ │ │ ├── PrePopButton.tsx │ │ │ └── ui │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── resizable.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ └── textarea.tsx │ │ ├── hooks │ │ │ ├── useBearerToken.ts │ │ │ ├── useLaunchContext.ts │ │ │ └── useQuestionnaireUrl.ts │ │ ├── lib │ │ │ └── utils.ts │ │ ├── main.tsx │ │ ├── styles │ │ │ └── globals.css │ │ ├── utils │ │ │ ├── apiConstants.ts │ │ │ ├── fetchResource.ts │ │ │ ├── humanName.ts │ │ │ ├── populate.ts │ │ │ ├── populateCallback.ts │ │ │ └── populateInputParams.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts └── smart-forms-app │ ├── .env │ ├── .gitignore │ ├── Dockerfile │ ├── default.conf │ ├── e2e │ ├── _pre-run.spec.ts │ ├── dashboard.spec.ts │ ├── globals.ts │ ├── items.spec.ts │ ├── prepop.spec.ts │ ├── saving.spec.ts │ └── utils │ │ ├── fillBitOfEverything.ts │ │ └── playground.ts │ ├── index.html │ ├── jest.config.js │ ├── jest.config.ts │ ├── package.json │ ├── playwright.config.ts │ ├── public │ └── logo.svg │ ├── src │ ├── App.tsx │ ├── api │ │ ├── client.ts │ │ ├── headers.ts │ │ ├── ontoserver.ts │ │ └── saveQr.ts │ ├── components │ │ ├── Button │ │ │ ├── Button.styles.tsx │ │ │ ├── ReauthenticateButton.tsx │ │ │ ├── RefetchButton.tsx │ │ │ └── UnlaunchedButton.tsx │ │ ├── DebugFooter │ │ │ └── DebugFooter.styles.ts │ │ ├── Header │ │ │ ├── DesktopHeaderIcons.tsx │ │ │ ├── GenericHeader.tsx │ │ │ ├── Header.styles.ts │ │ │ ├── HeaderIcons.tsx │ │ │ ├── MobileHeaderIcons.tsx │ │ │ └── Popovers │ │ │ │ ├── HeaderPopover.tsx │ │ │ │ ├── NotLaunchedPopover.tsx │ │ │ │ ├── PatientPopoverMenu.tsx │ │ │ │ ├── Popover.styles.ts │ │ │ │ ├── QuestionnairePopoverMenu.tsx │ │ │ │ └── UserPopoverMenu.tsx │ │ ├── Iconify │ │ │ └── Iconify.tsx │ │ ├── Layout │ │ │ └── Layout.styles.ts │ │ ├── List │ │ │ └── Lists.styles.tsx │ │ ├── Logos │ │ │ ├── CsiroLogo.tsx │ │ │ ├── EmptyListImage.tsx │ │ │ ├── Logo.styles.ts │ │ │ └── Logo.tsx │ │ ├── Nav │ │ │ ├── Nav.styles.ts │ │ │ ├── NavErrorAlert.tsx │ │ │ └── NavPatientDetails.tsx │ │ ├── Scrollbar │ │ │ ├── Scrollbar.styles.ts │ │ │ └── Scrollbar.tsx │ │ ├── Snackbar │ │ │ ├── CloseSnackbar.tsx │ │ │ └── GoToTestLauncher.tsx │ │ ├── Spinners │ │ │ ├── PopulationProgressSpinner.tsx │ │ │ ├── ProgressSpinner.tsx │ │ │ └── RepopulationProgressSpinner.tsx │ │ ├── Typography │ │ │ └── Typography.tsx │ │ └── Wrapper │ │ │ └── CenteredWrapper.tsx │ ├── contexts │ │ ├── DebugModeContext.tsx │ │ └── SmartClientContext.tsx │ ├── data │ │ ├── images │ │ │ ├── csiro-logo.png │ │ │ └── logo.svg │ │ └── resources │ │ │ ├── 715.R4-modified.json │ │ │ ├── 715.R4.json │ │ │ ├── CVD Check.json │ │ │ ├── CVD Risk-HISO.json │ │ │ ├── CVD Risk.json │ │ │ ├── CVD-Risk-2023.json │ │ │ ├── Questionnaire-AboriginalTorresStraitIslanderHealthCheckAssembled-0.1.0.json │ │ │ └── TestAssembled715.json │ ├── features │ │ ├── backToTop │ │ │ ├── components │ │ │ │ └── BackToTopButton.tsx │ │ │ └── hooks │ │ │ │ └── useBackToTop.ts │ │ ├── dashboard │ │ │ ├── components │ │ │ │ ├── DashboardDebugFooter │ │ │ │ │ └── DashboardDebugFooter.tsx │ │ │ │ ├── DashboardNav │ │ │ │ │ ├── DashboardNav.tsx │ │ │ │ │ ├── DashboardNavItem.tsx │ │ │ │ │ └── DashboardNavSection.tsx │ │ │ │ └── DashboardPages │ │ │ │ │ ├── DashboardTableHead.tsx │ │ │ │ │ ├── DashboardTablePagination.tsx │ │ │ │ │ ├── GenericEmptyFeedback.tsx │ │ │ │ │ ├── PageHeading.tsx │ │ │ │ │ ├── QuestionnairePage │ │ │ │ │ ├── Buttons │ │ │ │ │ │ ├── CreateNewResponseButton.tsx │ │ │ │ │ │ ├── GoToPlaygroundButton.tsx │ │ │ │ │ │ └── ViewExistingResponsesButton.tsx │ │ │ │ │ ├── QuestionnaireTable.tsx │ │ │ │ │ ├── QuestionnaireTableView.tsx │ │ │ │ │ ├── QuestionnairesPage.tsx │ │ │ │ │ └── TableComponents │ │ │ │ │ │ ├── QuestionnaireFeedbackMessage.tsx │ │ │ │ │ │ ├── QuestionnaireLabel.styles.ts │ │ │ │ │ │ ├── QuestionnaireLabel.tsx │ │ │ │ │ │ ├── QuestionnaireListFeedback.tsx │ │ │ │ │ │ ├── QuestionnaireListToolbar.styles.ts │ │ │ │ │ │ ├── QuestionnaireListToolbar.tsx │ │ │ │ │ │ ├── QuestionnaireListToolbarButtons.tsx │ │ │ │ │ │ ├── QuestionnaireTable.styles.ts │ │ │ │ │ │ └── QuestionnaireTableRow.tsx │ │ │ │ │ ├── ResponseEmptyFeedback.tsx │ │ │ │ │ └── ResponsesPage │ │ │ │ │ ├── Buttons │ │ │ │ │ ├── BackToQuestionnairesButton.tsx │ │ │ │ │ └── OpenResponseButton.tsx │ │ │ │ │ ├── ResponsesPage.tsx │ │ │ │ │ ├── ResponsesTable.tsx │ │ │ │ │ ├── ResponsesTableView.tsx │ │ │ │ │ └── TableComponents │ │ │ │ │ ├── ResponseFeedbackMessage.tsx │ │ │ │ │ ├── ResponseLabel.styles.ts │ │ │ │ │ ├── ResponseLabel.tsx │ │ │ │ │ ├── ResponseListFeedback.tsx │ │ │ │ │ ├── ResponseListToolbar.tsx │ │ │ │ │ ├── ResponseListToolbarButtons.tsx │ │ │ │ │ ├── ResponseListToolbarLeftSection.tsx │ │ │ │ │ ├── ResponseListToolbarSearch.tsx │ │ │ │ │ └── ResponseTableRow.tsx │ │ │ ├── contexts │ │ │ │ └── SelectedQuestionnaireContext.tsx │ │ │ ├── hooks │ │ │ │ ├── useFetchExistingResponses.ts │ │ │ │ ├── useFetchQuestionnaires.ts │ │ │ │ ├── useFetchResponses.ts │ │ │ │ └── useSelectedQuestionnaire.ts │ │ │ ├── layout │ │ │ │ └── DashboardLayout.tsx │ │ │ ├── types │ │ │ │ └── list.interface.ts │ │ │ └── utils │ │ │ │ ├── dashboard.ts │ │ │ │ └── tableColumns.ts │ │ ├── easterEgg │ │ │ └── hooks │ │ │ │ └── useClickCounter.ts │ │ ├── notfound │ │ │ ├── NotFound.tsx │ │ │ ├── NotFoundQuickLinks.tsx │ │ │ └── NotFoundSelections.tsx │ │ ├── playground │ │ │ ├── api │ │ │ │ ├── extract.ts │ │ │ │ ├── fetchFhirResources.ts │ │ │ │ └── verifyFhirServer.ts │ │ │ ├── components │ │ │ │ ├── DropBox.tsx │ │ │ │ ├── Dropbox.styles.ts │ │ │ │ ├── ExtractMenu.tsx │ │ │ │ ├── FileCollector.tsx │ │ │ │ ├── JsonEditor.tsx │ │ │ │ ├── Playground.tsx │ │ │ │ ├── PlaygroundAdvancedPropsMenu.tsx │ │ │ │ ├── PlaygroundEnableWhenToggle.tsx │ │ │ │ ├── PlaygroundFhirServerInput.tsx │ │ │ │ ├── PlaygroundHeader.tsx │ │ │ │ ├── PlaygroundLayout.styles.tsx │ │ │ │ ├── PlaygroundLayout.tsx │ │ │ │ ├── PlaygroundPatientPicker.tsx │ │ │ │ ├── PlaygroundPicker.tsx │ │ │ │ ├── PlaygroundQuestionnairePicker.tsx │ │ │ │ ├── PlaygroundRenderer.tsx │ │ │ │ ├── PlaygroundSettingsDialog.tsx │ │ │ │ ├── PlaygroundUserPicker.tsx │ │ │ │ ├── PrePopButtonForPlayground.tsx │ │ │ │ ├── PrePopCallbackForPlayground.tsx │ │ │ │ ├── StoreStateViewer.tsx │ │ │ │ └── StoreStateViewers │ │ │ │ │ ├── ExtractDebuggerViewer.tsx │ │ │ │ │ ├── GenericStatePropertyPicker.tsx │ │ │ │ │ ├── GenericViewer.tsx │ │ │ │ │ ├── QuestionnaireResponseStoreViewer.tsx │ │ │ │ │ ├── QuestionnaireStoreViewer.tsx │ │ │ │ │ ├── SmartConfigStoreViewer.tsx │ │ │ │ │ ├── TemplateExtractDebugTable.tsx │ │ │ │ │ └── TerminologyServerStoreViewer.tsx │ │ │ ├── hooks │ │ │ │ ├── useFetchPatients.ts │ │ │ │ ├── useFetchPractitioners.ts │ │ │ │ ├── useFileDrop.ts │ │ │ │ ├── useLaunchContextNames.ts │ │ │ │ ├── useShowExtractDebuggerStoreProperty.ts │ │ │ │ ├── useShowQuestionnaireResponseStoreProperty.ts │ │ │ │ ├── useShowQuestionnaireStoreProperty.ts │ │ │ │ ├── useShowSmartConfigStoreProperty.ts │ │ │ │ └── useShowTerminologyServerStoreProperty.ts │ │ │ ├── stores │ │ │ │ └── extractDebuggerStore.ts │ │ │ ├── styles │ │ │ │ └── debugTable.css │ │ │ ├── typePredicates │ │ │ │ └── isQuestionnaire.ts │ │ │ └── types │ │ │ │ └── buildState.interface.ts │ │ ├── prepopulate │ │ │ ├── api │ │ │ │ └── requestPopulate.ts │ │ │ ├── hooks │ │ │ │ └── usePopulate.tsx │ │ │ ├── typePredicates │ │ │ │ └── isRecord.ts │ │ │ ├── types │ │ │ │ └── populate.interface.ts │ │ │ └── utils │ │ │ │ ├── callback.ts │ │ │ │ ├── createInputParameters.ts │ │ │ │ ├── getExtensions.ts │ │ │ │ └── populate.ts │ │ ├── preview │ │ │ └── utils │ │ │ │ └── preview.ts │ │ ├── renderer │ │ │ ├── components │ │ │ │ ├── ExistingResponses │ │ │ │ │ ├── ExistingResponseTableToolbar.tsx │ │ │ │ │ ├── ExistingResponsesPage.tsx │ │ │ │ │ ├── ExistingResponsesTable.tsx │ │ │ │ │ ├── ExistingResponsesTableFeedback.tsx │ │ │ │ │ ├── ExistingResponsesTableToolbarButtons.tsx │ │ │ │ │ ├── ExistingResponsesTableToolbarLeftSection.tsx │ │ │ │ │ └── ExistingResponsesTableView.tsx │ │ │ │ ├── FormPage │ │ │ │ │ ├── FormInvalid.tsx │ │ │ │ │ ├── FormRenderer │ │ │ │ │ │ └── FormWrapper.tsx │ │ │ │ │ └── ViewerInvalid.tsx │ │ │ │ ├── FormPreviewPage │ │ │ │ │ └── FormPreview.tsx │ │ │ │ ├── NavCollapseButton.tsx │ │ │ │ ├── RendererActions │ │ │ │ │ ├── BackToQuestionnairesAction.tsx │ │ │ │ │ ├── PreviewAction.tsx │ │ │ │ │ ├── RendererSaveAsFinalDialog.tsx │ │ │ │ │ ├── RendererSaveAsFinalWriteBackDialog.tsx │ │ │ │ │ ├── RepopulateAction.tsx │ │ │ │ │ ├── SaveAsFinalAction.tsx │ │ │ │ │ ├── SaveProgressAction.tsx │ │ │ │ │ └── ViewExistingResponsesAction.tsx │ │ │ │ ├── RendererDebugFooter │ │ │ │ │ ├── DebugPanel.tsx │ │ │ │ │ ├── DebugResponseView.tsx │ │ │ │ │ ├── RendererDebugBar.tsx │ │ │ │ │ └── RendererDebugFooter.tsx │ │ │ │ ├── RendererEmbeddedSpeedDial │ │ │ │ │ ├── RendererEmbeddedLaunchQuestionnaireActions.tsx │ │ │ │ │ ├── RendererEmbeddedSpeedDial.tsx │ │ │ │ │ └── RendererEmbeddedStandardActions.tsx │ │ │ │ ├── RendererHeader │ │ │ │ │ ├── RendererHeader.tsx │ │ │ │ │ └── UpdatingIndicator.tsx │ │ │ │ ├── RendererLayout.styles.ts │ │ │ │ ├── RendererLayout.tsx │ │ │ │ └── RendererNav │ │ │ │ │ ├── BlockerUnsavedFormDialog.tsx │ │ │ │ │ ├── ExistingResponsesBadgeIcon.tsx │ │ │ │ │ ├── RendererNav.tsx │ │ │ │ │ ├── RendererNavDrawer.tsx │ │ │ │ │ ├── RendererNavLaunchQuestionnaireActions.tsx │ │ │ │ │ ├── RendererNavStandardActions.tsx │ │ │ │ │ ├── RendererNavWrapper.tsx │ │ │ │ │ └── RendererOperationItem.tsx │ │ │ ├── hooks │ │ │ │ └── useBlocker.ts │ │ │ ├── types │ │ │ │ └── rendererSpinner.ts │ │ │ └── utils │ │ │ │ ├── itemControl.ts │ │ │ │ └── jsonTreeTheme.ts │ │ ├── repopulate │ │ │ ├── components │ │ │ │ ├── RepopulateBackdrop.tsx │ │ │ │ ├── RepopulateDialog.tsx │ │ │ │ ├── RepopulateEmptyDialog.tsx │ │ │ │ ├── RepopulateGridGroup.tsx │ │ │ │ ├── RepopulateGroupTable.tsx │ │ │ │ ├── RepopulateItemSwitcher.tsx │ │ │ │ ├── RepopulateList.tsx │ │ │ │ ├── RepopulateListItem.tsx │ │ │ │ ├── RepopulateRepeatGroup.tsx │ │ │ │ ├── RepopulateRepeatItem.tsx │ │ │ │ ├── RepopulateSelectDialog.tsx │ │ │ │ └── RepopulateSingleItem.tsx │ │ │ ├── stores │ │ │ │ └── RepopulationStore.ts │ │ │ └── utils │ │ │ │ └── repopulateSorting.ts │ │ ├── smartAppLaunch │ │ │ ├── components │ │ │ │ ├── AuthDebugErrorMessage.tsx │ │ │ │ ├── AuthDebugFhirClient.tsx │ │ │ │ ├── AuthDebugLaunchContexts.tsx │ │ │ │ ├── Authorisation.styles.tsx │ │ │ │ ├── Authorisation.tsx │ │ │ │ ├── Launch.tsx │ │ │ │ ├── LaunchView.tsx │ │ │ │ └── RenderAuthStatus.tsx │ │ │ ├── hooks │ │ │ │ └── useAuthRedirectHook.ts │ │ │ ├── types │ │ │ │ └── authorisation.interface.ts │ │ │ └── utils │ │ │ │ ├── launch.ts │ │ │ │ └── launchContext.ts │ │ ├── standalone │ │ │ ├── components │ │ │ │ ├── Standalone.tsx │ │ │ │ ├── StandalonePropsPicker.tsx │ │ │ │ ├── StandaloneQuestionnairePicker.tsx │ │ │ │ └── StandaloneResourceViewer.tsx │ │ │ ├── data │ │ │ │ ├── AddVariablesTestGrid.json │ │ │ │ ├── Q715.json │ │ │ │ ├── QBitOfEverything.json │ │ │ │ ├── QCVDRisk.json │ │ │ │ ├── QDemoAnsExp.json │ │ │ │ ├── QTestGrid.json │ │ │ │ ├── R715.json │ │ │ │ ├── RCVDRisk.json │ │ │ │ ├── RDemoAnsExp.json │ │ │ │ └── RTestGrid.json │ │ │ ├── interfaces │ │ │ │ └── standalone.interface.ts │ │ │ └── utils │ │ │ │ └── standaloneList.ts │ │ ├── tokenTimer │ │ │ ├── components │ │ │ │ ├── AutoSaveDialog.tsx │ │ │ │ ├── TokenTimer.tsx │ │ │ │ ├── TokenTimerDialog.tsx │ │ │ │ └── TokenTimerIndicator.tsx │ │ │ ├── types │ │ │ │ └── autosave.ts │ │ │ └── utils │ │ │ │ ├── formatDisplayTime.ts │ │ │ │ └── tokenTimer.ts │ │ └── viewer │ │ │ ├── ResponsePreview.tsx │ │ │ ├── ViewerLayout.tsx │ │ │ └── ViewerNav │ │ │ ├── SaveAsFinal │ │ │ ├── ViewerSaveAsFinal.tsx │ │ │ └── ViewerSaveAsFinalDialog.tsx │ │ │ ├── ViewerLaunchQuestionnaireNavSection.tsx │ │ │ ├── ViewerNav.tsx │ │ │ ├── ViewerNavSection.tsx │ │ │ ├── ViewerOperationItem.tsx │ │ │ └── ViewerOperationSection.tsx │ ├── globals.ts │ ├── hooks │ │ ├── useDebugMode.ts │ │ └── useSmartClient.ts │ ├── main.tsx │ ├── router │ │ └── Router.tsx │ ├── stores │ │ └── selector.ts │ ├── theme │ │ ├── Theme.tsx │ │ ├── globalStyles.tsx │ │ ├── overrides │ │ │ ├── backdropOverride.ts │ │ │ ├── combinedComponentOverrides.ts │ │ │ └── dialogOverride.ts │ │ ├── palette.ts │ │ ├── shadows.ts │ │ └── typography.ts │ ├── types │ │ ├── Nav.interface.ts │ │ ├── printComponentRefContext.type.ts │ │ ├── simplebar-react.d.ts │ │ └── source.interface.ts │ ├── utils │ │ ├── assemble.ts │ │ ├── dayjsExtend.ts │ │ ├── extract.ts │ │ ├── manageForm.ts │ │ ├── qrItem.ts │ │ └── snackbar.ts │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── assets ├── calculation.png ├── enablewhen-age-groups.png ├── generic-form.png ├── ontoserver-expand.png ├── population-medical-history.png ├── population-patient-details.png ├── preview.png └── responses.png ├── deployment ├── cloudfront │ └── SmartFormsRedirectToCorrectRoute.js ├── ehr-proxy │ ├── ehr-proxy-app │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── bin │ │ │ └── ehr-proxy-app.ts │ │ ├── cdk.json │ │ ├── jest.config.js │ │ ├── lib │ │ │ └── ehr-proxy-app-stack.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── extract-endpoint │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── lib │ │ │ └── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── hapi-endpoint │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── lib │ │ │ └── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── smart-proxy │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── lib │ │ │ └── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ └── transform-endpoint │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── lib │ │ └── index.ts │ │ ├── package.json │ │ └── tsconfig.json └── forms-server │ ├── assemble-endpoint │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── jest.config.js │ ├── lib │ │ └── index.ts │ ├── package.json │ └── tsconfig.json │ ├── forms-server-app │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── bin │ │ └── forms-server-app.ts │ ├── cdk.json │ ├── jest.config.js │ ├── lib │ │ └── forms-server-app-stack.ts │ ├── package.json │ └── tsconfig.json │ ├── hapi-endpoint │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── jest.config.js │ ├── lib │ │ └── index.ts │ ├── package.json │ └── tsconfig.json │ └── populate-endpoint │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── jest.config.js │ ├── lib │ └── index.ts │ ├── package.json │ └── tsconfig.json ├── docker-compose.yaml ├── docs └── progress │ └── template-extraction.md ├── documentation ├── .gitignore ├── README.md ├── babel.config.js ├── docs │ ├── api │ │ ├── index.mdx │ │ ├── sdc-assemble │ │ │ ├── functions │ │ │ │ ├── assemble.md │ │ │ │ └── isInputParameters.md │ │ │ ├── index.md │ │ │ ├── interfaces │ │ │ │ ├── FetchQuestionnaireCallback.md │ │ │ │ ├── InputParameters.md │ │ │ │ ├── OutcomeParameter.md │ │ │ │ └── OutputParameters.md │ │ │ └── typedoc-sidebar.cjs │ │ ├── sdc-populate │ │ │ ├── functions │ │ │ │ ├── isCanonicalParameter.md │ │ │ │ ├── isContextParameter.md │ │ │ │ ├── isInputParameters.md │ │ │ │ ├── isOutputParameters.md │ │ │ │ ├── isSubjectParameter.md │ │ │ │ ├── populate.md │ │ │ │ └── populateQuestionnaire.md │ │ │ ├── index.md │ │ │ ├── interfaces │ │ │ │ ├── CustomContextResultParameter.md │ │ │ │ ├── FetchResourceCallback.md │ │ │ │ ├── FetchTerminologyCallback.md │ │ │ │ ├── IdentifierParameter.md │ │ │ │ ├── InputParameters.md │ │ │ │ ├── IssuesParameter.md │ │ │ │ ├── OutputParameters.md │ │ │ │ ├── PopulateQuestionnaireParams.md │ │ │ │ ├── PopulateResult.md │ │ │ │ ├── QuestionnaireRefParameter.md │ │ │ │ ├── ResponseParameter.md │ │ │ │ └── TerminologyRequestConfig.md │ │ │ └── typedoc-sidebar.cjs │ │ └── smart-forms-renderer │ │ │ ├── functions │ │ │ ├── BaseRenderer.md │ │ │ ├── BooleanField.md │ │ │ ├── ChoiceRadioSingle.md │ │ │ ├── DecimalField.md │ │ │ ├── FullWidthFormComponentBox.md │ │ │ ├── GridGroup.md │ │ │ ├── GroupItem.md │ │ │ ├── GroupTable.md │ │ │ ├── InitialiseFormWrapperForStorybook.md │ │ │ ├── ItemFieldGrid.md │ │ │ ├── ItemLabelWrapper.md │ │ │ ├── RendererThemeProvider.md │ │ │ ├── RepeatGroup.md │ │ │ ├── RepeatItem.md │ │ │ ├── SingleItem.md │ │ │ ├── SmartFormsRenderer.md │ │ │ ├── StringField.md │ │ │ ├── buildForm.md │ │ │ ├── createEmptyQrGroup.md │ │ │ ├── createEmptyQrItem.md │ │ │ ├── destroyForm.md │ │ │ ├── extractObservationBased.md │ │ │ ├── generateItemsToRepopulate.md │ │ │ ├── getDecimalPrecision.md │ │ │ ├── getQrItemsIndex.md │ │ │ ├── getQuestionnaireItem.md │ │ │ ├── getResponse.md │ │ │ ├── initialiseQuestionnaireResponse.md │ │ │ ├── isHiddenByEnableWhen.md │ │ │ ├── isRepeatItemAndNotCheckbox.md │ │ │ ├── isSpecificItemControl.md │ │ │ ├── mapQItemsIndex.md │ │ │ ├── objectIsCoding.md │ │ │ ├── parseDecimalStringToFloat.md │ │ │ ├── parseDecimalStringWithPrecision.md │ │ │ ├── parseFhirDateToDisplayDate.md │ │ │ ├── removeEmptyAnswersFromResponse.md │ │ │ ├── removeInternalIdsFromResponse.md │ │ │ ├── repopulateResponse.md │ │ │ ├── updateQrItemsInGroup.md │ │ │ ├── useBuildForm.md │ │ │ ├── useCodingCalculatedExpression.md │ │ │ ├── useDisplayCqfAndCalculatedExpression.md │ │ │ ├── useHidden.md │ │ │ ├── useReadOnly.md │ │ │ ├── useRendererQueryClient.md │ │ │ ├── useRenderingExtensions.md │ │ │ ├── useStringCalculatedExpression.md │ │ │ ├── useValidationFeedback.md │ │ │ └── useValueSetCodings.md │ │ │ ├── index.md │ │ │ ├── interfaces │ │ │ ├── CalculatedExpression.md │ │ │ ├── InitialiseFormWrapperProps.md │ │ │ ├── ItemToRepopulate.md │ │ │ ├── LaunchContext.md │ │ │ ├── QItemOverrideComponentProps.md │ │ │ ├── QuestionnaireResponseStoreType.md │ │ │ ├── QuestionnaireStoreType.md │ │ │ ├── RendererStyling.md │ │ │ ├── RendererStylingStoreType.md │ │ │ ├── SdcUiOverrideComponentProps.md │ │ │ ├── SmartConfigStoreType.md │ │ │ ├── SmartFormsRendererProps.md │ │ │ ├── TerminologyServerStoreType.md │ │ │ ├── VariableXFhirQuery.md │ │ │ └── Variables.md │ │ │ ├── type-aliases │ │ │ ├── Tab.md │ │ │ └── Tabs.md │ │ │ ├── typedoc-sidebar.cjs │ │ │ └── variables │ │ │ ├── questionnaireResponseStore.md │ │ │ ├── questionnaireStore.md │ │ │ ├── rendererStylingStore.md │ │ │ ├── smartConfigStore.md │ │ │ ├── terminologyServerStore.md │ │ │ ├── useQuestionnaireResponseStore.md │ │ │ ├── useQuestionnaireStore.md │ │ │ ├── useRendererStylingStore.md │ │ │ ├── useSmartConfigStore.md │ │ │ └── useTerminologyServerStore.md │ ├── components │ │ ├── attachment.mdx │ │ ├── boolean.mdx │ │ ├── choice.mdx │ │ ├── date.mdx │ │ ├── dateTime.mdx │ │ ├── decimal.mdx │ │ ├── display.mdx │ │ ├── group.mdx │ │ ├── index.mdx │ │ ├── integer.mdx │ │ ├── open-choice.mdx │ │ ├── quantity.mdx │ │ ├── reference.mdx │ │ ├── string.mdx │ │ ├── text.mdx │ │ ├── time.mdx │ │ └── url.mdx │ ├── dev │ │ ├── index.mdx │ │ ├── renderer-overview.mdx │ │ ├── renderer-utilities.mdx │ │ └── storehooks │ │ │ ├── index.mdx │ │ │ ├── questionnaire-response-store │ │ │ ├── form-changes-history.mdx │ │ │ ├── index.mdx │ │ │ ├── invalid-items.mdx │ │ │ ├── response-is-valid.mdx │ │ │ ├── source-response.mdx │ │ │ ├── updatable-response-items.mdx │ │ │ └── updatable-response.mdx │ │ │ ├── questionnaire-store │ │ │ ├── calculated-expressions.mdx │ │ │ ├── fhirpath-context.mdx │ │ │ ├── focused-linkid.mdx │ │ │ ├── index.mdx │ │ │ ├── item-types.mdx │ │ │ ├── source-questionnaire.mdx │ │ │ └── variables.mdx │ │ │ ├── smart-config-store.mdx │ │ │ └── terminology-server-store │ │ │ ├── index.mdx │ │ │ └── url.mdx │ ├── index.md │ ├── operations │ │ ├── assemble.mdx │ │ ├── extract.mdx │ │ ├── index.mdx │ │ └── populate.mdx │ └── sdc │ │ ├── advanced │ │ ├── constraint.mdx │ │ ├── display.mdx │ │ ├── fundamental.mdx │ │ ├── group.mdx │ │ ├── index.mdx │ │ └── question.mdx │ │ ├── calculations.mdx │ │ ├── conditional.mdx │ │ ├── index.mdx │ │ ├── population.mdx │ │ └── terminology.mdx ├── docusaurus.config.ts ├── package.json ├── sidebars.ts ├── src │ ├── css │ │ └── custom.css │ ├── react │ │ ├── Iconify.tsx │ │ ├── IframeContainer.tsx │ │ ├── IframeResizer.tsx │ │ ├── OpenInStorybook.tsx │ │ └── iframeResizerParent.js │ ├── theme │ │ └── ReactLiveScope │ │ │ ├── index.tsx │ │ │ └── questionnaires.ts │ └── vars │ │ └── sdc.ts ├── static │ ├── .nojekyll │ └── img │ │ ├── docusaurus-social-card.jpg │ │ ├── docusaurus.png │ │ ├── favicon.ico │ │ ├── logo-sf.svg │ │ ├── logo.svg │ │ ├── undraw_docusaurus_mountain.svg │ │ ├── undraw_docusaurus_react.svg │ │ └── undraw_docusaurus_tree.svg ├── tsconfig.json └── tsdoc.json ├── launch-with-questionnaire.png ├── launch.png ├── package-lock.json ├── package.json ├── packages ├── sdc-assemble │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── jest.config.ts │ ├── package.json │ ├── src │ │ ├── index.ts │ │ ├── interfaces │ │ │ ├── callback.interface.ts │ │ │ ├── index.ts │ │ │ └── parameters.interface.ts │ │ └── utils │ │ │ ├── assemble.ts │ │ │ ├── canonical.ts │ │ │ ├── duplicateEnableWhen.ts │ │ │ ├── duplicateLinkIds.ts │ │ │ ├── fetchSubquestionnaires.ts │ │ │ ├── getProperties.ts │ │ │ ├── index.ts │ │ │ ├── operationOutcome.ts │ │ │ ├── parameters.ts │ │ │ ├── propagate.ts │ │ │ └── typePredicates.ts │ ├── test │ │ ├── assemble.spec.ts │ │ └── resources │ │ │ ├── assemble-input-params.json │ │ │ └── assembled.json │ └── tsconfig.json ├── sdc-populate │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── jest.config.ts │ ├── package.json │ ├── src │ │ ├── SDCPopulateQuestionnaireOperation │ │ │ ├── api │ │ │ │ ├── expandValueset.ts │ │ │ │ ├── fetchQuestionnaire.ts │ │ │ │ └── lookupCodeSystem.ts │ │ │ ├── index.ts │ │ │ ├── interfaces │ │ │ │ ├── callback.interface.ts │ │ │ │ ├── expressions.interface.ts │ │ │ │ ├── index.ts │ │ │ │ ├── inputParameters.interface.ts │ │ │ │ └── outputParameters.interface.ts │ │ │ └── utils │ │ │ │ ├── addDisplayToCodings.ts │ │ │ │ ├── answerOption.ts │ │ │ │ ├── codingProperties.ts │ │ │ │ ├── constructResponse.ts │ │ │ │ ├── createFhirPathContext.ts │ │ │ │ ├── createOutputParameters.ts │ │ │ │ ├── createQuestionnaireReference.ts │ │ │ │ ├── emptyResource.ts │ │ │ │ ├── evaluateExpressions.ts │ │ │ │ ├── genericRecursive.ts │ │ │ │ ├── index.ts │ │ │ │ ├── misc.ts │ │ │ │ ├── operationOutcome.ts │ │ │ │ ├── parse.ts │ │ │ │ ├── populate.ts │ │ │ │ ├── processValueSets.ts │ │ │ │ ├── readPopulationExpressions.ts │ │ │ │ ├── removeEmptyAnswers.ts │ │ │ │ ├── sortResourceArrays.ts │ │ │ │ ├── typePredicates.ts │ │ │ │ └── variableProcessing.ts │ │ ├── globals.ts │ │ ├── inAppPopulation │ │ │ ├── index.ts │ │ │ ├── interfaces │ │ │ │ └── inAppPopulation.interface.ts │ │ │ └── utils │ │ │ │ ├── createInputParameters.ts │ │ │ │ ├── index.ts │ │ │ │ └── populateQuestionnaire.ts │ │ ├── index.ts │ │ └── test │ │ │ ├── PopulateOperation.test.ts │ │ │ ├── defaultTerminologyRequest.test.ts │ │ │ ├── evaluateInitialExpressions.test.ts │ │ │ ├── fetchResourceCallbackTest.ts │ │ │ ├── inAppPopulation.test.ts │ │ │ ├── readInitialExpressions.test.ts │ │ │ └── resources │ │ │ ├── 715-v.json │ │ │ ├── PatSmartForm.ts │ │ │ ├── PracPrimaryPeter.ts │ │ │ ├── QuesBmiCalculation.ts │ │ │ ├── context-sample.json │ │ │ ├── initial-expressions-sample.json │ │ │ ├── input-params-sample-resolved.json │ │ │ └── input-params-sample.json │ └── tsconfig.json ├── sdc-template-extract │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── jest.config.ts │ ├── package.json │ ├── src │ │ ├── SDCExtractQuestionnaireResponseOperation │ │ │ ├── index.ts │ │ │ ├── interfaces │ │ │ │ ├── bundle.interface.ts │ │ │ │ ├── callback.interface.ts │ │ │ │ ├── customDebugInfo.interface.ts │ │ │ │ ├── entryPathPosition.interface.ts │ │ │ │ ├── fhirpatch.interface.ts │ │ │ │ ├── index.ts │ │ │ │ ├── inputParameters.interface.ts │ │ │ │ ├── outputParameters.interface.ts │ │ │ │ ├── templateExtractPath.interface.ts │ │ │ │ └── templateExtractReference.interface.ts │ │ │ ├── tests │ │ │ │ ├── callbacks │ │ │ │ │ └── fetchResourceCallbackTest.ts │ │ │ │ ├── extract.test.ts │ │ │ │ ├── parseFhirPath.test.ts │ │ │ │ └── resources │ │ │ │ │ ├── extracted │ │ │ │ │ ├── extractedAllergiesAdverseReactions.ts │ │ │ │ │ ├── extractedComplexTemplateExtract.ts │ │ │ │ │ ├── extractedImmunisation.ts │ │ │ │ │ ├── extractedMedicalHistoryCurrentProblems.ts │ │ │ │ │ ├── extractedRegularMedications.ts │ │ │ │ │ └── extractedRegularMedicationsModified.ts │ │ │ │ │ ├── questionnaireResponses │ │ │ │ │ ├── QRAllergiesAdverseReactions.ts │ │ │ │ │ ├── QRComplexTemplateExtract.ts │ │ │ │ │ ├── QRImmunisation.ts │ │ │ │ │ ├── QRMedicalHistoryCurrentProblems.ts │ │ │ │ │ ├── QRRegularMedications.ts │ │ │ │ │ └── QRRegularMedicationsModified.ts │ │ │ │ │ └── questionnaires │ │ │ │ │ ├── QAllergiesAdverseReactions.ts │ │ │ │ │ ├── QComplexTemplateExtract.ts │ │ │ │ │ ├── QImmunisation.ts │ │ │ │ │ ├── QMedicalHistoryCurrentProblems.ts │ │ │ │ │ ├── QMedicalHistoryCurrentProblemsWithPatch.ts │ │ │ │ │ ├── QRegularMedications.ts │ │ │ │ │ └── QRegularMedicationsModified.ts │ │ │ └── utils │ │ │ │ ├── buildBundle.ts │ │ │ │ ├── buildValueToInsert.ts │ │ │ │ ├── createFhirPathContext.ts │ │ │ │ ├── createInputParameters.ts │ │ │ │ ├── createOutputParameters.ts │ │ │ │ ├── entryPathPosition.ts │ │ │ │ ├── evaluateTemplateExtractPath.ts │ │ │ │ ├── expressionManipulation.ts │ │ │ │ ├── extract.ts │ │ │ │ ├── extractAllocateId.ts │ │ │ │ ├── fetchQuestionnaire.ts │ │ │ │ ├── fhirpathEvaluate.ts │ │ │ │ ├── filterResources.ts │ │ │ │ ├── getComparisonSourceResponse.ts │ │ │ │ ├── getQuestionnaireResponse.ts │ │ │ │ ├── index.ts │ │ │ │ ├── logging.ts │ │ │ │ ├── mapToRecord.ts │ │ │ │ ├── misc.ts │ │ │ │ ├── operationOutcome.ts │ │ │ │ ├── parseFhirPath.ts │ │ │ │ ├── populateIntoTemplates.ts │ │ │ │ ├── removeTemplateArtifacts.ts │ │ │ │ ├── staticTemplateData.ts │ │ │ │ ├── templateExtractPath.ts │ │ │ │ ├── templateExtractRef.ts │ │ │ │ ├── templateInsert.ts │ │ │ │ ├── templateMap.ts │ │ │ │ ├── typePredicates.ts │ │ │ │ └── walkTemplate.ts │ │ ├── inAppExtraction │ │ │ ├── index.ts │ │ │ ├── interfaces │ │ │ │ ├── extract.interface.ts │ │ │ │ └── index.ts │ │ │ └── utils │ │ │ │ ├── extract.ts │ │ │ │ ├── index.ts │ │ │ │ └── typePredicates.ts │ │ └── index.ts │ └── tsconfig.json └── smart-forms-renderer │ ├── .gitignore │ ├── .npmignore │ ├── .storybook │ ├── main.ts │ └── preview.tsx │ ├── README.md │ ├── __mocks__ │ └── zustand.ts │ ├── jest.config.ts │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── Storybook_Renderer_Version.mdx │ ├── api │ │ └── smartClient.ts │ ├── components │ │ ├── Alert.styles.ts │ │ ├── Box.styles.ts │ │ ├── Checkbox.styles.ts │ │ ├── FormComponents │ │ │ ├── AttachmentItem │ │ │ │ ├── AttachmentField.tsx │ │ │ │ ├── AttachmentFieldWrapper.tsx │ │ │ │ ├── AttachmentFileCollector.tsx │ │ │ │ ├── AttachmentFileDropBox.styles.ts │ │ │ │ ├── AttachmentFileDropBox.tsx │ │ │ │ ├── AttachmentItem.tsx │ │ │ │ └── AttachmentUrlField.tsx │ │ │ ├── BooleanItem │ │ │ │ ├── BooleanField.tsx │ │ │ │ ├── BooleanItem.tsx │ │ │ │ └── index.ts │ │ │ ├── Button.styles.ts │ │ │ ├── ChoiceItems │ │ │ │ ├── CheckboxOptionList.tsx │ │ │ │ ├── ChoiceAutocompleteField.tsx │ │ │ │ ├── ChoiceAutocompleteItem.tsx │ │ │ │ ├── ChoiceCheckboxAnswerOptionFields.tsx │ │ │ │ ├── ChoiceCheckboxAnswerOptionItem.tsx │ │ │ │ ├── ChoiceCheckboxAnswerValueSetFields.tsx │ │ │ │ ├── ChoiceCheckboxAnswerValueSetItem.tsx │ │ │ │ ├── ChoiceItemSwitcher.tsx │ │ │ │ ├── ChoiceRadioAnswerOptionFields.tsx │ │ │ │ ├── ChoiceRadioAnswerOptionItem.tsx │ │ │ │ ├── ChoiceRadioAnswerOptionView.tsx │ │ │ │ ├── ChoiceRadioAnswerValueSetFields.tsx │ │ │ │ ├── ChoiceRadioAnswerValueSetItem.tsx │ │ │ │ ├── ChoiceRadioSingle.tsx │ │ │ │ ├── ChoiceSelectAnswerOptionFields.tsx │ │ │ │ ├── ChoiceSelectAnswerOptionItem.tsx │ │ │ │ ├── ChoiceSelectAnswerOptionView.tsx │ │ │ │ ├── ChoiceSelectAnswerValueSetFields.tsx │ │ │ │ ├── ChoiceSelectAnswerValueSetItem.tsx │ │ │ │ └── index.ts │ │ │ ├── DateTimeItems │ │ │ │ ├── CustomDateItem │ │ │ │ │ ├── CustomDateField.tsx │ │ │ │ │ ├── CustomDateItem.tsx │ │ │ │ │ ├── DatePicker.tsx │ │ │ │ │ ├── DatePickerButton.tsx │ │ │ │ │ └── MuiDatePicker.ts │ │ │ │ ├── CustomDateTimeItem │ │ │ │ │ ├── CustomDateTimeItem.tsx │ │ │ │ │ ├── CustomTimeField.tsx │ │ │ │ │ └── DateTimeField.tsx │ │ │ │ ├── index.ts │ │ │ │ └── utils │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── parseDate.ts │ │ │ │ │ └── parseTime.ts │ │ │ ├── DecimalItem │ │ │ │ ├── DecimalField.tsx │ │ │ │ ├── DecimalItem.tsx │ │ │ │ └── index.ts │ │ │ ├── DisplayItem │ │ │ │ ├── DisplayInstructions.styles.ts │ │ │ │ ├── DisplayInstructions.tsx │ │ │ │ └── DisplayItem.tsx │ │ │ ├── GridGroup │ │ │ │ ├── GridGroup.tsx │ │ │ │ ├── GridRow.tsx │ │ │ │ ├── GridTable.tsx │ │ │ │ └── index.ts │ │ │ ├── GroupItem │ │ │ │ ├── GroupAccordion.styles.ts │ │ │ │ ├── GroupHeading.tsx │ │ │ │ ├── GroupItem.styles.ts │ │ │ │ ├── GroupItem.tsx │ │ │ │ ├── GroupItemSwitcher.tsx │ │ │ │ ├── GroupItemView.tsx │ │ │ │ ├── NextPageButton.tsx │ │ │ │ ├── NextTabButton.tsx │ │ │ │ ├── PageButtonWrapper.tsx │ │ │ │ ├── PreviousPageButton.tsx │ │ │ │ ├── PreviousTabButton.tsx │ │ │ │ ├── TabButtonsWrapper.tsx │ │ │ │ └── index.ts │ │ │ ├── IntegerItem │ │ │ │ ├── IntegerField.tsx │ │ │ │ └── IntegerItem.tsx │ │ │ ├── Item.styles.ts │ │ │ ├── ItemParts │ │ │ │ ├── CheckboxFormGroup.tsx │ │ │ │ ├── CheckboxSingle.tsx │ │ │ │ ├── CheckboxSingleWithOpenLabel.tsx │ │ │ │ ├── ClearButtonAdornment.tsx │ │ │ │ ├── ClearInputButton.tsx │ │ │ │ ├── ContextDisplayItem.tsx │ │ │ │ ├── DisplayUnitText.tsx │ │ │ │ ├── FadingCheckIcon.tsx │ │ │ │ ├── FlyoverHoverCard.tsx │ │ │ │ ├── FlyoverItem.tsx │ │ │ │ ├── ItemFieldGrid.tsx │ │ │ │ ├── ItemLabel.tsx │ │ │ │ ├── ItemTextSwitcher.tsx │ │ │ │ ├── OpenLabelField.tsx │ │ │ │ ├── RadioButtonWithOpenLabel.tsx │ │ │ │ ├── RadioFormGroup.tsx │ │ │ │ ├── RadioOptionList.tsx │ │ │ │ ├── RequiredAsterisk.tsx │ │ │ │ └── index.ts │ │ │ ├── Lists.styles.ts │ │ │ ├── OpenChoiceItems │ │ │ │ ├── OpenChoiceAutocompleteField.tsx │ │ │ │ ├── OpenChoiceAutocompleteItem.tsx │ │ │ │ ├── OpenChoiceCheckboxAnswerOptionFields.tsx │ │ │ │ ├── OpenChoiceCheckboxAnswerOptionItem.tsx │ │ │ │ ├── OpenChoiceCheckboxAnswerValueSetFields.tsx │ │ │ │ ├── OpenChoiceCheckboxAnswerValueSetItem.tsx │ │ │ │ ├── OpenChoiceItemSwitcher.tsx │ │ │ │ ├── OpenChoiceRadioAnswerOptionFields.tsx │ │ │ │ ├── OpenChoiceRadioAnswerOptionItem.tsx │ │ │ │ ├── OpenChoiceRadioAnswerValueSetFields.tsx │ │ │ │ ├── OpenChoiceRadioAnswerValueSetItem.tsx │ │ │ │ ├── OpenChoiceSelectAnswerOptionField.tsx │ │ │ │ ├── OpenChoiceSelectAnswerOptionItem.tsx │ │ │ │ ├── OpenChoiceSelectAnswerValueSetField.tsx │ │ │ │ └── OpenChoiceSelectAnswerValueSetItem.tsx │ │ │ ├── QuantityItem │ │ │ │ ├── QuantityComparatorField.tsx │ │ │ │ ├── QuantityField.tsx │ │ │ │ ├── QuantityItem.tsx │ │ │ │ └── QuantityUnitField.tsx │ │ │ ├── RepeatGroup │ │ │ │ ├── AddItemButton.tsx │ │ │ │ ├── DeleteItemButton.tsx │ │ │ │ ├── RepeatGroup.tsx │ │ │ │ ├── RepeatGroupItem.tsx │ │ │ │ ├── RepeatGroupView.tsx │ │ │ │ └── index.ts │ │ │ ├── RepeatItem │ │ │ │ ├── AddItemButton.tsx │ │ │ │ ├── RemoveItemButton.tsx │ │ │ │ ├── RepeatField.tsx │ │ │ │ ├── RepeatItem.styles.tsx │ │ │ │ ├── RepeatItem.tsx │ │ │ │ └── index.ts │ │ │ ├── SingleItem │ │ │ │ ├── NestedSingleItemAccordion.styles.ts │ │ │ │ ├── SingleItem.tsx │ │ │ │ ├── SingleItemSwitcher.tsx │ │ │ │ ├── SingleItemView.tsx │ │ │ │ ├── SingleNestedItems.tsx │ │ │ │ ├── StopPropagationWrapper.tsx │ │ │ │ └── index.ts │ │ │ ├── SliderItem │ │ │ │ ├── Slider.styles.ts │ │ │ │ ├── SliderDisplayValue.tsx │ │ │ │ ├── SliderField.tsx │ │ │ │ ├── SliderItem.tsx │ │ │ │ └── SliderLabels.tsx │ │ │ ├── StringItem │ │ │ │ ├── StringField.tsx │ │ │ │ ├── StringItem.tsx │ │ │ │ └── index.ts │ │ │ ├── Tables │ │ │ │ ├── AddRowButton.tsx │ │ │ │ ├── GroupTable.tsx │ │ │ │ ├── GroupTableBody.tsx │ │ │ │ ├── GroupTableRow.tsx │ │ │ │ ├── GroupTableRowCells.tsx │ │ │ │ ├── GroupTableView.tsx │ │ │ │ ├── RemoveRowButton.tsx │ │ │ │ ├── SelectRowButton.tsx │ │ │ │ ├── Table.styles.tsx │ │ │ │ └── index.ts │ │ │ ├── TextItem │ │ │ │ ├── MuiTextField.ts │ │ │ │ ├── TextField.tsx │ │ │ │ └── TextItem.tsx │ │ │ ├── Textfield.styles.ts │ │ │ ├── TimeItem │ │ │ │ ├── TimeField.tsx │ │ │ │ └── TimeItem.tsx │ │ │ ├── UrlItem │ │ │ │ ├── UrlField.tsx │ │ │ │ └── UrlItem.tsx │ │ │ └── index.ts │ │ ├── Iconify │ │ │ └── Iconify.tsx │ │ ├── Lists.styles.ts │ │ ├── Radio.styles.tsx │ │ ├── Renderer │ │ │ ├── BaseRenderer.tsx │ │ │ ├── FormBodyCollapsible.tsx │ │ │ ├── FormBodyPageContainer.tsx │ │ │ ├── FormBodyPaginated.tsx │ │ │ ├── FormBodySingleCollapsible.tsx │ │ │ ├── FormBodySingleCollapsibleWrapper.tsx │ │ │ ├── FormBodyTabbed.tsx │ │ │ ├── FormTopLevelItem.tsx │ │ │ ├── SmartFormsRenderer.tsx │ │ │ └── index.ts │ │ ├── Tabs │ │ │ ├── CompleteTabButton.tsx │ │ │ ├── FormBodySingleTab.tsx │ │ │ ├── FormBodyTabList.tsx │ │ │ ├── FormBodyTabListWrapper.tsx │ │ │ └── ShowCompletedTabsSection.tsx │ │ └── index.ts │ ├── globals.ts │ ├── hooks │ │ ├── UseFileDrop.ts │ │ ├── index.ts │ │ ├── useAnswerOptionsToggleExpressions.ts │ │ ├── useAttachmentUrlValidation.ts │ │ ├── useBooleanCalculatedExpression.ts │ │ ├── useBuildForm.ts │ │ ├── useCodingCalculatedExpression.ts │ │ ├── useContextDisplayItems.ts │ │ ├── useDateTimeNonEmpty.ts │ │ ├── useDateValidation.tsx │ │ ├── useDebounce.ts │ │ ├── useDecimalCalculatedExpression.ts │ │ ├── useDisplayCqfAndCalculatedExpression.ts │ │ ├── useDynamicValueSetEffect.ts │ │ ├── useFocusTabHeading.ts │ │ ├── useGroupTableRows.ts │ │ ├── useHidden.ts │ │ ├── useInitialiseForm.ts │ │ ├── useInitialiseGroupTableRows.ts │ │ ├── useInitialiseRepeatAnswers.ts │ │ ├── useInitialiseRepeatGroups.ts │ │ ├── useIntegerCalculatedExpression.ts │ │ ├── useNextAndPreviousVisiblePages.ts │ │ ├── useNextAndPreviousVisibleTabs.ts │ │ ├── useOpenLabel.ts │ │ ├── useParseXhtml.tsx │ │ ├── useQuantityCalculatedExpression.ts │ │ ├── useReadOnly.ts │ │ ├── useRendererQueryClient.ts │ │ ├── useRenderingExtensions.ts │ │ ├── useResponsive.ts │ │ ├── useShowFeedback.ts │ │ ├── useSliderExtensions.ts │ │ ├── useStringCalculatedExpression.ts │ │ ├── useTerminologyServerQuery.ts │ │ ├── useTimeValidation.tsx │ │ ├── useValidationFeedback.ts │ │ └── useValueSetCodings.ts │ ├── index.ts │ ├── interfaces │ │ ├── answerExpression.interface.ts │ │ ├── answerOptionsToggleExpression.interface.ts │ │ ├── calculatedExpression.interface.ts │ │ ├── choice.enum.ts │ │ ├── computedUpdates.interface.ts │ │ ├── enableWhen.interface.ts │ │ ├── groupTable.interface.ts │ │ ├── index.ts │ │ ├── initialExpression.interface.ts │ │ ├── itemPath.interface.ts │ │ ├── lookup.interface.ts │ │ ├── overrideComponent.interface.ts │ │ ├── page.interface.ts │ │ ├── populate.interface.ts │ │ ├── questionnaireStore.interface.ts │ │ ├── regex.interface.ts │ │ ├── renderProps.interface.ts │ │ ├── repeatGroup.interface.ts │ │ ├── tab.interface.ts │ │ ├── targetConstraint.interface.ts │ │ ├── valueSet.interface.ts │ │ └── variables.interface.ts │ ├── setup-jest.ts │ ├── stores │ │ ├── formUpdateQueueStore.ts │ │ ├── index.ts │ │ ├── questionnaireResponseStore.ts │ │ ├── questionnaireStore.ts │ │ ├── rendererStylingStore.ts │ │ ├── selector.ts │ │ ├── smartConfigStore.ts │ │ └── terminologyServerStore.ts │ ├── stories │ │ ├── assets │ │ │ ├── fhirClient │ │ │ │ └── mockFhirClient.ts │ │ │ ├── patients │ │ │ │ └── PatSmartForm.ts │ │ │ ├── practitioners │ │ │ │ └── PracPrimaryPeter.ts │ │ │ └── questionnaires │ │ │ │ ├── AuCoreTestingJson │ │ │ │ ├── AuCoreAllergyIntolerance.json │ │ │ │ ├── AuCoreCondition.json │ │ │ │ ├── AuCoreEncounter.json │ │ │ │ ├── AuCoreImmunization.json │ │ │ │ ├── AuCoreMedicationRequest.json │ │ │ │ ├── AuCoreObservationBP.json │ │ │ │ ├── AuCoreObservationBodyHeight.json │ │ │ │ ├── AuCoreObservationBodyWeight.json │ │ │ │ ├── AuCoreObservationHeartRate.json │ │ │ │ ├── AuCoreObservationSmokingStatus.json │ │ │ │ ├── AuCorePatient.json │ │ │ │ ├── AuCorePractitioner.json │ │ │ │ ├── AuCorePractitionerRole.json │ │ │ │ ├── AuCoreProcedure.json │ │ │ │ ├── AuCoreRespirationRate.json │ │ │ │ └── AuCoreWaistCircumference.json │ │ │ │ ├── QAdvancedAdditionalDisplayContent.ts │ │ │ │ ├── QAdvancedControlAppearance.ts │ │ │ │ ├── QAdvancedOther.ts │ │ │ │ ├── QAdvancedTextApperance.ts │ │ │ │ ├── QAttachment.ts │ │ │ │ ├── QAuCoreTesting.ts │ │ │ │ ├── QBehaviorCalculations.ts │ │ │ │ ├── QBehaviorChoiceRestriction.ts │ │ │ │ ├── QBehaviorOther.ts │ │ │ │ ├── QBehaviorValueConstraints.ts │ │ │ │ ├── QBoolean.ts │ │ │ │ ├── QButtonTester.ts │ │ │ │ ├── QChoice.ts │ │ │ │ ├── QDate.ts │ │ │ │ ├── QDateTime.ts │ │ │ │ ├── QDecimal.ts │ │ │ │ ├── QDisplay.ts │ │ │ │ ├── QFormPopulation.ts │ │ │ │ ├── QGroup.ts │ │ │ │ ├── QGroupTableTester.ts │ │ │ │ ├── QIdRemoverDebugger.ts │ │ │ │ ├── QInteger.ts │ │ │ │ ├── QItemControlDisplay.ts │ │ │ │ ├── QItemControlGroup.ts │ │ │ │ ├── QItemControlQuestion.ts │ │ │ │ ├── QMbs715Tester.ts │ │ │ │ ├── QOpenChoice.ts │ │ │ │ ├── QParameterisedValueSets.ts │ │ │ │ ├── QPrePopTester.ts │ │ │ │ ├── QQuantity.ts │ │ │ │ ├── QReference.ts │ │ │ │ ├── QSingleItems.ts │ │ │ │ ├── QString.ts │ │ │ │ ├── QTerminologyControl.ts │ │ │ │ ├── QText.ts │ │ │ │ ├── QTime.ts │ │ │ │ ├── QUrl.ts │ │ │ │ ├── QValidateTester.ts │ │ │ │ └── index.ts │ │ ├── itemTypes │ │ │ ├── Attachment.stories.tsx │ │ │ ├── Boolean.stories.tsx │ │ │ ├── Choice.stories.tsx │ │ │ ├── Date.stories.tsx │ │ │ ├── DateTime.stories.tsx │ │ │ ├── Decimal.stories.tsx │ │ │ ├── Display.stories.tsx │ │ │ ├── Group.stories.tsx │ │ │ ├── Integer.stories.tsx │ │ │ ├── OpenChoice.stories.tsx │ │ │ ├── Quantity.stories.tsx │ │ │ ├── Reference.stories.tsx │ │ │ ├── String.stories.tsx │ │ │ ├── Text.stories.tsx │ │ │ ├── Time.stories.tsx │ │ │ └── Url.stories.tsx │ │ ├── sdc │ │ │ ├── AdvancedAdditionalDisplayContent.stories.tsx │ │ │ ├── AdvancedControlAppearance.stories.tsx │ │ │ ├── AdvancedOther.stories.tsx │ │ │ ├── AdvancedTextAppearance.stories.tsx │ │ │ ├── BehaviorCalculations.stories.tsx │ │ │ ├── BehaviorChoiceRestriction.stories.tsx │ │ │ ├── BehaviorOther.stories.tsx │ │ │ ├── BehaviorValueConstraints.stories.tsx │ │ │ ├── FormPopulation.stories.tsx │ │ │ ├── ItemControlDisplay.stories.tsx │ │ │ ├── ItemControlGroup.stories.tsx │ │ │ ├── ItemControlQuestion.stories.tsx │ │ │ ├── OtherExtensions.stories.tsx │ │ │ └── ParameterisedValueSets.stories.tsx │ │ ├── storybookWrappers │ │ │ ├── BuildFormButtonForStorybook.tsx │ │ │ ├── BuildFormButtonTesterWrapperForStorybook.tsx │ │ │ ├── BuildFormWrapperForStorybook.tsx │ │ │ ├── FormValidationTesterWrapperForStorybook.tsx │ │ │ ├── FormValidationViewerForStorybook.tsx │ │ │ ├── IdRemoverButtonForStorybook.tsx │ │ │ ├── IdRemoverDebuggerWrapperForStorybook.tsx │ │ │ ├── InitialiseFormWrapperForStorybook.tsx │ │ │ ├── PrePopButtonForStorybook.tsx │ │ │ ├── PrePopWrapperForStorybook.tsx │ │ │ ├── TestCssSheet.css │ │ │ ├── ValidateFormButtonForStorybook.tsx │ │ │ ├── globals.ts │ │ │ ├── iframeResizerChild.js │ │ │ ├── index.ts │ │ │ └── populateCallbackForStorybook.ts │ │ └── testing │ │ │ ├── AuCoreTester.stories.tsx │ │ │ ├── BuildFormButtonTesterWrapper.stories.tsx │ │ │ ├── GroupTableTester.stories.tsx │ │ │ ├── IdRemoverDebuggerWrapper.stories.tsx │ │ │ ├── Mbs715Tester.stories.tsx │ │ │ ├── PrePopButtonTesterWrapper.stories.tsx │ │ │ └── ValidateFormTesterWrapper.stories.tsx │ ├── tests │ │ ├── enableWhen.test.ts │ │ ├── extractObservation.test.ts │ │ ├── initial.test.ts │ │ ├── itemPath.test.ts │ │ ├── removeId.test.ts │ │ ├── test-data │ │ │ ├── enable-when-items-sample.json │ │ │ ├── initial-answers-sample.json │ │ │ ├── initialValueSample.ts │ │ │ ├── linked-questions-map.json │ │ │ ├── observationSample.ts │ │ │ ├── questionnaire-response-sample.json │ │ │ └── removeIdSample.ts │ │ └── useDynamicValueSetEffect.test.ts │ ├── theme │ │ ├── RendererThemeProvider.tsx │ │ ├── customGlobalStyles.tsx │ │ ├── index.ts │ │ ├── overrides │ │ │ ├── accordionOverride.ts │ │ │ ├── autocompleteOverride.ts │ │ │ ├── buttonOverride.ts │ │ │ ├── cardOverride.ts │ │ │ ├── inputOverride.ts │ │ │ ├── paperOverride.ts │ │ │ ├── rendererThemeComponentOverrides.ts │ │ │ ├── speedDialOverride.ts │ │ │ └── tableOverride.ts │ │ ├── rendererThemeOptions.ts │ │ └── typography.ts │ ├── utils │ │ ├── answerOptionsToggleExpressions.ts │ │ ├── calculatedExpression.ts │ │ ├── checkbox.ts │ │ ├── choice.ts │ │ ├── computedUpdates.ts │ │ ├── dayjsExtend.ts │ │ ├── debounce.ts │ │ ├── emptyResource.ts │ │ ├── enableWhen.ts │ │ ├── enableWhenExpression.ts │ │ ├── extractObservation.ts │ │ ├── fhirpath.ts │ │ ├── fileUtils.ts │ │ ├── formChanges.ts │ │ ├── genericRecursive.ts │ │ ├── getExpressionsFromItem.ts │ │ ├── groupTable.ts │ │ ├── headingVariant.ts │ │ ├── index.ts │ │ ├── initialise.ts │ │ ├── itemControl.ts │ │ ├── itemPath.ts │ │ ├── manageForm.ts │ │ ├── mapItem.ts │ │ ├── misc.ts │ │ ├── openChoice.ts │ │ ├── page.ts │ │ ├── parameterisedValueSets.ts │ │ ├── parseInputs.ts │ │ ├── populateContexts.ts │ │ ├── qItem.ts │ │ ├── qrItem.ts │ │ ├── quantity.ts │ │ ├── questionnaireResponseStoreUtils │ │ │ └── updatableResponseItems.ts │ │ ├── questionnaireStoreUtils │ │ │ ├── addAdditionalVariables.ts │ │ │ ├── addDisplayToCodings.ts │ │ │ ├── createQuestionaireModel.ts │ │ │ ├── extractAnswerOptionsToggleExpressions.ts │ │ │ ├── extractContainedValueSets.ts │ │ │ ├── extractLaunchContext.ts │ │ │ ├── extractOtherExtensions.ts │ │ │ ├── extractPages.ts │ │ │ ├── extractTabs.ts │ │ │ ├── extractTargetConstraint.ts │ │ │ ├── extractVariables.ts │ │ │ ├── insertAnswerOptions.ts │ │ │ └── resolveValueSets.ts │ │ ├── removeEmptyAnswers.ts │ │ ├── removeRepeatId.ts │ │ ├── repeatId.ts │ │ ├── repopulateIntoResponse.ts │ │ ├── repopulateItems.ts │ │ ├── slider.ts │ │ ├── tabs.ts │ │ ├── targetConstraint.ts │ │ ├── validate.ts │ │ └── valueSet.ts │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vite.config.ts ├── push-assemble-image.sh ├── push-extract-image.sh ├── push-populate-image.sh ├── resources ├── EHR_Transaction.json ├── Forms_Transaction.json └── searchsetToTransaction.py ├── scripts └── FhirMappingLanguage │ ├── blood-pressure │ ├── fhirmapping.fml │ ├── questionnaire-response.json │ ├── questionnaire.json │ └── questionnaireResponse.json │ └── bmi-calculation │ ├── fhirmapping.fml │ ├── qr.json │ ├── structuremap.json │ └── transform-body.json └── services ├── assemble-express ├── .gitignore ├── Dockerfile ├── README.md ├── example.env ├── package.json ├── src │ ├── callback.ts │ ├── globals.ts │ ├── index.ts │ ├── operationOutcome.ts │ └── questionnaire.ts └── tsconfig.json ├── extract-express ├── .gitignore ├── Dockerfile ├── README.md ├── docker_run_sample.sh ├── example.env ├── package.json ├── src │ ├── debug.ts │ ├── fhirMappingLanguage.ts │ ├── globals.ts │ ├── index.ts │ ├── operationOutcome.ts │ ├── questionnaire.ts │ ├── questionnaireResponse.ts │ ├── structureMap.ts │ └── transform.ts └── tsconfig.json └── populate-express ├── .gitignore ├── Dockerfile ├── README.md ├── example.env ├── package.json ├── src ├── callback.ts ├── globals.ts ├── index.ts └── operationOutcome.ts └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | dist -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | lib 2 | !.storybook 3 | *.config.ts -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior. 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: 'github-actions' 4 | directory: '/' 5 | schedule: 6 | interval: 'weekly' 7 | - package-ecosystem: 'npm' 8 | directory: '/' 9 | schedule: 10 | interval: 'daily' 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | changelog_guide.md 4 | #Mac OS .DS_STORE 5 | .DS_STORE 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | lib 2 | dist 3 | coverage 4 | build 5 | storybook-static 6 | *.md 7 | *.stories.* 8 | *.cjs 9 | *.js 10 | *.config.* 11 | *.html 12 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "tabWidth": 2, 4 | "printWidth": 100, 5 | "singleQuote": true, 6 | "trailingComma": "none", 7 | "bracketSameLine": true 8 | } 9 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM node:20 AS build 3 | 4 | 5 | 6 | 7 | ARG VITE_ONTOSERVER_URL 8 | ARG VITE_FORMS_SERVER_URL 9 | ARG VITE_LAUNCH_SCOPE 10 | ARG VITE_LAUNCH_CLIENT_ID 11 | ARG VITE_IN_APP_POPULATE 12 | ARG VITE_PRESERVE_SYM_LINKS 13 | 14 | ENV VITE_ONTOSERVER_URL $VITE_ONTOSERVER_URL 15 | ENV VITE_FORMS_SERVER_URL $VITE_FORMS_SERVER_URL 16 | ENV VITE_LAUNCH_SCOPE $VITE_LAUNCH_SCOPE 17 | ENV VITE_LAUNCH_CLIENT_ID $VITE_LAUNCH_CLIENT_ID 18 | ENV VITE_IN_APP_POPULATE $VITE_IN_APP_POPULATE 19 | ENV VITE_PRESERVE_SYM_LINKS $VITE_PRESERVE_SYM_LINKS 20 | 21 | RUN mkdir /app 22 | COPY . /app 23 | RUN ls /app 24 | WORKDIR /app 25 | RUN npm install 26 | WORKDIR /app/apps/smart-forms-app 27 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | 'eslint:recommended', 6 | 'plugin:@typescript-eslint/recommended', 7 | 'plugin:react-hooks/recommended' 8 | ], 9 | ignorePatterns: ['dist', '.eslintrc.cjs'], 10 | parser: '@typescript-eslint/parser', 11 | plugins: ['react-refresh'], 12 | rules: { 13 | 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }] 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/README.md: -------------------------------------------------------------------------------- 1 | # Minimal Demo Renderer App 2 | 3 | This app showcases the usage of the `@aehrc/smart-forms-renderer` and `@aehrc/sdc-populate` in a minimal setup. The near-zero styling is intentional to focus on the core functionality. 4 | 5 | It also demonstrates the pre-population of questionnaires with just an OAuth2.0 Bearer Token. SMART App Launch is used, but only for obtaining the bearer token. 6 | 7 | Bootstrapped with React + TypeScript + Vite template. 8 | 9 | CodeSandbox: https://codesandbox.io/p/devbox/demo-renderer-app-krxmjy 10 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "src/styles/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/src/App.css: -------------------------------------------------------------------------------- 1 | #root { 2 | max-width: 1280px; 3 | margin: 0 auto; 4 | padding: 2rem; 5 | text-align: center; 6 | } 7 | 8 | .logo { 9 | height: 6em; 10 | padding: 1.5em; 11 | will-change: filter; 12 | transition: filter 300ms; 13 | } 14 | .logo:hover { 15 | filter: drop-shadow(0 0 2em #646cffaa); 16 | } 17 | .logo.react:hover { 18 | filter: drop-shadow(0 0 2em #61dafbaa); 19 | } 20 | 21 | @keyframes logo-spin { 22 | from { 23 | transform: rotate(0deg); 24 | } 25 | to { 26 | transform: rotate(360deg); 27 | } 28 | } 29 | 30 | @media (prefers-reduced-motion: no-preference) { 31 | a:nth-of-type(2) .logo { 32 | animation: logo-spin infinite 20s linear; 33 | } 34 | } 35 | 36 | .card { 37 | padding: 2em; 38 | } 39 | 40 | .read-the-docs { 41 | color: #888; 42 | } 43 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/src/App.tsx: -------------------------------------------------------------------------------- 1 | import Router from '@/Router.tsx'; 2 | 3 | function App() { 4 | return ( 5 |
6 |
7 |
8 |
9 | 10 |
11 |
12 |
13 |
14 | ); 15 | } 16 | 17 | export default App; 18 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | import * as CollapsiblePrimitive from '@radix-ui/react-collapsible'; 2 | 3 | const Collapsible = CollapsiblePrimitive.Root; 4 | 5 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger; 6 | 7 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent; 8 | 9 | export { Collapsible, CollapsibleTrigger, CollapsibleContent }; 10 | -------------------------------------------------------------------------------- /apps/demo-renderer-app/src/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import { cn } from '@/lib/utils'; 4 | 5 | export interface TextareaProps extends React.TextareaHTMLAttributes {} 6 | 7 | const Textarea = React.forwardRef( 8 | ({ className, ...props }, ref) => { 9 | return ( 10 |