Repository: nicepkg/vr360 Branch: master Commit: 7d6598b1134d Files: 193 Total size: 241.0 KB Directory structure: gitextract_4oa5dsxh/ ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── commit-convention.md │ ├── settings.yml │ └── workflows/ │ ├── docs.yml │ ├── lint.yml │ ├── release.yml │ └── test.yml ├── .gitignore ├── .husky/ │ ├── commit-msg │ ├── pre-commit │ └── prepare-commit-msg ├── .npmrc ├── .stylelintignore ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── commitlint.config.js ├── lint-staged.config.js ├── netlify.toml ├── package.json ├── packages/ │ ├── doc/ │ │ ├── .vuepress/ │ │ │ ├── client.ts │ │ │ ├── components/ │ │ │ │ ├── DemoA.vue │ │ │ │ └── NpmBadge.vue │ │ │ ├── configs/ │ │ │ │ ├── index.ts │ │ │ │ ├── navbar/ │ │ │ │ │ ├── en.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── zh.ts │ │ │ │ └── sidebar/ │ │ │ │ ├── en.ts │ │ │ │ ├── index.ts │ │ │ │ └── zh.ts │ │ │ ├── examples/ │ │ │ │ └── firstHouse/ │ │ │ │ ├── demo.css │ │ │ │ ├── html.html │ │ │ │ ├── react.tsx │ │ │ │ ├── vue2.vue │ │ │ │ └── vue3.vue │ │ │ ├── index.build.html │ │ │ ├── plugins/ │ │ │ │ ├── code-demo/ │ │ │ │ │ ├── CodeDemo.props.ts │ │ │ │ │ ├── CodeDemo.vue │ │ │ │ │ ├── Icons.tsx │ │ │ │ │ ├── clientConfigFile.ts │ │ │ │ │ ├── constant.ts │ │ │ │ │ ├── global.d.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin.ts │ │ │ │ └── index.ts │ │ │ ├── public/ │ │ │ │ ├── browserconfig.xml │ │ │ │ ├── code-demo-templates/ │ │ │ │ │ ├── demo.css.txt │ │ │ │ │ ├── html/ │ │ │ │ │ │ └── package.json.txt │ │ │ │ │ ├── react/ │ │ │ │ │ │ ├── index.html.txt │ │ │ │ │ │ ├── package.json.txt │ │ │ │ │ │ ├── src/ │ │ │ │ │ │ │ └── main.tsx.txt │ │ │ │ │ │ ├── tsconfig.json.txt │ │ │ │ │ │ └── vite.config.ts.txt │ │ │ │ │ ├── vue2/ │ │ │ │ │ │ ├── index.html.txt │ │ │ │ │ │ ├── package.json.txt │ │ │ │ │ │ ├── src/ │ │ │ │ │ │ │ ├── App.vue.txt │ │ │ │ │ │ │ └── main.ts.txt │ │ │ │ │ │ ├── tsconfig.json.txt │ │ │ │ │ │ ├── types/ │ │ │ │ │ │ │ └── module.d.ts.txt │ │ │ │ │ │ └── vite.config.ts.txt │ │ │ │ │ └── vue3/ │ │ │ │ │ ├── index.html.txt │ │ │ │ │ ├── package.json.txt │ │ │ │ │ ├── src/ │ │ │ │ │ │ ├── App.vue.txt │ │ │ │ │ │ └── main.ts.txt │ │ │ │ │ ├── tsconfig.json.txt │ │ │ │ │ ├── types/ │ │ │ │ │ │ └── module.d.ts.txt │ │ │ │ │ └── vite.config.ts.txt │ │ │ │ └── manifest.webmanifest │ │ │ ├── styles/ │ │ │ │ └── index.scss │ │ │ ├── theme/ │ │ │ │ ├── components/ │ │ │ │ │ ├── Home.vue │ │ │ │ │ ├── HomeFeatures.vue │ │ │ │ │ └── HomeVrBg.vue │ │ │ │ └── index.ts │ │ │ ├── types/ │ │ │ │ └── module.d.ts │ │ │ └── utils/ │ │ │ └── common.ts │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bundler.config.ts │ │ ├── guide/ │ │ │ ├── README.md │ │ │ └── questions.md │ │ ├── libs/ │ │ │ ├── vr360-core/ │ │ │ │ ├── README.md │ │ │ │ ├── events.md │ │ │ │ ├── example.md │ │ │ │ ├── methods.md │ │ │ │ └── properties.md │ │ │ ├── vr360-ui/ │ │ │ │ └── README.md │ │ │ ├── vr360-ui-react/ │ │ │ │ └── README.md │ │ │ ├── vr360-ui-vue2/ │ │ │ │ └── README.md │ │ │ └── vr360-ui-vue3/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── vuepress.config.ts │ ├── vr360-core/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── scripts/ │ │ │ └── build.ts │ │ ├── src/ │ │ │ ├── helper.ts │ │ │ ├── index.ts │ │ │ ├── manager/ │ │ │ │ ├── index.ts │ │ │ │ ├── space.ts │ │ │ │ └── tip.ts │ │ │ ├── types.ts │ │ │ └── vr360.ts │ │ ├── test/ │ │ │ ├── index.ts │ │ │ └── setup.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── vr360-shared/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── build.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── build-utils/ │ │ │ │ ├── build-script.util.ts │ │ │ │ ├── index.ts │ │ │ │ └── vite-config-common.util.ts │ │ │ ├── index.ts │ │ │ ├── test-react-utils.ts │ │ │ ├── test-utils/ │ │ │ │ ├── common/ │ │ │ │ │ ├── helper.util.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mock-global-api.ts │ │ │ │ │ ├── mock-server.util.ts │ │ │ │ │ ├── polyfill-fetch.util.ts │ │ │ │ │ └── polyfill-pointer-events.util.ts │ │ │ │ ├── react/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── react-helper.util.ts │ │ │ │ │ └── react-mount.util.ts │ │ │ │ └── vue/ │ │ │ │ ├── index.ts │ │ │ │ ├── vue-helper.util.ts │ │ │ │ └── vue-mount.util.ts │ │ │ ├── test-utils.ts │ │ │ └── test-vue-utils.ts │ │ ├── test-react-utils.d.ts │ │ ├── test-utils.d.ts │ │ ├── test-vue-utils.d.ts │ │ ├── tsconfig.json │ │ └── types/ │ │ └── global.d.ts │ ├── vr360-ui/ │ │ └── README.md │ ├── vr360-ui-react/ │ │ └── README.md │ ├── vr360-ui-vue2/ │ │ └── README.md │ └── vr360-ui-vue3/ │ └── README.md ├── playgrounds/ │ ├── react/ │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── Example.tsx │ │ │ └── main.tsx │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── vue2/ │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.vue │ │ │ └── main.ts │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ └── module.d.ts │ │ ├── unocss.config.ts │ │ └── vite.config.ts │ └── vue3/ │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── App.vue │ │ ├── ContextMenu.vue │ │ ├── Editor.vue │ │ ├── EditorHotPointManager.vue │ │ ├── EditorLeftBar.vue │ │ ├── EditorSceneManager.vue │ │ ├── EditorSettings.vue │ │ ├── EditorTipsManager.vue │ │ ├── EditorTopBar.vue │ │ ├── Icons.tsx │ │ ├── helper.ts │ │ ├── main.ts │ │ └── useVr360.ts │ ├── tsconfig.json │ ├── types/ │ │ └── module.d.ts │ ├── unocss.config.ts │ └── vite.config.ts ├── pnpm-workspace.yaml ├── prettier.config.js ├── scripts/ │ ├── build.ts │ ├── check-update.ts │ ├── release.ts │ └── utils.ts ├── stylelint.config.js ├── textures.json ├── tsconfig-base.json ├── tsconfig.json └── turbo.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 indent_style = space indent_size = 2 end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true ================================================ FILE: .eslintignore ================================================ **/node_modules/ *.html es/ **/lib/ **/dist/ **/lib-types/ _site/ **/dist/ CHANGELOG.md .rollup.cache tsconfig.tsbuildinfo !.storybook !.vuepress types/components.d.ts types/auto-imports.d.ts *.generated.ts **/.vuepress/examples/ ================================================ FILE: .eslintrc.js ================================================ //@ts-check module.exports = /** @type { import('eslint').Linter.Config } */ ({ root: true, extends: [ 'eslint:recommended', 'plugin:eslint-comments/recommended', 'plugin:import/recommended', 'plugin:unicorn/recommended', 'plugin:react/recommended', 'plugin:react/jsx-runtime', 'plugin:react-hooks/recommended', 'plugin:jsx-a11y/recommended', 'plugin:prettier/recommended', 'prettier' ], env: { node: true, browser: true, es2022: true }, parserOptions: { ecmaVersion: 2022, sourceType: 'module', ecmaFeatures: { jsx: true } }, settings: { react: { version: 'detect' }, 'import/extensions': ['.js', '.jsx'] }, ignorePatterns: ['node_modules/*'], rules: { /** * Turn-off recommended rules */ 'array-callback-return': 'off', 'jsx-a11y/click-events-have-key-events': 'off', 'jsx-a11y/no-autofocus': 'off', 'react/display-name': 'off', 'react/prop-types': 'off', 'eslint-comments/disable-enable-pair': 'off', 'unicorn/no-array-reduce': 'off', 'unicorn/filename-case': 'off', 'unicorn/no-null': 'off', 'unicorn/prevent-abbreviations': 'off', 'unicorn/prefer-module': 'off', 'unicorn/prefer-top-level-await': 'off', 'unicorn/consistent-function-scoping': 'off', 'unicorn/no-array-for-each': 'off', 'unicorn/prefer-spread': 'off', /** * Adjust recommended rules */ 'no-empty': ['error', {allowEmptyCatch: true}], 'no-unused-vars': ['error', {args: 'none', ignoreRestSiblings: true}], 'react-hooks/exhaustive-deps': ['error', {additionalHooks: '(useRecoilCallback|useRecoilTransaction)'}], /** * Use additional rules */ 'default-case': 'error', eqeqeq: ['error', 'smart'], 'no-array-constructor': 'error', 'no-caller': 'error', 'no-eval': 'error', 'no-extend-native': 'error', 'no-extra-bind': 'error', 'no-extra-label': 'error', 'no-implied-eval': 'error', 'no-label-var': 'error', 'no-labels': 'error', 'no-lone-blocks': 'error', 'no-loop-func': 'error', 'no-multi-str': 'error', 'no-new-func': 'error', 'no-new-object': 'error', 'no-new-wrappers': 'error', 'no-restricted-globals': ['error', ...require('confusing-browser-globals')], 'no-script-url': 'error', 'no-self-compare': 'error', 'no-sequences': 'error', 'no-template-curly-in-string': 'error', 'no-throw-literal': 'error', 'no-unused-expressions': [ 'error', { allowShortCircuit: true, allowTernary: true, allowTaggedTemplates: true } ], 'no-useless-computed-key': 'error', 'no-useless-concat': 'error', 'no-useless-constructor': 'error', 'no-useless-rename': 'error', strict: ['error', 'never'], 'react/jsx-pascal-case': ['error', {allowAllCaps: true}], 'react/no-array-index-key': 'error', 'react/no-typos': 'error', 'react/style-prop-object': 'error' }, overrides: [ { files: ['**/__tests__/**/*', '**/*.{spec,test}.*'], extends: ['plugin:testing-library/react', 'plugin:jest-dom/recommended'] }, { files: ['**/*.stories.*'], rules: { 'import/no-anonymous-default-export': 'off' } }, { files: ['**/*.ts?(x)', '**/*.vue'], parser: 'vue-eslint-parser', parserOptions: { parser: '@typescript-eslint/parser', ecmaversion: 2022, sourceType: 'module', ecmaFeatures: { jsx: true }, extraFileExtensions: ['.vue'], project: [ './tsconfig.json', './packages/*/tsconfig.json', './examples/**/tsconfig.json', './playgrounds/**/tsconfig.json' ] }, settings: { react: {version: 'detect'}, 'import/resolver': { typescript: { alwaysTryTypes: true } } }, env: { browser: true, node: true, es6: true }, extends: [ 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'plugin:@typescript-eslint/strict', 'plugin:import/typescript', 'plugin:vue/recommended', 'plugin:prettier/recommended', 'prettier' ], rules: { /** * Turn-off recommended rules */ '@typescript-eslint/no-floating-promises': 'off', '@typescript-eslint/non-nullable-type-assertion-style': 'off', '@typescript-eslint/no-unsafe-assignment': 'off', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-unnecessary-type-assertion': 'off', '@typescript-eslint/prefer-ts-expect-error': 'off', // 'tsc' already handles this (https://typescript-eslint.io/docs/linting/troubleshooting/#eslint-plugin-import) 'import/default': 'off', 'import/namespace': 'off', 'import/no-named-as-default-member': 'off', 'import/no-unresolved': 'off', /** * Adjust recommended rules */ '@typescript-eslint/consistent-type-definitions': ['error', 'type'], '@typescript-eslint/no-misused-promises': ['error', {checksVoidReturn: {arguments: false, attributes: false}}], '@typescript-eslint/no-unused-vars': ['error', {args: 'none', ignoreRestSiblings: true}], /** * Use additional rules */ '@typescript-eslint/consistent-type-imports': 'error', 'import/first': 'error', 'import/no-anonymous-default-export': 'error', /** * Replace additional rules */ 'default-case': 'off', // 'tsc' noFallthroughCasesInSwitch option is more robust 'no-array-constructor': 'off', '@typescript-eslint/no-array-constructor': 'error', 'no-implied-eval': 'off', '@typescript-eslint/no-implied-eval': 'error', 'no-loop-func': 'off', '@typescript-eslint/no-loop-func': 'error', 'no-unused-expressions': 'off', '@typescript-eslint/no-unused-expressions': [ 'error', { allowShortCircuit: true, allowTernary: true, allowTaggedTemplates: true } ], 'no-throw-literal': 'off', '@typescript-eslint/no-throw-literal': 'error', 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', // vue 'vue/no-v-html': 'off', 'vue/singleline-html-element-content-newline': 'off', 'vue/html-self-closing': 'off', 'vue/max-attributes-per-line': [ 'error', { singleline: 10, multiline: 1 } ], 'vue/require-default-prop': 'off', 'vue/html-closing-bracket-spacing': 'error', 'vue/no-unused-vars': 'warn', 'vue/multi-word-component-names': 'off', 'vue/one-component-per-file': 'off', 'vue/no-v-model-argument': 'off', 'vue/comment-directive': [ 'warn', { reportUnusedDisableDirectives: false } ] } } ] }) ================================================ FILE: .github/FUNDING.yml ================================================ github: [2214962083] ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yml ================================================ name: "\U0001F41E Bug report" description: Report an issue with Vr360 body: - type: markdown attributes: value: | Thanks for taking the time to fill out this bug report! - type: textarea id: bug-description attributes: label: Describe the bug description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. Thanks! placeholder: Bug description validations: required: true - type: input id: reproduction attributes: label: Reproduction description: Please provide a link via [vr360](https://stackblitz.com/edit/vr360/) or a link to a repo that can reproduce the problem you ran into. A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is required. placeholder: Reproduction validations: required: true - type: textarea id: system-info attributes: label: System Info description: Output of `npx envinfo --system --npmPackages '{@nicepkg/vr360-core,three}' --binaries --browsers` render: Shell placeholder: System, Binaries, Browsers validations: required: true - type: dropdown id: package-manager attributes: label: Used Package Manager description: Select the used package manager options: - npm - yarn - pnpm validations: required: true - type: checkboxes id: checkboxes attributes: label: Validations description: Before submitting the issue, please make sure you do the following options: - label: Follow our [Code of Conduct](https://github.com/nicepkg/vr360/blob/master/CODE_OF_CONDUCT.md) required: true - label: Read the [Contributing Guidelines](https://github.com/nicepkg/vr360/blob/master/CONTRIBUTING.md). required: true - label: Check that there isn't [already an issue](https://github.com/nicepkg/vr360/issues) that reports the same bug to avoid creating a duplicate. required: true - label: Make sure this is a Vr360 issue and not a framework-specific issue. For example, if it's a threejs related bug, it should likely be reported to https://github.com/mrdoob/three.js instead. required: true - label: Check that this is a concrete bug. For Q&A open a [GitHub Discussion](https://github.com/nicepkg/vr360/discussions). required: true - label: The provided reproduction is a [minimal reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) of the bug. required: true ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Question url: https://github.com/nicepkg/vr360/discussions/new?category=Q-A about: Ask a question or discuss about vr360 - name: Ideas url: https://github.com/nicepkg/vr360/discussions/new?category=Ideas about: Start a discussion to improve vr360 - name: GitHub Sponsors url: https://github.com/sponsors/2214962083 about: Like this project? Please consider supporting the author. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.yml ================================================ name: "\U0001F680 New feature proposal" description: Propose a new feature to be added to Vr360 labels: ['feature request'] body: - type: markdown attributes: value: | Thanks for your interest in the project and taking the time to fill out this feature report! - type: textarea id: feature-description attributes: label: Clear and concise description of the problem description: 'As a developer using xxxx package I want [goal / wish] so that [benefit]. If you intend to submit a PR for this issue, tell us in the description. Thanks!' validations: required: true - type: textarea id: suggested-solution attributes: label: Suggested solution description: 'In module [xy] we could provide following implementation...' validations: required: true - type: textarea id: alternative attributes: label: Alternative description: Clear and concise description of any alternative solutions or features you've considered. - type: textarea id: additional-context attributes: label: Additional context description: Any other context or screenshots about the feature request here. - type: checkboxes id: checkboxes attributes: label: Validations description: Before submitting the issue, please make sure you do the following options: - label: Follow our [Code of Conduct](https://github.com/nicepkg/vr360/blob/master/CODE_OF_CONDUCT.md) required: true - label: Read the [Contributing Guidelines](https://github.com/nicepkg/vr360/blob/master/CONTRIBUTING.md). required: true - label: Check that there isn't already an issue that request the same feature to avoid creating a duplicate. required: true ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ ### Description ### Additional context --- ### What is the purpose of this pull request? - [ ] Bug fix - [ ] New Feature - [ ] Documentation update - [ ] Other ### Before submitting the PR, please make sure you do the following - [ ] Read the [Contributing Guidelines](https://github.com/nicepkg/vr360/blob/master/CONTRIBUTING.md). - [ ] Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate. - [ ] Provide a description in this PR that addresses **what** the PR is solving, or reference the issue that it solves (e.g. `fixes #123`). - [ ] Ideally, include relevant tests that fail without this PR but pass with it. ================================================ FILE: .github/commit-convention.md ================================================ ## Git Commit Message Convention > This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular). #### TL;DR: Messages must be matched by the following regex: ```text /^(revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip)(\(.+\))?: .{1,50}/ ``` #### Examples Appears under "Features" header, `link` subheader: ``` feat(link): add `force` option ``` Appears under "Bug Fixes" header, `view` subheader, with a link to issue #28: ``` fix(view): handle keep-alive with aborted navigations close #28 ``` Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation: ``` perf: improve guard extraction BREAKING CHANGE: The 'beforeRouteEnter' option has been removed. ``` The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header. ``` revert: feat(compiler): add 'comments' option This reverts commit 667ecc1654a317a13331b17617d973392f415f02. ``` ### Full Message Format A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**: ``` ():