@underpostnet/cyberia 3.2.80
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/.dockerignore +14 -0
- package/.env.example +144 -0
- package/.github/workflows/cyberia-client.cd.yml +40 -0
- package/.github/workflows/cyberia-server.cd.yml +40 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +70 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +71 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +53 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +53 -0
- package/.github/workflows/engine-cyberia.cd.yml +157 -0
- package/.github/workflows/engine-cyberia.ci.yml +125 -0
- package/.github/workflows/ghpkg.ci.yml +160 -0
- package/.github/workflows/gitlab.ci.yml +20 -0
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +126 -0
- package/.github/workflows/publish.ci.yml +87 -0
- package/.github/workflows/publish.cyberia.ci.yml +79 -0
- package/.github/workflows/pwa-microservices-template-page.cd.yml +65 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
- package/.github/workflows/release.cd.yml +46 -0
- package/.nycrc +9 -0
- package/.prettierignore +12 -0
- package/.prettierrc +9 -0
- package/.vscode/extensions.json +10 -0
- package/.vscode/settings.json +26 -0
- package/CHANGELOG.md +2516 -0
- package/CLI-HELP.md +1099 -0
- package/Dockerfile +161 -0
- package/Dockerfile.dev +161 -0
- package/Dockerfile.test +165 -0
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/baremetal/commission-workflows.json +211 -0
- package/baremetal/packer-workflows.json +24 -0
- package/bin/build.js +261 -0
- package/bin/build.template.js +33 -0
- package/bin/cyberia.js +5627 -0
- package/bin/deploy.js +1547 -0
- package/bin/index.js +5627 -0
- package/bump.config.js +27 -0
- package/compose.env +144 -0
- package/conf.js +952 -0
- package/deployment.yaml +418 -0
- package/docker-compose.yml +434 -0
- package/examples/static-page/README.md +150 -0
- package/examples/static-page/ssr-components/CustomPage.js +554 -0
- package/examples/static-page/static-config-example.json +57 -0
- package/hardhat/.env.example +31 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/.gitkeep +0 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +2871 -0
- package/hardhat/package.json +43 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +696 -0
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/ipfs/configure-ipfs.sh +13 -0
- package/jsconfig.json +9 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +48 -0
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +48 -0
- package/manifests/deployment/adminer/deployment.yaml +32 -0
- package/manifests/deployment/adminer/kustomization.yaml +7 -0
- package/manifests/deployment/adminer/service.yaml +13 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +418 -0
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +189 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +164 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +163 -0
- package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
- package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
- package/manifests/deployment/fastapi/backend-service.yml +19 -0
- package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
- package/manifests/deployment/fastapi/frontend-service.yml +15 -0
- package/manifests/deployment/fastapi/initial_data.sh +8 -0
- package/manifests/deployment/kafka/deployment.yaml +67 -0
- package/manifests/deployment/mongo-express/deployment.yaml +62 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/deployment/playwright/deployment.yaml +52 -0
- package/manifests/deployment/spark/spark-pi-py.yaml +20 -0
- package/manifests/deployment/tensorflow/tf-gpu-test.yaml +63 -0
- package/manifests/envoy-service-nodeport.yaml +22 -0
- package/manifests/grafana/deployment.yaml +64 -0
- package/manifests/grafana/kustomization.yaml +7 -0
- package/manifests/grafana/pvc.yaml +12 -0
- package/manifests/grafana/service.yaml +14 -0
- package/manifests/grafana/storage-class.yaml +9 -0
- package/manifests/ipfs/configmap.yaml +64 -0
- package/manifests/ipfs/headless-service.yaml +35 -0
- package/manifests/ipfs/kustomization.yaml +8 -0
- package/manifests/ipfs/statefulset.yaml +149 -0
- package/manifests/ipfs/storage-class.yaml +9 -0
- package/manifests/kind-config-dev.yaml +20 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/kubeadm-calico-config.yaml +14 -0
- package/manifests/letsencrypt-prod.yaml +14 -0
- package/manifests/lxd/lxd-admin-profile.yaml +26 -0
- package/manifests/lxd/lxd-preseed.yaml +30 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +56 -0
- package/manifests/mariadb/storage-class.yaml +10 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +59 -0
- package/manifests/mongodb/statefulset.yaml +113 -0
- package/manifests/mongodb/storage-class.yaml +9 -0
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +9 -0
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +19 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +61 -0
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/mysql/kustomization.yaml +7 -0
- package/manifests/mysql/pv-pvc.yaml +27 -0
- package/manifests/mysql/statefulset.yaml +55 -0
- package/manifests/postgresql/configmap.yaml +9 -0
- package/manifests/postgresql/kustomization.yaml +10 -0
- package/manifests/postgresql/pv.yaml +15 -0
- package/manifests/postgresql/pvc.yaml +13 -0
- package/manifests/postgresql/service.yaml +10 -0
- package/manifests/postgresql/statefulset.yaml +37 -0
- package/manifests/prometheus/deployment.yaml +82 -0
- package/manifests/pv-pvc-dd.yaml +34 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +10 -0
- package/manifests/valkey/statefulset.yaml +37 -0
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +128 -0
- package/nodemon.json +6 -0
- package/package.json +101 -0
- package/packer/images/Rocky9Amd64/Makefile +62 -0
- package/packer/images/Rocky9Amd64/QUICKSTART.md +113 -0
- package/packer/images/Rocky9Amd64/README.md +122 -0
- package/packer/images/Rocky9Amd64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Amd64/rocky9.pkr.hcl +164 -0
- package/packer/images/Rocky9Arm64/Makefile +69 -0
- package/packer/images/Rocky9Arm64/README.md +122 -0
- package/packer/images/Rocky9Arm64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Arm64/rocky9.pkr.hcl +171 -0
- package/packer/scripts/fuse-nbd +64 -0
- package/packer/scripts/fuse-tar-root +63 -0
- package/proxy.yaml +189 -0
- package/pv-pvc.yaml +164 -0
- package/scripts/device-scan.sh +65 -0
- package/scripts/disk-clean.sh +182 -0
- package/scripts/disk-devices.sh +13 -0
- package/scripts/gen-fqdns.sh +14 -0
- package/scripts/gpu-diag.sh +19 -0
- package/scripts/ip-info.sh +118 -0
- package/scripts/ipxe-setup.sh +200 -0
- package/scripts/k3s-node-setup.sh +124 -0
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/lxd-vm-setup.sh +208 -0
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/maas-setup.sh +135 -0
- package/scripts/maas-upload-boot-resource.sh +183 -0
- package/scripts/nat-iptables.sh +111 -0
- package/scripts/nvim.sh +91 -0
- package/scripts/packer-init-vars-file.sh +40 -0
- package/scripts/packer-setup.sh +289 -0
- package/scripts/ports-ls.sh +33 -0
- package/scripts/quick-tftp.sh +19 -0
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/scripts/rocky-kickstart.sh +986 -0
- package/scripts/rocky-pwa.sh +200 -0
- package/scripts/rocky-setup.sh +106 -0
- package/scripts/rpmfusion-ffmpeg-setup.sh +32 -0
- package/scripts/ssl.sh +170 -0
- package/scripts/test-monitor.sh +248 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +30 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +155 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +39 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +382 -0
- package/src/api/core/core.controller.js +8 -0
- package/src/api/core/core.model.js +11 -0
- package/src/api/core/core.router.js +23 -0
- package/src/api/core/core.service.js +30 -0
- package/src/api/crypto/crypto.controller.js +10 -0
- package/src/api/crypto/crypto.model.js +23 -0
- package/src/api/crypto/crypto.router.js +23 -0
- package/src/api/crypto/crypto.service.js +64 -0
- package/src/api/cyberia-action/cyberia-action.controller.js +8 -0
- package/src/api/cyberia-action/cyberia-action.model.js +79 -0
- package/src/api/cyberia-action/cyberia-action.router.js +21 -0
- package/src/api/cyberia-action/cyberia-action.service.js +58 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +27 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +100 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +70 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +8 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +20 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +57 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +6 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +25 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +17 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +6 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +67 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +46 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +337 -0
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +57 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +583 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +42 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +117 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +75 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +190 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
- package/src/api/cyberia-instance/cyberia-world-generator.js +618 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +6 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +200 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +17 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +6 -0
- package/src/api/cyberia-map/cyberia-map.model.js +33 -0
- package/src/api/cyberia-map/cyberia-map.router.js +19 -0
- package/src/api/cyberia-map/cyberia-map.service.js +76 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +9 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +26 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +97 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +6 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +21 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-saga/cyberia-saga.controller.js +6 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +17 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +1076 -0
- package/src/api/cyberia-skill/cyberia-skill.controller.js +6 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +17 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/default/default.controller.js +6 -0
- package/src/api/default/default.model.js +20 -0
- package/src/api/default/default.router.js +21 -0
- package/src/api/default/default.service.js +42 -0
- package/src/api/document/document.controller.js +9 -0
- package/src/api/document/document.model.js +95 -0
- package/src/api/document/document.router.js +32 -0
- package/src/api/document/document.service.js +633 -0
- package/src/api/file/file.controller.js +15 -0
- package/src/api/file/file.model.js +127 -0
- package/src/api/file/file.ref.json +39 -0
- package/src/api/file/file.router.js +36 -0
- package/src/api/file/file.service.js +499 -0
- package/src/api/instance/instance.controller.js +8 -0
- package/src/api/instance/instance.model.js +34 -0
- package/src/api/instance/instance.router.js +27 -0
- package/src/api/instance/instance.service.js +75 -0
- package/src/api/ipfs/ipfs.controller.js +8 -0
- package/src/api/ipfs/ipfs.model.js +77 -0
- package/src/api/ipfs/ipfs.router.js +26 -0
- package/src/api/ipfs/ipfs.service.js +145 -0
- package/src/api/object-layer/object-layer.controller.js +18 -0
- package/src/api/object-layer/object-layer.model.js +200 -0
- package/src/api/object-layer/object-layer.router.js +729 -0
- package/src/api/object-layer/object-layer.service.js +894 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +6 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +93 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +17 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +46 -0
- package/src/api/test/test.controller.js +14 -0
- package/src/api/test/test.model.js +14 -0
- package/src/api/test/test.router.js +23 -0
- package/src/api/test/test.service.js +35 -0
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/postman_collection.json +216 -0
- package/src/api/user/user.build.js +16 -0
- package/src/api/user/user.controller.js +35 -0
- package/src/api/user/user.model.js +142 -0
- package/src/api/user/user.router.js +367 -0
- package/src/api/user/user.service.js +582 -0
- package/src/api.js +23 -0
- package/src/cli/baremetal.js +3947 -0
- package/src/cli/cloud-init.js +673 -0
- package/src/cli/cluster.js +1395 -0
- package/src/cli/db.js +1533 -0
- package/src/cli/deploy.js +1542 -0
- package/src/cli/docker-compose.js +802 -0
- package/src/cli/env.js +177 -0
- package/src/cli/fs.js +380 -0
- package/src/cli/image.js +389 -0
- package/src/cli/index.js +1059 -0
- package/src/cli/ipfs.js +182 -0
- package/src/cli/kickstart.js +271 -0
- package/src/cli/kubectl.js +214 -0
- package/src/cli/lxd.js +1232 -0
- package/src/cli/monitor.js +659 -0
- package/src/cli/release.js +595 -0
- package/src/cli/repository.js +1969 -0
- package/src/cli/run.js +3326 -0
- package/src/cli/secrets.js +151 -0
- package/src/cli/ssh.js +975 -0
- package/src/cli/static.js +653 -0
- package/src/cli/system.js +332 -0
- package/src/cli/test.js +176 -0
- package/src/client/Cryptokoyn.index.js +30 -0
- package/src/client/CyberiaPortal.index.js +31 -0
- package/src/client/Default.index.js +77 -0
- package/src/client/Itemledger.index.js +35 -0
- package/src/client/Underpost.index.js +31 -0
- package/src/client/components/core/404.js +20 -0
- package/src/client/components/core/500.js +20 -0
- package/src/client/components/core/Account.js +630 -0
- package/src/client/components/core/AgGrid.js +238 -0
- package/src/client/components/core/Alert.js +76 -0
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/Auth.js +353 -0
- package/src/client/components/core/Badge.js +26 -0
- package/src/client/components/core/Blockchain.js +41 -0
- package/src/client/components/core/Blog.js +9 -0
- package/src/client/components/core/BtnIcon.js +109 -0
- package/src/client/components/core/CalendarCore.js +437 -0
- package/src/client/components/core/Chat.js +62 -0
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/CommonJs.js +1014 -0
- package/src/client/components/core/Content.js +349 -0
- package/src/client/components/core/Css.js +1134 -0
- package/src/client/components/core/CssCore.js +881 -0
- package/src/client/components/core/D3Chart.js +44 -0
- package/src/client/components/core/Docs.js +478 -0
- package/src/client/components/core/DropDown.js +321 -0
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +130 -0
- package/src/client/components/core/FileExplorer.js +1406 -0
- package/src/client/components/core/FullScreen.js +201 -0
- package/src/client/components/core/Input.js +537 -0
- package/src/client/components/core/Keyboard.js +80 -0
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +152 -0
- package/src/client/components/core/LogIn.js +212 -0
- package/src/client/components/core/LogOut.js +72 -0
- package/src/client/components/core/Logger.js +22 -0
- package/src/client/components/core/Modal.js +2956 -0
- package/src/client/components/core/NotificationManager.js +80 -0
- package/src/client/components/core/Pagination.js +252 -0
- package/src/client/components/core/Panel.js +1308 -0
- package/src/client/components/core/PanelForm.js +915 -0
- package/src/client/components/core/Polyhedron.js +947 -0
- package/src/client/components/core/PublicProfile.js +895 -0
- package/src/client/components/core/Recover.js +211 -0
- package/src/client/components/core/Responsive.js +146 -0
- package/src/client/components/core/RichText.js +33 -0
- package/src/client/components/core/Router.js +523 -0
- package/src/client/components/core/Scroll.js +76 -0
- package/src/client/components/core/SearchBox.js +1007 -0
- package/src/client/components/core/SignUp.js +153 -0
- package/src/client/components/core/SocketIo.js +163 -0
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +161 -0
- package/src/client/components/core/ToggleSwitch.js +89 -0
- package/src/client/components/core/ToolTip.js +78 -0
- package/src/client/components/core/Translate.js +694 -0
- package/src/client/components/core/Validator.js +140 -0
- package/src/client/components/core/VanillaJs.js +485 -0
- package/src/client/components/core/Wallet.js +95 -0
- package/src/client/components/core/WebComponent.js +44 -0
- package/src/client/components/core/Webhook.js +58 -0
- package/src/client/components/core/Worker.js +313 -0
- package/src/client/components/core/windowGetDimensions.js +269 -0
- package/src/client/components/cryptokoyn/AppShellCryptokoyn.js +352 -0
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +212 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +12 -0
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +11 -0
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +6 -0
- package/src/client/components/cyberia/ActionEngineCyberia.js +1867 -0
- package/src/client/components/cyberia/EntityEngineCyberia.js +585 -0
- package/src/client/components/cyberia/InstanceEngineCyberia.js +1088 -0
- package/src/client/components/cyberia/InstanceSelectionView.js +900 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1976 -0
- package/src/client/components/cyberia/ObjectLayerEngine.js +1540 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +2420 -0
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +1522 -0
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +528 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +772 -0
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +254 -0
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +21 -0
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +518 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +72 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +13 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +6 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +48 -0
- package/src/client/components/default/AppShellDefault.js +765 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/CommonDefault.js +29 -0
- package/src/client/components/default/CssDefault.js +27 -0
- package/src/client/components/default/LogInDefault.js +16 -0
- package/src/client/components/default/LogOutDefault.js +12 -0
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +16 -0
- package/src/client/components/default/SignUpDefault.js +11 -0
- package/src/client/components/default/SocketIoDefault.js +6 -0
- package/src/client/components/default/TranslateDefault.js +7 -0
- package/src/client/components/itemledger/AppShellItemledger.js +353 -0
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/CssItemledger.js +212 -0
- package/src/client/components/itemledger/LogInItemledger.js +17 -0
- package/src/client/components/itemledger/LogOutItemledger.js +12 -0
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +16 -0
- package/src/client/components/itemledger/SignUpItemledger.js +11 -0
- package/src/client/components/itemledger/SocketIoItemledger.js +6 -0
- package/src/client/components/itemledger/TranslateItemledger.js +7 -0
- package/src/client/components/underpost/AppShellUnderpost.js +691 -0
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/CssUnderpost.js +281 -0
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
- package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
- package/src/client/components/underpost/LabGalleryUnderpost.js +79 -0
- package/src/client/components/underpost/LogInUnderpost.js +25 -0
- package/src/client/components/underpost/LogOutUnderpost.js +17 -0
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +16 -0
- package/src/client/components/underpost/SignUpUnderpost.js +11 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +6 -0
- package/src/client/components/underpost/TranslateUnderpost.js +10 -0
- package/src/client/public/cryptokoyn/assets/banner/koyn-social.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/cryptokoyn.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-192x192.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-256x256.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-36x36.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-48x48.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-96x96.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-16x16.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-32x32.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-150x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x310.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-70x70.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/safari-pinned-tab.svg +42 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/favicon.ico +0 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +148 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +307 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +309 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +341 -0
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +84 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +294 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +242 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +309 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +228 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +740 -0
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/dark.svg +557 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/default/assets/logo/base-icon.png +0 -0
- package/src/client/public/default/assets/logo/underpost.gif +0 -0
- package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
- package/src/client/public/default/browserconfig.xml +12 -0
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +69 -0
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/safari-pinned-tab.svg +24 -0
- package/src/client/public/default/site.webmanifest +69 -0
- package/src/client/public/default/sitemap +148 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +9 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +148 -0
- package/src/client/public/itemledger/android-chrome-144x144.png +0 -0
- package/src/client/public/itemledger/android-chrome-192x192.png +0 -0
- package/src/client/public/itemledger/android-chrome-256x256.png +0 -0
- package/src/client/public/itemledger/android-chrome-36x36.png +0 -0
- package/src/client/public/itemledger/android-chrome-384x384.png +0 -0
- package/src/client/public/itemledger/android-chrome-48x48.png +0 -0
- package/src/client/public/itemledger/android-chrome-512x512.png +0 -0
- package/src/client/public/itemledger/android-chrome-72x72.png +0 -0
- package/src/client/public/itemledger/android-chrome-96x96.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/itemledger/assets/logo/base-icon.png +0 -0
- package/src/client/public/itemledger/browserconfig.xml +12 -0
- package/src/client/public/itemledger/favicon-16x16.png +0 -0
- package/src/client/public/itemledger/favicon-32x32.png +0 -0
- package/src/client/public/itemledger/favicon-48x48.png +0 -0
- package/src/client/public/itemledger/favicon.ico +0 -0
- package/src/client/public/itemledger/manifest.webmanifest +69 -0
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/mstile-144x144.png +0 -0
- package/src/client/public/itemledger/mstile-150x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x310.png +0 -0
- package/src/client/public/itemledger/mstile-70x70.png +0 -0
- package/src/client/public/itemledger/sitemap +148 -0
- package/src/client/public/itemledger/yandex-browser-50x50.png +0 -0
- package/src/client/public/itemledger/yandex-browser-manifest.json +9 -0
- package/src/client/public/test/favicon.ico +0 -0
- package/src/client/public/test/sitemap +148 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +137 -0
- package/src/client/services/core/core.service.js +309 -0
- package/src/client/services/crypto/crypto.service.js +68 -0
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +99 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +99 -0
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +137 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +99 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +120 -0
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/cyberia-saga/cyberia-saga.service.js +99 -0
- package/src/client/services/cyberia-skill/cyberia-skill.service.js +99 -0
- package/src/client/services/default/default.management.js +1015 -0
- package/src/client/services/default/default.service.js +99 -0
- package/src/client/services/document/document.service.js +134 -0
- package/src/client/services/file/file.service.js +94 -0
- package/src/client/services/instance/instance.management.js +78 -0
- package/src/client/services/instance/instance.service.js +107 -0
- package/src/client/services/ipfs/ipfs.service.js +118 -0
- package/src/client/services/object-layer/object-layer.management.js +414 -0
- package/src/client/services/object-layer/object-layer.service.js +208 -0
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +99 -0
- package/src/client/services/test/test.service.js +68 -0
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +51 -0
- package/src/client/services/user/user.service.js +106 -0
- package/src/client/ssr/RootDocument.js +237 -0
- package/src/client/ssr/body/404.js +77 -0
- package/src/client/ssr/body/500.js +76 -0
- package/src/client/ssr/body/CacheControl.js +117 -0
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/DefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +90 -0
- package/src/client/ssr/head/CryptokoynScripts.js +4 -0
- package/src/client/ssr/head/Css.js +241 -0
- package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
- package/src/client/ssr/head/DefaultScripts.js +6 -0
- package/src/client/ssr/head/ItemledgerScripts.js +4 -0
- package/src/client/ssr/head/Microdata.js +11 -0
- package/src/client/ssr/head/Production.js +1 -0
- package/src/client/ssr/head/Pwa.js +146 -0
- package/src/client/ssr/head/PwaItemledger.js +197 -0
- package/src/client/ssr/head/Seo.js +15 -0
- package/src/client/ssr/head/UnderpostScripts.js +6 -0
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +20 -0
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +16 -0
- package/src/client/ssr/views/Cyberia404.js +328 -0
- package/src/client/ssr/views/CyberiaServerMetrics.js +1070 -0
- package/src/client/ssr/views/Maintenance.js +64 -0
- package/src/client/ssr/views/NoNetworkConnection.js +68 -0
- package/src/client/ssr/views/Test.js +199 -0
- package/src/client/sw/core.sw.js +274 -0
- package/src/client-builder/client-build-docs.js +493 -0
- package/src/client-builder/client-build-live.js +100 -0
- package/src/client-builder/client-build.js +1092 -0
- package/src/client-builder/client-dev-server.js +88 -0
- package/src/client-builder/client-formatted.js +170 -0
- package/src/client-builder/client-icons.js +108 -0
- package/src/client-builder/ssr.js +124 -0
- package/src/client.build.js +17 -0
- package/src/client.dev.js +21 -0
- package/src/db/DataBaseProvider.js +213 -0
- package/src/db/mariadb/MariaDB.js +72 -0
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +199 -0
- package/src/grpc/cyberia/grpc-server.js +162 -0
- package/src/index.js +357 -0
- package/src/mailer/EmailRender.js +116 -0
- package/src/mailer/MailerProvider.js +213 -0
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +413 -0
- package/src/projects/cyberia/besu-genesis-generator.js +1630 -0
- package/src/projects/cyberia/catalog-cyberia.js +90 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2137 -0
- package/src/projects/cyberia/hot-reload-trigger.js +163 -0
- package/src/projects/cyberia/instance-data.js +719 -0
- package/src/projects/cyberia/ipfs-client.js +599 -0
- package/src/projects/cyberia/map-preview-generator.js +304 -0
- package/src/projects/cyberia/object-layer.js +978 -0
- package/src/projects/cyberia/semantic-layer-generator-floor.js +319 -0
- package/src/projects/cyberia/semantic-layer-generator-resource.js +259 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +1164 -0
- package/src/projects/cyberia/semantic-layer-generator.js +753 -0
- package/src/projects/cyberia/shape-generator.js +1060 -0
- package/src/projects/underpost/catalog-underpost.js +60 -0
- package/src/proxy.js +19 -0
- package/src/runtime/cyberia-client/Dockerfile +49 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +75 -0
- package/src/runtime/cyberia-server/Dockerfile +43 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +56 -0
- package/src/runtime/engine-cyberia/Dockerfile +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +144 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +434 -0
- package/src/runtime/engine-cyberia/ipfs/configure-ipfs.sh +13 -0
- package/src/runtime/engine-cyberia/mongodb/entrypoint.sh +76 -0
- package/src/runtime/engine-cyberia/nginx.conf +128 -0
- package/src/runtime/express/Dockerfile +45 -0
- package/src/runtime/express/Express.js +285 -0
- package/src/runtime/lampp/Dockerfile +62 -0
- package/src/runtime/lampp/Lampp.js +359 -0
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/runtime/wp/Dockerfile +62 -0
- package/src/runtime/wp/Wp.js +642 -0
- package/src/server/auth.js +713 -0
- package/src/server/backup.js +102 -0
- package/src/server/catalog.js +72 -0
- package/src/server/conf.js +2316 -0
- package/src/server/cron.js +476 -0
- package/src/server/crypto.js +210 -0
- package/src/server/data-query.js +461 -0
- package/src/server/dns.js +553 -0
- package/src/server/downloader.js +73 -0
- package/src/server/logger.js +229 -0
- package/src/server/middlewares.js +152 -0
- package/src/server/peer.js +75 -0
- package/src/server/process.js +299 -0
- package/src/server/proxy.js +139 -0
- package/src/server/runtime-status.js +252 -0
- package/src/server/runtime.js +183 -0
- package/src/server/start.js +272 -0
- package/src/server/tls.js +254 -0
- package/src/server/valkey.js +201 -0
- package/src/server.js +25 -0
- package/src/ws/IoInterface.js +129 -0
- package/src/ws/IoServer.js +68 -0
- package/src/ws/core/channels/core.ws.chat.js +68 -0
- package/src/ws/core/channels/core.ws.mailer.js +116 -0
- package/src/ws/core/channels/core.ws.stream.js +90 -0
- package/src/ws/core/core.ws.connection.js +41 -0
- package/src/ws/core/core.ws.emit.js +37 -0
- package/src/ws/core/core.ws.server.js +44 -0
- package/src/ws/default/channels/default.ws.main.js +57 -0
- package/src/ws/default/default.ws.connection.js +35 -0
- package/src/ws/default/default.ws.emit.js +14 -0
- package/src/ws/default/default.ws.server.js +39 -0
- package/test/api.test.js +53 -0
- package/test/crypto.test.js +117 -0
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +267 -0
- package/test/shape-generator.test.js +463 -0
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +31 -0
- package/typedoc.json +31 -0
|
@@ -0,0 +1,1007 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable search component with extensible plugin architecture.
|
|
3
|
+
* Provides typeahead search functionality with support for multiple search providers,
|
|
4
|
+
* custom rendering, keyboard navigation, and theme-aware styling.
|
|
5
|
+
* @module src/client/components/core/SearchBox.js
|
|
6
|
+
* @namespace SearchBoxClient
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { loggerFactory } from './Logger.js';
|
|
10
|
+
import { s, getAllChildNodes, htmls } from './VanillaJs.js';
|
|
11
|
+
import { Translate } from './Translate.js';
|
|
12
|
+
import { darkTheme, ThemeEvents, subThemeManager, lightenHex, darkenHex } from './Css.js';
|
|
13
|
+
|
|
14
|
+
const logger = loggerFactory(import.meta);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* SearchBox class providing extensible search functionality.
|
|
18
|
+
* Supports default menu/route search and pluggable search providers with
|
|
19
|
+
* custom rendering, click handlers, and result merging.
|
|
20
|
+
* @memberof SearchBoxClient
|
|
21
|
+
*/
|
|
22
|
+
class SearchBox {
|
|
23
|
+
/**
|
|
24
|
+
* Internal data storage for search state and handlers.
|
|
25
|
+
* @type {object}
|
|
26
|
+
* @memberof SearchBoxClient.SearchBox
|
|
27
|
+
*/
|
|
28
|
+
static Data = {};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Registry of registered search provider plugins.
|
|
32
|
+
* Each provider implements the search provider interface:
|
|
33
|
+
* - id: Unique identifier string
|
|
34
|
+
* - search: async (query, context) => Promise<Array<result>>
|
|
35
|
+
* - renderResult: (result, index, context) => string (HTML)
|
|
36
|
+
* - onClick: (result, context) => void
|
|
37
|
+
* - priority: number (lower number = higher priority)
|
|
38
|
+
* @type {Array<object>}
|
|
39
|
+
* @memberof SearchBoxClient.SearchBox
|
|
40
|
+
*/
|
|
41
|
+
static providers = [];
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Recent search results manager with localStorage persistence.
|
|
45
|
+
* Tracks clicked results from all providers (routes and custom).
|
|
46
|
+
* Maintains order of most-recent-first results across sessions.
|
|
47
|
+
* @type {object}
|
|
48
|
+
* @memberof SearchBoxClient.SearchBox
|
|
49
|
+
*/
|
|
50
|
+
static RecentResults = {
|
|
51
|
+
/**
|
|
52
|
+
* Storage key for localStorage persistence
|
|
53
|
+
* @type {string}
|
|
54
|
+
*/
|
|
55
|
+
storageKey: 'searchbox_recent_results',
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Maximum number of recent results to keep in history
|
|
59
|
+
* @type {number}
|
|
60
|
+
*/
|
|
61
|
+
maxResults: 20,
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Get all cached recent results from localStorage
|
|
65
|
+
* @returns {Array<object>} Array of recent result objects
|
|
66
|
+
*/
|
|
67
|
+
getAll: function () {
|
|
68
|
+
try {
|
|
69
|
+
const stored = localStorage.getItem(this.storageKey);
|
|
70
|
+
return stored ? JSON.parse(stored) : [];
|
|
71
|
+
} catch (error) {
|
|
72
|
+
logger.warn('Error reading search history from localStorage:', error);
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Save recent results to localStorage
|
|
79
|
+
* @param {Array<object>} results - Array of results to save
|
|
80
|
+
*/
|
|
81
|
+
saveAll: function (results) {
|
|
82
|
+
try {
|
|
83
|
+
localStorage.setItem(this.storageKey, JSON.stringify(results.slice(0, this.maxResults)));
|
|
84
|
+
} catch (error) {
|
|
85
|
+
logger.warn('Error saving search history to localStorage:', error);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Add a result to recent history (moves to front if duplicate)
|
|
91
|
+
* Removes duplicates and maintains max size limit.
|
|
92
|
+
* Only stores serializable data (excludes DOM elements).
|
|
93
|
+
* @param {object} result - Result object to add (must have id and providerId/routerId)
|
|
94
|
+
*/
|
|
95
|
+
add: function (result) {
|
|
96
|
+
if (!result || (!result.id && !result.routerId)) {
|
|
97
|
+
logger.warn('SearchBox.RecentResults.add: Invalid result, missing id or routerId');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Create a clean copy excluding DOM elements (fontAwesomeIcon, imgElement)
|
|
102
|
+
const cleanResult = {
|
|
103
|
+
id: result.id,
|
|
104
|
+
routerId: result.routerId,
|
|
105
|
+
type: result.type,
|
|
106
|
+
providerId: result.providerId,
|
|
107
|
+
title: result.title,
|
|
108
|
+
subtitle: result.subtitle,
|
|
109
|
+
tags: result.tags,
|
|
110
|
+
createdAt: result.createdAt,
|
|
111
|
+
data: result.data,
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const recent = this.getAll();
|
|
115
|
+
|
|
116
|
+
// Remove duplicate if it exists (based on id and providerId/routerId)
|
|
117
|
+
const filteredRecent = recent.filter((r) => {
|
|
118
|
+
if (cleanResult.providerId && r.providerId) {
|
|
119
|
+
return !(r.id === cleanResult.id && r.providerId === cleanResult.providerId);
|
|
120
|
+
} else if (cleanResult.routerId && r.routerId) {
|
|
121
|
+
return r.routerId !== cleanResult.routerId;
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// Add new result to front
|
|
127
|
+
filteredRecent.unshift(cleanResult);
|
|
128
|
+
|
|
129
|
+
// Save to localStorage
|
|
130
|
+
this.saveAll(filteredRecent);
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Clear all recent results from localStorage
|
|
135
|
+
*/
|
|
136
|
+
clear: function () {
|
|
137
|
+
try {
|
|
138
|
+
localStorage.removeItem(this.storageKey);
|
|
139
|
+
} catch (error) {
|
|
140
|
+
logger.warn('Error clearing search history:', error);
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Remove a single result from recent history by ID and provider
|
|
146
|
+
* @param {string} resultId - Result ID to remove
|
|
147
|
+
* @param {string} [providerId] - Provider ID of the result (optional, for routes use null)
|
|
148
|
+
*/
|
|
149
|
+
remove: function (resultId, providerId) {
|
|
150
|
+
const recent = this.getAll();
|
|
151
|
+
const filtered = recent.filter((r) => {
|
|
152
|
+
// Match by ID and providerId (or routerId for routes)
|
|
153
|
+
if (providerId) {
|
|
154
|
+
return !(r.id === resultId && r.providerId === providerId);
|
|
155
|
+
} else {
|
|
156
|
+
// For routes (providerId is null), match by routerId instead
|
|
157
|
+
return !(r.routerId === resultId);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
this.saveAll(filtered);
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Registers a search provider plugin for extensible search functionality.
|
|
166
|
+
* Replaces any existing provider with the same ID.
|
|
167
|
+
* @memberof SearchBoxClient.SearchBox
|
|
168
|
+
* @param {object} provider - The search provider object to register.
|
|
169
|
+
* @param {string} provider.id - Unique identifier for the provider.
|
|
170
|
+
* @param {Function} provider.search - Async function: (query, context) => Promise<Array<result>>.
|
|
171
|
+
* @param {Function} [provider.renderResult] - Custom renderer: (result, index, context) => HTML string.
|
|
172
|
+
* @param {Function} [provider.onClick] - Click handler: (result, context) => void.
|
|
173
|
+
* @param {number} [provider.priority=50] - Priority for result ordering (lower = higher priority).
|
|
174
|
+
* @returns {void}
|
|
175
|
+
*/
|
|
176
|
+
static registerProvider(provider) {
|
|
177
|
+
if (!provider.id || !provider.search) {
|
|
178
|
+
logger.error('Invalid provider. Must have id and search function');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Remove existing provider with same id
|
|
183
|
+
this.providers = this.providers.filter((p) => p.id !== provider.id);
|
|
184
|
+
|
|
185
|
+
// Add new provider
|
|
186
|
+
this.providers.push({
|
|
187
|
+
id: provider.id,
|
|
188
|
+
search: provider.search,
|
|
189
|
+
renderResult: provider.renderResult || ((result) => this.defaultRenderResult(result)),
|
|
190
|
+
onClick: provider.onClick || (() => {}),
|
|
191
|
+
priority: provider.priority || 50, // Lower number = higher priority in results
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
logger.info(`Registered search provider: ${provider.id}`);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Unregisters a search provider by its ID.
|
|
199
|
+
* @memberof SearchBoxClient.SearchBox
|
|
200
|
+
* @param {string} providerId - The ID of the provider to unregister.
|
|
201
|
+
* @returns {void}
|
|
202
|
+
*/
|
|
203
|
+
static unregisterProvider(providerId) {
|
|
204
|
+
this.providers = this.providers.filter((p) => p.id !== providerId);
|
|
205
|
+
logger.info(`Unregistered search provider: ${providerId}`);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Default result renderer with support for tags and badges.
|
|
210
|
+
* Used when a provider doesn't supply a custom renderResult function.
|
|
211
|
+
* @memberof SearchBoxClient.SearchBox
|
|
212
|
+
* @param {object} result - The search result object to render.
|
|
213
|
+
* @param {string} result.id - Result identifier.
|
|
214
|
+
* @param {string} [result.icon] - HTML for icon display.
|
|
215
|
+
* @param {string} [result.title] - Result title text.
|
|
216
|
+
* @param {string} [result.subtitle] - Result subtitle text.
|
|
217
|
+
* @param {Array<string>} [result.tags] - Array of tag strings.
|
|
218
|
+
* @param {string} result.type - Result type identifier.
|
|
219
|
+
* @param {string} result.providerId - Provider ID that generated this result.
|
|
220
|
+
* @returns {string} HTML string for the search result.
|
|
221
|
+
*/
|
|
222
|
+
static defaultRenderResult(result) {
|
|
223
|
+
const icon = result.icon || '<i class="fas fa-file"></i>';
|
|
224
|
+
const title = result.title || result.id || 'Untitled';
|
|
225
|
+
const subtitle = result.subtitle || '';
|
|
226
|
+
const tags = result.tags || [];
|
|
227
|
+
|
|
228
|
+
// instance tags if available
|
|
229
|
+
const tagsHtml =
|
|
230
|
+
tags.length > 0
|
|
231
|
+
? `<div class="search-result-tags">
|
|
232
|
+
${tags.map((tag) => `<span class="search-result-tag">${tag}</span>`).join('')}
|
|
233
|
+
</div>`
|
|
234
|
+
: '';
|
|
235
|
+
|
|
236
|
+
return html`
|
|
237
|
+
<div
|
|
238
|
+
class="search-result-item"
|
|
239
|
+
data-result-id="${result.id}"
|
|
240
|
+
data-result-type="${result.type}"
|
|
241
|
+
data-provider-id="${result.providerId}"
|
|
242
|
+
>
|
|
243
|
+
<div class="search-result-icon">${icon}</div>
|
|
244
|
+
<div class="search-result-content">
|
|
245
|
+
<div class="search-result-title">${title}</div>
|
|
246
|
+
${subtitle ? `<div class="search-result-subtitle">${subtitle}</div>` : ''} ${tagsHtml}
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
`;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Navigates through search results using keyboard arrow keys.
|
|
254
|
+
* Optimized for performance with direct DOM manipulation and efficient scrolling.
|
|
255
|
+
* Supports wrap-around navigation (top to bottom and vice versa).
|
|
256
|
+
* @memberof SearchBoxClient.SearchBox
|
|
257
|
+
* @param {string} direction - Navigation direction: 'up' or 'down'.
|
|
258
|
+
* @param {string} containerId - Results container element ID or class name.
|
|
259
|
+
* @param {number} currentIndex - Current active result index (0-based).
|
|
260
|
+
* @param {number} totalItems - Total number of result items.
|
|
261
|
+
* @returns {number} New active index after navigation.
|
|
262
|
+
*/
|
|
263
|
+
static navigateResults(direction, containerId, currentIndex, totalItems) {
|
|
264
|
+
if (!containerId || totalItems === 0) return currentIndex;
|
|
265
|
+
|
|
266
|
+
const container = s(`#${containerId}`) || s(`.${containerId}`);
|
|
267
|
+
const allItems = container ? container.querySelectorAll('.search-result-item') : [];
|
|
268
|
+
|
|
269
|
+
if (!allItems || allItems.length === 0) return currentIndex;
|
|
270
|
+
|
|
271
|
+
// Remove active class from current item (efficient DOM manipulation)
|
|
272
|
+
if (allItems[currentIndex]) {
|
|
273
|
+
allItems[currentIndex].classList.remove('active-search-result');
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Calculate new index with wrap-around
|
|
277
|
+
let newIndex = currentIndex;
|
|
278
|
+
if (direction === 'up') {
|
|
279
|
+
newIndex = currentIndex > 0 ? currentIndex - 1 : allItems.length - 1;
|
|
280
|
+
} else if (direction === 'down') {
|
|
281
|
+
newIndex = currentIndex < allItems.length - 1 ? currentIndex + 1 : 0;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Add active class to new item and ensure visibility
|
|
285
|
+
if (allItems[newIndex]) {
|
|
286
|
+
allItems[newIndex].classList.add('active-search-result');
|
|
287
|
+
// Use optimized scroll method (no animation, instant positioning)
|
|
288
|
+
this.scrollIntoViewIfNeeded(allItems[newIndex], container);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
return newIndex;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Searches through default application routes for matches.
|
|
296
|
+
* Backward compatible with Modal.js search functionality.
|
|
297
|
+
* Matches route IDs and translated route names against the query string.
|
|
298
|
+
* @memberof SearchBoxClient.SearchBox
|
|
299
|
+
* @param {string} query - The search query string.
|
|
300
|
+
* @param {object} context - Search context object.
|
|
301
|
+
* @param {object} [context.RouterInstance] - Router instance containing routes.
|
|
302
|
+
* @param {object} [context.options] - Additional search options.
|
|
303
|
+
* @param {string} [context.options.searchCustomImgClass] - Custom image class to search for.
|
|
304
|
+
* @returns {Array<object>} Array of route search results.
|
|
305
|
+
*/
|
|
306
|
+
static searchRoutes(query, context) {
|
|
307
|
+
const results = [];
|
|
308
|
+
const { RouterInstance, options = {} } = context;
|
|
309
|
+
|
|
310
|
+
if (!RouterInstance) return results;
|
|
311
|
+
|
|
312
|
+
const routerInstance = RouterInstance.Routes();
|
|
313
|
+
for (const _routerId of Object.keys(routerInstance)) {
|
|
314
|
+
const routerId = _routerId.slice(1);
|
|
315
|
+
if (routerId) {
|
|
316
|
+
if (
|
|
317
|
+
s(`.main-btn-${routerId}`) &&
|
|
318
|
+
(routerId.toLowerCase().match(query.toLowerCase()) ||
|
|
319
|
+
(Translate.Data[routerId] &&
|
|
320
|
+
Object.keys(Translate.Data[routerId]).filter((keyLang) =>
|
|
321
|
+
Translate.Data[routerId][keyLang].toLowerCase().match(query.toLowerCase()),
|
|
322
|
+
).length > 0))
|
|
323
|
+
) {
|
|
324
|
+
const fontAwesomeIcon = getAllChildNodes(s(`.main-btn-${routerId}`)).find((e) => {
|
|
325
|
+
return e.classList && Array.from(e.classList).find((e) => e.match('fa-') && !e.match('fa-grip-vertical'));
|
|
326
|
+
});
|
|
327
|
+
const imgElement = getAllChildNodes(s(`.main-btn-${routerId}`)).find((e) => {
|
|
328
|
+
return (
|
|
329
|
+
e.classList &&
|
|
330
|
+
Array.from(e.classList).find((e) =>
|
|
331
|
+
options.searchCustomImgClass ? e.match(options.searchCustomImgClass) : e.match('img-btn-square-menu'),
|
|
332
|
+
)
|
|
333
|
+
);
|
|
334
|
+
});
|
|
335
|
+
if (imgElement || fontAwesomeIcon) {
|
|
336
|
+
results.push({
|
|
337
|
+
id: routerId,
|
|
338
|
+
routerId,
|
|
339
|
+
fontAwesomeIcon,
|
|
340
|
+
imgElement,
|
|
341
|
+
type: 'route',
|
|
342
|
+
providerId: 'default-routes',
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return results;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Executes search across all registered providers and default routes.
|
|
353
|
+
* Combines results from multiple sources and sorts by priority.
|
|
354
|
+
* @memberof SearchBoxClient.SearchBox
|
|
355
|
+
* @param {string} query - The search query string.
|
|
356
|
+
* @param {object} [context={}] - Search context object passed to all providers.
|
|
357
|
+
* @returns {Promise<Array<object>>} Promise resolving to combined, priority-sorted results array.
|
|
358
|
+
*/
|
|
359
|
+
static async search(query, context = {}) {
|
|
360
|
+
const allResults = [];
|
|
361
|
+
|
|
362
|
+
// Always include default route search (backward compatible)
|
|
363
|
+
const routeResults = this.searchRoutes(query, context);
|
|
364
|
+
allResults.push(...routeResults);
|
|
365
|
+
|
|
366
|
+
// Execute all registered providers
|
|
367
|
+
const providerPromises = this.providers.map(async (provider) => {
|
|
368
|
+
try {
|
|
369
|
+
const results = await provider.search(query, context);
|
|
370
|
+
return results.map((result) => ({
|
|
371
|
+
...result,
|
|
372
|
+
providerId: provider.id,
|
|
373
|
+
priority: provider.priority,
|
|
374
|
+
}));
|
|
375
|
+
} catch (error) {
|
|
376
|
+
logger.error(`Error in provider ${provider.id}:`, error);
|
|
377
|
+
return [];
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
const providerResults = await Promise.all(providerPromises);
|
|
382
|
+
providerResults.forEach((results) => {
|
|
383
|
+
allResults.push(...results);
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
// Sort by priority
|
|
387
|
+
allResults.sort((a, b) => (a.priority || 50) - (b.priority || 50));
|
|
388
|
+
|
|
389
|
+
return allResults;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Renders search results into a container element.
|
|
394
|
+
* Delegates rendering to provider-specific renderers or default route renderer.
|
|
395
|
+
* Automatically attaches click handlers and calls provider post-render hooks.
|
|
396
|
+
* @memberof SearchBoxClient.SearchBox
|
|
397
|
+
* @param {Array<object>} results - Array of search results to render.
|
|
398
|
+
* @param {string} containerId - Results container element ID or class name.
|
|
399
|
+
* @param {object} [context={}] - instance context passed to renderers and handlers.
|
|
400
|
+
* @returns {void}
|
|
401
|
+
*/
|
|
402
|
+
static renderResults(results, containerId, context = {}) {
|
|
403
|
+
const container = s(`#${containerId}`) || s(`.${containerId}`);
|
|
404
|
+
if (!container) {
|
|
405
|
+
logger.warn(`Container ${containerId} not found`);
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
if (!results || results.length === 0) {
|
|
410
|
+
container.innerHTML = '';
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// Check if this is rendering recently clicked items (not search results)
|
|
415
|
+
// context.isRecentHistory is set when rendering from history, not from search query
|
|
416
|
+
const isRecentHistory = context.isRecentHistory === true;
|
|
417
|
+
|
|
418
|
+
let htmlContent = '';
|
|
419
|
+
results.forEach((result, index) => {
|
|
420
|
+
const provider = this.providers.find((p) => p.id === result.providerId);
|
|
421
|
+
|
|
422
|
+
let resultHtml = '';
|
|
423
|
+
if (result.type === 'route' || !provider) {
|
|
424
|
+
// Default route rendering (backward compatible)
|
|
425
|
+
resultHtml = this.renderRouteResult(result, index, context);
|
|
426
|
+
} else {
|
|
427
|
+
// Custom provider rendering
|
|
428
|
+
resultHtml = provider.renderResult(result, index, context);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Only add delete button for recently clicked items (not search results)
|
|
432
|
+
if (isRecentHistory) {
|
|
433
|
+
// Wrapper with relative position for absolute delete button
|
|
434
|
+
htmlContent += `
|
|
435
|
+
<div class="search-result-wrapper search-result-history-item" data-result-id="${result.id || result.routerId}" data-provider-id="${result.providerId || 'default-routes'}">
|
|
436
|
+
${resultHtml}
|
|
437
|
+
<button
|
|
438
|
+
class="search-result-delete-btn"
|
|
439
|
+
data-result-id="${result.id || result.routerId}"
|
|
440
|
+
data-provider-id="${result.providerId || 'default-routes'}"
|
|
441
|
+
title="Remove from history"
|
|
442
|
+
aria-label="Remove from history"
|
|
443
|
+
>
|
|
444
|
+
<i class="fas fa-trash-alt"></i>
|
|
445
|
+
</button>
|
|
446
|
+
</div>
|
|
447
|
+
`;
|
|
448
|
+
} else {
|
|
449
|
+
// Search results: no delete button, no wrapper overhead
|
|
450
|
+
htmlContent += resultHtml;
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
container.innerHTML = htmlContent;
|
|
455
|
+
|
|
456
|
+
// Attach click handlers
|
|
457
|
+
this.attachClickHandlers(results, containerId, context);
|
|
458
|
+
|
|
459
|
+
// Only attach delete handlers for recently clicked items
|
|
460
|
+
if (isRecentHistory) {
|
|
461
|
+
this.attachDeleteHandlers(container, results, containerId, context);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Call post-render callbacks from providers
|
|
465
|
+
results.forEach((result) => {
|
|
466
|
+
const provider = this.providers.find((p) => p.id === result.providerId);
|
|
467
|
+
if (provider && provider.attachTagHandlers) {
|
|
468
|
+
provider.attachTagHandlers();
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Attaches delete event handlers to result delete buttons within a specific container.
|
|
475
|
+
* Removes only the clicked result from history with smooth animation feedback.
|
|
476
|
+
* Only affects delete buttons within the specified container.
|
|
477
|
+
* @memberof SearchBoxClient.SearchBox
|
|
478
|
+
* @param {HTMLElement} container - The container element to search within.
|
|
479
|
+
* @param {Array<object>} results - Array of search results.
|
|
480
|
+
* @param {string} containerId - Results container element ID or class name.
|
|
481
|
+
* @param {object} [context={}] - Context object.
|
|
482
|
+
* @returns {void}
|
|
483
|
+
*/
|
|
484
|
+
static attachDeleteHandlers(container, results, containerId, context = {}) {
|
|
485
|
+
// Only select delete buttons within this specific container
|
|
486
|
+
const deleteButtons = container.querySelectorAll('.search-result-delete-btn');
|
|
487
|
+
deleteButtons.forEach((btn) => {
|
|
488
|
+
btn.addEventListener('click', (e) => {
|
|
489
|
+
e.preventDefault();
|
|
490
|
+
e.stopPropagation();
|
|
491
|
+
|
|
492
|
+
const resultId = btn.getAttribute('data-result-id');
|
|
493
|
+
const providerId = btn.getAttribute('data-provider-id');
|
|
494
|
+
|
|
495
|
+
// Animate removal
|
|
496
|
+
const wrapper = btn.closest('.search-result-history-item');
|
|
497
|
+
if (wrapper) {
|
|
498
|
+
wrapper.classList.add('search-result-removing');
|
|
499
|
+
setTimeout(() => {
|
|
500
|
+
// Remove only this specific result from history storage
|
|
501
|
+
if (providerId === 'default-routes') {
|
|
502
|
+
this.RecentResults.remove(resultId, null);
|
|
503
|
+
} else {
|
|
504
|
+
this.RecentResults.remove(resultId, providerId);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// Filter out only the deleted result from the array
|
|
508
|
+
const remaining = results.filter((r) => {
|
|
509
|
+
if (providerId === 'default-routes') {
|
|
510
|
+
// For routes, match by routerId
|
|
511
|
+
return r.routerId !== resultId;
|
|
512
|
+
} else {
|
|
513
|
+
// For providers, match by id and providerId
|
|
514
|
+
return !(r.id === resultId && r.providerId === providerId);
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
// Re-render with remaining results (context.isRecentHistory should stay true)
|
|
519
|
+
if (remaining.length > 0) {
|
|
520
|
+
this.renderResults(remaining, containerId, context);
|
|
521
|
+
} else {
|
|
522
|
+
// If no results left, clear container and hide clear-all button
|
|
523
|
+
container.innerHTML = '';
|
|
524
|
+
const clearAllBtn = document.querySelector('.btn-search-history-clear-all');
|
|
525
|
+
if (clearAllBtn) {
|
|
526
|
+
clearAllBtn.style.display = 'none';
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}, 200);
|
|
530
|
+
}
|
|
531
|
+
});
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Renders a default route search result.
|
|
537
|
+
* Backward compatible with Modal.js search functionality.
|
|
538
|
+
* Displays route icon and translated route name.
|
|
539
|
+
* @memberof SearchBoxClient.SearchBox
|
|
540
|
+
* @param {object} result - The route result object to render.
|
|
541
|
+
* @param {string} result.routerId - Route identifier.
|
|
542
|
+
* @param {HTMLElement} [result.fontAwesomeIcon] - FontAwesome icon element.
|
|
543
|
+
* @param {HTMLElement} [result.imgElement] - Image icon element.
|
|
544
|
+
* @param {number} index - The index of this result in the results array.
|
|
545
|
+
* @param {object} [context={}] - instance context object.
|
|
546
|
+
* @param {object} [context.options] - Additional rendering options.
|
|
547
|
+
* @returns {string} HTML string for the route search result.
|
|
548
|
+
*/
|
|
549
|
+
static renderRouteResult(result, index, context = {}) {
|
|
550
|
+
const { options = {} } = context;
|
|
551
|
+
const routerId = result.routerId;
|
|
552
|
+
const fontAwesomeIcon = result.fontAwesomeIcon;
|
|
553
|
+
const imgElement = result.imgElement;
|
|
554
|
+
|
|
555
|
+
let iconHtml = '';
|
|
556
|
+
|
|
557
|
+
// For route results from history, reconstruct icons from DOM
|
|
558
|
+
if (!fontAwesomeIcon && !imgElement && routerId) {
|
|
559
|
+
const routeBtn = s(`.main-btn-${routerId}`);
|
|
560
|
+
if (routeBtn) {
|
|
561
|
+
const icon = getAllChildNodes(routeBtn).find((e) => {
|
|
562
|
+
return e.classList && Array.from(e.classList).find((e) => e.match('fa-') && !e.match('fa-grip-vertical'));
|
|
563
|
+
});
|
|
564
|
+
const img = getAllChildNodes(routeBtn).find((e) => {
|
|
565
|
+
return (
|
|
566
|
+
e.classList &&
|
|
567
|
+
Array.from(e.classList).find((e) =>
|
|
568
|
+
options.searchCustomImgClass ? e.match(options.searchCustomImgClass) : e.match('img-btn-square-menu'),
|
|
569
|
+
)
|
|
570
|
+
);
|
|
571
|
+
});
|
|
572
|
+
if (img) {
|
|
573
|
+
iconHtml = img.outerHTML;
|
|
574
|
+
} else if (icon) {
|
|
575
|
+
iconHtml = icon.outerHTML;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
} else {
|
|
579
|
+
// For fresh search results, use provided DOM elements
|
|
580
|
+
if (imgElement) {
|
|
581
|
+
iconHtml = imgElement.outerHTML;
|
|
582
|
+
} else if (fontAwesomeIcon) {
|
|
583
|
+
iconHtml = fontAwesomeIcon.outerHTML;
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
const translatedText = Translate.instance(routerId);
|
|
588
|
+
|
|
589
|
+
return html`
|
|
590
|
+
<div
|
|
591
|
+
class="search-result-item search-result-route"
|
|
592
|
+
data-result-id="${routerId}"
|
|
593
|
+
data-result-type="route"
|
|
594
|
+
data-result-index="${index}"
|
|
595
|
+
data-provider-id="default-routes"
|
|
596
|
+
>
|
|
597
|
+
<div class="search-result-icon">${iconHtml}</div>
|
|
598
|
+
<div class="search-result-content">
|
|
599
|
+
<div class="search-result-title">${translatedText}</div>
|
|
600
|
+
</div>
|
|
601
|
+
</div>
|
|
602
|
+
`;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
* Attaches click event handlers to all rendered search results.
|
|
607
|
+
* Routes trigger menu button clicks; custom providers call their onClick handlers.
|
|
608
|
+
* @memberof SearchBoxClient.SearchBox
|
|
609
|
+
* @param {Array<object>} results - Array of search results.
|
|
610
|
+
* @param {string} containerId - Results container element ID or class name.
|
|
611
|
+
* @param {object} [context={}] - Context object with callbacks.
|
|
612
|
+
* @param {Function} [context.onResultClick] - Callback invoked after any result is clicked.
|
|
613
|
+
* @returns {void}
|
|
614
|
+
*/
|
|
615
|
+
static attachClickHandlers(results, containerId, context = {}) {
|
|
616
|
+
results.forEach((result, index) => {
|
|
617
|
+
const element = s(`[data-result-index="${index}"]`);
|
|
618
|
+
if (!element) return;
|
|
619
|
+
|
|
620
|
+
element.onclick = (e) => {
|
|
621
|
+
e.preventDefault();
|
|
622
|
+
e.stopPropagation();
|
|
623
|
+
|
|
624
|
+
// Track result in persistent history for all result types
|
|
625
|
+
this.RecentResults.add(result);
|
|
626
|
+
|
|
627
|
+
const provider = this.providers.find((p) => p.id === result.providerId);
|
|
628
|
+
|
|
629
|
+
if (result.type === 'route') {
|
|
630
|
+
// Default route behavior - click the menu button
|
|
631
|
+
const btnSelector = `.main-btn-${result.routerId}`;
|
|
632
|
+
if (s(btnSelector)) {
|
|
633
|
+
s(btnSelector).click();
|
|
634
|
+
}
|
|
635
|
+
} else if (provider && provider.onClick) {
|
|
636
|
+
// Custom provider click handler
|
|
637
|
+
provider.onClick(result, context);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// Dismiss search box if callback provided
|
|
641
|
+
if (context.onResultClick) {
|
|
642
|
+
context.onResultClick(result);
|
|
643
|
+
}
|
|
644
|
+
};
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Scrolls an element into view within a scrollable container if needed.
|
|
650
|
+
* Performance-critical for keyboard navigation - uses direct scrollTop manipulation
|
|
651
|
+
* instead of smooth scrolling to reduce overhead and ensure instant visibility.
|
|
652
|
+
*
|
|
653
|
+
* ROBUST IMPLEMENTATION:
|
|
654
|
+
* - Auto-detects the actual scrollable parent container
|
|
655
|
+
* - Uses getBoundingClientRect() for accurate viewport-aware positioning
|
|
656
|
+
* - Handles complex DOM structures (modals, positioned elements, transforms)
|
|
657
|
+
* - Includes fallback to native scrollIntoView() if custom logic fails
|
|
658
|
+
*
|
|
659
|
+
* Algorithm:
|
|
660
|
+
* 1. Find actual scrollable container (may be parent of passed container)
|
|
661
|
+
* 2. Calculate element position relative to container's visible area
|
|
662
|
+
* 3. Determine scroll adjustment needed (up, down, or none)
|
|
663
|
+
* 4. Apply scroll adjustment
|
|
664
|
+
* 5. Verify visibility and use native scrollIntoView as fallback if needed
|
|
665
|
+
*
|
|
666
|
+
* @memberof SearchBoxClient.SearchBox
|
|
667
|
+
* @param {HTMLElement} element - The element to scroll into view.
|
|
668
|
+
* @param {HTMLElement} container - The scrollable container (or parent of scrollable).
|
|
669
|
+
* @returns {void}
|
|
670
|
+
*/
|
|
671
|
+
static scrollIntoViewIfNeeded(element, container) {
|
|
672
|
+
if (!element || !container) return;
|
|
673
|
+
|
|
674
|
+
// CRITICAL FIX: Find the actual scrollable container
|
|
675
|
+
// The passed container might not be scrollable; we need to find the parent that is
|
|
676
|
+
let scrollableContainer = container;
|
|
677
|
+
|
|
678
|
+
// Check if current container is scrollable
|
|
679
|
+
const isScrollable = (el) => {
|
|
680
|
+
if (!el) return false;
|
|
681
|
+
const hasScroll = el.scrollHeight > el.clientHeight;
|
|
682
|
+
const overflowY = window.getComputedStyle(el).overflowY;
|
|
683
|
+
return hasScroll && (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay');
|
|
684
|
+
};
|
|
685
|
+
|
|
686
|
+
// If container is not scrollable, traverse up to find scrollable parent
|
|
687
|
+
if (!isScrollable(container)) {
|
|
688
|
+
let parent = container.parentElement;
|
|
689
|
+
while (parent && parent !== document.body) {
|
|
690
|
+
if (isScrollable(parent)) {
|
|
691
|
+
scrollableContainer = parent;
|
|
692
|
+
break;
|
|
693
|
+
}
|
|
694
|
+
parent = parent.parentElement;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// ROBUST POSITION CALCULATION
|
|
699
|
+
// Get element's position relative to scrollable container using getBoundingClientRect
|
|
700
|
+
// This handles all edge cases including transformed elements, scrolled parents, etc.
|
|
701
|
+
const elementRect = element.getBoundingClientRect();
|
|
702
|
+
const containerRect = scrollableContainer.getBoundingClientRect();
|
|
703
|
+
|
|
704
|
+
// Calculate element position relative to container's visible area
|
|
705
|
+
const elementTopRelative = elementRect.top - containerRect.top;
|
|
706
|
+
const elementBottomRelative = elementRect.bottom - containerRect.top;
|
|
707
|
+
const containerVisibleHeight = scrollableContainer.clientHeight;
|
|
708
|
+
|
|
709
|
+
// Add padding to avoid elements being exactly at edges (better UX)
|
|
710
|
+
const padding = 10;
|
|
711
|
+
|
|
712
|
+
// Determine scroll adjustment needed
|
|
713
|
+
let scrollAdjustment = 0;
|
|
714
|
+
|
|
715
|
+
// Element is ABOVE visible area
|
|
716
|
+
if (elementTopRelative < padding) {
|
|
717
|
+
// Need to scroll up
|
|
718
|
+
scrollAdjustment = elementTopRelative - padding;
|
|
719
|
+
}
|
|
720
|
+
// Element is BELOW visible area
|
|
721
|
+
else if (elementBottomRelative > containerVisibleHeight - padding) {
|
|
722
|
+
// Need to scroll down
|
|
723
|
+
scrollAdjustment = elementBottomRelative - containerVisibleHeight + padding;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
// Apply scroll adjustment if needed
|
|
727
|
+
if (scrollAdjustment !== 0) {
|
|
728
|
+
scrollableContainer.scrollTop += scrollAdjustment;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// FALLBACK: If custom scroll didn't work, use native scrollIntoView
|
|
732
|
+
// This ensures visibility even if our calculation fails
|
|
733
|
+
setTimeout(() => {
|
|
734
|
+
const rectCheck = element.getBoundingClientRect();
|
|
735
|
+
const containerRectCheck = scrollableContainer.getBoundingClientRect();
|
|
736
|
+
const stillAbove = rectCheck.top < containerRectCheck.top;
|
|
737
|
+
const stillBelow = rectCheck.bottom > containerRectCheck.bottom;
|
|
738
|
+
|
|
739
|
+
if (stillAbove || stillBelow) {
|
|
740
|
+
element.scrollIntoView({
|
|
741
|
+
behavior: 'auto',
|
|
742
|
+
block: stillAbove ? 'start' : 'end',
|
|
743
|
+
inline: 'nearest',
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
}, 0);
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
/**
|
|
750
|
+
* Gets base CSS styles for SearchBox with theme-aware styling.
|
|
751
|
+
* Uses subThemeManager colors for consistent theming across light and dark modes.
|
|
752
|
+
* Styles include search result items, icons, tags, and active states.
|
|
753
|
+
* @memberof SearchBoxClient.SearchBox
|
|
754
|
+
* @returns {string} CSS string containing all base SearchBox styles.
|
|
755
|
+
*/
|
|
756
|
+
static getBaseStyles = () => {
|
|
757
|
+
// Get theme color from subThemeManager
|
|
758
|
+
const themeColor = darkTheme ? subThemeManager.darkColor : subThemeManager.lightColor;
|
|
759
|
+
const hasThemeColor = themeColor && themeColor !== null;
|
|
760
|
+
|
|
761
|
+
// Calculate theme-based colors
|
|
762
|
+
let activeBg, activeBorder, hoverBg, iconColor, tagBg, tagColor, tagBorder;
|
|
763
|
+
|
|
764
|
+
if (darkTheme) {
|
|
765
|
+
// Dark theme styling - solid white icons for better visibility
|
|
766
|
+
iconColor = '#ffffff';
|
|
767
|
+
if (hasThemeColor) {
|
|
768
|
+
activeBg = darkenHex(themeColor, 0.7);
|
|
769
|
+
activeBorder = lightenHex(themeColor, 0.4);
|
|
770
|
+
hoverBg = `${darkenHex(themeColor, 0.8)}33`; // 20% opacity
|
|
771
|
+
tagBg = darkenHex(themeColor, 0.6);
|
|
772
|
+
tagColor = lightenHex(themeColor, 0.7);
|
|
773
|
+
tagBorder = lightenHex(themeColor, 0.3);
|
|
774
|
+
} else {
|
|
775
|
+
activeBg = '#2a2a2a';
|
|
776
|
+
activeBorder = '#444';
|
|
777
|
+
hoverBg = 'rgba(255, 255, 255, 0.05)';
|
|
778
|
+
tagBg = '#333';
|
|
779
|
+
tagColor = '#aaa';
|
|
780
|
+
tagBorder = '#555';
|
|
781
|
+
}
|
|
782
|
+
} else {
|
|
783
|
+
// Light theme styling - solid black icons for better visibility
|
|
784
|
+
iconColor = '#000000';
|
|
785
|
+
if (hasThemeColor) {
|
|
786
|
+
activeBg = lightenHex(themeColor, 0.85);
|
|
787
|
+
activeBorder = lightenHex(themeColor, 0.5);
|
|
788
|
+
hoverBg = `${lightenHex(themeColor, 0.9)}33`; // 20% opacity
|
|
789
|
+
tagBg = lightenHex(themeColor, 0.8);
|
|
790
|
+
tagColor = darkenHex(themeColor, 0.3);
|
|
791
|
+
tagBorder = lightenHex(themeColor, 0.6);
|
|
792
|
+
} else {
|
|
793
|
+
activeBg = '#f0f0f0';
|
|
794
|
+
activeBorder = '#ccc';
|
|
795
|
+
hoverBg = 'rgba(0, 0, 0, 0.05)';
|
|
796
|
+
tagBg = '#e8e8e8';
|
|
797
|
+
tagColor = '#555';
|
|
798
|
+
tagBorder = '#d0d0d0';
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
return css`
|
|
803
|
+
/* Search result items - simplified, consistent borders */
|
|
804
|
+
.search-result-item {
|
|
805
|
+
display: flex;
|
|
806
|
+
align-items: center;
|
|
807
|
+
gap: 10px;
|
|
808
|
+
padding: 12px 14px;
|
|
809
|
+
margin: 4px 0;
|
|
810
|
+
cursor: pointer;
|
|
811
|
+
border-radius: 4px;
|
|
812
|
+
transition: all 0.15s ease;
|
|
813
|
+
border: 1px solid transparent;
|
|
814
|
+
background: transparent;
|
|
815
|
+
min-height: 44px;
|
|
816
|
+
box-sizing: border-box;
|
|
817
|
+
width: 100%;
|
|
818
|
+
max-width: 100%;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
.search-result-item:hover {
|
|
822
|
+
background: ${hoverBg};
|
|
823
|
+
border-color: ${activeBorder}44;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
.search-result-item.active-search-result,
|
|
827
|
+
.search-result-item.main-btn-menu-active {
|
|
828
|
+
background: ${activeBg} !important;
|
|
829
|
+
border: 1px solid ${activeBorder} !important;
|
|
830
|
+
box-shadow: 0 0 0 1px ${activeBorder}66 !important;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
.search-result-route {
|
|
834
|
+
padding: 10px 12px;
|
|
835
|
+
margin: 2px;
|
|
836
|
+
text-align: left;
|
|
837
|
+
min-height: 40px;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
.search-result-icon {
|
|
841
|
+
display: flex;
|
|
842
|
+
align-items: center;
|
|
843
|
+
justify-content: center;
|
|
844
|
+
min-width: 28px;
|
|
845
|
+
min-height: 28px;
|
|
846
|
+
font-size: 16px;
|
|
847
|
+
color: ${iconColor} !important;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
.search-result-icon i {
|
|
851
|
+
color: ${iconColor} !important;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
.search-result-icon .fa,
|
|
855
|
+
.search-result-icon .fas,
|
|
856
|
+
.search-result-icon .far,
|
|
857
|
+
.search-result-icon .fab {
|
|
858
|
+
color: ${iconColor} !important;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
.search-result-icon img {
|
|
862
|
+
width: 25px;
|
|
863
|
+
height: 25px;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
.search-result-content {
|
|
867
|
+
flex: 1;
|
|
868
|
+
min-width: 0;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
.search-result-title {
|
|
872
|
+
font-size: 14px;
|
|
873
|
+
font-weight: 500;
|
|
874
|
+
margin-bottom: 2px;
|
|
875
|
+
line-height: 1.4;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
.search-result-subtitle {
|
|
879
|
+
font-size: 12px;
|
|
880
|
+
color: ${darkTheme ? '#999' : '#666'};
|
|
881
|
+
margin-top: 2px;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
/* Tags/Badges - themed with subThemeManager colors */
|
|
885
|
+
.search-result-tag,
|
|
886
|
+
.search-result-badge {
|
|
887
|
+
display: inline-block;
|
|
888
|
+
padding: 2px 8px;
|
|
889
|
+
margin: 2px 4px 2px 0;
|
|
890
|
+
font-size: 11px;
|
|
891
|
+
border-radius: 3px;
|
|
892
|
+
background: ${tagBg};
|
|
893
|
+
color: ${tagColor};
|
|
894
|
+
border: 1px solid ${tagBorder};
|
|
895
|
+
white-space: nowrap;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
.search-result-tags {
|
|
899
|
+
display: flex;
|
|
900
|
+
flex-wrap: wrap;
|
|
901
|
+
gap: 4px;
|
|
902
|
+
margin-top: 4px;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
/* Active item tags have stronger accent */
|
|
906
|
+
.search-result-item.active-search-result .search-result-tag,
|
|
907
|
+
.search-result-item.active-search-result .search-result-badge {
|
|
908
|
+
background: ${hasThemeColor ? (darkTheme ? darkenHex(themeColor, 0.5) : lightenHex(themeColor, 0.75)) : tagBg};
|
|
909
|
+
border-color: ${activeBorder};
|
|
910
|
+
color: ${hasThemeColor ? (darkTheme ? lightenHex(themeColor, 0.8) : darkenHex(themeColor, 0.4)) : tagColor};
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
/* Wrapper for history items with delete button - maintains original width */
|
|
914
|
+
.search-result-history-item {
|
|
915
|
+
position: relative;
|
|
916
|
+
box-sizing: border-box;
|
|
917
|
+
width: 100%;
|
|
918
|
+
max-width: 100%;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
.search-result-history-item .search-result-item {
|
|
922
|
+
width: 100%;
|
|
923
|
+
box-sizing: border-box;
|
|
924
|
+
padding-right: 30px; /* Make room for delete button */
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
/* Delete button - absolute positioned in top-right corner */
|
|
928
|
+
.search-result-delete-btn {
|
|
929
|
+
position: absolute;
|
|
930
|
+
top: 4px;
|
|
931
|
+
right: 4px;
|
|
932
|
+
background: none;
|
|
933
|
+
border: none;
|
|
934
|
+
color: #999;
|
|
935
|
+
cursor: pointer;
|
|
936
|
+
padding: 3px 6px;
|
|
937
|
+
border-radius: 3px;
|
|
938
|
+
transition: all 0.2s ease;
|
|
939
|
+
opacity: 0;
|
|
940
|
+
width: 22px;
|
|
941
|
+
height: 22px;
|
|
942
|
+
display: flex;
|
|
943
|
+
align-items: center;
|
|
944
|
+
justify-content: center;
|
|
945
|
+
font-size: 10px;
|
|
946
|
+
z-index: 5;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
.search-result-history-item:hover .search-result-delete-btn {
|
|
950
|
+
opacity: 1;
|
|
951
|
+
color: ${darkTheme ? '#ff8a8a' : '#e53935'};
|
|
952
|
+
background: ${darkTheme ? 'rgba(255, 107, 107, 0.2)' : 'rgba(211, 47, 47, 0.15)'};
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
.search-result-delete-btn:hover {
|
|
956
|
+
background: ${darkTheme ? 'rgba(255, 107, 107, 0.35)' : 'rgba(211, 47, 47, 0.25)'};
|
|
957
|
+
transform: scale(1.1);
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
.search-result-delete-btn:active {
|
|
961
|
+
transform: scale(0.95);
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
/* Animation for removal */
|
|
965
|
+
.search-result-history-item.search-result-removing {
|
|
966
|
+
opacity: 0;
|
|
967
|
+
transform: translateX(20px);
|
|
968
|
+
transition: all 0.2s ease;
|
|
969
|
+
}
|
|
970
|
+
`;
|
|
971
|
+
};
|
|
972
|
+
|
|
973
|
+
/**
|
|
974
|
+
* Injects base SearchBox styles into the document head.
|
|
975
|
+
* Creates a style tag if it doesn't exist, ensuring styles are loaded once.
|
|
976
|
+
* Automatically called when SearchBox is first used.
|
|
977
|
+
* @memberof SearchBoxClient.SearchBox
|
|
978
|
+
* @returns {void}
|
|
979
|
+
*/
|
|
980
|
+
static injectStyles() {
|
|
981
|
+
const styleId = 'search-box-base-styles';
|
|
982
|
+
let styleTag = document.getElementById(styleId);
|
|
983
|
+
|
|
984
|
+
if (!styleTag) {
|
|
985
|
+
styleTag = document.createElement('style');
|
|
986
|
+
styleTag.id = styleId;
|
|
987
|
+
document.head.appendChild(styleTag);
|
|
988
|
+
logger.info('Injected SearchBox base styles');
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
// Always update styles (for theme changes and subThemeManager color changes)
|
|
992
|
+
styleTag.textContent = this.getBaseStyles();
|
|
993
|
+
|
|
994
|
+
// Register theme change handler if not already registered
|
|
995
|
+
if (typeof ThemeEvents !== 'undefined' && !ThemeEvents['searchBoxBaseStyles']) {
|
|
996
|
+
ThemeEvents['searchBoxBaseStyles'] = () => {
|
|
997
|
+
const tag = document.getElementById(styleId);
|
|
998
|
+
if (tag) {
|
|
999
|
+
tag.textContent = this.getBaseStyles();
|
|
1000
|
+
logger.info('Updated SearchBox styles for theme change');
|
|
1001
|
+
}
|
|
1002
|
+
};
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
export { SearchBox };
|