akanjs 0.0.1 → 2.0.0-beta.1
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/CODE_OF_CONDUCT.md +54 -0
- package/CONTRIBUTING.md +83 -0
- package/LICENSE +21 -0
- package/README.ko.md +244 -0
- package/README.md +237 -6
- package/base/base.ts +194 -0
- package/base/baseEnv.ts +162 -0
- package/base/index.ts +6 -0
- package/base/primitiveRegistry.ts +342 -0
- package/base/symbols.ts +11 -0
- package/base/types.ts +137 -0
- package/base/utils.ts +30 -0
- package/cli/application/application.command.ts +213 -0
- package/cli/application/application.interface.tsx +225 -0
- package/cli/application/application.runner.ts +359 -0
- package/cli/application/application.script.ts +244 -0
- package/cli/build.ts +25 -0
- package/cli/cloud/cloud.command.ts +48 -0
- package/cli/cloud/cloud.runner.ts +158 -0
- package/cli/cloud/cloud.script.ts +40 -0
- package/cli/guideline/guideline.command.ts +31 -0
- package/cli/guideline/guideline.prompt.ts +212 -0
- package/cli/guideline/guideline.runner.ts +53 -0
- package/cli/guideline/guideline.script.ts +33 -0
- package/cli/guidelines/___library/sharedUiStructureDescription.en.md +767 -0
- package/cli/guidelines/___library/utilUiStructureDescription.en.md +395 -0
- package/cli/guidelines/___lint/lintRuleDescription.en.md +64 -0
- package/cli/guidelines/___module/moduleStructureDescription.en.md +80 -0
- package/cli/guidelines/componentRule/componentRule.generate.json +131 -0
- package/cli/guidelines/componentRule/componentRule.instruction.md +637 -0
- package/cli/guidelines/cssRule/cssRule.generate.json +93 -0
- package/cli/guidelines/cssRule/cssRule.instruction.md +435 -0
- package/cli/guidelines/databaseModule/databaseModule.generate.json +51 -0
- package/cli/guidelines/databaseModule/databaseModule.instruction.md +612 -0
- package/cli/guidelines/docPageRule/docPageRule.generate.json +72 -0
- package/cli/guidelines/docPageRule/docPageRule.instruction.md +389 -0
- package/cli/guidelines/enumConstant/enumConstant.generate.json +24 -0
- package/cli/guidelines/enumConstant/enumConstant.instruction.md +232 -0
- package/cli/guidelines/framework/framework.generate.json +119 -0
- package/cli/guidelines/framework/framework.instruction.md +1110 -0
- package/cli/guidelines/howToUseStore/howToUseStore.generate.json +0 -0
- package/cli/guidelines/modelConstant/modelConstant.generate.json +128 -0
- package/cli/guidelines/modelConstant/modelConstant.instruction.md +506 -0
- package/cli/guidelines/modelDictionary/modelDictionary.generate.json +108 -0
- package/cli/guidelines/modelDictionary/modelDictionary.instruction.md +547 -0
- package/cli/guidelines/modelDocument/modelDocument.generate.json +129 -0
- package/cli/guidelines/modelDocument/modelDocument.instruction.md +536 -0
- package/cli/guidelines/modelService/modelService.generate.json +135 -0
- package/cli/guidelines/modelService/modelService.instruction.md +708 -0
- package/cli/guidelines/modelSignal/modelSignal.generate.json +201 -0
- package/cli/guidelines/modelSignal/modelSignal.instruction.md +552 -0
- package/cli/guidelines/modelStore/modelStore.generate.json +130 -0
- package/cli/guidelines/modelStore/modelStore.instruction.md +585 -0
- package/cli/guidelines/modelTemplate/modelTemplate.generate.json +104 -0
- package/cli/guidelines/modelTemplate/modelTemplate.instruction.md +604 -0
- package/cli/guidelines/modelUnit/modelUnit.generate.json +92 -0
- package/cli/guidelines/modelUnit/modelUnit.instruction.md +541 -0
- package/cli/guidelines/modelUtil/modelUtil.generate.json +93 -0
- package/cli/guidelines/modelUtil/modelUtil.instruction.md +752 -0
- package/cli/guidelines/modelView/modelView.generate.json +80 -0
- package/cli/guidelines/modelView/modelView.instruction.md +1005 -0
- package/cli/guidelines/modelZone/modelZone.generate.json +126 -0
- package/cli/guidelines/modelZone/modelZone.instruction.md +528 -0
- package/cli/guidelines/scalarConstant/scalarConstant.generate.json +106 -0
- package/cli/guidelines/scalarConstant/scalarConstant.instruction.md +442 -0
- package/cli/guidelines/scalarDictionary/scalarDictionary.generate.json +83 -0
- package/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md +273 -0
- package/cli/guidelines/scalarModule/scalarModule.generate.json +35 -0
- package/cli/guidelines/scalarModule/scalarModule.instruction.md +81 -0
- package/cli/guidelines/sharedUiUsage/sharedUiUsage.generate.json +108 -0
- package/cli/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +310 -0
- package/cli/guidelines/utilUiUsage/utilUiUsage.generate.json +140 -0
- package/cli/guidelines/utilUiUsage/utilUiUsage.instruction.md +339 -0
- package/cli/index.js +11399 -0
- package/cli/index.ts +24 -0
- package/cli/library/library.command.ts +28 -0
- package/cli/library/library.runner.ts +69 -0
- package/cli/library/library.script.ts +39 -0
- package/cli/module/module.command.ts +35 -0
- package/cli/module/module.prompt.ts +18 -0
- package/cli/module/module.request.ts +319 -0
- package/cli/module/module.runner.ts +76 -0
- package/cli/module/module.script.ts +161 -0
- package/cli/package/package.command.ts +32 -0
- package/cli/package/package.runner.ts +64 -0
- package/cli/package/package.script.ts +35 -0
- package/cli/page/page.command.ts +14 -0
- package/cli/page/page.runner.ts +14 -0
- package/cli/page/page.script.ts +12 -0
- package/cli/scalar/scalar.command.ts +21 -0
- package/cli/scalar/scalar.prompt.ts +131 -0
- package/cli/scalar/scalar.runner.ts +38 -0
- package/cli/scalar/scalar.script.ts +16 -0
- package/cli/templates/__scalar/__model__/__model__.constant.ts +15 -0
- package/cli/templates/__scalar/__model__/__model__.dictionary.ts +19 -0
- package/cli/templates/__scalar/__model__/__model__.document.ts +15 -0
- package/cli/templates/app/akan.config.ts +14 -0
- package/cli/templates/app/capacitor.config.ts.template +8 -0
- package/cli/templates/app/common/commonLogic.ts +12 -0
- package/cli/templates/app/common/index.ts +10 -0
- package/cli/templates/app/env/env.client.debug.ts.template +7 -0
- package/cli/templates/app/env/env.client.develop.ts.template +7 -0
- package/cli/templates/app/env/env.client.local.ts.template +7 -0
- package/cli/templates/app/env/env.client.main.ts.template +7 -0
- package/cli/templates/app/env/env.client.testing.ts.template +7 -0
- package/cli/templates/app/env/env.client.ts +21 -0
- package/cli/templates/app/env/env.client.type.ts +16 -0
- package/cli/templates/app/env/env.server.debug.ts.template +7 -0
- package/cli/templates/app/env/env.server.develop.ts.template +9 -0
- package/cli/templates/app/env/env.server.local.ts.template +14 -0
- package/cli/templates/app/env/env.server.main.ts.template +9 -0
- package/cli/templates/app/env/env.server.testing.ts.template +6 -0
- package/cli/templates/app/env/env.server.ts +20 -0
- package/cli/templates/app/lib/___appName__/__appName__.dictionary.ts +17 -0
- package/cli/templates/app/lib/___appName__/__appName__.service.ts +13 -0
- package/cli/templates/app/lib/___appName__/__appName__.signal.ts +17 -0
- package/cli/templates/app/lib/___appName__/__appName__.store.ts +15 -0
- package/cli/templates/app/lib/option.ts +17 -0
- package/cli/templates/app/main.ts +16 -0
- package/cli/templates/app/package.json.template +5 -0
- package/cli/templates/app/page/_index.tsx +172 -0
- package/cli/templates/app/page/_layout.tsx +32 -0
- package/cli/templates/app/page/styles.css.template +53 -0
- package/cli/templates/app/public/favicon.ico +0 -0
- package/cli/templates/app/public/logo.png +0 -0
- package/cli/templates/app/srvkit/backendLogic.ts +12 -0
- package/cli/templates/app/srvkit/index.ts +10 -0
- package/cli/templates/app/tsconfig.json.template +21 -0
- package/cli/templates/app/ui/UiComponent.ts +16 -0
- package/cli/templates/app/ui/index.ts +10 -0
- package/cli/templates/app/webkit/frontendLogic.ts +12 -0
- package/cli/templates/app/webkit/index.ts +10 -0
- package/cli/templates/client.ts +46 -0
- package/cli/templates/crudPages/[__model__Id]/edit/page.tsx +47 -0
- package/cli/templates/crudPages/[__model__Id]/page.tsx +52 -0
- package/cli/templates/crudPages/new/page.tsx +42 -0
- package/cli/templates/crudPages/page.tsx +43 -0
- package/cli/templates/crudSinglePage/page.tsx +37 -0
- package/cli/templates/env/_env.server.type.ts +16 -0
- package/cli/templates/facetIndex/index.ts +32 -0
- package/cli/templates/index.ts +10 -0
- package/cli/templates/lib/__lib/lib.constant.ts +38 -0
- package/cli/templates/lib/__lib/lib.dictionary.ts +33 -0
- package/cli/templates/lib/__lib/lib.document.ts +35 -0
- package/cli/templates/lib/__lib/lib.service.ts +33 -0
- package/cli/templates/lib/__lib/lib.signal.ts +34 -0
- package/cli/templates/lib/__lib/lib.store.ts +33 -0
- package/cli/templates/lib/cnst.ts +29 -0
- package/cli/templates/lib/db.ts +32 -0
- package/cli/templates/lib/dict.ts +49 -0
- package/cli/templates/lib/sig.ts +60 -0
- package/cli/templates/lib/srv.ts +34 -0
- package/cli/templates/lib/st.ts +31 -0
- package/cli/templates/lib/useClient.ts +19 -0
- package/cli/templates/lib/useServer.ts +7 -0
- package/cli/templates/libRoot/.gitignore.template +16 -0
- package/cli/templates/libRoot/akan.config.ts +12 -0
- package/cli/templates/libRoot/base/baseLogic.ts +10 -0
- package/cli/templates/libRoot/base/index.ts +8 -0
- package/cli/templates/libRoot/common/commonLogic.ts +10 -0
- package/cli/templates/libRoot/common/index.ts +8 -0
- package/cli/templates/libRoot/env/env.server.example.ts.template +6 -0
- package/cli/templates/libRoot/env/env.server.testing.ts.template +6 -0
- package/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.ts +15 -0
- package/cli/templates/libRoot/lib/___libName__/__libName__.service.ts +11 -0
- package/cli/templates/libRoot/lib/___libName__/__libName__.store.ts +13 -0
- package/cli/templates/libRoot/lib/option.ts +17 -0
- package/cli/templates/libRoot/package.json.template +5 -0
- package/cli/templates/libRoot/srvkit/backendLogic.ts +10 -0
- package/cli/templates/libRoot/srvkit/index.ts +8 -0
- package/cli/templates/libRoot/tsconfig.json.template +11 -0
- package/cli/templates/libRoot/ui/index.ts +7 -0
- package/cli/templates/libRoot/webkit/frontendLogic.ts +10 -0
- package/cli/templates/libRoot/webkit/index.ts +8 -0
- package/cli/templates/localDev/docker-compose.yaml.template +37 -0
- package/cli/templates/module/__Model__.Template.tsx +36 -0
- package/cli/templates/module/__Model__.Unit.tsx +26 -0
- package/cli/templates/module/__Model__.Util.tsx +30 -0
- package/cli/templates/module/__Model__.View.tsx +29 -0
- package/cli/templates/module/__Model__.Zone.tsx +43 -0
- package/cli/templates/module/__model__.constant.ts +24 -0
- package/cli/templates/module/__model__.dictionary.ts +30 -0
- package/cli/templates/module/__model__.document.ts +23 -0
- package/cli/templates/module/__model__.service.ts +16 -0
- package/cli/templates/module/__model__.signal.ts +27 -0
- package/cli/templates/module/__model__.store.ts +19 -0
- package/cli/templates/module/index.tsx +44 -0
- package/cli/templates/moduleRoot/index.tsx +31 -0
- package/cli/templates/pkgRoot/tsconfig.json.template +10 -0
- package/cli/templates/server.ts +45 -0
- package/cli/templates/workspaceRoot/.env.template +14 -0
- package/cli/templates/workspaceRoot/.gitignore.template +130 -0
- package/cli/templates/workspaceRoot/.vscode/settings.json.template +23 -0
- package/cli/templates/workspaceRoot/biome.json.template +175 -0
- package/cli/templates/workspaceRoot/bunfig.toml +4 -0
- package/cli/templates/workspaceRoot/infra/app/Chart.yaml.template +6 -0
- package/cli/templates/workspaceRoot/infra/app/templates/frontend.yaml.template +182 -0
- package/cli/templates/workspaceRoot/infra/app/values/_common-values.yaml.template +183 -0
- package/cli/templates/workspaceRoot/package.json.template +7 -0
- package/cli/templates/workspaceRoot/tsconfig.json.template +26 -0
- package/cli/testHelpers.ts +171 -0
- package/cli/workspace/workspace.command.ts +59 -0
- package/cli/workspace/workspace.runner.ts +57 -0
- package/cli/workspace/workspace.script.ts +68 -0
- package/client/capacitor.ts +68 -0
- package/client/clientRuntime.ts +141 -0
- package/client/cookie.ts +121 -0
- package/client/createFont.ts +8 -0
- package/client/csrTypes.ts +259 -0
- package/client/decorators.ts +25 -0
- package/client/device.ts +147 -0
- package/client/fetch.ts +1 -0
- package/client/index.ts +15 -0
- package/client/locale.ts +4 -0
- package/client/makePageProto.tsx +178 -0
- package/client/router.ts +286 -0
- package/client/rscNavigation.ts +19 -0
- package/client/storage.ts +33 -0
- package/client/translator.ts +43 -0
- package/client/types.ts +228 -0
- package/client/useClient.ts +1 -0
- package/common/Logger.ts +177 -0
- package/common/applyMixins.ts +14 -0
- package/common/capitalize.ts +4 -0
- package/common/deepObjectify.ts +27 -0
- package/common/formatNumber.ts +14 -0
- package/common/formatPhone.ts +7 -0
- package/common/getAllPropertyDescriptors.ts +13 -0
- package/common/hmrPhase.ts +17 -0
- package/common/httpClient.ts +101 -0
- package/common/index.ts +50 -0
- package/common/isDayjs.ts +3 -0
- package/common/isEmail.ts +2 -0
- package/common/isPhoneNumber.ts +8 -0
- package/common/isQueryEqual.ts +23 -0
- package/common/isValidDate.ts +14 -0
- package/common/localeConfig.ts +41 -0
- package/common/lowerlize.ts +4 -0
- package/common/mergeVersion.ts +10 -0
- package/common/objectify.ts +7 -0
- package/common/pathGet.ts +13 -0
- package/common/pathSet.ts +16 -0
- package/common/randomPick.ts +1 -0
- package/common/randomPicks.ts +12 -0
- package/common/routeConvention.ts +203 -0
- package/common/sleep.ts +8 -0
- package/common/splitVersion.ts +11 -0
- package/common/subRoute.ts +34 -0
- package/common/types.ts +15 -0
- package/constant/constantRegistry.ts +334 -0
- package/constant/crystalize.ts +45 -0
- package/constant/deserialize.ts +70 -0
- package/constant/fieldInfo.ts +415 -0
- package/constant/getDefault.ts +18 -0
- package/constant/immerify.ts +16 -0
- package/constant/index.ts +10 -0
- package/constant/purify.ts +118 -0
- package/constant/serialize.ts +87 -0
- package/constant/types.ts +105 -0
- package/constant/via.ts +360 -0
- package/devkit/aiEditor.ts +299 -0
- package/devkit/akanApp/akanApp.host.ts +356 -0
- package/devkit/akanApp/index.ts +1 -0
- package/devkit/akanConfig/akanConfig.ts +332 -0
- package/devkit/akanConfig/index.ts +2 -0
- package/devkit/akanConfig/types.ts +187 -0
- package/devkit/applicationBuildReporter.ts +69 -0
- package/devkit/applicationBuildRunner.ts +302 -0
- package/devkit/applicationReleasePackager.ts +205 -0
- package/devkit/artifact/implicitRootLayout.ts +155 -0
- package/devkit/artifact/index.ts +1 -0
- package/devkit/artifact/routeSeedIndex.ts +128 -0
- package/devkit/auth.ts +41 -0
- package/devkit/builder.ts +164 -0
- package/devkit/capacitor.base.config.ts +74 -0
- package/devkit/capacitorApp.ts +385 -0
- package/devkit/commandDecorators/argMeta.ts +88 -0
- package/devkit/commandDecorators/command.ts +314 -0
- package/devkit/commandDecorators/commandBuilder.ts +188 -0
- package/devkit/commandDecorators/commandMeta.ts +6 -0
- package/devkit/commandDecorators/dependencyBuilder.ts +100 -0
- package/devkit/commandDecorators/helpFormatter.ts +217 -0
- package/devkit/commandDecorators/index.ts +8 -0
- package/devkit/commandDecorators/targetMeta.ts +31 -0
- package/devkit/commandDecorators/types.ts +10 -0
- package/devkit/constants.ts +25 -0
- package/devkit/createTunnel.ts +36 -0
- package/devkit/dependencyScanner.ts +339 -0
- package/devkit/executors.ts +1325 -0
- package/devkit/extractDeps.ts +85 -0
- package/devkit/fileEditor.ts +106 -0
- package/devkit/fileSys.ts +39 -0
- package/devkit/frontendBuild/allRoutesBuilder.ts +103 -0
- package/devkit/frontendBuild/clientBuildTypes.ts +114 -0
- package/devkit/frontendBuild/clientEntriesBundler.ts +300 -0
- package/devkit/frontendBuild/clientEntryDiscovery.ts +196 -0
- package/devkit/frontendBuild/csrArtifactBuilder.ts +237 -0
- package/devkit/frontendBuild/cssCompiler.ts +279 -0
- package/devkit/frontendBuild/cssImportResolver.ts +116 -0
- package/devkit/frontendBuild/fontOptimizer.ts +427 -0
- package/devkit/frontendBuild/hmrChangeClassifier.ts +28 -0
- package/devkit/frontendBuild/hmrWatcher.ts +101 -0
- package/devkit/frontendBuild/index.ts +18 -0
- package/devkit/frontendBuild/pagesBundleBuilder.ts +137 -0
- package/devkit/frontendBuild/pagesEntrySourceGenerator.ts +37 -0
- package/devkit/frontendBuild/precompressArtifacts.ts +59 -0
- package/devkit/frontendBuild/routeClientBuilder.ts +290 -0
- package/devkit/frontendBuild/routesManifestArtifactSerializer.ts +62 -0
- package/devkit/frontendBuild/ssrBaseArtifactBuilder.ts +139 -0
- package/devkit/frontendBuild/vendorSpecifiers.ts +16 -0
- package/devkit/frontendBuild/watchRootResolver.ts +28 -0
- package/devkit/getCredentials.ts +19 -0
- package/devkit/getDirname.ts +3 -0
- package/devkit/getModelFileData.ts +59 -0
- package/devkit/getRelatedCnsts.ts +300 -0
- package/devkit/guideline.ts +19 -0
- package/devkit/incrementalBuilder/incrementalBuilder.host.ts +78 -0
- package/devkit/incrementalBuilder/incrementalBuilder.proc.ts +330 -0
- package/devkit/incrementalBuilder/index.ts +1 -0
- package/devkit/index.ts +36 -0
- package/devkit/lint/no-import-client-functions.grit +32 -0
- package/devkit/lint/no-import-external-library.grit +21 -0
- package/devkit/lint/no-js-private-class-method.grit +42 -0
- package/devkit/lint/no-use-client-in-server.grit +7 -0
- package/devkit/lint/non-scalar-props-restricted.grit +13 -0
- package/devkit/linter.ts +248 -0
- package/devkit/mobile/index.ts +1 -0
- package/devkit/mobile/mobileTarget.ts +47 -0
- package/devkit/prompter.ts +71 -0
- package/devkit/scanInfo.ts +605 -0
- package/devkit/selectModel.ts +11 -0
- package/devkit/spinner.ts +54 -0
- package/devkit/sshTunnel.ts +151 -0
- package/devkit/streamAi.ts +45 -0
- package/devkit/transforms/barrelAnalyzer.ts +249 -0
- package/devkit/transforms/barrelImportsPlugin.ts +451 -0
- package/devkit/transforms/externalizeFrameworkPlugin.ts +159 -0
- package/devkit/transforms/index.ts +5 -0
- package/devkit/transforms/rscUseClientTransform.ts +52 -0
- package/devkit/transforms/useClientBundlePlugin.ts +47 -0
- package/devkit/typeChecker.ts +260 -0
- package/devkit/types.ts +42 -0
- package/devkit/ui/MultiScrollList.tsx +228 -0
- package/devkit/ui/ScrollList.tsx +106 -0
- package/devkit/ui/index.ts +2 -0
- package/devkit/uploadRelease.ts +95 -0
- package/devkit/useStdoutDimensions.ts +20 -0
- package/dictionary/base.dictionary.ts +91 -0
- package/dictionary/dictInfo.ts +1079 -0
- package/dictionary/dictionary.ts +10 -0
- package/dictionary/index.ts +12 -0
- package/dictionary/locale.ts +230 -0
- package/dictionary/trans.ts +196 -0
- package/document/by.ts +39 -0
- package/document/dataLoader.ts +91 -0
- package/document/database.ts +168 -0
- package/document/databaseRegistry.ts +113 -0
- package/document/documentQuery.ts +143 -0
- package/document/documentSchema.ts +91 -0
- package/document/filterMeta.ts +210 -0
- package/document/index.ts +11 -0
- package/document/into.ts +169 -0
- package/document/loaderInfo.ts +50 -0
- package/document/schema.ts +24 -0
- package/document/types.ts +41 -0
- package/fetch/client/fetchClient.ts +600 -0
- package/fetch/client/httpClient.ts +157 -0
- package/fetch/client/index.ts +3 -0
- package/fetch/client/wsClient.ts +246 -0
- package/fetch/fetchType/appliedReturn.type.ts +108 -0
- package/fetch/fetchType/buildFetch.type.ts +24 -0
- package/fetch/fetchType/clientSignal.type.ts +22 -0
- package/fetch/fetchType/endpointFetch.type.ts +56 -0
- package/fetch/fetchType/index.ts +5 -0
- package/fetch/fetchType/sliceFetch.type.ts +173 -0
- package/fetch/index.ts +4 -0
- package/fetch/requestStorage.ts +127 -0
- package/fetch/serializer/fetch.serializer.ts +131 -0
- package/fetch/serializer/index.ts +1 -0
- package/fetch/types.ts +28 -0
- package/package.json +202 -5
- package/server/SSR_MEMORY_DIAGNOSIS.md +107 -0
- package/server/akanApp.ts +855 -0
- package/server/akanLib.ts +43 -0
- package/server/akanOption.ts +42 -0
- package/server/akanServer.ts +369 -0
- package/server/artifact/builderRpc.ts +124 -0
- package/server/artifact/index.ts +6 -0
- package/server/artifact/ipcTypes.ts +46 -0
- package/server/artifact/manifestTypes.ts +19 -0
- package/server/artifact/routeClientCache.ts +224 -0
- package/server/artifact/routeSeedIndexStore.ts +89 -0
- package/server/artifact/routesManifestStore.ts +120 -0
- package/server/decorators.ts +95 -0
- package/server/di/diLifecycle.ts +520 -0
- package/server/di/index.ts +4 -0
- package/server/di/predefinedAdaptor.ts +77 -0
- package/server/di/resolveAdaptorHierarchy.ts +82 -0
- package/server/di/resolveHierarchy.ts +89 -0
- package/server/di/resolveServiceHierarchy.ts +47 -0
- package/server/di/utils.ts +40 -0
- package/server/hmr/changeBatch.ts +14 -0
- package/server/hmr/clientScript.ts +310 -0
- package/server/hmr/devHmrController.ts +395 -0
- package/server/hmr/index.ts +4 -0
- package/server/hmr/wsHub.ts +56 -0
- package/server/imageOptimizer.ts +427 -0
- package/server/imageOptimizerError.ts +8 -0
- package/server/index.ts +14 -0
- package/server/lifecycle/shutdownManager.ts +52 -0
- package/server/logging/rotatingLogWriter.ts +190 -0
- package/server/processMetricsCollector.ts +78 -0
- package/server/proxy/akanResponse.ts +16 -0
- package/server/proxy/bunRequestFields.ts +12 -0
- package/server/proxy/hostBasePathWebProxy.ts +112 -0
- package/server/proxy/index.ts +15 -0
- package/server/proxy/localeWebProxy.ts +71 -0
- package/server/proxy/types.ts +41 -0
- package/server/proxy/webProxyRunner.ts +90 -0
- package/server/resolver/database.resolver.ts +340 -0
- package/server/resolver/index.ts +3 -0
- package/server/resolver/resolver.contract.fixture.ts +222 -0
- package/server/resolver/service.resolver.ts +176 -0
- package/server/resolver/signal.resolver.ts +386 -0
- package/server/robots.ts +32 -0
- package/server/routeElementComposer.tsx +91 -0
- package/server/routeTreeBuilder.ts +279 -0
- package/server/routing/apiRouter.ts +226 -0
- package/server/rscClient.tsx +140 -0
- package/server/rscWorker.tsx +625 -0
- package/server/rscWorkerHost.ts +616 -0
- package/server/sitemap.ts +90 -0
- package/server/ssrFromRscRenderer.tsx +285 -0
- package/server/ssrTypes.ts +48 -0
- package/server/types/react-server-dom-webpack.d.ts +91 -0
- package/server/types.tsx +109 -0
- package/server/vendor/akanjs-base.ts +1 -0
- package/server/vendor/akanjs-common.ts +1 -0
- package/server/vendor/akanjs-constant.ts +1 -0
- package/server/vendor/akanjs-store.ts +1 -0
- package/server/vendor/react-dom-client.ts +5 -0
- package/server/vendor/react-dom.ts +21 -0
- package/server/vendor/react-jsx-dev-runtime.ts +5 -0
- package/server/vendor/react-jsx-runtime.ts +5 -0
- package/server/vendor/react-refresh-runtime.ts +6 -0
- package/server/vendor/react-server-dom-webpack-client-browser.ts +12 -0
- package/server/vendor/react.ts +51 -0
- package/server/vendor/scheduler.ts +23 -0
- package/server/webRouter.ts +712 -0
- package/service/adapt.ts +47 -0
- package/service/base.service.ts +18 -0
- package/service/index.ts +10 -0
- package/service/injectInfo.ts +393 -0
- package/service/ipcTypes.ts +127 -0
- package/service/predefinedAdaptor/cache.adaptor.ts +105 -0
- package/service/predefinedAdaptor/compress.adaptor.ts +357 -0
- package/service/predefinedAdaptor/database.adaptor.ts +1310 -0
- package/service/predefinedAdaptor/index.ts +13 -0
- package/service/predefinedAdaptor/logging.adaptor.ts +36 -0
- package/service/predefinedAdaptor/queue.adaptor.ts +42 -0
- package/service/predefinedAdaptor/role.adaptor.ts +18 -0
- package/service/predefinedAdaptor/schedule.adaptor.ts +188 -0
- package/service/predefinedAdaptor/solidCache.adaptor.ts +143 -0
- package/service/predefinedAdaptor/solidPubsub.adaptor.ts +98 -0
- package/service/predefinedAdaptor/solidQueue.adaptor.ts +203 -0
- package/service/predefinedAdaptor/solidSqlite.ts +85 -0
- package/service/predefinedAdaptor/sqlitePath.ts +20 -0
- package/service/predefinedAdaptor/storage.adaptor.ts +121 -0
- package/service/predefinedAdaptor/websocket.adaptor.ts +313 -0
- package/service/serve.ts +223 -0
- package/service/serviceModule.ts +221 -0
- package/service/serviceRegistry.ts +26 -0
- package/service/types.ts +113 -0
- package/signal/base.signal.ts +46 -0
- package/signal/endpoint.ts +122 -0
- package/signal/endpointInfo.ts +374 -0
- package/signal/exception.ts +50 -0
- package/signal/guard.ts +18 -0
- package/signal/guards.ts +16 -0
- package/signal/index.ts +18 -0
- package/signal/intercept.ts +39 -0
- package/signal/internal.ts +56 -0
- package/signal/internalArg.ts +38 -0
- package/signal/internalInfo.ts +208 -0
- package/signal/middleware.ts +108 -0
- package/signal/serializer/fetch.serializer.ts +128 -0
- package/signal/serializer/index.ts +1 -0
- package/signal/serverSignal.ts +114 -0
- package/signal/signalContext.ts +446 -0
- package/signal/signalRegistry.ts +82 -0
- package/signal/slice.ts +158 -0
- package/signal/sliceInfo.ts +254 -0
- package/signal/types.ts +131 -0
- package/store/action.ts +1067 -0
- package/store/baseSt.ts +81 -0
- package/store/hooks.ts +2 -0
- package/store/index.ts +8 -0
- package/store/rootStore.ts +26 -0
- package/store/state.ts +226 -0
- package/store/stateBuilder.ts +429 -0
- package/store/stateInfo.ts +66 -0
- package/store/store.ts +194 -0
- package/store/storeInstance.ts +382 -0
- package/store/storeRegistry.ts +84 -0
- package/store/types.ts +69 -0
- package/store/withSelector.ts +62 -0
- package/test/index.ts +16 -0
- package/test/playwright.config.base.ts +48 -0
- package/test/playwright.pageAgent.ts +41 -0
- package/test/sample.ts +19 -0
- package/test/sampleOf.ts +70 -0
- package/test/signalTest.preload.ts +10 -0
- package/test/signalTestRuntime.ts +126 -0
- package/test/testServer.ts +187 -0
- package/ui/BottomSheet.tsx +103 -0
- package/ui/Button.tsx +70 -0
- package/ui/ClientSide.tsx +11 -0
- package/ui/Clipboard.tsx +49 -0
- package/ui/Constant/Doc.tsx +696 -0
- package/ui/Constant/Mermaid.tsx +149 -0
- package/ui/Constant/index.ts +6 -0
- package/ui/Constant/schemaDoc.ts +324 -0
- package/ui/Copy.tsx +27 -0
- package/ui/CsrImage.tsx +38 -0
- package/ui/Data/CardList.tsx +141 -0
- package/ui/Data/Dashboard.tsx +72 -0
- package/ui/Data/Insight.tsx +35 -0
- package/ui/Data/Item.tsx +285 -0
- package/ui/Data/ListContainer.tsx +320 -0
- package/ui/Data/Pagination.tsx +54 -0
- package/ui/Data/QueryMaker.tsx +21 -0
- package/ui/Data/TableList.tsx +161 -0
- package/ui/Data/index.ts +11 -0
- package/ui/Data/index_.tsx +11 -0
- package/ui/DatePicker.tsx +184 -0
- package/ui/Dialog/Action.tsx +15 -0
- package/ui/Dialog/Close.tsx +22 -0
- package/ui/Dialog/Content.tsx +11 -0
- package/ui/Dialog/Modal.tsx +137 -0
- package/ui/Dialog/Provider.tsx +33 -0
- package/ui/Dialog/Title.tsx +15 -0
- package/ui/Dialog/Trigger.tsx +22 -0
- package/ui/Dialog/context.ts +20 -0
- package/ui/Dialog/index.tsx +15 -0
- package/ui/DragAction.tsx +129 -0
- package/ui/DraggableList.tsx +230 -0
- package/ui/Dropdown.tsx +51 -0
- package/ui/Empty.tsx +32 -0
- package/ui/Field.tsx +1556 -0
- package/ui/FontFace.tsx +26 -0
- package/ui/Image.tsx +185 -0
- package/ui/InfiniteScroll.tsx +67 -0
- package/ui/Input.tsx +636 -0
- package/ui/KeyboardAvoiding.tsx +62 -0
- package/ui/Layout/BottomAction.tsx +15 -0
- package/ui/Layout/BottomInset.tsx +42 -0
- package/ui/Layout/BottomTab.tsx +71 -0
- package/ui/Layout/Header.tsx +38 -0
- package/ui/Layout/LeftSider.tsx +34 -0
- package/ui/Layout/Navbar.tsx +46 -0
- package/ui/Layout/RightSider.tsx +41 -0
- package/ui/Layout/Sider.tsx +69 -0
- package/ui/Layout/Template.tsx +11 -0
- package/ui/Layout/TopLeftAction.tsx +28 -0
- package/ui/Layout/Unit.tsx +19 -0
- package/ui/Layout/View.tsx +12 -0
- package/ui/Layout/Zone.tsx +10 -0
- package/ui/Layout/index.ts +27 -0
- package/ui/Link/Back.tsx +15 -0
- package/ui/Link/Close.tsx +20 -0
- package/ui/Link/CsrLink.tsx +41 -0
- package/ui/Link/Lang.tsx +16 -0
- package/ui/Link/SsrLink.tsx +68 -0
- package/ui/Link/index.tsx +32 -0
- package/ui/Link/types.ts +47 -0
- package/ui/Load/Edit.tsx +19 -0
- package/ui/Load/Edit_Client.tsx +120 -0
- package/ui/Load/Page.tsx +40 -0
- package/ui/Load/PageCSR.tsx +39 -0
- package/ui/Load/Pagination.tsx +89 -0
- package/ui/Load/Units.tsx +330 -0
- package/ui/Load/View.tsx +115 -0
- package/ui/Load/index.ts +11 -0
- package/ui/Load/index_.tsx +6 -0
- package/ui/Loading/Area.tsx +10 -0
- package/ui/Loading/Button.tsx +17 -0
- package/ui/Loading/Input.tsx +17 -0
- package/ui/Loading/ProgressBar.tsx +14 -0
- package/ui/Loading/Skeleton.tsx +22 -0
- package/ui/Loading/Spin.tsx +22 -0
- package/ui/Loading/index.tsx +8 -0
- package/ui/Menu.tsx +273 -0
- package/ui/Modal.tsx +87 -0
- package/ui/Model/AdminPanel.tsx +51 -0
- package/ui/Model/Edit.tsx +46 -0
- package/ui/Model/EditModal.tsx +301 -0
- package/ui/Model/EditWrapper.tsx +48 -0
- package/ui/Model/LoadInit.tsx +11 -0
- package/ui/Model/New.tsx +46 -0
- package/ui/Model/NewWrapper.tsx +20 -0
- package/ui/Model/NewWrapper_Client.tsx +57 -0
- package/ui/Model/Remove.tsx +75 -0
- package/ui/Model/RemoveWrapper.tsx +38 -0
- package/ui/Model/SureToRemove.tsx +108 -0
- package/ui/Model/View.tsx +65 -0
- package/ui/Model/ViewEditModal.tsx +125 -0
- package/ui/Model/ViewModal.tsx +71 -0
- package/ui/Model/ViewWrapper.tsx +38 -0
- package/ui/Model/index.ts +33 -0
- package/ui/Model/index_.tsx +16 -0
- package/ui/More.tsx +56 -0
- package/ui/ObjectId.tsx +29 -0
- package/ui/Pagination.tsx +120 -0
- package/ui/Popconfirm.tsx +135 -0
- package/ui/Portal.tsx +10 -0
- package/ui/Radio.tsx +53 -0
- package/ui/RecentTime.tsx +123 -0
- package/ui/Refresh.tsx +24 -0
- package/ui/ScreenNavigator.tsx +129 -0
- package/ui/Select.tsx +322 -0
- package/ui/Signal/Arg.tsx +352 -0
- package/ui/Signal/Doc.tsx +231 -0
- package/ui/Signal/Listener.tsx +74 -0
- package/ui/Signal/Message.tsx +267 -0
- package/ui/Signal/Object.tsx +131 -0
- package/ui/Signal/PubSub.tsx +247 -0
- package/ui/Signal/Request.tsx +30 -0
- package/ui/Signal/Response.tsx +76 -0
- package/ui/Signal/RestApi.tsx +390 -0
- package/ui/Signal/WebSocket.tsx +47 -0
- package/ui/Signal/index.ts +10 -0
- package/ui/Signal/makeExample.ts +75 -0
- package/ui/System/CSR.tsx +420 -0
- package/ui/System/Client.tsx +296 -0
- package/ui/System/Common.tsx +83 -0
- package/ui/System/DevModeToggle.tsx +21 -0
- package/ui/System/Gtag.tsx +69 -0
- package/ui/System/Messages.tsx +175 -0
- package/ui/System/Reconnect.tsx +156 -0
- package/ui/System/Root.tsx +10 -0
- package/ui/System/SSR.tsx +163 -0
- package/ui/System/SelectLanguage.tsx +47 -0
- package/ui/System/ThemeToggle.tsx +98 -0
- package/ui/System/index.tsx +23 -0
- package/ui/Tab/Menu.tsx +56 -0
- package/ui/Tab/Menus.tsx +10 -0
- package/ui/Tab/Panel.tsx +25 -0
- package/ui/Tab/Provider.tsx +25 -0
- package/ui/Tab/context.ts +16 -0
- package/ui/Tab/index.tsx +11 -0
- package/ui/Table.tsx +131 -0
- package/ui/ToggleSelect.tsx +144 -0
- package/ui/Unauthorized.tsx +29 -0
- package/ui/animated.tsx +8 -0
- package/ui/fontCss.ts +86 -0
- package/ui/index.ts +44 -0
- package/ui/styles.css +617 -0
- package/webkit/bootCsr.tsx +275 -0
- package/webkit/createRobotPage.ts +15 -0
- package/webkit/createSitemapPage.ts +4 -0
- package/webkit/index.ts +19 -0
- package/webkit/lazy.tsx +37 -0
- package/webkit/types.ts +7 -0
- package/webkit/useCamera.tsx +99 -0
- package/webkit/useCodepush.tsx +99 -0
- package/webkit/useContact.tsx +48 -0
- package/webkit/useCsrValues.ts +661 -0
- package/webkit/useDebounce.ts +24 -0
- package/webkit/useFetch.ts +48 -0
- package/webkit/useGeoLocation.tsx +24 -0
- package/webkit/useHistory.ts +76 -0
- package/webkit/useInterval.ts +21 -0
- package/webkit/useLocation.ts +69 -0
- package/webkit/usePurchase.tsx +156 -0
- package/webkit/usePushNoti.tsx +48 -0
- package/webkit/useThrottle.ts +22 -0
- package/src/index.js +0 -2
- package/src/index.js.map +0 -1
- package/src/lib/akan2.js +0 -4
- package/src/lib/akan2.js.map +0 -1
- package/src/run.js +0 -4
- package/src/run.js.map +0 -1
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
# Using Shared UI Components in Akan.js
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The `@shared/ui` library in the Akan.js framework provides a comprehensive set of React components designed for building data-driven applications. This library follows consistent patterns and deeply integrates with the application's store system, making it efficient to develop complex UIs with minimal code.
|
|
6
|
+
|
|
7
|
+
## Key Features
|
|
8
|
+
|
|
9
|
+
- **Store-Centric Architecture**: Seamless integration with standardized store slices using naming conventions
|
|
10
|
+
- **Type-Safe Components**: Extensive TypeScript generic usage for compile-time safety
|
|
11
|
+
- **Internationalization**: Built-in multi-language support throughout all components
|
|
12
|
+
- **Responsive Design**: Mobile-first approach with adaptive breakpoints
|
|
13
|
+
- **Performance Optimized**: Components use memoization, lazy loading, and efficient rendering strategies
|
|
14
|
+
- **Accessibility Compliant**: Proper ARIA attributes and keyboard navigation
|
|
15
|
+
- **Extensible Architecture**: Plugin systems and customizable renderers
|
|
16
|
+
- **Unidirectional Data Flow**: Predictable state management patterns
|
|
17
|
+
|
|
18
|
+
## Getting Started
|
|
19
|
+
|
|
20
|
+
### Importing Components
|
|
21
|
+
|
|
22
|
+
UI components are available as named exports from the `@shared/ui` package:
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { Field, Only, Editor } from "@libs/shared/ui";
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Each namespace contains specialized components for specific use cases:
|
|
29
|
+
|
|
30
|
+
- **Field**: Form inputs and data entry components
|
|
31
|
+
- **Only**: Conditional rendering based on user state and device
|
|
32
|
+
- **Editor**: Rich text editing capabilities
|
|
33
|
+
|
|
34
|
+
### Component Organization in Your Module
|
|
35
|
+
|
|
36
|
+
When building a module in Akan.js, you should organize your components following the pattern:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
/lib/myFeature/
|
|
40
|
+
MyFeature.constant.ts # Types, GraphQL schema, enums
|
|
41
|
+
MyFeature.service.ts # Business logic and database operations
|
|
42
|
+
MyFeature.signal.ts # Client state management and API calls
|
|
43
|
+
MyFeature.store.ts # Zustand store definitions
|
|
44
|
+
MyFeature.Template.tsx # Form templates for create/edit
|
|
45
|
+
MyFeature.Unit.tsx # Card/list item components
|
|
46
|
+
MyFeature.View.tsx # Full page views
|
|
47
|
+
MyFeature.Zone.tsx # Layout containers
|
|
48
|
+
MyFeature.Util.tsx # Utility components
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Usage Examples
|
|
52
|
+
|
|
53
|
+
### 1. Basic Form Fields
|
|
54
|
+
|
|
55
|
+
Form fields are used for data entry and are integrated with the validation system:
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
import { Field } from "@libs/shared/ui";
|
|
59
|
+
import { usePage } from "@libs/shared/client";
|
|
60
|
+
|
|
61
|
+
const MyComponent = () => {
|
|
62
|
+
const { l } = usePage(); // For internationalization
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<>
|
|
66
|
+
<Field.Text
|
|
67
|
+
label={l("myModel.title")}
|
|
68
|
+
desc={l("myModel.title.desc")}
|
|
69
|
+
value={formState.title}
|
|
70
|
+
onChange={(value) => st.do.setTitleOnMyModel(value)}
|
|
71
|
+
nullable={false}
|
|
72
|
+
maxlength={100}
|
|
73
|
+
/>
|
|
74
|
+
|
|
75
|
+
<Field.Number
|
|
76
|
+
label={l("myModel.amount")}
|
|
77
|
+
desc={l("myModel.amount.desc")}
|
|
78
|
+
value={formState.amount}
|
|
79
|
+
onChange={(value) => st.do.setAmountOnMyModel(value)}
|
|
80
|
+
min={0}
|
|
81
|
+
max={1000}
|
|
82
|
+
unit="KRW"
|
|
83
|
+
/>
|
|
84
|
+
|
|
85
|
+
<Field.ToggleSelect
|
|
86
|
+
label={l("myModel.status")}
|
|
87
|
+
desc={l("myModel.status.desc")}
|
|
88
|
+
value={formState.status}
|
|
89
|
+
items={cnst.Status}
|
|
90
|
+
onChange={(status) => st.do.setStatusOnMyModel(status)}
|
|
91
|
+
/>
|
|
92
|
+
</>
|
|
93
|
+
);
|
|
94
|
+
};
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 2. Data Management Components
|
|
98
|
+
|
|
99
|
+
Data components are used to display and manage collections of data:
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
import { Data, Model } from "akanjs/ui";
|
|
103
|
+
|
|
104
|
+
export const MyFeatureAdmin = ({ sliceName = "myFeature" }) => {
|
|
105
|
+
return (
|
|
106
|
+
<Data.ListContainer
|
|
107
|
+
sliceName={sliceName}
|
|
108
|
+
renderItem={MyFeature.Unit.Card}
|
|
109
|
+
renderDashboard={MyFeature.Util.Stat}
|
|
110
|
+
renderTemplate={MyFeature.Template.General}
|
|
111
|
+
renderView={(myFeature) => <MyFeature.View.General myFeature={myFeature} />}
|
|
112
|
+
columns={["id", "title", "status", "createdAt"]}
|
|
113
|
+
actions={(myFeature) => ["remove", "edit", "view"]}
|
|
114
|
+
/>
|
|
115
|
+
);
|
|
116
|
+
};
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 3. Loading and Data Fetching
|
|
120
|
+
|
|
121
|
+
Load components handle data fetching and state management:
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
import { Load } from "akanjs/ui";
|
|
125
|
+
|
|
126
|
+
export const MyFeatureView = ({ id }) => {
|
|
127
|
+
return (
|
|
128
|
+
<Load.View
|
|
129
|
+
loader={() => fetch.myFeature(id)}
|
|
130
|
+
render={(myFeature) => (
|
|
131
|
+
<div className="space-y-4 p-4">
|
|
132
|
+
<h1>{myFeature.title}</h1>
|
|
133
|
+
<p>{myFeature.description}</p>
|
|
134
|
+
</div>
|
|
135
|
+
)}
|
|
136
|
+
/>
|
|
137
|
+
);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export const MyFeatureList = () => {
|
|
141
|
+
return (
|
|
142
|
+
<Load.Units
|
|
143
|
+
init={st.do.initMyFeature}
|
|
144
|
+
renderItem={(myFeature) => <MyFeature.Unit.Card key={myFeature.id} myFeature={myFeature} />}
|
|
145
|
+
filter={(myFeature) => myFeature.isActive}
|
|
146
|
+
sort={(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()}
|
|
147
|
+
/>
|
|
148
|
+
);
|
|
149
|
+
};
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 4. CRUD Operations
|
|
153
|
+
|
|
154
|
+
Model components handle create, read, update and delete operations:
|
|
155
|
+
|
|
156
|
+
```tsx
|
|
157
|
+
import { Model } from "akanjs/ui";
|
|
158
|
+
|
|
159
|
+
export const CreateMyFeature = () => {
|
|
160
|
+
return (
|
|
161
|
+
<Model.NewWrapper sliceName="myFeature">
|
|
162
|
+
<button className="btn btn-primary">Create New</button>
|
|
163
|
+
</Model.NewWrapper>
|
|
164
|
+
);
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export const EditMyFeature = ({ id }) => {
|
|
168
|
+
return (
|
|
169
|
+
<Model.EditModal
|
|
170
|
+
sliceName="myFeature"
|
|
171
|
+
id={id}
|
|
172
|
+
renderTitle={(myFeature) => `Edit ${myFeature.title}`}
|
|
173
|
+
onSubmit="closeModal"
|
|
174
|
+
/>
|
|
175
|
+
);
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export const ViewMyFeature = ({ id }) => {
|
|
179
|
+
return (
|
|
180
|
+
<Model.ViewModal
|
|
181
|
+
id={id}
|
|
182
|
+
renderView={(myFeature) => <MyFeature.View.General myFeature={myFeature} />}
|
|
183
|
+
renderAction={(myFeature) => (
|
|
184
|
+
<Model.EditWrapper sliceName="myFeature" id={myFeature.id}>
|
|
185
|
+
<button className="btn btn-secondary">Edit</button>
|
|
186
|
+
</Model.EditWrapper>
|
|
187
|
+
)}
|
|
188
|
+
/>
|
|
189
|
+
);
|
|
190
|
+
};
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 5. Conditional Rendering
|
|
194
|
+
|
|
195
|
+
Only components handle conditional rendering based on user roles or device:
|
|
196
|
+
|
|
197
|
+
```tsx
|
|
198
|
+
import { Only } from "@libs/shared/ui";
|
|
199
|
+
|
|
200
|
+
export const AdminFeature = () => {
|
|
201
|
+
return (
|
|
202
|
+
<Only.Admin roles={["superadmin", "manager"]}>
|
|
203
|
+
<div className="bg-red-100 p-4">Admin Only Content</div>
|
|
204
|
+
</Only.Admin>
|
|
205
|
+
);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
export const MobileFeature = () => {
|
|
209
|
+
return (
|
|
210
|
+
<>
|
|
211
|
+
<Only.Mobile>
|
|
212
|
+
<div className="compact-view">Mobile View</div>
|
|
213
|
+
</Only.Mobile>
|
|
214
|
+
|
|
215
|
+
<Only.Web>
|
|
216
|
+
<div className="expanded-view">Desktop View</div>
|
|
217
|
+
</Only.Web>
|
|
218
|
+
</>
|
|
219
|
+
);
|
|
220
|
+
};
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Integration with Store System
|
|
224
|
+
|
|
225
|
+
The components integrate deeply with the Akan.js store system using standardized naming conventions:
|
|
226
|
+
|
|
227
|
+
```tsx
|
|
228
|
+
// Field.ParentId example
|
|
229
|
+
<Field.ParentId
|
|
230
|
+
label="Organization"
|
|
231
|
+
sliceName="orgInUser" // References st.slice.orgInUser
|
|
232
|
+
value={userForm.org}
|
|
233
|
+
onChange={st.do.setOrgOnUser}
|
|
234
|
+
renderOption={(org) => org.name}
|
|
235
|
+
/>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
The components automatically use naming conventions to interact with your store:
|
|
239
|
+
|
|
240
|
+
- `${modelName}List` for accessing list data
|
|
241
|
+
- `init${ModelName}` for initialization functions
|
|
242
|
+
- `${modelName}Form` for form state
|
|
243
|
+
- `add${ModelName}Files` for file uploads
|
|
244
|
+
|
|
245
|
+
## Common Patterns
|
|
246
|
+
|
|
247
|
+
### Render Props
|
|
248
|
+
|
|
249
|
+
Many components use render props for customization:
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
<Data.ListContainer
|
|
253
|
+
renderItem={(item) => <MyItem item={item} />}
|
|
254
|
+
renderDashboard={(props) => <MyDashboard {...props} />}
|
|
255
|
+
renderTemplate={(form) => <MyTemplate form={form} />}
|
|
256
|
+
renderView={(model) => <MyView model={model} />}
|
|
257
|
+
/>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Internationalization
|
|
261
|
+
|
|
262
|
+
Components automatically integrate with the internationalization system:
|
|
263
|
+
|
|
264
|
+
```tsx
|
|
265
|
+
const { l } = usePage();
|
|
266
|
+
|
|
267
|
+
<Field.Text label={l("user.name")} desc={l("user.name.desc")} placeholder={l("user.namePlaceholder")} />;
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### State Management Integration
|
|
271
|
+
|
|
272
|
+
Components seamlessly integrate with the state management:
|
|
273
|
+
|
|
274
|
+
```tsx
|
|
275
|
+
<Field.ToggleSelect value={userForm.role} onChange={(role) => st.do.setRoleOnUser(role)} items={cnst.UserRole} />
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Best Practices
|
|
279
|
+
|
|
280
|
+
1. **Use the appropriate component type** for each part of your feature:
|
|
281
|
+
- Use **Field** components for data entry
|
|
282
|
+
- Use **Data** components for data visualization and management
|
|
283
|
+
- Use **Load** components for data fetching
|
|
284
|
+
- Use **Model** components for CRUD operations
|
|
285
|
+
|
|
286
|
+
2. **Leverage the internationalization system** by using the `l` function for all user-facing text
|
|
287
|
+
|
|
288
|
+
3. **Follow the naming conventions** for store slices and actions to ensure proper integration
|
|
289
|
+
|
|
290
|
+
4. **Use render props** for customization rather than creating custom components
|
|
291
|
+
|
|
292
|
+
5. **Utilize conditional rendering** with Only components rather than conditional logic in your components
|
|
293
|
+
|
|
294
|
+
6. **Structure your modules** following the Akan.js pattern with separate files for each concern
|
|
295
|
+
|
|
296
|
+
## Troubleshooting
|
|
297
|
+
|
|
298
|
+
Common issues and solutions:
|
|
299
|
+
|
|
300
|
+
1. **Component not updating when store changes**: Ensure you're using the correct store slice name and following naming conventions
|
|
301
|
+
|
|
302
|
+
2. **Field validation errors**: Check the validation rules and ensure you're providing the correct props (minlength, maxlength, etc.)
|
|
303
|
+
|
|
304
|
+
3. **Data not loading**: Verify that the loader function is correctly implemented and returning data in the expected format
|
|
305
|
+
|
|
306
|
+
4. **Missing translations**: Ensure that all keys are defined in your dictionary files and that you're using the correct model and field names
|
|
307
|
+
|
|
308
|
+
## Conclusion
|
|
309
|
+
|
|
310
|
+
The shared UI library provides a comprehensive set of components for building data-driven applications with Akan.js. By following the patterns and conventions outlined in this guide, you can efficiently build complex UIs with minimal code.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Util UI Usage",
|
|
3
|
+
"description": "Comprehensive guide on how to use utility library UI components",
|
|
4
|
+
"scans": [
|
|
5
|
+
{
|
|
6
|
+
"type": "source",
|
|
7
|
+
"description": "Core util library source code for UI components",
|
|
8
|
+
"path": "libs/util/ui/**/*.{ts,tsx}"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"type": "source",
|
|
12
|
+
"description": "Main UI component directories for namespace patterns",
|
|
13
|
+
"path": "libs/util/ui/{Button,Input,Select,Image,Link,Layout,Dialog,Loading,Tab,Chart}/**/*.{ts,tsx}"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"type": "example",
|
|
17
|
+
"description": "Form components usage examples",
|
|
18
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View}.tsx",
|
|
19
|
+
"filterText": "import.*\\{ (Button|Input|Select|DatePicker|ToggleSelect).*\\} from \"@util/ui\";",
|
|
20
|
+
"sample": 5
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "example",
|
|
24
|
+
"description": "Navigation component usage examples",
|
|
25
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View}.tsx",
|
|
26
|
+
"filterText": "import.*\\{ (Link|Tab|Menu|ScreenNavigator).*\\} from \"@util/ui\";",
|
|
27
|
+
"sample": 5
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "example",
|
|
31
|
+
"description": "Layout component usage examples",
|
|
32
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View}.tsx",
|
|
33
|
+
"filterText": "import.*\\{ (Layout|Dialog|Modal|BottomSheet).*\\} from \"@util/ui\";",
|
|
34
|
+
"sample": 5
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"type": "example",
|
|
38
|
+
"description": "Media component usage examples",
|
|
39
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View}.tsx",
|
|
40
|
+
"filterText": "import.*\\{ (Image|Upload|Avatar|Chart).*\\} from \"@util/ui\";",
|
|
41
|
+
"sample": 5
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "example",
|
|
45
|
+
"description": "Loading and feedback component usage examples",
|
|
46
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View}.tsx",
|
|
47
|
+
"filterText": "import.*\\{ (Loading|Empty).*\\} from \"@util/ui\";",
|
|
48
|
+
"sample": 5
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"type": "example",
|
|
52
|
+
"description": "Complex component composition examples",
|
|
53
|
+
"path": "{apps,libs}/*/lib/*/*.{Template,Unit,View}.tsx",
|
|
54
|
+
"filterText": "<(Dialog|Tab|Layout)\\.(\\w+)",
|
|
55
|
+
"sample": 5
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"type": "example",
|
|
59
|
+
"description": "UI component integration in Model.Unit.tsx files",
|
|
60
|
+
"path": "{apps,libs}/*/lib/*/*.Unit.tsx",
|
|
61
|
+
"filterText": "from \"@util/ui\";",
|
|
62
|
+
"sample": 3
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"type": "example",
|
|
66
|
+
"description": "UI component integration in Model.Template.tsx files",
|
|
67
|
+
"path": "{apps,libs}/*/lib/*/*.Template.tsx",
|
|
68
|
+
"filterText": "from \"@util/ui\";",
|
|
69
|
+
"sample": 3
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"type": "example",
|
|
73
|
+
"description": "UI component integration in Model.View.tsx files",
|
|
74
|
+
"path": "{apps,libs}/*/lib/*/*.View.tsx",
|
|
75
|
+
"filterText": "from \"@util/ui\";",
|
|
76
|
+
"sample": 3
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"type": "example",
|
|
80
|
+
"description": "UI component usage in Page components",
|
|
81
|
+
"path": "apps/*/page/**/_index.tsx",
|
|
82
|
+
"filterText": "from \"@util/ui\";",
|
|
83
|
+
"sample": 3
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"type": "interface",
|
|
87
|
+
"description": "Button component props interface",
|
|
88
|
+
"path": "libs/util/ui/Button.tsx",
|
|
89
|
+
"interfaceName": "ButtonProps"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"type": "interface",
|
|
93
|
+
"description": "Input component props interface",
|
|
94
|
+
"path": "libs/util/ui/Input.tsx",
|
|
95
|
+
"interfaceName": "InputProps"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"type": "interface",
|
|
99
|
+
"description": "Link component props interface",
|
|
100
|
+
"path": "libs/util/ui/Link/index.tsx",
|
|
101
|
+
"interfaceName": "LinkProps"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"type": "interface",
|
|
105
|
+
"description": "Image component props interface",
|
|
106
|
+
"path": "libs/util/ui/Image.tsx",
|
|
107
|
+
"interfaceName": "ImageProps"
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"update": {
|
|
111
|
+
"filePath": "./utilUiUsage.instruction.md",
|
|
112
|
+
"contents": [
|
|
113
|
+
"@util/ui Component Library Guide",
|
|
114
|
+
"Importing Components",
|
|
115
|
+
"Component Organization and Usage",
|
|
116
|
+
"Common Component Patterns",
|
|
117
|
+
"Form Fields and Data Input",
|
|
118
|
+
"Data Display Components",
|
|
119
|
+
"Navigation Components",
|
|
120
|
+
"Layout Components",
|
|
121
|
+
"Media and File Components",
|
|
122
|
+
"Loading and Feedback Components",
|
|
123
|
+
"Integration with Akan.js Architecture",
|
|
124
|
+
"In Model.Template.tsx",
|
|
125
|
+
"In Model.Unit.tsx",
|
|
126
|
+
"In Model.View.tsx",
|
|
127
|
+
"Best Practices",
|
|
128
|
+
"[Strict Caution]",
|
|
129
|
+
"Framework Integration Features"
|
|
130
|
+
],
|
|
131
|
+
"rules": [
|
|
132
|
+
"Document all major component categories and namespacing patterns",
|
|
133
|
+
"Provide concrete examples for each component type",
|
|
134
|
+
"Explain integration with the Akan.js module architecture",
|
|
135
|
+
"Include best practices for component selection and usage",
|
|
136
|
+
"Detail strict usage requirements for the component library"
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
"page": "/model/[model]"
|
|
140
|
+
}
|